Index: uspace/drv/uhci/root_hub/port.c
===================================================================
--- uspace/drv/uhci/root_hub/port.c	(revision 8324b65ac7b082bed5fb3578c45c82add92750d0)
+++ uspace/drv/uhci/root_hub/port.c	(revision 15701921a01f2a31b3a498f8f3fcc15ba16699ba)
@@ -37,5 +37,5 @@
 
 		/* debug print */
-		uhci_print_info("Port(%d) status %#x:\n",
+		uhci_print_info("Port(%d) status %#.4x:\n",
 		  port_instance->number, port_status.raw_value);
 		print_port_status( &port_status );
@@ -48,4 +48,8 @@
 				/* TODO */
 				/* remove device here */
+				uhci_print_error(
+				  "Don't know how to remove device %#x.\n",
+				  port_instance->attached_device);
+				uhci_port_set_enabled(port_instance, false);
 			}
 		}
@@ -78,15 +82,16 @@
 	if (address <= 0) { /* address assigning went wrong */
 		uhci_port_set_enabled(port, false);
-		uhci_print_error("Failed to assign address to the device");
+		uhci_print_error("Failed to assign address to the device.\n");
 		return ENOMEM;
 	}
 
 	/* report to devman */
-	devman_handle_t child = 0;
-	report_new_device(port->hc, address, port->number, &child);
+	assert( port->attached_device == 0 );
+	report_new_device(port->hc, address, port->number,
+		&port->attached_device);
 
 	/* bind address */
 	usb_address_keeping_devman_bind(&uhci_instance->address_manager,
-	  address, child);
+	  address, port->attached_device);
 
 	return EOK;
@@ -102,9 +107,9 @@
 
 	/* enable port: register write */
-	port_status.status.enabled_change = 0;
-	port_status.status.enabled = (bool)enabled;
+	port_status.status.enabled = enabled;
 	pio_write_16( port->address, port_status.raw_value );
 
-	uhci_print_info( "Enabled port %d.\n", port->number );
+	uhci_print_info( "%s port %d.\n",
+	  enabled ? "Enabled" : "Disabled", port->number );
 	return EOK;
 }
@@ -216,11 +221,17 @@
 	uhci_setup(
 	  hc, new_device, USB_TRANSFER_CONTROL, &data, sizeof(data),
-		sync_out_callback, (void*)&value );
+		sync_out_callback, (void*)&value);
 	uhci_print_verbose("address assignment sent, waiting to complete.\n");
 
 	sync_wait_for(&value);
-
-	uhci_print_info( "Assigned address %#x.\n", usb_address );
-
+	if (value.result != USB_OUTCOME_OK) {
+		uhci_print_error(
+		  "Failed to assign address to the connected device.\n");
+		usb_address_keeping_release(&uhci_instance->address_manager,
+		  usb_address);
+		return -1;
+	}
+
+	uhci_print_info("Assigned address %#x.\n", usb_address);
 	return usb_address;
 }
Index: uspace/drv/uhci/root_hub/port.h
===================================================================
--- uspace/drv/uhci/root_hub/port.h	(revision 8324b65ac7b082bed5fb3578c45c82add92750d0)
+++ uspace/drv/uhci/root_hub/port.h	(revision 15701921a01f2a31b3a498f8f3fcc15ba16699ba)
@@ -47,4 +47,5 @@
 	unsigned number;
 	unsigned wait_period_usec;
+	devman_handle_t attached_device;
 } uhci_port_t;
 
@@ -58,4 +59,5 @@
 	port->number = number;
 	port->wait_period_usec = usec;
+	port->attached_device = 0;
 }
 
