diff --git a/main/dial.c b/main/dial.c
index 466d6c6944afa8f19d0ab89d7ff48c8b66393f62..3d4d3d739ea80a1bb8337d31ce767758c977addf 100644
--- a/main/dial.c
+++ b/main/dial.c
@@ -289,6 +289,8 @@ static int begin_dial_channel(struct ast_dial_channel *channel, struct ast_chann
 		ast_hangup(channel->owner);
 		channel->owner = NULL;
 	} else {
+		if (chan)
+			ast_poll_channel_add(chan, channel->owner);
 		res = 1;
 		ast_verb(3, "Called %s\n", numsubst);
 	}
@@ -595,6 +597,8 @@ static enum ast_dial_result monitor_dial(struct ast_dial *dial, struct ast_chann
 				set_state(dial, AST_DIAL_RESULT_HANGUP);
 				break;
 			}
+			if (chan)
+				ast_poll_channel_del(chan, channel->owner);
 			ast_hangup(who);
 			channel->owner = NULL;
 			continue;
@@ -616,6 +620,8 @@ static enum ast_dial_result monitor_dial(struct ast_dial *dial, struct ast_chann
 		AST_LIST_TRAVERSE(&dial->channels, channel, list) {
 			if (!channel->owner || channel->owner == who)
 				continue;
+			if (chan)
+				ast_poll_channel_del(chan, channel->owner);
 			ast_hangup(channel->owner);
 			channel->owner = NULL;
 		}
@@ -632,6 +638,8 @@ static enum ast_dial_result monitor_dial(struct ast_dial *dial, struct ast_chann
 		AST_LIST_TRAVERSE(&dial->channels, channel, list) {
 			if (!channel->owner)
 				continue;
+			if (chan)
+				ast_poll_channel_del(chan, channel->owner);
 			ast_hangup(channel->owner);
 			channel->owner = NULL;
 		}