diff --git a/src/ice_transport.cpp b/src/ice_transport.cpp
index dbb503d13b567bed6a39c3cb9d513b21864b731d..acff2772ebae94fac4e3bbea9278d7ba4c75da31 100644
--- a/src/ice_transport.cpp
+++ b/src/ice_transport.cpp
@@ -1082,6 +1082,8 @@ IceTransport::isInitiator() const
 bool
 IceTransport::startIce(const Attribute& rem_attrs, std::vector<IceCandidate>&& rem_candidates)
 {
+    sip_utils::register_thread();
+
     if (not isInitialized()) {
         JAMI_ERR("[ice:%p] not initialized transport", pimpl_.get());
         pimpl_->is_stopped_ = true;
@@ -1148,6 +1150,8 @@ IceTransport::startIce(const Attribute& rem_attrs, std::vector<IceCandidate>&& r
 bool
 IceTransport::startIce(const SDP& sdp)
 {
+    sip_utils::register_thread();
+
     if (pimpl_->streamsCount_ != 1) {
         JAMI_ERR("Expected exactly one stream per SDP (found %u streams)", pimpl_->streamsCount_);
         return false;
diff --git a/src/sip/sipaccountbase.cpp b/src/sip/sipaccountbase.cpp
index 11396b5a1ac9a9a366484cc6f36ba3d46ad2bfdc..f2112cdfc4e33a7942f5332f3fdf7b852b0b55f3 100644
--- a/src/sip/sipaccountbase.cpp
+++ b/src/sip/sipaccountbase.cpp
@@ -86,6 +86,8 @@ SIPAccountBase::CreateClientDialogAndInvite(const pj_str_t* from,
                                             pjsip_dialog** dlg,
                                             pjsip_inv_session** inv)
 {
+    sip_utils::register_thread();
+
     if (pjsip_dlg_create_uac(pjsip_ua_instance(), from, contact, to, target, dlg) != PJ_SUCCESS) {
         JAMI_ERR("Unable to create SIP dialogs for user agent client when calling %s", to->ptr);
         return false;
diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp
index ef5ad8f3d03bb764623662bbb0d54bba31ea6c87..d00656779c2ee69985db89daaa9a987861436f50 100644
--- a/src/sip/sipcall.cpp
+++ b/src/sip/sipcall.cpp
@@ -672,6 +672,8 @@ SIPCall::setInviteSession(pjsip_inv_session* inviteSession)
 void
 SIPCall::terminateSipSession(int status)
 {
+    sip_utils::register_thread();
+
     JAMI_DBG("[call:%s] Terminate SIP session", getCallId().c_str());
     std::lock_guard<std::recursive_mutex> lk {callMutex_};
     if (inviteSession_ and inviteSession_->state != PJSIP_INV_STATE_DISCONNECTED) {