Index: uspace/drv/uhci-rhd/port.c
===================================================================
--- uspace/drv/uhci-rhd/port.c	(revision c56dbe0145daee356fb1f4205867f51767935e91)
+++ uspace/drv/uhci-rhd/port.c	(revision 1669a73d2d1d9e53788ea293e078b073723832ee)
@@ -48,5 +48,5 @@
 int uhci_port_init(
   uhci_port_t *port, port_status_t *address, unsigned number,
-  unsigned usec, device_t *rh)
+  unsigned usec, device_t *rh, int parent_phone)
 {
 	assert(port);
@@ -56,5 +56,5 @@
 	port->attached_device = 0;
 	port->rh = rh;
-	port->hc_phone = rh->parent_phone;
+	port->hc_phone = parent_phone;
 
 	port->checker = fibril_create(uhci_port_check, port);
@@ -71,4 +71,6 @@
 void uhci_port_fini(uhci_port_t *port)
 {
+// TODO: destroy fibril
+// TODO: hangup phone
 //	fibril_teardown(port->checker);
 	return;
@@ -77,5 +79,4 @@
 int uhci_port_check(void *port)
 {
-	async_usleep( 1000000 );
 	uhci_port_t *port_instance = port;
 	assert(port_instance);
@@ -114,18 +115,33 @@
 	usb_log_info("Adding new device on port %d.\n", port->number);
 
+	/* get address of the future device */
+	const usb_address_t usb_address = usb_drv_request_address(port->hc_phone);
+
+	if (usb_address <= 0) {
+		usb_log_error("Recieved invalid address(%d).\n", usb_address);
+		return usb_address;
+	}
+	usb_log_debug("Sucessfully obtained address %d for port %d.\n",
+	    usb_address, port->number);
 
 	/* get default address */
 	int ret = usb_drv_reserve_default_address(port->hc_phone);
 	if (ret != EOK) {
-		usb_log_error("Failed to reserve default address.\n");
+		usb_log_error("Failed to reserve default address on port %d.\n",
+		    port->number);
+		int ret2 =
+		  usb_drv_release_address(port->hc_phone, usb_address);
+		if (ret2 != EOK) {
+			usb_log_fatal("Failed to return requested address on port %d.\n",
+			   port->number);
+			return ret2;
+		}
+		usb_log_debug("Successfully returned reserved address on port %d.\n",
+			port->number);
 		return ret;
 	}
-
-	const usb_address_t usb_address = usb_drv_request_address(port->hc_phone);
-
-	if (usb_address <= 0) {
-		usb_log_error("Recieved invalid address(%d).\n", usb_address);
-		return usb_address;
-	}
+	usb_log_debug("Sucessfully obtained default address for port %d.\n",
+	    port->number);
+
 	/*
 	 * the host then waits for at least 100 ms to allow completion of
@@ -140,17 +156,22 @@
 	 * (See Section 11.5.1.5)
 	 */
-	port_status_t port_status =
-		port_status_read(port->address);
-	port_status |= STATUS_IN_RESET;
-	port_status_write(port->address, port_status);
-	async_usleep(10000);
-	port_status =
-		port_status_read(port->address);
-	port_status &= ~STATUS_IN_RESET;
-	port_status_write(port->address, port_status);
+	{
+		usb_log_debug("Reset Signal start on port %d.\n",
+		    port->number);
+		port_status_t port_status =
+			port_status_read(port->address);
+		port_status |= STATUS_IN_RESET;
+		port_status_write(port->address, port_status);
+		async_usleep(10000);
+		port_status =
+			port_status_read(port->address);
+		port_status &= ~STATUS_IN_RESET;
+		port_status_write(port->address, port_status);
+		usb_log_debug("Reset Signal stop on port %d.\n",
+		    port->number);
+	}
 
 	/* assign address to device */
 	ret = usb_drv_req_set_address(port->hc_phone, 0, usb_address);
-
 
 	if (ret != EOK) { /* address assigning went wrong */
@@ -159,16 +180,24 @@
 		int release = usb_drv_release_default_address(port->hc_phone);
 		if (release != EOK) {
-			usb_log_error("Failed to release default address.\n");
+			usb_log_error("Failed to release default address on port %d.\n",
+			    port->number);
 			return release;
 		}
+		usb_log_debug("Sucessfully released default address on port %d.\n",
+		    port->number);
 		return ret;
 	}
+	usb_log_debug("Sucessfully assigned address %d for port %d.\n",
+	    usb_address, port->number);
 
 	/* release default address */
 	ret = usb_drv_release_default_address(port->hc_phone);
 	if (ret != EOK) {
-		usb_log_error("Failed to release default address.\n");
+		usb_log_error("Failed to release default address on port %d.\n",
+		    port->number);
 		return ret;
 	}
+	usb_log_debug("Sucessfully released default address on port %d.\n",
+	    port->number);
 
 	/* communicate and possibly report to devman */
@@ -195,5 +224,5 @@
 	usb_log_error("Don't know how to remove device %#x.\n",
 		(unsigned int)port->attached_device);
-	uhci_port_set_enabled(port, false);
+//	uhci_port_set_enabled(port, false);
 	return EOK;
 }
