diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h
index cc60eab..426492d 100644
--- a/core/hdd/inc/wlan_hdd_main.h
+++ b/core/hdd/inc/wlan_hdd_main.h
@@ -1844,7 +1844,8 @@
 struct hdd_adapter *hdd_get_adapter_by_macaddr(struct hdd_context *hdd_ctx,
 					  tSirMacAddr macAddr);
 
-int hdd_vdev_create(struct hdd_adapter *adapter);
+int hdd_vdev_create(struct hdd_adapter *adapter,
+		    csr_roam_completeCallback callback, void *ctx);
 int hdd_vdev_destroy(struct hdd_adapter *adapter);
 int hdd_vdev_ready(struct hdd_adapter *adapter);
 
@@ -2376,7 +2377,8 @@
 	return nl_srv_init(hdd_ctx->wiphy);
 }
 #endif
-QDF_STATUS hdd_sme_close_session_callback(void *pContext);
+QDF_STATUS hdd_sme_open_session_callback(uint8_t session_id);
+QDF_STATUS hdd_sme_close_session_callback(uint8_t session_id);
 
 int hdd_reassoc(struct hdd_adapter *adapter, const uint8_t *bssid,
 		uint8_t channel, const handoff_src src);
diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c
index 377cd3a..d1ad458 100644
--- a/core/hdd/src/wlan_hdd_assoc.c
+++ b/core/hdd/src/wlan_hdd_assoc.c
@@ -4423,12 +4423,6 @@
 				 adapter->session_id, roamStatus));
 
 	switch (roamStatus) {
-	case eCSR_ROAM_SESSION_OPENED:
-		set_bit(SME_SESSION_OPENED, &adapter->event_flags);
-		complete(&adapter->session_open_comp_var);
-		hdd_debug("session %d opened", adapter->session_id);
-		break;
-
 	/*
 	 * We did pre-auth,then we attempted a 11r or ese reassoc.
 	 * reassoc failed due to failure, timeout, reject from ap
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index 0736c6a..ae00474 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -13839,7 +13839,7 @@
 	wext->roamProfile.nAddIEScanLength =
 		adapter->scan_info.scan_add_ie.length;
 	if (type == NL80211_IFTYPE_ADHOC) {
-		status = hdd_init_station_mode(adapter);
+		status = hdd_start_station_adapter(adapter);
 		wext->roamProfile.BSSType = eCSR_BSS_TYPE_START_IBSS;
 		wext->roamProfile.phyMode =
 			hdd_cfg_xlate_to_csr_phy_mode(config->dot11Mode);
diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c
index 7a99f66..7f4314a 100644
--- a/core/hdd/src/wlan_hdd_hostapd.c
+++ b/core/hdd/src/wlan_hdd_hostapd.c
@@ -219,53 +219,40 @@
 	return 0;
 }
 
-struct sap_context *
-hdd_hostapd_init_sap_session(struct hdd_adapter *adapter,
-			     bool reinit)
+/**
+ * hdd_hostapd_init_sap_session() - To init the sap session completely
+ * @adapter: SAP/GO adapter
+ *
+ * This API will do
+ * 1) sap_init_ctx()
+ *
+ * Return: 0 if success else non-zero value.
+ */
+static struct sap_context *
+hdd_hostapd_init_sap_session(struct hdd_adapter *adapter)
 {
 	struct sap_context *sap_ctx;
-	struct hdd_context *hdd_ctx;
 	QDF_STATUS status;
 
 	if (!adapter) {
 		hdd_err("invalid adapter");
 		return NULL;
 	}
-	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 
-	if (reinit)
-		sap_ctx = adapter->session.ap.sap_context;
-	else
-		sap_ctx = sap_create_ctx();
+	sap_ctx = adapter->session.ap.sap_context;
 
 	if (!sap_ctx) {
 		hdd_err("can't allocate the sap_ctx");
 		return NULL;
 	}
-
-	/*
-	 * This is a special case of hdd_vdev_create(). In phase 4 convergence,
-	 * this special case will be properly addressed.
-	 */
-	if (hdd_objmgr_create_and_store_vdev(hdd_ctx->hdd_pdev, adapter)) {
-		hdd_err("failed to create objmgr vdev");
-		goto error;
-	}
 	status = sap_init_ctx(sap_ctx, adapter->device_mode,
 			       adapter->mac_addr.bytes,
 			       adapter->session_id);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		hdd_err("wlansap_start failed!! status: %d", status);
 		adapter->session.ap.sap_context = NULL;
-
-		/*
-		 * In this case, we need to cleanup in the same order as create.
-		 * See hdd_vdev_create() for more details.
-		 */
-		QDF_BUG(!hdd_objmgr_release_and_destroy_vdev(adapter));
 		goto error;
 	}
-
 	return sap_ctx;
 error:
 	wlansap_context_put(sap_ctx);
@@ -275,7 +262,17 @@
 	return NULL;
 }
 
