diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp
index c4e1c578f988e4ad06275ec5079c961b96b4da08..e34ed83119df03dc4d77d76caff2fd42df22c229 100644
--- a/src/sip/sipcall.cpp
+++ b/src/sip/sipcall.cpp
@@ -103,6 +103,8 @@ SIPCall::SIPCall(SIPAccountBase& account, const std::string& id, Call::CallType
 SIPCall::~SIPCall()
 {
     std::lock_guard<std::recursive_mutex> lk {callMutex_};
+    if (tmpMediaTransport_)
+        dht::ThreadPool::io().run([ice=std::make_shared<decltype(tmpMediaTransport_)>(std::move(tmpMediaTransport_))] { });
     setTransport({});
     inv.reset(); // prevents callback usage
 }
@@ -1381,7 +1383,7 @@ SIPCall::initIceMediaTransport(bool master, unsigned channel_num)
     JAMI_DBG("[call:%s] create media ICE transport", getCallId().c_str());
 
     auto& iceTransportFactory = Manager::instance().getIceTransportFactory();
-    tmpMediaTransport_ = iceTransportFactory.createTransport(getCallId().c_str(),
+    tmpMediaTransport_ = iceTransportFactory.createUTransport(getCallId().c_str(),
                                                              channel_num, master,
                                                              getAccount().getIceOptions());
     return static_cast<bool>(tmpMediaTransport_);
diff --git a/src/sip/sipcall.h b/src/sip/sipcall.h
index 9e2cd2b27313fc35642900671f4c129d069f75c6..aa4bbbc942093d794fc05c0a3f40595b6c51ba5f 100644
--- a/src/sip/sipcall.h
+++ b/src/sip/sipcall.h
@@ -236,9 +236,6 @@ public: // NOT SIP RELATED (good candidates to be moved elsewhere)
 
     std::unique_ptr<IceSocket> newIceSocket(unsigned compId);
 
-    IceTransport* getIceMediaTransport() const {
-        return tmpMediaTransport_ ? tmpMediaTransport_.get() : mediaTransport_.get();
-    }
 
     void deinitRecorder();
 
@@ -250,6 +247,9 @@ private:
 
     NON_COPYABLE(SIPCall);
 
+    IceTransport* getIceMediaTransport() const {
+        return tmpMediaTransport_ ? tmpMediaTransport_.get() : mediaTransport_.get();
+    }
     void setCallMediaLocal();
 
     void waitForIceAndStartMedia();
@@ -339,7 +339,7 @@ private:
     std::shared_ptr<IceTransport> mediaTransport_;
 
     ///< Temporary transport for media. Replace mediaTransport_ when connected with success
-    std::shared_ptr<IceTransport> tmpMediaTransport_;
+    std::unique_ptr<IceTransport> tmpMediaTransport_;
 
     std::string peerUri_{};