diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index 476411202b309dd2735c60d955d5c469f98db97b..8f05e92c1478eb72fb64ed6b508a55ef1f71c641 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -2096,9 +2096,12 @@ static void *pri_dchannel(void *vpri)
 							if (pri->pvts[chanpos]->owner) {
 								/* Queue a BUSY instead of a hangup if our cause is appropriate */
 								pri->pvts[chanpos]->owner->hangupcause = e->hangup.cause;
-								if (pri->pvts[chanpos]->owner->_state == AST_STATE_UP)
+								switch (pri->pvts[chanpos]->owner->_state) {
+								case AST_STATE_BUSY:
+								case AST_STATE_UP:
 									ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV);
-								else {
+									break;
+								default:
 									switch (e->hangup.cause) {
 									case PRI_CAUSE_USER_BUSY:
 										pri_queue_control(pri->pvts[chanpos], AST_CONTROL_BUSY, pri);
@@ -2115,6 +2118,7 @@ static void *pri_dchannel(void *vpri)
 										ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV);
 										break;
 									}
+									break;
 								}
 							}
 							ast_verb(3, "Channel %d/%d, span %d got hangup, cause %d\n",
@@ -2167,9 +2171,12 @@ static void *pri_dchannel(void *vpri)
 							e->hangup.subcmds);
 						if (pri->pvts[chanpos]->owner) {
 							pri->pvts[chanpos]->owner->hangupcause = e->hangup.cause;
-							if (pri->pvts[chanpos]->owner->_state == AST_STATE_UP)
+							switch (pri->pvts[chanpos]->owner->_state) {
+							case AST_STATE_BUSY:
+							case AST_STATE_UP:
 								ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV);
-							else {
+								break;
+							default:
 								switch (e->hangup.cause) {
 								case PRI_CAUSE_USER_BUSY:
 									pri_queue_control(pri->pvts[chanpos], AST_CONTROL_BUSY, pri);
@@ -2186,6 +2193,7 @@ static void *pri_dchannel(void *vpri)
 									ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV);
 									break;
 								}
+								break;
 							}
 							ast_verb(3, "Channel %d/%d, span %d got hangup request, cause %d\n", PRI_SPAN(e->hangup.channel), PRI_CHANNEL(e->hangup.channel), pri->span, e->hangup.cause);
 							if (e->hangup.aoc_units > -1)