Index: uspace/lib/usbhost/include/usb/host/ddf_helpers.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/ddf_helpers.h	(revision d51ba3594ad3b5361b07dae7b42a43e5f7ebaa56)
+++ uspace/lib/usbhost/include/usb/host/ddf_helpers.h	(revision f29643d55ae56a73135a7267949c9bf237362002)
@@ -51,5 +51,5 @@
 
 typedef struct {
-	hc_driver_t ops;
+	hcd_ops_t ops;
 	claim_t claim;
 	usb_speed_t hc_speed;
Index: uspace/lib/usbhost/include/usb/host/hcd.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/hcd.h	(revision d51ba3594ad3b5361b07dae7b42a43e5f7ebaa56)
+++ uspace/lib/usbhost/include/usb/host/hcd.h	(revision f29643d55ae56a73135a7267949c9bf237362002)
@@ -55,6 +55,4 @@
 
 typedef struct {
-	/** Device specific driver data. */
-	void *data;
 	/** Transfer scheduling, implement in device driver. */
 	schedule_hook_t schedule;
@@ -67,5 +65,5 @@
 	/** Periodic polling hook */
 	status_hook_t status_hook;
-} hc_driver_t;
+} hcd_ops_t;
 
 /** Generic host controller driver structure. */
@@ -74,9 +72,11 @@
 	usb_bus_t bus;
 
-	/** Driver implementation */
-	hc_driver_t driver;
-
 	/** Interrupt replacement fibril */
 	fid_t polling_fibril;
+
+	/** Driver implementation */
+	hcd_ops_t ops;
+	/** Device specific driver data. */
+	void * driver_data;
 };
 
@@ -85,14 +85,19 @@
 
 static inline void hcd_set_implementation(hcd_t *hcd, void *data,
-    schedule_hook_t schedule, ep_add_hook_t add_hook, ep_remove_hook_t rem_hook,
-    interrupt_hook_t irq_hook, status_hook_t status_hook)
+    const hcd_ops_t *ops)
 {
 	assert(hcd);
-	hcd->driver.data = data;
-	hcd->driver.schedule = schedule;
-	hcd->driver.ep_add_hook = add_hook;
-	hcd->driver.ep_remove_hook = rem_hook;
-	hcd->driver.irq_hook = irq_hook;
-	hcd->driver.status_hook = status_hook;
+	if (ops) {
+		hcd->driver_data = data;
+		hcd->ops = *ops;
+	} else {
+		memset(&hcd->ops, 0, sizeof(hcd->ops));
+	}
+}
+
+static inline void * hcd_get_driver_data(hcd_t *hcd)
+{
+	assert(hcd);
+	return hcd->driver_data;
 }
 