-int hdd_hostapd_deinit_sap_session(struct hdd_adapter *adapter)
+/**
+ * hdd_hostapd_deinit_sap_session() - To de-init the sap session completely
+ * @adapter: SAP/GO adapter
+ *
+ * This API will do
+ * 1) sap_init_ctx()
+ * 2) sap_destroy_ctx()
+ *
+ * Return: 0 if success else non-zero value.
+ */
+static int hdd_hostapd_deinit_sap_session(struct hdd_adapter *adapter)
 {
 	struct sap_context *sap_ctx;
 	int status = 0;
@@ -295,23 +292,13 @@
 		hdd_err("Error stopping the sap session");
 		status = -EINVAL;
 	}
-	if (hdd_objmgr_destroy_vdev(adapter)) {
-		hdd_err("objmgr vdev destroy failed");
-		status = -EINVAL;
-	}
+
 	if (!QDF_IS_STATUS_SUCCESS(sap_destroy_ctx(sap_ctx))) {
 		hdd_err("Error closing the sap session");
 		status = -EINVAL;
 	}
 	adapter->session.ap.sap_context = NULL;
 
-	if (!wlan_hdd_validate_session_id(adapter->session_id)) {
-		if (hdd_objmgr_release_vdev(adapter)) {
-			hdd_err("objmgr vdev release failed");
-			status = -EINVAL;
-		}
-	}
-
 	if (!QDF_IS_STATUS_SUCCESS(status))
 		hdd_debug("sap has issue closing the session");
 	else
@@ -6164,24 +6151,13 @@
 
 	hdd_info("SSR in progress: %d", reinit);
 
-	/*
-	 * check if adapter is already open then most likely
-	 * SAP session is already initialized, no need to do anything
-	 * further
-	 */
-	if (test_bit(SME_SESSION_OPENED, &adapter->event_flags)) {
-		hdd_debug("sap context is not NULL, %pK",
-			  adapter->session.ap.sap_context);
-		return QDF_STATUS_SUCCESS;
-	}
-
-	sapContext = hdd_hostapd_init_sap_session(adapter, reinit);
+	sapContext = hdd_hostapd_init_sap_session(adapter);
 	if (!sapContext) {
 		hdd_err("Invalid sap_ctx");
-		return QDF_STATUS_E_FAULT;
+		goto error_release_vdev;
 	}
+
 	if (!reinit) {
-		adapter->session.ap.sap_context = sapContext;
 		adapter->session.ap.sap_config.channel =
 			hdd_ctx->acs_policy.acs_channel;
 		acs_dfs_mode = hdd_ctx->acs_policy.acs_dfs_mode;
@@ -6189,15 +6165,6 @@
 			wlan_hdd_get_dfs_mode(acs_dfs_mode);
 	}
 
-	/* set SME_SESSION_OPENED since sap session started */
-	set_bit(SME_SESSION_OPENED, &adapter->event_flags);
-
-	ret = hdd_vdev_ready(adapter);
-	if (ret) {
-		hdd_err("failed to raise vdev ready event: %d", ret);
-		goto error_init_ap_mode;
-	}
-
 	/* Allocate the Wireless Extensions state structure */
 	phostapdBuf = WLAN_HDD_GET_HOSTAP_STATE_PTR(adapter);
 
