diff --git a/src/lib-sieve/sieve-result.c b/src/lib-sieve/sieve-result.c
index 6459f3a56705d3778c1cd8cecd8735ee5df43a7a..e819b1987cd1a7de7b4a21d402c7330af8c407dc 100644
--- a/src/lib-sieve/sieve-result.c
+++ b/src/lib-sieve/sieve-result.c
@@ -1371,6 +1371,8 @@ int sieve_result_execute
 			switch ((ret=_sieve_result_implicit_keep
 				(result, ( status != SIEVE_EXEC_OK ))) ) {
 			case SIEVE_EXEC_OK:
+				if ( result_status == SIEVE_EXEC_TEMP_FAILURE )
+					result_status = SIEVE_EXEC_FAILURE;
 				break;
 			case SIEVE_EXEC_TEMP_FAILURE:
 				if (!result->executed) {