diff --git a/daemon/src/media/audio/audio_rtp_session.cpp b/daemon/src/media/audio/audio_rtp_session.cpp
index 306bfe70cf5b9e9d4d365fb71db8631751448909..e99dda3a1e4e486ac8c4f2d568ae39065e0400ee 100644
--- a/daemon/src/media/audio/audio_rtp_session.cpp
+++ b/daemon/src/media/audio/audio_rtp_session.cpp
@@ -62,7 +62,6 @@ class AudioSender {
     private:
         NON_COPYABLE(AudioSender);
 
-        bool waitForDataEncode(const std::chrono::milliseconds& max_wait) const;
         bool setup(SocketPair& socketPair);
 
         std::string id_;
@@ -138,23 +137,22 @@ AudioSender::cleanup()
 void
 AudioSender::process()
 {
-    auto mainBuffFormat = Manager::instance().getRingBufferPool().getInternalAudioFormat();
+    auto& mainBuffer = Manager::instance().getRingBufferPool();
+    auto mainBuffFormat = mainBuffer.getInternalAudioFormat();
 
     // compute nb of byte to get corresponding to 1 audio frame
     const std::size_t samplesToGet = std::chrono::duration_cast<std::chrono::seconds>(mainBuffFormat.sample_rate * secondsPerPacket_).count();
-    const auto samplesAvail = Manager::instance().getRingBufferPool().availableForGet(id_);
 
-    if (samplesAvail < samplesToGet) {
-        const auto wait_ratio = 1. - std::min(.9, samplesAvail / (double)samplesToGet); // wait at least 10%
-        const auto wait_time = std::chrono::duration_cast<std::chrono::milliseconds>(secondsPerPacket_ * wait_ratio);
-        if (not waitForDataEncode(wait_time))
+    if (mainBuffer.availableForGet(id_) < samplesToGet) {
+        const auto wait_time = std::chrono::duration_cast<std::chrono::milliseconds>(secondsPerPacket_);
+        if (not mainBuffer.waitForDataAvailable(id_, samplesToGet, wait_time))
             return;
     }
 
     // get data
     micData_.setFormat(mainBuffFormat);
     micData_.resize(samplesToGet);
-    const auto samples = Manager::instance().getRingBufferPool().getData(micData_, id_);
+    const auto samples = mainBuffer.getData(micData_, id_);
     if (samples != samplesToGet) {
         RING_ERR("Asked for %d samples from bindings on call '%s', got %d",
                 samplesToGet, id_.c_str(), samples);
@@ -179,20 +177,6 @@ AudioSender::process()
         if (audioEncoder_->encode_audio(micData_) < 0)
             RING_ERR("encoding failed");
     }
-
-    if (waitForDataEncode(std::chrono::duration_cast<std::chrono::milliseconds>(secondsPerPacket_))) {
-        // Data available !
-    }
-}
-
-bool
-AudioSender::waitForDataEncode(const std::chrono::milliseconds& max_wait) const
-{
-    auto& mainBuffer = Manager::instance().getRingBufferPool();
-    auto mainBuffFormat = mainBuffer.getInternalAudioFormat();
-    const std::size_t samplesToGet = std::chrono::duration_cast<std::chrono::seconds>(mainBuffFormat.sample_rate * secondsPerPacket_).count();
-
-    return mainBuffer.waitForDataAvailable(id_, samplesToGet, max_wait);
 }
 
 class AudioReceiveThread