Index: uspace/drv/hid/usbhid/main.c
===================================================================
--- uspace/drv/hid/usbhid/main.c	(revision 91173333ffad8030d872b4bac54acc3311e9e3c1)
+++ uspace/drv/hid/usbhid/main.c	(revision 8b71f3e7d8255e3651a3c9506da74aec01714454)
@@ -89,17 +89,5 @@
 	 * This will create a separate fibril that will query the device
 	 * for the data continuously. */
-	const usb_device_polling_config_t config = {
-		.debug = 1,
-		.auto_clear_halt = true,
-		.delay = -1,
-		.max_failures = 3,
-		.on_data = usb_hid_polling_callback,
-		.on_polling_end = usb_hid_polling_ended_callback,
-		.on_error = usb_hid_polling_error_callback,
-		.arg = hid_dev,
-	};
-
-	rc = usb_device_poll(dev, hid_dev->poll_pipe_mapping, &config,
-	    hid_dev->poll_pipe_mapping->pipe.desc.max_transfer_size, &hid_dev->polling);
+	rc = usb_polling_start(&hid_dev->polling);
 
 	if (rc != EOK) {
@@ -122,6 +110,6 @@
 	assert(hid_dev);
 
-	/* Join polling fibril. */
-	usb_device_poll_join(hid_dev->polling);
+	/* Join polling fibril (ignoring error code). */
+	usb_polling_join(&hid_dev->polling);
 
 	/* Clean up. */
Index: uspace/drv/hid/usbhid/usbhid.c
===================================================================
--- uspace/drv/hid/usbhid/usbhid.c	(revision 91173333ffad8030d872b4bac54acc3311e9e3c1)
+++ uspace/drv/hid/usbhid/usbhid.c	(revision 8b71f3e7d8255e3651a3c9506da74aec01714454)
@@ -445,4 +445,18 @@
 			    ".\n");
 		}
+
+		usb_polling_t *polling = &hid_dev->polling;
+		if ((rc = usb_polling_init(polling))) {
+			// FIXME
+		}
+
+		polling->device = hid_dev->usb_dev;
+		polling->ep_mapping = hid_dev->poll_pipe_mapping;
+		polling->request_size = hid_dev->poll_pipe_mapping->pipe.desc.max_transfer_size;
+		polling->buffer = malloc(polling->request_size);
+		polling->on_data = usb_hid_polling_callback,
+		polling->on_polling_end = usb_hid_polling_ended_callback,
+		polling->on_error = usb_hid_polling_error_callback,
+		polling->arg = hid_dev;
 	}
 
@@ -537,4 +551,7 @@
 	assert(hid_dev->subdrivers != NULL || hid_dev->subdriver_count == 0);
 
+	free(hid_dev->polling.buffer);
+	usb_polling_fini(&hid_dev->polling);
+
 	usb_log_debug("Subdrivers: %p, subdriver count: %d\n",
 	    hid_dev->subdrivers, hid_dev->subdriver_count);
Index: uspace/drv/hid/usbhid/usbhid.h
===================================================================
--- uspace/drv/hid/usbhid/usbhid.h	(revision 91173333ffad8030d872b4bac54acc3311e9e3c1)
+++ uspace/drv/hid/usbhid/usbhid.h	(revision 8b71f3e7d8255e3651a3c9506da74aec01714454)
@@ -107,6 +107,6 @@
 	usb_endpoint_mapping_t *poll_pipe_mapping;
 
-	/** Device polling handle. */
-	usb_device_polling_t *polling;
+	/** Device polling structure. */
+	usb_polling_t polling;
 
 	/** Subdrivers. */
