diff --git a/qcwcn/wifi_hal/gscan.cpp b/qcwcn/wifi_hal/gscan.cpp
index 69a54b0..4d40432 100644
--- a/qcwcn/wifi_hal/gscan.cpp
+++ b/qcwcn/wifi_hal/gscan.cpp
@@ -1681,8 +1681,10 @@
     if (ret < 0)
         goto out;
 
+#ifdef QC_HAL_DEBUG
      ALOGI("%s: mVendor_id = %d, Subcmd = %d.",
         __FUNCTION__, mVendor_id, mSubcmd);
+#endif
 
 out:
     return ret;
diff --git a/qcwcn/wifi_hal/llstats.cpp b/qcwcn/wifi_hal/llstats.cpp
index 2f84858..f900054 100644
--- a/qcwcn/wifi_hal/llstats.cpp
+++ b/qcwcn/wifi_hal/llstats.cpp
@@ -971,7 +971,6 @@
                     {
                         ALOGE("%s:QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_NUM_PEERS"
                                 " not found", __func__);
-                        ALOGE("Expecting Peer stats event");
                     } else {
                         mResultsParams.iface_stat->num_peers =
                             nla_get_u32(tb_vendor[
@@ -980,7 +979,6 @@
                                 mResultsParams.iface_stat->num_peers);
                         if(mResultsParams.iface_stat->num_peers == 0)
                         {
-                            ALOGE("Not Expecting Peer stats event");
                             // Number of Radios are 1 for now
                             mHandler.on_link_stats_results(mRequestId,
                                     mResultsParams.iface_stat,
diff --git a/qcwcn/wifi_hal/wifilogger.cpp b/qcwcn/wifi_hal/wifilogger.cpp
index 87b1412..277d41c 100644
--- a/qcwcn/wifi_hal/wifilogger.cpp
+++ b/qcwcn/wifi_hal/wifilogger.cpp
@@ -148,7 +148,7 @@
         }
 
     }
-    ALOGI("%s: Logging Started for %s.", __FUNCTION__, buffer_name);
+    ALOGV("%s: Logging Started for %s.", __FUNCTION__, buffer_name);
     rb_start_logging(&info->rb_infos[ring_id], verbose_level,
                     flags, max_interval_sec, min_data_size);
 cleanup:
@@ -616,7 +616,7 @@
 
 WifiLoggerCommand::~WifiLoggerCommand()
 {
-    ALOGD("WifiLoggerCommand %p destructor", this);
+    ALOGV("WifiLoggerCommand %p destructor", this);
     unregisterVendorHandler(mVendor_id, mSubcmd);
 }
 
@@ -636,7 +636,7 @@
     if (ret < 0)
         goto out;
 
-     ALOGI("%s: mVendor_id = %d, Subcmd = %d.",
+     ALOGV("%s: mVendor_id = %d, Subcmd = %d.",
         __FUNCTION__, mVendor_id, mSubcmd);
 
 out:
@@ -749,7 +749,6 @@
     int *ret = (int *)arg;
     struct nl_msg * a;
 
-    ALOGE("%s: called", __FUNCTION__);
     a = msg;
     *ret = 0;
     return NL_STOP;
@@ -761,7 +760,6 @@
   int *ret = (int *)arg;
   struct nl_msg * a;
 
-  ALOGE("%s: called", __FUNCTION__);
   a = msg;
   *ret = 0;
   return NL_SKIP;
@@ -772,8 +770,6 @@
     int res = -1;
     struct nl_cb *cb;
 
-    ALOGD("%s: Entry.", __FUNCTION__);
-
     cb = nl_cb_alloc(NL_CB_DEFAULT);
     if (!cb) {
         ALOGE("%s: Callback allocation failed",__FUNCTION__);
@@ -796,7 +792,7 @@
          nl_recvmsgs(mInfo->cmd_sock, cb);
     }
 
-    ALOGD("%s: Msg sent, res=%d, mWaitForRsp=%d", __FUNCTION__, res, mWaitforRsp);
+    ALOGV("%s: Msg sent, res=%d, mWaitForRsp=%d", __FUNCTION__, res, mWaitforRsp);
     /* Only wait for the asynchronous event if HDD returns success, res=0 */
     if (!res && (mWaitforRsp == true)) {
         struct timespec abstime;
@@ -807,7 +803,7 @@
         {
             ALOGE("%s: Time out happened.", __FUNCTION__);
         }
-        ALOGD("%s: Command invoked return value:%d, mWaitForRsp=%d",
+        ALOGV("%s: Command invoked return value:%d, mWaitForRsp=%d",
             __FUNCTION__, res, mWaitforRsp);
     }
 out:
@@ -822,7 +818,6 @@
 }
 
 int WifiLoggerCommand::handleResponse(WifiEvent &reply) {
-    ALOGD("Received a WifiLogger response message from Driver");
     u32 status;
     int ret = WIFI_SUCCESS;
     int i = 0;
@@ -832,6 +827,7 @@
     FILE* memDumpFilePtr = NULL;
     WifiVendorCommand::handleResponse(reply);
 
+    memset(version_type, 0, 20);
     switch(mSubcmd)
     {
         case QCA_NL80211_VENDOR_SUBCMD_GET_WIFI_INFO:
@@ -900,7 +896,7 @@
             if (!tbVendor[
                 QCA_WLAN_VENDOR_ATTR_LOGGER_RESULTS_MEMDUMP_SIZE]) {
                 ALOGE("%s: LOGGER_RESULTS_MEMDUMP_SIZE not"
-                      "found", __func__);
+                      "found", __FUNCTION__);
                 break;
             }
 
@@ -951,7 +947,7 @@
                     if (numRecordsRead) {
                         remaining -= readSize;
                         buffer += readSize;
-                        ALOGI("%s: Read successful for size:%u "
+                        ALOGV("%s: Read successful for size:%u "
                               "remaining:%u", __func__, readSize,
                               remaining);
                     }
diff --git a/qcwcn/wifi_hal/wifilogger_diag.cpp b/qcwcn/wifi_hal/wifilogger_diag.cpp
index d5d2346..17443cf 100644
--- a/qcwcn/wifi_hal/wifilogger_diag.cpp
+++ b/qcwcn/wifi_hal/wifilogger_diag.cpp
@@ -1015,7 +1015,7 @@
     else if ((pWlanEapolEvent->eapol_key_info & EAPOL_MASK) == EAPOL_M4_MASK)
         eapol_msg_type = 4;
     else
-        ALOGI("Unknow EAPOL message type \n");
+        ALOGI("Unknown EAPOL message type \n");
     pTlv = addLoggerTlv(WIFI_TAG_EAPOL_MESSAGE_TYPE, sizeof(u32),
                         (u8 *)&eapol_msg_type, pTlv);
     tot_len += sizeof(tlv_log) + sizeof(u32);
