diff --git a/src/lib-sieve/sieve-generator.c b/src/lib-sieve/sieve-generator.c
index 755701510f135df9d1616037f17368b74223bfdf..25c9ee823080afd0230e1bd6ec8a9ce8a988d264 100644
--- a/src/lib-sieve/sieve-generator.c
+++ b/src/lib-sieve/sieve-generator.c
@@ -427,17 +427,20 @@ bool sieve_generator_run
 	
 		/* Load */
 		if ( ext->def != NULL && ext->def->generator_load != NULL &&
-			!ext->def->generator_load(ext, &gentr->genenv) )
-			return FALSE;
+			!ext->def->generator_load(ext, &gentr->genenv) ) {
+			result = FALSE;
+		}
 	}
 
 	/* Generate code */
 	
-	if ( !sieve_generate_block
-		(&gentr->genenv, sieve_ast_root(gentr->genenv.ast))) 
-		result = FALSE;
-	else if ( topmost ) 
-		sieve_binary_activate(*sbin);
+	if ( result ) {
+		if ( !sieve_generate_block
+			(&gentr->genenv, sieve_ast_root(gentr->genenv.ast))) 
+			result = FALSE;
+		else if ( topmost ) 
+			sieve_binary_activate(*sbin);
+	}
 
 	/* Cleanup */