diff --git a/src/jamidht/sips_transport_ice.cpp b/src/jamidht/sips_transport_ice.cpp
index 8cec3c1252bddbc542b7e54910fbaba4d6283053..edb9d0d5d01bed7b0c53de078c814d607b0a9e79 100644
--- a/src/jamidht/sips_transport_ice.cpp
+++ b/src/jamidht/sips_transport_ice.cpp
@@ -249,10 +249,11 @@ SipsIceTransport::SipsIceTransport(pjsip_endpoint* endpt,
            }};
     tls_ = std::make_unique<TlsSession>(std::move(iceSocket), param, cbs);
 
-    ice_->setOnShutdown([this]() {
-        if (tls_)
-            tls_->shutdown();
-    });
+    if (ice_)
+        ice_->setOnShutdown([this]() {
+            if (tls_)
+                tls_->shutdown();
+        });
 
     if (pjsip_transport_register(base.tpmgr, &base) != PJ_SUCCESS)
         throw std::runtime_error("Can't register PJSIP transport.");
@@ -260,6 +261,8 @@ SipsIceTransport::SipsIceTransport(pjsip_endpoint* endpt,
 
 SipsIceTransport::~SipsIceTransport()
 {
+    if (ice_)
+        ice_->setOnShutdown({});
     JAMI_DBG("~SipIceTransport@%p {tr=%p}", this, &trData_.base);
     stopLoop_ = true;