diff --git a/src/ringdht/sips_transport_ice.cpp b/src/ringdht/sips_transport_ice.cpp
index bb74d07ed77f0fecfca1050c9be111d0c7a61d2a..c9c09ad8e800eeb41b45c44f5f054fa105c9603d 100644
--- a/src/ringdht/sips_transport_ice.cpp
+++ b/src/ringdht/sips_transport_ice.cpp
@@ -212,11 +212,35 @@ SipsIceTransport::SipsIceTransport(pjsip_endpoint* endpt,
 SipsIceTransport::~SipsIceTransport()
 {
     RING_DBG("~SipsIceTransport");
+    auto event = state_ == TlsConnectionState::ESTABLISHED;
     shutdown();
     ice_->setOnRecv(comp_id_, nullptr);
     tlsThread_.join();
     Manager::instance().unregisterEventHandler((uintptr_t)this);
 
+    pjsip_transport_add_ref(getTransportBase());
+    auto state_cb = pjsip_tpmgr_get_state_cb(trData_.base.tpmgr);
+    if (state_cb && event) {
+        pjsip_transport_state_info state_info;
+        pjsip_tls_state_info tls_info;
+
+        /* Init transport state info */
+        std::memset(&state_info, 0, sizeof(state_info));
+        std::memset(&tls_info, 0, sizeof(tls_info));
+        pj_ssl_sock_info ssl_info;
+        getInfo(&ssl_info);
+        tls_info.ssl_sock_info = &ssl_info;
+        state_info.ext_info = &tls_info;
+        state_info.status = PJ_SUCCESS;
+
+        (*state_cb)(getTransportBase(), PJSIP_TP_STATE_DISCONNECTED, &state_info);
+    }
+
+    if (not trData_.base.is_shutdown and not trData_.base.is_destroying)
+        pjsip_transport_shutdown(getTransportBase());
+
+    pjsip_transport_dec_ref(getTransportBase());
+
     pj_lock_destroy(trData_.base.lock);
     pj_atomic_destroy(trData_.base.ref_cnt);
 }
@@ -852,31 +876,7 @@ SipsIceTransport::clean()
         buffPool_.clear();
     }
 
-    bool event = state_ == TlsConnectionState::ESTABLISHED;
     closeTlsSession();
-
-    pjsip_transport_add_ref(getTransportBase());
-    auto state_cb = pjsip_tpmgr_get_state_cb(trData_.base.tpmgr);
-    if (state_cb && event) {
-        pjsip_transport_state_info state_info;
-        pjsip_tls_state_info tls_info;
-
-        /* Init transport state info */
-        std::memset(&state_info, 0, sizeof(state_info));
-        std::memset(&tls_info, 0, sizeof(tls_info));
-        pj_ssl_sock_info ssl_info;
-        getInfo(&ssl_info);
-        tls_info.ssl_sock_info = &ssl_info;
-        state_info.ext_info = &tls_info;
-        state_info.status = PJ_SUCCESS;
-
-        (*state_cb)(getTransportBase(), PJSIP_TP_STATE_DISCONNECTED, &state_info);
-    }
-
-    if (not trData_.base.is_shutdown and not trData_.base.is_destroying)
-        pjsip_transport_shutdown(getTransportBase());
-
-    pjsip_transport_dec_ref(getTransportBase());
 }
 
 IpAddr