diff --git a/channels/chan_local.c b/channels/chan_local.c
index 55e2e9acb5f77f37b39fd3735d48adb6142560b7..8cc057b81f30fa191220670ad733367755c90646 100755
--- a/channels/chan_local.c
+++ b/channels/chan_local.c
@@ -333,6 +333,13 @@ static struct local_pvt *local_alloc(char *data, int format)
 		memset(tmp, 0, sizeof(struct local_pvt));
 		ast_mutex_init(&tmp->lock);
 		strncpy(tmp->exten, data, sizeof(tmp->exten) - 1);
+		opts = strchr(tmp->exten, '/');
+		if (opts) {
+			*opts='\0';
+			opts++;
+			if (strchr(opts, 'n'))
+				tmp->nooptimization = 1;
+		}
 		c = strchr(tmp->exten, '@');
 		if (c) {
 			*c = '\0';
@@ -340,13 +347,6 @@ static struct local_pvt *local_alloc(char *data, int format)
 			strncpy(tmp->context, c, sizeof(tmp->context) - 1);
 		} else
 			strncpy(tmp->context, "default", sizeof(tmp->context) - 1);
-		opts = strchr(tmp->context, '/');
-		if (opts) {
-			*opts='\0';
-			opts++;
-			if (strchr(opts, 'n'))
-				tmp->nooptimization = 1;
-		}
 		tmp->reqformat = format;
 		if (!ast_exists_extension(NULL, tmp->context, tmp->exten, 1, NULL)) {
 			ast_log(LOG_NOTICE, "No such extension/context %s@%s creating local channel\n", tmp->context, tmp->exten);