diff --git a/daemon/src/sip/sipvoiplink.cpp b/daemon/src/sip/sipvoiplink.cpp
index 113f84e060d2fb5bf2d10df3f51a0214db15579a..361625bbba7ed1170bcd7cc0d186e62859269254 100644
--- a/daemon/src/sip/sipvoiplink.cpp
+++ b/daemon/src/sip/sipvoiplink.cpp
@@ -1339,7 +1339,7 @@ SIPVoIPLink::SIPCallServerFailure(SIPCall *call)
 void
 SIPVoIPLink::SIPCallClosed(SIPCall *call)
 {
-    std::string id(call->getCallId());
+    const std::string id(call->getCallId());
 
     stopRtpIfCurrent(id, *call);
 
@@ -1500,8 +1500,11 @@ void sdp_media_update_cb(pjsip_inv_session *inv, pj_status_t status)
 
     if (status != PJ_SUCCESS) {
         WARN("Could not negotiate offer");
-        SIPVoIPLink::instance()->hangup(call->getCallId());
-        Manager::instance().callFailure(call->getCallId());
+        const std::string callID(call->getCallId());
+        SIPVoIPLink::instance()->hangup(callID);
+        // call is now a dangling pointer after calling hangup
+        call = 0;
+        Manager::instance().callFailure(callID);
         return;
     }