diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index fb69d93..038e13e 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -2337,7 +2337,6 @@
 
     if (is_qap_session_active(argc, argv, kvp_string)) {
         char *file_name = NULL;
-        char *file_name_tmp = NULL;
         char *cmd_kvp_str[100] = {NULL};
         char *play_list_kvp_str[100] = {NULL};
         int i = 0, j = 0;
diff --git a/qahw_api/test/qap_wrapper_extn.c b/qahw_api/test/qap_wrapper_extn.c
index 5c76d40..0405423 100644
--- a/qahw_api/test/qap_wrapper_extn.c
+++ b/qahw_api/test/qap_wrapper_extn.c
@@ -114,7 +114,8 @@
 double data_callback_st_arr[TIMESTAMP_ARRAY_SIZE];
 bool has_system_input = false;
 char session_kv_pairs[256];
-bool stream_close = false;
+bool primary_stream_close = false;
+uint8_t stream_cnt = 0;
 uint32_t dsp_latency = 0;
 
 static int get_qap_out_config_index_for_id(int32_t out_id)
@@ -320,8 +321,7 @@
     if (tmp_str != NULL) {
         file_str = strstr(kvp_string, ".txt");
         len = file_str - tmp_str;
-        play_list = (char*) malloc(sizeof(char) * (len+4));
-        memset(play_list, '\0', len+4);
+        play_list = (char*) calloc(1, sizeof(char) * (len+4));
         strncpy(play_list, tmp_str+2, len+2);
     }
     return play_list;
@@ -392,13 +392,13 @@
             }
         }
         i++;
-        while (!stream_close) {
+        while (!primary_stream_close) {
             usleep(50000);
             fprintf(stderr, "QAP Stream not closed\n");
         }
         fprintf(stderr, "QAP Stream closed\n");
     } while (i <num_of_streams);
