diff --git a/src/lib-sieve/sieve-interpreter.c b/src/lib-sieve/sieve-interpreter.c
index 8a580016e71af8fd0bcf1279c51e84cc7b0e871b..aeecfd03fc5d8ab50dcb5134bf2d8d93de2fa5ba 100644
--- a/src/lib-sieve/sieve-interpreter.c
+++ b/src/lib-sieve/sieve-interpreter.c
@@ -170,6 +170,17 @@ struct sieve_error_handler *sieve_interpreter_get_error_handler
 	return interp->ehandler;
 }
 
+/* Do not use this function for normal sieve extensions. This is intended for
+ * the testsuite only.
+ */
+void sieve_interpreter_set_result
+(struct sieve_interpreter *interp, struct sieve_result *result)
+{
+	sieve_result_unref(&interp->runenv.result);
+	interp->runenv.result = result;
+	sieve_result_ref(result);
+}
+
 /* 
  * Error handling 
  */
diff --git a/src/lib-sieve/sieve-interpreter.h b/src/lib-sieve/sieve-interpreter.h
index c2d53b28ca959cd1c612dd1b59b9a210654342c1..61c5eda7d18f47d45e98497bdf47dd07ce28851d 100644
--- a/src/lib-sieve/sieve-interpreter.h
+++ b/src/lib-sieve/sieve-interpreter.h
@@ -56,6 +56,12 @@ struct sieve_script *sieve_interpreter_script
 struct sieve_error_handler *sieve_interpreter_get_error_handler
 	(struct sieve_interpreter *interp);
 
+/* Do not use this function for normal sieve extensions. This is intended for
+ * the testsuite only.
+ */
+void sieve_interpreter_set_result
+	(struct sieve_interpreter *interp, struct sieve_result *result);
+
 /*
  * Program flow
  */
diff --git a/src/testsuite/Makefile.am b/src/testsuite/Makefile.am
index 97c04fcab9303c21ebe9c17dfd0f16d676867a05..fff2bc7899ecf48591a3e105beb998a5a97d9c20 100644
--- a/src/testsuite/Makefile.am
+++ b/src/testsuite/Makefile.am
@@ -37,6 +37,7 @@ commands = \
 	cmd-test.c \
 	cmd-test-fail.c \
 	cmd-test-set.c \
+	cmd-test-result-reset.c \
 	cmd-test-result-print.c \
 	cmd-test-message.c
 
