diff --git a/channel.c b/channel.c
index 094a8a33030181b2484e90565bef65282e82060b..e6a5437458673f337980203d5bbb1919e57bc9a5 100755
--- a/channel.c
+++ b/channel.c
@@ -1509,15 +1509,10 @@ struct ast_channel *__ast_request_and_dial(char *type, int format, void *data, i
 			while( (var = strtok_r(NULL, "|", &tmp)) ) {
 				pbx_builtin_setvar( chan, var );
 			} /* /JDG */
-			if (oh->context && *oh->context)
-				strncpy(chan->context, oh->context, sizeof(chan->context) - 1);
-			if (oh->exten && *oh->exten)
-				strncpy(chan->exten, oh->exten, sizeof(chan->exten) - 1);
 			if (oh->callerid && *oh->callerid)
 				ast_set_callerid(chan, oh->callerid, 1);
 			if (oh->account && *oh->account)
 				ast_cdr_setaccount(chan, oh->account);
-			chan->priority = oh->priority;
 		}
 		if (callerid && strlen(callerid))
 			ast_set_callerid(chan, callerid, 1);
@@ -1561,8 +1556,18 @@ struct ast_channel *__ast_request_and_dial(char *type, int format, void *data, i
 			ast_log(LOG_NOTICE, "Unable to request channel %s/%s\n", type, (char *)data);
 	} else
 		ast_log(LOG_NOTICE, "Unable to request channel %s/%s\n", type, (char *)data);
-	if (chan && (chan->_state == AST_STATE_UP))
-		state = AST_CONTROL_ANSWER;
+	if (chan) {
+		/* Final fixups */
+		if (oh) {
+			if (oh->context && *oh->context)
+				strncpy(chan->context, oh->context, sizeof(chan->context) - 1);
+			if (oh->exten && *oh->exten)
+				strncpy(chan->exten, oh->exten, sizeof(chan->exten) - 1);
+			chan->priority = oh->priority;
+		}
+		if (chan->_state == AST_STATE_UP) 
+			state = AST_CONTROL_ANSWER;
+	}
 	if (outstate)
 		*outstate = state;
 	if (chan && res <= 0) {