Index: uspace/lib/drv/generic/remote_usbhc.c
===================================================================
--- uspace/lib/drv/generic/remote_usbhc.c	(revision 0a6fa9fe59b6049f04024724a7889d8ad48bf28f)
+++ uspace/lib/drv/generic/remote_usbhc.c	(revision 1e64b25007a3434f4217cb4a5f05c0ad5cfb253a)
@@ -42,5 +42,4 @@
 
 static void remote_usbhc_get_address(device_t *, void *, ipc_callid_t, ipc_call_t *);
-static void remote_usbhc_get_buffer(device_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usbhc_interrupt_out(device_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usbhc_interrupt_in(device_t *, void *, ipc_callid_t, ipc_call_t *);
@@ -64,6 +63,4 @@
 	remote_usbhc_get_address,
 
-	remote_usbhc_get_buffer,
-
 	remote_usbhc_reserve_default_address,
 	remote_usbhc_release_default_address,
@@ -157,37 +154,4 @@
 }
 
-void remote_usbhc_get_buffer(device_t *device, void *iface,
-    ipc_callid_t callid, ipc_call_t *call)
-{
-	sysarg_t buffer_hash = DEV_IPC_GET_ARG1(*call);
-	async_transaction_t * trans = (async_transaction_t *)buffer_hash;
-	if (trans == NULL) {
-		async_answer_0(callid, ENOENT);
-		return;
-	}
-	if (trans->buffer == NULL) {
-		async_answer_0(callid, EINVAL);
-		async_transaction_destroy(trans);
-		return;
-	}
-
-	ipc_callid_t cid;
-	size_t accepted_size;
-	if (!async_data_read_receive(&cid, &accepted_size)) {
-		async_answer_0(callid, EINVAL);
-		async_transaction_destroy(trans);
-		return;
-	}
-
-	if (accepted_size > trans->size) {
-		accepted_size = trans->size;
-	}
-	async_data_read_finalize(cid, trans->buffer, accepted_size);
-
-	async_answer_1(callid, EOK, accepted_size);
-
-	async_transaction_destroy(trans);
-}
-
 void remote_usbhc_reserve_default_address(device_t *device, void *iface,
     ipc_callid_t callid, ipc_call_t *call)
@@ -304,4 +268,6 @@
 
 	async_answer_0(trans->caller, USB_OUTCOME_OK);
+
+	async_transaction_destroy(trans);
 }
 
Index: uspace/lib/drv/include/usbhc_iface.h
===================================================================
--- uspace/lib/drv/include/usbhc_iface.h	(revision 0a6fa9fe59b6049f04024724a7889d8ad48bf28f)
+++ uspace/lib/drv/include/usbhc_iface.h	(revision 1e64b25007a3434f4217cb4a5f05c0ad5cfb253a)
@@ -66,21 +66,12 @@
  *   - argument #2 is target endpoint
  *   - argument #3 is buffer size
+ * - this call is immediately followed by IPC data read (async version)
  * - the call is not answered until the device returns some data (or until
  *   error occurs)
- * - if the call is answered with EOK, first argument of the answer is buffer
- *   hash that could be used to retrieve the actual data
  *
  * Some special methods (NO-DATA transactions) do not send any data. These
  * might behave as both OUT or IN transactions because communication parts
  * where actual buffers are exchanged are omitted.
- *
- * The mentioned data retrieval can be done any time after receiving EOK
- * answer to IN method.
- * This retrieval is done using the IPC_M_USBHC_GET_BUFFER where
- * the first argument is buffer hash from call answer.
- * This call must be immediately followed by data read-in and after the
- * data are transferred, the initial call (IPC_M_USBHC_GET_BUFFER)
- * is answered. Each buffer can be retrieved only once.
- *
+ **
  * For all these methods, wrap functions exists. Important rule: functions
  * for IN transactions have (as parameters) buffers where retrieved data
@@ -104,11 +95,4 @@
 	IPC_M_USBHC_GET_ADDRESS,
 
-	/** Asks for data buffer.
-	 * See explanation at usb_iface_funcs_t.
-	 * This function does not have counter part in functional interface
-	 * as it is handled by the remote part itself.
-	 */
-	IPC_M_USBHC_GET_BUFFER,
-
 
 	/** Reserve usage of default address.
