Index: uspace/lib/usbhost/src/hcd.c
===================================================================
--- uspace/lib/usbhost/src/hcd.c	(revision 306a36dae0d419ae43d028501b23fce889c83a66)
+++ uspace/lib/usbhost/src/hcd.c	(revision ff14aede529e82477b19f7e9c2e101612709dd67)
@@ -107,4 +107,27 @@
 }
 
+/**
+ * Setup devices Transaction Translation.
+ *
+ * This applies for Low/Full speed devices under High speed hub only. Other
+ * devices just inherit TT from the hub.
+ *
+ * Roothub must be handled specially.
+ */
+void hcd_setup_device_tt(device_t *dev)
+{
+	if (!dev->hub)
+		return;
+
+	if (dev->hub->speed == USB_SPEED_HIGH && usb_speed_is_11(dev->speed)) {
+		/* For LS devices under HS hub */
+		dev->tt.address = dev->hub->address;
+		dev->tt.port = dev->port;
+	}
+	else {
+		/* Inherit hub's TT */
+		dev->tt = dev->hub->tt;
+	}
+}
 
 /** Prepare generic usb_transfer_batch and schedule it.
Index: uspace/lib/usbhost/src/usb2_bus.c
===================================================================
--- uspace/lib/usbhost/src/usb2_bus.c	(revision 306a36dae0d419ae43d028501b23fce889c83a66)
+++ uspace/lib/usbhost/src/usb2_bus.c	(revision ff14aede529e82477b19f7e9c2e101612709dd67)
@@ -199,22 +199,12 @@
 	usb_log_debug("Found new %s speed USB device.", usb_str_speed(dev->speed));
 
-	if (dev->hub) {
-		/* Manage TT */
-		if (dev->hub->speed == USB_SPEED_HIGH && usb_speed_is_11(dev->speed)) {
-			/* For LS devices under HS hub */
-			/* TODO: How about SS hubs? */
-			dev->tt.address = dev->hub->address;
-			dev->tt.port = dev->port;
-		}
-		else {
-			/* Inherit hub's TT */
-			dev->tt = dev->hub->tt;
-		}
-	}
-	else {
+	if (!dev->hub) {
+		/* The device is the roothub */
 		dev->tt = (usb_tt_address_t) {
 			.address = -1,
 			.port = 0,
 		};
+	} else {
+		hcd_setup_device_tt(dev);
 	}
 
