diff --git a/src/lib-sieve/sieve-result.c b/src/lib-sieve/sieve-result.c
index a6d5e1a5a4138f02ad6baed60cff9e762fdab142..eb720e3202bcf99f4b3583afc0a786e976e8a308 100644
--- a/src/lib-sieve/sieve-result.c
+++ b/src/lib-sieve/sieve-result.c
@@ -912,10 +912,13 @@ static bool _sieve_result_implicit_keep
 	void *tr_context = NULL;
 	struct sieve_action act_keep;
 	
-	if ( rollback )
+	if ( rollback ) {
 		act_keep = result->failure_action;
-	else 
+		act_keep.mail = NULL;
+	} else {
 		act_keep = result->keep_action;
+		act_keep.mail = sieve_message_get_mail(result->action_env.msgctx);
+	}
 	
 	/* If keep is a non-action, return right away */
 	if ( act_keep.def == NULL ) return TRUE; 
diff --git a/tests/extensions/editheader/addheader.svtest b/tests/extensions/editheader/addheader.svtest
index 27fe56863d6e24fbdeb96decb10aa3acede5fb7b..c0da0ff552d920273e6a1fd25612d3251854bf6f 100644
--- a/tests/extensions/editheader/addheader.svtest
+++ b/tests/extensions/editheader/addheader.svtest
@@ -477,5 +477,51 @@ This is somewhat longer header content
 	}
 }
 
+test_result_reset;
+
+test_set "message" "${message}";
+test "Addheader - implicit keep" {
+	if size :over 76 {
+		test_fail "original message is longer than 76 bytes?!";
+	}
+
+	addheader "X-Some-Header" "Header content";
+
+	if not test_result_execute {
+		test_fail "failed to execute result";
+	}
+
+	if not test_message :folder "INBOX" 0 {
+		test_fail "message not stored";
+	}
+
+	if not size :over 76 {
+		test_fail "stored mail is not larger";
+	}
+	
+	if size :over 107 {
+		test_fail "stored mail is too large";
+	}
+
+	if size :under 100 {
+		test_fail "stored mail is too small";
+	}
+
+	if not header :is "subject" "Frop!" {
+		test_fail "original subject header not retained in stored message";
+	}
+
+	if not exists "x-some-header" {
+		test_fail "header not added to stored message";
+	}
+
+	if not header :is "x-some-header" "Header content" {
+		test_fail "wrong content added to stored message";
+	}
+
+	if not body :matches "Frop!*" {
+		test_fail "body not retained in stored mail";
+	}
+}
 
 
diff --git a/tests/extensions/editheader/deleteheader.svtest b/tests/extensions/editheader/deleteheader.svtest
index 85254a5e7e0108c784f62678e02518666a339a9d..0d476b3bb20ef88e98fba3cc8437dca5dfe49cf3 100644
--- a/tests/extensions/editheader/deleteheader.svtest
+++ b/tests/extensions/editheader/deleteheader.svtest
@@ -610,6 +610,44 @@ test "Deleteheader - :index :last" {
 	}
 }
 
+test_result_reset;
+test_set "message" "${message}";
+test "Deleteheader - implicit keep" {
+	deleteheader "X-D";
+
+	if not test_result_execute {
+		test_fail "failed to execute result";
+	}
+
+	if not test_message :folder "INBOX" 0 {
+		test_fail "message not stored";
+	}
+
+	if not header :is "subject" "Frop!" {
+		test_fail "original subject header not retained in stored mail";
+	}
+
+	if not header :is "X-B" "omdat dit anders" {
+		test_fail "original X-B header not retained in stored mail";
+	}
+
+	if not header :is "X-C" "niet via e-mail versturen" {
+		test_fail "original X-C header not retained in stored mail";
+	}
+
+	if exists "X-D" {
+		test_fail "X-D header not deleted in stored mail";
+	}
+
+	if not body :matches "Frop!*" {
+		test_fail "body not retained in stored mail";
+	}
+}
+
+/*
+ *
+ */
+
 test_result_reset;
 
 test_set "message" text:
@@ -846,7 +884,7 @@ Frop!
 .
 ;
 
-test "Deleteheader - :matches" {
+test "Deleteheader - folded" {
 	deleteheader "X-A";
 
 	if exists "X-A" {