diff --git a/src/media/audio/opensl/audio_player.cpp b/src/media/audio/opensl/audio_player.cpp
index 913afd96f47ce843517432aab13fe715eb9392eb..d8f1d9f5f578b94d505a1e1898df2fee66a2586b 100644
--- a/src/media/audio/opensl/audio_player.cpp
+++ b/src/media/audio/opensl/audio_player.cpp
@@ -76,7 +76,7 @@ AudioPlayer::processSLCallback(SLAndroidSimpleBufferQueueItf bq)
     while (playQueue_->front(&buf) && devShadowQueue_.push(buf)) {
         if ((*bq)->Enqueue(bq, buf->buf_, buf->size_) != SL_RESULT_SUCCESS) {
             devShadowQueue_.pop();
-            JAMI_ERR("enqueue failed %zu %zu %zu %zu",
+            JAMI_ERR("enqueue failed %zu %d %d %d",
                      buf->size_,
                      freeQueue_->size(),
                      playQueue_->size(),
@@ -279,7 +279,7 @@ AudioPlayer::playAudioBuffers(unsigned count)
 
         SLresult result = (*playBufferQueueItf_)->Enqueue(playBufferQueueItf_, buf->buf_, buf->size_);
         if (result != SL_RESULT_SUCCESS) {
-            JAMI_ERR("%s Error @( %p, %d ), result = %d",
+            JAMI_ERR("%s Error @( %p, %zu ), result = %d",
                      __FUNCTION__,
                      (void*) buf->buf_,
                      buf->size_,
diff --git a/src/media/audio/opensl/buf_manager.h b/src/media/audio/opensl/buf_manager.h
index 62738641b5e1ecd3c80ce6532704acff1a4ace1b..cadebf0ef5f9edabe5916499b226a278704b4737 100644
--- a/src/media/audio/opensl/buf_manager.h
+++ b/src/media/audio/opensl/buf_manager.h
@@ -30,10 +30,6 @@
 #include <limits>
 #include <vector>
 
-#ifndef CACHE_ALIGN
-#define CACHE_ALIGN 64
-#endif
-
 /*
  * ProducerConsumerQueue, borrowed from Ian NiLewis
  */
@@ -160,7 +156,7 @@ public:
         int writeptr = write_.load(std::memory_order_acquire);
         int readptr = read_.load(std::memory_order_relaxed);
 
-        return (uint32_t)(writeptr - readptr);
+        return (uint32_t) (writeptr - readptr);
     }
 
 private:
diff --git a/src/media/audio/opensl/opensllayer.cpp b/src/media/audio/opensl/opensllayer.cpp
index 7e682f4e0fd7684a66767551d740e96304691063..eadbb319345faa31203cb1e424e293206530f5d0 100644
--- a/src/media/audio/opensl/opensllayer.cpp
+++ b/src/media/audio/opensl/opensllayer.cpp
@@ -116,6 +116,8 @@ void
 OpenSLLayer::stopStream(AudioDeviceType stream)
 {
     std::lock_guard<std::mutex> lock(mutex_);
+    if (!engineObject_)
+        return; // bufs_ should be initialized
     JAMI_WARN("Stopping OpenSL audio layer for type %u", (unsigned) stream);
 
     if (stream == AudioDeviceType::PLAYBACK) {
@@ -124,13 +126,27 @@ OpenSLLayer::stopStream(AudioDeviceType stream)
             player_->stop();
             player_.reset();
         }
+        freePlayBufQueue_.clear();
+        for (int i = 0; i < BUF_COUNT; i++)
+            freePlayBufQueue_.push(&bufs_[i]);
+        playBufQueue_.clear();
     } else if (stream == AudioDeviceType::RINGTONE) {
         if (ringtone_) {
             ringtone_->stop();
             ringtone_.reset();
         }
+        // Flush buffer
+        freeRingBufQueue_.clear();
+        for (int i = BUF_COUNT; i < 2 * BUF_COUNT; i++)
+            freeRingBufQueue_.push(&bufs_[i]);
+        ringBufQueue_.clear();
     } else if (stream == AudioDeviceType::CAPTURE) {
         stopAudioCapture();
+        // Flush buffer
+        freeRecBufQueue_.clear();
+        for (int i = 2 * BUF_COUNT; i < 3 * BUF_COUNT; i++)
+            freeRecBufQueue_.push(&bufs_[i]);
+        recBufQueue_.clear();
     }
 
     if (not player_ and not ringtone_ and not recorder_)
@@ -168,7 +184,10 @@ OpenSLLayer::initAudioEngine()
     SLASSERT((*engineObject_)->GetInterface(engineObject_, SL_IID_ENGINE, &engineInterface_));
 
     size_t bufSize = hardwareBuffSize_ * hardwareFormat_.getBytesPerFrame();
-    JAMI_DBG("OpenSL init: using buffer of %u bytes to support %s with %zu samples per channel", bufSize, hardwareFormat_.toString().c_str(), hardwareBuffSize_);
+    JAMI_DBG("OpenSL init: using buffer of %zu bytes to support %s with %zu samples per channel",
+             bufSize,
+             hardwareFormat_.toString().c_str(),
+             hardwareBuffSize_);
     bufs_ = allocateSampleBufs(BUF_COUNT * 3, bufSize);
     for (int i = 0; i < BUF_COUNT; i++)
         freePlayBufQueue_.push(&bufs_[i]);
@@ -224,17 +243,17 @@ OpenSLLayer::dbgEngineGetBufCount()
     count_ringtone += freeRingBufQueue_.size();
     count_ringtone += ringBufQueue_.size();
 
-    JAMI_ERR("Buf Disrtibutions: PlayerDev=%d, PlayQ=%d, FreePlayQ=%d",
+    JAMI_ERR("Buf Disrtibutions: PlayerDev=%zu, PlayQ=%u, FreePlayQ=%u",
              player_->dbgGetDevBufCount(),
              playBufQueue_.size(),
              freePlayBufQueue_.size());
-    JAMI_ERR("Buf Disrtibutions: RingDev=%d, RingQ=%d, FreeRingQ=%d",
+    JAMI_ERR("Buf Disrtibutions: RingDev=%zu, RingQ=%u, FreeRingQ=%u",
              ringtone_->dbgGetDevBufCount(),
              ringBufQueue_.size(),
              freeRingBufQueue_.size());
 
     if (count_player != BUF_COUNT) {
-        JAMI_ERR("====Lost Bufs among the queue(supposed = %d, found = %d)",
+        JAMI_ERR("====Lost Bufs among the queue(supposed = %d, found = %u)",
                  BUF_COUNT,
                  count_player);
     }
@@ -260,8 +279,6 @@ OpenSLLayer::engineServicePlay()
                          dat->pointer()->nb_samples);
                 break;
             }
-            // JAMI_ERR("std::copy_n %p -> %p %zu", dat->pointer()->data[0], buf->buf_,
-            // dat->pointer()->nb_samples);
             std::copy_n((const AudioSample*) dat->pointer()->data[0],
                         dat->pointer()->nb_samples,
                         (AudioSample*) buf->buf_);
@@ -281,7 +298,6 @@ OpenSLLayer::engineServiceRing()
 {
     sample_buf* buf;
     while (ringtone_ and freeRingBufQueue_.front(&buf)) {
-        freeRingBufQueue_.pop();
         if (auto dat = getToRing(hardwareFormat_, hardwareBuffSize_)) {
             buf->size_ = dat->pointer()->nb_samples * dat->pointer()->channels
                          * sizeof(AudioSample);
@@ -301,11 +317,10 @@ OpenSLLayer::engineServiceRing()
                         (AudioSample*) buf->buf_);
             if (!ringBufQueue_.push(buf)) {
                 JAMI_WARN("playThread ringtone_ PLAY_KICKSTART_BUFFER_COUNT 1");
-                freeRingBufQueue_.push(buf);
                 break;
-            }
+            } else
+                freeRingBufQueue_.pop();
         } else {
-            freeRingBufQueue_.push(buf);
             break;
         }
     }