diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h
index b6df8170f3..4e8a0585bd 100644
--- a/src/mod/endpoints/mod_sofia/mod_sofia.h
+++ b/src/mod/endpoints/mod_sofia/mod_sofia.h
@@ -251,6 +251,7 @@ typedef enum {
 	PFLAG_LIBERAL_DTMF,
  	PFLAG_AUTO_ASSIGN_PORT,
  	PFLAG_AUTO_ASSIGN_TLS_PORT,
+	PFLAG_SHUTDOWN,
 	/* No new flags below this line */
 	PFLAG_MAX
 } PFLAGS;
diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c
index a24c795df1..6b5e18ec58 100644
--- a/src/mod/endpoints/mod_sofia/sofia.c
+++ b/src/mod/endpoints/mod_sofia/sofia.c
@@ -959,6 +959,7 @@ static void our_sofia_event_callback(nua_event_t event,
 		break;
 	case nua_r_shutdown:
 		if (status >= 200) {
+			sofia_set_pflag(profile, PFLAG_SHUTDOWN);
 			su_root_break(profile->s_root);
 		}
 		break;
@@ -1955,9 +1956,17 @@ void *SWITCH_THREAD_FUNC sofia_profile_thread_run(switch_thread_t *thread, void
 	switch_thread_rwlock_wrlock(profile->rwlock);
 	sofia_reg_unregister(profile);
 	nua_shutdown(profile->nua);
-	su_root_run(profile->s_root);
 
+	sanity = 10;
+	while (!sofia_test_pflag(profile, PFLAG_SHUTDOWN)) {
+		su_root_step(profile->s_root, 1000);
+		if (!--sanity) {
+			break;
+		}
+	}
+	
 	sofia_clear_pflag_locked(profile, PFLAG_RUNNING);
+	sofia_clear_pflag_locked(profile, PFLAG_SHUTDOWN);
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Waiting for worker thread\n");
 
 	switch_thread_join(&st, worker_thread);