diff --git a/3rd-party/bluedroid/encoder/srce/sbc_packing.c b/3rd-party/bluedroid/encoder/srce/sbc_packing.c
index f17302002..699f1dd47 100644
--- a/3rd-party/bluedroid/encoder/srce/sbc_packing.c
+++ b/3rd-party/bluedroid/encoder/srce/sbc_packing.c
@@ -82,8 +82,14 @@ void EncPacking(SBC_ENC_PARAMS *pstrEncParams)
 #endif
 
     pu8PacketPtr    = pstrEncParams->pu8NextPacket;    /*Initialize the ptr*/
-
-    *pu8PacketPtr++ = (UINT8)0xAD;  /*Sync word*/
+    
+    /* BK4BTSTACK_CHANGE START */
+    if (pstrEncParams->mSBCEnabled){
+        *pu8PacketPtr++ = (UINT8)0xAD;  /*Sync word*/
+    } else {
+        *pu8PacketPtr++ = (UINT8)0x9C;  /*Sync word*/
+    }
+    /* BK4BTSTACK_CHANGE END */ 
     *pu8PacketPtr++=(UINT8)(pstrEncParams->FrameHeader);
 
     *pu8PacketPtr = (UINT8)(pstrEncParams->s16BitPool & 0x00FF);
diff --git a/src/classic/btstack_sbc_encoder.h b/src/classic/btstack_sbc_encoder.h
index a21db24f1..e4ae83342 100644
--- a/src/classic/btstack_sbc_encoder.h
+++ b/src/classic/btstack_sbc_encoder.h
@@ -65,7 +65,7 @@ void btstack_sbc_encoder_process_data(int16_t * input_buffer);
 uint8_t * btstack_sbc_encoder_sbc_buffer(void);
 uint16_t  btstack_sbc_encoder_sbc_buffer_length(void);
 
-int  btstack_sbc_encoder_num_subband_samples(void);
+int  btstack_sbc_encoder_num_audio_samples(void);
 void btstack_sbc_encoder_dump_context(void);
 
 #if defined __cplusplus
diff --git a/src/classic/sbc_encoder_bludroid.c b/src/classic/sbc_encoder_bludroid.c
index 4ca8e9342..6d502bbdf 100644
--- a/src/classic/sbc_encoder_bludroid.c
+++ b/src/classic/sbc_encoder_bludroid.c
@@ -93,7 +93,7 @@ void btstack_sbc_encoder_dump_context(void){
 }
 
 
