diff --git a/src/lib-sieve/plugins/special-use/tag-specialuse.c b/src/lib-sieve/plugins/special-use/tag-specialuse.c
index d480764b07df049209fbdc30c1e6bab7bfe8acae..83473c71596d9e83f0f0d96aac770ace74d5a617 100644
--- a/src/lib-sieve/plugins/special-use/tag-specialuse.c
+++ b/src/lib-sieve/plugins/special-use/tag-specialuse.c
@@ -100,7 +100,6 @@ tag_specialuse_validate(struct sieve_validator *valdtr,
 			struct sieve_command *cmd)
 {
 	struct sieve_ast_argument *tag = *arg;
-	const char *use_flag;
 
 	/* Detach the tag itself */
 	*arg = sieve_ast_argument_next(*arg);
@@ -111,13 +110,16 @@ tag_specialuse_validate(struct sieve_validator *valdtr,
 	if (!sieve_validate_tag_parameter(valdtr, cmd, tag, *arg, NULL, 0,
 					  SAAT_STRING, FALSE))
 		return FALSE;
-	use_flag = sieve_ast_argument_strc(*arg);
-	if (!ext_special_use_flag_valid(use_flag)) {
-		sieve_argument_validate_error(
-			valdtr, *arg, "specialuse tag: "
-			"invalid special-use flag `%s' specified",
-			str_sanitize(use_flag, 64));
-		return FALSE;
+	if (sieve_argument_is_string_literal(*arg)) {
+		const char *use_flag = sieve_ast_argument_strc(*arg);
+
+		if (!ext_special_use_flag_valid(use_flag)) {
+			sieve_argument_validate_error(
+				valdtr, *arg, "specialuse tag: "
+				"invalid special-use flag `%s' specified",
+				str_sanitize(use_flag, 64));
+			return FALSE;
+		}
 	}
 
 	tag->parameters = *arg;
diff --git a/tests/extensions/special-use/execute.svtest b/tests/extensions/special-use/execute.svtest
index 746f1d3e6f33410330b83eca9b86f936a65ef44a..a2b637e3838191218e0c863fc0032b04fec44fda 100644
--- a/tests/extensions/special-use/execute.svtest
+++ b/tests/extensions/special-use/execute.svtest
@@ -1,6 +1,7 @@
 require "vnd.dovecot.testsuite";
 require "special-use";
 require "fileinto";
+require "variables";
 
 test "Specialuse_exists - None exist" {
 	if specialuse_exists "\\Sent" {
@@ -33,3 +34,21 @@ Frop!
 		test_fail "execution of result failed";
 	}
 }
+
+test ":specialuse variable" {
+	test_set "message" text:
+From: stephan@example.org
+To: nico@frop.example.org
+Subject: Frop 1
+
+Frop!
+.
+	;
+
+	set "use" "\\Junk";
+	fileinto :specialuse "${use}" "frop";
+
+	if not test_result_execute {
+		test_fail "execution of result failed";
+	}
+}