diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp
index 7e987ed42b08b021776ce019acc58294b5f4d0ac..82000ee6cc6dee905f236a911c3d10fcec3a9ea8 100644
--- a/src/peer_connection.cpp
+++ b/src/peer_connection.cpp
@@ -493,14 +493,7 @@ TlsSocketEndpoint::TlsSocketEndpoint(AbstractSocketEndpoint& tr,
 }
 
 
-TlsSocketEndpoint::~TlsSocketEndpoint() {
-    shutdown();
-}
-
-void
-TlsSocketEndpoint::shutdown() {
-    pimpl_->tr.shutdown();
-}
+TlsSocketEndpoint::~TlsSocketEndpoint() = default;
 
 bool
 TlsSocketEndpoint::isInitiator() const
diff --git a/src/peer_connection.h b/src/peer_connection.h
index 99df375505da226946d8eb81d8ec9d8db3a1ee49..11a00554f861f1ac95cd1e3fd7c56ad0340ac30d 100644
--- a/src/peer_connection.h
+++ b/src/peer_connection.h
@@ -187,7 +187,6 @@ public:
                     std::function<bool(const dht::crypto::Certificate&)>&& cert_check);
     ~TlsSocketEndpoint();
 
-    void shutdown() override;
     bool isReliable() const override { return true; }
     bool isInitiator() const override;
     int maxPayload() const override;
diff --git a/src/security/tls_session.cpp b/src/security/tls_session.cpp
index 112206059fa72064610f6b4daff93b21e70b35b8..e0a6c7ce27011a53c6854e07661f81858311f413 100644
--- a/src/security/tls_session.cpp
+++ b/src/security/tls_session.cpp
@@ -735,9 +735,6 @@ TlsSession::TlsSessionImpl::cleanup()
     state_ = TlsSessionState::SHUTDOWN; // be sure to block any user operations
     stateCondition_.notify_all();
 
-    // This will stop current read of the ice_transport.cpp
-    transport_.shutdown();
-
     {
         std::lock_guard<std::mutex> lk(sessionMutex_);
         if (session_) {
@@ -752,6 +749,8 @@ TlsSession::TlsSessionImpl::cleanup()
 
     if (cookie_key_.data)
         gnutls_free(cookie_key_.data);
+
+    transport_.shutdown();
 }
 
 TlsSessionState