diff --git a/src/conference.cpp b/src/conference.cpp
index 911ba03fc37185981e1dce1e3525ad4202e28dee..56acd18a13555df16846089aab18fe60839c8bec 100644
--- a/src/conference.cpp
+++ b/src/conference.cpp
@@ -1781,7 +1781,7 @@ Conference::bindHostAudio()
                             if (isParticipantMuted)
                                 rbPool.bindHalfDuplexOut(id, RingBufferPool::DEFAULT_ID);
                             else
-                                rbPool.bindRingbuffers(id, RingBufferPool::DEFAULT_ID);
+                                rbPool.bindRingBuffers(id, RingBufferPool::DEFAULT_ID);
                         } else {
                             auto buffer = source.sourceUri_;
                             static const std::string& sep = libjami::Media::VideoProtocolPrefix::SEPARATOR;
@@ -1789,7 +1789,7 @@ Conference::bindHostAudio()
                             if (pos != std::string::npos)
                                 buffer = source.sourceUri_.substr(pos + sep.size());
 
-                            rbPool.bindRingbuffers(id, buffer);
+                            rbPool.bindRingBuffers(id, buffer);
                         }
                     }
                 }
@@ -1846,7 +1846,7 @@ Conference::bindSubCallAudio(const std::string& callId)
                         if (isMuted(other))
                             rbPool.bindHalfDuplexOut(otherStream.first, stream.first);
                         else
-                            rbPool.bindRingbuffers(stream.first, otherStream.first);
+                            rbPool.bindRingBuffers(stream.first, otherStream.first);
 
                         rbPool.flush(otherStream.first);
                     }
@@ -1859,7 +1859,7 @@ Conference::bindSubCallAudio(const std::string& callId)
                 bool isHostMuted = isMuted("host"sv);
                 if (isMediaSourceMuted(MediaType::MEDIA_AUDIO) or isHostMuted)
                     rbPool.bindHalfDuplexOut(RingBufferPool::DEFAULT_ID, stream.first);
-                else rbPool.bindRingbuffers(stream.first, RingBufferPool::DEFAULT_ID);
+                else rbPool.bindRingBuffers(stream.first, RingBufferPool::DEFAULT_ID);
                 rbPool.flush(RingBufferPool::DEFAULT_ID);
             }
         }
diff --git a/src/manager.cpp b/src/manager.cpp
index df109330f8da97df557dc6ce2ce77f32a9da4224..d2634af39b2d9220eee39a434f86bc96e7912ba5 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -1704,7 +1704,7 @@ Manager::addAudio(Call& call)
     auto medias = call.getAudioStreams();
     for (const auto& media : medias) {
         JAMI_DEBUG("[call:{}] Attach audio", media.first);
-        getRingBufferPool().bindRingbuffers(media.first, RingBufferPool::DEFAULT_ID);
+        getRingBufferPool().bindRingBuffers(media.first, RingBufferPool::DEFAULT_ID);
     }
     auto oldGuard = std::move(call.audioGuard);
     call.audioGuard = startAudioStream(AudioDeviceType::PLAYBACK);
diff --git a/src/media/audio/ringbufferpool.cpp b/src/media/audio/ringbufferpool.cpp
index 9ce8f847d0d3faa1b845ab1b7d06743e1f6fdb0d..1571f10ba4884b19f4ec9d80a2a1b8e6794740ce 100644
--- a/src/media/audio/ringbufferpool.cpp
+++ b/src/media/audio/ringbufferpool.cpp
@@ -136,46 +136,40 @@ RingBufferPool::removeReadBindings(const std::string& ringbufferId)
         JAMI_ERROR("Ringbuffer {} does not exist!", ringbufferId);
 }
 
-/**
- * Make given ringbuffer a reader of given ring buffer
- */
 void
