diff --git a/qcwcn/wifi_hal/llstats.cpp b/qcwcn/wifi_hal/llstats.cpp
index 7183eb9..284e70f 100644
--- a/qcwcn/wifi_hal/llstats.cpp
+++ b/qcwcn/wifi_hal/llstats.cpp
@@ -857,6 +857,31 @@
     return WifiCommand::requestResponse(mMsg);
 }
 
+void LLStatsCommand::notifyResponse()
+{
+    mHandler.on_link_stats_results(mRequestId,
+                            mResultsParams.iface_stat, mNumRadios,
+                            mResultsParams.radio_stat);
+    if(mResultsParams.radio_stat)
+    {
+        if (mResultsParams.radio_stat->tx_time_per_levels)
+        {
+            free(mResultsParams.radio_stat->tx_time_per_levels);
+            mResultsParams.radio_stat->tx_time_per_levels = NULL;
+        }
+        free(mResultsParams.radio_stat);
+        mResultsParams.radio_stat = NULL;
+        mRadioStatsSize = 0;
+        mNumRadios = 0;
+     }
+     if(mResultsParams.iface_stat)
+     {
+        free(mResultsParams.iface_stat);
+        mResultsParams.iface_stat = NULL;
+     }
+}
+
+
 int LLStatsCommand::handleResponse(WifiEvent &reply)
 {
     unsigned i=0;
@@ -1032,28 +1057,6 @@
                         ALOGV("%s: numPeers is %u\n", __FUNCTION__,
                                 mResultsParams.iface_stat->num_peers);
 #endif
-                        if(mResultsParams.iface_stat->num_peers == 0)
-                        {
-                            // Number of Radios are 1 for now
-                            mHandler.on_link_stats_results(mRequestId,
-                                    mResultsParams.iface_stat,
-                                    mNumRadios,
-                                    mResultsParams.radio_stat);
-                            if(mResultsParams.radio_stat)
-                            {
-                                if (mResultsParams.radio_stat->tx_time_per_levels)
-                                {
-                                    free(mResultsParams.radio_stat->tx_time_per_levels);
-                                    mResultsParams.radio_stat->tx_time_per_levels = NULL;
-                                }
-                                free(mResultsParams.radio_stat);
-                                mResultsParams.radio_stat = NULL;
-                                mRadioStatsSize = 0;
-                                mNumRadios = 0;
-                            }
-                            free(mResultsParams.iface_stat);
-                            mResultsParams.iface_stat = NULL;
-                        }
                     }
                 }
                 break;
@@ -1166,27 +1169,6 @@
                         }
                     }
 
-                    // Number of Radios are 1 for now
-                    mHandler.on_link_stats_results(mRequestId,
-                            mResultsParams.iface_stat, mNumRadios,
-                            mResultsParams.radio_stat);
-                    if(mResultsParams.radio_stat)
-                    {
-                        if (mResultsParams.radio_stat->tx_time_per_levels)
-                        {
-                            free(mResultsParams.radio_stat->tx_time_per_levels);
-                            mResultsParams.radio_stat->tx_time_per_levels = NULL;
-                        }
-                        free(mResultsParams.radio_stat);
-                        mResultsParams.radio_stat = NULL;
-                        mRadioStatsSize = 0;
-                        mNumRadios = 0;
-                    }
-                    if(mResultsParams.iface_stat)
-                    {
-                        free(mResultsParams.iface_stat);
-                        mResultsParams.iface_stat = NULL;
-                    }
                 }
                 break;
 
@@ -1369,6 +1351,9 @@
     if (ret < 0)
         goto cleanup;
 
+    if (ret == 0)
+        LLCommand->notifyResponse();
+
 cleanup:
     return (wifi_error)ret;
 }
diff --git a/qcwcn/wifi_hal/llstatscommand.h b/qcwcn/wifi_hal/llstatscommand.h
index 9202f3a..64aba60 100644
--- a/qcwcn/wifi_hal/llstatscommand.h
+++ b/qcwcn/wifi_hal/llstatscommand.h
@@ -103,6 +103,8 @@
 
     virtual int requestResponse();
 
+    virtual void notifyResponse();
+
     virtual int handleResponse(WifiEvent &reply);
 
     virtual void getClearRspParams(u32 *stats_clear_rsp_mask, u8 *stop_rsp);
