diff --git a/src/audio/audiortp.cpp b/src/audio/audiortp.cpp
index b85805c167478c52c4825e1446dc09f4bcc1ee25..03e1e7607afdbe9a2d17a960f5190c623574ab74 100644
--- a/src/audio/audiortp.cpp
+++ b/src/audio/audiortp.cpp
@@ -118,7 +118,11 @@ AudioRtpRTX::AudioRtpRTX (SipCall *sipcall,
 }
 
 AudioRtpRTX::~AudioRtpRTX () {
-  terminate();
+  try {
+    terminate();
+  } catch (...) {
+    _debug("AudioRtpRTX: try to terminate, but catch an exception...\n");
+  }
   _debug("Thread: AudioRtpRTX stop session\n");
   if (!_sym) {
     delete _sessionRecv; _sessionRecv = NULL;
diff --git a/src/audio/tonegenerator.cpp b/src/audio/tonegenerator.cpp
index 18508b92d7caf86f8363d010d396a4f813c923fd..c7b1488e4a2833b6e139fb3bb837941d4154d8ff 100644
--- a/src/audio/tonegenerator.cpp
+++ b/src/audio/tonegenerator.cpp
@@ -45,7 +45,11 @@ ToneThread::ToneThread (int16 *buf, int size) : ost::Thread () {
 }
 
 ToneThread::~ToneThread (void) {
-  terminate();
+  try {
+    terminate();
+  } catch (...) {
+    _debug("ToneThread: try to terminate, but catch an exception...\n");
+  }
   delete[] buf_ctrl_vol; buf_ctrl_vol=NULL;
 }
 
@@ -109,12 +113,13 @@ ToneGenerator::~ToneGenerator (void) {
 
 /**
  * Initialisation of ring tone for supported zone
+ * http://nemesis.lonestar.org/reference/telecom/signaling/busy.html
  */
 void
 ToneGenerator::initTone (void) {
 	toneZone[ID_NORTH_AMERICA][ZT_TONE_DIALTONE] = "350+440";
 	toneZone[ID_NORTH_AMERICA][ZT_TONE_BUSY] = "480+620/500,0/500";
-	toneZone[ID_NORTH_AMERICA][ZT_TONE_RINGTONE] = "440+480/2000,0/2000";
+	toneZone[ID_NORTH_AMERICA][ZT_TONE_RINGTONE] = "440+480/2000,0/4000";
 	toneZone[ID_NORTH_AMERICA][ZT_TONE_CONGESTION] = "480+620/250,0/250"; 
 
 	toneZone[ID_FRANCE][ZT_TONE_DIALTONE] = "440";
@@ -326,9 +331,10 @@ void
 ToneGenerator::stopTone() {
   _currentTone = ZT_TONE_NULL;
 
-  // we end the last thread
-  _debug("Thread: stop tonethread\n");
+  _debug("Thread: delete tonethread\n");
   delete tonethread; tonethread = NULL;
+  // we end the last thread
+  _debug("Thread: tonethread deleted\n");
 }
 
 /**
diff --git a/src/gui/server/guiserverimpl.cpp b/src/gui/server/guiserverimpl.cpp
index 171e9e5a2fbf65d3576f857fcca459dd102efdfd..edb94b6c9ea4563e3b1df4c5e1d0bf351a7e7b06 100644
--- a/src/gui/server/guiserverimpl.cpp
+++ b/src/gui/server/guiserverimpl.cpp
@@ -317,7 +317,7 @@ GUIServerImpl::peerAnsweredCall (CALLID id)
 {
   CallMap::iterator iter = _callMap.find(id);
   if ( iter != _callMap.end() ) {
-    _requestManager.sendResponse(ResponseMessage("200", iter->second.sequenceId(), "OK"));
+    _requestManager.sendResponse(ResponseMessage("200", iter->second.sequenceId(), "Established"));
   }
 }
 
diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp
index ada5d845ee9ad753968ed27839b85d6e153a19d6..1844cf0cd142aaaa22bb2e068b10f869bd477da9 100644
--- a/src/managerimpl.cpp
+++ b/src/managerimpl.cpp
@@ -809,12 +809,13 @@ ManagerImpl::playATone(unsigned int tone) {
 void 
 ManagerImpl::stopTone() {
   if (isDriverLoaded()) {
-    ost::MutexLock m(_toneMutex);
+    _toneMutex.enterMutex();
     if ( _toneType != ZT_TONE_NULL ) {
       _toneType = ZT_TONE_NULL;
       _tone->stopTone();
-      getAudioDriver()->stopStream();
     }
+    _toneMutex.leaveMutex();
+    getAudioDriver()->stopStream();
   }
 }