@@ -6209,37 +6176,37 @@
 	status = qdf_event_create(&phostapdBuf->qdf_event);
 	if (!QDF_IS_STATUS_SUCCESS(status)) {
 		hdd_err("Hostapd HDD qdf event init failed!!");
-		goto error_init_ap_mode;
+		goto error_release_sap_session;
 	}
 
 	status = qdf_event_create(&phostapdBuf->qdf_stop_bss_event);
 	if (!QDF_IS_STATUS_SUCCESS(status)) {
 		hdd_err("Hostapd HDD stop bss event init failed!!");
-		goto error_init_ap_mode;
+		goto error_release_sap_session;
 	}
 
 	status = qdf_event_create(&phostapdBuf->qdf_sta_disassoc_event);
 	if (!QDF_IS_STATUS_SUCCESS(status)) {
 		hdd_err("Hostapd HDD sta disassoc event init failed!!");
-		goto error_init_ap_mode;
+		goto error_release_sap_session;
 	}
 
-	init_completion(&adapter->session_close_comp_var);
-	init_completion(&adapter->session_open_comp_var);
 
 	/* Register as a wireless device */
 	dev->wireless_handlers = (struct iw_handler_def *)&hostapd_handler_def;
 
 	/* Initialize the data path module */
 	status = hdd_softap_init_tx_rx(adapter);
-	if (!QDF_IS_STATUS_SUCCESS(status))
+	if (!QDF_IS_STATUS_SUCCESS(status)) {
 		hdd_err("hdd_softap_init_tx_rx failed");
+		goto error_release_sap_session;
+	}
 
 	status = hdd_wmm_adapter_init(adapter);
 	if (!QDF_IS_STATUS_SUCCESS(status)) {
 		hdd_err("hdd_wmm_adapter_init() failed code: %08d [x%08x]",
 		       status, status);
-		goto error_wmm_init;
+		goto error_release_wmm;
 	}
 
 	set_bit(WMM_INIT_DONE, &adapter->event_flags);
@@ -6266,12 +6233,12 @@
 
 	return status;
 
-error_wmm_init:
+error_release_wmm:
 	hdd_softap_deinit_tx_rx(adapter);
-
-error_init_ap_mode:
+error_release_sap_session:
 	hdd_hostapd_deinit_sap_session(adapter);
-	QDF_BUG(!hdd_objmgr_release_vdev(adapter));
+error_release_vdev:
+	QDF_BUG(!hdd_vdev_destroy(adapter));
 
 	EXIT();
 	return status;
@@ -6306,7 +6273,6 @@
 	}
 	if (hdd_hostapd_deinit_sap_session(adapter))
 		hdd_err("Failed:hdd_hostapd_deinit_sap_session");
-	clear_bit(SME_SESSION_OPENED, &adapter->event_flags);
 
 	EXIT();
 }
@@ -6384,6 +6350,8 @@
 	adapter->wdev.wiphy = hdd_ctx->wiphy;
 	adapter->wdev.netdev = dev;
 	hdd_set_tso_flags(hdd_ctx, dev);
+	init_completion(&adapter->session_close_comp_var);
+	init_completion(&adapter->session_open_comp_var);
 	init_completion(&adapter->tx_action_cnf_event);
 	init_completion(&adapter->cancel_rem_on_chan_var);
 	init_completion(&adapter->rem_on_chan_ready_event);
@@ -8876,27 +8844,6 @@
 	EXIT();
 }
 
-/**
- * hdd_sap_destroy_events() - Destroy sap evets
- * @adapter: sap adapter context
- *
- * Return:   nothing
- */
-void hdd_sap_destroy_events(struct hdd_adapter *adapter)
-{
-	struct sap_context *sap_ctx;
-
-	ENTER();
-	sap_ctx = WLAN_HDD_GET_SAP_CTX_PTR(adapter);
-	if (!sap_ctx) {
-		hdd_err("invalid sap context");
-		return;
-	}
-
-	qdf_event_destroy(&sap_ctx->sap_session_opened_evt);
-	EXIT();
-}
-
 bool hdd_is_peer_associated(struct hdd_adapter *adapter,
 			    struct qdf_mac_addr *mac_addr)
 {
diff --git a/core/hdd/src/wlan_hdd_hostapd.h b/core/hdd/src/wlan_hdd_hostapd.h
index 65467ea..7693545 100644
--- a/core/hdd/src/wlan_hdd_hostapd.h
+++ b/core/hdd/src/wlan_hdd_hostapd.h
@@ -122,30 +122,6 @@
 			 bool *pMFPCapable,
 			 bool *pMFPRequired,
 			 uint16_t gen_ie_len, uint8_t *gen_ie);
