diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2650dbfc39d85e7e6eca41925aa3342aa6627709..b4f6395317c188e95733d190e395195338288bca 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -359,7 +359,7 @@ if(USE_BUNDLED_MTXCLIENT)
 	FetchContent_Declare(
 		MatrixClient
 		GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
-		GIT_TAG        004d4203ceb441239aafb17e1340cd063139d029
+		GIT_TAG        53f8883a15649adb798b1f5e73671c84f68e3274
 		)
 	set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "")
 	set(BUILD_LIB_TESTS OFF CACHE INTERNAL "")
diff --git a/src/CallManager.cpp b/src/CallManager.cpp
index 45d41aced51a26a14c73f00480e13ceb694c58f2..6d41f1c6fc727107c9853dc778329fcec56553e4 100644
--- a/src/CallManager.cpp
+++ b/src/CallManager.cpp
@@ -64,8 +64,8 @@ CallManager::CallManager(QObject *parent)
           this,
           [this](const std::string &sdp, const std::vector<CallCandidates::Candidate> &candidates) {
                   nhlog::ui()->debug("WebRTC: call id: {} - sending offer", callid_);
-                  emit newMessage(roomid_, CallInvite{callid_, sdp, 0, timeoutms_});
-                  emit newMessage(roomid_, CallCandidates{callid_, candidates, 0});
+                  emit newMessage(roomid_, CallInvite{callid_, sdp, "0", timeoutms_});
+                  emit newMessage(roomid_, CallCandidates{callid_, candidates, "0"});
                   std::string callid(callid_);
                   QTimer::singleShot(timeoutms_, this, [this, callid]() {
                           if (session_.state() == webrtc::State::OFFERSENT && callid == callid_) {
@@ -82,8 +82,8 @@ CallManager::CallManager(QObject *parent)
           this,
           [this](const std::string &sdp, const std::vector<CallCandidates::Candidate> &candidates) {
                   nhlog::ui()->debug("WebRTC: call id: {} - sending answer", callid_);
-                  emit newMessage(roomid_, CallAnswer{callid_, sdp, 0});
-                  emit newMessage(roomid_, CallCandidates{callid_, candidates, 0});
+                  emit newMessage(roomid_, CallAnswer{callid_, sdp, "0"});
+                  emit newMessage(roomid_, CallCandidates{callid_, candidates, "0"});
           });
 
         connect(&session_,
@@ -91,7 +91,7 @@ CallManager::CallManager(QObject *parent)
                 this,
                 [this](const CallCandidates::Candidate &candidate) {
                         nhlog::ui()->debug("WebRTC: call id: {} - sending ice candidate", callid_);
-                        emit newMessage(roomid_, CallCandidates{callid_, {candidate}, 0});
+                        emit newMessage(roomid_, CallCandidates{callid_, {candidate}, "0"});
                 });
 
         connect(&turnServerTimer_, &QTimer::timeout, this, &CallManager::retrieveTurnServer);
@@ -238,7 +238,7 @@ CallManager::hangUp(CallHangUp::Reason reason)
         if (!callid_.empty()) {
                 nhlog::ui()->debug(
                   "WebRTC: call id: {} - hanging up ({})", callid_, callHangUpReasonString(reason));
-                emit newMessage(roomid_, CallHangUp{callid_, 0, reason});
+                emit newMessage(roomid_, CallHangUp{callid_, "0", reason});
                 endCall();
         }
 }
@@ -291,7 +291,7 @@ CallManager::handleEvent(const RoomEvent<CallInvite> &callInviteEvent)
         if (isOnCall() || roomInfo.member_count != 2) {
                 emit newMessage(QString::fromStdString(callInviteEvent.room_id),
                                 CallHangUp{callInviteEvent.content.call_id,
-                                           0,
+                                           "0",
                                            CallHangUp::Reason::InviteTimeOut});
                 return;
         }