diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h
index 944bbde..3351d79 100644
--- a/CORE/HDD/inc/wlan_hdd_main.h
+++ b/CORE/HDD/inc/wlan_hdd_main.h
@@ -638,6 +638,17 @@
 
 }hdd_scaninfo_t;
 
+#define WLAN_HDD_MAX_MC_ADDR_LIST 10
+
+#ifdef WLAN_FEATURE_PACKET_FILTERING
+typedef struct multicast_addr_list
+{
+   v_U8_t isFilterApplied;
+   v_U8_t mc_cnt;
+   v_U8_t addr[WLAN_HDD_MAX_MC_ADDR_LIST][ETH_ALEN];
+} t_multicast_add_list;
+#endif
+
 #define WLAN_HDD_ADAPTER_MAGIC 0x574c414e //ASCII "WLAN"
 struct hdd_adapter_s
 {
@@ -765,6 +776,10 @@
    hdd_cfg80211_state_t cfg80211State;
 #endif
 
+#ifdef WLAN_FEATURE_PACKET_FILTERING
+   t_multicast_add_list mc_addr_list;
+#endif
+
    //Magic cookie for adapter sanity verification
    v_U32_t magic;
    v_BOOL_t higherDtimTransition;
@@ -785,7 +800,6 @@
 #define WLAN_HDD_GET_HAL_CTX(pAdapter)  (((hdd_context_t*)(pAdapter->pHddCtx))->hHal)
 #define WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter) (&(pAdapter)->sessionCtx.ap.HostapdState)
 #define WLAN_HDD_GET_CFG_STATE_PTR(pAdapter)  (&(pAdapter)->cfg80211State)
-#define WLAN_HDD_MAX_MC_ADDR_LIST 10
 
 typedef struct hdd_adapter_list_node
 {
@@ -800,15 +814,6 @@
    int total_len;
 }hdd_priv_data_t;
 
-#ifdef WLAN_FEATURE_PACKET_FILTERING
-typedef struct multicast_addr_list
-{
-   v_U8_t isFilterApplied;
-   v_U8_t mc_cnt;
-   v_U8_t addr[WLAN_HDD_MAX_MC_ADDR_LIST][ETH_ALEN];
-} t_multicast_add_list;
-#endif
-
 /** Adapter stucture definition */
 
 struct hdd_context_s
@@ -929,9 +934,6 @@
 
    /* Thermal mitigation information */
    hdd_thermal_mitigation_info_t tmInfo;
-#ifdef WLAN_FEATURE_PACKET_FILTERING
-   t_multicast_add_list mc_addr_list;
-#endif
 
 #ifdef WLAN_OPEN_SOURCE
 #ifdef WLAN_FEATURE_HOLD_RX_WAKELOCK
diff --git a/CORE/HDD/inc/wlan_hdd_wext.h b/CORE/HDD/inc/wlan_hdd_wext.h
index 8b70b04..e9538d9 100644
--- a/CORE/HDD/inc/wlan_hdd_wext.h
+++ b/CORE/HDD/inc/wlan_hdd_wext.h
@@ -423,5 +423,9 @@
 VOS_STATUS iw_set_tdls_params(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra, int nOffset);
 #endif
 
+#ifdef WLAN_FEATURE_PACKET_FILTERING
+void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set);
+#endif
+
 #endif // __WEXT_IW_H__
 
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index f756429..b14fd4f 100755
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -122,10 +122,6 @@
 
 #define BEACON_FRAME_IES_OFFSET 12
 
