diff --git a/Makefile.am b/Makefile.am
index 095b8d96dbd45fe9c8a6269d6012a49bf1e5efc2..0ab9485d60f71683c28ebdffa9e891e23d2c4fa4 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -60,6 +60,7 @@ test_cases = \
 	tests/extensions/imap4flags/errors.svtest \
 	tests/extensions/imap4flags/execute.svtest \
 	tests/extensions/imap4flags/multiscript.svtest \
+	tests/extensions/imap4flags/flagstring.svtest \
 	tests/extensions/imap4flags/flagstore.svtest \
 	tests/extensions/body/basic.svtest \
 	tests/extensions/body/raw.svtest \
diff --git a/tests/extensions/imap4flags/flagstring.svtest b/tests/extensions/imap4flags/flagstring.svtest
new file mode 100644
index 0000000000000000000000000000000000000000..99c0cd209e5530a32311e28e44c195ea00742f26
--- /dev/null
+++ b/tests/extensions/imap4flags/flagstring.svtest
@@ -0,0 +1,82 @@
+require "vnd.dovecot.testsuite";
+require "imap4flags";
+require "variables";
+
+test "Duplicates: setflag" {
+	setflag "flags" "\\seen \\seen";
+
+	if not string "${flags}" "\\seen" {
+		test_fail "duplicate \\seen flag item not removed (1)";
+	}
+
+	setflag "flags" "\\seen $frop \\seen";
+
+	if not string "${flags}" "\\seen $frop" {
+		test_fail "duplicate \\seen flag item not removed (2)";
+	}
+
+	setflag "flags" "\\seen $frop $frop \\seen";
+
+	if not string "${flags}" "\\seen $frop" {
+		test_fail "duplicate \\seen flag item not removed (3)";
+	}
+
+	setflag "flags" "$frop \\seen $frop \\seen";
+
+	if not string "${flags}" "$frop \\seen" {
+		test_fail "duplicate \\seen flag item not removed (4)";
+	}
+
+	setflag "flags" "$frop \\seen \\seen \\seen \\seen $frop $frop $frop \\seen";
+
+	if not string "${flags}" "$frop \\seen" {
+		test_fail "duplicate \\seen flag item not removed (5)";
+	}
+}
+
+test "Duplicates: addflag" {
+	setflag "flags" "";
+    addflag "flags" "\\seen \\seen";
+
+    if not string "${flags}" "\\seen" {
+        test_fail "duplicate \\seen flag item not removed (1)";
+    }
+
+	setflag "flags" "";
+    addflag "flags" "\\seen $frop \\seen";
+
+    if not string "${flags}" "\\seen $frop" {
+        test_fail "duplicate \\seen flag item not removed (2)";
+    }
+
+	setflag "flags" "";
+    addflag "flags" "\\seen $frop $frop \\seen";
+
+    if not string "${flags}" "\\seen $frop" {
+        test_fail "duplicate \\seen flag item not removed (3)";
+    }
+
+	setflag "flags" "";
+    addflag "flags" "$frop \\seen $frop \\seen";
+
+    if not string "${flags}" "$frop \\seen" {
+        test_fail "duplicate \\seen flag item not removed (4)";
+    }
+
+	setflag "flags" "";
+    addflag "flags" "$frop \\seen \\seen \\seen \\seen $frop $frop $frop \\seen";
+
+    if not string "${flags}" "$frop \\seen" {
+        test_fail "duplicate \\seen flag item not removed (5)";
+    }
+
+	setflag "flags" "$frop \\seen";
+    addflag "flags" "\\seen \\seen \\seen $frop $frop $frop \\seen";
+
+    if not string "${flags}" "$frop \\seen" {
+        test_fail "duplicate \\seen flag item not removed (6)";
+    }
+}
+
+
+