diff --git a/sieve/tests/actions.sieve b/sieve/tests/actions.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..9fd9b6b32e66e18c962ff89b1247c7760592b2dc
--- /dev/null
+++ b/sieve/tests/actions.sieve
@@ -0,0 +1,13 @@
+if address :contains "to" "vestingbar" {
+	redirect "stephan@example.com";
+	keep;
+} else {
+	discard;
+}
+
+redirect "stephan@rename-it.nl";
+redirect "nico@example.nl";
+redirect "stephan@example.com";
+
+keep;
+discard;
diff --git a/src/lib-sieve/cmd-discard.c b/src/lib-sieve/cmd-discard.c
index eb3cd183419dd9c317a5a4e624a611e3477c5261..660dd8e6ea46a06423cfec644a0a7dd74fe2aedf 100644
--- a/src/lib-sieve/cmd-discard.c
+++ b/src/lib-sieve/cmd-discard.c
@@ -42,6 +42,18 @@ const struct sieve_opcode cmd_discard_opcode = {
 	opc_discard_execute 
 };
 
+/* Discard action */
+
+static int act_discard_execute
+	(const struct sieve_action *action,	const struct sieve_action_exec_env *aenv, 
+		void *context);
+		
+const struct sieve_action act_discard = {
+	"discard",
+	NULL, NULL, NULL,
+	act_discard_execute
+};
+
 /*
  * Generation
  */
@@ -66,7 +78,22 @@ static bool opc_discard_execute
 {	
 	printf(">> DISCARD\n");
 	
+	sieve_result_add_action(renv->result, renv, &act_discard, NULL);
+	
 	return TRUE;
 }
 
+/*
+ * Action
+ */
+ 
+static int act_discard_execute
+(const struct sieve_action *action ATTR_UNUSED, 
+	const struct sieve_action_exec_env *aenv, void *context)
+{  
+	
+	return 0;
+}
+
+
 
diff --git a/src/lib-sieve/cmd-keep.c b/src/lib-sieve/cmd-keep.c
index 68b7599f3cdf59688b08ff6577d3c949a428a191..4acbd98eb275ff5aba6b7c57590541f98fd9408a 100644
--- a/src/lib-sieve/cmd-keep.c
+++ b/src/lib-sieve/cmd-keep.c
@@ -54,7 +54,6 @@ const struct sieve_action act_keep = {
 	act_keep_execute
 };
 
-
 /*
  * Generation
  */