diff --git a/src/switch_ivr_bridge.c b/src/switch_ivr_bridge.c
index b2f1d56375..5d3060c797 100644
--- a/src/switch_ivr_bridge.c
+++ b/src/switch_ivr_bridge.c
@@ -1119,35 +1119,39 @@ static switch_status_t signal_bridge_on_hangup(switch_core_session_t *session)
 		const char *var;
 
 		if (!zstr(sbv) && !strcmp(sbv, switch_core_session_get_uuid(session))) {
+			int hup = 1;
 
 			switch_channel_set_variable(other_channel, SWITCH_SIGNAL_BRIDGE_VARIABLE, NULL);
 			switch_channel_set_variable(other_channel, SWITCH_BRIDGE_VARIABLE, NULL);
 			switch_channel_set_variable(other_channel, "call_uuid", switch_core_session_get_uuid(other_session));
 
 			if (switch_channel_up_nosig(other_channel)) {
-
 				if (switch_true(switch_channel_get_variable(other_channel, SWITCH_PARK_AFTER_BRIDGE_VARIABLE))) {
 					switch_ivr_park_session(other_session);
+					hup = 0;
 				} else if ((var = switch_channel_get_variable(other_channel, SWITCH_TRANSFER_AFTER_BRIDGE_VARIABLE))) {
 					transfer_after_bridge(other_session, var);
+					hup = 0;
 				}
 
-				if (switch_channel_test_flag(other_channel, CF_BRIDGE_ORIGINATOR)) {
-					if (switch_channel_test_flag(channel, CF_ANSWERED) &&
-						switch_true(switch_channel_get_variable(other_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) {
+				if (hup) {
+					if (switch_channel_test_flag(other_channel, CF_BRIDGE_ORIGINATOR)) {
+						if (switch_channel_test_flag(channel, CF_ANSWERED) &&
+							switch_true(switch_channel_get_variable(other_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE))) {
 
-						if (switch_channel_test_flag(channel, CF_INTERCEPTED)) {
-							switch_channel_set_flag(other_channel, CF_INTERCEPT);
+							if (switch_channel_test_flag(channel, CF_INTERCEPTED)) {
+								switch_channel_set_flag(other_channel, CF_INTERCEPT);
+							}
+							switch_channel_hangup(other_channel, switch_channel_get_cause(channel));
+						} else {
+							if (!switch_channel_test_flag(channel, CF_ANSWERED)) {
+								switch_channel_handle_cause(other_channel, switch_channel_get_cause(channel));
+							}
+							switch_channel_set_state(other_channel, CS_EXECUTE);
 						}
-						switch_channel_hangup(other_channel, switch_channel_get_cause(channel));
 					} else {
-						if (!switch_channel_test_flag(channel, CF_ANSWERED)) {
-							switch_channel_handle_cause(other_channel, switch_channel_get_cause(channel));
-						}
-						switch_channel_set_state(other_channel, CS_EXECUTE);
+						switch_channel_hangup(other_channel, switch_channel_get_cause(channel));
 					}
-				} else {
-					switch_channel_hangup(other_channel, switch_channel_get_cause(channel));
 				}
 			}
 		}