diff --git a/src/testsuite/cmd-test-result-reset.c b/src/testsuite/cmd-test-result-reset.c
new file mode 100644
index 0000000000000000000000000000000000000000..7e2f16dcb83fc3926c4e0b63ef4f800ca710097f
--- /dev/null
+++ b/src/testsuite/cmd-test-result-reset.c
@@ -0,0 +1,84 @@
+/* Copyright (c) 2002-2009 Dovecot Sieve authors, see the included COPYING file
+ */
+
+#include "sieve-common.h"
+#include "sieve-script.h"
+#include "sieve-commands.h"
+#include "sieve-validator.h"
+#include "sieve-generator.h"
+#include "sieve-interpreter.h"
+#include "sieve-code.h"
+#include "sieve-binary.h"
+#include "sieve-dump.h"
+#include "sieve.h"
+
+#include "testsuite-common.h"
+#include "testsuite-result.h"
+#include "testsuite-smtp.h"
+
+/*
+ * Test_result_execute command
+ *
+ * Syntax:   
+ *   test_result_execute
+ */
+
+static bool cmd_test_result_reset_generate
+	(const struct sieve_codegen_env *cgenv, struct sieve_command_context *ctx);
+
+const struct sieve_command cmd_test_result_reset = { 
+	"test_result_reset", 
+	SCT_COMMAND, 
+	0, 0, FALSE, FALSE,
+	NULL, NULL, NULL,
+	cmd_test_result_reset_generate, 
+	NULL 
+};
+
+/* 
+ * Operation 
+ */
+
+static int cmd_test_result_reset_operation_execute
+	(const struct sieve_operation *op, 
+		const struct sieve_runtime_env *renv, sieve_size_t *address);
+
+const struct sieve_operation test_result_reset_operation = { 
+	"TEST_RESULT_RESET",
+	&testsuite_extension, 
+	TESTSUITE_OPERATION_TEST_RESULT_RESET,
+	NULL, 
+	cmd_test_result_reset_operation_execute 
+};
+
+/* 
+ * Code generation 
+ */
+
+static bool cmd_test_result_reset_generate
+(const struct sieve_codegen_env *cgenv, 
+	struct sieve_command_context *tst ATTR_UNUSED)
+{
+	sieve_operation_emit_code(cgenv->sbin, &test_result_reset_operation);
+
+	return TRUE;
+}
+
+/*
+ * Intepretation
+ */
+
+static int cmd_test_result_reset_operation_execute
+(const struct sieve_operation *op ATTR_UNUSED,
+	const struct sieve_runtime_env *renv,
+	sieve_size_t *address ATTR_UNUSED)
+{
+	testsuite_result_reset(renv);
+	testsuite_smtp_reset();
+
+	return SIEVE_EXEC_OK;
+}
+
+
+
+
diff --git a/src/testsuite/ext-testsuite.c b/src/testsuite/ext-testsuite.c
index 43f92e231e7df46c435efa4d2ae0bb043967f2a1..26baec85c81f5b6eb80cad4ba85899272e206bec 100644
--- a/src/testsuite/ext-testsuite.c
+++ b/src/testsuite/ext-testsuite.c
@@ -61,6 +61,7 @@ const struct sieve_operation *testsuite_operations[] = {
 	&test_error_operation,
 	&test_result_operation,
 	&test_result_execute_operation,
+	&test_result_reset_operation,
 	&test_result_print_operation,
 	&test_message_smtp_operation,
 	&test_message_mailbox_operation
@@ -110,6 +111,7 @@ static bool ext_testsuite_validator_load(struct sieve_validator *valdtr)
 	sieve_validator_register_command(valdtr, &cmd_test_fail);
 	sieve_validator_register_command(valdtr, &cmd_test_set);
 	sieve_validator_register_command(valdtr, &cmd_test_result_print);
+	sieve_validator_register_command(valdtr, &cmd_test_result_reset);
 	sieve_validator_register_command(valdtr, &cmd_test_message);
 
 	sieve_validator_register_command(valdtr, &tst_test_script_compile);
diff --git a/src/testsuite/testsuite-common.h b/src/testsuite/testsuite-common.h
index d5c89904c835f9c0eb3428a462f9664c6209b5ce..a7f6be0efe2d4383d6932de41d9166dac124ca4b 100644
--- a/src/testsuite/testsuite-common.h
+++ b/src/testsuite/testsuite-common.h
@@ -41,6 +41,7 @@ bool testsuite_generator_context_initialize(struct sieve_generator *gentr);
 extern const struct sieve_command cmd_test;
 extern const struct sieve_command cmd_test_fail;
 extern const struct sieve_command cmd_test_set;
+extern const struct sieve_command cmd_test_result_reset;
 extern const struct sieve_command cmd_test_result_print;
 extern const struct sieve_command cmd_test_message;
 
@@ -68,6 +69,7 @@ enum testsuite_operation_code {
 	TESTSUITE_OPERATION_TEST_ERROR,
 	TESTSUITE_OPERATION_TEST_RESULT,
 	TESTSUITE_OPERATION_TEST_RESULT_EXECUTE,
+	TESTSUITE_OPERATION_TEST_RESULT_RESET,
 	TESTSUITE_OPERATION_TEST_RESULT_PRINT,
 	TESTSUITE_OPERATION_TEST_MESSAGE_SMTP,
 	TESTSUITE_OPERATION_TEST_MESSAGE_MAILBOX
@@ -82,6 +84,7 @@ extern const struct sieve_operation test_script_run_operation;
 extern const struct sieve_operation test_error_operation;
 extern const struct sieve_operation test_result_operation;
 extern const struct sieve_operation test_result_execute_operation;
+extern const struct sieve_operation test_result_reset_operation;
 extern const struct sieve_operation test_result_print_operation;
 extern const struct sieve_operation test_message_smtp_operation;
 extern const struct sieve_operation test_message_mailbox_operation;
diff --git a/src/testsuite/testsuite-result.c b/src/testsuite/testsuite-result.c
index a1e47a84cfe7752ea0c77eeb4b12b5bbd649b9c9..9cbaf54786778d8cb3081793f7cb54d4a956a431 100644
--- a/src/testsuite/testsuite-result.c
+++ b/src/testsuite/testsuite-result.c
@@ -28,13 +28,15 @@ void testsuite_result_deinit(void)
 	}
 }
 
