diff --git a/sflphone-common/src/audio/audiortp.cpp b/sflphone-common/src/audio/audiortp.cpp
index 2335e5ce879bd5207836f43e7e97b36fa2bf1ead..3493159f72ba943985a230bd894df5794ce8df3b 100644
--- a/sflphone-common/src/audio/audiortp.cpp
+++ b/sflphone-common/src/audio/audiortp.cpp
@@ -154,6 +154,7 @@ AudioRtpRTX::AudioRtpRTX (SIPCall *sipcall, bool sym) : time(new ost::Time()), _
     
     _debug ("%i\n", _ca->getLocalAudioPort());
     _session = new ost::SymmetricRTPSession (local_ip, _ca->getLocalAudioPort());
+    // _session = new ost::RTPSessionBase(local_ip, _ca->getLocalAudioPort());
     _sessionRecv = NULL;
     _sessionSend = NULL;
 
@@ -195,6 +196,8 @@ AudioRtpRTX::~AudioRtpRTX () {
 
     delete converter; converter = NULL;
 
+    // _session->terminate();
+
     delete _session;     _session = NULL;
 
     _debug("AudioRtpRTX instance deleted\n");
@@ -222,9 +225,9 @@ AudioRtpRTX::initBuffers()
 AudioRtpRTX::initAudioRtpSession (void) 
 {
 
-  try {
+    try {
         
-        _session->setSchedulingTimeout(10000);
+        _session->setSchedulingTimeout(100000);
         _session->setExpireTimeout(1000000);
 
 
@@ -252,10 +255,8 @@ AudioRtpRTX::setRtpSessionMedia(void)
     _codecSampleRate = _audiocodec->getClockRate();
     _codecFrameSize = _audiocodec->getFrameSize();
 
-    
-    if (_audiocodec->getPayload() == 9){
-         _debug("WE ARE G722\n");
-	 _payloadIsSet = _session->setPayloadFormat(ost::DynamicPayloadFormat((ost::StaticPayloadType) _audiocodec->getPayload(), 16000));
+    if( _audiocodec->getPayload() == 9 ) {
+        _payloadIsSet = _session->setPayloadFormat(ost::DynamicPayloadFormat((ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
     }
     else if ( _audiocodec->hasDynamicPayload() ) {
         _payloadIsSet = _session->setPayloadFormat(ost::DynamicPayloadFormat((ost::PayloadType) _audiocodec->getPayload(), _audiocodec->getClockRate()));
@@ -322,6 +323,8 @@ int
 AudioRtpRTX::processDataEncode()
 {
 
+    _debug("processDataEncode\n");
+
     // compute codec framesize in ms
     float fixed_codec_framesize = computeCodecFrameSize(_audiocodec->getFrameSize(), _audiocodec->getClockRate());
 
@@ -373,7 +376,7 @@ AudioRtpRTX::processDataEncode()
 void
 AudioRtpRTX::processDataDecode(unsigned char* spkrData, unsigned int size, int& countTime)
 {
-
+    _debug("processDataDecode\n");
     if (_audiocodec != NULL) {
 
         // Return the size of data in bytes 
@@ -427,7 +430,7 @@ AudioRtpRTX::sendSessionFromMic(int timestamp)
     //   3. encode it
     //   4. send it
     
-
+    _debug("sendSessionForSpeaker\n");
     timestamp += time->getSecond();
     // no call, so we do nothing
     if (_ca==0) { _debug(" !ARTP: No call associated (mic)\n"); return; }
@@ -439,7 +442,7 @@ AudioRtpRTX::sendSessionFromMic(int timestamp)
 
     
     int compSize = processDataEncode();
-
+    _debug("compSize: %i\n", compSize);
     // putData put the data on RTP queue, sendImmediate bypass this queue
     _session->putData(timestamp, micDataEncoded, compSize);
     // _session->sendImmediate(timestamp, micDataEncoded, compSize);
@@ -451,6 +454,8 @@ AudioRtpRTX::sendSessionFromMic(int timestamp)
 void
 AudioRtpRTX::receiveSessionForSpkr (int& countTime)
 {
+    
+    _debug("receiveSessionForSpkr\n");
 
     if (_ca == 0) { return; }
 
@@ -460,11 +465,9 @@ AudioRtpRTX::receiveSessionForSpkr (int& countTime)
 
     const ost::AppDataUnit* adu = NULL;
 
-    if (!_sym) {
-        adu = _sessionRecv->getData(_sessionRecv->getFirstTimestamp());
-    } else {
-        adu = _session->getData(_session->getFirstTimestamp());
-    }
+    
+    adu = _session->getData(_session->getFirstTimestamp());
+    
     if (adu == NULL) {
         // _debug("No RTP audio stream\n");
         return;
@@ -498,8 +501,6 @@ void
 AudioRtpRTX::run () {
       
     int sessionWaiting;
-    
-    _session->startRunning();
 
     initBuffers();
     initAudioRtpSession();
@@ -522,6 +523,8 @@ AudioRtpRTX::run () {
 
     _audiolayer->startStream();
 
+    _session->startRunning();
+
     _debug("- ARTP Action: Start call %s\n",_ca->getCallId().c_str());
     while (!testCancel()) {
 
@@ -529,8 +532,8 @@ AudioRtpRTX::run () {
         sessionWaiting = _session->isWaiting();
 
         sendSessionFromMic(timestamp); 
-        timestamp += timestep;
-      
+        // timestamp += timestep;
+	timestamp = _session->getCurrentTimestamp();
 
         // Recv session
         receiveSessionForSpkr(countTime);
diff --git a/sflphone-common/src/audio/codecs/audiocodec.h b/sflphone-common/src/audio/codecs/audiocodec.h
index c7ad5ccf1468a78c025c5dbecee0887a68d960d9..1487fb465dce56cd9a5821ba8cd3a4695398adca 100644
--- a/sflphone-common/src/audio/codecs/audiocodec.h
+++ b/sflphone-common/src/audio/codecs/audiocodec.h
@@ -34,12 +34,30 @@ public:
         : _codecName(codecName), _clockRate(8000), _channel(1),  _bitrate(0.0),_bandwidth(0),_payload(payload), _hasDynamicPayload(false),_state(true) {
   	
 	_hasDynamicPayload = (_payload >= 96 && _payload <= 127) ? true : false;
+
+	// If g722 (payload 9), we need to init libccrtp symetric sessions with using
+	// dynamic payload format. This way we get control on rtp clockrate.
+	
+	if(_payload == 9)
+	{
+	    _hasDynamicPayload = true;
+	}
+	
 }
 
     AudioCodec( const AudioCodec& codec )
         : _codecName(codec._codecName), _clockRate(codec._clockRate), _channel(codec._channel),  _bitrate(codec._bitrate),_bandwidth(codec._bandwidth),_payload(codec._payload), _hasDynamicPayload(false),_state(true) {
   	
 	_hasDynamicPayload = (_payload >= 96 && _payload <= 127) ? true : false;
+
+	// If g722 (payload 9), we need to init libccrtp symetric sessions with using
+	// dynamic payload format. This way we get control on rtp clockrate.
+	
+	if(_payload == 9)
+	{
+	    _hasDynamicPayload = true;
+	}
+	
 }
 
     virtual ~AudioCodec() {
diff --git a/sflphone-common/src/sipvoiplink.cpp b/sflphone-common/src/sipvoiplink.cpp
index 897aded5b5d5b1c355475f19608c5371e19291d0..f1e8f2cf9fe5201eee26c1fc1c95deeb130d5141 100644
--- a/sflphone-common/src/sipvoiplink.cpp
+++ b/sflphone-common/src/sipvoiplink.cpp
@@ -508,14 +508,15 @@ SIPVoIPLink::newOutgoingCall ( const CallID& id, const std::string& toUrl )
 		call->setPeerNumber ( getSipTo ( toUrl, account->getHostname() ) );
 		setCallAudioLocal ( call, getLocalIPAddress(), useStun(), getStunServer() );
 		
-		/*
+		
 		try {
 		    _debug("CREATE NEW RTP SESSION FROM NEWOUTGOINGCALL\n");
 		    _audiortp->createNewSession (call);
 		} catch (...) {
 		    _debug("Failed to create rtp thread from newOutGoingCall\n");
 		}
-		*/
+		
+		
 		
 		
 		call->initRecFileName();
@@ -539,7 +540,7 @@ SIPVoIPLink::newOutgoingCall ( const CallID& id, const std::string& toUrl )
 
                         // _audiortp->start();
 
-	                call->setAudioStart ( true );
+	                // call->setAudioStart ( true );
 		        
 			
 		}
@@ -596,9 +597,7 @@ SIPVoIPLink::answer ( const CallID& id )
      	        call->setConnectionState ( Call::Connected );
 	        call->setState ( Call::Active ); 
 
-		_audiortp->start();
-
-	        call->setAudioStart ( true );
+		 ;
 
 		return true;
 	}
@@ -1233,6 +1232,8 @@ void
 SIPVoIPLink::SIPCallAnswered ( SIPCall *call, pjsip_rx_data *rdata )
 {
 
+        _debug ( "SIPCallAnswered\n" );
+
 	pjmedia_sdp_session *r_sdp;
 
 	if ( !call )
@@ -1260,20 +1261,23 @@ SIPVoIPLink::SIPCallAnswered ( SIPCall *call, pjsip_rx_data *rdata )
 		call->setState ( Call::Active );
 
 		Manager::instance().peerAnsweredCall ( call->getCallId() );
+		if (Manager::instance().isCurrentCall(call->getCallId())) 
+		{
+		    /*
+		    _debug("CREATE NEW RTP SESSION FROM SIPCALLANSWERED\n");
+		    try {
+		        _audiortp->createNewSession (call);
+		        call->setAudioStart(true);
+		    } catch (...) {
+		        _debug("Failed to create rtp thread from answer\n");
+		    }
+		    */
 		
-		
-		_debug("CREATE NEW RTP SESSION FROM SIPCALLANSWERED\n");
-		try {
-		    _audiortp->createNewSession (call);
-		    call->setAudioStart(true);
-		} catch (...) {
-		    _debug("Failed to create rtp thread from answer\n");
-		}
-		
-		
-	        call->setAudioStart(true);	
+	            call->setAudioStart(true);	
 
-		_audiortp->start();
+		    _audiortp->start();
+
+		}
 
 	}
 	else
@@ -1346,13 +1350,13 @@ bool SIPVoIPLink::new_ip_to_ip_call ( const CallID& id, const std::string& to )
 		// Building the local SDP offer
 		call->getLocalSDP()->set_ip_address ( getLocalIP() );
                 call->getLocalSDP()->create_initial_offer();
-                /*
+                
                 try {
                     _audiortp->createNewSession (call);
                 } catch (...) {
 	    	    _debug ( "! SIP Failure: Unable to create RTP Session  in SIPVoIPLink::new_ip_to_ip_call (%s:%d)\n", __FILE__, __LINE__ );
                 }
-		*/
+		
 
 		// Generate the contact URI
 		// uri_contact << "<" << uri_from << ":" << call->getLocalSDP()->get_local_extern_audio_port() << ">";
@@ -1391,9 +1395,9 @@ bool SIPVoIPLink::new_ip_to_ip_call ( const CallID& id, const std::string& to )
 		call->setState ( Call::Active );
 		addCall ( call );
 
-		_audiortp->start();
+		// _audiortp->start();
 
-		call->setAudioStart ( true );
+		// call->setAudioStart ( true );
 
 		return true;
 	}
@@ -1912,8 +1916,7 @@ void SIPVoIPLink::handle_reinvite ( SIPCall *call )
 	_audiortp->start();
 
 	call->setAudioStart ( true );
-	// _audiortp->getRTX()->setRtpSessionRemoteIp();
-	// _audiortp->getRTX()->setRtpSessionMedia();
+	
 
 }