Index: uspace/lib/usb/src/devdrv.c
===================================================================
--- uspace/lib/usb/src/devdrv.c	(revision e9ce69699966fcb5fe2228f76d75715aad6e3200)
+++ uspace/lib/usb/src/devdrv.c	(revision 8efafda1228de650eb0457178bb7488dcd1ef1ca)
@@ -239,9 +239,10 @@
 
 	/*
-	 * For further actions, we need open session on default control pipe.
+	 * We will do some querying of the device, it is worth to prepare
+	 * the long transfer.
 	 */
-	rc = usb_pipe_start_session(&dev->ctrl_pipe);
-	if (rc != EOK) {
-		usb_log_error("Failed to start an IPC session: %s.\n",
+	rc = usb_pipe_start_long_transfer(&dev->ctrl_pipe);
+	if (rc != EOK) {
+		usb_log_error("Failed to start transfer: %s.\n",
 		    str_error(rc));
 		return rc;
@@ -252,4 +253,5 @@
 	    &dev->descriptors.device);
 	if (rc != EOK) {
+		usb_pipe_end_long_transfer(&dev->ctrl_pipe);
 		usb_log_error("Failed to retrieve device descriptor: %s.\n",
 		    str_error(rc));
@@ -262,4 +264,5 @@
 	    &dev->descriptors.configuration_size);
 	if (rc != EOK) {
+		usb_pipe_end_long_transfer(&dev->ctrl_pipe);
 		usb_log_error("Failed retrieving configuration descriptor: %s. %s\n",
 		    dev->ddf_dev->name, str_error(rc));
@@ -271,6 +274,5 @@
 	}
 
-	/* No checking here. */
-	usb_pipe_end_session(&dev->ctrl_pipe);
+	usb_pipe_end_long_transfer(&dev->ctrl_pipe);
 
 	/* Rollback actions. */
Index: uspace/lib/usb/src/devpoll.c
===================================================================
--- uspace/lib/usb/src/devpoll.c	(revision e9ce69699966fcb5fe2228f76d75715aad6e3200)
+++ uspace/lib/usb/src/devpoll.c	(revision 8efafda1228de650eb0457178bb7488dcd1ef1ca)
@@ -77,16 +77,8 @@
 		int rc;
 
-		rc = usb_pipe_start_session(pipe);
-		if (rc != EOK) {
-			failed_attempts++;
-			continue;
-		}
-
 		size_t actual_size;
 		rc = usb_pipe_read(pipe, polling_data->buffer,
 		    polling_data->request_size, &actual_size);
 
-		/* Quit the session regardless of errors. */
-		usb_pipe_end_session(pipe);
 		
 //		if (rc == ESTALL) {
Index: uspace/lib/usb/src/hub.c
===================================================================
--- uspace/lib/usb/src/hub.c	(revision e9ce69699966fcb5fe2228f76d75715aad6e3200)
+++ uspace/lib/usb/src/hub.c	(revision 8efafda1228de650eb0457178bb7488dcd1ef1ca)
@@ -287,10 +287,4 @@
 	}
 
-	rc = usb_pipe_start_session(&ctrl_pipe);
-	if (rc != EOK) {
-		rc = ENOTCONN;
-		goto leave_unregister_endpoint;
-	}
-
 	rc = usb_request_set_address(&ctrl_pipe, dev_addr);
 	if (rc != EOK) {
@@ -298,6 +292,4 @@
 		goto leave_stop_session;
 	}
-
-	usb_pipe_end_session(&ctrl_pipe);
 
 	/*
Index: uspace/lib/usb/src/pipesinit.c
===================================================================
--- uspace/lib/usb/src/pipesinit.c	(revision e9ce69699966fcb5fe2228f76d75715aad6e3200)
+++ uspace/lib/usb/src/pipesinit.c	(revision 8efafda1228de650eb0457178bb7488dcd1ef1ca)
@@ -416,10 +416,5 @@
 	int rc;
 
-	TRY_LOOP(failed_attempts) {
-		rc = usb_pipe_start_session(pipe);
-		if (rc == EOK) {
-			break;
-		}
-	}
+	rc = usb_pipe_start_long_transfer(pipe);
 	if (rc != EOK) {
 		return rc;
@@ -442,5 +437,5 @@
 		}
 	}
-	usb_pipe_end_session(pipe);
+	usb_pipe_end_long_transfer(pipe);
 	if (rc != EOK) {
 		return rc;
Index: uspace/lib/usb/src/recognise.c
===================================================================
--- uspace/lib/usb/src/recognise.c	(revision e9ce69699966fcb5fe2228f76d75715aad6e3200)
+++ uspace/lib/usb/src/recognise.c	(revision 8efafda1228de650eb0457178bb7488dcd1ef1ca)
@@ -404,15 +404,5 @@
 	child->driver_data = dev_data;
 
-	rc = usb_pipe_start_session(&ctrl_pipe);
-	if (rc != EOK) {
-		goto failure;
-	}
-
 	rc = usb_device_create_match_ids(&ctrl_pipe, &child->match_ids);
-	if (rc != EOK) {
-		goto failure;
-	}
-
-	rc = usb_pipe_end_session(&ctrl_pipe);
 	if (rc != EOK) {
 		goto failure;
