diff --git a/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp b/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
index 226602fb579830cf7fb6fa674a0ff2c98a2c29a4..43e20fcfe39dafd9de4a26e46306437340694ba4 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.cpp
@@ -37,7 +37,7 @@ namespace sfl
 
 static const SFLDataFormat initFadeinFactor = 32000;
 
-AudioRtpRecord::AudioRtpRecord (ManagerImpl *manager) : _audioCodec (NULL)
+AudioRtpRecord::AudioRtpRecord () : _audioCodec (NULL)
     , _hasDynamicPayloadType (false)
     , _micData (NULL)
     , _micDataConverted (NULL)
@@ -114,228 +114,21 @@ AudioRtpRecord::~AudioRtpRecord()
     }
 }
 
-AudioCodec *AudioRtpRecord::getAudioCodec() const
-{
-    return _audioCodec;
-}
-
-int AudioRtpRecord::getCodecPayloadType() const
-{
-    return _codecPayloadType;
-}
-
-bool AudioRtpRecord::getHasDynamicPayload() const
-{
-    return _hasDynamicPayloadType;
-}
-
-int AudioRtpRecord::getAudioLayerFrameSize() const
-{
-    return _audioLayerFrameSize;
-}
-
-int AudioRtpRecord::getAudioLayerSampleRate() const
-{
-    return _audioLayerSampleRate;
-}
-
-int AudioRtpRecord::getCodecFrameSize() const
-{
-    return _codecFrameSize;
-}
-
-int AudioRtpRecord::getCodecSampleRate() const
-{
-    return _codecSampleRate;
-}
-
-SamplerateConverter *AudioRtpRecord::getConverter() const
-{
-    return _converter;
-}
-
-EventQueue *AudioRtpRecord::getEventQueue()
-{
-    return &_eventQueue;
-}
-
-int AudioRtpRecord::getEventQueueSize() const
-{
-    return _eventQueue.size();
-}
-
-SFLDataFormat *AudioRtpRecord::getMicData()
-{
-    return _micData;
-}
-
-SFLDataFormat *AudioRtpRecord::getMicDataConverted()
-{
-    return _micDataConverted;
-}
-
-unsigned char *AudioRtpRecord::getMicDataEncoded()
-{
-    return _micDataEncoded;
-}
-
-SFLDataFormat *AudioRtpRecord::getMicAmplFactor()
-{
-    return &_micAmplFactor;
-}
-
-bool AudioRtpRecord::getMicFadeInComplete() const
-{
-    return _micFadeInComplete;
-}
-
-SFLDataFormat *AudioRtpRecord::getSpkrAmplFactor()
-{
-    return &_spkrAmplFactor;
-}
-
-SFLDataFormat *AudioRtpRecord::getSpkrDataConverted() const
-{
-    return _spkrDataConverted;
-}
-
-SFLDataFormat *AudioRtpRecord::getSpkrDataDecoded() const
-{
-    return _spkrDataDecoded;
-}
-
-bool AudioRtpRecord::getSpkrFadeInComplete() const
-{
-    return _spkrFadeInComplete;
-}
-
-AudioProcessing *AudioRtpRecord::getNoiseReductionProcess() const
-{
-    return _audioProcess;
-}
-
-void AudioRtpRecord::setAudioCodec (AudioCodec *audiocodec)
-{
-    this->_audioCodec = audiocodec;
-}
-
-void AudioRtpRecord::setCodecPayloadType (int codecPayloadType)
-{
-    this->_codecPayloadType = codecPayloadType;
-}
 
-void AudioRtpRecord::setHasDynamicPayload (bool hasDynamicPayload)
-{
-    _hasDynamicPayloadType = hasDynamicPayload;
-}
+AudioRtpRecordHandler::AudioRtpRecordHandler (ManagerImpl *manager, SIPCall *ca) : _audioRtpRecord (), _ca (ca) {}
 
