diff --git a/src/lib-sieve/rfc2822.c b/src/lib-sieve/rfc2822.c
index ec7fad85ef917515741d58bcbfa7595c67743740..803794fccdadbcc4fe4be043d5458d6ab6eb800c 100644
--- a/src/lib-sieve/rfc2822.c
+++ b/src/lib-sieve/rfc2822.c
@@ -142,22 +142,22 @@ void rfc2822_header_field_write
 		
 		/* Existing newline ? */
 		if ( nlp != NULL ) {
-			/* Replace any sort of newline with proper CRLF */
+			/* Replace any sort of newline with LF */
 			while ( *bp == '\r' || *bp == '\n' )
 				bp++;
 			
 			fwrite(sp, nlp-sp, 1, f);
 			
 			if ( *bp != '\0' && *bp != ' ' && *bp != '\t' )
-				fwrite("\r\n\t", 3, 1, f);
+				fwrite("\n\t", 2, 1, f);
 			else
-				fwrite("\r\n", 2, 1, f);
+				fwrite("\n", 1, 1, f);
 				
 			sp = bp;
 		} else {
 			/* Insert newline at last whitespace within the max_line limit */
 			fwrite(sp, wp-sp, 1, f);
-			fwrite("\r\n", 2, 1, f);
+			fwrite("\n", 1, 1, f);
 			sp = wp;
 		}
 		
@@ -166,8 +166,10 @@ void rfc2822_header_field_write
 		nlp = NULL;
 	}
 	
-	fwrite(sp, bp-sp, 1, f);
-	fwrite("\r\n", 2, 1, f);
+	if ( bp != sp ) {
+		fwrite(sp, bp-sp, 1, f);
+		fwrite("\n", 1, 1, f);
+	}
 }
 
 void rfc2822_header_field_printf