diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp
index f91a520417a8b30b13f680e68fbfd56d09ee2324..e5ca864f0b70a124994544057d6bcdd24115e1ca 100644
--- a/sflphone-common/src/managerimpl.cpp
+++ b/sflphone-common/src/managerimpl.cpp
@@ -173,6 +173,15 @@ void ManagerImpl::terminate ()
 
     _debug ("Manager: Terminate ");
 
+    std::vector<std::string> callList = getCallList();
+    _debug ("Manager: Hangup %d remaining call", callList.size());
+    std::vector<std::string>::iterator iter = callList.begin();
+
+    while (iter != callList.end()) {
+        hangupCall (*iter);
+        iter++;
+    }
+
     unloadAccountMap();
 
     _debug ("Manager: Unload DTMF key");
@@ -393,7 +402,6 @@ bool ManagerImpl::hangupCall (const CallID& call_id)
 
     _info ("Manager: Hangup call %s", call_id.c_str());
 
-    PulseLayer *pulselayer;
     AccountID account_id;
     bool returnValue = true;
 
@@ -453,10 +461,6 @@ bool ManagerImpl::hangupCall (const CallID& call_id)
         audiolayer->stopStream();
     }
 
-    if (_audiodriver->getLayerType() == PULSEAUDIO) {
-        pulselayer = dynamic_cast<PulseLayer *> (getAudioDriver());
-    }
-
     return returnValue;
 }