Index: uspace/drv/usbmouse/init.c
===================================================================
--- uspace/drv/usbmouse/init.c	(revision 6105fc087659325f79b6b3640e1b55d072a64afd)
+++ uspace/drv/usbmouse/init.c	(revision 489c3e717b06bedddbc086e518d7a166c02aa28c)
@@ -42,5 +42,5 @@
 
 /** Mouse polling endpoint description for boot protocol subclass. */
-static usb_endpoint_description_t poll_endpoint_description = {
+usb_endpoint_description_t poll_endpoint_description = {
 	.transfer_type = USB_TRANSFER_INTERRUPT,
 	.direction = USB_DIRECTION_IN,
@@ -50,53 +50,4 @@
 	.flags = 0
 };
-
-/** Initialize poll pipe.
- *
- * Expects that session is already started on control pipe zero.
- *
- * @param mouse Mouse device.
- * @param my_interface Interface number.
- * @return Error code.
- */
-static int intialize_poll_pipe(usb_mouse_t *mouse, int my_interface)
-{
-	assert(usb_endpoint_pipe_is_session_started(&mouse->ctrl_pipe));
-
-	int rc;
-
-	void *config_descriptor;
-	size_t config_descriptor_size;
-
-	rc = usb_request_get_full_configuration_descriptor_alloc(
-	    &mouse->ctrl_pipe, 0, &config_descriptor, &config_descriptor_size);
-	if (rc != EOK) {
-		return rc;
-	}
-
-	usb_endpoint_mapping_t endpoint_mapping[1] = {
-		{
-			.pipe = &mouse->poll_pipe,
-			.description = &poll_endpoint_description,
-			.interface_no = my_interface
-		}
-	};
-
-	rc = usb_endpoint_pipe_initialize_from_configuration(endpoint_mapping,
-	    1, config_descriptor, config_descriptor_size, &mouse->wire);
-	if (rc != EOK) {
-		return rc;
-	}
-
-	if (!endpoint_mapping[0].present) {
-		return ENOENT;
-	}
-
-	mouse->poll_interval_us = 1000 * endpoint_mapping[0].descriptor->poll_interval;
-
-	usb_log_debug("prepared polling endpoint %d (interval %zu).\n",
-	    mouse->poll_pipe.endpoint_no, mouse->poll_interval_us);
-
-	return EOK;
-}
 
 static void default_connection_handler(ddf_fun_t *, ipc_callid_t, ipc_call_t *);
@@ -143,5 +94,5 @@
  * @return Error code.
  */
-int usb_mouse_create(ddf_dev_t *dev)
+int usb_mouse_create(usb_device_t *dev)
 {
 	usb_mouse_t *mouse = malloc(sizeof(usb_mouse_t));
@@ -149,38 +100,11 @@
 		return ENOMEM;
 	}
-	mouse->device = dev;
+	mouse->dev = dev;
 	mouse->console_phone = -1;
 
 	int rc;
 
-	/* Initialize the backing connection. */
-	rc = usb_device_connection_initialize_from_device(&mouse->wire, dev);
-	if (rc != EOK) {
-		goto leave;
-	}
-
-	/* Initialize the default control pipe. */
-	rc = usb_endpoint_pipe_initialize_default_control(&mouse->ctrl_pipe,
-	    &mouse->wire);
-	if (rc != EOK) {
-		goto leave;
-	}
-
-	rc = usb_endpoint_pipe_start_session(&mouse->ctrl_pipe);
-	if (rc != EOK) {
-		goto leave;
-	}
-
-	rc = intialize_poll_pipe(mouse, usb_device_get_assigned_interface(dev));
-
-	/* We can ignore error here. */
-	usb_endpoint_pipe_end_session(&mouse->ctrl_pipe);
-
-	if (rc != EOK) {
-		goto leave;
-	}
-
 	/* Create DDF function. */
-	mouse->mouse_fun = ddf_fun_create(dev, fun_exposed, "mouse");
+	mouse->mouse_fun = ddf_fun_create(dev->ddf_dev, fun_exposed, "mouse");
 	if (mouse->mouse_fun == NULL) {
 		rc = ENOMEM;
Index: uspace/drv/usbmouse/main.c
===================================================================
--- uspace/drv/usbmouse/main.c	(revision 6105fc087659325f79b6b3640e1b55d072a64afd)
+++ uspace/drv/usbmouse/main.c	(revision 489c3e717b06bedddbc086e518d7a166c02aa28c)
@@ -44,5 +44,5 @@
  * @return Error code.
  */
-static int usbmouse_add_device(ddf_dev_t *dev)
+static int usbmouse_add_device(usb_device_t *dev)
 {
 	int rc = usb_mouse_create(dev);
@@ -52,4 +52,6 @@
 		return rc;
 	}
+
+	usb_log_debug("Polling pipe at endpoint %d.\n", dev->pipes[0].pipe->endpoint_no);
 
 	fid_t poll_fibril = fibril_create(usb_mouse_polling_fibril, dev);
@@ -63,5 +65,5 @@
 
 	usb_log_info("controlling new mouse (handle %llu).\n",
-	    dev->handle);
+	    dev->ddf_dev->handle);
 
 	return EOK;
@@ -69,12 +71,18 @@
 
 /** USB mouse driver ops. */
-static driver_ops_t mouse_driver_ops = {
+static usb_driver_ops_t mouse_driver_ops = {
 	.add_device = usbmouse_add_device,
 };
 
+static usb_endpoint_description_t *endpoints[] = {
+	&poll_endpoint_description,
+	NULL
+};
+
 /** USB mouse driver. */
-static driver_t mouse_driver = {
+static usb_driver_t mouse_driver = {
 	.name = NAME,
-	.driver_ops = &mouse_driver_ops
+	.ops = &mouse_driver_ops,
+	.endpoints = endpoints
 };
 
@@ -83,5 +91,5 @@
 	usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME);
 
-	return ddf_driver_main(&mouse_driver);
+	return usb_driver_main(&mouse_driver);
 }
 
Index: uspace/drv/usbmouse/mouse.c
===================================================================
--- uspace/drv/usbmouse/mouse.c	(revision 6105fc087659325f79b6b3640e1b55d072a64afd)
+++ uspace/drv/usbmouse/mouse.c	(revision 489c3e717b06bedddbc086e518d7a166c02aa28c)
@@ -51,10 +51,10 @@
 {
 	assert(arg != NULL);
-	ddf_dev_t *dev = (ddf_dev_t *) arg;
+	usb_device_t *dev = (usb_device_t *) arg;
 	usb_mouse_t *mouse = (usb_mouse_t *) dev->driver_data;
 
 	assert(mouse);
 
-	size_t buffer_size = mouse->poll_pipe.max_packet_size;
+	size_t buffer_size = POLL_PIPE(dev)->max_packet_size;
 
 	if (buffer_size < 4) {
@@ -84,5 +84,5 @@
 		 */
 
-		rc = usb_endpoint_pipe_start_session(&mouse->poll_pipe);
+		rc = usb_endpoint_pipe_start_session(POLL_PIPE(dev));
 		if (rc != EOK) {
 			usb_log_warning("Failed to start session, will try again: %s.\n",
@@ -91,8 +91,8 @@
 		}
 
-		rc = usb_endpoint_pipe_read(&mouse->poll_pipe,
+		rc = usb_endpoint_pipe_read(POLL_PIPE(dev),
 		    buffer, buffer_size, &actual_size);
 
-		usb_endpoint_pipe_end_session(&mouse->poll_pipe);
+		usb_endpoint_pipe_end_session(POLL_PIPE(dev));
 
 		if (rc != EOK) {
Index: uspace/drv/usbmouse/mouse.h
===================================================================
--- uspace/drv/usbmouse/mouse.h	(revision 6105fc087659325f79b6b3640e1b55d072a64afd)
+++ uspace/drv/usbmouse/mouse.h	(revision 489c3e717b06bedddbc086e518d7a166c02aa28c)
@@ -37,5 +37,5 @@
 #define USBMOUSE_MOUSE_H_
 
-#include <ddf/driver.h>
+#include <usb/devdrv.h>
 #include <usb/pipes.h>
 #include <time.h>
@@ -46,13 +46,7 @@
 typedef struct {
 	/** Generic device container. */
-	ddf_dev_t *device;
+	usb_device_t *dev;
 	/** Function representing the device. */
 	ddf_fun_t *mouse_fun;
-	/** Representation of connection to the device. */
-	usb_device_connection_t wire;
-	/** Default (zero) control pipe. */
-	usb_endpoint_pipe_t ctrl_pipe;
-	/** Polling (in) pipe. */
-	usb_endpoint_pipe_t poll_pipe;
 	/** Polling interval in microseconds. */
 	suseconds_t poll_interval_us;
@@ -61,5 +55,9 @@
 } usb_mouse_t;
 
-int usb_mouse_create(ddf_dev_t *);
+#define POLL_PIPE(dev) ((dev)->pipes[0].pipe)
+
+extern usb_endpoint_description_t poll_endpoint_description;
+
+int usb_mouse_create(usb_device_t *);
 
 int usb_mouse_polling_fibril(void *);