-void testsuite_result_reset(void)
+void testsuite_result_reset
+(const struct sieve_runtime_env *renv)
 {
 	if ( _testsuite_result != NULL ) {
 		sieve_result_unref(&_testsuite_result);
 	}
 
-	_testsuite_result = sieve_result_create(testsuite_log_ehandler);;
+	_testsuite_result = sieve_result_create(testsuite_log_ehandler);
+	sieve_interpreter_set_result(renv->interp, _testsuite_result);
 }
 
 struct sieve_result *testsuite_result_get(void)
@@ -52,7 +54,6 @@ struct sieve_result_iterate_context *testsuite_result_iterate_init(void)
 
 bool testsuite_result_execute(const struct sieve_runtime_env *renv)
 {
-	struct sieve_script_env scriptenv;
 	int ret;
 
 	if ( _testsuite_result == NULL ) {
@@ -63,18 +64,6 @@ bool testsuite_result_execute(const struct sieve_runtime_env *renv)
 
 	testsuite_log_clear_messages();
 
-	/* Compose script execution environment * /
-	memset(&scriptenv, 0, sizeof(scriptenv));
-	scriptenv.default_mailbox = "INBOX";
-	scriptenv.namespaces = NULL;
-	scriptenv.username = "user";
-	scriptenv.hostname = "host.example.com";
-	scriptenv.postmaster_address = "postmaster@example.com";
-	scriptenv.smtp_open = NULL;
-	scriptenv.smtp_close = NULL;
-	scriptenv.duplicate_mark = NULL;
-	scriptenv.duplicate_check = NULL;*/
-	
 	/* Execute the result */	
 	ret=sieve_result_execute
 		(_testsuite_result, renv->msgdata, renv->scriptenv, NULL);
diff --git a/src/testsuite/testsuite-result.h b/src/testsuite/testsuite-result.h
index 34b1c495c074cd3b66c8310b08a7e9b62b2f268a..9b288a3d5b861a18e62c01e85dddb0c126f2ffe1 100644
--- a/src/testsuite/testsuite-result.h
+++ b/src/testsuite/testsuite-result.h
@@ -7,7 +7,8 @@
 void testsuite_result_init(void);
 void testsuite_result_deinit(void);
 
-void testsuite_result_reset(void);
+void testsuite_result_reset    
+	(const struct sieve_runtime_env *renv);
 
 struct sieve_result *testsuite_result_get(void);
 
diff --git a/src/testsuite/tst-test-script-run.c b/src/testsuite/tst-test-script-run.c
index 5011d63ab128f91cd45cccb5040e1aebd3aba459..111e15225d5b49c04b5393d8d36a8f4661ce9c69 100644
--- a/src/testsuite/tst-test-script-run.c
+++ b/src/testsuite/tst-test-script-run.c
@@ -181,7 +181,7 @@ static int tst_test_script_run_operation_execute
 
 	/* Reset result object */
 	if ( !append_result ) 
-		testsuite_result_reset();
+		testsuite_result_reset(renv);
 
 	/* Run script */
 	result = testsuite_script_run(renv);
diff --git a/tests/extensions/enotify/mailto.svtest b/tests/extensions/enotify/mailto.svtest
index 7ccb682abfe2ba30428c43d3d77f87fbab864f1a..5202746b4fabcb33e82f6ce4a25297cc721f34a7 100644
--- a/tests/extensions/enotify/mailto.svtest
+++ b/tests/extensions/enotify/mailto.svtest
@@ -38,6 +38,8 @@ test "Simple" {
  * Multiple recipients
  */
 
+test_result_reset;
+
 test_set "message" text:
 From: stephan@rename-it.nl
 To: nico@vestingbar.nl
@@ -54,7 +56,7 @@ test "Multiple recipients" {
 		test_fail "failed to execute notify";
 	}
 
-	test_message :smtp 1;
+	test_message :smtp 0;
 
 	if not address :is "to" "timo@example.com" {
 		test_fail "first To address missing";
@@ -80,13 +82,13 @@ test "Multiple recipients" {
 		test_fail "subject header set incorrectly";
 	}
 
-	test_message :smtp 2;
+	test_message :smtp 1;
 
 	if not header :matches "Auto-Submitted" "auto-notified*" {
 		test_fail "auto-submitted header not found for second message";
 	}
 
-	test_message :smtp 3;
+	test_message :smtp 2;
 
 	if not header :matches "Auto-Submitted" "auto-notified*" {
 		test_fail "auto-submitted header not found for third message";