diff --git a/src/sip/sipvoiplink.cpp b/src/sip/sipvoiplink.cpp
index 8832d7e8dc64a5428bfa7b1f5a2f0f62e656e0db..1e4f3ed02518e1f0267d8fe4da634deb3e7ce082 100644
--- a/src/sip/sipvoiplink.cpp
+++ b/src/sip/sipvoiplink.cpp
@@ -1118,9 +1118,12 @@ transaction_state_changed_cb(pjsip_inv_session* inv, pjsip_transaction* tsx, pjs
         onRequestInfo(inv, rdata, msg, *call);
     else if (methodName == "NOTIFY")
         onRequestNotify(inv, rdata, msg, *call);
-    else if (methodName == "MESSAGE")
+    else if (methodName == "MESSAGE") {
         if (msg->body)
-            call->onTextMessage(im::parseSipMessage(msg));
+            runOnMainThread([call, m = im::parseSipMessage(msg)]() mutable {
+                call->onTextMessage(std::move(m));
+            });
+    }
 }
 
 int SIPVoIPLink::getModId()