-void AudioRtpRecord::setAudioLayerFrameSize (int _audioLayerFrameSize)
-{
-    this->_audioLayerFrameSize = _audioLayerFrameSize;
-}
 
-void AudioRtpRecord::setAudioLayerSampleRate (int _audioLayerSampleRate)
-{
-    this->_audioLayerSampleRate = _audioLayerSampleRate;
-}
-
-void AudioRtpRecord::setCodecFrameSize (int _codecFrameSize)
-{
-    this->_codecFrameSize = _codecFrameSize;
-}
-
-void AudioRtpRecord::setCodecSampleRate (int _codecSampleRate)
-{
-    this->_codecSampleRate = _codecSampleRate;
-}
-
-void AudioRtpRecord::setConverter (SamplerateConverter *_converter)
-{
-    this->_converter = _converter;
-}
-
-
-void AudioRtpRecord::setEventQueue (EventQueue _eventQueue)
-{
-    this->_eventQueue = _eventQueue;
-}
-
-void AudioRtpRecord::setMicData (SFLDataFormat * micData)
-{
-    this->_micData = micData;
-}
-
-void AudioRtpRecord::setMicDataConverted (SFLDataFormat *micDataConverted)
-{
-    this->_micDataConverted = micDataConverted;
-}
-
-void AudioRtpRecord::setMicDataEncoded (unsigned char *micDataEncoded)
-{
-    this->_micDataEncoded = micDataEncoded;
-}
-
-void AudioRtpRecord::setMicAmplFactor (SFLDataFormat _micAmplFactor)
-{
-    this->_micAmplFactor = _micAmplFactor;
-}
-
-void AudioRtpRecord::setMicFadeInComplete (bool _micFadeInComplete)
-{
-    this->_micFadeInComplete = _micFadeInComplete;
-}
-
-void AudioRtpRecord::setSpkrAmplFactor (SFLDataFormat _spkrAmplFactor)
-{
-    this->_spkrAmplFactor = _spkrAmplFactor;
-}
-
-void AudioRtpRecord::setSpkrDataConverted (SFLDataFormat *_spkrDataConverted)
-{
-    this->_spkrDataConverted = _spkrDataConverted;
-}
-
-void AudioRtpRecord::setSpkrDataDecoded (SFLDataFormat *_spkrDataDecoded)
-{
-    this->_spkrDataDecoded = _spkrDataDecoded;
-}
-
-void AudioRtpRecord::setSpkrFadeInComplete (bool _spkrFadeInComplete)
-{
-    this->_spkrFadeInComplete = _spkrFadeInComplete;
-}
-
-void AudioRtpRecord::setAudioProcessing (AudioProcessing *audioProcess)
-{
-    this->_audioProcess = audioProcess;
-}
-
-void AudioRtpRecord::setNoiseSuppress (NoiseSuppress *noiseSuppress)
-{
-    this->_noiseSuppress = noiseSuppress;
-}
-
-AudioRtpRecordHandler::AudioRtpRecordHandler (ManagerImpl *manager, SIPCall *ca) : _audioRtpRecord (manager), _ca (ca)
-{
-    // TODO Auto-generated constructor stub
-
-}
-
-
-AudioRtpRecordHandler::~AudioRtpRecordHandler()
-{
-    // TODO Auto-generated destructor stub
-}
+AudioRtpRecordHandler::~AudioRtpRecordHandler() {}
 
 void AudioRtpRecordHandler::setRtpMedia (AudioCodec* audioCodec)
 {
 
     // Set varios codec info to reduce indirection
-    _audioRtpRecord.setAudioCodec (audioCodec);
-    _audioRtpRecord.setCodecPayloadType (audioCodec->getPayload());
-    _audioRtpRecord.setCodecSampleRate (audioCodec->getClockRate());
-    _audioRtpRecord.setCodecFrameSize (audioCodec->getFrameSize());
-    _audioRtpRecord.setHasDynamicPayload (audioCodec->hasDynamicPayload());
+    _audioRtpRecord._audioCodec = audioCodec;
+    _audioRtpRecord._codecPayloadType = audioCodec->getPayload();
+    _audioRtpRecord._codecSampleRate = audioCodec->getClockRate();
+    _audioRtpRecord._codecFrameSize = audioCodec->getFrameSize();
+    _audioRtpRecord._hasDynamicPayloadType = audioCodec->hasDynamicPayload();
 }
 
 
