diff --git a/src/lib-sieve/plugins/regex/ext-regex.c b/src/lib-sieve/plugins/regex/ext-regex.c
index b5270c3a16c4b9920c993a42c5e826c412a5c235..a6824fab3a679aea1163f2d0b41867ec4f869287 100644
--- a/src/lib-sieve/plugins/regex/ext-regex.c
+++ b/src/lib-sieve/plugins/regex/ext-regex.c
@@ -174,9 +174,9 @@ bool mtch_regex_validate_context
 		if ( !mtch_regex_validate_regexp(validator, ctx, key_arg, cflags) )
 			return FALSE;
 
-	} else if ( sieve_ast_argument_type(arg) == SAAT_STRING_LIST ) {
+	} else if ( sieve_ast_argument_type(key_arg) == SAAT_STRING_LIST ) {
 		/* String list */
-		struct sieve_ast_argument *stritem = sieve_ast_strlist_first(arg);
+		struct sieve_ast_argument *stritem = sieve_ast_strlist_first(key_arg);
 
 		while ( stritem != NULL ) {
 			if ( !mtch_regex_validate_regexp(validator, ctx, stritem, cflags) )
@@ -186,6 +186,9 @@ bool mtch_regex_validate_context
 		}
 	} else {
 		/* ??? */ 
+		sieve_command_validate_error(validator, ctx->command_ctx, 
+			"!!BUG!!: mtch_regex_validate_context: invalid ast argument type(%s)",
+			sieve_ast_argument_type_name(sieve_ast_argument_type(key_arg)) );
 		return FALSE;
 	} 
 
diff --git a/src/lib-sieve/plugins/variables/tst-string.c b/src/lib-sieve/plugins/variables/tst-string.c
index 27597e17ce9b94a94d35eab5586336e5641e08a9..282c85479df75e7bd1e79011f11dc3a0cb1561f3 100644
--- a/src/lib-sieve/plugins/variables/tst-string.c
+++ b/src/lib-sieve/plugins/variables/tst-string.c
@@ -216,15 +216,8 @@ static bool tst_string_operation_execute
 		(result=sieve_coded_stringlist_next_item(source, &src_item)) 
 		&& src_item != NULL ) {
 			
-		/*
-		if ( mail_get_strings_utf8(renv->msgdata->mail, str_c(hdr_item), &strings) >= 0 ) {	
-			
-			int i;
-			for ( i = 0; !matched && strings[i] != NULL; i++ ) {
-				if ( sieve_match_value(mctx, strings[i], strlen(strings[i])) )
-					matched = TRUE;				
-			} 
-		}*/
+		if ( sieve_match_value(mctx, str_c(src_item), str_len(src_item)) )
+			matched = TRUE;				
 	}
 
 	matched = sieve_match_end(mctx) || matched; 	
diff --git a/src/lib-sieve/plugins/variables/variables.sieve b/src/lib-sieve/plugins/variables/variables.sieve
index 0355e5452e2177b8ddaebd243f3d0c2a57a48dcc..7f255241de295ee2b5b46ca2b7f4782aa08faca8 100644
--- a/src/lib-sieve/plugins/variables/variables.sieve
+++ b/src/lib-sieve/plugins/variables/variables.sieve
@@ -20,3 +20,9 @@ fileinto "${friep}";
 fileinto "${frop}";
 fileinto "LEN-${len_frop}";
 fileinto "${quote_friep}";
+
+if string "${foo}" "foosome" {
+	keep;
+} elsif string :comparator "i;ascii-casemap" "${foo}" "foosome" {
+	fileinto "CASE";
+}
diff --git a/src/lib-sieve/sieve-commands.c b/src/lib-sieve/sieve-commands.c
index 29c77c338adb89fffeee19d36d6cc9a0c5e854f5..d869afc2d68959a3ce6a8bff4cdbe5df4c27b1e8 100644
--- a/src/lib-sieve/sieve-commands.c
+++ b/src/lib-sieve/sieve-commands.c
@@ -72,7 +72,7 @@ static bool arg_string_list_validate
 		stritem = sieve_ast_strlist_next(stritem);
 	}
 
-	return FALSE;	
+	return TRUE;	
 }
 
 static inline bool emit_string_list_operand