diff --git a/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp b/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
index 5e5e1fb70ae52082666631fe3494319182daf667..aa452d9308186e3969561dfb88850ec3ae70f579 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
@@ -400,6 +400,8 @@ void AudioRtpRecordHandler::putDtmfEvent(int digit)
 
 int AudioRtpRecordHandler::processDataEncode(void)
 {
+	_debug("AudioProcessEncode");
+
 	AudioCodec *audioCodec = getAudioCodec();
 	AudioLayer *audioLayer = Manager::instance().getAudioDriver();
 
@@ -457,6 +459,9 @@ int AudioRtpRecordHandler::processDataEncode(void)
 
 void AudioRtpRecordHandler::processDataDecode(unsigned char *spkrData, unsigned int size)
 {
+
+	_debug("AudioProcessDecode");
+
 	AudioCodec *audioCodec = getAudioCodec();
 	AudioLayer *audioLayer = Manager::instance().getAudioDriver();
 
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
index f46471e8a1dc6f59f34450b0bb06df38d213ca76..21d4c6ccbb5fb49182b9efec83f57d49fff7ffc5 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
@@ -43,13 +43,13 @@ namespace sfl
 
 AudioRtpSession::AudioRtpSession (ManagerImpl * manager, SIPCall * sipcall) :
 		// ost::SymmetricRTPSession (ost::InetHostAddress (sipcall->getLocalIp().c_str()), sipcall->getLocalAudioPort()),
-		TRTPSessionBase<ost::DualRTPUDPIPv4Channel,ost::DualRTPUDPIPv4Channel,ost::AVPQueue>(ost::InetHostAddress (sipcall->getLocalIp().c_str()),
-																												   sipcall->getLocalAudioPort(),
-																												   0,
-																												   ost::MembershipBookkeeping::defaultMembersHashSize,
-																												   ost::defaultApplication()),
-		AudioRtpRecordHandler(manager, sipcall)
-																			, _time (new ost::Time())
+		AudioRtpRecordHandler(manager, sipcall),
+		ost::TRTPSessionBase<ost::DualRTPUDPIPv4Channel,ost::DualRTPUDPIPv4Channel,ost::AVPQueue>(ost::InetHostAddress (sipcall->getLocalIp().c_str()),
+																sipcall->getLocalAudioPort(),
+																0,
+																ost::MembershipBookkeeping::defaultMembersHashSize,
+																ost::defaultApplication())
+																		, _time (new ost::Time())
         																	, _mainloopSemaphore (0)
         																	, _manager (manager)
         																	, _timestamp (0)
@@ -58,20 +58,19 @@ AudioRtpSession::AudioRtpSession (ManagerImpl * manager, SIPCall * sipcall) :
         																	, _countNotificationTime (0)
         																	, _ca (sipcall)
 {
-	static_cast<ost::Thread *>(this)->setCancel (cancelDefault);
+    setCancel (cancelDefault);
 
     assert (_ca);
 
-    _info ("AudioRtpSession: Local audio port %i will be used", _ca->getLocalAudioPort());
-
+    _info ("AudioRtpSession: Setting new RTP session with destination %s:%d", _ca->getLocalIp().c_str(), _ca->getLocalAudioPort());
 }
 
 AudioRtpSession::~AudioRtpSession()
 {
-    _debug ("AudioRtpSession: Delete AudioRtpSession instance");
+    _info ("AudioRtpSession: Delete AudioRtpSession instance");
 
     try {
-    	static_cast<ost::Thread *>(this)->terminate();
+	terminate();
     } catch (...) {
         _debugException ("AudioRtpSession: Thread destructor didn't terminate correctly");
         throw;
@@ -87,12 +86,16 @@ AudioRtpSession::~AudioRtpSession()
 
 void AudioRtpSession::setSessionTimeouts (void)
 {
+	_debug("AudioRtpSession: Set session scheduling timeout (%d) and expireTimeout (%d)", sfl::schedulingTimeout, sfl::expireTimeout);
+
 	setSchedulingTimeout (sfl::schedulingTimeout);
 	setExpireTimeout (sfl::expireTimeout);
 }
 
 void AudioRtpSession::setSessionMedia (AudioCodec* audioCodec)
 {
+	_debug("AudioRtpSession: Set session media");
+
 	// set internal codec info for this session
 	setRtpMedia(audioCodec);
 
@@ -108,6 +111,7 @@ void AudioRtpSession::setSessionMedia (AudioCodec* audioCodec)
     else
         _timestampIncrement = frameSize;
 
+    _debug ("AudioRptSession: Codec payload: %d", payloadType);
     _debug ("AudioRtpSession: Codec sampling rate: %d", smplRate);
     _debug ("AudioRtpSession: Codec frame size: %d", frameSize);
     _debug ("AudioRtpSession: RTP timestamp increment: %d", _timestampIncrement);
@@ -158,6 +162,8 @@ void AudioRtpSession::setDestinationIpAddress (void)
 
 void AudioRtpSession::updateDestinationIpAddress (void)
 {
+    _debug("AudioRtpSession: Update destination ip address");
+
     // Destination address are stored in a list in ccrtp
     // This method remove the current destination entry
 
@@ -222,6 +228,8 @@ bool onRTPPacketRecv (ost::IncomingRTPPkt&)
 
 void AudioRtpSession::sendMicData()
 {
+    _debug("sendMicData");
+
     // Increment timestamp for outgoing packet
     _timestamp += _timestampIncrement;
 
@@ -234,6 +242,8 @@ void AudioRtpSession::sendMicData()
 
 void AudioRtpSession::receiveSpeakerData ()
 {
+    _debug("receiveSpkrData");
+	
     const ost::AppDataUnit* adu = NULL;
 
     int packetTimestamp = getFirstTimestamp();
@@ -267,12 +277,12 @@ void AudioRtpSession::receiveSpeakerData ()
 
 int AudioRtpSession::startRtpThread (AudioCodec* audiocodec)
 {
-    _debug ("RTP: Starting main thread");
+    _debug ("AudioRtpSession: Starting main thread");
+    initNoiseSuppress();
     setSessionTimeouts();
     setSessionMedia (audiocodec);
     initBuffers();
-    int ret = static_cast<ost::Thread *>(this)->start (_mainloopSemaphore);
-    this->startRunning();
+    int ret = start (_mainloopSemaphore);
     return ret;
 }
 
@@ -291,8 +301,6 @@ void AudioRtpSession::run ()
         threadSleep = getAudioLayerFrameSize();
     }
 
-    initNoiseSuppress();
-
     TimerPort::setTimer (threadSleep);
 
     // Set recording sampling rate
@@ -304,7 +312,10 @@ void AudioRtpSession::run ()
 
     _debug ("AudioRtpSession: Entering mainloop for call %s",_ca->getCallId().c_str());
 
-    while (!static_cast<ost::Thread *>(this)->testCancel()) {
+    // while (!static_cast<ost::Thread *>(this)->testCancel()) {
+    while (!testCancel()) {
+
+	_debug("audio");
 
         // Reset timestamp to make sure the timing information are up to date
         if (_timestampCount > RTP_TIMESTAMP_RESET_FREQ) {
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index 0f3084b153feb7fdd73588ef1c55df956e370f08..665dfe9cffa581a45054b249cf0710f10bdd8bff 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -49,6 +49,7 @@
 #include "managerimpl.h"
 
 #include <ccrtp/rtp.h>
+#include <ccrtp/iqueue.h>
 #include <cc++/numbers.h> // ost::Time
 
 #include <fstream>
@@ -58,7 +59,7 @@ namespace sfl
 
 // class AudioRtpSession : public ost::Thread, public ost::TimerPort, public AudioRtpRecordHandler, public ost::SymmetricRTPSession
 // class AudioRtpSession : public ost::Thread, public ost::TimerPort, public ost::SymmetricRTPSession, public AudioRtpRecordHandler
-class AudioRtpSession : public ost::Thread, public ost::TimerPort, public AudioRtpRecordHandler, public ost::TRTPSessionBase<ost::DualRTPUDPIPv4Channel,ost::DualRTPUDPIPv4Channel,ost::AVPQueue>
+class AudioRtpSession : protected ost::Thread, public ost::TimerPort, public AudioRtpRecordHandler, public ost::TRTPSessionBase<ost::DualRTPUDPIPv4Channel,ost::DualRTPUDPIPv4Channel,ost::AVPQueue>
 {
     public:
         /**