Index: uspace/drv/usbhid/hid.h
===================================================================
--- uspace/drv/usbhid/hid.h	(revision c2772b8f24f0b1dbeac73f461826687e10411f0c)
+++ uspace/drv/usbhid/hid.h	(revision fe4dd14b607dfc4f86f5c66da2dc991b70531dd3)
@@ -39,4 +39,5 @@
 #include <usb/classes/hid.h>
 #include <driver.h>
+#include <usb/pipes.h>
 
 /**
@@ -69,6 +70,8 @@
 	usb_hid_configuration_t *conf;
 	usb_address_t address;
-	usb_endpoint_t poll_endpoint;
 	usb_hid_report_parser_t *parser;
+
+	usb_device_connection_t wire;
+	usb_endpoint_pipe_t poll_pipe;
 } usb_hid_dev_kbd_t;
 
Index: uspace/drv/usbhid/main.c
===================================================================
--- uspace/drv/usbhid/main.c	(revision c2772b8f24f0b1dbeac73f461826687e10411f0c)
+++ uspace/drv/usbhid/main.c	(revision fe4dd14b607dfc4f86f5c66da2dc991b70531dd3)
@@ -43,4 +43,5 @@
 #include <io/console.h>
 #include <errno.h>
+#include <str_error.h>
 #include <fibril.h>
 #include <usb/classes/hid.h>
@@ -380,6 +381,5 @@
 	if (rc < 0) {
 		printf("Problem setting phone to HC.\n");
-		free(kbd_dev);
-		return NULL;
+		goto error_leave;
 	}
 
@@ -387,6 +387,5 @@
 	if (rc < 0) {
 		printf("Problem getting address of the device.\n");
-		free(kbd_dev);
-		return NULL;
+		goto error_leave;
 	}
 
@@ -398,7 +397,4 @@
 //	}
 
-	// default endpoint
-	kbd_dev->poll_endpoint = GUESSED_POLL_ENDPOINT;
-	
 	/*
 	 * will need all descriptors:
@@ -411,5 +407,33 @@
 	usbkbd_process_descriptors(kbd_dev);
 
+
+
+	/*
+	 * Initialize the backing connection to the host controller.
+	 */
+	rc = usb_device_connection_initialize(&kbd_dev->wire, dev);
+	if (rc != EOK) {
+		printf("Problem initializing connection to device: %s.\n",
+		    str_error(rc));
+		goto error_leave;
+	}
+
+	/*
+	 * Initialize device pipes.
+	 */
+	rc = usb_endpoint_pipe_initialize(&kbd_dev->poll_pipe, &kbd_dev->wire,
+	    GUESSED_POLL_ENDPOINT, USB_TRANSFER_INTERRUPT, USB_DIRECTION_IN);
+	if (rc != EOK) {
+		printf("Failed to initialize interrupt in pipe: %s.\n",
+		    str_error(rc));
+		goto error_leave;
+	}
+
+
 	return kbd_dev;
+
+error_leave:
+	free(kbd_dev);
+	return NULL;
 }
 
@@ -436,20 +460,7 @@
 static void usbkbd_poll_keyboard(usb_hid_dev_kbd_t *kbd_dev)
 {
-	int rc;
-	usb_handle_t handle;
+	int rc, sess_rc;
 	uint8_t buffer[BUFFER_SIZE];
 	size_t actual_size;
-	//usb_endpoint_t poll_endpoint = 1;
-
-//	usb_address_t my_address = usb_drv_get_my_address(dev->parent_phone,
-//	    dev);
-//	if (my_address < 0) {
-//		return;
-//	}
-
-	usb_target_t poll_target = {
-		.address = kbd_dev->address,
-		.endpoint = kbd_dev->poll_endpoint
-	};
 
 	printf("Polling keyboard...\n");
@@ -457,15 +468,25 @@
 	while (true) {
 		async_usleep(1000 * 1000 * 2);
-		rc = usb_drv_async_interrupt_in(kbd_dev->device->parent_phone,
-		    poll_target, buffer, BUFFER_SIZE, &actual_size, &handle);
+
+		sess_rc = usb_endpoint_pipe_start_session(&kbd_dev->poll_pipe);
+		if (sess_rc != EOK) {
+			printf("Failed to start a session: %s.\n",
+			    str_error(sess_rc));
+			continue;
+		}
+
+		rc = usb_endpoint_pipe_read(&kbd_dev->poll_pipe, buffer,
+		    BUFFER_SIZE, &actual_size);
+		sess_rc = usb_endpoint_pipe_end_session(&kbd_dev->poll_pipe);
 
 		if (rc != EOK) {
-			printf("Error in usb_drv_async_interrupt_in(): %d\n", rc);
+			printf("Error polling the keyboard: %s.\n",
+			    str_error(rc));
 			continue;
 		}
 
-		rc = usb_drv_async_wait_for(handle);
-		if (rc != EOK) {
-			printf("Error in usb_drv_async_wait_for(): %d\n", rc);
+		if (sess_rc != EOK) {
+			printf("Error closing session: %s.\n",
+			    str_error(sess_rc));
 			continue;
 		}
