diff -r -u src/p_setup.c.orig src/p_setup.c
--- src/p_setup.c.orig	Sun Aug 23 15:05:17 1998
+++ src/p_setup.c	Tue Dec 26 17:03:27 2000
@@ -488,6 +488,7 @@
 			    int       append)
 {
     char	*c;
+    int		firstline = True;
 
     while ((c = strchr(line, '\n'))) {
 	if (c > line && c[-1] == '\r')
@@ -497,10 +498,11 @@
 	    fputs(q_string(line, re, q_str, qq_str), fp);
 	fprintf(fp, "%s\n", line);
 	append = False;
+	firstline = False;
 	line = c;
     }
 
-    if (*line != '\0') {
+    if (*line != '\0' || firstline) {
 	if (!append)
 	    fputs(q_string(line, re, q_str, qq_str), fp);
 	fprintf(fp, "%s", line);
@@ -575,16 +577,16 @@
 	    while ((buffer = server_read(server)) && !IS_DOT(buffer)) {
 		n = decode_qp(buffer, buffer + (*buffer == '.' ? 1 : 0),
 			      strlen(buffer), &soft, False);
-		if (n > 0) {
-		    buffer[n] = '\0';
-		    if (!append && IS_SIG_DELIM(buffer))
-			in_sig = True;
-		    if (quote_sig || !in_sig)
-			print_multi_line(fp, re, q_str, qq_str,
-					 buffer, append);
+
+		buffer[n] = '\0';
+		if (!append && IS_SIG_DELIM(buffer))
+		    in_sig = True;
+		if (quote_sig || !in_sig) {
+		    print_multi_line(fp, re, q_str, qq_str, buffer, append);
 		    if (!soft)
 			fputc('\n', fp);
 		}
+
 		append = soft;
 	    }
 	    if (append)
diff -r -u src/read.c.orig src/read.c
--- src/read.c.orig	Sat Nov 21 15:57:49 1998
+++ src/read.c	Tue Dec 26 17:03:27 2000
@@ -453,13 +453,11 @@
 	while (buffer && !IS_DOT(buffer) &&
 	       !IS_BOUNDARY(buffer, bound, len)) {
 	    n = decode_qp(buffer, buffer, strlen(buffer), &soft, False);
-	    if (n == 0)
-		append = soft;
-	    else if (n > 0) {
-		buffer[n] = '\0';
-		add_body_line_multi(buffer, re, f, dec_data, append);
-		append = soft;
-	    }
+
+	    buffer[n] = '\0';
+	    add_body_line_multi(buffer, re, f, dec_data, append);
+	    append = soft;
+
 	    buffer = server_read(server);
 	}
 	break;

