diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index bc6cb0a..9c09b31 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -2918,8 +2918,8 @@
     tpPESession              psessionEntry;
     extern tANI_BOOLEAN     sendDisassocFrame;
     tSirSmeDisassocRsp      *pSirSmeDisassocRsp;
-    tANI_U32                *pMsg;
     tANI_U8                 *pBuf;
+    vos_msg_t               msg = {0};
 
     if(eHAL_STATUS_SUCCESS != suspendStatus)
     {
@@ -3043,10 +3043,14 @@
          pBuf  = (tANI_U8 *) pSirSmeDisassocRsp->peerMacAddr;
          vos_mem_copy( pBuf, pMlmDisassocReq->peerMacAddr, sizeof(tSirMacAddr));
 
-         pMsg = (tANI_U32*) pSirSmeDisassocRsp;
+         msg.type = eWNI_SME_DISASSOC_RSP;
+         msg.bodyptr = pSirSmeDisassocRsp;
 
-         limSendSmeDisassocDeauthNtf( pMac, eHAL_STATUS_SUCCESS,
-                                                (tANI_U32*) pMsg );
+         if (pMac->lim.sme_msg_callback)
+             pMac->lim.sme_msg_callback(pMac, &msg);
+         else
+             limLog(pMac, LOGE, FL("Sme msg callback is NULL"));
+
          return;
 
     }
@@ -3250,8 +3254,7 @@
     tpPESession             psessionEntry;
     tSirSmeDeauthRsp        *pSirSmeDeauthRsp;
     tANI_U8                 *pBuf;
-    tANI_U32                *pMsg;
-
+    vos_msg_t               msg = {0};
 
     if(eHAL_STATUS_SUCCESS != suspendStatus)
     {
@@ -3457,10 +3460,13 @@
         pBuf  = (tANI_U8 *) pSirSmeDeauthRsp->peerMacAddr;
         vos_mem_copy( pBuf, pMlmDeauthReq->peerMacAddr, sizeof(tSirMacAddr));
 
-        pMsg = (tANI_U32*)pSirSmeDeauthRsp;
+        msg.type = eWNI_SME_DEAUTH_RSP;
+        msg.bodyptr = pSirSmeDeauthRsp;
 
-        limSendSmeDisassocDeauthNtf( pMac, eHAL_STATUS_SUCCESS,
-                                            (tANI_U32*) pMsg );
+        if (pMac->lim.sme_msg_callback)
+            pMac->lim.sme_msg_callback(pMac, &msg);
+        else
+            limLog(pMac, LOGE, FL("Sme msg callback is NULL"));
 
         return;
 
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
index 189b8dc..4357a1e 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
@@ -1323,6 +1323,8 @@
 
     if (pMac->lim.sme_msg_callback)
         pMac->lim.sme_msg_callback(pMac, &msg);
+    else
+        limLog(pMac, LOGE, FL("Sme msg callback is NULL"));
 // Enable this Compile flag to test the BT-AMP -AP assoc sequence
 #ifdef TEST_BTAMP_AP
 //tANI_U32 *pMsgBuf;
diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
index 69d186e..2949e60 100644
--- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c
@@ -1255,21 +1255,6 @@
 #endif
 } /*** end limSendSmeAuthRsp() ***/
 
-
-void limSendSmeDisassocDeauthNtf( tpAniSirGlobal pMac,
-                                eHalStatus status, tANI_U32 *pCtx )
-{
-    tSirMsgQ                mmhMsg;
-    tSirMsgQ                *pMsg = (tSirMsgQ*) pCtx;
-
-    mmhMsg.type = pMsg->type;
-    mmhMsg.bodyptr = pMsg;
-    mmhMsg.bodyval = 0;
-
-    MTRACE(macTrace(pMac, TRACE_CODE_TX_SME_MSG, NO_SESSION, mmhMsg.type));
-
-    limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
-}
 /**
  * limSendSmeDisassocNtf()
  *
@@ -1313,14 +1298,13 @@
     tSirSmeDisassocRsp      *pSirSmeDisassocRsp;
     tSirSmeDisassocInd      *pSirSmeDisassocInd;
     tSirSmeDisConDoneInd    *pSirSmeDisConDoneInd;
-    tANI_U32 *pMsg;
     bool failure = FALSE;
+    vos_msg_t               msg = {0};
 
     limLog(pMac, LOG1, FL("Disassoc Ntf with trigger : %d"
             "reasonCode: %d"),
             disassocTrigger,
             reasonCode);
-    
     switch (disassocTrigger)
     {
         case eLIM_HOST_DISASSOC:
@@ -1370,7 +1354,8 @@
             limDiagEventReport(pMac, WLAN_PE_DIAG_DISASSOC_RSP_EVENT,
                                       psessionEntry, (tANI_U16)reasonCode, 0);
 #endif
-            pMsg = (tANI_U32*) pSirSmeDisassocRsp;
+            msg.type = eWNI_SME_DISASSOC_RSP;
+            msg.bodyptr = pSirSmeDisassocRsp;
             break;
 
         case eLIM_PEER_ENTITY_DISASSOC:
@@ -1399,7 +1384,8 @@
             else
                 pSirSmeDisConDoneInd->reasonCode = reasonCode;
 
-            pMsg = (tANI_U32 *)pSirSmeDisConDoneInd;
+            msg.type = eWNI_SME_DISCONNECT_DONE_IND;
+            msg.bodyptr = pSirSmeDisConDoneInd;
             break;
 
         default:
@@ -1444,7 +1430,8 @@
             limDiagEventReport(pMac, WLAN_PE_DIAG_DISASSOC_IND_EVENT,
                                               psessionEntry, (tANI_U16)reasonCode, 0);
 #endif
-            pMsg = (tANI_U32*) pSirSmeDisassocInd;
+            msg.type = eWNI_SME_DISASSOC_IND;
+            msg.bodyptr = pSirSmeDisassocInd;
 
             break;
     }
@@ -1456,9 +1443,10 @@
     {
         peDeleteSession(pMac,psessionEntry);
     }
-    if (failure == FALSE)
-        limSendSmeDisassocDeauthNtf( pMac, eHAL_STATUS_SUCCESS,
-                                             (tANI_U32*) pMsg );
+    if (failure == FALSE && pMac->lim.sme_msg_callback)
+        pMac->lim.sme_msg_callback(pMac, &msg);
+    else if (failure == FALSE)
+        limLog(pMac, LOGE, FL("Sme msg callback is NULL"));
 } /*** end limSendSmeDisassocNtf() ***/
 
 
