Index: uspace/lib/usbhost/include/usb/host/endpoint.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/endpoint.h	(revision 5dad73d81b453ebe91641a7ec9d563b050a8be5e)
+++ uspace/lib/usbhost/include/usb/host/endpoint.h	(revision 0ee999d5050a78c577615a7e2cf559ca2561e44d)
@@ -67,4 +67,9 @@
 	/** Signals change of active status. */
 	fibril_condvar_t avail;
+	/** High speed TT data */
+	struct {
+		usb_address_t address;
+		unsigned port;
+	} tt;
 	/** Optional device specific data. */
 	struct {
@@ -80,5 +85,6 @@
 endpoint_t * endpoint_create(usb_address_t address, usb_endpoint_t endpoint,
     usb_direction_t direction, usb_transfer_type_t type, usb_speed_t speed,
-    size_t max_packet_size, size_t bw);
+    size_t max_packet_size, size_t bw, usb_address_t tt_address,
+    unsigned tt_port);
 void endpoint_destroy(endpoint_t *instance);
 
Index: uspace/lib/usbhost/include/usb/host/hcd.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/hcd.h	(revision 5dad73d81b453ebe91641a7ec9d563b050a8be5e)
+++ uspace/lib/usbhost/include/usb/host/hcd.h	(revision 0ee999d5050a78c577615a7e2cf559ca2561e44d)
@@ -76,5 +76,4 @@
 	hcd->ep_add_hook = add_hook;
 	hcd->ep_remove_hook = rem_hook;
-
 }
 
@@ -91,5 +90,6 @@
 
 int hcd_add_ep(hcd_t *hcd, usb_target_t target, usb_direction_t dir,
-    usb_transfer_type_t type, size_t max_packet_size, size_t size);
+    usb_transfer_type_t type, size_t max_packet_size, size_t size,
+    usb_address_t tt_address, unsigned tt_port);
 
 int hcd_remove_ep(hcd_t *hcd, usb_target_t target, usb_direction_t dir);
Index: uspace/lib/usbhost/include/usb/host/usb_endpoint_manager.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/usb_endpoint_manager.h	(revision 5dad73d81b453ebe91641a7ec9d563b050a8be5e)
+++ uspace/lib/usbhost/include/usb/host/usb_endpoint_manager.h	(revision 0ee999d5050a78c577615a7e2cf559ca2561e44d)
@@ -93,5 +93,6 @@
     usb_address_t address, usb_endpoint_t endpoint, usb_direction_t direction,
     usb_transfer_type_t type, size_t max_packet_size, size_t data_size,
-    ep_add_callback_t callback, void *arg);
+    ep_add_callback_t callback, void *arg, usb_address_t tt_address,
+    unsigned tt_port);
 
 int usb_endpoint_manager_remove_ep(usb_endpoint_manager_t *instance,
@@ -108,5 +109,5 @@
     usb_address_t *address, bool strict, usb_speed_t speed);
 
-int usb_endpoint_manager_get_info_by_address(usb_endpoint_manager_t *instance,
+int usb_endpoint_manager_get_speed(usb_endpoint_manager_t *instance,
     usb_address_t address, usb_speed_t *speed);
 #endif
Index: uspace/lib/usbhost/src/ddf_helpers.c
===================================================================
--- uspace/lib/usbhost/src/ddf_helpers.c	(revision 5dad73d81b453ebe91641a7ec9d563b050a8be5e)
+++ uspace/lib/usbhost/src/ddf_helpers.c	(revision 0ee999d5050a78c577615a7e2cf559ca2561e44d)
@@ -114,5 +114,5 @@
 
 	return hcd_add_ep(hcd, target, direction, transfer_type,
-	    max_packet_size, size);
+	    max_packet_size, size, dev->tt_address, dev->port);
 }
 
@@ -391,5 +391,5 @@
 		    (d->device_version & 0xff));
 	
-		/* Next, without release number. */	
+		/* Next, without release number. */
 		ADD_MATCHID_OR_RETURN(l, 90, "usb&vendor=%#04x&product=%#04x",
 		    d->vendor_id, d->product_id);
@@ -453,5 +453,5 @@
 
 	/* This checks whether the default address is reserved and gets speed */
-	int ret = usb_endpoint_manager_get_info_by_address(&hcd->ep_manager,
+	int ret = usb_endpoint_manager_get_speed(&hcd->ep_manager,
 		USB_ADDRESS_DEFAULT, &speed);
 	if (ret != EOK) {
@@ -473,8 +473,11 @@
 	}};
 
