diff -Nru a/camel/camel-mime-parser.c b/camel/camel-mime-parser.c
--- a/camel/camel-mime-parser.c	2008-03-10 22:57:44.000000000 +0000
+++ b/camel/camel-mime-parser.c	2008-03-10 22:56:37.000000000 +0000
@@ -51,7 +51,7 @@
 #define c(x) 
 #define d(x) 
 
-/*#define PRESERVE_HEADERS*/
+#define PRESERVE_HEADERS
 
 /*#define PURIFY*/
 
@@ -1227,11 +1227,8 @@
 					h(printf("got line part: '%.*s'\n", inptr-1-start, start));
 					/* got a line, strip and add it, process it */
 					s->midline = FALSE;
-#ifdef PRESERVE_HEADERS
-					header_append(s, start, inptr);
-#else
 					header_append(s, start, inptr-1);
-#endif
+
 					/* check for end of headers */
 					if (s->outbuf == s->outptr)
 						goto header_done;
@@ -1239,6 +1236,13 @@
 					/* check for continuation/compress headers, we have atleast 1 char here to work with */
 					if (inptr[0] ==  ' ' || inptr[0] == '\t') {
 						h(printf("continuation\n"));
+
+#ifdef PRESERVE_HEADERS
+						if (inptr-1 >= start) {
+							start=inptr-1;
+							header_append(s, start, inptr);
+						}
+#endif
 #ifndef PRESERVE_HEADERS
 						/* TODO: this wont catch multiple space continuation across a read boundary, but
 						   that is assumed rare, and not fatal anyway */
@@ -1250,11 +1254,6 @@
 #endif
 					} else {
 						/* otherwise, complete header, add it */
-#ifdef PRESERVE_HEADERS
-						s->outptr--;
-						if (s->outptr[-1] == '\r')
-							s->outptr--;
-#endif
 						s->outptr[0] = 0;
 				
 						h(printf("header '%s' at %d\n", s->outbuf, (int)s->header_start));
