diff --git a/sflphone-common/src/audio/pulseaudio/audiostream.cpp b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
index 908e8a7a8fb123344646cae1c1a28d5cb832da79..deaab30f5b545228952e237fd4ba8c52b43f8ead 100644
--- a/sflphone-common/src/audio/pulseaudio/audiostream.cpp
+++ b/sflphone-common/src/audio/pulseaudio/audiostream.cpp
@@ -99,7 +99,7 @@ AudioStream::disconnectStream (void)
 {
     _debug ("Destroy audio streams\n");
 
-    pa_threaded_mainloop_lock (_mainloop);
+    // pa_threaded_mainloop_lock (_mainloop);
 
     if (_audiostream) {
         pa_stream_disconnect (_audiostream);
@@ -107,7 +107,7 @@ AudioStream::disconnectStream (void)
         _audiostream = NULL;
     }
 
-    pa_threaded_mainloop_unlock (_mainloop);
+    // pa_threaded_mainloop_unlock (_mainloop);
 
     return true;
 }
diff --git a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
index a570e7df9b2d021636e8776a03a2372e23943057..c1ffa9c9c0ce9836b3366a2acdec810291586baf 100644
--- a/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
+++ b/sflphone-common/src/audio/pulseaudio/pulselayer.cpp
@@ -294,16 +294,26 @@ bool PulseLayer::openDevice (int indexIn UNUSED, int indexOut UNUSED, int sample
 void PulseLayer::closeCaptureStream (void)
 {
     if (record) {
+
+	pa_threaded_mainloop_lock (m);
+	
 	delete record;
 	record=NULL;
+
+	pa_threaded_mainloop_unlock (m);
     }
 }
 
 void PulseLayer::closePlaybackStream (void)
 {
     if (playback) {
+
+	pa_threaded_mainloop_lock (m);
+
 	delete playback;
 	playback=NULL;
+
+	pa_threaded_mainloop_unlock (m);
     }
 }
 
@@ -471,13 +481,12 @@ void PulseLayer::writeToSpeaker (void)
     if (urgentAvailBytes > 0) {
 
 	_debug("Urgent Avail?????????????????????\n");
-
-        // Urgent data (dtmf, incoming call signal) come first.
-        //_debug("Play urgent!: %i\e" , urgentAvail);
+        
         toGet = (urgentAvailBytes < (int) (framesPerBuffer * sizeof (SFLDataFormat))) ? urgentAvailBytes : framesPerBuffer * sizeof (SFLDataFormat);
         out = (SFLDataFormat*) pa_xmalloc (toGet * sizeof (SFLDataFormat));
         _urgentRingBuffer.Get (out, toGet, 100);
         pa_stream_write (playback->pulseStream(), out, toGet, NULL, 0, PA_SEEK_RELATIVE);
+
         // Consume the regular one as well (same amount of bytes)
         _mainBuffer.discard (toGet);