Index: uspace/drv/bus/usb/xhci/hc.c
===================================================================
--- uspace/drv/bus/usb/xhci/hc.c	(revision 17f24d9ce1889f764ff46785180319a7ebf2b801)
+++ uspace/drv/bus/usb/xhci/hc.c	(revision c33c40e6fe5e413d041657771a607abed1745a0b)
@@ -368,5 +368,4 @@
 
 	/* Check for root hub communication */
-	/* FIXME: Zero is a very crude workaround. Detect RH better. */
 	if (batch->ep->address == xhci_rh_get_address(&hc->rh)) {
 		usb_log_debug("XHCI root hub request.\n");
Index: uspace/drv/bus/usb/xhci/rh.c
===================================================================
--- uspace/drv/bus/usb/xhci/rh.c	(revision 17f24d9ce1889f764ff46785180319a7ebf2b801)
+++ uspace/drv/bus/usb/xhci/rh.c	(revision c33c40e6fe5e413d041657771a607abed1745a0b)
@@ -382,5 +382,5 @@
 	/* TODO: Implement me! */
 	usb_log_debug2("Called req_status_change_handler().");
-	return EOK;
+	return ENAK;
 }
 
Index: uspace/drv/bus/usb/xhci/rh.h
===================================================================
--- uspace/drv/bus/usb/xhci/rh.h	(revision 17f24d9ce1889f764ff46785180319a7ebf2b801)
+++ uspace/drv/bus/usb/xhci/rh.h	(revision c33c40e6fe5e413d041657771a607abed1745a0b)
@@ -74,6 +74,5 @@
 {
 	assert(rh);
-	/* FIXME: The line end below causes infinite loop. */
-	return 0; // virthub_base_get_address(&rh->base);
+	return virthub_base_get_address(&rh->base);
 }
 
