diff --git a/pbx/pbx_config.c b/pbx/pbx_config.c
index b2ee6519b825e8c5e27368965f3f62f8b15a8b8e..fc069e12bc542b36a675d2c86d09978c08266ec7 100755
--- a/pbx/pbx_config.c
+++ b/pbx/pbx_config.c
@@ -1619,7 +1619,7 @@ static int pbx_load_module(void)
 	struct ast_variable *v;
 	char *cxt, *ext, *pri, *appl, *data, *tc, *cidmatch;
 	struct ast_context *con;
-	char *start, *end;
+	char *end;
 	char *label;
 	char realvalue[256];
 	int lastpri = -2;
@@ -1656,7 +1656,7 @@ static int pbx_load_module(void)
 						char *stringp=NULL;
 						int ipri = -2;
 						char realext[256]="";
-						char *plus;
+						char *plus, *firstp, *firstc;
 						tc = strdup(v->value);
 						if(tc!=NULL){
 							stringp=tc;
@@ -1711,25 +1711,28 @@ static int pbx_load_module(void)
 							appl = stringp;
 							if (!appl)
 								appl="";
-							if (!(start = strchr(appl, '('))) {
-								if (stringp)
-									appl = strsep(&stringp, ",");
-								else
-									appl = "";
-							}
-							if (start && (end = strrchr(appl, ')'))) {
-								*start = *end = '\0';
-								data = start + 1;
-								process_quotes_and_slashes(data, ',', '|');
-							} else if (stringp!=NULL && *stringp=='"') {
-								stringp++;
-								data = strsep(&stringp, "\"");
-								stringp++;
+							/* Find the first occurrence of either '(' or ',' */
+							firstc = strchr(appl, ',');
+							firstp = strchr(appl, '(');
+							if (firstc && ((!firstp) || (firstc < firstp))) {
+								/* comma found, no parenthesis */
+								/* or both found, but comma found first */
+								appl = strsep(&stringp, ",");
+								data = stringp;
+							} else if ((!firstc) && (!firstp)) {
+								/* Neither found */
+								data = "";
 							} else {
-								if (stringp)
-									data = strsep(&stringp, ",");
-								else
-									data = "";
+								/* Final remaining case is parenthesis found first */
+								appl = strsep(&stringp, "(");
+								data = stringp;
+								end = strrchr(data, ')');
+								if ((end = strrchr(data, ')'))) {
+									*end = '\0';
+								} else {
+									ast_log(LOG_WARNING, "No closing parenthesis found? '%s(%s'\n", appl, data);
+								}
+								process_quotes_and_slashes(data, ',', '|');
 							}
 
 							if (!data)