diff --git a/res/ael/pval.c b/res/ael/pval.c
index 10af1597e82d8d51b48d216a70c3830ae40b4413..8596d66373e458b259343a5e6e5d24944d169c94 100644
--- a/res/ael/pval.c
+++ b/res/ael/pval.c
@@ -4414,7 +4414,11 @@ int ast_compile_ael2(struct ast_context **local_contexts, struct ast_hashtab *lo
 {
 	pval *p,*p2;
 	struct ast_context *context;
+#ifdef LOW_MEMORY
 	char buf[2000];
+#else
+	char buf[8192];
+#endif
 	struct ael_extension *exten;
 	struct ael_extension *exten_list = 0;
 
@@ -4427,9 +4431,13 @@ int ast_compile_ael2(struct ast_context **local_contexts, struct ast_hashtab *lo
 		case PV_GLOBALS:
 			/* just VARDEC elements */
 			for (p2=p->u1.list; p2; p2=p2->next) {
-				char buf2[2000];
-				snprintf(buf2,sizeof(buf2),"%s=%s", p2->u1.str, p2->u2.val);
-				pbx_builtin_setvar(NULL, buf2);
+#ifdef STANDALONE
+				snprintf(buf, sizeof(buf), "%s=%s", p2->u1.str, p2->u2.val);
+				pbx_builtin_setvar(NULL, buf);
+#else
+				pbx_substitute_variables_helper(NULL, p2->u2.val, buf, sizeof(buf) - 1);
+				pbx_builtin_setvar_helper(NULL, p2->u1.str, buf);
+#endif
 			}
 			break;
 		default: