diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp
index c7ee17c1267bd7ab587ff2d7216b0163f09164e1..3cb9e84d86a0a97d1fd80d1981ec7524fd76c024 100644
--- a/daemon/src/managerimpl.cpp
+++ b/daemon/src/managerimpl.cpp
@@ -130,6 +130,8 @@ void ManagerImpl::terminate()
 
     saveConfig();
 
+    unregisterAllAccounts();
+
     SIPVoIPLink::destroy();
     // Unload account map AFTER destroying
     // the SIPVoIPLink, the link still needs the accounts for pjsip cleanup
@@ -2598,6 +2600,11 @@ namespace {
         }
     }
 
+    void unregisterAccount(std::pair<const std::string, Account*> &item)
+    {
+        item.second->unregisterVoIPLink();
+    }
+
     void unloadAccount(std::pair<const std::string, Account*> &item)
     {
         // avoid deleting IP2IP account twice
@@ -2606,6 +2613,7 @@ namespace {
             item.second = 0;
         }
     }
+
 } // end anonymous namespace
 
 void ManagerImpl::loadAccountMap(Conf::YamlParser &parser)
@@ -2644,6 +2652,11 @@ void ManagerImpl::loadAccountMap(Conf::YamlParser &parser)
     std::for_each(seq->begin(), seq->end(), bind(loadAccount, _1, ref(accountMap_)));
 }
 
+void ManagerImpl::unregisterAllAccounts()
+{
+    std::for_each(accountMap_.begin(), accountMap_.end(), unregisterAccount);
+}
+
 void ManagerImpl::unloadAccountMap()
 {
     std::for_each(accountMap_.begin(), accountMap_.end(), unloadAccount);
diff --git a/daemon/src/managerimpl.h b/daemon/src/managerimpl.h
index 3403d86e2cb24b243e3a8484dfa5ef0985bae328..159d8f9c0d21b45604575a687d762f4b44c1f9e5 100644
--- a/daemon/src/managerimpl.h
+++ b/daemon/src/managerimpl.h
@@ -969,6 +969,11 @@ class ManagerImpl {
          *Contains a list of account (sip, aix, etc) and their respective voiplink/calls */
         AccountMap accountMap_;
 
+        /**
+         * Unregister all account in accountMap_
+         */
+        void unregisterAllAccounts();
+
         /**
          * Load the account map from configuration
          */