@@ -1777,7 +1765,7 @@
     tSirSmeDisConDoneInd *pSirSmeDisConDoneInd;
     tpPESession         psessionEntry;
     tANI_U8             sessionId;
-    tANI_U32            *pMsg;
+    vos_msg_t           msg = {0};
 
     psessionEntry = peFindSessionByBssid(pMac,peerMacAddr,&sessionId);  
     switch (deauthTrigger)
@@ -1812,7 +1800,8 @@
             limDiagEventReport(pMac, WLAN_PE_DIAG_DEAUTH_RSP_EVENT,
                                       psessionEntry, 0, (tANI_U16)reasonCode);
 #endif
-            pMsg = (tANI_U32*)pSirSmeDeauthRsp;
+            msg.type = eWNI_SME_DEAUTH_RSP;
+            msg.bodyptr = pSirSmeDeauthRsp;
 
             break;
 
@@ -1843,7 +1832,8 @@
             else
                 pSirSmeDisConDoneInd->reasonCode = reasonCode;
 
-            pMsg = (tANI_U32 *)pSirSmeDisConDoneInd;
+            msg.type = eWNI_SME_DISCONNECT_DONE_IND;
+            msg.bodyptr = pSirSmeDisConDoneInd;
             break;
 
         default:
@@ -1892,7 +1882,8 @@
             limDiagEventReport(pMac, WLAN_PE_DIAG_DEAUTH_IND_EVENT,
                                         psessionEntry, 0, (tANI_U16)reasonCode);
 #endif //FEATURE_WLAN_DIAG_SUPPORT
-            pMsg = (tANI_U32*)pSirSmeDeauthInd;
+            msg.type = eWNI_SME_DEAUTH_IND;
+            msg.bodyptr = pSirSmeDeauthInd;
 
             break;
     }
@@ -1903,9 +1894,10 @@
         peDeleteSession(pMac,psessionEntry);
     }   
 
-    limSendSmeDisassocDeauthNtf( pMac, eHAL_STATUS_SUCCESS,
-                                              (tANI_U32*) pMsg );
-
+    if (pMac->lim.sme_msg_callback)
+        pMac->lim.sme_msg_callback(pMac, &msg);
+    else
+        limLog(pMac, LOGE, FL("Sme msg callback is NULL"));
 } /*** end limSendSmeDeauthNtf() ***/
 
 
diff --git a/CORE/MAC/src/pe/lim/limTypes.h b/CORE/MAC/src/pe/lim/limTypes.h
index adbc842..6d0ca49 100644
--- a/CORE/MAC/src/pe/lim/limTypes.h
+++ b/CORE/MAC/src/pe/lim/limTypes.h
@@ -711,10 +711,7 @@
 void limSendNullDataFrame(tpAniSirGlobal, tpDphHashNode);
 void limSendDisassocMgmtFrame(tpAniSirGlobal, tANI_U16, tSirMacAddr, tpPESession, tANI_BOOLEAN waitForAck);
 void limSendDeauthMgmtFrame(tpAniSirGlobal, tANI_U16, tSirMacAddr, tpPESession, tANI_BOOLEAN waitForAck);
-void limSendSmeDisassocDeauthNtf( tpAniSirGlobal pMac,
-                                eHalStatus status, tANI_U32 *pCtx );
 void limDoSendAuthMgmtFrame(tpAniSirGlobal, tpPESession);
-
 void limContinueChannelScan(tpAniSirGlobal);
 tSirResultCodes limMlmAddBss(tpAniSirGlobal, tLimMlmStartReq *,tpPESession psessionEntry);
 
diff --git a/CORE/MAC/src/pe/sch/schBeaconProcess.c b/CORE/MAC/src/pe/sch/schBeaconProcess.c
index 19a9ec0..ef899bd 100644
--- a/CORE/MAC/src/pe/sch/schBeaconProcess.c
+++ b/CORE/MAC/src/pe/sch/schBeaconProcess.c
@@ -281,7 +281,10 @@
     //If station(STA/BT-STA/BT-AP/IBSS) mode, Always save the beacon in the scan results, if atleast one session is active
     //schBeaconProcessNoSession will be called only when there is atleast one session active, so not checking 
     //it again here.
-    limCheckAndAddBssDescription(pMac, pBeacon, pRxPacketInfo, eANI_BOOLEAN_FALSE, eANI_BOOLEAN_FALSE);
+    if (WDA_GET_OFFLOADSCANLEARN(pRxPacketInfo) || pMac->fScanOffload)
+        limCheckAndAddBssDescription(pMac, pBeacon, pRxPacketInfo,
+                                     eANI_BOOLEAN_FALSE, eANI_BOOLEAN_FALSE);
+
     return;  
 }
 
