diff --git a/daemon/src/audio/opensl/opensllayer.cpp b/daemon/src/audio/opensl/opensllayer.cpp
index ed72b730b5deb9c973d24ae0eb670f58e042848a..8ef3b2692016bb5cdb5b51778863f1285e7d11b0 100644
--- a/daemon/src/audio/opensl/opensllayer.cpp
+++ b/daemon/src/audio/opensl/opensllayer.cpp
@@ -147,8 +147,8 @@ OpenSLLayer::OpenSLLayer()
     , recorderBufferQueue_(0)
     , playbackBufferIndex_(0)
     , recordBufferIndex_(0)
-    , playbackBufferStack_(ANDROID_BUFFER_QUEUE_LENGTH, AudioBuffer(3000))
-    , recordBufferStack_(ANDROID_BUFFER_QUEUE_LENGTH, AudioBuffer(3000))
+    , playbackBufferStack_(ANDROID_BUFFER_QUEUE_LENGTH, AudioBuffer(BUFFER_SIZE))
+    , recordBufferStack_(ANDROID_BUFFER_QUEUE_LENGTH, AudioBuffer(BUFFER_SIZE))
 {
 }
 
@@ -257,9 +257,15 @@ OpenSLLayer::shutdownAudioEngine()
         outputMixer_ = NULL;
     }
 
+	if(recorderObject_ != NULL){
+		(*recorderObject_)->Destroy(recorderObject_);
+		recorderObject_ = NULL;
+		recorderInterface_ = NULL;
+		recorderBufferQueue_ = NULL;
+	}
+
     // destroy engine object, and invalidate all associated interfaces
     DEBUG("Shutdown audio engine\n");
-
     if (engineObject_ != NULL) {
         (*engineObject_)->Destroy(engineObject_);
         engineObject_ = NULL;
diff --git a/daemon/src/audio/opensl/opensllayer.h b/daemon/src/audio/opensl/opensllayer.h
index 889137503af884fabb107f0a662f4489a90904d4..f2ef05be4532d4df6f9b7c1e3e734d00bbd8b3e2 100644
--- a/daemon/src/audio/opensl/opensllayer.h
+++ b/daemon/src/audio/opensl/opensllayer.h
@@ -36,6 +36,7 @@
 #include <vector>
 
 #include "../audiolayer.h"
+#include "logger.h"
 
 
 enum PCMType {
@@ -52,6 +53,7 @@ class AudioPreference;
 class OpenSLThread;
 
 #define ANDROID_BUFFER_QUEUE_LENGTH 2
+#define BUFFER_SIZE 5000
 
 
 /**
@@ -238,9 +240,7 @@ class OpenSLLayer : public AudioLayer {
          * Output mix interface
          */
         SLObjectItf outputMixer_;
-
         SLObjectItf playerObject_;
-
         SLObjectItf recorderObject_;
 
         /**