diff --git a/src/logan_wifi/wifi_hal.c b/src/logan_wifi/wifi_hal.c
index f8297d0..e75c458 100644
--- a/src/logan_wifi/wifi_hal.c
+++ b/src/logan_wifi/wifi_hal.c
@@ -2611,9 +2611,10 @@
 	char config_file[MAX_SUB_CMD_SIZE] = {0};
 	char ssid[MAX_BUF_SIZE] = {0};
 	char interface[32] = {0};
+	char bridge[32] = {0};
 	char ret_buf[MAX_BUF_SIZE] = {0};
 	char psk_file[64] = {0};
-	struct params params[3];
+	struct params params[4];
 
 	WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
 	for (radio_idx = 0; radio_idx < MAX_NUM_RADIOS; radio_idx++) {
@@ -2642,6 +2643,12 @@
 				return;
 			}
 
+			res = snprintf(bridge, sizeof(bridge), "brlan%d", bss_idx);
+			if (os_snprintf_error(sizeof(bridge), res)) {
+				wifi_debug(DEBUG_ERROR, "Unexpected snprintf fail\n");
+				return;
+			}
+
 			if (radio_idx == band_2_4) {
 				res = snprintf(interface, sizeof(interface), "%s%d", PREFIX_WIFI2G, bss_idx);
 				if (os_snprintf_error(sizeof(interface), res)) {
@@ -2675,8 +2682,10 @@
 			params[1].value = interface;
 			params[2].name = "wpa_psk_file";
 			params[2].value = psk_file;
+			params[3].name = "bridge";
+			params[3].value = bridge;
 
-			wifi_hostapdWrite(config_file, params, 3);
+			wifi_hostapdWrite(config_file, params, sizeof(params) / sizeof(params[0]));
 		}
 	}
 	WIFI_ENTRY_EXIT_DEBUG("Exiting %s:%d\n",__func__, __LINE__);
@@ -20612,15 +20621,12 @@
 			continue;
 		}
 
-		strncpy(map->vap_array[i].bridge_name, BRIDGE_NAME,sizeof(map->vap_array[i].bridge_name) - 1);
-		map->vap_array[i].bridge_name[sizeof(map->vap_array[i].bridge_name) - 1] = '\0';
-
 		map->vap_array[i].vap_index = vap_index;
 
 		memset(buf, 0, sizeof(buf));
 		ret = wifi_getApName(vap_index, buf);
 		if (ret != RETURN_OK) {
-			printf("%s: wifi_getApName return error\n", __func__);
+			wifi_debug(DEBUG_ERROR,"wifi_getApName return error\n");
 			res = RETURN_ERR;
 			continue;
 		}
@@ -20634,7 +20640,7 @@
 		memset(buf, 0, sizeof(buf));
 		ret = wifi_getSSIDName(vap_index, buf);
 		if (ret != RETURN_OK) {
-			printf("%s: wifi_getSSIDName return error\n", __func__);
+			wifi_debug(DEBUG_ERROR, "wifi_getSSIDName return error\n");
 			res = RETURN_ERR;
 			continue;
 		}
@@ -20649,7 +20655,7 @@
 
 		ret = wifi_getApSsidAdvertisementEnable(vap_index, &enabled);
 		if (ret != RETURN_OK) {
-			printf("%s: wifi_getApSsidAdvertisementEnable return error\n", __func__);
+			wifi_debug(DEBUG_ERROR,"wifi_getApSsidAdvertisementEnable return error\n");
 			res = RETURN_ERR;
 			continue;
 		}
@@ -20657,7 +20663,7 @@
 
 		ret = wifi_getApMaxAssociatedDevices(vap_index, &output);
 		if (ret != RETURN_OK) {
-			printf("%s: wifi_getApMaxAssociatedDevices return error\n", __func__);
+			wifi_debug(DEBUG_ERROR, "wifi_getApMaxAssociatedDevices return error\n");
 			res = RETURN_ERR;
 			continue;
 		}
@@ -20665,7 +20671,7 @@
 
 		ret = wifi_getBSSTransitionActivation(vap_index, &enabled);
 		if (ret != RETURN_OK) {
-			printf("%s: wifi_getBSSTransitionActivation return error\n", __func__);
+			wifi_debug(DEBUG_ERROR, "wifi_getBSSTransitionActivation return error\n");
 			res = RETURN_ERR;
 			continue;
 		}
@@ -20673,7 +20679,7 @@
 
 		ret = wifi_getNeighborReportActivation(vap_index, &enabled);
 		if (ret != RETURN_OK) {
-			printf("%s: wifi_getNeighborReportActivation return error\n", __func__);
+			wifi_debug(DEBUG_ERROR, "wifi_getNeighborReportActivation return error\n");
 			res = RETURN_ERR;
 			continue;
 		}
