diff --git a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
index a6cdceab22a0da11467c995a8866a3c56856be46..d7d8f5648380369d352c160660b9964f49a4c46f 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpFactory.cpp
@@ -172,6 +172,7 @@ void AudioRtpFactory::stop (void)
         }
 
         _rtpSession->stopRtpThread();
+        delete _rtpSession;
 
         _rtpSession = NULL;
     } catch (...) {
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
index 9bd49b20b1ceb3515eef8ab77075030e0a5b5b3d..4c75dc3ae77b48dfad87746c03154ef2c0a1a9fa 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
@@ -302,14 +302,13 @@ int AudioRtpSession::startRtpThread (AudioCodec* audiocodec)
 
 void AudioRtpSession::stopRtpThread ()
 {
+    _queue->disableStack();
     if (_type != Zrtp) {
         AudioSymmetricRtpSession *self = dynamic_cast<AudioSymmetricRtpSession*>(this);
         assert(self);
         _debug ("AudioSymmetricRtpSession: Stopping main thread");
         self->stopSymmetricRtpThread();
     }
-
-    _queue->disableStack();
 }
 
 
diff --git a/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.cpp
index 0f9905f0d2cf062f2e75c9f83265cb4d89857d8d..6169df5926a2069fae5005084ced1a2429c95947 100644
--- a/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.cpp
@@ -62,9 +62,6 @@ AudioSymmetricRtpSession::~AudioSymmetricRtpSession()
 void AudioSymmetricRtpSession::final()
 {
     delete _rtpThread;
-
-    // See: http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.15
-    delete this;
 }
 
 AudioSymmetricRtpSession::AudioRtpThread::AudioRtpThread (AudioSymmetricRtpSession *session) : running (true), rtpSession (session)
@@ -74,7 +71,6 @@ AudioSymmetricRtpSession::AudioRtpThread::AudioRtpThread (AudioSymmetricRtpSessi
 
 AudioSymmetricRtpSession::AudioRtpThread::~AudioRtpThread()
 {
-    ost::Thread::terminate();
     _debug ("AudioSymmetricRtpSession: Delete rtp thread");
 }
 
diff --git a/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h b/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h
index f9626767134bbb1ad322f004be7ce1cb5d93122e..7a5b4953697509af0abca5911546ca455818f022 100644
--- a/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioSymmetricRtpSession.h
@@ -55,7 +55,6 @@ using std::ptrdiff_t;
 namespace sfl
 {
 
-// class AudioSymmetricRtpSession : protected ost::Thread, public ost::TimerPort, public AudioRtpRecordHandler, public ost::TRTPSessionBase<ost::DualRTPUDPIPv4Channel,ost::DualRTPUDPIPv4Channel,ost::AVPQueue>
 class AudioSymmetricRtpSession : public ost::TimerPort, public ost::SymmetricRTPSession, public AudioRtpSession
 {
     public:
@@ -69,9 +68,6 @@ class AudioSymmetricRtpSession : public ost::TimerPort, public ost::SymmetricRTP
 
         virtual void final ();
 
-        // Thread associated method
-        // virtual void run ();
-
         virtual bool onRTPPacketRecv (ost::IncomingRTPPkt& pkt) { return AudioRtpSession::onRTPPacketRecv(pkt); }
 
         int startSymmetricRtpThread (void) {