diff --git a/src/lib-sieve/plugins/variables/ext-variables-arguments.c b/src/lib-sieve/plugins/variables/ext-variables-arguments.c
index 9988cbe8ff5ed6ae222bc48de0395baba54c1388..c0abb4a10ad1420579f2428c19945563fa86e214 100644
--- a/src/lib-sieve/plugins/variables/ext-variables-arguments.c
+++ b/src/lib-sieve/plugins/variables/ext-variables-arguments.c
@@ -299,11 +299,12 @@ static bool arg_variable_string_validate
 				
 				strstart = p + 1;
 				substart = strstart;
+
+				p++;	
 			}
 		
 			/* Finished, reset for the next substitution */	
 			state = ST_NONE;
-			p++;	
 		}
 	}
 
diff --git a/tests/extensions/variables/basic.svtest b/tests/extensions/variables/basic.svtest
index fbcf5d4ca65c5d9bcf8d1b9825b5cba7da30027d..c35694337b7c94424933d1498c2a3430526b5025 100644
--- a/tests/extensions/variables/basic.svtest
+++ b/tests/extensions/variables/basic.svtest
@@ -21,7 +21,14 @@ test "Unknown variables" {
 	set "qwer" "dddd";
 	set "qwert" "ccc";
 
-	if not string "[${qwerty}]" "[]" {
+	if anyof (
+		not string "[${qwerty}]" "[]",
+		not string "[${5000}]" "[]",
+		not string "[${qwerty.asdf}]" "[]", 
+		not string "[${qwerty.asdf.0.1.34.5}]" "[]",
+		not string "[${qwerty.asdf.hokey.pokey}]" "[]", 
+		not string "[${qwerty.asdf.0.frop}]" "[]"
+	) {
 		test_fail "unknown variable not substituted with empty string";
 	}
 }
@@ -48,12 +55,43 @@ test "Syntax errors" {
 		not string "${" "${s}{",
 		not string "${a" "${s}{a",
 		not string "${$}" "${s}{$}",
-		not string "${%%%%}" "${s}{%%%%}" )
+		not string "${%%%%}" "${s}{%%%%}",
+		not string "${0.s}" "${s}{0.s}",
+		not string "&%${}!" "&%${s}{}!",
+		not string "${doh!}" "${s}{doh!}" )
 	{
 		test_fail "variables substitution changed substring not matching variable-ref";
 	}	
 }
 
+test "RFC syntax examples" {
+	# The variable "company" holds the value "ACME".  No other variables
+    # are set. 
+	set "company" "ACME";
+
+	# "${full}"         => the empty string
+	if not string :is "${full}" "" {
+		test_fail "unknown variable did not yield empty string";
+	}
+
+	# "${company}"      => "ACME"
+	if not string :is "${company}" "ACME" {
+		test_fail "assigned variable did not get substituted";
+	}
+
+	# "${BAD${Company}" => "${BADACME"
+	if not string :is "${BAD${Company}" "${BADACME" {
+		test_fail "'BADACME' test did not yield expected result";
+	}
+
+	#"${President, ${Company} Inc.}" 
+	#                        => "${President, ACME Inc.}"
+	if not string "${President, ${Company} Inc.}"
+		"${President, ACME Inc.}" {
+		test_fail "'Company president' test did not yield expected result";
+	}
+}
+
 /*
  * Variable assignments
  */