+	const usb_address_t tt_address = hub ? hub->tt_address : -1;
+
 	/* Add default pipe on default address */
 	ret = hcd_add_ep(hcd,
 	    default_target, USB_DIRECTION_BOTH, USB_TRANSFER_CONTROL,
-	    CTRL_PIPE_MIN_PACKET_SIZE, CTRL_PIPE_MIN_PACKET_SIZE);
+	    CTRL_PIPE_MIN_PACKET_SIZE, CTRL_PIPE_MIN_PACKET_SIZE,
+	    tt_address, port);
 
 	if (ret != EOK) {
@@ -501,5 +504,5 @@
 	/* Register EP on the new address */
 	ret = hcd_add_ep(hcd, target, USB_DIRECTION_BOTH, USB_TRANSFER_CONTROL,
-	    desc.max_packet_size, desc.max_packet_size);
+	    desc.max_packet_size, desc.max_packet_size, tt_address, port);
 	if (ret != EOK) {
 		hcd_remove_ep(hcd, default_target, USB_DIRECTION_BOTH);
Index: uspace/lib/usbhost/src/endpoint.c
===================================================================
--- uspace/lib/usbhost/src/endpoint.c	(revision 5dad73d81b453ebe91641a7ec9d563b050a8be5e)
+++ uspace/lib/usbhost/src/endpoint.c	(revision 0ee999d5050a78c577615a7e2cf559ca2561e44d)
@@ -50,5 +50,5 @@
 endpoint_t * endpoint_create(usb_address_t address, usb_endpoint_t endpoint,
     usb_direction_t direction, usb_transfer_type_t type, usb_speed_t speed,
-    size_t max_packet_size, size_t bw)
+    size_t max_packet_size, size_t bw, usb_address_t tt_address, unsigned tt_p)
 {
 	endpoint_t *instance = malloc(sizeof(endpoint_t));
@@ -63,4 +63,6 @@
 		instance->toggle = 0;
 		instance->active = false;
+		instance->tt.address = tt_address;
+		instance->tt.port = tt_p;
 		instance->hc_data.data = NULL;
 		instance->hc_data.toggle_get = NULL;
Index: uspace/lib/usbhost/src/hcd.c
===================================================================
--- uspace/lib/usbhost/src/hcd.c	(revision 5dad73d81b453ebe91641a7ec9d563b050a8be5e)
+++ uspace/lib/usbhost/src/hcd.c	(revision 0ee999d5050a78c577615a7e2cf559ca2561e44d)
@@ -130,10 +130,11 @@
 
 int hcd_add_ep(hcd_t *hcd, usb_target_t target, usb_direction_t dir,
-    usb_transfer_type_t type, size_t max_packet_size, size_t size)
+    usb_transfer_type_t type, size_t max_packet_size, size_t size,
+    usb_address_t tt_address, unsigned tt_port)
 {
 	assert(hcd);
 	return usb_endpoint_manager_add_ep(&hcd->ep_manager, target.address,
 	    target.endpoint, dir, type, max_packet_size, size, register_helper,
-	    hcd);
+	    hcd, tt_address, tt_port);
 }
 
Index: uspace/lib/usbhost/src/usb_endpoint_manager.c
===================================================================
--- uspace/lib/usbhost/src/usb_endpoint_manager.c	(revision 5dad73d81b453ebe91641a7ec9d563b050a8be5e)
+++ uspace/lib/usbhost/src/usb_endpoint_manager.c	(revision 0ee999d5050a78c577615a7e2cf559ca2561e44d)
@@ -287,5 +287,6 @@
     usb_address_t address, usb_endpoint_t endpoint, usb_direction_t direction,
     usb_transfer_type_t type, size_t max_packet_size, size_t data_size,
-    ep_add_callback_t callback, void *arg)
+    ep_add_callback_t callback, void *arg, usb_address_t tt_address,
+    unsigned tt_port)
 {
 	assert(instance);
@@ -320,6 +321,6 @@
 	}
 
-	ep = endpoint_create(
-	    address, endpoint, direction, type, speed, max_packet_size, bw);
+	ep = endpoint_create(address, endpoint, direction, type, speed,
+	    max_packet_size, bw, tt_address, tt_port);
 	if (!ep) {
 		fibril_mutex_unlock(&instance->guard);
@@ -484,5 +485,5 @@
  * @return Error code.
  */
-int usb_endpoint_manager_get_info_by_address(usb_endpoint_manager_t *instance,
+int usb_endpoint_manager_get_speed(usb_endpoint_manager_t *instance,
     usb_address_t address, usb_speed_t *speed)
 {