@@ -20681,10 +20687,11 @@
 
 		ret = wifi_getApSecurity(vap_index, &security);
 		if (ret != RETURN_OK) {
-			printf("%s: wifi_getApSecurity return error\n", __func__);
+			wifi_debug(DEBUG_ERROR, "wifi_getApSecurity return error\n");
 			res = RETURN_ERR;
 			continue;
 		}
+		
 		map->vap_array[i].u.bss_info.security = security;
 
 		ret = wifi_getApMacAddressControlMode(vap_index, &mode);
@@ -20946,7 +20953,7 @@
 	unsigned char hostapd_if_restart;
 
 	WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
-	printf("Entering %s index = %d, map->num_vaps = %d\n", __func__, (int)index, map->num_vaps);
+	printf("Entering %s radio[%d], map->num_vaps = %d\n", __func__, (int)index, map->num_vaps);
 	for (i = 0; i < map->num_vaps; i++) {
 		hostapd_if_restart = 0;
 		multiple_set = TRUE;
@@ -20967,7 +20974,7 @@
 				wifi_setApEnable(vap_info->vap_index, TRUE);
 		}
 
-		wifi_debug(DEBUG_ERROR, "\nCreate VAP for ssid_index=%d (vap_num=%d)\n", vap_info->vap_index, i);
+		wifi_debug(DEBUG_ERROR, "\nCreate VAP for vap_info->vap_index=%d\n", vap_info->vap_index);
 
 		band_idx = radio_index_to_band(index);
 		res = snprintf(config_file, sizeof(config_file), "%s%d.conf", CONFIG_PREFIX, vap_info->vap_index);
@@ -21063,9 +21070,9 @@
 		}
 
 		if (getVapBridge(vap_info->vap_index, bridge_name, sizeof(bridge_name)) == RETURN_OK) {
-			if (strlen(bridge_name) != strlen(vap_info->bridge_name) ||
+			if ((strlen(vap_info->bridge_name) > 0) && (strlen(bridge_name) != strlen(vap_info->bridge_name) ||
 				(strlen(bridge_name) == strlen(vap_info->bridge_name) &&
-				strncmp(bridge_name, vap_info->bridge_name, strlen(bridge_name)))) {
+				strncmp(bridge_name, vap_info->bridge_name, strlen(bridge_name))))) {
 				hostapd_if_restart = 1;
 				setVapBridge(vap_info->vap_index, vap_info->bridge_name);
 			}
@@ -21754,6 +21761,7 @@
 	long int tmp;
 	bool set_sae = FALSE;
 	int res;
+	wifi_encryption_method_t wpa_pairwise = 0, rsn_pairwise = 0;
 
 	WIFI_ENTRY_EXIT_DEBUG("Inside %s:%d\n",__func__, __LINE__);
 	res = snprintf(config_file, sizeof(config_file), "%s%d.conf", CONFIG_PREFIX, ap_index);
@@ -21786,16 +21794,30 @@
 			security->mode = wifi_security_mode_enhanced_open;
 	}
 
-	wifi_hostapdRead(config_file,"wpa_pairwise",buf,sizeof(buf));
 	if (security->mode == wifi_security_mode_none)
 		security->encr = wifi_encryption_none;
 	else {
-		if (strcmp(buf, "TKIP") == 0)
-			security->encr = wifi_encryption_tkip;
-		else if (strcmp(buf, "CCMP") == 0)
-			security->encr = wifi_encryption_aes;
-		else
-			security->encr = wifi_encryption_aes_tkip;
+		wifi_hostapdRead(config_file,"wpa_pairwise",buf,sizeof(buf));
+		if (strlen(buf) > 0) {
+			if (strcmp(buf, "TKIP") == 0)
+				wpa_pairwise = wifi_encryption_tkip;
+			else if (strcmp(buf, "CCMP") == 0)
+				wpa_pairwise = wifi_encryption_aes;
+			else
+				wpa_pairwise = wifi_encryption_aes_tkip;
+		}
+
+		wifi_hostapdRead(config_file,"rsn_pairwise",buf,sizeof(buf));
+		if (strlen(buf) > 0) {
+			if (strcmp(buf, "TKIP") == 0)
+				rsn_pairwise = wifi_encryption_tkip;
+			else if (strcmp(buf, "CCMP") == 0)
+				rsn_pairwise = wifi_encryption_aes;
+			else
+				rsn_pairwise = wifi_encryption_aes_tkip;
+		}
+
+		security->encr = wpa_pairwise | rsn_pairwise;
 	}
 
 	if (security->mode != wifi_security_mode_none) {
