Index: uspace/lib/usbdev/include/usb/dev/pipes.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/pipes.h	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
+++ uspace/lib/usbdev/include/usb/dev/pipes.h	(revision 70a422b96fb75db8844b413d59447b4eac1e5018)
@@ -42,4 +42,5 @@
 #include <usb/descriptor.h>
 #include <usb/dev/usb_device_connection.h>
+#include <usb_iface.h>
 
 #define CTRL_PIPE_MIN_PACKET_SIZE 8
@@ -69,4 +70,6 @@
 	 */
 	bool auto_reset_halt;
+
+	usb_dev_session_t *bus_session;
 } usb_pipe_t;
 
@@ -106,11 +109,13 @@
 
 int usb_pipe_initialize(usb_pipe_t *, usb_device_connection_t *,
-    usb_endpoint_t, usb_transfer_type_t, size_t, usb_direction_t);
+    usb_endpoint_t, usb_transfer_type_t, size_t, usb_direction_t,
+    usb_dev_session_t *);
 int usb_pipe_initialize_default_control(usb_pipe_t *,
-    usb_device_connection_t *);
+    usb_device_connection_t *, usb_dev_session_t *);
 
 int usb_pipe_probe_default_control(usb_pipe_t *);
 int usb_pipe_initialize_from_configuration(usb_endpoint_mapping_t *,
-    size_t, const uint8_t *, size_t, usb_device_connection_t *);
+    size_t, const uint8_t *, size_t, usb_device_connection_t *,
+    usb_dev_session_t *);
 
 int usb_pipe_register(usb_pipe_t *, unsigned);
Index: uspace/lib/usbdev/src/devdrv.c
===================================================================
--- uspace/lib/usbdev/src/devdrv.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
+++ uspace/lib/usbdev/src/devdrv.c	(revision 70a422b96fb75db8844b413d59447b4eac1e5018)
@@ -237,5 +237,6 @@
 	int rc = usb_pipe_initialize_from_configuration(pipes, pipe_count,
 	    usb_dev->descriptors.full_config,
-	    usb_dev->descriptors.full_config_size, &usb_dev->wire);
+	    usb_dev->descriptors.full_config_size, &usb_dev->wire,
+	    usb_dev->bus_session);
 	if (rc != EOK) {
 		free(pipes);
@@ -454,5 +455,5 @@
 	 * during device initialization. */
 	rc = usb_pipe_initialize_default_control(
-	    &usb_dev->ctrl_pipe, &usb_dev->wire);
+	    &usb_dev->ctrl_pipe, &usb_dev->wire, usb_dev->bus_session);
 	if (rc != EOK) {
 		usb_dev_disconnect(usb_dev->bus_session);
Index: uspace/lib/usbdev/src/pipes.c
===================================================================
--- uspace/lib/usbdev/src/pipes.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
+++ uspace/lib/usbdev/src/pipes.c	(revision 70a422b96fb75db8844b413d59447b4eac1e5018)
@@ -273,5 +273,5 @@
     usb_device_connection_t *connection, usb_endpoint_t endpoint_no,
     usb_transfer_type_t transfer_type, size_t max_packet_size,
-    usb_direction_t direction)
+    usb_direction_t direction, usb_dev_session_t *bus_session)
 {
 	assert(pipe);
@@ -284,4 +284,5 @@
 	pipe->direction = direction;
 	pipe->auto_reset_halt = false;
+	pipe->bus_session = bus_session;
 
 	return EOK;
@@ -295,5 +296,5 @@
  */
 int usb_pipe_initialize_default_control(usb_pipe_t *pipe,
-    usb_device_connection_t *connection)
+    usb_device_connection_t *connection, usb_dev_session_t *bus_session)
 {
 	assert(pipe);
@@ -301,5 +302,5 @@
 
 	int rc = usb_pipe_initialize(pipe, connection, 0, USB_TRANSFER_CONTROL,
-	    CTRL_PIPE_MIN_PACKET_SIZE, USB_DIRECTION_BOTH);
+	    CTRL_PIPE_MIN_PACKET_SIZE, USB_DIRECTION_BOTH, bus_session);
 
 	pipe->auto_reset_halt = true;
Index: uspace/lib/usbdev/src/pipesinit.c
===================================================================
--- uspace/lib/usbdev/src/pipesinit.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
+++ uspace/lib/usbdev/src/pipesinit.c	(revision 70a422b96fb75db8844b413d59447b4eac1e5018)
@@ -155,5 +155,5 @@
     usb_standard_interface_descriptor_t *interface,
     usb_standard_endpoint_descriptor_t *endpoint_desc,
-    usb_device_connection_t *wire)
+    usb_device_connection_t *wire, usb_dev_session_t *bus_session)
 {
 
@@ -196,5 +196,5 @@
 	    ep_no, description.transfer_type,
 	    uint16_usb2host(endpoint_desc->max_packet_size),
-	    description.direction);
+	    description.direction, bus_session);
 	if (rc != EOK) {
 		return rc;
@@ -220,5 +220,5 @@
     usb_endpoint_mapping_t *mapping, size_t mapping_count,
     const usb_dp_parser_t *parser, const usb_dp_parser_data_t *parser_data,
-    const uint8_t *interface_descriptor)
+    const uint8_t *interface_descriptor, usb_dev_session_t *bus_session)
 {
 	const uint8_t *descriptor = usb_dp_get_nested_descriptor(parser,
@@ -236,5 +236,6 @@
 			    (usb_standard_endpoint_descriptor_t *)
 			        descriptor,
-			    (usb_device_connection_t *) parser_data->arg);
+			    (usb_device_connection_t *) parser_data->arg,
+			    bus_session);
 		}
 
@@ -280,5 +281,5 @@
     usb_endpoint_mapping_t *mapping, size_t mapping_count,
     const uint8_t *config_descriptor, size_t config_descriptor_size,
-    usb_device_connection_t *connection)
+    usb_device_connection_t *connection, usb_dev_session_t *bus_session)
 {
 	assert(connection);
@@ -319,5 +320,5 @@
 	do {
 		(void) process_interface(mapping, mapping_count,
-		    &dp_parser, &dp_data, interface);
+		    &dp_parser, &dp_data, interface, bus_session);
 		interface = usb_dp_get_sibling_descriptor(&dp_parser, &dp_data,
 		    config_descriptor, interface);