-int btstack_sbc_encoder_num_subband_samples(void){
+int btstack_sbc_encoder_num_audio_samples(void){
     SBC_ENC_PARAMS * context = &((bludroid_encoder_state_t *)sbc_state_singelton->encoder_state)->context;
     return context->s16NumOfSubBands * context->s16NumOfBlocks * context->s16NumOfChannels;
 }
diff --git a/test/sbc/sbc_encoder_test.c b/test/sbc/sbc_encoder_test.c
index 3e25d463d..9cf42b0e4 100644
--- a/test/sbc/sbc_encoder_test.c
+++ b/test/sbc/sbc_encoder_test.c
@@ -47,19 +47,19 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
 
 #include "btstack.h"
 #include "btstack_sbc_encoder.h"
 
-static int16_t read_buffer[8*16*2];
-static int num_data_bytes = 0;
-static int byte_rate = 0;
-static int sampling_frequency = -1;
-static int channel_mode = -1;
-
-
 #define MSBC_FRAME_SIZE 57
 
+static int num_frames = 0;
+
+static int16_t read_buffer[8*16*2];
+static uint8_t output_buffer[24];
+
 static btstack_sbc_encoder_state_t state;
 static uint8_t msbc_padding[] = {0,0,0};
 
@@ -67,9 +67,11 @@ static uint8_t msbc_buffer[2*(MSBC_FRAME_SIZE + sizeof(msbc_padding))];
 static int msbc_buffer_offset = 0; 
 
 void hfp_msbc_init(void);
-int hfp_msbc_can_encode_audio(void);
+int  hfp_msbc_can_encode_audio(void);
+int  hfp_msbc_encoded_stream_available(int size);
 void hfp_msbc_encode_audio_frame(int16_t * pcm_samples);
 void hfp_msbc_read_encoded_stream(uint8_t * buf, int size);
+int  hfp_msbc_num_pcm_bytes(void);
 
 void hfp_msbc_init(void){
     btstack_sbc_encoder_init(&state, SBC_MODE_mSBC, 16, 8, 0, 16000, 26);
@@ -90,7 +92,6 @@ void hfp_msbc_encode_audio_frame(int16_t * pcm_samples){
 
     memcpy(msbc_buffer + msbc_buffer_offset, btstack_sbc_encoder_sbc_buffer(), MSBC_FRAME_SIZE);
     msbc_buffer_offset += MSBC_FRAME_SIZE;
-    msbc_buffer_free_bytes = sizeof(msbc_buffer) - msbc_buffer_offset;
 }
 
 void hfp_msbc_read_encoded_stream(uint8_t * buf, int size){
@@ -98,76 +99,55 @@ void hfp_msbc_read_encoded_stream(uint8_t * buf, int size){
     if (size > msbc_buffer_offset){
         bytes_to_copy = msbc_buffer_offset;
         log_error("sbc frame storage is smaller then the output buffer");
+        return;
     }
 
     memcpy(buf, msbc_buffer, bytes_to_copy);
-    memmv(msbc_buffer, msbc_buffer + bytes_to_copy, bytes_to_copy);
+    memmove(msbc_buffer, msbc_buffer + bytes_to_copy, sizeof(msbc_buffer) - bytes_to_copy);
     msbc_buffer_offset -= bytes_to_copy;
 }
 
-
-static uint16_t little_endian_fread_16(FILE * fd){
-    uint8_t buf[2];
-    fread(&buf, 1, 2, fd);
-    return little_endian_read_16(buf, 0);
+int hfp_msbc_encoded_stream_available(int size){
+    return msbc_buffer_offset >= size;
 }
 
-
-static uint32_t little_endian_fread_32(FILE * fd){
-    uint8_t buf[4];
-    fread(&buf, 1, 4, fd);
-    return little_endian_read_32(buf, 0);
+int hfp_msbc_num_pcm_bytes(void){
+    return btstack_sbc_encoder_num_audio_samples() * 2;
 }
 
-static void read_wav_header(FILE * wav_fd){
-    /* write RIFF header */
-    uint8_t buf[10];
-    fread(&buf, 1, 4, wav_fd); buf[4] = 0; // RIFF
-    
-    little_endian_fread_32(wav_fd); // 36 + bytes_per_sample * num_samples  * frame_count
-    
-    fread(&buf, 1, 4, wav_fd);
-    buf[4] = 0;
-    // printf("%s\n", buf ); // WAVE
-    
-    fread(&buf, 1, 4, wav_fd);
-    buf[4] = 0;
-    // printf("%s\n", buf ); // fmt
-    
-    // int fmt_length = 
-    little_endian_fread_32(wav_fd);
-    // int fmt_format_tag = 
-    little_endian_fread_16(wav_fd);
-    
-    // printf("fmt_length %d == 16, format %d == 1\n", fmt_length, fmt_format_tag);
-    // chanel mode:
-    channel_mode = little_endian_fread_16(wav_fd);
-    // sampling frequency:
-    sampling_frequency = little_endian_fread_32(wav_fd);
-    // byte rate:
-    byte_rate = little_endian_fread_32(wav_fd);
-    
-    // int block_align = 
-    little_endian_fread_16(wav_fd);    
-    // int bits_per_sample = 
-    little_endian_fread_16(wav_fd);
+static ssize_t __read(int fd, void *buf, size_t count){
+    ssize_t len, pos = 0;
 
-    fread(&buf, 1, 4, wav_fd);
-    // printf("%s\n", buf ); // data
+    while (count > 0) {
+        len = read(fd, buf + pos, count);
+        if (len <= 0)
+            return pos;
 
-    num_data_bytes = little_endian_fread_32(wav_fd); 
-}
-
-static void read_audio_frame(FILE * wav_fd){
-    int i;
-    for (i=0; i < btstack_sbc_encoder_num_subband_samples(); i++){
-        read_buffer[i] = little_endian_fread_16(wav_fd);  
+        count -= len;
+        pos   += len;
     }
+    return pos;
 }
 
-static int sbc_num_frames(){
-    int num_all_samples = num_data_bytes / 2;
-    return num_all_samples / btstack_sbc_encoder_num_subband_samples(); 
+
+static int read_audio_frame(int wav_fd){
+    int i;
+    int bytes_read = 0;  
+    for (i=0; i < hfp_msbc_num_pcm_bytes()/2; i++){
+        uint8_t buf[2];
+        bytes_read +=__read(wav_fd, &buf, 2);
+        read_buffer[i] = little_endian_read_16(buf, 0);  
+    }
+    if (bytes_read == hfp_msbc_num_pcm_bytes() ){
+        num_frames++;
+    }
+    return bytes_read;
+}
+
+
+static void read_wav_header(int wav_fd){
+    uint8_t buf[40];
+    __read(wav_fd, buf, sizeof(buf));
 }
 
 int main (int argc, const char * argv[]){
@@ -178,7 +158,7 @@ int main (int argc, const char * argv[]){
     const char * wav_filename = argv[1];
     const char * sbc_filename = argv[2];
     
-    FILE * wav_fd = fopen(wav_filename, "rb");
+    int wav_fd = open(wav_filename, O_RDONLY); //fopen(wav_filename, "rb");
     if (!wav_fd) {
         printf("Can't open file %s", wav_filename);
         return -1;
@@ -190,24 +170,27 @@ int main (int argc, const char * argv[]){
         return -1;
     }
     
-    
     read_wav_header(wav_fd);
-    btstack_sbc_encoder_init(&state, SBC_MODE_STANDARD, 16, 4, channel_mode, sampling_frequency, 31);
-   
-    int num_frames = sbc_num_frames();
-    int frame_count = 0;
+    hfp_msbc_init();
     
-    while (frame_count < num_frames){
-        read_audio_frame(wav_fd);
-        
-        btstack_sbc_encoder_process_data(read_buffer);
-        fwrite(btstack_sbc_encoder_sbc_buffer(), 1, btstack_sbc_encoder_sbc_buffer_length(), sbc_fd);
-        frame_count++;
+    while (1){
+        if (hfp_msbc_can_encode_audio()){
+            int bytes_read = read_audio_frame(wav_fd);
+            if (bytes_read < hfp_msbc_num_pcm_bytes()) break;
+
+            hfp_msbc_encode_audio_frame(read_buffer);
+        }
+        if (hfp_msbc_encoded_stream_available(sizeof(output_buffer))){
+            hfp_msbc_read_encoded_stream(output_buffer, sizeof(output_buffer));
+            fwrite(output_buffer, 1, sizeof(output_buffer), sbc_fd);
+        } 
     }
+    
+
     btstack_sbc_encoder_dump_context();
 
-    printf("Done, frame count %d\n", frame_count);
-    fclose(wav_fd);
+    printf("Done, frame count %d \n", num_frames);
+    close(wav_fd);
     fclose(sbc_fd);
     return 0;
 }