diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c
index 1008ce6294..a27d7189cf 100644
--- a/src/mod/endpoints/mod_sofia/mod_sofia.c
+++ b/src/mod/endpoints/mod_sofia/mod_sofia.c
@@ -948,12 +948,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
 			}
 			
 			if (!reason && code != 407) {
-				reason = "Call Refused";
-				if (!reason) {
-					reason = sip_status_phrase(code);
-					if (switch_strlen_zero(reason)) {
-						reason = "Because";
-					}
+				reason = sip_status_phrase(code);
+				if (switch_strlen_zero(reason)) {
+					reason = "Because";
 				}
 			}
 			
@@ -985,7 +982,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
 				nua_respond(tech_pvt->nh, code, reason, TAG_IF(to_uri, SIPTAG_CONTACT_STR(to_uri)),
 							SIPTAG_SUPPORTED_STR(NULL), SIPTAG_ACCEPT_STR(NULL),
 							TAG_IF(!switch_strlen_zero(max_forwards), SIPTAG_MAX_FORWARDS_STR(max_forwards)), TAG_END());
-				switch_set_flag_locked(tech_pvt, TFLAG_BYE);
+				if (!switch_channel_test_flag(channel, CF_ANSWERED)) {
+					switch_set_flag_locked(tech_pvt, TFLAG_BYE);
+				}
 			} else {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Responding with %d %s\n", code, reason);
 				
@@ -1005,7 +1004,9 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
 				} else {
 					nua_respond(tech_pvt->nh, code, reason, SIPTAG_CONTACT_STR(tech_pvt->reply_contact), TAG_END());
 				}
-				switch_set_flag_locked(tech_pvt, TFLAG_BYE);
+				if (!switch_channel_test_flag(channel, CF_ANSWERED) && code >= 300) {
+					switch_set_flag_locked(tech_pvt, TFLAG_BYE);
+				}
 			}
 			
 		}