Index: b/channels/chan_sip.c
===================================================================
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -7259,6 +7259,7 @@ static int sip_hangup(struct ast_channel
 			sip_pvt_lock(p);
 			oldowner = p->owner;
 			sip_set_owner(p, NULL); /* Owner will be gone after we return, so take it away */
+			ast_set_hangupsource(oldowner, ast_channel_name(oldowner), 0);
 			sip_pvt_unlock(p);
 			ast_channel_tech_pvt_set(oldowner, dialog_unref(ast_channel_tech_pvt(oldowner), "unref oldowner->tech_pvt"));
 		}
Index: b/apps/app_dial.c
===================================================================
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -902,6 +902,7 @@ static void hanguptree(struct dial_head
 			if (hangupcause >= 0) {
 				/* This is for the channel drivers */
 				ast_channel_hangupcause_set(outgoing->chan, hangupcause);
+				ast_set_hangupsource(outgoing->chan, ast_channel_name(outgoing->chan), 0);
 			}
 			ast_hangup(outgoing->chan);
 		}
@@ -1531,6 +1532,7 @@ static struct ast_channel *wait_for_answ
 				case AST_CONTROL_BUSY:
 					ast_verb(3, "%s is busy\n", ast_channel_name(c));
 					ast_channel_hangupcause_set(in, ast_channel_hangupcause(c));
+					ast_set_hangupsource(c, ast_channel_name(c), 0);
 					ast_channel_publish_dial(in, c, NULL, "BUSY");
 					ast_hangup(c);
 					c = o->chan = NULL;
@@ -1540,6 +1542,7 @@ static struct ast_channel *wait_for_answ
 				case AST_CONTROL_CONGESTION:
 					ast_verb(3, "%s is circuit-busy\n", ast_channel_name(c));
 					ast_channel_hangupcause_set(in, ast_channel_hangupcause(c));
+					ast_set_hangupsource(c, ast_channel_name(c), 0);
 					ast_channel_publish_dial(in, c, NULL, "CONGESTION");
 					ast_hangup(c);
 					c = o->chan = NULL;
Index: b/apps/app_queue.c
===================================================================
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -6918,6 +6918,7 @@ static struct callattempt *wait_for_answ
 							break;
 						case AST_CONTROL_BUSY:
 							ast_verb(3, "%s is busy\n", ochan_name);
+							ast_set_hangupsource(o->chan, ochan_name, 0);
 							ast_channel_publish_dial(qe->chan, o->chan, on, "BUSY");
 							endtime = (long) time(NULL);
 							endtime -= starttime;
@@ -6937,6 +6938,7 @@ static struct callattempt *wait_for_answ
 							break;
 						case AST_CONTROL_CONGESTION:
 							ast_verb(3, "%s is circuit-busy\n", ochan_name);
+							ast_set_hangupsource(o->chan, ochan_name, 0);
 							ast_channel_publish_dial(qe->chan, o->chan, on, "CONGESTION");
 							endtime = (long) time(NULL);
 							endtime -= starttime;
@@ -7137,6 +7139,7 @@ skip_frame:;
 	if (!*to) {
 		for (o = start; o; o = o->call_next) {
 			if (o->chan) {
+				ast_set_hangupsource(o->chan, ast_channel_name(o->chan), 0);
 				rna(orig, qe, o->chan, o->interface, o->member->membername, 1);
 			}
 		}
