diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index 7ec80ebc86ee0ae8810bc2c396f084484924d37c..976330dda6a01217afccb2d4dd63cee088ff4c5f 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -50,6 +50,8 @@
 #include <ccrtp/rtp.h>
 #include <cc++/numbers.h> // ost::Time
 
+#include <speex/speex_jitter.h>
+
 // Frequency (in packet number)
 #define RTP_TIMESTAMP_RESET_FREQ 100
 
@@ -229,9 +231,16 @@ namespace sfl {
               * EventQueue used to store list of DTMF-
               */
              EventQueue _eventQueue;
+
+	     JitterBuffer *_jbuffer;
+
+	     int _ts;
 	     
         protected:
+
              SIPCall * _ca;
+
+	     bool onRTPPacketRecv(ost::IncomingRTPPkt&);
     };    
     
     template <typename D>
@@ -255,6 +264,7 @@ namespace sfl {
      _timestampIncrement(0),
      _timestampCount(0),
      _countNotificationTime(0),
+     _jbuffer(NULL),
      _ca (sipcall)
     {
         setCancel (cancelDefault);
@@ -271,6 +281,12 @@ namespace sfl {
         _layerFrameSize = _audiolayer->getFrameSize(); // in ms
         _layerSampleRate = _audiolayer->getSampleRate();
 
+	_jbuffer = jitter_buffer_init(20);
+	_ts = 0;
+
+	int i = 160;
+	jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_MARGIN, &i);
+	jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_CONCEALMENT_SIZE, &i);
     }
     
     template <typename D>
@@ -296,8 +312,10 @@ namespace sfl {
         delete _converter;
 
         if (_audiocodec) {
-        	delete _audiocodec; _audiocodec = NULL;
+	    delete _audiocodec; _audiocodec = NULL;
         }
+
+	jitter_buffer_destroy(_jbuffer);
     }
     
     template <typename D>
@@ -476,13 +494,21 @@ namespace sfl {
 	}
     }
 
+    template <typename D>
+    bool onRTPPacketRecv(ost::IncomingRTPPkt&)
+    {
+        _debug("AudioRtpSession: onRTPPacketRecv");
+
+	return true;
+    }
+
+
     template <typename D>
     int AudioRtpSession<D>::processDataEncode(void)
     {
         assert(_audiocodec);
         assert(_audiolayer);
 
-	
         int _mainBufferSampleRate = _manager->getAudioDriver()->getMainBuffer()->getInternalSamplingRate();
 
         // compute codec framesize in ms
@@ -626,6 +652,7 @@ namespace sfl {
         const ost::AppDataUnit* adu = NULL;
 
         adu = static_cast<D*>(this)->getData(static_cast<D*>(this)->getFirstTimestamp());
+	// adu = static_cast<D*>(this)->getData(_ts);
 
         if (adu == NULL) {
             // _debug("No RTP audio stream\n");
@@ -633,12 +660,41 @@ namespace sfl {
         }
 
         unsigned char* spkrData  = (unsigned char*) adu->getData(); // data in char
-
         unsigned int size = adu->getSize(); // size in char
 
+	_debug("RTP: size %d", size);
+	_debug("RTP: timestamp %d", static_cast<D*>(this)->getFirstTimestamp());
+	_debug("RTP: timestamp %d", _ts);
+	_debug("RTP: sequence number %d", adu->getSeqNum());
+
+	JitterBufferPacket jPacketIn;
+	jPacketIn.data = (char *)spkrData;
+	jPacketIn.len = size;
+	//  jPacketIn.timestamp = static_cast<D*>(this)->getFirstTimestamp();
+	jPacketIn.timestamp = _ts+=20;
+	jPacketIn.span = 20;
+	jPacketIn.sequence = adu->getSeqNum();
+
+	_debug("RTP: jitter buffer put");
+	jitter_buffer_put(_jbuffer, &jPacketIn);
+
+	JitterBufferPacket jPacketOut;
+	jPacketOut.data = new char[size];
+	jPacketOut.len = size;
+	jPacketOut.span = 20;
+	jPacketOut.sequence = 0;
+
+	int desiredSpan = 20;
+	spx_int32_t offs;
+
+	_debug("RTP: jitter buffer get");
+	jitter_buffer_get(_jbuffer, &jPacketOut, desiredSpan, &offs);
+	jitter_buffer_tick(_jbuffer);
+
         // DTMF over RTP, size must be over 4 in order to process it as voice data
         if(size > 4) {
-        	processDataDecode (spkrData, size);
+	  processDataDecode(spkrData, size);
+	  // processDataDecode ((unsigned char *)jPacketOut.data, jPacketOut.len);
         }
         else {
         	// _debug("RTP: Received an RTP event with payload: %d", adu->getType());
@@ -646,6 +702,10 @@ namespace sfl {
 			// _debug("RTP: Data received %d", dtmf->event);
 
         }
+
+	delete jPacketOut.data;
+
+	delete adu;
     }
     
     template <typename D>