Index: uspace/lib/usbhost/include/usb/host/endpoint.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/endpoint.h	(revision 9ff59981df1c8430ceefaa186663be82d468a9ce)
+++ uspace/lib/usbhost/include/usb/host/endpoint.h	(revision bfff7fd57f2e4cc25a8bbb2950c9cf594c5ddd21)
@@ -57,4 +57,6 @@
 	/** Maximum size of data packets. */
 	size_t max_packet_size;
+	/** Additional opportunities per uframe */
+	unsigned packets;
 	/** Necessary bandwidth. */
 	size_t bandwidth;
@@ -85,6 +87,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, usb_address_t tt_address,
-    unsigned tt_port);
+    size_t max_packet_size, unsigned packets, 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 9ff59981df1c8430ceefaa186663be82d468a9ce)
+++ uspace/lib/usbhost/include/usb/host/hcd.h	(revision bfff7fd57f2e4cc25a8bbb2950c9cf594c5ddd21)
@@ -109,6 +109,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_address_t tt_address, unsigned tt_port);
+    usb_transfer_type_t type, size_t max_packet_size, unsigned packets,
+    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_bus.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/usb_bus.h	(revision 9ff59981df1c8430ceefaa186663be82d468a9ce)
+++ uspace/lib/usbhost/include/usb/host/usb_bus.h	(revision bfff7fd57f2e4cc25a8bbb2950c9cf594c5ddd21)
@@ -97,7 +97,7 @@
 int usb_bus_add_ep(usb_bus_t *instance,
     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, usb_address_t tt_address,
-    unsigned tt_port);
+    usb_transfer_type_t type, size_t max_packet_size, unsigned packets,
+    size_t data_size, ep_add_callback_t callback, void *arg,
+    usb_address_t tt_address, unsigned tt_port);
 
 int usb_bus_remove_ep(usb_bus_t *instance,
Index: uspace/lib/usbhost/src/ddf_helpers.c
===================================================================
--- uspace/lib/usbhost/src/ddf_helpers.c	(revision 9ff59981df1c8430ceefaa186663be82d468a9ce)
+++ uspace/lib/usbhost/src/ddf_helpers.c	(revision bfff7fd57f2e4cc25a8bbb2950c9cf594c5ddd21)
@@ -110,5 +110,5 @@
     ddf_fun_t *fun, usb_endpoint_t endpoint,
     usb_transfer_type_t transfer_type, usb_direction_t direction,
-    size_t max_packet_size, unsigned interval)
+    size_t max_packet_size, unsigned packets, unsigned interval)
 {
 	assert(fun);
@@ -126,5 +126,5 @@
 
 	return hcd_add_ep(hcd, target, direction, transfer_type,
-	    max_packet_size, size, dev->tt_address, dev->port);
+	    max_packet_size, packets, size, dev->tt_address, dev->port);
 }
 
@@ -491,5 +491,5 @@
 	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, 1,
 	    tt_address, port);
 
@@ -517,5 +517,8 @@
 	/* 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, tt_address, port);
+	    ED_MPS_PACKET_SIZE_GET(uint16_usb2host(desc.max_packet_size)),
+	    ED_MPS_TRANS_OPPORTUNITIES_GET(uint16_usb2host(desc.max_packet_size)),
+	    ED_MPS_PACKET_SIZE_GET(uint16_usb2host(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 9ff59981df1c8430ceefaa186663be82d468a9ce)
+++ uspace/lib/usbhost/src/endpoint.c	(revision bfff7fd57f2e4cc25a8bbb2950c9cf594c5ddd21)
@@ -50,5 +50,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, usb_address_t tt_address, unsigned tt_p)
+    size_t max_packet_size, unsigned packets, size_t bw,
+    usb_address_t tt_address, unsigned tt_p)
 {
 	endpoint_t *instance = malloc(sizeof(endpoint_t));
@@ -60,4 +61,5 @@
 		instance->speed = speed;
 		instance->max_packet_size = max_packet_size;
+		instance->packets = packets;
 		instance->bandwidth = bw;
 		instance->toggle = 0;
Index: uspace/lib/usbhost/src/hcd.c
===================================================================
--- uspace/lib/usbhost/src/hcd.c	(revision 9ff59981df1c8430ceefaa186663be82d468a9ce)
+++ uspace/lib/usbhost/src/hcd.c	(revision bfff7fd57f2e4cc25a8bbb2950c9cf594c5ddd21)
@@ -132,11 +132,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_address_t tt_address, unsigned tt_port)
+    usb_transfer_type_t type, size_t max_packet_size, unsigned packets,
+    size_t size, usb_address_t tt_address, unsigned tt_port)
 {
 	assert(hcd);
 	return usb_bus_add_ep(&hcd->bus, target.address,
-	    target.endpoint, dir, type, max_packet_size, size, register_helper,
-	    hcd, tt_address, tt_port);
+	    target.endpoint, dir, type, max_packet_size, packets, size,
+	    register_helper, hcd, tt_address, tt_port);
 }
 
Index: uspace/lib/usbhost/src/usb_bus.c
===================================================================
--- uspace/lib/usbhost/src/usb_bus.c	(revision 9ff59981df1c8430ceefaa186663be82d468a9ce)
+++ uspace/lib/usbhost/src/usb_bus.c	(revision bfff7fd57f2e4cc25a8bbb2950c9cf594c5ddd21)
@@ -301,7 +301,7 @@
 int usb_bus_add_ep(usb_bus_t *instance,
     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, usb_address_t tt_address,
-    unsigned tt_port)
+    usb_transfer_type_t type, size_t max_packet_size, unsigned packets,
+    size_t data_size, ep_add_callback_t callback, void *arg,
+    usb_address_t tt_address, unsigned tt_port)
 {
 	assert(instance);
@@ -337,5 +337,5 @@
 
 	ep = endpoint_create(address, endpoint, direction, type, speed,
-	    max_packet_size, bw, tt_address, tt_port);
+	    max_packet_size, packets, bw, tt_address, tt_port);
 	if (!ep) {
 		fibril_mutex_unlock(&instance->guard);
