Index: uspace/drv/uhci-hcd/iface.c
===================================================================
--- uspace/drv/uhci-hcd/iface.c	(revision 48563a3d983e5ddcf788def5bb1744d42b56d2af)
+++ uspace/drv/uhci-hcd/iface.c	(revision 1ae51aed0fc7776b1a041c9182ef2bdb0974511e)
@@ -149,4 +149,6 @@
 	assert(hc);
 	usb_speed_t speed = device_keeper_speed(&hc->device_manager, target.address);
+	usb_log_debug("Control WRITE %d:%d %zu(%zu).\n",
+	    target.address, target.endpoint, size, max_packet_size);
 
 	batch_t *batch = batch_get(fun, target, USB_TRANSFER_CONTROL,
@@ -169,4 +171,6 @@
 	usb_speed_t speed = device_keeper_speed(&hc->device_manager, target.address);
 
+	usb_log_debug("Control READ %d:%d %zu(%zu).\n",
+	    target.address, target.endpoint, size, max_packet_size);
 	batch_t *batch = batch_get(fun, target, USB_TRANSFER_CONTROL,
 	    max_packet_size, speed, data, size, setup_data, setup_size, callback,
Index: uspace/drv/uhci-hcd/uhci.c
===================================================================
--- uspace/drv/uhci-hcd/uhci.c	(revision 48563a3d983e5ddcf788def5bb1744d42b56d2af)
+++ uspace/drv/uhci-hcd/uhci.c	(revision 1ae51aed0fc7776b1a041c9182ef2bdb0974511e)
@@ -48,10 +48,10 @@
 	{
 		.cmd = CMD_PIO_READ_16,
-		.addr = (void*)0xc022,
+		.addr = NULL, /* patched for every instance */
 		.dstarg = 1
 	},
 	{
 		.cmd = CMD_PIO_WRITE_16,
-		.addr = (void*)0xc022,
+		.addr = NULL, /* pathed for every instance */
 		.value = 0x1f
 	},
@@ -61,5 +61,4 @@
 };
 
-
 static int usb_iface_get_address(ddf_fun_t *fun, devman_handle_t handle,
     usb_address_t *address)
@@ -69,6 +68,4 @@
 	assert(hc);
 
-//	usb_address_t addr = usb_address_keeping_find(&hc->address_manager,
-//	    handle);
 	usb_address_t addr = device_keeper_find(&hc->device_manager,
 	    handle);
Index: uspace/drv/uhci-rhd/port.c
===================================================================
--- uspace/drv/uhci-rhd/port.c	(revision 48563a3d983e5ddcf788def5bb1744d42b56d2af)
+++ uspace/drv/uhci-rhd/port.c	(revision 1ae51aed0fc7776b1a041c9182ef2bdb0974511e)
@@ -92,7 +92,11 @@
 	uhci_port_t *port_instance = port;
 	assert(port_instance);
-//	port_status_write(port_instance->address, 0);
+	port_status_write(port_instance->address, 0);
+
+	uint64_t count = 0;
 
 	while (1) {
+		async_usleep(port_instance->wait_period_usec);
+
 		/* read register value */
 		port_status_t port_status =
@@ -102,21 +106,20 @@
 		static fibril_mutex_t dbg_mtx = FIBRIL_MUTEX_INITIALIZER(dbg_mtx);
 		fibril_mutex_lock(&dbg_mtx);
-		usb_log_debug("Port %d status at %p: 0x%04x.\n",
-		  port_instance->number, port_instance->address, port_status);
+		usb_log_debug("Port %d status at %p: 0x%04x. === %llu\n",
+		  port_instance->number, port_instance->address, port_status, count++);
 //		print_port_status(port_status);
 		fibril_mutex_unlock(&dbg_mtx);
 
-		if (port_status & STATUS_CONNECTED_CHANGED) {
-			usb_log_debug("Change detected on port %d.\n", port_instance->number);
+		if ((port_status & STATUS_CONNECTED_CHANGED) != 0) {
+			usb_log_debug("Change detected on port %d: %x.\n",
+			    port_instance->number, port_status);
+
+
 			int rc = usb_hc_connection_open(
 			    &port_instance->hc_connection);
 			if (rc != EOK) {
 				usb_log_error("Failed to connect to HC.");
-				goto next;
-			}
-
-			port_status_write(port_instance->address, port_status);
-			usb_log_debug("Change status ack on port %d.\n",
-			    port_instance->number);
+				continue;
+			}
 
 			/* remove any old device */
@@ -127,7 +130,12 @@
 			}
 
-			if (port_status & STATUS_CONNECTED) {
+			if ((port_status & STATUS_CONNECTED) != 0) {
 				/* new device */
 				uhci_port_new_device(port_instance, port_status);
+			} else {
+				/* ack changes by writing one to WC bits */
+				port_status_write(port_instance->address, port_status);
+				usb_log_debug("Change status ack on port %d.\n",
+						port_instance->number);
 			}
 
@@ -136,9 +144,6 @@
 			if (rc != EOK) {
 				usb_log_error("Failed to disconnect from HC.");
-				goto next;
 			}
 		}
-	next:
-		async_usleep(port_instance->wait_period_usec);
 	}
 	return EOK;
@@ -202,4 +207,5 @@
 	    new_device_enable_port, port->number, port,
 	    &dev_addr, &port->attached_device, NULL, NULL, NULL);
+
 	if (rc != EOK) {
 		usb_log_error("Failed adding new device on port %u: %s.\n",
