diff --git a/iopsys-brcm63xx-arm/base-files/lib/netifd/wireless/mac80211.sh b/iopsys-brcm63xx-arm/base-files/lib/netifd/wireless/mac80211.sh
index a577f8d3522ba986084df9b33a6372b923e53245..e8baaa42dd74829e086342685533cc43e2a4ea0e 100755
--- a/iopsys-brcm63xx-arm/base-files/lib/netifd/wireless/mac80211.sh
+++ b/iopsys-brcm63xx-arm/base-files/lib/netifd/wireless/mac80211.sh
@@ -706,6 +706,11 @@ mac80211_interface_cleanup() {
 	for wdev in $(list_phy_interfaces "$phy"); do
 		ip link set dev "$wdev" down 2>/dev/null
 		iw dev "$wdev" del
+
+		type wlctl > /dev/null 2>&1 && {
+			wlctl -i ${wdev} down
+		}
+
 	done
 }
 
@@ -715,6 +720,15 @@ mac80211_set_noscan() {
 
 drv_mac80211_cleanup() {
 	hostapd_common_cleanup
+
+	type wlctl > /dev/null 2>&1 && {
+		local phy="$1"
+
+		phyidx=$(echo "$phy" | sed 's/\(phy\)\([0-9]*\)/\2/g')
+		phyiface=$(iw dev | grep phy#${phyidx} -A1 | grep Interface | cut -d' ' -f2)
+		#echo "Bring down ${phyiface}" > /dev/console
+		wlctl -i ${phyiface} down
+	}
 }
 
 drv_mac80211_setup() {
@@ -745,6 +759,15 @@ drv_mac80211_setup() {
 			iw reg set "$country"
 			sleep 1
 		}
+
+		type wlctl > /dev/null 2>&1 && {
+			phyidx=$(echo "$phy" | sed 's/\(phy\)\([0-9]*\)/\2/g')
+			phyiface=$(iw dev | grep phy#${phyidx} -A1 | grep Interface | cut -d' ' -f2)
+			wlctl -i ${phyiface} down
+			wlctl -i ${phyiface} country "$country"
+			sleep 1
+			#wlctl -i ${phyiface} up
+		}
 	}
 
 	hostapd_conf_file="/var/run/hostapd-$phy.conf"
@@ -791,14 +814,15 @@ drv_mac80211_setup() {
 	[ -n "$hostapd_ctrl" ] && {
 		/usr/sbin/hostapd -s -P /var/run/wifi-$phy.pid -B "$hostapd_conf_file"
 		ret="$?"
+		sleep 3
 		wireless_add_process "$(cat /var/run/wifi-$phy.pid)" "/usr/sbin/hostapd" 1
 		[ "$ret" != 0 ] && {
 			wireless_setup_failed HOSTAPD_START_FAILED
 			return
 		}
 	}
-	
-	for_each_interface "ap sta adhoc mesh monitor" mac80211_setup_vif
+
+	for_each_interface "sta adhoc mesh monitor" mac80211_setup_vif
 
 	wireless_set_up
 }
diff --git a/iopsys-brcm63xx-arm/base-files/lib/wifi/brcm_mac80211.sh b/iopsys-brcm63xx-arm/base-files/lib/wifi/brcm_mac80211.sh
index b264bf6f6682636379c7e023ed4ab8377e1666d4..e5300a7cb29c6b4f1ddb2366d657f6f64cef91ad 100644
--- a/iopsys-brcm63xx-arm/base-files/lib/wifi/brcm_mac80211.sh
+++ b/iopsys-brcm63xx-arm/base-files/lib/wifi/brcm_mac80211.sh
@@ -17,6 +17,7 @@ detect_brcm_mac80211() {
 	# Get factory WPA key.
 	local WPAKEY=$(db -q get hw.board.wpa_key)
 	WPAKEY=${WPAKEY:-1234567890}
+	[ "$WPAKEY" == "00000000" ] && WPAKEY="123456789"
 
 	for _dev in /sys/class/ieee80211/*; do
 		[ -e "$_dev" ] || continue
@@ -61,6 +62,7 @@ detect_brcm_mac80211() {
 #		fi
 
 		dev_id="set wireless.${radioidx}.phy=${dev}"
+		rmac=$(iw dev ${radioidx} info | grep addr | cut -d ' ' -f 2)
 
 		BMAC=$(db -q get hw.board.basemac)
 		BMAC=${BMAC//:/}
@@ -89,6 +91,7 @@ detect_brcm_mac80211() {
 			set wireless.default_${radioidx}.ieee80211k=1
 			set wireless.default_${radioidx}.ieee80211v=1
 			set wireless.default_${radioidx}.bss_transition=1
+			set wireless.default_${radioidx}.macaddr=${rmac}
 EOF
 		uci -q commit wireless