Index: uspace/lib/usbvirt/include/usbvirt/device.h
===================================================================
--- uspace/lib/usbvirt/include/usbvirt/device.h	(revision d197496661fecf853a30e11375ef0530df933cff)
+++ uspace/lib/usbvirt/include/usbvirt/device.h	(revision c9399c0cc88b72bd8ee0f28b1d6c211f0ed4a6d5)
@@ -94,10 +94,6 @@
  */
 typedef struct {
-	/** Request direction (in or out). */
-	usb_direction_t req_direction;
-	/** Request recipient (device, interface or endpoint). */
-	usb_request_recipient_t req_recipient;
-	/** Request type (standard, class or vendor). */
-	usb_request_type_t req_type;
+	/* Request type. See usb/request.h */
+	uint8_t request_type;
 	/** Actual request code. */
 	uint8_t request;
Index: uspace/lib/usbvirt/src/ctrltransfer.c
===================================================================
--- uspace/lib/usbvirt/src/ctrltransfer.c	(revision d197496661fecf853a30e11375ef0530df933cff)
+++ uspace/lib/usbvirt/src/ctrltransfer.c	(revision c9399c0cc88b72bd8ee0f28b1d6c211f0ed4a6d5)
@@ -60,23 +60,9 @@
 		return EFORWARD;
 	}
-
-	usb_direction_t direction = setup->request_type & 128 ?
-	    USB_DIRECTION_IN : USB_DIRECTION_OUT;
-	usb_request_recipient_t req_recipient = setup->request_type & 31;
-	usb_request_type_t req_type = (setup->request_type >> 5) & 3;
-
 	usbvirt_control_request_handler_t *handler = control_handlers;
-	while (handler->callback != NULL) {
-		if (handler->req_direction != direction) {
-			goto next;
-		}
-		if (handler->req_recipient != req_recipient) {
-			goto next;
-		}
-		if (handler->req_type != req_type) {
-			goto next;
-		}
-		if (handler->request != setup->request) {
-			goto next;
+	for (;handler->callback != NULL; ++handler) {
+		if (handler->request != setup->request ||
+		    handler->request_type != setup->request_type) {
+			continue;
 		}
 
@@ -84,12 +70,8 @@
 		    usb_debug_str_buffer((uint8_t*) setup, sizeof(*setup), 0));
 		int rc = handler->callback(dev, setup, data, data_sent_size);
-		if (rc == EFORWARD) {
-			goto next;
+		if (rc != EFORWARD) {
+			return rc;
 		}
 
-		return rc;
-
-next:
-		handler++;
 	}
 
Index: uspace/lib/usbvirt/src/stdreq.c
===================================================================
--- uspace/lib/usbvirt/src/stdreq.c	(revision d197496661fecf853a30e11375ef0530df933cff)
+++ uspace/lib/usbvirt/src/stdreq.c	(revision c9399c0cc88b72bd8ee0f28b1d6c211f0ed4a6d5)
@@ -192,7 +192,5 @@
 usbvirt_control_request_handler_t library_handlers[] = {
 	{
-		.req_direction = USB_DIRECTION_OUT,
-		.req_recipient = USB_REQUEST_RECIPIENT_DEVICE,
-		.req_type = USB_REQUEST_TYPE_STANDARD,
+		.request_type = SETUP_REQUEST_TO_DEVICE(USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE),
 		.request = USB_DEVREQ_SET_ADDRESS,
 		.name = "SetAddress",
@@ -200,7 +198,5 @@
 	},
 	{
-		.req_direction = USB_DIRECTION_IN,
-		.req_recipient = USB_REQUEST_RECIPIENT_DEVICE,
-		.req_type = USB_REQUEST_TYPE_STANDARD,
+		.request_type = SETUP_REQUEST_TO_HOST(USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE),
 		.request = USB_DEVREQ_GET_DESCRIPTOR,
 		.name = "GetDescriptor",
@@ -208,12 +204,9 @@
 	},
 	{
-		.req_direction = USB_DIRECTION_OUT,
-		.req_recipient = USB_REQUEST_RECIPIENT_DEVICE,
-		.req_type = USB_REQUEST_TYPE_STANDARD,
+		.request_type = SETUP_REQUEST_TO_DEVICE(USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_DEVICE),
 		.request = USB_DEVREQ_SET_CONFIGURATION,
 		.name = "SetConfiguration",
 		.callback = req_set_configuration
 	},
-
 	{ .callback = NULL }
 };
