diff --git a/src/audio/alsalayer.cpp b/src/audio/alsalayer.cpp
index 5cfa87284110879a0e287729b3a606b82a29bdc9..a340e35aac7f01b45f6a137d7b6822fbf833e396 100644
--- a/src/audio/alsalayer.cpp
+++ b/src/audio/alsalayer.cpp
@@ -58,7 +58,6 @@ AlsaLayer::closeLayer()
     if (_audioThread)
     {
         _debug("Try to stop audio thread\n");
-        _audioThread->stop();
         delete _audioThread; _audioThread=NULL;
     }
 
@@ -180,13 +179,10 @@ void AlsaLayer::startCaptureStream (void)
 
 void AlsaLayer::prepareCaptureStream (void)
 {
-    int err;
-
-    err = snd_pcm_prepare (_CaptureHandle);
-    if( err<0 )
-        _debug("Error preparing the device\n");
-
-    prepare_capture ();
+    if (is_capture_open() ) {
+        if(snd_pcm_prepare (_CaptureHandle) < 0)    _debug("Error preparing the device\n");
+        prepare_capture ();
+    }
 }
 
 void AlsaLayer::stopPlaybackStream (void)
@@ -218,13 +214,10 @@ void AlsaLayer::startPlaybackStream (void)
 
 void AlsaLayer::preparePlaybackStream (void)
 {
-    int err;
-
-    err = snd_pcm_prepare (_PlaybackHandle);
-    if( err<0 )
-        _debug("Error preparing the device\n");
-
-    prepare_playback ();
+    if(is_playback_open()){
+        if( snd_pcm_prepare (_PlaybackHandle) < 0)  _debug("Error preparing the device\n");
+        prepare_playback ();
+    }
 }
 
 bool AlsaLayer::alsa_set_params( snd_pcm_t *pcm_handle, int type, int rate ){
@@ -343,11 +336,13 @@ AlsaLayer::open_device(std::string pcm_p, std::string pcm_c, int flag)
         if((err = snd_pcm_open(&_PlaybackHandle, pcm_p.c_str(),  SND_PCM_STREAM_PLAYBACK, 0 )) < 0){
             _debugAlsa("Error while opening playback device %s\n",  pcm_p.c_str());
             setErrorMessage( ALSA_PLAYBACK_DEVICE );
+            close_playback ();
             return false;
         }
         if(!alsa_set_params( _PlaybackHandle, 1, getSampleRate() )){
             _debug("playback failed\n");
             snd_pcm_close( _PlaybackHandle );
+            close_playback ();
             return false;
         }
 
@@ -359,11 +354,13 @@ AlsaLayer::open_device(std::string pcm_p, std::string pcm_c, int flag)
         if( (err = snd_pcm_open(&_CaptureHandle,  pcm_c.c_str(),  SND_PCM_STREAM_CAPTURE, 0)) < 0){
             _debugAlsa("Error while opening capture device %s\n",  pcm_c.c_str());
             setErrorMessage( ALSA_CAPTURE_DEVICE );
+            close_capture ();
             return false;
         }
         if(!alsa_set_params( _CaptureHandle, 0, 8000 /*getSampleRate()*/ )){
             _debug("capture failed\n");
             snd_pcm_close( _CaptureHandle );
+            close_capture ();
             return false;
         }
 
diff --git a/src/audio/pulselayer.cpp b/src/audio/pulselayer.cpp
index a4ccdb7702538d306fe980ac0d3a04042724cce5..c2e02d21bf8253eda251228ca152ef2535594e86 100644
--- a/src/audio/pulselayer.cpp
+++ b/src/audio/pulselayer.cpp
@@ -44,12 +44,16 @@ static  void audioCallback ( pa_stream* s, size_t bytes, void* userdata )
 // Destructor
 PulseLayer::~PulseLayer (void) 
 { 
+    //closeLayer();
+  
     /* Delete the pointer streams */
     delete playback;
     delete record;
   
     pa_context_disconnect( context );  
     pa_context_unref( context );
+
+    sleep(2);
 }
 
   void
@@ -63,6 +67,9 @@ PulseLayer::closeLayer( void )
   while(PulseLayer::streamState != 2)
     ;
   PulseLayer::streamState = 0; 
+
+  //TODO  Remove this ugly hack
+  sleep(2);
 }
 
   void
diff --git a/src/eventthread.cpp b/src/eventthread.cpp
index 045d62dd63bb24dc663b5f1ea664975805c00730..b0378c57ec651746988f822f6206254ac6bec2bd 100644
--- a/src/eventthread.cpp
+++ b/src/eventthread.cpp
@@ -57,12 +57,3 @@ void AudioThread::run (void)
     }
 }
 
-void AudioThread::stop (void)
-{
-    try{
-        terminate();
-    } catch(...){
-        _debugException("! ARTP: Thread destructor didn't terminate correctly");
-        throw;
-    }
-}
diff --git a/src/eventthread.h b/src/eventthread.h
index aed7759ea49257598b48743f62751d4c9fd481ba..0d631ef066254593e976e1837b1f1e54c2df7594 100644
--- a/src/eventthread.h
+++ b/src/eventthread.h
@@ -63,8 +63,6 @@ class AudioThread : public ost::Thread {
 
         virtual void run (void);
 
-        void stop (void);
-    
     private:
         AudioThread (const AudioThread& at);
         AudioThread& operator=(const AudioThread& at);