-#ifdef WLAN_FEATURE_PACKET_FILTERING
-extern void wlan_hdd_set_mc_addr_list(hdd_context_t *pHddCtx, v_U8_t set, v_U8_t sessionId);
-#endif
-
 void hdd_ResetCountryCodeAfterDisAssoc(hdd_adapter_t *pAdapter);
 
 v_VOID_t hdd_connSetConnectionState( hdd_station_ctx_t *pHddStaCtx,
@@ -2198,11 +2194,11 @@
                 if (pHddCtx->cfg_ini->isMcAddrListFilter)
                 {
                     /*Multicast addr filtering is enabled*/
-                    if(pHddCtx->mc_addr_list.isFilterApplied)
+                    if (pAdapter->mc_addr_list.isFilterApplied)
                     {
                         /*Filter applied during suspend mode*/
                         /*Clear it here*/
-                        wlan_hdd_set_mc_addr_list(pHddCtx, FALSE, pAdapter->sessionId);
+                        wlan_hdd_set_mc_addr_list(pAdapter, FALSE);
                     }
                 }
 #endif
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index fdbeac8..d70df48 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -131,9 +131,6 @@
 extern tVOS_CON_MODE hdd_get_conparam ( void );
 #endif
 
-#ifdef WLAN_FEATURE_PACKET_FILTERING
-extern void wlan_hdd_set_mc_addr_list(hdd_context_t *pHddCtx, v_U8_t set, v_U8_t sessionId);
-#endif
 static struct timer_list ssr_timer;
 static bool ssr_timer_started;
 
@@ -893,12 +890,12 @@
            /*Multicast addr list filter is enabled during suspend*/
            if (((pAdapter->device_mode == WLAN_HDD_INFRA_STATION) || 
                     (pAdapter->device_mode == WLAN_HDD_P2P_CLIENT))
-                 && pHddCtx->mc_addr_list.mc_cnt
+                 && pAdapter->mc_addr_list.mc_cnt
                  && (eConnectionState_Associated == 
                     (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState))
            {
               /*set the filter*/
-              wlan_hdd_set_mc_addr_list(pHddCtx, TRUE, pAdapter->sessionId);
+              wlan_hdd_set_mc_addr_list(pAdapter, TRUE);
            }
         }
 #endif
@@ -911,7 +908,7 @@
     }
 }
 
-static void hdd_conf_resume_ind(hdd_adapter_t *pAdapter, v_U8_t sessionId)
+static void hdd_conf_resume_ind(hdd_adapter_t *pAdapter)
 {
     VOS_STATUS vstatus;
     hdd_context_t* pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
@@ -925,39 +922,43 @@
         return;
     }
 
-    hddLog(VOS_TRACE_LEVEL_INFO, 
+    hddLog(VOS_TRACE_LEVEL_INFO,
       "%s: send wlan resume indication", __func__);
 
-    if(pHddCtx->cfg_ini->fhostArpOffload)
+    if (pHddCtx->hdd_mcastbcast_filter_set == TRUE)
     {
-        vstatus = hdd_conf_hostarpoffload(pAdapter, FALSE);
-        if (!VOS_IS_STATUS_SUCCESS(vstatus))
+        if (pHddCtx->cfg_ini->fhostArpOffload)
         {
-            hddLog(VOS_TRACE_LEVEL_INFO, "%s:Failed to disable ARPOFFLOAD "
-                  "Feature %d\n", __func__, vstatus);
+            vstatus = hdd_conf_hostarpoffload(pAdapter, FALSE);
+            if (!VOS_IS_STATUS_SUCCESS(vstatus))
+            {
+                hddLog(VOS_TRACE_LEVEL_INFO, "%s:Failed to disable ARPOFFLOAD "
+                      "Feature %d\n", __func__, vstatus);
+            }
         }
+        if (pHddCtx->dynamic_mcbc_filter.enableSuspend)
+        {
+            wlanResumeParam->configuredMcstBcstFilterSetting =
+                                   pHddCtx->dynamic_mcbc_filter.mcBcFilterSuspend;
+        }
+        else
+        {
+            wlanResumeParam->configuredMcstBcstFilterSetting =
+                                        pHddCtx->cfg_ini->mcastBcastFilterSetting;
+        }
+        sme_ConfigureResumeReq(pHddCtx->hHal, wlanResumeParam);
+        pHddCtx->hdd_mcastbcast_filter_set = FALSE;
     }
-    if (pHddCtx->dynamic_mcbc_filter.enableSuspend)
-    {
-        wlanResumeParam->configuredMcstBcstFilterSetting = 
-                               pHddCtx->dynamic_mcbc_filter.mcBcFilterSuspend;
-    }
-    else
-    {
-        wlanResumeParam->configuredMcstBcstFilterSetting = 
-                                    pHddCtx->cfg_ini->mcastBcastFilterSetting;
-    }
-    sme_ConfigureResumeReq(pHddCtx->hHal, wlanResumeParam);
 
 #ifdef WLAN_FEATURE_PACKET_FILTERING    
     if (pHddCtx->cfg_ini->isMcAddrListFilter)
     {
-       /*Mutlicast addr filtering is enabled*/
-       if(pHddCtx->mc_addr_list.isFilterApplied)
+       /*Multicast addr filtering is enabled*/
+       if (pAdapter->mc_addr_list.isFilterApplied)
        {
           /*Filter applied during suspend mode*/
           /*Clear it here*/
-          wlan_hdd_set_mc_addr_list(pHddCtx, FALSE, sessionId);
+          wlan_hdd_set_mc_addr_list(pAdapter, FALSE);
        }
     }
 #endif
@@ -1114,19 +1115,8 @@
       }
    }
 