-RingBufferPool::addReaderToRingBuffer(const std::shared_ptr<RingBuffer>& rbuf,
-                                      const std::string& ringbufferId)
-{
-    if (ringbufferId != DEFAULT_ID and rbuf->getId() == ringbufferId)
+RingBufferPool::addReaderToRingBuffer(const std::shared_ptr<RingBuffer> &sourceBuffer,
+                                      const std::string &readerBufferId) {
+    if (readerBufferId != DEFAULT_ID and sourceBuffer->getId() == readerBufferId)
         JAMI_WARNING("RingBuffer has a readoffset on itself");
 
-    rbuf->createReadOffset(ringbufferId);
-    readBindingsMap_[ringbufferId].insert(rbuf); // bindings list created if not existing
-    JAMI_DEBUG("Bind rbuf '{}' to ringbuffer '{}'", rbuf->getId(), ringbufferId);
+    sourceBuffer->createReadOffset(readerBufferId);
+    readBindingsMap_[readerBufferId].insert(sourceBuffer);
 }
 
 void
-RingBufferPool::removeReaderFromRingBuffer(const std::shared_ptr<RingBuffer>& rbuf,
-                                           const std::string& ringbufferId)
-{
-    if (auto bindings = getReadBindings(ringbufferId)) {
-        bindings->erase(rbuf);
+RingBufferPool::removeReaderFromRingBuffer(const std::shared_ptr<RingBuffer> &sourceBuffer,
+                                           const std::string &readerBufferId) {
+    if (auto bindings = getReadBindings(readerBufferId)) {
+        bindings->erase(sourceBuffer);
         if (bindings->empty())
-            removeReadBindings(ringbufferId);
+            removeReadBindings(readerBufferId);
     }
 
-    rbuf->removeReadOffset(ringbufferId);
+    sourceBuffer->removeReadOffset(readerBufferId);
 }
 
 void
-RingBufferPool::bindRingbuffers(const std::string& ringbufferId1, const std::string& ringbufferId2)
-{
+RingBufferPool::bindRingBuffers(const std::string &ringbufferId1,
+                                const std::string &ringbufferId2) {
     JAMI_LOG("Bind ringbuffer {} to ringbuffer {}", ringbufferId1, ringbufferId2);
 
-    const auto& rb1 = getRingBuffer(ringbufferId1);
+    const auto &rb1 = getRingBuffer(ringbufferId1);
     if (not rb1) {
         JAMI_ERROR("No ringbuffer associated with id '{}'", ringbufferId1);
         return;
     }
 
-    const auto& rb2 = getRingBuffer(ringbufferId2);
+    const auto &rb2 = getRingBuffer(ringbufferId2);
     if (not rb2) {
         JAMI_ERROR("No ringbuffer associated to id '{}'", ringbufferId2);
         return;
@@ -188,29 +182,30 @@ RingBufferPool::bindRingbuffers(const std::string& ringbufferId1, const std::str
 }
 
 void
-RingBufferPool::bindHalfDuplexOut(const std::string& processId, const std::string& ringbufferId)
-{
+RingBufferPool::bindHalfDuplexOut(const std::string &readerBufferId,
+                                  const std::string &sourceBufferId) {
     /* This method is used only for active ringbuffers, if this ringbuffer does not exist,
      * do nothing */
-    if (const auto& rb = getRingBuffer(ringbufferId)) {
+    if (const auto &rb = getRingBuffer(sourceBufferId)) {
         std::lock_guard lk(stateLock_);
 
-        addReaderToRingBuffer(rb, processId);
+        // p1 est le binding de p2 (p2 lit le stream de p1)
+        addReaderToRingBuffer(rb, readerBufferId);
     }
 }
 
 void
-RingBufferPool::unbindRingbuffers(const std::string& ringbufferId1, const std::string& ringbufferId2)
-{
+RingBufferPool::unbindRingBuffers(const std::string &ringbufferId1,
+                                  const std::string &ringbufferId2) {
     JAMI_LOG("Unbind ringbuffers {} and {}", ringbufferId1, ringbufferId2);
 
-    const auto& rb1 = getRingBuffer(ringbufferId1);
+    const auto &rb1 = getRingBuffer(ringbufferId1);
     if (not rb1) {
         JAMI_ERROR("No ringbuffer associated to id '{}'", ringbufferId1);
         return;
     }
 
-    const auto& rb2 = getRingBuffer(ringbufferId2);
+    const auto &rb2 = getRingBuffer(ringbufferId2);
     if (not rb2) {
         JAMI_ERROR("No ringbuffer associated to id '{}'", ringbufferId2);
         return;
@@ -223,40 +218,35 @@ RingBufferPool::unbindRingbuffers(const std::string& ringbufferId1, const std::s
 }
 
 void
-RingBufferPool::unBindHalfDuplexOut(const std::string& process_id, const std::string& ringbufferId)
-{
+RingBufferPool::unBindHalfDuplexOut(const std::string &readerBufferId,
+                                    const std::string &sourceBufferId) {
     std::lock_guard lk(stateLock_);
 
-    if (const auto& rb = getRingBuffer(ringbufferId))
-        removeReaderFromRingBuffer(rb, process_id);
+    if (const auto &rb = getRingBuffer(sourceBufferId))
+        removeReaderFromRingBuffer(rb, readerBufferId);
 }
 
 void
-RingBufferPool::unBindAllHalfDuplexOut(const std::string& ringbufferId)
-{
-    const auto& rb = getRingBuffer(ringbufferId);
+RingBufferPool::unBindAllHalfDuplexOut(const std::string &ringbufferId) {
+    const auto &rb = getRingBuffer(ringbufferId);
     if (not rb) {
         JAMI_ERROR("No ringbuffer associated to id '{}'", ringbufferId);
         return;
     }
-
     std::lock_guard lk(stateLock_);
-
     auto bindings = getReadBindings(ringbufferId);
     if (not bindings)
         return;
-
     const auto bindings_copy = *bindings; // temporary copy
-    for (const auto& rbuf : bindings_copy) {
+    for (const auto &rbuf: bindings_copy) {
         removeReaderFromRingBuffer(rb, rbuf->getId());
     }
 }
 
 void
-RingBufferPool::unBindAllHalfDuplexIn(const std::string &audioToDelete) {
-
+RingBufferPool::unBindAllHalfDuplexIn(const std::string &sourceBufferId) {
     std::lock_guard lk(stateLock_);
-    const std::shared_ptr<RingBuffer> &ringBuffer = getRingBuffer(audioToDelete);
+    const std::shared_ptr<RingBuffer> &ringBuffer = getRingBuffer(sourceBufferId);
     const std::vector<std::string> &subscribers = ringBuffer->getSubscribers();
     for (const auto &subscriber: subscribers) {
         removeReaderFromRingBuffer(ringBuffer, subscriber);
@@ -264,11 +254,10 @@ RingBufferPool::unBindAllHalfDuplexIn(const std::string &audioToDelete) {
 }
 
 void
-RingBufferPool::unBindAll(const std::string& ringbufferId)
-{
+RingBufferPool::unBindAll(const std::string &ringbufferId) {
     JAMI_LOG("Unbind ringbuffer {} from all bound ringbuffers", ringbufferId);
 
-    const auto& rb = getRingBuffer(ringbufferId);
+    const auto &rb = getRingBuffer(ringbufferId);
     if (not rb) {
         JAMI_ERROR("No ringbuffer associated to id '{}'", ringbufferId);
         return;
@@ -281,7 +270,7 @@ RingBufferPool::unBindAll(const std::string& ringbufferId)
         return;
 
     const auto bindings_copy = *bindings; // temporary copy
-    for (const auto& rbuf : bindings_copy) {
+    for (const auto &rbuf: bindings_copy) {
         removeReaderFromRingBuffer(rbuf, ringbufferId);
         removeReaderFromRingBuffer(rb, rbuf->getId());
     }
diff --git a/src/media/audio/ringbufferpool.h b/src/media/audio/ringbufferpool.h
index ef3aed3407553d5835358e8784d5b6cc10533c46..74d75da5bf972bf78db6070f2b38f84b87d1a89a 100644
--- a/src/media/audio/ringbufferpool.h
+++ b/src/media/audio/ringbufferpool.h
@@ -47,29 +47,45 @@ public:
     void setInternalAudioFormat(AudioFormat format);
 
     /**
-     * Bind together two audio streams
-     */
-    void bindRingbuffers(const std::string& ringbufferId1, const std::string& ringbufferId2);
+    * Bind two RingBuffer together (full duplex).
+    * @param ringbufferId1
+    * @param ringbufferId2
+    */
+    void bindRingBuffers(const std::string &ringbufferId1, const std::string &ringbufferId2);
 
     /**
-     * Add a new ringbufferId to unidirectional outgoing stream
-     * \param ringbufferId New ringbufferId to be added for this stream
-     * \param processId Process that require this stream
-     */
-    void bindHalfDuplexOut(const std::string& processId, const std::string& ringbufferId);
+    * Unbind two RingBuffer (full duplex).
+    */
+    void unbindRingBuffers(const std::string &ringbufferId1, const std::string &ringbufferId2);
 
     /**
-     * Unbind two ringbuffers
-     */
-    void unbindRingbuffers(const std::string& ringbufferId1, const std::string& ringbufferId2);
+    * Attaches a reader the specified source.
+    * @param readerBufferId The ID of the RingBuffer that will act as the reader of the
+    * sourceBuffer.
+    * @param sourceBufferId The iID of the RingBuffer that will be the source (to be read from).
+    */
+    void bindHalfDuplexOut(const std::string &readerBufferId, const std::string &sourceBufferId);
 
     /**
-     * Unbind a unidirectional stream
-     */
-    void unBindHalfDuplexOut(const std::string& process_id, const std::string& ringbufferId);
+    * Detaches a reader from the specified source.
+    * @param readerBufferId The ID of the RingBuffer that acts as the reader to be detached from the
+    * sourceBuffer.
+    * @param sourceBufferId The RingBuffer that serves as the source (being read from).
+    */
+    void unBindHalfDuplexOut(const std::string &readerBufferId, const std::string &sourceBufferId);
+
+    /**
+    * Detaches a reader from all his sources.
+    * @param readerBufferId The ID of the RingBuffer that acts as the reader to be detached from the
+    * sources.
+    */
+    void unBindAllHalfDuplexOut(const std::string &ringbufferId);
 
-    void unBindAllHalfDuplexOut(const std::string& ringbufferId);
-    void unBindAllHalfDuplexIn(const std::string& ringbufferId);
+    /**
+     * Detaches a source from all its readers.
+     * @param sourceBufferId The ID of the RingBuffer that serves as the source (being read from).
+     */
+    void unBindAllHalfDuplexIn(const std::string &sourceBufferId);
 
     void unBindAll(const std::string& ringbufferId);
 
@@ -123,10 +139,23 @@ private:
 
     void removeReadBindings(const std::string& ringbufferId);
 
-    void addReaderToRingBuffer(const std::shared_ptr<RingBuffer>& rbuf, const std::string& ringbufferId);
+    /**
+    * Attaches a reader to the specified source.
+    * @param sourceBuffer The RingBuffer that will be the source (to be read from).
+    * @param readerBufferId The ID of the RingBuffer that will act as the reader of the
+    * sourceBuffer.
+    */
+    void addReaderToRingBuffer(const std::shared_ptr<RingBuffer> &sourceBuffer,
+                               const std::string &readerBufferId);
 
-    void removeReaderFromRingBuffer(const std::shared_ptr<RingBuffer>& rbuf,
-                                    const std::string& ringbufferId);
+    /**
+    * Detaches a reader from the specified source.
+    * @param sourceBuffer The RingBuffer that serves as the source (being read from).
+    * @param readerBufferId The ID of the RingBuffer that acts as the reader to be detached from the
+    * sourceBuffer.
+    */
+    void removeReaderFromRingBuffer(const std::shared_ptr<RingBuffer> &sourceBuffer,
+                                    const std::string &readerBufferId);
 
     // A cache of created RingBuffers listed by IDs.
     std::map<std::string, std::weak_ptr<RingBuffer>> ringBufferMap_ {};
diff --git a/src/sip/sipcall.cpp b/src/sip/sipcall.cpp
index 955b0a6dae978ea044408a69466f74190482db25..0a20448deb47e913921b74c76b711c7fff99b404 100644
--- a/src/sip/sipcall.cpp
+++ b/src/sip/sipcall.cpp
@@ -3166,7 +3166,7 @@ SIPCall::enterConference(std::shared_ptr<Conference> conference)
         auto& rbPool = Manager::instance().getRingBufferPool();
         auto medias = getAudioStreams();
         for (const auto& media : medias) {
-            rbPool.unbindRingbuffers(media.first, RingBufferPool::DEFAULT_ID);
+            rbPool.unbindRingBuffers(media.first, RingBufferPool::DEFAULT_ID);
         }
         rbPool.flush(RingBufferPool::DEFAULT_ID);
     }
@@ -3194,7 +3194,7 @@ SIPCall::exitConference()
         auto medias = getAudioStreams();
         for (const auto& media : medias) {
             if (!media.second) {
-                rbPool.bindRingbuffers(media.first, RingBufferPool::DEFAULT_ID);
+                rbPool.bindRingBuffers(media.first, RingBufferPool::DEFAULT_ID);
             }
         }
         rbPool.flush(RingBufferPool::DEFAULT_ID);