diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index 976330dda6a01217afccb2d4dd63cee088ff4c5f..1464fce26e0039058ccc6ced28c6e25a0f51cdd1 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -235,6 +235,8 @@ namespace sfl {
 	     JitterBuffer *_jbuffer;
 
 	     int _ts;
+
+	     int jitterSeqNum;
 	     
         protected:
 
@@ -283,10 +285,11 @@ namespace sfl {
 
 	_jbuffer = jitter_buffer_init(20);
 	_ts = 0;
+	jitterSeqNum = 0;
 
-	int i = 160;
-	jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_MARGIN, &i);
-	jitter_buffer_ctl(_jbuffer, JITTER_BUFFER_SET_CONCEALMENT_SIZE, &i);
+	// 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>
@@ -651,8 +654,9 @@ 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);
+	int packetTimestamp = static_cast<D*>(this)->getFirstTimestamp();
+        adu = static_cast<D*>(this)->getData(packetTimestamp);
+	// packetTimestamp = adu->getgetTimestamp();
 
         if (adu == NULL) {
             // _debug("No RTP audio stream\n");
@@ -662,49 +666,61 @@ 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();
+	// jPacketIn.timestamp = static_cast<D*>(this)->getFirstTimestamp();
+	jPacketIn.timestamp = jitterSeqNum * _timestampIncrement;
+	jPacketIn.span = _timestampIncrement;
+	jPacketIn.sequence = ++jitterSeqNum;
 
-	_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;
+	jPacketIn.timestamp = 0;
+	jPacketIn.span = 0;
+	jPacketIn.sequence = 0;
 
-	int desiredSpan = 20;
-	spx_int32_t offs;
+	int desiredSpan = _timestampIncrement;
+	spx_int32_t offs = 0;
 
-	_debug("RTP: jitter buffer get");
-	jitter_buffer_get(_jbuffer, &jPacketOut, desiredSpan, &offs);
+	int result = JITTER_BUFFER_INTERNAL_ERROR;
+	result = jitter_buffer_get(_jbuffer, &jPacketOut, desiredSpan, &offs);
 	jitter_buffer_tick(_jbuffer);
 
+	switch(result) {
+	  case JITTER_BUFFER_OK:
+	    _debug("JITTER_BUFFER_OK");
+	    break;
+	  case JITTER_BUFFER_MISSING:
+	    _debug("JITTER_BUFFER_MISSING");
+	    break;
+	  case JITTER_BUFFER_INTERNAL_ERROR:
+	    _debug("JITTER_BUFFER_INTERNAL_ERROR");
+	    break;
+	  case JITTER_BUFFER_BAD_ARGUMENT:
+	    _debug("JITTER_BUFFER_BAD_ARGUMENT");
+	    break;
+	  default:
+	    _debug("Unknown error");
+	    break;
+	}
+
         // DTMF over RTP, size must be over 4 in order to process it as voice data
         if(size > 4) {
-	  processDataDecode(spkrData, size);
-	  // processDataDecode ((unsigned char *)jPacketOut.data, jPacketOut.len);
+	    // processDataDecode(spkrData, size);
+	    if(result == JITTER_BUFFER_OK)
+	        processDataDecode ((unsigned char *)jPacketOut.data, jPacketOut.len);
         }
         else {
-        	// _debug("RTP: Received an RTP event with payload: %d", adu->getType());
-			// ost::RTPPacket::RFC2833Payload *dtmf = (ost::RTPPacket::RFC2833Payload *)adu->getData();
-			// _debug("RTP: Data received %d", dtmf->event);
-
+	    // _debug("RTP: Received an RTP event with payload: %d", adu->getType());
+	    // ost::RTPPacket::RFC2833Payload *dtmf = (ost::RTPPacket::RFC2833Payload *)adu->getData();
+	    // _debug("RTP: Data received %d", dtmf->event);
         }
 
 	delete jPacketOut.data;
-
 	delete adu;
     }
     
@@ -724,6 +740,8 @@ namespace sfl {
 	// Timestamp must be initialized randomly
 	_timestamp = static_cast<D*>(this)->getCurrentTimestamp();
 
+	_ts = 0;
+
         int sessionWaiting;
         int threadSleep = 0;
 
@@ -742,9 +760,9 @@ namespace sfl {
         }
 
         _ca->setRecordingSmplRate(_audiocodec->getClockRate());
- 
+
         // Start audio stream (if not started) AND flush all buffers (main and urgent)
-		_manager->getAudioDriver()->startStream();
+	_manager->getAudioDriver()->startStream();
         static_cast<D*>(this)->startRunning();