Index: uspace/lib/usbvirt/main.c
===================================================================
--- uspace/lib/usbvirt/main.c	(revision 34586183a2d535f280f5801720405357ee9da806)
+++ uspace/lib/usbvirt/main.c	(revision b791e3e1ef6bc65ea289c35813372fa9120da66b)
@@ -52,4 +52,5 @@
 	usb_address_t address = IPC_GET_ARG1(icall);
 	usb_endpoint_t endpoint = IPC_GET_ARG2(icall);
+	size_t expected_len = IPC_GET_ARG5(icall);
 	
 	if (address != device->address) {
@@ -58,18 +59,22 @@
 	}
 	
-	size_t len;
-	void * buffer;
-	int rc = async_data_write_accept(&buffer, false,
-	    1, USB_MAX_PAYLOAD_SIZE,
-	    0, &len);
-	
-	if (rc != EOK) {
-		ipc_answer_0(iid, rc);
-		return;
+	size_t len = 0;
+	void * buffer = NULL;
+	if (expected_len > 0) {
+		int rc = async_data_write_accept(&buffer, false,
+		    1, USB_MAX_PAYLOAD_SIZE,
+		    0, &len);
+		
+		if (rc != EOK) {
+			ipc_answer_0(iid, rc);
+			return;
+		}
 	}
 	
 	device->receive_data(device, endpoint, buffer, len);
 	
-	free(buffer);
+	if (buffer != NULL) {
+		free(buffer);
+	}
 	
 	ipc_answer_0(iid, EOK);
@@ -209,4 +214,6 @@
 	device_init(dev);
 	
+	device = dev;
+	
 	return EOK;
 }
