diff --git a/main/channel.c b/main/channel.c
index 3718386dfe8f498c7cd9c0991ad80a2a2e6aafef..120138b43e8b5be09d2141bd073cdd09bdd97a08 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -5002,6 +5002,7 @@ struct ast_channel *ast_call_forward(struct ast_channel *caller, struct ast_chan
 	struct ast_party_redirecting *apr = &orig->redirecting;
 	char *data, *type;
 	int cause = 0;
+	int res;
 
 	/* gather data and request the new forward channel */
 	ast_copy_string(tmpchan, orig->call_forward, sizeof(tmpchan));
@@ -5060,7 +5061,11 @@ struct ast_channel *ast_call_forward(struct ast_channel *caller, struct ast_chan
 	ast_channel_unlock(orig);
 
 	/* call new channel */
-	if ((*timeout = ast_call(new, data, 0))) {
+	res = ast_call(new, data, 0);
+	if (timeout) {
+		*timeout = res;
+	}
+	if (res) {
 		ast_log(LOG_NOTICE, "Unable to call forward to channel %s/%s\n", type, (char *)data);
 		ast_hangup(orig);
 		ast_hangup(new);
@@ -5137,7 +5142,7 @@ struct ast_channel *__ast_request_and_dial(const char *type, format_t format, co
 			if (timeout > -1)
 				timeout = res;
 			if (!ast_strlen_zero(chan->call_forward)) {
-				if (!(chan = ast_call_forward(NULL, chan, &timeout, format, oh, outstate))) {
+				if (!(chan = ast_call_forward(NULL, chan, NULL, format, oh, outstate))) {
 					return NULL;
 				}
 				continue;
diff --git a/main/features.c b/main/features.c
index 0e9c8153cf9f06860e2fc795d5596ff16d285c95..9128a58cdd62d925b9ea6b1bfcc862a9e71a0d82 100644
--- a/main/features.c
+++ b/main/features.c
@@ -2833,7 +2833,7 @@ static struct ast_channel *feature_request_and_dial(struct ast_channel *caller,
 
 		if (chan && (chan == active_channel)){
 			if (!ast_strlen_zero(chan->call_forward)) {
-				if (!(chan = ast_call_forward(caller, chan, &to, format, NULL, outstate))) {
+				if (!(chan = ast_call_forward(caller, chan, NULL, format, NULL, outstate))) {
 					return NULL;
 				}
 				continue;