diff --git a/src/lib-sieve/sieve-message.c b/src/lib-sieve/sieve-message.c
index 10d100a3b64c364f21efccb09c8e8607caa5ea18..95d0eb50a02b11cb32e36be1c44bc68e4e9e6c22 100644
--- a/src/lib-sieve/sieve-message.c
+++ b/src/lib-sieve/sieve-message.c
@@ -1205,12 +1205,12 @@ static int sieve_message_parts_add_missing
 						struct sieve_message_part *child = parent->children;
 						while (child->next != NULL && child != body_part)
 							child = child->next;
-						if (child->next == NULL)
+						if (child != body_part)
 							child->next = body_part;
 					}
 				}
-				last_part = body_part;
 			}
+			last_part = body_part;
 
 			/* If this is message/rfc822 content, retain the enveloping part for
 			 * storing headers as content.