Index: uspace/lib/usbhost/include/usb/host/batch.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/batch.h	(revision ffe3fe12b19081143903cc87cf2647a6fb8899d0)
+++ uspace/lib/usbhost/include/usb/host/batch.h	(revision a00ac0715a9def8198a1019fdf6580eb3ac9d02a)
@@ -41,4 +41,6 @@
 #include <usb/host/endpoint.h>
 
+#define USB_SETUP_PACKET_SIZE 8
+
 typedef struct usb_transfer_batch usb_transfer_batch_t;
 struct usb_transfer_batch {
@@ -49,5 +51,5 @@
 	char *buffer;
 	size_t buffer_size;
-	char *setup_buffer;
+	char setup_buffer[USB_SETUP_PACKET_SIZE];
 	size_t setup_size;
 	size_t transfered_size;
@@ -76,6 +78,5 @@
     char *buffer,
     size_t buffer_size,
-    char *setup_buffer,
-    size_t setup_size,
+    char setup_buffer[USB_SETUP_PACKET_SIZE],
     usbhc_iface_transfer_in_callback_t func_in,
     usbhc_iface_transfer_out_callback_t func_out,
Index: uspace/lib/usbhost/src/batch.c
===================================================================
--- uspace/lib/usbhost/src/batch.c	(revision ffe3fe12b19081143903cc87cf2647a6fb8899d0)
+++ uspace/lib/usbhost/src/batch.c	(revision a00ac0715a9def8198a1019fdf6580eb3ac9d02a)
@@ -44,6 +44,5 @@
     char *buffer,
     size_t buffer_size,
-    char *setup_buffer,
-    size_t setup_size,
+    char setup_buffer[USB_SETUP_PACKET_SIZE],
     usbhc_iface_transfer_in_callback_t func_in,
     usbhc_iface_transfer_out_callback_t func_out,
@@ -62,6 +61,5 @@
 		instance->buffer = buffer;
 		instance->buffer_size = buffer_size;
-		instance->setup_buffer = setup_buffer;
-		instance->setup_size = setup_size;
+		instance->setup_size = 0;
 		instance->fun = fun;
 		instance->private_data = private_data;
@@ -69,4 +67,10 @@
 		instance->transfered_size = 0;
 		instance->error = EOK;
+		if (ep && ep->transfer_type == USB_TRANSFER_CONTROL) {
+			assert(setup_buffer);
+			memcpy(instance->setup_buffer, setup_buffer,
+			    USB_SETUP_PACKET_SIZE);
+			instance->setup_size = USB_SETUP_PACKET_SIZE;
+		}
 		if (instance->ep)
 			endpoint_use(instance->ep);
Index: uspace/lib/usbhost/src/iface.c
===================================================================
--- uspace/lib/usbhost/src/iface.c	(revision ffe3fe12b19081143903cc87cf2647a6fb8899d0)
+++ uspace/lib/usbhost/src/iface.c	(revision a00ac0715a9def8198a1019fdf6580eb3ac9d02a)
@@ -78,5 +78,5 @@
 	/* No private data and no private data dtor */
 	usb_transfer_batch_t *batch =
-	    usb_transfer_batch_get(ep, data, size, setup_data, setup_size,
+	    usb_transfer_batch_get(ep, data, size, setup_data,
 	    in, out, arg, fun, NULL, NULL);
 	if (!batch) {
