diff --git a/CORE/HDD/src/wlan_hdd_wowl.c b/CORE/HDD/src/wlan_hdd_wowl.c
index e783033..05d2f5d 100644
--- a/CORE/HDD/src/wlan_hdd_wowl.c
+++ b/CORE/HDD/src/wlan_hdd_wowl.c
@@ -95,10 +95,20 @@
 
 static void hdd_wowl_callback( void *pContext, eHalStatus halStatus )
 {
-  VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, 
-    "%s: Return code = (%ld)\n", __func__, halStatus );
+  VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,
+      "%s: Return code = (%ld)\n", __func__, halStatus );
 }
 
+#ifdef WLAN_WAKEUP_EVENTS
+static void hdd_wowl_wakeIndication_callback( void *pContext,
+    tpSirWakeReasonInd pWakeReasonInd )
+{
+  VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: Wake Reason %d",
+      __func__, pWakeReasonInd->ulReason );
+  hdd_exit_wowl((hdd_adapter_t *)pContext);
+}
+#endif
+
 static void dump_hdd_wowl_ptrn(tSirWowlAddBcastPtrn *ptrn)
 {
   int i;
@@ -361,7 +371,12 @@
 
   // Request to put Libra into WoWL
   halStatus = sme_EnterWowl( hHal, hdd_wowl_callback, 
-                             pAdapter, &wowParams, pAdapter->sessionId);
+                             pAdapter,
+#ifdef WLAN_WAKEUP_EVENTS
+                             hdd_wowl_wakeIndication_callback,
+                             pAdapter,
+#endif // WLAN_WAKEUP_EVENTS
+                             &wowParams, pAdapter->sessionId);
 
   if ( !HAL_STATUS_SUCCESS( halStatus ) )
   {
diff --git a/CORE/SME/src/pmc/pmcApi.c b/CORE/SME/src/pmc/pmcApi.c
index 293378c..e898974 100644
--- a/CORE/SME/src/pmc/pmcApi.c
+++ b/CORE/SME/src/pmc/pmcApi.c
@@ -2190,29 +2190,23 @@
            pmcGetPmcStateStr(pMac->pmc.pmcState));
         return eHAL_STATUS_FAILURE;
     }
+
     if( pMac->pmc.pmcState == IMPS || pMac->pmc.pmcState == REQUEST_IMPS )
     {
-        eHalStatus status;
-        vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr));
-        //Wake up the chip first
-        status = pmcDeferMsg( pMac, eWNI_PMC_WOWL_ADD_BCAST_PTRN, 
-                                    pattern, sizeof(tSirWowlAddBcastPtrn) );
-
-        if( eHAL_STATUS_PMC_PENDING == status )
-        {
-            return eHAL_STATUS_SUCCESS;
-        }
-        else 
-        {
-            //either fail or already in full power
-            if( !HAL_STATUS_SUCCESS( status ) )
-            {
-                return ( status );
-            }
-            //else let it through because it is in full power state
-        }
+        smsLog(pMac, LOGE, FL("Cannot add WoWL Pattern as chip is in %s state"),
+           pmcGetPmcStateStr(pMac->pmc.pmcState));
+        return eHAL_STATUS_FAILURE;
     }
 
+    if( !csrIsConnStateConnected(pMac, sessionId) )
+    {
+        smsLog(pMac, LOGE, FL("Cannot add WoWL Pattern session in %d state"),
+           pSession->connectState);
+        return eHAL_STATUS_FAILURE;
+    }
+
+    vos_mem_copy(pattern->bssId, pSession->connectedProfile.bssid, sizeof(tSirMacAddr));
+
     if (pmcSendMessage(hHal, eWNI_PMC_WOWL_ADD_BCAST_PTRN, pattern, sizeof(tSirWowlAddBcastPtrn))
         != eHAL_STATUS_SUCCESS)
     {
@@ -2382,9 +2376,6 @@
        return eHAL_STATUS_FAILURE;
    }
 
-   vos_mem_copy(wowlEnterParams->bssId, pSession->connectedProfile.bssid, 
-               sizeof(tSirMacAddr));
-
    if( !PMC_IS_READY(pMac) )
    {
        smsLog(pMac, LOGE, FL("Requesting WoWL when PMC not ready"));
@@ -2431,6 +2422,9 @@
       return eHAL_STATUS_FAILURE;
    }
 
+   vos_mem_copy(wowlEnterParams->bssId, pSession->connectedProfile.bssid,
+               sizeof(tSirMacAddr));
+
    // To avoid race condition, set callback routines before sending message.
    /* cache the WOWL information */
    pMac->pmc.wowlEnterParams = *wowlEnterParams;
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 1dfd270..e4b8c36 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -9098,6 +9098,9 @@
       vos_mem_free(wdiWowlEnterInfo);
       return VOS_STATUS_E_NOMEM;
    }
+
+   vos_mem_zero(pWdaParams, sizeof(tWDA_ReqParams));
+
    vos_mem_copy(wdiWowlEnterInfo->wdiWowlEnterInfo.magicPtrn,
                 pWowlEnterParams->magicPtrn,
                 sizeof(tSirMacAddr));
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index ca840d4..148f63e 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -13976,6 +13976,8 @@
       return WDI_STATUS_E_FAILURE;
    }
 
+   wpalMemoryZero(&wowlEnterReq, sizeof(tHalWowlEnterParams));
+
    wowlEnterReq.ucMagicPktEnable =
       pwdiWowlEnterParams->wdiWowlEnterInfo.ucMagicPktEnable;
    wowlEnterReq.ucPatternFilteringEnable =
diff --git a/Kbuild b/Kbuild
index f96c63e..7cf25f3 100644
--- a/Kbuild
+++ b/Kbuild
@@ -518,10 +518,11 @@
 		-DWLAN_ENABLE_AGEIE_ON_SCAN_RESULTS \
 		-DWLANTL_DEBUG\
 		-DWLAN_ACTIVEMODE_OFFLOAD_FEATURE \
-        	-DWLAN_FEATURE_HOLD_RX_WAKELOCK \
+		-DWLAN_FEATURE_HOLD_RX_WAKELOCK \
 		-DWLAN_SOFTAP_VSTA_FEATURE \
-                -DWLAN_FEATURE_ROAM_SCAN_OFFLOAD \
-                -DWLAN_FEATURE_GTK_OFFLOAD
+		-DWLAN_FEATURE_ROAM_SCAN_OFFLOAD \
+		-DWLAN_FEATURE_GTK_OFFLOAD \
+		-DWLAN_WAKEUP_EVENTS
 
 ifneq ($(CONFIG_PRONTO_WLAN),)
 CDEFINES += -DWCN_PRONTO
