Index: uspace/drv/bus/usb/ohci/ohci.c
===================================================================
--- uspace/drv/bus/usb/ohci/ohci.c	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/drv/bus/usb/ohci/ohci.c	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -76,15 +76,13 @@
 }
 /*----------------------------------------------------------------------------*/
-/** Get address of the device identified by handle.
- *
- * @param[in] dev DDF instance of the device to use.
- * @param[in] iid (Unused).
- * @param[in] call Pointer to the call that represents interrupt.
- */
-static int usb_iface_get_address(
-    ddf_fun_t *fun, devman_handle_t handle, usb_address_t *address)
+/** Get USB address assigned to root hub.
+ *
+ * @param[in] fun Root hub function.
+ * @param[out] address Store the address here.
+ * @return Error code.
+ */
+static int rh_get_my_address(ddf_fun_t *fun, usb_address_t *address)
 {
 	assert(fun);
-	assert(handle == 0);
 
 	if (address != NULL) {
@@ -101,5 +99,5 @@
  * @return Error code.
  */
-static int usb_iface_get_hc_handle(
+static int rh_get_hc_handle(
     ddf_fun_t *fun, devman_handle_t *handle)
 {
@@ -115,6 +113,6 @@
 /** Root hub USB interface */
 static usb_iface_t usb_iface = {
-	.get_hc_handle = usb_iface_get_hc_handle,
-	.get_address = usb_iface_get_address
+	.get_hc_handle = rh_get_hc_handle,
+	.get_my_address = rh_get_my_address,
 };
 /*----------------------------------------------------------------------------*/
Index: uspace/drv/bus/usb/usbmid/usbmid.c
===================================================================
--- uspace/drv/bus/usb/usbmid/usbmid.c	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/drv/bus/usb/usbmid/usbmid.c	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -63,6 +63,6 @@
 static usb_iface_t child_usb_iface = {
 	.get_hc_handle = usb_iface_get_hc_handle_device_impl,
-	.get_address = usb_iface_get_address_forward_impl,
-	.get_interface = usb_iface_get_interface_impl
+	.get_my_address = usb_iface_get_my_address_forward_impl,
+	.get_interface = usb_iface_get_interface_impl,
 };
 
Index: uspace/drv/bus/usb/vhc/connhost.c
===================================================================
--- uspace/drv/bus/usb/vhc/connhost.c	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/drv/bus/usb/vhc/connhost.c	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -479,6 +479,5 @@
 }
 
-static int tell_address(ddf_fun_t *fun, devman_handle_t handle,
-    usb_address_t *address)
+static int tell_address(ddf_fun_t *fun, usb_address_t *address)
 {
 	UNSUPPORTED("tell_address");
@@ -497,12 +496,9 @@
 }
 
-static int tell_address_rh(ddf_fun_t *root_hub_fun, devman_handle_t handle,
-    usb_address_t *address)
+static int tell_address_rh(ddf_fun_t *root_hub_fun, usb_address_t *address)
 {
 	VHC_DATA(vhc, root_hub_fun);
 
-	if (handle == 0) {
-		handle = root_hub_fun->handle;
-	}
+	devman_handle_t handle = root_hub_fun->handle;
 
 	usb_log_debug("tell_address_rh(handle=%" PRIun ")\n", handle);
@@ -532,10 +528,10 @@
 usb_iface_t vhc_usb_iface = {
 	.get_hc_handle = usb_iface_get_hc_handle_hc_impl,
-	.get_address = tell_address
+	.get_my_address = tell_address
 };
 
 usb_iface_t rh_usb_iface = {
 	.get_hc_handle = usb_iface_get_hc_handle_rh_impl,
-	.get_address = tell_address_rh
+	.get_my_address = tell_address_rh
 };
 
Index: uspace/lib/drv/generic/remote_usb.c
===================================================================
--- uspace/lib/drv/generic/remote_usb.c	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/lib/drv/generic/remote_usb.c	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -40,5 +40,5 @@
 
 
-static void remote_usb_get_address(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usb_get_my_address(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usb_get_interface(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usb_get_hc_handle(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
@@ -47,7 +47,7 @@
 /** Remote USB interface operations. */
 static remote_iface_func_ptr_t remote_usb_iface_ops [] = {
-	remote_usb_get_address,
-	remote_usb_get_interface,
-	remote_usb_get_hc_handle
+	[IPC_M_USB_GET_MY_ADDRESS] = remote_usb_get_my_address,
+	[IPC_M_USB_GET_INTERFACE] = remote_usb_get_interface,
+	[IPC_M_USB_GET_HOST_CONTROLLER_HANDLE] = remote_usb_get_hc_handle,
 };
 
@@ -61,18 +61,16 @@
 
 
-void remote_usb_get_address(ddf_fun_t *fun, void *iface,
+void remote_usb_get_my_address(ddf_fun_t *fun, void *iface,
     ipc_callid_t callid, ipc_call_t *call)
 {
 	usb_iface_t *usb_iface = (usb_iface_t *) iface;
 
-	if (usb_iface->get_address == NULL) {
+	if (usb_iface->get_my_address == NULL) {
 		async_answer_0(callid, ENOTSUP);
 		return;
 	}
 
-	devman_handle_t handle = DEV_IPC_GET_ARG1(*call);
-
 	usb_address_t address;
-	int rc = usb_iface->get_address(fun, handle, &address);
+	int rc = usb_iface->get_my_address(fun, &address);
 	if (rc != EOK) {
 		async_answer_0(callid, rc);
Index: uspace/lib/drv/include/usb_iface.h
===================================================================
--- uspace/lib/drv/include/usb_iface.h	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/lib/drv/include/usb_iface.h	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -65,5 +65,5 @@
 	 * handle must be resolved by its parent.
 	 */
-	IPC_M_USB_GET_ADDRESS,
+	IPC_M_USB_GET_MY_ADDRESS,
 
 	/** Tell interface number given device can use.
@@ -90,5 +90,5 @@
 /** USB device communication interface. */
 typedef struct {
-	int (*get_address)(ddf_fun_t *, devman_handle_t, usb_address_t *);
+	int (*get_my_address)(ddf_fun_t *, usb_address_t *);
 	int (*get_interface)(ddf_fun_t *, devman_handle_t, int *);
 	int (*get_hc_handle)(ddf_fun_t *, devman_handle_t *);
Index: uspace/lib/usb/include/usb/ddfiface.h
===================================================================
--- uspace/lib/usb/include/usb/ddfiface.h	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/lib/usb/include/usb/ddfiface.h	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -40,14 +40,11 @@
 
 int usb_iface_get_hc_handle_device_impl(ddf_fun_t *, devman_handle_t *);
-int usb_iface_get_address_forward_impl(ddf_fun_t *, devman_handle_t,
-    usb_address_t *);
+int usb_iface_get_my_address_forward_impl(ddf_fun_t *, usb_address_t *);
 extern usb_iface_t usb_iface_hub_impl;
 
-int usb_iface_get_address_from_device_data(ddf_fun_t *, devman_handle_t,
-    usb_address_t *);
+int usb_iface_get_my_address_from_device_data(ddf_fun_t *, usb_address_t *);
 extern usb_iface_t usb_iface_hub_child_impl;
 
 int usb_iface_get_hc_handle_hc_impl(ddf_fun_t *, devman_handle_t *);
-
 
 #endif
Index: uspace/lib/usb/include/usb/hc.h
===================================================================
--- uspace/lib/usb/include/usb/hc.h	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/lib/usb/include/usb/hc.h	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -62,5 +62,5 @@
     devman_handle_t *);
 
-usb_address_t usb_hc_get_address_by_handle(devman_handle_t);
+usb_address_t usb_get_address_by_handle(devman_handle_t);
 
 int usb_hc_find(devman_handle_t, devman_handle_t *);
Index: uspace/lib/usb/src/ddfiface.c
===================================================================
--- uspace/lib/usb/src/ddfiface.c	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/lib/usb/src/ddfiface.c	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -44,13 +44,13 @@
 
 /** DDF interface for USB device, implementation for typical hub. */
-usb_iface_t  usb_iface_hub_impl = {
+usb_iface_t usb_iface_hub_impl = {
 	.get_hc_handle = usb_iface_get_hc_handle_device_impl,
-	.get_address = usb_iface_get_address_forward_impl,
+	.get_my_address = usb_iface_get_my_address_forward_impl,
 };
 
 /** DDF interface for USB device, implementation for child of a typical hub. */
-usb_iface_t  usb_iface_hub_child_impl = {
+usb_iface_t usb_iface_hub_child_impl = {
 	.get_hc_handle = usb_iface_get_hc_handle_device_impl,
-	.get_address = usb_iface_get_address_from_device_data,
+	.get_my_address = usb_iface_get_my_address_from_device_data,
 };
 
@@ -92,9 +92,8 @@
  * @return Error code.
  */
-int usb_iface_get_address_forward_impl(ddf_fun_t *fun, devman_handle_t handle,
+int usb_iface_get_my_address_forward_impl(ddf_fun_t *fun,
     usb_address_t *address)
 {
 	assert(fun);
-	assert(handle == 0);
 
 	async_sess_t *parent_sess =
@@ -107,6 +106,6 @@
 
 	sysarg_t addr;
-	int rc = async_req_2_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
-	    IPC_M_USB_GET_ADDRESS, handle, &addr);
+	int rc = async_req_1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
+	    IPC_M_USB_GET_MY_ADDRESS, &addr);
 
 	async_exchange_end(exch);
@@ -133,9 +132,8 @@
  * @return Error code.
  */
-int usb_iface_get_address_from_device_data(ddf_fun_t *fun,
-    devman_handle_t handle, usb_address_t *address)
+int usb_iface_get_my_address_from_device_data(ddf_fun_t *fun,
+    usb_address_t *address)
 {
 	assert(fun);
-	assert(handle == 0);
 	assert(fun->driver_data);
 	usb_hub_attached_device_t *device = fun->driver_data;
Index: uspace/lib/usb/src/hc.c
===================================================================
--- uspace/lib/usb/src/hc.c	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/lib/usb/src/hc.c	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -174,5 +174,5 @@
  * @return USB address or negative error code.
  */
-usb_address_t usb_hc_get_address_by_handle(devman_handle_t dev_handle)
+usb_address_t usb_get_address_by_handle(devman_handle_t dev_handle)
 {
 	async_sess_t *parent_sess =
@@ -185,7 +185,6 @@
 	
 	sysarg_t address;
-	int rc = async_req_2_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
-	    IPC_M_USB_GET_ADDRESS,
-	    dev_handle, &address);
+	int rc = async_req_1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
+	    IPC_M_USB_GET_MY_ADDRESS, &address);
 	
 	async_exchange_end(exch);
Index: uspace/lib/usb/src/resolve.c
===================================================================
--- uspace/lib/usb/src/resolve.c	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/lib/usb/src/resolve.c	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -200,5 +200,5 @@
 		/* Try to get its address. */
 		if (!found_addr) {
-			dev_addr = usb_hc_get_address_by_handle(tmp_handle);
+			dev_addr = usb_get_address_by_handle(tmp_handle);
 			if (dev_addr >= 0) {
 				found_addr = true;
Index: uspace/lib/usbdev/src/pipes.c
===================================================================
--- uspace/lib/usbdev/src/pipes.c	(revision d25e0a4b4a564c5cf1ee116fb876c3cc6e4f5444)
+++ uspace/lib/usbdev/src/pipes.c	(revision 27ed734ca1edb1dbac9f39a53b2fd7ed46b2b7f4)
@@ -56,12 +56,7 @@
 	async_exch_t *exch = async_exchange_begin(sess);
 	
-	/*
-	 * We are sending special value as a handle - zero - to get
-	 * handle of the parent function (that handle was used
-	 * when registering our device @p dev.
-	 */
 	sysarg_t address;
-	int rc = async_req_2_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
-	    IPC_M_USB_GET_ADDRESS, 0, &address);
+	int rc = async_req_1_1(exch, DEV_IFACE_ID(USB_DEV_IFACE),
+	    IPC_M_USB_GET_MY_ADDRESS, &address);
 	
 	async_exchange_end(exch);