-/**
- * hdd_hostapd_deinit_sap_session() - To de-init the sap session completely
- * @adapter: SAP/GO adapter
- *
- * This API will do
- * 1) wlansap_stop(), wlansap_close()
- * 2) destroys and releases the vdev objects
- *
- * Return: 0 if success else non-zero value.
- */
-int hdd_hostapd_deinit_sap_session(struct hdd_adapter *adapter);
-
-/**
- * hdd_hostapd_init_sap_session() - To init the sap session completely
- * @adapter: SAP/GO adapter
- *
- * This API will do
- * 1) sap_create_ctx(), wlansap_start()
- * 2) creates and stores the vdev objects
- *
- * Return: 0 if success else non-zero value.
- */
-struct sap_context *
-hdd_hostapd_init_sap_session(struct hdd_adapter *adapter, bool reinit);
 
 QDF_STATUS hdd_hostapd_sap_event_cb(tpSap_Event pSapEvent,
 				    void *usrDataForCallback);
@@ -170,8 +146,7 @@
  * SAP adapter related params.
  */
 void hdd_deinit_ap_mode(struct hdd_context *hdd_ctx,
-		struct hdd_adapter *adapter,
-		bool rtnl_held);
+			struct hdd_adapter *adapter, bool rtnl_held);
 void hdd_set_ap_ops(struct net_device *dev);
 /**
  * hdd_sap_create_ctx() - Wrapper API to create SAP context
@@ -231,5 +206,4 @@
 			       struct hdd_adapter *adapter);
 
 void hdd_sap_indicate_disconnect_for_sta(struct hdd_adapter *adapter);
-void hdd_sap_destroy_events(struct hdd_adapter *adapter);
 #endif /* end #if !defined(WLAN_HDD_HOSTAPD_H) */
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index fa44b76..cc18dee 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -3257,10 +3257,41 @@
 	return QDF_STATUS_SUCCESS;
 }
 
