Index: uspace/drv/bus/usb/ehci/hw_struct/queue_head.c
===================================================================
--- uspace/drv/bus/usb/ehci/hw_struct/queue_head.c	(revision ff14aede529e82477b19f7e9c2e101612709dd67)
+++ uspace/drv/bus/usb/ehci/hw_struct/queue_head.c	(revision 888238e953d747d7f84f15f4b799d4c161b17177)
@@ -64,13 +64,13 @@
 		return;
 	}
-	assert(ep->speed < ARRAY_SIZE(speed));
+	assert(ep->device->speed < ARRAY_SIZE(speed));
 	EHCI_MEM32_WR(instance->ep_char,
 	    QH_EP_CHAR_ADDR_SET(ep->device->address) |
 	    QH_EP_CHAR_EP_SET(ep->endpoint) |
-	    speed[ep->speed] |
+	    speed[ep->device->speed] |
 	    QH_EP_CHAR_MAX_LENGTH_SET(ep->max_packet_size)
 	);
 	if (ep->transfer_type == USB_TRANSFER_CONTROL) {
-		if (ep->speed != USB_SPEED_HIGH)
+		if (ep->device->speed != USB_SPEED_HIGH)
 			EHCI_MEM32_SET(instance->ep_char, QH_EP_CHAR_C_FLAG);
 		/* Let BULK and INT use queue head managed toggle,
@@ -80,5 +80,5 @@
 	uint32_t ep_cap = QH_EP_CAP_C_MASK_SET(3 << 2) |
 		    QH_EP_CAP_MULTI_SET(ep->packets);
-	if (ep->speed != USB_SPEED_HIGH) {
+	if (ep->device->speed != USB_SPEED_HIGH) {
 		ep_cap |=
 		    QH_EP_CAP_TT_PORT_SET(ep->device->tt.port) |
Index: uspace/drv/bus/usb/ohci/hw_struct/endpoint_descriptor.c
===================================================================
--- uspace/drv/bus/usb/ohci/hw_struct/endpoint_descriptor.c	(revision ff14aede529e82477b19f7e9c2e101612709dd67)
+++ uspace/drv/bus/usb/ohci/hw_struct/endpoint_descriptor.c	(revision 888238e953d747d7f84f15f4b799d4c161b17177)
@@ -88,5 +88,5 @@
 
 	/* Low speed flag */
-	if (ep->speed == USB_SPEED_LOW)
+	if (ep->device->speed == USB_SPEED_LOW)
 		OHCI_MEM32_SET(instance->status, ED_STATUS_S_FLAG);
 
Index: uspace/drv/bus/usb/uhci/hc.c
===================================================================
--- uspace/drv/bus/usb/uhci/hc.c	(revision ff14aede529e82477b19f7e9c2e101612709dd67)
+++ uspace/drv/bus/usb/uhci/hc.c	(revision 888238e953d747d7f84f15f4b799d4c161b17177)
@@ -475,5 +475,5 @@
 
 	transfer_list_t *list =
-	    instance->transfers[batch->ep->speed][batch->ep->transfer_type];
+	    instance->transfers[batch->ep->device->speed][batch->ep->transfer_type];
 	assert(list);
 	transfer_list_add_batch(list, uhci_batch);
Index: uspace/drv/bus/usb/uhci/uhci_batch.c
===================================================================
--- uspace/drv/bus/usb/uhci/uhci_batch.c	(revision ff14aede529e82477b19f7e9c2e101612709dd67)
+++ uspace/drv/bus/usb/uhci/uhci_batch.c	(revision 888238e953d747d7f84f15f4b799d4c161b17177)
@@ -233,5 +233,5 @@
 	const usb_packet_id pid = direction_pids[dir];
 	const bool low_speed =
-	    uhci_batch->base.ep->speed == USB_SPEED_LOW;
+	    uhci_batch->base.ep->device->speed == USB_SPEED_LOW;
 	const size_t mps = uhci_batch->base.ep->max_packet_size;
 
@@ -295,5 +295,5 @@
 	const usb_packet_id status_stage_pid = status_stage_pids[dir];
 	const bool low_speed =
-	    uhci_batch->base.ep->speed == USB_SPEED_LOW;
+	    uhci_batch->base.ep->device->speed == USB_SPEED_LOW;
 	const size_t mps = uhci_batch->base.ep->max_packet_size;
 	const usb_target_t target = uhci_batch->base.target;
Index: uspace/drv/bus/usb/xhci/endpoint.c
===================================================================
--- uspace/drv/bus/usb/xhci/endpoint.c	(revision ff14aede529e82477b19f7e9c2e101612709dd67)
+++ uspace/drv/bus/usb/xhci/endpoint.c	(revision 888238e953d747d7f84f15f4b799d4c161b17177)
@@ -141,5 +141,5 @@
 int xhci_endpoint_request_streams(xhci_hc_t *hc, xhci_device_t *dev, xhci_endpoint_t *xhci_ep, unsigned count) {
 	if (xhci_ep->base.transfer_type != USB_TRANSFER_BULK
-		|| xhci_ep->base.speed != USB_SPEED_SUPER) {
+		|| dev->base.speed != USB_SPEED_SUPER) {
 		usb_log_error("Streams are only supported by superspeed bulk endpoints.");
 		return EINVAL;
Index: uspace/lib/usbhost/include/usb/host/endpoint.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/endpoint.h	(revision ff14aede529e82477b19f7e9c2e101612709dd67)
+++ uspace/lib/usbhost/include/usb/host/endpoint.h	(revision 888238e953d747d7f84f15f4b799d4c161b17177)
@@ -66,6 +66,4 @@
 	/** USB transfer type. */
 	usb_transfer_type_t transfer_type;
-	/** Communication speed. */
-	usb_speed_t speed;
 	/** Maximum size of data packets. */
 	size_t max_packet_size;
Index: uspace/lib/usbhost/include/usb/host/usb_transfer_batch.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/usb_transfer_batch.h	(revision ff14aede529e82477b19f7e9c2e101612709dd67)
+++ uspace/lib/usbhost/include/usb/host/usb_transfer_batch.h	(revision 888238e953d747d7f84f15f4b799d4c161b17177)
@@ -39,4 +39,5 @@
 #include <usb/usb.h>
 #include <usb/request.h>
+#include <usb/host/bus.h>
 #include <usbhc_iface.h>
 
@@ -99,5 +100,5 @@
 #define USB_TRANSFER_BATCH_ARGS(batch) \
 	(batch).target.address, (batch).target.endpoint, \
-	usb_str_speed((batch).ep->speed), \
+	usb_str_speed((batch).ep->device->speed), \
 	usb_str_transfer_type_short((batch).ep->transfer_type), \
 	usb_str_direction((batch).ep->direction), \
Index: uspace/lib/usbhost/src/bandwidth.c
===================================================================
--- uspace/lib/usbhost/src/bandwidth.c	(revision ff14aede529e82477b19f7e9c2e101612709dd67)
+++ uspace/lib/usbhost/src/bandwidth.c	(revision 888238e953d747d7f84f15f4b799d4c161b17177)
@@ -36,4 +36,5 @@
 #include <usb/host/bandwidth.h>
 #include <usb/host/endpoint.h>
+#include <usb/host/bus.h>
 
 #include <assert.h>
@@ -42,7 +43,6 @@
 /** Calculate bandwidth that needs to be reserved for communication with EP.
  * Calculation follows USB 1.1 specification.
- * @param speed Device's speed.
- * @param type Type of the transfer.
- * @param size Number of byte to transfer.
+ * @param ep Registered endpoint
+ * @param size Number of bytes to transfer.
  * @param max_packet_size Maximum bytes in one packet.
  */
@@ -50,4 +50,5 @@
 {
 	assert(ep);
+	assert(ep->device);
 
 	const usb_transfer_type_t type = ep->transfer_type;
@@ -66,5 +67,5 @@
 	 * transaction, but I did not find text in USB spec to confirm this */
 	/* NOTE: All data packets will be considered to be max_packet_size */
-	switch (ep->speed)
+	switch (ep->device->speed)
 	{
 	case USB_SPEED_LOW:
