diff --git a/src/lib-sieve/cmd-keep.c b/src/lib-sieve/cmd-keep.c
index bb4d0397dbbe179186fa7c9eac5bfda6cc5873c2..64e2ca7b5335dca586d3f5f5a4f9d9b4070f6f61 100644
--- a/src/lib-sieve/cmd-keep.c
+++ b/src/lib-sieve/cmd-keep.c
@@ -66,8 +66,11 @@ static bool opc_keep_execute
 {	
 	printf(">> KEEP\n");
 	
-	sieve_act_store_add_to_result(renv, "INBOX");
-	
+	if ( renv->mailenv != NULL && renv->mailenv->inbox != NULL )
+		sieve_act_store_add_to_result(renv,	renv->mailenv->inbox);
+	else
+		sieve_act_store_add_to_result(renv,	"INBOX");
+		
 	return TRUE;
 }
 
diff --git a/src/lib-sieve/sieve.c b/src/lib-sieve/sieve.c
index b3207056b719716975aeb414623b8b626dd251e4..7affe5fe7e376270f77883dac955df670d2317c2 100644
--- a/src/lib-sieve/sieve.c
+++ b/src/lib-sieve/sieve.c
@@ -151,14 +151,15 @@ void sieve_dump(struct sieve_binary *binary)
 }
 
 bool sieve_test
-	(struct sieve_binary *binary, const struct sieve_message_data *msgdata) 
+	(struct sieve_binary *binary, const struct sieve_message_data *msgdata,
+		const struct sieve_mail_environment *menv) 	
 {
 	struct sieve_result *sres = sieve_result_create();
 	struct sieve_interpreter *interp = sieve_interpreter_create(binary);			
 	bool result = TRUE;
 							
 	printf("Code Execute:\n\n");
-	result = sieve_interpreter_run(interp, msgdata, NULL, &sres);
+	result = sieve_interpreter_run(interp, msgdata, menv, &sres);
 	
 	if ( result ) {
 		printf("Script executed successfully.\n\n");
diff --git a/src/lib-sieve/sieve.h b/src/lib-sieve/sieve.h
index 6f70a0dd488e5e4baa48c06ed419906ff4b77e98..ffb80788163517e1f80b8d3b47b2a93e25e3292a 100644
--- a/src/lib-sieve/sieve.h
+++ b/src/lib-sieve/sieve.h
@@ -15,6 +15,8 @@ struct sieve_message_data {
 };
 
 struct sieve_mail_environment {
+	const char *inbox;
+	
 	/* Interface for sending mail (callbacks if you like) */
 	int (*send_rejection)
 		(const struct sieve_message_data *msgdata, const char *recipient, 
@@ -29,7 +31,9 @@ void sieve_deinit(void);
 struct sieve_binary *sieve_compile(int fd, bool verbose);
 void sieve_dump(struct sieve_binary *binary);
 bool sieve_test
-	(struct sieve_binary *binary, const struct sieve_message_data *msgdata); 
+	(struct sieve_binary *binary, const struct sieve_message_data *msgdata, 
+		const struct sieve_mail_environment *menv);
+
 bool sieve_execute
 	(struct sieve_binary *binary, const struct sieve_message_data *msgdata,
 		const struct sieve_mail_environment *menv);
diff --git a/src/sieve-bin/sieve-exec.c b/src/sieve-bin/sieve-exec.c
index 0682e4fbfc6cdc4cf1c9c1a43226ab7d0595d4ec..1088480bc4c2fb0538589f2e97adc22a8e4ca7f7 100644
--- a/src/sieve-bin/sieve-exec.c
+++ b/src/sieve-bin/sieve-exec.c
@@ -97,6 +97,7 @@ int main(int argc, char **argv)
 	(void)mail_get_first_header(mailr->mail, "Message-ID", &msgdata.id);
 	
 	memset(&mailenv, 0, sizeof(mailenv));
+	mailenv.inbox = "INBOX";
 	mailenv.send_forward = sieve_send_forward;
 	mailenv.send_rejection = sieve_send_rejection;
 	
diff --git a/src/sieve-bin/sieve-test.c b/src/sieve-bin/sieve-test.c
index 7d8a00ca578ef4ea84a868ce492b82a2409e7859..fd623c3fcbed52fc81469391b788dd98c171e058 100644
--- a/src/sieve-bin/sieve-test.c
+++ b/src/sieve-bin/sieve-test.c
@@ -18,7 +18,7 @@ int main(int argc, char **argv)
 	struct mail_raw *mailr;
 	struct sieve_binary *sbin;
 	struct sieve_message_data msgdata;
-
+	struct sieve_mail_environment mailenv;
 	bin_init();
 
 	if ( argc < 2 ) {
@@ -76,9 +76,14 @@ int main(int argc, char **argv)
 	msgdata.to_address = "sirius+sieve@rename-it.nl";
 	msgdata.auth_user = "stephan";
 	(void)mail_get_first_header(mailr->mail, "Message-ID", &msgdata.id);
+
+	memset(&mailenv, 0, sizeof(mailenv));
+    mailenv.inbox = "INBOX";
+    mailenv.send_forward = NULL;
+    mailenv.send_rejection = NULL;
 	
 	/* Run the test */
-	(void) sieve_test(sbin, &msgdata);
+	(void) sieve_test(sbin, &msgdata, &mailenv);
 
 	sieve_deinit();