diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c
index 2e0ddc8e667a490fb6ed438e3849da693460893d..afbce860f04a63fbf914d6d2000ccaaa0c336761 100644
--- a/src/lib-sieve/sieve.c
+++ b/src/lib-sieve/sieve.c
@@ -580,7 +580,7 @@ int sieve_test(struct sieve_binary *sbin,
 	       const struct sieve_message_data *msgdata,
 	       const struct sieve_script_env *senv,
 	       struct sieve_error_handler *ehandler, struct ostream *stream,
-	       enum sieve_execute_flags flags, bool *keep)
+	       enum sieve_execute_flags flags)
 {
 	struct sieve_instance *svinst = sieve_binary_svinst(sbin);
 	struct sieve_result *result;
@@ -591,9 +591,6 @@ int sieve_test(struct sieve_binary *sbin,
 	pool = pool_alloconly_create("sieve execution", 4096);
 	sieve_execute_init(&eenv, svinst, pool, msgdata, senv, flags);
 
-	if (keep != NULL)
-		*keep = FALSE;
-
 	/* Create result object */
 	result = sieve_result_create(svinst, pool, &eenv);
 
@@ -602,10 +599,8 @@ int sieve_test(struct sieve_binary *sbin,
 
 	/* Print result if successful */
 	if (ret > 0) {
-		ret = (sieve_result_print(result, senv, stream, keep) ?
+		ret = (sieve_result_print(result, senv, stream, NULL) ?
 		       SIEVE_EXEC_OK : SIEVE_EXEC_FAILURE);
-	} else if (ret == 0) {
-		if (keep != NULL) *keep = TRUE;
 	}
 
 	/* Cleanup */
@@ -644,7 +639,7 @@ int sieve_execute(struct sieve_binary *sbin,
 		  const struct sieve_script_env *senv,
 		  struct sieve_error_handler *exec_ehandler,
 		  struct sieve_error_handler *action_ehandler,
-		  enum sieve_execute_flags flags, bool *keep)
+		  enum sieve_execute_flags flags)
 {
 	struct sieve_instance *svinst = sieve_binary_svinst(sbin);
 	struct sieve_result *result = NULL;
@@ -655,9 +650,6 @@ int sieve_execute(struct sieve_binary *sbin,
 	pool = pool_alloconly_create("sieve execution", 4096);
 	sieve_execute_init(&eenv, svinst, pool, msgdata, senv, flags);
 
-	if (keep != NULL)
-		*keep = FALSE;
-
 	/* Create result object */
 	result = sieve_result_create(svinst, pool, &eenv);
 
@@ -671,7 +663,7 @@ int sieve_execute(struct sieve_binary *sbin,
 	 */
 	if (ret > 0) {
 		/* Execute result */
-		ret = sieve_result_execute(result, TRUE, keep, action_ehandler);
+		ret = sieve_result_execute(result, TRUE, NULL, action_ehandler);
 	} else if (ret == SIEVE_EXEC_FAILURE) {
 		/* Perform implicit keep if script failed with a normal runtime
 		   error
@@ -679,7 +671,6 @@ int sieve_execute(struct sieve_binary *sbin,
 		switch (sieve_result_implicit_keep(result, action_ehandler,
 						   FALSE)) {
 		case SIEVE_EXEC_OK:
-			if (keep != NULL) *keep = TRUE;
 			break;
 		case SIEVE_EXEC_TEMP_FAILURE:
 			ret = SIEVE_EXEC_TEMP_FAILURE;
@@ -913,7 +904,7 @@ int sieve_multiscript_tempfail(struct sieve_multiscript **_mscript,
 
 int sieve_multiscript_finish(struct sieve_multiscript **_mscript,
 			     struct sieve_error_handler *action_ehandler,
-			     enum sieve_execute_flags flags, bool *keep)
+			     enum sieve_execute_flags flags)
 {
 	struct sieve_multiscript *mscript = *_mscript;
 	struct sieve_result *result = mscript->result;
@@ -945,8 +936,6 @@ int sieve_multiscript_finish(struct sieve_multiscript **_mscript,
 
 	sieve_result_finish(result, action_ehandler, (ret == SIEVE_EXEC_OK));
 
-	if (keep != NULL) *keep = mscript->keep;
-
 	/* Cleanup */
 	sieve_result_unref(&result);
 	sieve_execute_deinit(&mscript->exec_env);
diff --git a/src/lib-sieve/sieve.h b/src/lib-sieve/sieve.h
index 5f1fb128b76b56cebea5a17315ff6c5b083cb6f9..f4acafe910edfd24c0b2bafc8c100e8f36dab52c 100644
--- a/src/lib-sieve/sieve.h
+++ b/src/lib-sieve/sieve.h
@@ -133,7 +133,7 @@ int sieve_test(struct sieve_binary *sbin,
 	       const struct sieve_message_data *msgdata,
 	       const struct sieve_script_env *senv,
 	       struct sieve_error_handler *ehandler, struct ostream *stream,
-	       enum sieve_execute_flags flags, bool *keep);
+	       enum sieve_execute_flags flags);
 
 /*
  * Script execution
@@ -149,7 +149,7 @@ int sieve_execute(struct sieve_binary *sbin,
 		  const struct sieve_script_env *senv,
 		  struct sieve_error_handler *exec_ehandler,
 		  struct sieve_error_handler *action_ehandler,
-		  enum sieve_execute_flags flags, bool *keep);
+		  enum sieve_execute_flags flags);
 
 /*
  * Multiscript support
@@ -187,7 +187,7 @@ int sieve_multiscript_tempfail(struct sieve_multiscript **_mscript,
 			       enum sieve_execute_flags flags);
 int sieve_multiscript_finish(struct sieve_multiscript **_mscript,
 			     struct sieve_error_handler *action_ehandler,
-			     enum sieve_execute_flags flags, bool *keep);
+			     enum sieve_execute_flags flags);
 
 /*
  * Configured limits
diff --git a/src/plugins/imap-filter-sieve/imap-filter-sieve.c b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
index be339ccef202424d3aa0b8efc6a58b5a1ff3112e..eb68057d4f2d4c4dab8d4579502a6b3c48a704af 100644
--- a/src/plugins/imap-filter-sieve/imap-filter-sieve.c
+++ b/src/plugins/imap-filter-sieve/imap-filter-sieve.c
@@ -880,8 +880,7 @@ imap_sieve_filter_run_scripts(struct imap_filter_sieve_context *sctx,
 			    "cumulative resource usage limit exceeded");
 		ret = SIEVE_EXEC_RESOURCE_LIMIT;
 	} else {
-		ret = sieve_multiscript_finish(&mscript, ehandler, exflags,
-					       NULL);
+		ret = sieve_multiscript_finish(&mscript, ehandler, exflags);
 	}
 
 	/* Don't log additional messages about compile failure */
diff --git a/src/plugins/imapsieve/imap-sieve.c b/src/plugins/imapsieve/imap-sieve.c
index 63383bfafd7e47ecdf0d40508b31402a750f4014..480d3847bab48f501e14ae6ef1d62bbe6e6cb73a 100644
--- a/src/plugins/imapsieve/imap-sieve.c
+++ b/src/plugins/imapsieve/imap-sieve.c
@@ -801,8 +801,7 @@ imap_sieve_run_scripts(struct imap_sieve_run *isrun,
 			    "cumulative resource usage limit exceeded");
 		ret = SIEVE_EXEC_RESOURCE_LIMIT;
 	} else {
-		ret = sieve_multiscript_finish(&mscript, ehandler, exflags,
-					       NULL);
+		ret = sieve_multiscript_finish(&mscript, ehandler, exflags);
 	}
 
 	/* Don't log additional messages about compile failure */
diff --git a/src/plugins/lda-sieve/lda-sieve-plugin.c b/src/plugins/lda-sieve/lda-sieve-plugin.c
index fc0db17fad01706087c06cc6017c0ea3a0ecd55b..98b5b2f2ebb9e55ed0c835ecf28b92881096bfd7 100644
--- a/src/plugins/lda-sieve/lda-sieve-plugin.c
+++ b/src/plugins/lda-sieve/lda-sieve-plugin.c
@@ -667,8 +667,8 @@ static int lda_sieve_execute_scripts(struct lda_sieve_run_context *srctx)
 		ret = sieve_multiscript_tempfail(&mscript, exec_ehandler,
 						 exflags);
 	} else {
-		ret = sieve_multiscript_finish(&mscript, exec_ehandler, exflags,
-					       NULL);
+		ret = sieve_multiscript_finish(&mscript, exec_ehandler,
+					       exflags);
 	}
 
 	/* Don't log additional messages about compile failure */
diff --git a/src/sieve-tools/sieve-filter.c b/src/sieve-tools/sieve-filter.c
index ca304756d920fdecac4c50ff002c6569dfdcae73..2b98fe675cf5f13982e0fcb8b83405c4e376c5fc 100644
--- a/src/sieve-tools/sieve-filter.c
+++ b/src/sieve-tools/sieve-filter.c
@@ -138,7 +138,7 @@ static int filter_message(struct sieve_filter_context *sfctx, struct mail *mail)
 			   date, size, str_sanitize(subject, 40));
 
 		ret = sieve_execute(sbin, &msgdata, senv, ehandler, ehandler,
-				    exflags, NULL);
+				    exflags);
 	} else {
 		o_stream_nsend_str(
 			sfctx->teststream,
@@ -152,7 +152,7 @@ static int filter_message(struct sieve_filter_context *sfctx, struct mail *mail)
 					str_sanitize(subject, 40)));
 
 		ret = sieve_test(sbin, &msgdata, senv, ehandler,
-				 sfctx->teststream, exflags, NULL);
+				 sfctx->teststream, exflags);
 	}
 
 	/* Handle message in source folder */
