Index: uspace/drv/bus/usb/ohci/hc.c
===================================================================
--- uspace/drv/bus/usb/ohci/hc.c	(revision 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ 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 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ 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 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ 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 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ 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 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ 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 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ 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 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ 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 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ 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"
Index: uspace/lib/usb/Makefile
===================================================================
--- uspace/lib/usb/Makefile	(revision 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ uspace/lib/usb/Makefile	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -36,5 +36,4 @@
 SOURCES = \
 	src/class.c \
-	src/ddfiface.c \
 	src/dev.c \
 	src/debug.c \
Index: pace/lib/usb/include/usb/ddfiface.h
===================================================================
--- uspace/lib/usb/include/usb/ddfiface.h	(revision 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ 	(revision )
@@ -1,55 +1,0 @@
-/*
- * Copyright (c) 2011 Vojtech Horky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libusb
- * @{
- */
-/** @file
- * Implementations of DDF interfaces functions.
- */
-
-#ifndef LIBUSB_DDFIFACE_H_
-#define LIBUSB_DDFIFACE_H_
-
-#include <sys/types.h>
-#include <usb_iface.h>
-
-extern int usb_iface_get_hc_handle_device_impl(ddf_fun_t *, devman_handle_t *);
-extern int usb_iface_get_my_address_forward_impl(ddf_fun_t *, usb_address_t *);
-extern usb_iface_t usb_iface_hub_impl;
-
-extern int usb_iface_get_my_address_from_device_data(ddf_fun_t *, usb_address_t *);
-extern usb_iface_t usb_iface_hub_child_impl;
-
-extern int usb_iface_get_hc_handle_hc_impl(ddf_fun_t *, devman_handle_t *);
-
-#endif
-
-/**
- * @}
- */
Index: pace/lib/usb/src/ddfiface.c
===================================================================
--- uspace/lib/usb/src/ddfiface.c	(revision 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ 	(revision )
@@ -1,82 +1,0 @@
-/*
- * Copyright (c) 2011 Vojtech Horky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libusb
- * @{
- */
-/** @file
- * Implementations of DDF interfaces functions (actual implementation).
- */
-
-#include <devman.h>
-#include <async.h>
-#include <usb_iface.h>
-#include <usb/ddfiface.h>
-#include <usb/hc.h>
-#include <usb/debug.h>
-#include <errno.h>
-#include <assert.h>
-
-#include <usb/dev.h>
-
-/** DDF interface for USB device, implementation for typical hub. */
-usb_iface_t usb_iface_hub_impl = {
-	.get_hc_handle = usb_iface_get_hc_handle_device_impl,
-	.get_my_address = usb_iface_get_my_address_forward_impl,
-};
-
-/** Get host controller handle, interface implementation for hub driver.
- *
- * @param[in] fun Device function the operation is running on.
- * @param[out] handle Storage for the host controller handle.
- * @return Error code.
- */
-int usb_iface_get_hc_handle_device_impl(ddf_fun_t *fun, devman_handle_t *handle)
-{
-	assert(fun);
-	return usb_get_hc_by_handle(ddf_fun_get_handle(fun), handle);
-}
-
-/** Get USB device address, interface implementation for hub driver.
- *
- * @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.
- */
-int usb_iface_get_my_address_forward_impl(ddf_fun_t *fun,
-    usb_address_t *address)
-{
-	assert(fun);
-	return usb_get_address_by_handle(ddf_fun_get_handle(fun), address);
-}
-
-
-/**
- * @}
- */
Index: uspace/lib/usbdev/include/usb/dev/device.h
===================================================================
--- uspace/lib/usbdev/include/usb/dev/device.h	(revision 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ uspace/lib/usbdev/include/usb/dev/device.h	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -52,6 +52,14 @@
 typedef struct usb_device usb_device_t;
 
+/* DDF parts */
 int usb_device_create_ddf(ddf_dev_t *, const usb_endpoint_description_t **, const char **);
 void usb_device_destroy_ddf(ddf_dev_t *);
+
+static inline usb_device_t *usb_device_get(ddf_dev_t *dev)
+{
+	assert(dev);
+	return ddf_dev_data_get(dev);
+}
+
 
 usb_device_t * usb_device_create(devman_handle_t);
@@ -87,4 +95,8 @@
 void * usb_device_data_get(usb_device_t *);
 
+/* Legacy support */
+usb_address_t usb_device_address(usb_device_t *);
+devman_handle_t usb_device_hc_handle(usb_device_t*);
+
 #endif
 /**
Index: uspace/lib/usbdev/src/devdrv.c
===================================================================
--- uspace/lib/usbdev/src/devdrv.c	(revision 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ uspace/lib/usbdev/src/devdrv.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -592,4 +592,16 @@
 	return usb_dev->driver_data;
 }
+
+usb_address_t usb_device_address(usb_device_t *usb_dev)
+{
+	assert(usb_dev);
+	return usb_dev->wire.address;
+}
+
+devman_handle_t usb_device_hc_handle(usb_device_t *usb_dev)
+{
+	assert(usb_dev);
+	return usb_dev->hc_conn.hc_handle;
+}
 /**
  * @}
Index: uspace/lib/usbdev/src/recognise.c
===================================================================
--- uspace/lib/usbdev/src/recognise.c	(revision 0eb2a0f3d23215059b2873c71fd866048cdca07a)
+++ uspace/lib/usbdev/src/recognise.c	(revision 4ca778b5f0f922533b6cf07ca4155715fa320238)
@@ -39,5 +39,4 @@
 #include <usb/dev/pipes.h>
 #include <usb/dev/recognise.h>
-#include <usb/ddfiface.h>
 #include <usb/dev/request.h>
 #include <usb/classes/classes.h>