-#ifdef FEATURE_WLAN_INTEGRATED_SOC
    /*Suspend notification sent down to driver*/
-      hdd_conf_suspend_ind(pHddCtx, pAdapter);
-#else
-      if(pHddCtx->cfg_ini->nEnableSuspend == WLAN_MAP_SUSPEND_TO_MCAST_BCAST_FILTER) {
-         if(eConnectionState_Associated == 
-            (WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))->conn_info.connState) {
-            hdd_conf_mcastbcast_filter(pHddCtx, TRUE);
-            halPSAppsCpuWakeupState(vos_get_context(VOS_MODULE_ID_SME,
-                                  pHddCtx->pvosContext), FALSE);
-         }
-      } 
-#endif
+   hdd_conf_suspend_ind(pHddCtx, pAdapter);
    status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext );
    pAdapterNode = pNext;
   }
@@ -1347,17 +1337,7 @@
          }
       }
 
-         if(pHddCtx->hdd_mcastbcast_filter_set == TRUE) {
-#ifdef FEATURE_WLAN_INTEGRATED_SOC
-           hdd_conf_resume_ind(pAdapter, pAdapter->sessionId);
-#else
-                  hdd_conf_mcastbcast_filter(pHddCtx, FALSE);
-                              pHddCtx->hdd_mcastbcast_filter_set = FALSE;
-                  halPSAppsCpuWakeupState(vos_get_context(VOS_MODULE_ID_SME,
-                                          pHddCtx->pvosContext), TRUE);
-#endif
-           pHddCtx->hdd_mcastbcast_filter_set = FALSE;
-      }
+      hdd_conf_resume_ind(pAdapter);
       status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext );
       pAdapterNode = pNext;
    }
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index b935fd2..a266337 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -3090,15 +3090,14 @@
 static void hdd_set_multicast_list(struct net_device *dev)
 {
    hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
-   hdd_context_t *pHddCtx;
    int mc_count;
    int i = 0;
    struct netdev_hw_addr *ha;
-   pHddCtx = (hdd_context_t*)pAdapter->pHddCtx;
-   if (NULL == pHddCtx)
+
+   if (NULL == pAdapter)
    {
       hddLog(VOS_TRACE_LEVEL_ERROR,
-            "%s: HDD context is Null", __func__);
+            "%s: Adapter context is Null", __func__);
       return;
    }
 
