Index: b/apps/app_dial.c
===================================================================
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -850,6 +850,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);
 		}
@@ -1467,6 +1468,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;
@@ -1476,6 +1478,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
@@ -6752,6 +6752,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;
@@ -6771,6 +6772,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;
@@ -6967,6 +6969,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);
 			}
 		}
