diff --git a/src/sipmanager.cpp b/src/sipmanager.cpp
index 33db295664194a3efa0576c53bcdbc48c6311df9..e5c29a94989e7256bc4c826f6855f6c0e0d49527 100755
--- a/src/sipmanager.cpp
+++ b/src/sipmanager.cpp
@@ -960,6 +960,18 @@ void SIPManager::call_on_tsx_changed(pjsip_inv_session *inv, pjsip_transaction *
                     link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink(accId));
                     if (link)
                         link->SIPCallAnswered(call, rdata);
+                } else if (tsx->status_code / 100 == 5) {
+		    _debug("SIPManager: 5xx error message received\n");
+                    call = reinterpret_cast<SIPCall *> (inv->mod_data[getInstance()->getModId()]);
+                    if (call == NULL) {
+                        _debug("SIPManager: Call has been removed!\n");
+                        return;
+                    }
+                    accId = Manager::instance().getAccountFromCall(call->getCallId());
+                    link = dynamic_cast<SIPVoIPLink *> (Manager::instance().getAccountLink(accId));
+                    if (link) {
+                        link->SIPCallServerFailure(call);
+                    }
                 }
                 break;
             case PJSIP_TSX_STATE_PROCEEDING: