Index: uspace/drv/nic/ar9271/ar9271.c
===================================================================
--- uspace/drv/nic/ar9271/ar9271.c	(revision 1dcc0b9aaf9f79f759ef62cc27bccd9e6b7c8d80)
+++ uspace/drv/nic/ar9271/ar9271.c	(revision 053fc2bcb6fbea6b3e6edf10ca784c77402816d4)
@@ -105,5 +105,6 @@
 static int ar9271_ieee80211_set_freq(ieee80211_dev_t *ieee80211_dev,
 	uint16_t freq);
-static int ar9271_ieee80211_bssid_change(ieee80211_dev_t *ieee80211_dev);
+static int ar9271_ieee80211_bssid_change(ieee80211_dev_t *ieee80211_dev,
+	bool connected);
 static int ar9271_ieee80211_key_config(ieee80211_dev_t *ieee80211_dev,
 	ieee80211_key_config_t *key_conf, bool insert);
@@ -351,6 +352,4 @@
 	ar9271_t *ar9271 = (ar9271_t *) ieee80211_get_specific(ieee80211_dev);
 	
-	//hw_wakeup(ar9271);
-	
 	wmi_send_command(ar9271->htc_device, WMI_DISABLE_INTR, NULL, 0, NULL);
 	wmi_send_command(ar9271->htc_device, WMI_DRAIN_TXQ_ALL, NULL, 0, NULL);
@@ -379,5 +378,6 @@
 }
 
-static int ar9271_ieee80211_bssid_change(ieee80211_dev_t *ieee80211_dev)
+static int ar9271_ieee80211_bssid_change(ieee80211_dev_t *ieee80211_dev,
+	bool connected)
 {
 	assert(ieee80211_dev);
@@ -385,6 +385,5 @@
 	ar9271_t *ar9271 = (ar9271_t *) ieee80211_get_specific(ieee80211_dev);
 
-	/* Check if we are connected or disconnected. */
-	if(ieee80211_is_connected(ieee80211_dev)) {
+	if(connected) {
 		nic_address_t bssid;
 		ieee80211_query_bssid(ieee80211_dev, &bssid);
@@ -433,14 +432,15 @@
 {
 	assert(ieee80211_dev);
-	assert(key_conf);
 	
 	ar9271_t *ar9271 = (ar9271_t *) ieee80211_get_specific(ieee80211_dev);
 	
-	uint32_t key[5];
-	uint32_t key_type;
-	uint32_t reg_ptr;
-	void *data_start;
-	
 	if(insert) {
+		assert(key_conf);
+		
+		uint32_t key[5];
+		uint32_t key_type;
+		uint32_t reg_ptr;
+		void *data_start;
+		
 		nic_address_t bssid;
 		ieee80211_query_bssid(ieee80211_dev, &bssid);
@@ -520,5 +520,6 @@
 			ieee80211_setup_key_confirm(ieee80211_dev, true);
 	} else {
-		// TODO
+		// TODO: Delete keys from device
+		ieee80211_setup_key_confirm(ieee80211_dev, false);
 	}
 	
@@ -562,5 +563,5 @@
 			data_header->keyix = AR9271_STA_KEY_INDEX;
 			int sec_suite = 
-				ieee80211_get_security_suite(ieee80211_dev);
+				ieee80211_get_pairwise_security(ieee80211_dev);
 			switch(sec_suite) {
 				case IEEE80211_SECURITY_SUITE_WEP40:
Index: uspace/drv/nic/ar9271/hw.c
===================================================================
--- uspace/drv/nic/ar9271/hw.c	(revision 1dcc0b9aaf9f79f759ef62cc27bccd9e6b7c8d80)
+++ uspace/drv/nic/ar9271/hw.c	(revision 053fc2bcb6fbea6b3e6edf10ca784c77402816d4)
@@ -377,47 +377,4 @@
 }
 
-int hw_wakeup(ar9271_t *ar9271)
-{
-	int rc;
-	
-	uint32_t rtc_status;
-	wmi_reg_read(ar9271->htc_device, AR9271_RTC_STATUS, &rtc_status);
-	if((rtc_status & AR9271_RTC_STATUS_MASK) == AR9271_RTC_STATUS_SHUTDOWN) {
-		rc = hw_reset_power_on(ar9271);
-		if(rc != EOK) {
-			usb_log_info("Failed to HW reset power on.\n");
-			return rc;
-		}
-
-		rc = hw_set_reset(ar9271, false);
-		if(rc != EOK) {
-			usb_log_info("Failed to HW warm reset.\n");
-			return rc;
-		}
-	}
-	
-	wmi_reg_set_bit(ar9271->htc_device, AR9271_RTC_FORCE_WAKE,
-		AR9271_RTC_FORCE_WAKE_ENABLE);
-	
-	size_t i;
-	for(i = 0; i < HW_WAIT_LOOPS; i++) {
-		wmi_reg_read(ar9271->htc_device, AR9271_RTC_STATUS, 
-			&rtc_status);
-		if((rtc_status & AR9271_RTC_STATUS_MASK) == 
-			AR9271_RTC_STATUS_ON) {
-			break;
-		}
-		wmi_reg_set_bit(ar9271->htc_device, AR9271_RTC_FORCE_WAKE,
-			AR9271_RTC_FORCE_WAKE_ENABLE);
-		udelay(50);
-	}	
-	
-	if(i == HW_WAIT_LOOPS) {
-		return EINVAL;
-	} else {
-		return EOK;
-	}
-}
-
 int hw_freq_switch(ar9271_t *ar9271, uint16_t freq)
 {
Index: uspace/drv/nic/ar9271/hw.h
===================================================================
--- uspace/drv/nic/ar9271/hw.h	(revision 1dcc0b9aaf9f79f759ef62cc27bccd9e6b7c8d80)
+++ uspace/drv/nic/ar9271/hw.h	(revision 053fc2bcb6fbea6b3e6edf10ca784c77402816d4)
@@ -45,5 +45,4 @@
 extern int hw_rx_init(ar9271_t *ar9271);
 extern int hw_reset(ar9271_t *ar9271);
-extern int hw_wakeup(ar9271_t *ar9271);
 extern int hw_set_bssid(ar9271_t *ar9271);
 extern int hw_set_rx_filter(ar9271_t *ar9271, bool assoc);
