diff --git a/pbx.c b/pbx.c
index 7387d7c9594be7d9c92dde7899d4e0cdf91ef6d5..fc7fe10ad425a480df31c149017ccec5c890708b 100755
--- a/pbx.c
+++ b/pbx.c
@@ -1099,10 +1099,15 @@ void pbx_substitute_variables_helper(struct ast_channel *c,const char *cp1,char
 				if ((vare[0] == '$') && (vare[1] == '[')) {
 					needsub++;
 					brackets++;
+					vare++;
+				} else if (vare[0] == '[') {
+					brackets++;
 				} else if (vare[0] == ']') {
 					brackets--;
-				} else if ((vare[0] == '$') && (vare[1] == '{'))
+				} else if ((vare[0] == '$') && (vare[1] == '{')) {
 					needsub++;
+					vare++
+				}
 				vare++;
 			}
 			if (brackets)