diff --git a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c
index f5543574ab7254aa5270ee66416f514d5a671253..67d7fb5e0425405d86098c0c477b6dab4afcc808 100644
--- a/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c
+++ b/src/lib-sieve/plugins/imap4flags/ext-imap4flags-common.c
@@ -700,11 +700,14 @@ static void ext_imap4flags_stringlist_reset
 
 struct sieve_stringlist *sieve_ext_imap4flags_get_flags
 (const struct sieve_runtime_env *renv,
+	const struct sieve_extension *flg_ext,
 	struct sieve_stringlist *flags_list)
 {
-	if ( flags_list == NULL )
+	if ( flags_list == NULL ) {
+		i_assert( sieve_extension_is(flg_ext, imap4flags_extension) );
 		return ext_imap4flags_stringlist_create_single
-			(renv, _get_flags_string(renv->oprtn->ext, renv->result), FALSE);
+			(renv, _get_flags_string(flg_ext, renv->result), FALSE);
+	}
 
 	return ext_imap4flags_stringlist_create(renv, flags_list, TRUE);
 }
diff --git a/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h b/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h
index 42bdd5e7a2857260d01439c3c249d4fe023bcb21..fdc4dd6a20360c3743292823c75c2353a273ae1e 100644
--- a/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h
+++ b/src/lib-sieve/plugins/imap4flags/sieve-ext-imap4flags.h
@@ -57,6 +57,7 @@ int sieve_ext_imap4flags_remove_flags
 
 struct sieve_stringlist *sieve_ext_imap4flags_get_flags
 (const struct sieve_runtime_env *renv,
+	const struct sieve_extension *flg_ext,
 	struct sieve_stringlist *flags_list);
 
 #endif
diff --git a/src/lib-sieve/plugins/imap4flags/tst-hasflag.c b/src/lib-sieve/plugins/imap4flags/tst-hasflag.c
index 8b022c67b564a10fa60a5f7674c5c41f0d5d54ff..8426bd0649012fa5a52b4b69721c34523d77b763 100644
--- a/src/lib-sieve/plugins/imap4flags/tst-hasflag.c
+++ b/src/lib-sieve/plugins/imap4flags/tst-hasflag.c
@@ -175,6 +175,7 @@ static bool tst_hasflag_operation_dump
 static int tst_hasflag_operation_execute
 (const struct sieve_runtime_env *renv, sieve_size_t *address)
 {
+	const struct sieve_operation *op = renv->oprtn;
 	int opt_code = 0;
 	struct sieve_comparator cmp =
 		SIEVE_COMPARATOR_DEFAULT(i_ascii_casemap_comparator);
@@ -224,13 +225,16 @@ static int tst_hasflag_operation_execute
 
 	sieve_runtime_trace(renv, SIEVE_TRLVL_TESTS, "hasflag test");
 
-	value_list = sieve_ext_imap4flags_get_flags(renv, variables_list);
+	value_list = sieve_ext_imap4flags_get_flags
+		(renv, op->ext, variables_list);
 
 	if ( sieve_match_type_is(&mcht, is_match_type) ||
-		sieve_match_type_is(&mcht, contains_match_type) )
-		key_list = sieve_ext_imap4flags_get_flags(renv, flag_list);
-	else
+		sieve_match_type_is(&mcht, contains_match_type) ) {
+		key_list = sieve_ext_imap4flags_get_flags
+			(renv, op->ext, flag_list);
+	} else {
 		key_list = flag_list;
+	}
 
 	/* Perform match */
 	if ( (match=sieve_match(renv, &mcht, &cmp, value_list, key_list, &ret)) < 0 )