-QDF_STATUS hdd_sme_close_session_callback(void *pContext)
+QDF_STATUS hdd_sme_open_session_callback(uint8_t session_id)
 {
-	struct hdd_adapter *adapter = pContext;
+	struct hdd_adapter *adapter;
+	struct hdd_context *hdd_ctx;
 
+	hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
+	if (!hdd_ctx) {
+		hdd_err("Invalid HDD_CTX");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	adapter = hdd_get_adapter_by_sme_session_id(hdd_ctx, session_id);
+	if (NULL == adapter) {
+		hdd_err("NULL adapter");
+		return QDF_STATUS_E_INVAL;
+	}
+	set_bit(SME_SESSION_OPENED, &adapter->event_flags);
+	complete(&adapter->session_open_comp_var);
+	hdd_debug("session %d opened", adapter->session_id);
+
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS hdd_sme_close_session_callback(uint8_t session_id)
+{
+	struct hdd_adapter *adapter;
+	struct hdd_context *hdd_ctx;
+
+	hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
+	if (!hdd_ctx) {
+		hdd_err("Invalid HDD_CTX");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	adapter = hdd_get_adapter_by_sme_session_id(hdd_ctx, session_id);
 	if (NULL == adapter) {
 		hdd_err("NULL adapter");
 		return QDF_STATUS_E_INVAL;
@@ -3332,14 +3363,17 @@
 	 * In SSR case, there is no need to destroy vdev in firmware since
 	 * it has already asserted. vdev can be released directly.
 	 */
-	if (cds_is_driver_recovering())
+	if (cds_is_driver_recovering()) {
+		hdd_debug("SSR: silently release the vdev for session-id: %d",
+			  adapter->session_id);
+		clear_bit(SME_SESSION_OPENED, &adapter->event_flags);
 		goto release_vdev;
+	}
 
 	/* close sme session (destroy vdev in firmware via legacy API) */
 	INIT_COMPLETION(adapter->session_close_comp_var);
 	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
-	status = sme_close_session(hdd_ctx->hHal, adapter->session_id,
-				   hdd_sme_close_session_callback, adapter);
+	status = sme_close_session(hdd_ctx->hHal, adapter->session_id);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		hdd_err("failed to close sme session: %d", status);
 		return qdf_status_to_os_return(status);
@@ -3375,16 +3409,14 @@
 	return 0;
 }
 
-int hdd_vdev_create(struct hdd_adapter *adapter)
+static int hdd_set_sme_session_param(struct hdd_adapter *adapter,
+			struct sme_session_params *session_param,
+			csr_roam_completeCallback callback,
+			void *callback_ctx)
 {
-	QDF_STATUS status;
-	int errno;
-	struct hdd_context *hdd_ctx;
 	uint32_t type;
 	uint32_t sub_type;
-	unsigned long rc;
-
-	hdd_info("creating new vdev");
+	QDF_STATUS status;
 
 	/* determine vdev (sub)type */
 	status = cds_get_vdev_types(adapter->device_mode, &type, &sub_type);
@@ -3392,6 +3424,28 @@
 		hdd_err("failed to get vdev type: %d", status);
 		return qdf_status_to_os_return(status);
 	}
+	session_param->sme_session_id = adapter->session_id;
+	session_param->self_mac_addr = (uint8_t *)&adapter->mac_addr;
+	session_param->type_of_persona = type;
+	session_param->subtype_of_persona = sub_type;
+	session_param->session_open_cb = hdd_sme_open_session_callback;
+	session_param->session_close_cb = hdd_sme_close_session_callback;
+	session_param->callback = callback;
+	session_param->callback_ctx = callback_ctx;
+
+	return 0;
+}
+
+int hdd_vdev_create(struct hdd_adapter *adapter,
+		    csr_roam_completeCallback callback, void *ctx)
+{
+	QDF_STATUS status;
+	int errno;
+	struct hdd_context *hdd_ctx;
+	struct sme_session_params sme_session_params = {0};
+	unsigned long rc;
+
+	hdd_info("creating new vdev");
 
 	/* do vdev create via objmgr */
 	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
@@ -3403,9 +3457,14 @@
 
 	/* Open a SME session (prepare vdev in firmware via legacy API) */
 	INIT_COMPLETION(adapter->session_open_comp_var);
-	status = sme_open_session(hdd_ctx->hHal, hdd_sme_roam_callback, adapter,
-				  (uint8_t *)&adapter->mac_addr,
-				  adapter->session_id, type, sub_type);
+	errno = hdd_set_sme_session_param(adapter, &sme_session_params,
+					  callback, ctx);
+	if (errno) {
+		hdd_err("failed to populating SME params");
+		goto objmgr_vdev_destroy_procedure;
+	}
+
+	status = sme_open_session(hdd_ctx->hHal, &sme_session_params);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		hdd_err("failed to open sme session: %d", status);
 		errno = qdf_status_to_os_return(status);
@@ -3457,12 +3516,6 @@
 	QDF_STATUS status;
 	int ret_val;
 
-	ret_val = hdd_vdev_create(adapter);
-	if (ret_val) {
-		hdd_err("failed to create vdev: %d", ret_val);
-		return QDF_STATUS_E_FAILURE;
-	}
-
 	hdd_ctx = WLAN_HDD_GET_CTX(adapter);
 	sme_set_curr_device_mode(hdd_ctx->hHal, adapter->device_mode);
 	sme_set_pdev_ht_vht_ies(hdd_ctx->hHal, hdd_ctx->config->enable2x2);
@@ -3575,10 +3628,12 @@
 		clear_bit(WMM_INIT_DONE, &adapter->event_flags);
 	}
 
+
 	EXIT();
 }
 
-void hdd_deinit_adapter(struct hdd_context *hdd_ctx, struct hdd_adapter *adapter,
+void hdd_deinit_adapter(struct hdd_context *hdd_ctx,
+			struct hdd_adapter *adapter,
 			bool rtnl_held)
 {
 	ENTER();
@@ -3587,6 +3642,8 @@
 	case QDF_STA_MODE:
 	case QDF_P2P_CLIENT_MODE:
 	case QDF_P2P_DEVICE_MODE:
+	case QDF_IBSS_MODE:
+	case QDF_NDI_MODE:
 	{
 		hdd_deinit_station_mode(hdd_ctx, adapter, rtnl_held);
 		break;
@@ -4008,10 +4065,8 @@
 			  hdd_ipv6_notifier_work_queue);
 #endif
 		status = hdd_register_interface(adapter, rtnl_held);
-		if (QDF_STATUS_SUCCESS != status) {
-			hdd_deinit_adapter(hdd_ctx, adapter, rtnl_held);
+		if (QDF_STATUS_SUCCESS != status)
 			goto err_deinit_adapter_runtime_pm;
-		}
 
 		/* Stop the Interface TX queue. */
 		hdd_debug("Disabling queues");
@@ -4046,10 +4101,9 @@
 		adapter->device_mode = session_type;
 
 		status = hdd_register_interface(adapter, rtnl_held);
-		if (QDF_STATUS_SUCCESS != status) {
-			hdd_deinit_adapter(hdd_ctx, adapter, rtnl_held);
+		if (QDF_STATUS_SUCCESS != status)
 			goto err_free_netdev;
-		}
+
 		hdd_debug("Disabling queues");
 		wlan_hdd_netif_queue_control(adapter,
 					WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER,
@@ -4082,10 +4136,9 @@
 		adapter->wdev.iftype = NL80211_IFTYPE_STATION;
 		adapter->device_mode = session_type;
 		status = hdd_register_interface(adapter, rtnl_held);
-		if (QDF_STATUS_SUCCESS != status) {
-			hdd_deinit_adapter(hdd_ctx, adapter, rtnl_held);
+		if (QDF_STATUS_SUCCESS != status)
 			goto err_deinit_adapter_runtime_pm;
-		}
+
 		/* Stop the Interface TX queue. */
 		hdd_debug("Disabling queues");
 		wlan_hdd_netif_queue_control(adapter,
@@ -4396,6 +4449,8 @@
 				hdd_err("Error: Can't disconnect adapter");
 				return QDF_STATUS_E_FAILURE;
 			}
+			hdd_debug("Destroying adapter: %d",
+				  adapter->session_id);
 			hdd_vdev_destroy(adapter);
 		}
 		break;
@@ -4484,10 +4539,6 @@
 		if (policy_mgr_is_dnsc_set(adapter->hdd_vdev))
 			wlan_hdd_send_avoid_freq_for_dnbs(hdd_ctx, 0);
 
-		if (true == bCloseSession)
-			hdd_vdev_destroy(adapter);
-		mutex_unlock(&hdd_ctx->sap_lock);
-
 #ifdef WLAN_OPEN_SOURCE
 		cancel_work_sync(&adapter->ipv4_notifier_work);
 #endif
@@ -4497,6 +4548,12 @@
 		cancel_work_sync(&adapter->ipv6_notifier_work);
 #endif
 #endif
+		if (true == bCloseSession) {
+			hdd_debug("Destroying adapter: %d",
+				  adapter->session_id);
+			hdd_vdev_destroy(adapter);
+		}
+		mutex_unlock(&hdd_ctx->sap_lock);
 		break;
 	case QDF_OCB_MODE:
 		cdp_clear_peer(cds_get_context(QDF_MODULE_ID_SOC),
@@ -4618,10 +4675,8 @@
 						     WLAN_STOP_ALL_NETIF_QUEUE,
 						     WLAN_CONTROL_PATH);
 			if (test_bit(SOFTAP_BSS_STARTED,
-						&adapter->event_flags)) {
+						&adapter->event_flags))
 				hdd_sap_indicate_disconnect_for_sta(adapter);
-				hdd_sap_destroy_events(adapter);
-			}
 			clear_bit(SOFTAP_BSS_STARTED, &adapter->event_flags);
 		} else {
 			wlan_hdd_netif_queue_control(adapter,
@@ -5234,7 +5289,7 @@
 			connState = (WLAN_HDD_GET_STATION_CTX_PTR(adapter))
 					->conn_info.connState;
 
-			hdd_init_station_mode(adapter);
+			hdd_start_station_adapter(adapter);
 			/* Open the gates for HDD to receive Wext commands */
 			adapter->is_link_up_service_needed = false;
 
@@ -5280,7 +5335,7 @@
 
 		case QDF_SAP_MODE:
 			if (hdd_ctx->config->sap_internal_restart)
-				hdd_init_ap_mode(adapter, true);
+				hdd_start_ap_adapter(adapter);
 
 			break;
 
@@ -5297,7 +5352,7 @@
 #endif
 			break;
 		case QDF_MONITOR_MODE:
-			hdd_init_station_mode(adapter);
+			hdd_start_station_adapter(adapter);
 			hdd_set_mon_rx_cb(adapter->dev);
 			wlan_hdd_set_mon_chan(adapter, adapter->mon_chan,
 					      adapter->mon_bandwidth);
@@ -8029,9 +8084,20 @@
 int hdd_start_station_adapter(struct hdd_adapter *adapter)
 {
 	QDF_STATUS status;
+	int ret;
 
 	ENTER_DEV(adapter->dev);
+	if (test_bit(SME_SESSION_OPENED, &adapter->event_flags)) {
+		hdd_err("session is already opened, %d",
+			adapter->session_id);
+		return qdf_status_to_os_return(QDF_STATUS_SUCCESS);
+	}
 
+	ret = hdd_vdev_create(adapter, hdd_sme_roam_callback, adapter);
+	if (ret) {
+		hdd_err("failed to create vdev: %d", ret);
+		return ret;
+	}
 	status = hdd_init_station_mode(adapter);
 
 	if (QDF_STATUS_SUCCESS != status) {
@@ -8059,9 +8125,33 @@
 int hdd_start_ap_adapter(struct hdd_adapter *adapter)
 {
 	QDF_STATUS status;
+	int ret;
 
 	ENTER();
 
+	if (test_bit(SME_SESSION_OPENED, &adapter->event_flags)) {
+		hdd_err("session is already opened, %d",
+			adapter->session_id);
+		return qdf_status_to_os_return(QDF_STATUS_SUCCESS);
+	}
+	/*
+	 * create sap context first and then create vdev as
+	 * while creating the vdev, driver needs to register
+	 * SAP callback and that callback uses sap context
+	 */
+	if (!adapter->session.ap.sap_context &&
+	    !hdd_sap_create_ctx(adapter)) {
+		hdd_err("sap creation failed");
+		return qdf_status_to_os_return(QDF_STATUS_E_FAILURE);
+	}
+
+	ret = hdd_vdev_create(adapter, wlansap_roam_callback,
+			      adapter->session.ap.sap_context);
+	if (ret) {
+		hdd_err("failed to create vdev, status:%d", ret);
+		hdd_sap_destroy_ctx(adapter);
+		return ret;
+	}
 	status = hdd_init_ap_mode(adapter, false);
 
 	if (QDF_STATUS_SUCCESS != status) {
diff --git a/core/hdd/src/wlan_hdd_nan_datapath.c b/core/hdd/src/wlan_hdd_nan_datapath.c
index 808330d..e97d2c9 100644
--- a/core/hdd/src/wlan_hdd_nan_datapath.c
+++ b/core/hdd/src/wlan_hdd_nan_datapath.c
@@ -2114,7 +2114,7 @@
 	QDF_STATUS status;
 	int32_t ret_val = 0;
 
-	ret_val = hdd_vdev_create(adapter);
+	ret_val = hdd_vdev_create(adapter, hdd_sme_roam_callback, adapter);
 	if (ret_val) {
 		hdd_err("failed to create vdev: %d", ret_val);
 		return ret_val;
