Index: uspace/lib/c/include/ipc/dev_iface.h
===================================================================
--- uspace/lib/c/include/ipc/dev_iface.h	(revision 90fb67905fb2165ffde39c28adcb4300e314a450)
+++ uspace/lib/c/include/ipc/dev_iface.h	(revision eac610e188a3fe299c1cae932e3524e7415b491d)
@@ -54,4 +54,14 @@
 	DEV_IFACE_ID(DEV_FIRST_CUSTOM_METHOD_IDX)
 
+/*
+ * The first argument is actually method (as the "real" method is used
+ * for indexing into interfaces.
+ */
+
+#define DEV_IPC_GET_ARG1(call) IPC_GET_ARG2((call))
+#define DEV_IPC_GET_ARG2(call) IPC_GET_ARG3((call))
+#define DEV_IPC_GET_ARG3(call) IPC_GET_ARG4((call))
+#define DEV_IPC_GET_ARG4(call) IPC_GET_ARG5((call))
+
 
 #endif
Index: uspace/lib/drv/generic/remote_usbhc.c
===================================================================
--- uspace/lib/drv/generic/remote_usbhc.c	(revision 90fb67905fb2165ffde39c28adcb4300e314a450)
+++ uspace/lib/drv/generic/remote_usbhc.c	(revision eac610e188a3fe299c1cae932e3524e7415b491d)
@@ -108,5 +108,5 @@
 	}
 
-	devman_handle_t handle = IPC_GET_ARG1(*call);
+	devman_handle_t handle = DEV_IPC_GET_ARG1(*call);
 
 	usb_address_t address;
@@ -122,5 +122,5 @@
     ipc_callid_t callid, ipc_call_t *call)
 {
-	ipcarg_t buffer_hash = IPC_GET_ARG1(*call);
+	ipcarg_t buffer_hash = DEV_IPC_GET_ARG1(*call);
 	async_transaction_t * trans = (async_transaction_t *)buffer_hash;
 	if (trans == NULL) {
@@ -144,5 +144,5 @@
 		accepted_size = trans->size;
 	}
-	async_data_read_finalize(callid, trans->buffer, accepted_size);
+	async_data_read_finalize(cid, trans->buffer, accepted_size);
 
 	ipc_answer_1(callid, EOK, accepted_size);
@@ -211,6 +211,6 @@
 	}
 
-	usb_address_t address = (usb_address_t) IPC_GET_ARG1(*call);
-	devman_handle_t handle = (devman_handle_t) IPC_GET_ARG2(*call);
+	usb_address_t address = (usb_address_t) DEV_IPC_GET_ARG1(*call);
+	devman_handle_t handle = (devman_handle_t) DEV_IPC_GET_ARG2(*call);
 
 	int rc = usb_iface->bind_address(device, address, handle);
@@ -229,5 +229,5 @@
 	}
 
-	usb_address_t address = (usb_address_t) IPC_GET_ARG1(*call);
+	usb_address_t address = (usb_address_t) DEV_IPC_GET_ARG1(*call);
 
 	int rc = usb_iface->release_address(device, address);
@@ -275,8 +275,8 @@
 	}
 
-	size_t expected_len = IPC_GET_ARG3(*call);
+	size_t expected_len = DEV_IPC_GET_ARG3(*call);
 	usb_target_t target = {
-		.address = IPC_GET_ARG1(*call),
-		.endpoint = IPC_GET_ARG2(*call)
+		.address = DEV_IPC_GET_ARG1(*call),
+		.endpoint = DEV_IPC_GET_ARG2(*call)
 	};
 
@@ -327,8 +327,8 @@
 	}
 
-	size_t len = IPC_GET_ARG3(*call);
+	size_t len = DEV_IPC_GET_ARG3(*call);
 	usb_target_t target = {
-		.address = IPC_GET_ARG1(*call),
-		.endpoint = IPC_GET_ARG2(*call)
+		.address = DEV_IPC_GET_ARG1(*call),
+		.endpoint = DEV_IPC_GET_ARG2(*call)
 	};
 
@@ -384,6 +384,6 @@
 
 	usb_target_t target = {
-		.address = IPC_GET_ARG1(*call),
-		.endpoint = IPC_GET_ARG2(*call)
+		.address = DEV_IPC_GET_ARG1(*call),
+		.endpoint = DEV_IPC_GET_ARG2(*call)
 	};
 
Index: uspace/lib/usb/src/usbdrvreq.c
===================================================================
--- uspace/lib/usb/src/usbdrvreq.c	(revision 90fb67905fb2165ffde39c28adcb4300e314a450)
+++ uspace/lib/usb/src/usbdrvreq.c	(revision eac610e188a3fe299c1cae932e3524e7415b491d)
@@ -117,5 +117,5 @@
 	/* Prepare the setup packet. */
 	usb_device_request_setup_packet_t setup_packet = {
-		.request_type = 0,
+		.request_type = 128,
 		.request = USB_DEVREQ_GET_DESCRIPTOR,
 		.index = 0,
@@ -130,5 +130,5 @@
 	/* Start the control read transfer. */
 	rc = usb_drv_async_control_read_setup(phone, target,
-	    &setup_packet, sizeof(setup_packet), &handle);
+	    &setup_packet, sizeof(usb_device_request_setup_packet_t), &handle);
 	if (rc != EOK) {
 		return rc;