@@ -351,24 +144,23 @@ void AudioRtpRecordHandler::init()
 
 void AudioRtpRecordHandler::initBuffers()
 {
+    int codecSampleRate = _audioRtpRecord._codecSampleRate;
+
     // Set sampling rate, main buffer choose the highest one
-    Manager::instance().getAudioDriver()->getMainBuffer()->setInternalSamplingRate (getCodecSampleRate());
+    Manager::instance().getAudioDriver()->getMainBuffer()->setInternalSamplingRate (codecSampleRate);
 
     // initialize SampleRate converter using AudioLayer's sampling rate
     // (internal buffers initialized with maximal sampling rate and frame size)
-    _audioRtpRecord.setConverter (new SamplerateConverter (getAudioLayerSampleRate(), getAudioLayerFrameSize()));
-
-    int nbSamplesMax = (int) ( (getCodecSampleRate() * getAudioLayerFrameSize() / 1000)) * 2;
-    _audioRtpRecord.setMicData (new SFLDataFormat[nbSamplesMax]);
-    _audioRtpRecord.setMicDataConverted (new SFLDataFormat[nbSamplesMax]);
-    _audioRtpRecord.setMicDataEncoded (new unsigned char[nbSamplesMax * 2]);
-    _audioRtpRecord.setSpkrDataConverted (new SFLDataFormat[nbSamplesMax]);
-    _audioRtpRecord.setSpkrDataDecoded (new SFLDataFormat[nbSamplesMax]);
-    // memset (_micData, 0, nbSamplesMax*sizeof (SFLDataFormat));
-    // memset (_micDataConverted, 0, nbSamplesMax*sizeof (SFLDataFormat));
-    // memset (_micDataEncoded, 0, nbSamplesMax*2);
-    // memset (_spkrDataConverted, 0, nbSamplesMax*sizeof (SFLDataFormat));
-    // memset (_spkrDataDecoded, 0, nbSamplesMax*sizeof (SFLDataFormat));
+    _audioRtpRecord._converter = new SamplerateConverter (getAudioLayerSampleRate(), getAudioLayerFrameSize());
+
+    // int nbSamplesMax = (int) ( (getCodecSampleRate() * getAudioLayerFrameSize() / 1000)) * 2;
+    int nbSamplesMax = (int) ( (getCodecSampleRate() * 44100 / 1000)) * 2;
+    _audioRtpRecord._micData = new SFLDataFormat[nbSamplesMax];
+    _audioRtpRecord._micDataConverted = new SFLDataFormat[nbSamplesMax];
+    _audioRtpRecord._micDataEncoded = new unsigned char[nbSamplesMax * 2];
+    _audioRtpRecord._spkrDataConverted = new SFLDataFormat[nbSamplesMax];
+    _audioRtpRecord._spkrDataDecoded = new SFLDataFormat[nbSamplesMax];
+
     Manager::instance().addStream (_ca->getCallId());
 }
 
@@ -377,8 +169,8 @@ void AudioRtpRecordHandler::initNoiseSuppress()
     NoiseSuppress *noiseSuppress = new NoiseSuppress (getCodecFrameSize(), getCodecSampleRate());
     AudioProcessing *processing = new AudioProcessing (noiseSuppress);
 
