diff --git a/src/api/newcallmodel.h b/src/api/newcallmodel.h
index 2f192d751ae8891b8b99c9792ef48ae2a5c5fed9..da82a839146e28b98fcdd8e88da6b07c34dbc37c 100644
--- a/src/api/newcallmodel.h
+++ b/src/api/newcallmodel.h
@@ -187,6 +187,11 @@ public:
      */
     bool isRecording(const std::string& callId) const;
 
+    /**
+     * Close all active calls and conferences
+     */
+    static void hangupCallsAndConferences();
+
 Q_SIGNALS:
     /**
      * Emitted when a call state changes
diff --git a/src/newcallmodel.cpp b/src/newcallmodel.cpp
index be49b0c40c085f3999eeb322a972663f694fed18..537ecac05270d8f8150d9caead4bf34d199fd26c 100644
--- a/src/newcallmodel.cpp
+++ b/src/newcallmodel.cpp
@@ -463,6 +463,19 @@ NewCallModel::sendSipMessage(const std::string& callId, const std::string& body)
     CallManager::instance().sendTextMessage(callId.c_str(), payloads, true /* not used */);
 }
 
+void
+NewCallModel::hangupCallsAndConferences()
+{
+    QStringList conferences = CallManager::instance().getConferenceList();
+    for (const auto& conf : conferences) {
+        CallManager::instance().hangUpConference(conf);
+    }
+    QStringList calls = CallManager::instance().getCallList();
+    for (const auto &call : calls) {
+        CallManager::instance().hangUp(call);
+    }
+}
+
 void
 NewCallModelPimpl::slotIncomingCall(const std::string& accountId, const std::string& callId, const std::string& fromId)
 {