Index: uspace/drv/uhci-hcd/main.c
===================================================================
--- uspace/drv/uhci-hcd/main.c	(revision 9013ad360dbf7721051adae99e1d8b34e857be92)
+++ uspace/drv/uhci-hcd/main.c	(revision 36a4738785c51e127601de2dfe27d687cf316117)
@@ -46,4 +46,7 @@
 #define NAME "uhci-hcd"
 
+static int uhci_add_device(device_t *device);
+static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle);
+/*----------------------------------------------------------------------------*/
 static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle)
 {
@@ -54,14 +57,28 @@
 	return EOK;
 }
-
+/*----------------------------------------------------------------------------*/
 static usb_iface_t hc_usb_iface = {
 	.get_hc_handle = usb_iface_get_hc_handle
 };
-
+/*----------------------------------------------------------------------------*/
 static device_ops_t uhci_ops = {
 	.interfaces[USB_DEV_IFACE] = &hc_usb_iface,
 	.interfaces[USBHC_DEV_IFACE] = &uhci_iface
 };
-
+/*----------------------------------------------------------------------------*/
+static driver_ops_t uhci_driver_ops = {
+	.add_device = uhci_add_device,
+};
+/*----------------------------------------------------------------------------*/
+static driver_t uhci_driver = {
+	.name = NAME,
+	.driver_ops = &uhci_driver_ops
+};
+/*----------------------------------------------------------------------------*/
+static void irq_handler(device_t *dev, ipc_callid_t iid, ipc_call_t *call)
+{
+	usb_log_error("LOL interrupt %x %x.\n", iid, call);
+}
+/*----------------------------------------------------------------------------*/
 static int uhci_add_device(device_t *device)
 {
@@ -75,11 +92,11 @@
 	int irq;
 
-	int rc = pci_get_my_registers(device,
+	int ret = pci_get_my_registers(device,
 	    &io_reg_base, &io_reg_size, &irq);
 
-	if (rc != EOK) {
+	if (ret != EOK) {
 		usb_log_error("Failed(%d) to get I/O registers addresses for device:.\n",
-		    rc, device->handle);
-		return rc;
+		    ret, device->handle);
+		return ret;
 	}
 
@@ -89,9 +106,9 @@
 	uhci_t *uhci_hc = malloc(sizeof(uhci_t));
 	if (!uhci_hc) {
-		usb_log_error("Failed to allocaete memory for uhci hcd driver.\n");
+		usb_log_error("Failed to allocate memory for uhci hcd driver.\n");
 		return ENOMEM;
 	}
 
-	int ret = uhci_init(uhci_hc, (void*)io_reg_base, io_reg_size);
+	ret = uhci_init(uhci_hc, (void*)io_reg_base, io_reg_size);
 	if (ret != EOK) {
 		usb_log_error("Failed to init uhci-hcd.\n");
@@ -100,5 +117,4 @@
 	device_t *rh;
 	ret = setup_root_hub(&rh, device);
-
 	if (ret != EOK) {
 		usb_log_error("Failed to setup uhci root hub.\n");
@@ -116,23 +132,14 @@
 	device->driver_data = uhci_hc;
 
+	ret = register_interrupt_handler(device, irq, irq_handler, NULL);
+	usb_log_error("registered interrupt handler %d.\n", ret);
+
 	return EOK;
 }
-
-static driver_ops_t uhci_driver_ops = {
-	.add_device = uhci_add_device,
-};
-
-static driver_t uhci_driver = {
-	.name = NAME,
-	.driver_ops = &uhci_driver_ops
-};
-
+/*----------------------------------------------------------------------------*/
 int main(int argc, char *argv[])
 {
-	/*
-	 * Do some global initializations.
-	 */
-	sleep(5);
-	usb_log_enable(USB_LOG_LEVEL_INFO, NAME);
+	sleep(3);
+	usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME);
 
 	return driver_main(&uhci_driver);
Index: uspace/drv/uhci-hcd/transfer_list.c
===================================================================
--- uspace/drv/uhci-hcd/transfer_list.c	(revision 9013ad360dbf7721051adae99e1d8b34e857be92)
+++ uspace/drv/uhci-hcd/transfer_list.c	(revision 36a4738785c51e127601de2dfe27d687cf316117)
@@ -111,9 +111,9 @@
 	/* I'm the first one here */
 	if (batch->link.prev == &instance->batch_list) {
-		usb_log_debug("Removing tracer %p was first, next element %x.\n",
+		usb_log_debug("Removing batch %p was first, next element %x.\n",
 			batch, batch->qh->next_queue);
 		instance->queue_head->element = batch->qh->next_queue;
 	} else {
-		usb_log_debug("Removing tracer %p was NOT first, next element %x.\n",
+		usb_log_debug("Removing batch %p was NOT first, next element %x.\n",
 			batch, batch->qh->next_queue);
 		batch_t *prev = list_get_instance(batch->link.prev, batch_t, link);
Index: uspace/drv/uhci-hcd/uhci.c
===================================================================
--- uspace/drv/uhci-hcd/uhci.c	(revision 9013ad360dbf7721051adae99e1d8b34e857be92)
+++ uspace/drv/uhci-hcd/uhci.c	(revision 36a4738785c51e127601de2dfe27d687cf316117)
@@ -82,6 +82,10 @@
 void uhci_init_hw(uhci_t *instance)
 {
-	const uintptr_t pa = (uintptr_t)addr_to_phys(instance->frame_list);
-	pio_write_32(&instance->registers->flbaseadd, (uint32_t)pa);
+	const uint32_t pa = addr_to_phys(instance->frame_list);
+	pio_write_32(&instance->registers->flbaseadd, pa);
+
+	/* enable all interrupts */
+	pio_write_16(&instance->registers->usbintr,
+		  UHCI_INTR_CRC | UHCI_INTR_COMPLETE | UHCI_INTR_SHORT_PACKET);
 
 	/* Start the hc with large(64B) packet FSBR */
@@ -206,7 +210,9 @@
 	assert(instance);
 	while (1) {
-		uint16_t cmd = pio_read_16(&instance->registers->usbcmd);
-		uint16_t sts = pio_read_16(&instance->registers->usbsts);
-		usb_log_debug("Command register: %X Status register: %X\n", cmd, sts);
+		const uint16_t cmd = pio_read_16(&instance->registers->usbcmd);
+		const uint16_t sts = pio_read_16(&instance->registers->usbsts);
+		const uint16_t intr = pio_read_16(&instance->registers->usbintr);
+		usb_log_debug("Command: %X Status: %X Interrupts: %x\n",
+		    cmd, sts, intr);
 
 		uintptr_t frame_list = pio_read_32(&instance->registers->flbaseadd);
Index: uspace/drv/uhci-hcd/uhci.h
===================================================================
--- uspace/drv/uhci-hcd/uhci.h	(revision 9013ad360dbf7721051adae99e1d8b34e857be92)
+++ uspace/drv/uhci-hcd/uhci.h	(revision 36a4738785c51e127601de2dfe27d687cf316117)
@@ -66,4 +66,9 @@
 
 	uint16_t usbintr;
+#define UHCI_INTR_SHORT_PACKET (1 << 3)
+#define UHCI_INTR_COMPLETE (1 << 2)
+#define UHCI_INTR_RESUME (1 << 1)
+#define UHCI_INTR_CRC (1 << 0)
+
 	uint16_t frnum;
 	uint32_t flbaseadd;
