diff --git a/Makefile.am b/Makefile.am
index 6c1b79827331ef362c41057cd23e51dedba9f3e2..14312cb79865091563e78212910ec4db645c417a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -64,6 +64,7 @@ test_cases = \
 	tests/extensions/imap4flags/hasflag.svtest \
 	tests/extensions/imap4flags/errors.svtest \
 	tests/extensions/imap4flags/execute.svtest \
+	tests/extensions/imap4flags/flagstore.svtest \
 	tests/extensions/body/basic.svtest \
 	tests/extensions/body/match-values.svtest \
 	tests/extensions/regex/basic.svtest \
diff --git a/TODO b/TODO
index 9e793c3d518979e2406792eb21fa17e21951aef3..590af2b69618a8027a073c778d481a3f46234b54 100644
--- a/TODO
+++ b/TODO
@@ -6,7 +6,6 @@ Current activities:
 	- Write manual page
 * Testsuite:
 	- add support for testing binary load/save
-	- add execution tests for imap4flags extensions.
 
 Next (in order of descending priority/precedence):
 
diff --git a/tests/extensions/imap4flags/flagstore.svtest b/tests/extensions/imap4flags/flagstore.svtest
new file mode 100644
index 0000000000000000000000000000000000000000..127d56015bc32c65b3494ff56f153d8e78fc1223
--- /dev/null
+++ b/tests/extensions/imap4flags/flagstore.svtest
@@ -0,0 +1,83 @@
+require "vnd.dovecot.testsuite";
+require "fileinto";
+require "imap4flags";
+require "relational";
+require "comparator-i;ascii-numeric";
+require "mailbox";
+
+test_set "message" text:
+From: Henry von Flockenstoffen <henry@example.com>
+To: Dieter von Ausburg <dieter@example.com>
+Subject: Test message.
+
+Test message.
+.
+;
+
+test "Before" {
+    if hasflag :comparator "i;ascii-numeric" :count "ge" "1" {
+        test_fail "some flags or keywords are already set";
+    }
+	
+	setflag "$label1 \\answered";
+
+	fileinto :create "Uninteresting";
+
+	if not test_result_execute {
+		test_fail "failed to execute first result";
+	}
+
+	test_result_reset;
+
+	setflag "\\draft \\seen Junk";
+
+	fileinto "Uninteresting";
+
+	if not test_result_execute {
+		test_fail "failed to execute second result";
+	}
+
+	test_result_reset;
+
+	fileinto :flags "\\flagged" "Uninteresting";
+
+    if not test_result_execute {
+        test_fail "failed to execute third result";
+    }
+
+    test_result_reset;
+
+	test_message :folder "Uninteresting" 0;
+
+	if not hasflag "$label1 \\answered" {
+		test_fail "flags not stored for first message";
+	}
+
+	if not hasflag :comparator "i;ascii-numeric" :count "eq" "2" {
+        test_fail "invalid number of flags set for first message";
+    }
+
+    test_result_reset;
+
+	test_message :folder "Uninteresting" 1;
+
+    if not hasflag "\\draft \\seen Junk" {
+        test_fail "flags not stored for second message";
+    }
+
+	if not hasflag :comparator "i;ascii-numeric" :count "eq" "3" {
+        test_fail "invalid number of flags set for second message";
+    }
+
+    test_result_reset;
+
+	test_message :folder "Uninteresting" 2;
+
+    if not hasflag "\\flagged" {
+        test_fail "flags not stored for second message";
+    }
+
+	if not hasflag :comparator "i;ascii-numeric" :count "eq" "1" {
+        test_fail "invalid number of flags set for third message";
+    }
+}