diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp
index 71b9cc6b040e6a1dcd9dab8f77532990196b3837..3fa2829385f78add7bfda0f9cd0bfcc1366e81c0 100644
--- a/src/sip/sipcall.cpp
+++ b/src/sip/sipcall.cpp
@@ -1251,8 +1251,12 @@ SIPCall::waitForIceAndStartMedia()
 
                     // Nego succeed: move to the new media transport
                     call->stopAllMedia();
-                    if (call->tmpMediaTransport_)
+                    if (call->tmpMediaTransport_) {
+                        // Destroy the ICE media transport on another thread. This can take quite some time.
+                        if (call->mediaTransport_)
+                            dht::ThreadPool::io().run([ice=std::make_shared<decltype(call->mediaTransport_)>(std::move(call->mediaTransport_))] { });
                         call->mediaTransport_ = std::move(call->tmpMediaTransport_);
+                    }
                     call->startAllMedia();
                     return false;
                 }