diff --git a/pbx.c b/pbx.c
index 1115580aa018e1fc4dcfc5ce36bb8b9e5c9f4bae..bfd4402f31e46de3c301bb005304efbb54986d40 100755
--- a/pbx.c
+++ b/pbx.c
@@ -689,16 +689,14 @@ static void pbx_substitute_variables_temp(struct ast_channel *c,char *cp3,char *
         /* Now we have the variable name on cp3 */
 	if ((first=strchr(cp3,':'))) {
 		*first='\0';
+		pbx_substitute_variables_temp(c,cp3,cp4);
+		if (!(*cp4)) return;
 		offset=atoi(first+1);
 	 	if ((second=strchr(first+1,':'))) {
 			*second='\0';
 			offset2=atoi(second+1);
-		} else {
-			offset2=offset;
-			offset=0;
-		}
-		pbx_substitute_variables_temp(c,cp3,cp4);
-		if (!(*cp4)) return;
+		} else
+			offset2=strlen(*cp4)-offset;
 		if (abs(offset)>strlen(*cp4)) {
 			if (offset>=0) offset=strlen(*cp4);
 			else offset=-strlen(*cp4);