diff --git a/src/sieve-tools/sieve-test.c b/src/sieve-tools/sieve-test.c
index c553ace891bbbab6013e942c55d3250c26e25bff..c5d7523d2f83df71f3fa1abb7c79a450ff0f7f72 100644
--- a/src/sieve-tools/sieve-test.c
+++ b/src/sieve-tools/sieve-test.c
@@ -362,12 +362,11 @@ int main(int argc, char **argv)
 			/* Execute/Test script */
 			if (execute) {
 				ret = sieve_execute(sbin, &msgdata, &scriptenv,
-						    ehandler, ehandler, exflags,
-						    NULL);
+						    ehandler, ehandler,
+						    exflags);
 			} else {
 				ret = sieve_test(sbin, &msgdata, &scriptenv,
-						 ehandler, teststream, exflags,
-						 NULL);
+						 ehandler, teststream, exflags);
 			}
 		} else {
 			/* Multiple scripts */
@@ -442,7 +441,7 @@ int main(int argc, char **argv)
 			}
 
 			result = sieve_multiscript_finish(
-				&mscript, ehandler, exflags, NULL);
+				&mscript, ehandler, exflags);
 
 			ret = (ret > 0 ? result : ret);
 		}
diff --git a/src/testsuite/testsuite-script.c b/src/testsuite/testsuite-script.c
index 39b912a47b6d50a3196655671bc5b306c16e0150..3cfaafab02bc121bfb6fdb488f2b9f626f8e1312 100644
--- a/src/testsuite/testsuite-script.c
+++ b/src/testsuite/testsuite-script.c
@@ -251,5 +251,5 @@ bool testsuite_script_multiscript(const struct sieve_runtime_env *renv,
 	}
 
 	return (sieve_multiscript_finish(&mscript, testsuite_log_ehandler,
-					 0, NULL) > 0 && result);
+					 0) > 0 && result);
 }