diff --git a/tests/extensions/imapflags/execute.svtest b/tests/extensions/imapflags/execute.svtest
new file mode 100644
index 0000000000000000000000000000000000000000..5ecbb2ca8490a82ed763077d74f077ecd7956605
--- /dev/null
+++ b/tests/extensions/imapflags/execute.svtest
@@ -0,0 +1,15 @@
+require "vnd.dovecot.testsuite";
+
+/*
+ * Execution testing (currently just meant to trigger any segfaults)
+ */
+
+test "Flags Side Effect" {
+	if not test_compile "execute/flags-side-effect.sieve" {
+		test_fail "script compile failed";
+	}
+
+	if not test_execute {
+		test_fail "script execute failed";
+	}
+}
diff --git a/tests/extensions/imapflags/execute/flags-side-effect.sieve b/tests/extensions/imapflags/execute/flags-side-effect.sieve
new file mode 100644
index 0000000000000000000000000000000000000000..f7a91d44981ba79f490f0d33645054c4176ca534
--- /dev/null
+++ b/tests/extensions/imapflags/execute/flags-side-effect.sieve
@@ -0,0 +1,18 @@
+require "imap4flags"; 
+require "fileinto";
+
+/*
+ * When keep/fileinto is used multiple times in a script and duplicate 
+ * message elimination is performed, the last flag list value MUST win.
+ */
+
+setflag "IMPLICIT";
+
+fileinto :flags "\\Seen \\Draft" "INBOX.Junk";
+fileinto :flags "NONSENSE" "INBOX.Junk";
+
+keep;
+keep :flags "\\Seen";
+
+fileinto :flags "\\Seen" "Inbox.Nonsense";
+fileinto "Inbox.Nonsense";