diff --git a/CHANGES b/CHANGES
index df2fecdef530ce44d504d22a7383d893a3b50c33..85d89df303bfebca307b84c5e5f3fe162d1b6bce 100755
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+ -- Allow extension names, include context, switch to use global vars.
+ -- Allow variables in extensions.conf to reference previously defined ones
  -- Merge voicemail enhancements (app_voicemail2)
  -- Add multiple queueing strategies
  -- Merge support for 'T'
diff --git a/pbx/pbx_config.c b/pbx/pbx_config.c
index eb73c5b298be437e7d38f65337d70b3c89c52d17..fb1fe6fb276ce7392fbef8868a95c269ac677355 100755
--- a/pbx/pbx_config.c
+++ b/pbx/pbx_config.c
@@ -1566,6 +1566,7 @@ static int pbx_load_module(void)
 					if (!strcasecmp(v->name, "exten")) {
 						char *stringp=NULL;
 						int ipri = -2;
+						char realext[256]="";
 						tc = strdup(v->value);
 						if(tc!=NULL){
 							stringp=tc;
@@ -1614,20 +1615,24 @@ static int pbx_load_module(void)
 
 							if (!data)
 								data="";
-							if (ast_add_extension2(con, 0, ext, ipri, cidmatch, appl, strdup(data), FREE, registrar)) {
+							pbx_substitute_variables_helper(NULL, ext, realext, sizeof(realext) - 1);
+							if (ast_add_extension2(con, 0, realext, ipri, cidmatch, appl, strdup(data), FREE, registrar)) {
 								ast_log(LOG_WARNING, "Unable to register extension at line %d\n", v->lineno);
 							}
 							free(tc);
 						} else fprintf(stderr,"Error strdup returned NULL in %s\n",__PRETTY_FUNCTION__);
 					} else if(!strcasecmp(v->name, "include")) {
-						if (ast_context_add_include2(con, v->value, registrar))
+						pbx_substitute_variables_helper(NULL, v->value, realvalue, sizeof(realvalue) - 1);
+						if (ast_context_add_include2(con, realvalue, registrar))
 							ast_log(LOG_WARNING, "Unable to include context '%s' in context '%s'\n", v->value, cxt);
 					} else if(!strcasecmp(v->name, "ignorepat")) {
-						if (ast_context_add_ignorepat2(con, v->value, registrar))
+						pbx_substitute_variables_helper(NULL, v->value, realvalue, sizeof(realvalue) - 1);
+						if (ast_context_add_ignorepat2(con, realvalue, registrar))
 							ast_log(LOG_WARNING, "Unable to include ignorepat '%s' in context '%s'\n", v->value, cxt);
 					} else if (!strcasecmp(v->name, "switch")) {
 						char *stringp=NULL;
-						tc = strdup(v->value);
+						pbx_substitute_variables_helper(NULL, v->value, realvalue, sizeof(realvalue) - 1);
+						tc = realvalue;
 						stringp=tc;
 						appl = strsep(&stringp, "/");
 						data = strsep(&stringp, "");