diff --git a/daemon/src/managerimpl.cpp b/daemon/src/managerimpl.cpp
index 2a2e1db187f38f3cbcdebe3e1ea08c92762ea345..4138cf3630e3cdc2278f73e7e5ccdb71c26ceaf9 100644
--- a/daemon/src/managerimpl.cpp
+++ b/daemon/src/managerimpl.cpp
@@ -131,24 +131,20 @@ void ManagerImpl::run()
 
 void ManagerImpl::finish()
 {
-    if (!finished_) {
-        finished_ = true;
-        // Unset signal handlers
-        signal(SIGHUP, SIG_DFL);
-        signal(SIGINT, SIG_DFL);
-        signal(SIGTERM, SIG_DFL);
-        terminate();
-        dbus_.exit();
-    }
-}
+    if (finished_)
+        return;
+
+    finished_ = true;
+    // Unset signal handlers
+    signal(SIGHUP, SIG_DFL);
+    signal(SIGINT, SIG_DFL);
+    signal(SIGTERM, SIG_DFL);
 
-void ManagerImpl::terminate()
-{
     std::vector<std::string> callList(getCallList());
-    DEBUG("Hangup %zu remaining call", callList.size());
+    DEBUG("Hangup %zu remaining call(s)", callList.size());
 
     for (std::vector<std::string>::iterator iter = callList.begin();
-         iter != callList.end(); ++iter)
+            iter != callList.end(); ++iter)
         hangupCall(*iter);
 
     saveConfig();
@@ -160,10 +156,14 @@ void ManagerImpl::terminate()
     // the SIPVoIPLink, the link still needs the accounts for pjsip cleanup
     unloadAccountMap();
 
-    ost::MutexLock lock(audioLayerMutex_);
+    {
+        ost::MutexLock lock(audioLayerMutex_);
 
-    delete audiodriver_;
-    audiodriver_ = NULL;
+        delete audiodriver_;
+        audiodriver_ = NULL;
+    }
+
+    dbus_.exit();
 }
 
 bool ManagerImpl::isCurrentCall(const std::string& callId) const
diff --git a/daemon/src/managerimpl.h b/daemon/src/managerimpl.h
index ef47fd2755336fa488844512a7bc0d1acf229243..580a9c78bb266a3f1693fa8ea6a1f09d8a6bd790 100644
--- a/daemon/src/managerimpl.h
+++ b/daemon/src/managerimpl.h
@@ -140,11 +140,6 @@ class ManagerImpl {
          */
         void run();
 
-        /**
-         * Terminate all thread (sound, link) and unload AccountMap
-         */
-        void terminate();
-
         /*
          * Terminate all threads and exit DBus loop
          */
diff --git a/daemon/test/main.cpp b/daemon/test/main.cpp
index f67d1b85ff3e47348eaf1cb8192eea811ad21284..7688d6b42a12e7a29c7a9703e43d424a27b42936 100644
--- a/daemon/test/main.cpp
+++ b/daemon/test/main.cpp
@@ -143,8 +143,8 @@ int main(int argc, char* argv[])
     // Run the tests.
     bool wasSuccessful = runner.run();
 
-    printf("=== Test suite terminate ===\n");
-    Manager::instance().terminate();
+    printf("=== Test suite ending ===\n");
+    Manager::instance().finish();
 
     restore();