-    if (broad_cast && qap_wrapper_session_active) {
+    if (qap_wrapper_session_active) {
         qap_wrapper_session_close();
         qap_wrapper_session_active = false;
     }
@@ -427,8 +427,7 @@
         if (temp_kvp != NULL) {
             temp_key = strtok_r(temp_kvp, "=", &context2);
             if (!strncmp(key, temp_key, strlen(key))) {
-                kvp = malloc((strlen(token) + 1) * sizeof(char));
-                memset(kvp, 0, strlen(token) + 1);
+                kvp = calloc(1, (strlen(token) + 1) * sizeof(char));
                 strncat(kvp, token, strlen(token));
                 return kvp;
             }
@@ -441,8 +440,7 @@
                 if (temp_kvp != NULL) {
                     temp_key = strtok_r(temp_kvp, "=", &context2);
                     if (!strncmp(key, temp_key, strlen(key))) {
-                        kvp = malloc((strlen(token) + 1) * sizeof(char));
-                        memset(kvp, 0, strlen(token) + 1);
+                        kvp = calloc(1, (strlen(token) + 1) * sizeof(char));
                         strncat(kvp, token, strlen(token));
                         return kvp;
                     }
@@ -488,7 +486,7 @@
             for (i=0; s[i]; s[i]==',' ? i++ : *s++);
 
             temp = i;
-            val = malloc((i + 1)*sizeof(int));
+            val = calloc(1, (i + 1)*sizeof(int));
             i = 0;
             val[i++] = strtol(tempstr2, &endstr, 0);
 
@@ -690,7 +688,7 @@
             fprintf(stderr, "%s::%d: could not close output stream, error - %d\n", __func__, __LINE__, ret);
         qap_out_hdmi_handle = NULL;
     }
-    stream_close = true;
+    primary_stream_close = true;
 }
 
 void qap_wrapper_session_callback(qap_session_handle_t session_handle __unused, void* priv_data __unused, qap_callback_event_t event_id, int size __unused, void *data)
@@ -707,13 +705,14 @@
     switch (event_id) {
         case QAP_CALLBACK_EVENT_EOS:
             ALOGV("%s %d Received Main Input EOS", __func__, __LINE__);
+            stream_cnt --;
             pthread_mutex_lock(&main_eos_lock);
             pthread_cond_signal(&main_eos_cond);
             pthread_mutex_unlock(&main_eos_lock);
 
             ALOGE("%s %d Received Main Input EOS ", __func__, __LINE__);
-            if (!stream_close)
-            close_output_streams();
+            if (!stream_cnt)
+                close_output_streams();
             if (play_list_cnt && input_streams_count) {
                 play_list_cnt--;
                 input_streams_count = 0;
@@ -721,12 +720,15 @@
             break;
         case QAP_CALLBACK_EVENT_EOS_ASSOC:
         case QAP_CALLBACK_EVENT_MAIN_2_EOS:
+            stream_cnt --;
             if (!has_system_input){
                 ALOGV("%s %d Received Secondary Input EOS", __func__, __LINE__);
                 pthread_mutex_lock(&sec_eos_lock);
                 pthread_cond_signal(&sec_eos_cond);
                 pthread_mutex_unlock(&sec_eos_lock);
             }
+            if (!stream_cnt)
+                close_output_streams();
             break;
         case QAP_CALLBACK_EVENT_ERROR:
             break;
@@ -1162,7 +1164,7 @@
         }
     }
 
-    if (stream->filetype == FILE_DTS) {
+    if (stream->filetype == FILE_DTS && (NULL == m8_lib_handle)) {
         m8_lib_handle = (qap_session_handle_t) qap_load_library(QAC_LIB_M8);
         if (m8_lib_handle == NULL) {
             fprintf(stdout, "Failed to load M8 library\n");
@@ -1176,7 +1178,7 @@
                 (stream->filetype == FILE_WAV) ||
                 (stream->filetype == FILE_AAC) ||
                 (stream->filetype == FILE_AAC_ADTS) ||
-                (stream->filetype == FILE_AAC_LATM)) {
+                (stream->filetype == FILE_AAC_LATM) && (NULL == ms12_lib_handle)) {
         ms12_lib_handle = (qap_session_handle_t) qap_load_library(QAC_LIB_MS12);
         if (ms12_lib_handle == NULL) {
             fprintf(stderr, "Failed to load MS12 library\n");
@@ -1307,6 +1309,16 @@
     session_output_configured = false;
     qap_session_close(qap_session_handle);
     qap_session_handle = NULL;
+    if (stream_cnt == 0) {
+        if (NULL != m8_lib_handle) {
+            qap_unload_library(m8_lib_handle);
+            m8_lib_handle = NULL;
+        }
+        if (NULL != ms12_lib_handle) {
+            qap_unload_library(ms12_lib_handle);
+            ms12_lib_handle = NULL;
+        }
+    }
 }
 
 void *qap_wrapper_start_stream (void* stream_data)
@@ -1572,7 +1584,8 @@
         return NULL;
     }
 
-    stream_close = false;
+    primary_stream_close = false;
+    stream_cnt ++;
     return qap_module_handle;
 
 }
@@ -1580,33 +1593,27 @@
 {
     char *token = NULL;
     char *strings[100] = {NULL};
-    char cmd_str[500] = {0};
+    char cmd_str[1024] = {0};
     char *tmp_str = NULL;
     int i = 0;
 
     do {
-        int j = 0, cnt = 1, status = 0;
+        int j = 0, cnt = 0, status = 0;
 
         if (fgets(cmd_str, sizeof(cmd_str), fp) != NULL)
             tmp_str = strdup(cmd_str);
         else
             break;
-        fprintf(stdout, "%s %d\n", __FUNCTION__, __LINE__);
+        fprintf(stdout, "%s %d tmp_str is %s", __FUNCTION__, __LINE__, tmp_str);
         token = strtok(tmp_str, " ");
         if (NULL != token) {
-            strings[cnt] = (char*)calloc(1, (strlen(token) +1));
-            memset(strings[cnt], '\0', strlen(token) +1);
-            strncpy(strings[cnt], token, strlen(token));
-            cnt++;
+            strings[cnt++] = strdup("playlist");
+            strings[cnt++] = strdup(token);
             while (NULL != (token = strtok(NULL, " "))) {
-                strings[cnt] = (char*)calloc(1, (strlen(token) +1));
-                memset(strings[cnt], '\0', strlen(token) +1);
-                strncpy(strings[cnt], token, strlen(token));
+                strings[cnt] = strdup(token);
+                ALOGV("%s %d strings[%d] is %s", __FUNCTION__, __LINE__, cnt, strings[cnt]);
                 cnt++;
             }
-            strings[0] = calloc(1, 4);
-            memset(strings[0], '\0', 4);
-            strncpy(strings[0], "play_list", 3);
             for (j = 0;j< cnt;j++) {
                 if (!strncmp(strings[j], "-f", 2)) {
                    (*stream_param)[i].filename = strdup(strings[j+1]);
@@ -1626,15 +1633,21 @@
                     (*stream_param)[i].aac_fmt_type = atoi(strings[j+1]);
                 }
             }
+            free(tmp_str);
+            tmp_str = NULL;
         }
         if(NULL != (*stream_param)[i].filename) {
             *num_of_streams = i+1;
             play_list = true;
-            kvp_str[i] = (char *)qap_wrapper_get_cmd_string_from_arg_array(cnt, (char**)strings, &status);
+            kvp_str[i] = (char *)qap_wrapper_get_cmd_string_from_arg_array(cnt, strings, &status);
+            ALOGV("%s %d kvp_str[%d] is %s", __FUNCTION__, __LINE__, i, kvp_str[i]);
         }
-        free(tmp_str);
-        for (j=0; j < cnt; j++)
-           free(strings[j]);
+        for (j=0; j < cnt; j++) {
+           if (NULL != strings[j]){
+               free(strings[j]);
+               strings[j] = NULL;
+           }
+        }
         i++;
     }while(NULL != cmd_str);
 
