Index: uspace/drv/bus/usb/ohci/hc.c
===================================================================
--- uspace/drv/bus/usb/ohci/hc.c	(revision e2dfa86733b86ade5cb6b53182cd0ac27f4c5125)
+++ uspace/drv/bus/usb/ohci/hc.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -41,5 +41,4 @@
 #include <usb/debug.h>
 #include <usb/usb.h>
-#include <usb/ddfiface.h>
 
 #include "hc.h"
Index: uspace/drv/bus/usb/ohci/ohci.c
===================================================================
--- uspace/drv/bus/usb/ohci/ohci.c	(revision e2dfa86733b86ade5cb6b53182cd0ac27f4c5125)
+++ uspace/drv/bus/usb/ohci/ohci.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -38,5 +38,4 @@
 #include <ddf/interrupt.h>
 #include <usb/usb.h>
-#include <usb/ddfiface.h>
 #include <usb/debug.h>
 
Index: uspace/drv/bus/usb/uhci/main.c
===================================================================
--- uspace/drv/bus/usb/uhci/main.c	(revision e2dfa86733b86ade5cb6b53182cd0ac27f4c5125)
+++ uspace/drv/bus/usb/uhci/main.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -36,5 +36,4 @@
 #include <str_error.h>
 
-#include <usb/ddfiface.h>
 #include <usb/debug.h>
 
Index: uspace/drv/bus/usb/uhci/uhci.c
===================================================================
--- uspace/drv/bus/usb/uhci/uhci.c	(revision e2dfa86733b86ade5cb6b53182cd0ac27f4c5125)
+++ uspace/drv/bus/usb/uhci/uhci.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -40,5 +40,4 @@
 #include <str_error.h>
 #include <ddf/interrupt.h>
-#include <usb/ddfiface.h>
 #include <usb/debug.h>
 #include <usb/host/hcd.h>
Index: uspace/drv/bus/usb/usbhub/usbhub.c
===================================================================
--- uspace/drv/bus/usb/usbhub/usbhub.c	(revision e2dfa86733b86ade5cb6b53182cd0ac27f4c5125)
+++ uspace/drv/bus/usb/usbhub/usbhub.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -45,5 +45,4 @@
 #include <usb/dev/pipes.h>
 #include <usb/classes/classes.h>
-#include <usb/ddfiface.h>
 #include <usb/descriptor.h>
 #include <usb/dev/recognise.h>
Index: uspace/drv/bus/usb/usbmid/explore.c
===================================================================
--- uspace/drv/bus/usb/usbmid/explore.c	(revision e2dfa86733b86ade5cb6b53182cd0ac27f4c5125)
+++ uspace/drv/bus/usb/usbmid/explore.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -40,11 +40,5 @@
 #include <usb/dev/request.h>
 #include <usb/dev/dp.h>
-#include <usb/ddfiface.h>
 #include "usbmid.h"
-
-/** Operations of the device itself. */
-static ddf_dev_ops_t mid_device_ops = {
-	.interfaces[USB_DEV_IFACE] = &usb_iface_hub_impl
-};
 
 /** Tell whether given interface is already in the list.
@@ -93,5 +87,5 @@
 	/* Walk all descriptors nested in the current configuration decriptor;
 	 * i.e. all interface descriptors. */
-	for (;interface_ptr != NULL;
+	for (; interface_ptr != NULL;
 	    interface_ptr = usb_dp_get_sibling_descriptor(
 	        &parser, &data, config_descriptor, interface_ptr))
@@ -170,7 +164,5 @@
 		return rc;
 	}
-
 	
-
 	/* Create driver soft-state. */
 	usb_mid_t *usb_mid = usb_device_data_alloc(dev, sizeof(usb_mid_t));
@@ -186,5 +178,4 @@
 		return ENOMEM;
 	}
-	ddf_fun_set_ops(usb_mid->ctl_fun, &mid_device_ops);
 
 	/* Bind control function. */
@@ -197,5 +188,4 @@
 	}
 
-
 	/* Create interface children. */
 	list_initialize(&usb_mid->interface_list);
Index: uspace/drv/bus/usb/usbmid/usbmid.c
===================================================================
--- uspace/drv/bus/usb/usbmid/usbmid.c	(revision e2dfa86733b86ade5cb6b53182cd0ac27f4c5125)
+++ uspace/drv/bus/usb/usbmid/usbmid.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -39,12 +39,43 @@
 #include <stdlib.h>
 #include <usb_iface.h>
-#include <usb/ddfiface.h>
 #include <usb/dev/pipes.h>
 #include <usb/classes/classes.h>
 #include <usb/dev/recognise.h>
 #include "usbmid.h"
+/** Get host controller handle by calling the parent usb_device_t.
+ *
+ * @param[in] fun Device function the operation is running on.
+ * @param[out] handle Storage for the host controller handle.
+ * @return Error code.
+ */
+static int usb_iface_device_hc_handle(ddf_fun_t *fun, devman_handle_t *handle)
+{
+	assert(handle);
+	assert(fun);
+	usb_device_t *usb_dev = usb_device_get(ddf_fun_get_dev(fun));
+	assert(usb_dev);
+	*handle = usb_device_hc_handle(usb_dev);
+	return EOK;
+}
+
+/** Get USB device address by calling the parent usb_device_t.
+ *
+ * @param[in] fun Device function the operation is running on.
+ * @param[in] handle Devman handle of USB device we want address of.
+ * @param[out] address Storage for USB address of device with handle @p handle.
+ * @return Error code.
+ */
+static int usb_iface_device_address(ddf_fun_t *fun, usb_address_t *address)
+{
+	assert(address);
+	assert(fun);
+	usb_device_t *usb_dev = usb_device_get(ddf_fun_get_dev(fun));
+	assert(usb_dev);
+	*address = usb_device_address(usb_dev);
+	return EOK;
+}
 
 /** Callback for DDF USB interface. */
-static int usb_iface_get_interface_impl(ddf_fun_t *fun, int *iface_no)
+static int usb_iface_iface(ddf_fun_t *fun, int *iface_no)
 {
 	usbmid_interface_t *iface = ddf_fun_data_get(fun);
@@ -60,7 +91,7 @@
 /** DDF interface of the child - interface function. */
 static usb_iface_t child_usb_iface = {
-	.get_hc_handle = usb_iface_get_hc_handle_device_impl,
-	.get_my_address = usb_iface_get_my_address_forward_impl,
-	.get_my_interface = usb_iface_get_interface_impl,
+	.get_hc_handle = usb_iface_device_hc_handle,
+	.get_my_address = usb_iface_device_address,
+	.get_my_interface = usb_iface_iface,
 };
 
Index: uspace/drv/bus/usb/vhc/main.c
===================================================================
--- uspace/drv/bus/usb/vhc/main.c	(revision e2dfa86733b86ade5cb6b53182cd0ac27f4c5125)
+++ uspace/drv/bus/usb/vhc/main.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -41,5 +41,4 @@
 #include <usb/host/ddf_helpers.h>
 
-#include <usb/ddfiface.h>
 #include <usb/debug.h>
 #include "vhcd.h"