-    _audioRtpRecord.setNoiseSuppress (noiseSuppress);
-    _audioRtpRecord.setAudioProcessing (processing);
+    _audioRtpRecord._noiseSuppress = noiseSuppress;
+    _audioRtpRecord._audioProcess = processing;
 }
 
 void AudioRtpRecordHandler::putDtmfEvent (int digit)
@@ -397,20 +189,23 @@ void AudioRtpRecordHandler::putDtmfEvent (int digit)
 int AudioRtpRecordHandler::processDataEncode (void)
 {
 
-    AudioCodec *audioCodec = getAudioCodec();
+    AudioCodec *audioCodec = _audioRtpRecord._audioCodec;
     AudioLayer *audioLayer = Manager::instance().getAudioDriver();
 
-    SFLDataFormat *micData = _audioRtpRecord.getMicData();
-    unsigned char *micDataEncoded = _audioRtpRecord.getMicDataEncoded();
-    SFLDataFormat *micDataConverted = _audioRtpRecord.getMicDataConverted();
+    SFLDataFormat *micData = _audioRtpRecord._micData;
+    unsigned char *micDataEncoded = _audioRtpRecord._micDataEncoded;
+    SFLDataFormat *micDataConverted = _audioRtpRecord._micDataConverted;
 
     assert (audioCodec);
     assert (audioLayer);
 
+    int codecFrameSize = audioCodec->getFrameSize();
+    int codecSampleRate = audioCodec->getClockRate();
+
     int mainBufferSampleRate = audioLayer->getMainBuffer()->getInternalSamplingRate();
 
     // compute codec framesize in ms
-    float fixedCodecFramesize = computeCodecFrameSize (getCodecFrameSize(), getCodecSampleRate());
+    float fixedCodecFramesize = computeCodecFrameSize (codecFrameSize, codecSampleRate);
 
     // compute nb of byte to get coresponding to 20 ms at audio layer frame size (44.1 khz)
     int bytesToGet = computeNbByteAudioLayer (fixedCodecFramesize);
@@ -425,8 +220,8 @@ int AudioRtpRecordHandler::processDataEncode (void)
     int nbSample = audioLayer->getMainBuffer()->getData (micData, bytesToGet, 100, _ca->getCallId()) / sizeof (SFLDataFormat);
 
     // process mic fade in
-    if (!_audioRtpRecord.getMicFadeInComplete())
-        _audioRtpRecord.setMicFadeInComplete (fadeIn (micData, nbSample, _audioRtpRecord.getMicAmplFactor()));
+    if (!_audioRtpRecord._micFadeInComplete)
+        _audioRtpRecord._micFadeInComplete = fadeIn (micData, nbSample, &_audioRtpRecord._micAmplFactor);
 
     if (nbSample == 0)
         return nbSample;
@@ -435,19 +230,19 @@ int AudioRtpRecordHandler::processDataEncode (void)
     int compSize = 0;
 
     // test if resampling is required
-    if (_audioRtpRecord.getCodecSampleRate() != mainBufferSampleRate) {
+    if (codecSampleRate != mainBufferSampleRate) {
 
         int nbSampleUp = nbSample;
 
-        nbSample = _audioRtpRecord.getConverter()->downsampleData (micData, micDataConverted, _audioRtpRecord.getCodecSampleRate(), mainBufferSampleRate, nbSampleUp);
+        nbSample = _audioRtpRecord._converter->downsampleData (micData, micDataConverted, codecSampleRate, mainBufferSampleRate, nbSampleUp);
 
         if (Manager::instance().audioPreference.getNoiseReduce())
-            _audioRtpRecord.getNoiseReductionProcess()->processAudio (micDataConverted, nbSample * sizeof (SFLDataFormat));
+            _audioRtpRecord._audioProcess->processAudio (micDataConverted, nbSample * sizeof (SFLDataFormat));
 
         compSize = audioCodec->codecEncode (micDataEncoded, micDataConverted, nbSample * sizeof (SFLDataFormat));
     } else {
         if (Manager::instance().audioPreference.getNoiseReduce())
-            _audioRtpRecord.getNoiseReductionProcess()->processAudio (micData, nbSample * sizeof (SFLDataFormat));
+            _audioRtpRecord._audioProcess->processAudio (micData, nbSample * sizeof (SFLDataFormat));
 
         // no resampling required
         compSize = audioCodec->codecEncode (micDataEncoded, micData, nbSample * sizeof (SFLDataFormat));
@@ -459,14 +254,17 @@ int AudioRtpRecordHandler::processDataEncode (void)
 void AudioRtpRecordHandler::processDataDecode (unsigned char *spkrData, unsigned int size)
 {
 
-    AudioCodec *audioCodec = getAudioCodec();
+    AudioCodec *audioCodec = _audioRtpRecord._audioCodec;
     AudioLayer *audioLayer = Manager::instance().getAudioDriver();
 
     if (!audioCodec)
         return;
 
-    SFLDataFormat *spkrDataDecoded = _audioRtpRecord.getSpkrDataConverted();
-    SFLDataFormat *spkrDataConverted = _audioRtpRecord.getSpkrDataDecoded();
+    int codeFrameSize = audioCodec->getFrameSize();
+    int codecSampleRate = audioCodec->getClockRate();
+
+    SFLDataFormat *spkrDataDecoded = _audioRtpRecord._spkrDataConverted;
+    SFLDataFormat *spkrDataConverted = _audioRtpRecord._spkrDataDecoded;
 
     int mainBufferSampleRate = audioLayer->getMainBuffer()->getInternalSamplingRate();
 
@@ -476,16 +274,16 @@ void AudioRtpRecordHandler::processDataDecode (unsigned char *spkrData, unsigned
     // buffer _receiveDataDecoded ----> short int or int16, coded on 2 bytes
     int nbSample = expandedSize / sizeof (SFLDataFormat);
 
-    if (!_audioRtpRecord.getSpkrFadeInComplete())
-        _audioRtpRecord.setSpkrFadeInComplete (fadeIn (spkrDataDecoded, nbSample, _audioRtpRecord.getMicAmplFactor()));
+    if (!_audioRtpRecord._spkrFadeInComplete)
+        _audioRtpRecord._spkrFadeInComplete = fadeIn (spkrDataDecoded, nbSample, &_audioRtpRecord._micAmplFactor);
 
     // test if resampling is required
-    if (audioCodec->getClockRate() != mainBufferSampleRate) {
+    if (codecSampleRate != mainBufferSampleRate) {
 
         // Do sample rate conversion
         int nbSampleDown = nbSample;
 
-        nbSample = _audioRtpRecord.getConverter()->upsampleData (spkrDataDecoded, spkrDataConverted, _audioRtpRecord.getCodecSampleRate(), mainBufferSampleRate, nbSampleDown);
+        nbSample = _audioRtpRecord._converter->upsampleData (spkrDataDecoded, spkrDataConverted, codecSampleRate, mainBufferSampleRate, nbSampleDown);
 
         // put data in audio layer, size in byte
         audioLayer->getMainBuffer()->putData (spkrDataConverted, nbSample * sizeof (SFLDataFormat), 100, _ca->getCallId());
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.h b/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.h
index 6b4552b9fc4c253b45947f71e43fd40f60af6cdd..eaf7c028c21547071fb200d5c5a5bf56b680a0a8 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpRecordHandler.h
@@ -86,53 +86,9 @@ typedef list<DtmfEvent *> EventQueue;
 class AudioRtpRecord
 {
     public:
-        AudioRtpRecord (ManagerImpl *manager);
-        virtual ~AudioRtpRecord();
-        inline AudioCodec *getAudioCodec() const;
-        int getCodecPayloadType() const;
-        bool getHasDynamicPayload() const;
-        int getAudioLayerFrameSize() const;
-        int getAudioLayerSampleRate() const;
-        int getCodecFrameSize() const;
-        int getCodecSampleRate() const;
-        SamplerateConverter *getConverter() const;
-        inline int getConverterSamplingRate() const;
-        EventQueue *getEventQueue();
-        int getEventQueueSize() const;
-        SFLDataFormat *getMicData();
-        SFLDataFormat *getMicDataConverted();
-        unsigned char *getMicDataEncoded();
-        SFLDataFormat *getMicAmplFactor();
-        bool getMicFadeInComplete() const;
-        SFLDataFormat *getSpkrAmplFactor();
-        SFLDataFormat *getSpkrDataConverted() const;
-        SFLDataFormat *getSpkrDataDecoded() const;
-        bool getSpkrFadeInComplete() const;
-        AudioProcessing *getNoiseReductionProcess() const;
-
-        void setAudioCodec (AudioCodec *audioCodec);
-        void setCodecPayloadType (int codecPayloadType);
-        void setHasDynamicPayload (bool hasDynamicPayload);
-        void setAudioLayerFrameSize (int _audioLayerFrameSize);
-        void setAudioLayerSampleRate (int _audioLayerSampleRate);
-        void setCodecFrameSize (int _codecFrameSize);
-        void setCodecSampleRate (int _codecSampleRate);
-        void setConverter (SamplerateConverter *_converter);
-        void setConverterSamplingRate (int _converterSamplingRate);
-        void setEventQueue (EventQueue _eventQueue);
-        void setMicData (SFLDataFormat *micData);
-        void setMicDataConverted (SFLDataFormat *micDataConverted);
-        void setMicDataEncoded (unsigned char *micDataEncoded);
-        void setMicAmplFactor (SFLDataFormat _micAmplFactor);
-        void setMicFadeInComplete (bool _micFadeInComplete);
-        void setSpkrAmplFactor (SFLDataFormat _spkrAmplFactor);
-        void setSpkrDataConverted (SFLDataFormat *_spkrDataConverted);
-        void setSpkrDataDecoded (SFLDataFormat *_spkrDataDecoded);
-        void setSpkrFadeInComplete (bool _spkrFadeInComplete);
-        void setAudioProcessing (AudioProcessing *audioProcess);
-        void setNoiseSuppress (NoiseSuppress *noiseSuppress);
+        AudioRtpRecord ();
+        ~AudioRtpRecord();
 
-    private:
         AudioCodec *_audioCodec;
         int _codecPayloadType;
         bool _hasDynamicPayloadType;
@@ -162,67 +118,70 @@ class AudioRtpRecordHandler
 {
     public:
         AudioRtpRecordHandler (ManagerImpl *manager, SIPCall *ca);
-        virtual ~AudioRtpRecordHandler();
+        ~AudioRtpRecordHandler();
 
         /**
          *  Set rtp media for this session
          */
+
         void setRtpMedia (AudioCodec* audioCodec);
 
+
         AudioCodec *getAudioCodec (void) {
-            return _audioRtpRecord.getAudioCodec();
+            return _audioRtpRecord._audioCodec;
         }
 
         int getCodecPayloadType (void) {
-            return _audioRtpRecord.getCodecPayloadType();
+            return _audioRtpRecord._codecPayloadType;
         }
 
         int getCodecSampleRate (void) {
-            return _audioRtpRecord.getCodecSampleRate();
+            return _audioRtpRecord._codecSampleRate;
         }
 
         int getCodecFrameSize (void) {
-            return _audioRtpRecord.getCodecFrameSize();
+            return _audioRtpRecord._codecFrameSize;
         }
 
         int getHasDynamicPayload (void) {
-            return _audioRtpRecord.getHasDynamicPayload();
+            return _audioRtpRecord._hasDynamicPayloadType;
         }
 
         int getAudioLayerFrameSize (void) {
-            return _audioRtpRecord.getAudioLayerFrameSize();
+            return _audioRtpRecord._audioLayerFrameSize;
         }
 
         int getAudioLayerSampleRate (void) {
-            return _audioRtpRecord.getAudioLayerSampleRate();
+            return _audioRtpRecord._audioLayerSampleRate;
         }
 
         EventQueue *getEventQueue (void) {
-            return _audioRtpRecord.getEventQueue();
+            return &_audioRtpRecord._eventQueue;
         }
 
         int getEventQueueSize (void) {
-            return _audioRtpRecord.getEventQueueSize();
+            return _audioRtpRecord._eventQueue.size();
         }
 
         SFLDataFormat *getMicData (void) {
-            return _audioRtpRecord.getMicData();
+            return _audioRtpRecord._micData;
         }
 
         SFLDataFormat *getMicDataConverted (void) {
-            return _audioRtpRecord.getMicDataConverted();
+            return _audioRtpRecord._micDataConverted;
         }
 
         unsigned char *getMicDataEncoded (void) {
-            return _audioRtpRecord.getMicDataEncoded();
+            return _audioRtpRecord._micDataEncoded;
         }
 
+
         inline float computeCodecFrameSize (int codecSamplePerFrame, int codecClockRate) {
             return ( (float) codecSamplePerFrame * 1000.0) / (float) codecClockRate;
         }
 
         int computeNbByteAudioLayer (float codecFrameSize) {
-            return (int) ( ( (float) _audioRtpRecord.getCodecSampleRate() * codecFrameSize * sizeof (SFLDataFormat)) / 1000.0);
+            return (int) ( ( (float) _audioRtpRecord._codecSampleRate * codecFrameSize * sizeof (SFLDataFormat)) / 1000.0);
         }
 
         void init (void);
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp b/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
index b769e1cd4d628d071ad234b1c84a26b224762f61..c3888d707cf84fdafe0265c3ad8f37ab9389e8af 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.cpp
@@ -57,8 +57,9 @@ AudioRtpSession::AudioRtpSession (ManagerImpl * manager, SIPCall * sipcall) :
     , _timestampCount (0)
     , _countNotificationTime (0)
     , _ca (sipcall)
+    , _isStarted (false)
 {
-    setCancel (cancelDefault);
+    ost::Thread::setCancel (cancelDefault);
 
     assert (_ca);
 
@@ -75,7 +76,7 @@ AudioRtpSession::~AudioRtpSession()
     _info ("AudioRtpSession: Delete AudioRtpSession instance");
 
     try {
-        terminate();
+        ost::Thread::terminate();
     } catch (...) {
         _debugException ("AudioRtpSession: Thread destructor didn't terminate correctly");
         throw;
@@ -300,13 +301,17 @@ void AudioRtpSession::notifyIncomingCall()
 
 int AudioRtpSession::startRtpThread (AudioCodec* audiocodec)
 {
+    if (_isStarted)
+        return 0;
+
     _debug ("AudioRtpSession: Starting main thread");
+    _isStarted = true;
     setSessionTimeouts();
     setSessionMedia (audiocodec);
     initBuffers();
     initNoiseSuppress();
     enableStack();
-    int ret = start (_mainloopSemaphore);
+    int ret = ost::Thread::start (_mainloopSemaphore);
     return ret;
 }
 
diff --git a/sflphone-common/src/audio/audiortp/AudioRtpSession.h b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
index 46e8bc70ab8549eae3adea76273466c3434ce6a0..8cf7d9120057c2f3205b299fe17942a333b31b72 100644
--- a/sflphone-common/src/audio/audiortp/AudioRtpSession.h
+++ b/sflphone-common/src/audio/audiortp/AudioRtpSession.h
@@ -174,6 +174,8 @@ class AudioRtpSession : protected ost::Thread, public ost::TimerPort, public Aud
     protected:
 
         SIPCall * _ca;
+
+        bool _isStarted;
 };
 
 }