Index: uspace/drv/bus/usb/usbhub/port.c
===================================================================
--- uspace/drv/bus/usb/usbhub/port.c	(revision d648e8380d055f97fa1feb2f42d067d63def8ddd)
+++ uspace/drv/bus/usb/usbhub/port.c	(revision 9d3536e76dc7b14d8ee93b716dda75b15ea9d19f)
@@ -255,5 +255,5 @@
 	}
 
-	for (uint32_t feature = 0; feature < sizeof(usb_port_status_t) * 8; ++feature) {
+	for (uint32_t feature = 16; feature < sizeof(usb_port_status_t) * 8; ++feature) {
 		uint32_t mask = 1 << feature;
 
@@ -261,4 +261,7 @@
 			continue;
 
+		/* Clear the change so it won't come again */
+		usb_hub_clear_port_feature(port->hub, port->port_number, feature);
+
 		if (!port_change_handlers[feature])
 			continue;
@@ -266,10 +269,12 @@
 		/* ACK this change */
 		status &= ~mask;
-		usb_hub_clear_port_feature(port->hub, port->port_number, feature);
 
 		port_change_handlers[feature](port, status);
 	}
 
-	port_log(debug2, port, "Port status after handling: %#08" PRIx32, status);
+	/* Check for changes we ignored */
+	if (status & 0xffff0000) {
+		port_log(debug, port, "Port status change igored. Status: %#08" PRIx32, status);
+	}
 }
 
Index: uspace/drv/bus/usb/usbhub/usbhub.c
===================================================================
--- uspace/drv/bus/usb/usbhub/usbhub.c	(revision d648e8380d055f97fa1feb2f42d067d63def8ddd)
+++ uspace/drv/bus/usb/usbhub/usbhub.c	(revision 9d3536e76dc7b14d8ee93b716dda75b15ea9d19f)
@@ -560,7 +560,8 @@
 	size_t recv_size;
 
+	uint32_t buffer;
 	const int rc = usb_pipe_control_read(hub->control_pipe,
 	    &request, sizeof(usb_device_request_setup_packet_t),
-	    status, sizeof(*status), &recv_size);
+	    &buffer, sizeof(buffer), &recv_size);
 	if (rc != EOK)
 		return rc;
@@ -569,4 +570,5 @@
 		return ELIMIT;
 
+	*status = uint32_usb2host(buffer);
 	return EOK;
 }