@@ -3106,7 +3105,7 @@
    {
       hddLog(VOS_TRACE_LEVEL_INFO,
             "%s: allow all multicast frames", __func__);
-      pHddCtx->mc_addr_list.mc_cnt = 0;
+      pAdapter->mc_addr_list.mc_cnt = 0;
    }
    else 
    {
@@ -3117,22 +3116,20 @@
       {
          hddLog(VOS_TRACE_LEVEL_INFO,
                "%s: No free filter available; allow all multicast frames", __func__);
-         pHddCtx->mc_addr_list.mc_cnt = 0;
+         pAdapter->mc_addr_list.mc_cnt = 0;
          return;
       }
 
-      pHddCtx->mc_addr_list.mc_cnt = mc_count;
+      pAdapter->mc_addr_list.mc_cnt = mc_count;
 
       netdev_for_each_mc_addr(ha, dev) {
          if (i == mc_count)
             break;
-         memset(&(pHddCtx->mc_addr_list.addr[i][0]), 0, ETH_ALEN);
-         memcpy(&(pHddCtx->mc_addr_list.addr[i][0]), ha->addr, ETH_ALEN);
-         hddLog(VOS_TRACE_LEVEL_INFO, "\n%s: mlist[%d] = %02x:%02x:%02x:%02x:%02x:%02x", 
+         memset(&(pAdapter->mc_addr_list.addr[i][0]), 0, ETH_ALEN);
+         memcpy(&(pAdapter->mc_addr_list.addr[i][0]), ha->addr, ETH_ALEN);
+         hddLog(VOS_TRACE_LEVEL_INFO, "\n%s: mlist[%d] = "MAC_ADDRESS_STR,
                __func__, i, 
-               pHddCtx->mc_addr_list.addr[i][0], pHddCtx->mc_addr_list.addr[i][1], 
-               pHddCtx->mc_addr_list.addr[i][2], pHddCtx->mc_addr_list.addr[i][3], 
-               pHddCtx->mc_addr_list.addr[i][4], pHddCtx->mc_addr_list.addr[i][5]);
+               MAC_ADDR_ARRAY(pAdapter->mc_addr_list.addr[i]));
          i++;
       }
    }
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 43141a9..40cfd89 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -368,7 +368,6 @@
 #ifdef WLAN_FEATURE_PACKET_FILTERING
 int wlan_hdd_set_filter(hdd_context_t *pHddCtx, tpPacketFilterCfg pRequest, 
                            v_U8_t sessionId);
-void wlan_hdd_set_mc_addr_list(hdd_context_t *pHddCtx, v_U8_t set, v_U8_t sessionId);
 #endif
 
 /**---------------------------------------------------------------------------
@@ -5341,16 +5340,17 @@
     return 0;
 }
 
-void wlan_hdd_set_mc_addr_list(hdd_context_t *pHddCtx, v_U8_t set, v_U8_t sessionId)
+void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set)
 {
-    v_U8_t filterAction = 0; 
-    tPacketFilterCfg request = {0}; 
-    v_U8_t i = 0;
+    v_U8_t filterAction;
+    tPacketFilterCfg request;
+    v_U8_t i;
+    hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
 
     filterAction = set ? HDD_RCV_FILTER_SET : HDD_RCV_FILTER_CLEAR;
 
     /*set mulitcast addr list*/
-    for (i = 0; i < pHddCtx->mc_addr_list.mc_cnt; i++)
+    for (i = 0; i < pAdapter->mc_addr_list.mc_cnt; i++)
     {
         memset(&request, 0, sizeof (tPacketFilterCfg));
         request.filterAction = filterAction;
@@ -5363,22 +5363,17 @@
             request.paramsData[0].dataOffset = WLAN_HDD_80211_FRM_DA_OFFSET;
             request.paramsData[0].dataLength = ETH_ALEN;
             memcpy(&(request.paramsData[0].compareData[0]), 
-                    &(pHddCtx->mc_addr_list.addr[i][0]), ETH_ALEN);
+                    &(pAdapter->mc_addr_list.addr[i][0]), ETH_ALEN);
             /*set mulitcast filters*/
             hddLog(VOS_TRACE_LEVEL_INFO, 
                     "%s: %s multicast filter: addr =" 
-                    "%02x:%02x:%02x:%02x:%02x:%02x", 
+                    MAC_ADDRESS_STR,
                     __func__, set ? "setting" : "clearing", 
-                    request.paramsData[0].compareData[0], 
-                    request.paramsData[0].compareData[1],
-                    request.paramsData[0].compareData[2], 
-                    request.paramsData[0].compareData[3],
-                    request.paramsData[0].compareData[4], 
-                    request.paramsData[0].compareData[5]);
+                    MAC_ADDR_ARRAY(request.paramsData[0].compareData));
         }
-        wlan_hdd_set_filter(pHddCtx, &request, sessionId);
+        wlan_hdd_set_filter(pHddCtx, &request, pAdapter->sessionId);
     }
-    pHddCtx->mc_addr_list.isFilterApplied = set ? TRUE : FALSE;
+    pAdapter->mc_addr_list.isFilterApplied = set ? TRUE : FALSE;
 }
 
 static int iw_set_packet_filter_params(struct net_device *dev, struct iw_request_info *info,
