diff --git a/qahw_api/test/qahw_multi_record_test.c b/qahw_api/test/qahw_multi_record_test.c
index d13f374..eab100d 100644
--- a/qahw_api/test/qahw_multi_record_test.c
+++ b/qahw_api/test/qahw_multi_record_test.c
@@ -27,6 +27,7 @@
 #include <unistd.h>
 #include <cutils/list.h>
 #include <signal.h>
+#include <errno.h>
 #include "qahw_api.h"
 #include "qahw_defs.h"
 
@@ -88,12 +89,8 @@
                               "SoundFocus.enable_sectors=%s;" \
                               "SoundFocus.gain_step=%d"
 int sourcetrack_done = 0;
-static pthread_mutex_t glock;
 static pthread_mutex_t sourcetrack_lock;
 char soundfocus_param[100];
-pthread_cond_t gcond;
-int tests_running;
-bool gerror;
 
 void sourcetrack_signal_handler(void)
 {
@@ -142,50 +139,50 @@
         pthread_mutex_lock(&sourcetrack_lock);
         status = qahw_set_parameters(qawh_module_handle, soundfocus_param);
         if (status != 0)
-            printf("Error.Failed Set SoundFocus Params\n");
+            fprintf(log_file, "Error.Failed Set SoundFocus Params\n");
 
-        printf("\nGet SoundFocus Params from app");
+        fprintf(log_file, "\nGet SoundFocus Params from app");
         param = QAHW_PARAM_SOUND_FOCUS;
         status = qahw_get_param_data(qawh_module_handle, param, &payload);
         if (status < 0) {
-                printf("Failed to get sound focus params\n");
+                fprintf(log_file, "Failed to get sound focus params\n");
         } else {
            memcpy (&sound_focus_data, &payload.sf_params,
                    sizeof(struct qahw_sound_focus_param));
            for (idx = 0; idx < 4; idx++){
-                printf("\nstart_angle[%d]=%d",idx,
+                fprintf(log_file, "\nstart_angle[%d]=%d",idx,
                         payload.sf_params.start_angle[idx]);
-                printf(" enable[%d]=%d",idx,
+                fprintf(log_file, " enable[%d]=%d",idx,
                         payload.sf_params.enable[idx]);
-                printf(" gain=%d\n",payload.sf_params.gain_step);
+                fprintf(log_file, " gain=%d\n",payload.sf_params.gain_step);
            }
         }
         param = QAHW_PARAM_SOURCE_TRACK;
         status = qahw_get_param_data(qawh_module_handle, param, &payload);
         if (status < 0) {
-            printf ("Failed to get source tracking params\n");
+            fprintf (log_file, "Failed to get source tracking params\n");
         } else {
             for (idx = 0; idx < 4; idx++){
-                printf("vad[%d]=%d ",idx, payload.st_params.vad[idx]);
+                fprintf(log_file, "vad[%d]=%d ",idx, payload.st_params.vad[idx]);
                 if (idx < 3)
-                    printf("doa_noise[%d]=%d \n",
+                    fprintf(log_file, "doa_noise[%d]=%d \n",
                             idx, payload.st_params.doa_noise[idx]);
             }
-            printf("doa_speech=%d\n",payload.st_params.doa_speech);
-            printf("polar_activity:");
+            fprintf(log_file, "doa_speech=%d\n",payload.st_params.doa_speech);
+            fprintf(log_file, "polar_activity:");
             for (sect = 0; sect < 4; sect++ ){
-                printf("\nSector No-%d:\n",sect + 1);
+                fprintf(log_file, "\nSector No-%d:\n",sect + 1);
                 idx = sound_focus_data.start_angle[sect];
                 count = sound_focus_data.start_angle[(sect + 1)%4] -
                         sound_focus_data.start_angle[sect];
                 if (count <0)
                     count = count + 360;
                 do {
-                    printf("%d,",payload.st_params.polar_activity[idx%360]);
+                    fprintf(log_file, "%d,",payload.st_params.polar_activity[idx%360]);
                     count--;
                     idx++;
                 } while (count);
-                printf("\n");
+                fprintf(log_file, "\n");
             }
         }
         pthread_mutex_unlock(&sourcetrack_lock);
@@ -279,6 +276,7 @@
   /* Get buffer size to get upper bound on data to read from the HAL */
   size_t buffer_size = qahw_in_get_buffer_size(in_handle);
   char *buffer = (char *)calloc(1, buffer_size);
+  size_t written_size;
   if (buffer == NULL) {
       fprintf(log_file, "calloc failed!!, handle(%d)\n", params->handle);
       if (log_file != stdout)
@@ -373,17 +371,18 @@
                   fprintf(log_file, "error(%d) getting current time after 8th read!, handle(%d)", ret, params->handle);
           }
           count++;
-      fwrite(in_buf.buffer, sizeof(char), buffer_size, fd);
-      if(difftime(time(0), start_time) > params->loopTime) {
-          sourcetrack_done = 1;
-          printf("\nTest completed.\n");
-          break;
       }
 
       time_elapsed = difftime(time(0), start_time);
-      fwrite(in_buf.buffer, 1, buffer_size, fd);
+      written_size = fwrite(in_buf.buffer, 1, buffer_size, fd);
+      if (written_size < buffer_size) {
+         printf("Error in fwrite(%d)=%s\n",ferror(fd), strerror(ferror(fd)));
+         break;
+      }
       data_sz += buffer_size;
   }
+  /*Stopping sourcetracking thread*/
+  sourcetrack_done = 1;
 
   /* update lengths in header */
   hdr.data_sz = data_sz;
@@ -411,8 +410,9 @@
   }
 
   fprintf(log_file, " closing input, handle(%d)", params->handle);
+  printf("closing input");
 
-  /* Close output stream and device. */
+  /* Close input stream and device. */
   rc = qahw_in_standby(in_handle);
   if (rc) {
       fprintf(log_file, "out standby failed %d, handle(%d)\n",rc, params->handle);
@@ -523,10 +523,10 @@
     printf(" \n Examples \n");
     printf(" hal_rec_test     -> start a recording stream with default configurations\n\n");
     printf(" hal_rec_test -i  -> start a recording stream and get configurations from user interactively\n\n");
-    printf(" hal_rec_test -d 2 -f 1 -r 44100 -c 2 -t 8 -D 2 -S -> start a recording session, with device 2[built-in-mic],\n");
+    printf(" hal_rec_test -d 2 -f 1 -r 44100 -c 2 -t 8 -D 2 -> start a recording session, with device 2[built-in-mic],\n");
     printf("                                           format 1[AUDIO_FORMAT_PCM_16_BIT], sample rate 44100, \n");
     printf("                                           channels 2[AUDIO_CHANNEL_IN_STEREO], record data for 8 secs\n");
-    printf("                                           start recording after 2 secs, and capture source tracking params.\n\n");
+    printf("                                           start recording after 2 secs.\n\n");
     printf(" hal_rec_test -F 1 --kpi-mode -> start a recording with low latency input flag and calculate latency KPIs\n\n");
 }
 
@@ -722,10 +722,10 @@
     pthread_t sourcetrack_thread;
     int ret = -1;
 
-    if (source_track && max_recordings_requested) {
+    if (source_tracking && max_recordings_requested) {
         if (pthread_mutex_init(&sourcetrack_lock, NULL) != 0) {
                printf("\n mutex init failed\n");
-               source_track = 0;
+               source_tracking = 0;
                goto sourcetrack_error;
         }
         signal(SIGQUIT, sourcetrack_signal_handler);
@@ -737,7 +737,7 @@
                 (void *)qahw_mod_handle);
         if (ret) {
             printf(" Failed to create source tracking thread \n ");
-            source_track = 0;
+            source_tracking = 0;
             pthread_mutex_destroy(&sourcetrack_lock);
             goto sourcetrack_error;
         }
@@ -833,7 +833,7 @@
     }
 
 sourcetrack_error:
-    if (source_track) {
+    if (source_tracking) {
         pthread_join(sourcetrack_thread,NULL);
         pthread_mutex_destroy(&sourcetrack_lock);
         printf("after source tracking thread exit \n");
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index aaa61c0..c3a0873 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -141,6 +141,7 @@
     char *kvpair_type;
     char param[100];
     char *token = NULL;
+    int value = 0;
     int len = 0;
     int size = 0;
 
@@ -166,8 +167,8 @@
         while (token) {
             len = strcspn(kvpair_type, "=");
             size = len + strlen(token) + 2;
-            token = atoi(token);
-            snprintf(kvpair, size, kvpair_type, token);
+            value = atoi(token);
+            snprintf(kvpair, size, kvpair_type, value);
             kvpair += size - 1;
             kvpair_type += len + 3;
             token = strtok(NULL, ",");
