Index: uspace/lib/drv/generic/remote_usbhc.c
===================================================================
--- uspace/lib/drv/generic/remote_usbhc.c	(revision fbf058965b1da733bf8aab369ad3748d5a49f149)
+++ uspace/lib/drv/generic/remote_usbhc.c	(revision 0a46c41e3250de797aef059df000d7cfc37f1017)
@@ -46,4 +46,6 @@
 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 *);
+static void remote_usbhc_bulk_out(device_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usbhc_bulk_in(device_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usbhc_control_write(device_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usbhc_control_read(device_t *, void *, ipc_callid_t, ipc_call_t *);
@@ -69,4 +71,7 @@
 	remote_usbhc_interrupt_in,
 
+	remote_usbhc_bulk_out,
+	remote_usbhc_bulk_in,
+
 	remote_usbhc_control_write,
 	remote_usbhc_control_read
@@ -389,4 +394,24 @@
 	return remote_usbhc_in_transfer(device, callid, call,
 	    usb_iface->interrupt_in);
+}
+
+void remote_usbhc_bulk_out(device_t *device, void *iface,
+    ipc_callid_t callid, ipc_call_t *call)
+{
+	usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;
+	assert(usb_iface != NULL);
+
+	return remote_usbhc_out_transfer(device, callid, call,
+	    usb_iface->bulk_out);
+}
+
+void remote_usbhc_bulk_in(device_t *device, void *iface,
+    ipc_callid_t callid, ipc_call_t *call)
+{
+	usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;
+	assert(usb_iface != NULL);
+
+	return remote_usbhc_in_transfer(device, callid, call,
+	    usb_iface->bulk_in);
 }
 
Index: uspace/lib/drv/include/usbhc_iface.h
===================================================================
--- uspace/lib/drv/include/usbhc_iface.h	(revision fbf058965b1da733bf8aab369ad3748d5a49f149)
+++ uspace/lib/drv/include/usbhc_iface.h	(revision 0a46c41e3250de797aef059df000d7cfc37f1017)
@@ -153,4 +153,14 @@
 	IPC_M_USBHC_INTERRUPT_IN,
 
+	/** Send bulk data to device.
+	 * See explanation at usb_iface_funcs_t (OUT transaction).
+	 */
+	IPC_M_USBHC_BULK_OUT,
+
+	/** Get bulk data from device.
+	 * See explanation at usb_iface_funcs_t (IN transaction).
+	 */
+	IPC_M_USBHC_BULK_IN,
+
 	/** Issue control WRITE transfer.
 	 * See explanation at usb_iface_funcs_t (OUT transaction) for
@@ -207,4 +217,7 @@
 	usbhc_iface_transfer_in_t interrupt_in;
 
+	usbhc_iface_transfer_out_t bulk_out;
+	usbhc_iface_transfer_in_t bulk_in;
+
 	int (*control_write)(device_t *, usb_target_t,
 	    size_t,
Index: uspace/lib/usb/src/pipesio.c
===================================================================
--- uspace/lib/usb/src/pipesio.c	(revision fbf058965b1da733bf8aab369ad3748d5a49f149)
+++ uspace/lib/usb/src/pipesio.c	(revision 0a46c41e3250de797aef059df000d7cfc37f1017)
@@ -71,4 +71,7 @@
 			ipc_method = IPC_M_USBHC_INTERRUPT_IN;
 			break;
+		case USB_TRANSFER_BULK:
+			ipc_method = IPC_M_USBHC_BULK_IN;
+			break;
 		default:
 			return ENOTSUP;
@@ -194,4 +197,7 @@
 		case USB_TRANSFER_INTERRUPT:
 			ipc_method = IPC_M_USBHC_INTERRUPT_OUT;
+			break;
+		case USB_TRANSFER_BULK:
+			ipc_method = IPC_M_USBHC_BULK_OUT;
 			break;
 		default:
