diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c
index 35644899371e9e4df85ea5280cf88757a0bb01e2..ab51ad67d31cad10bdb503c36ca81ed128ae5c7c 100644
--- a/src/lib-sieve/sieve.c
+++ b/src/lib-sieve/sieve.c
@@ -714,14 +714,16 @@ bool sieve_multiscript_run
 			sieve_multiscript_execute(mscript,
 				action_ehandler, flags, &mscript->keep);
 		}
-		mscript->active =
-			( mscript->active && mscript->keep && mscript->status > 0 );
+		if ( !mscript->keep )
+			mscript->active = FALSE;
 	}
 
-	if ( mscript->status <= 0 )
+	if ( !mscript->active || mscript->status <= 0 ) {
+		mscript->active = FALSE;
 		return FALSE;
+	}
 
-	return mscript->active;
+	return TRUE;
 }
 
 bool sieve_multiscript_will_discard