Index: uspace/lib/usb/include/usb/classes/hub.h
===================================================================
--- uspace/lib/usb/include/usb/classes/hub.h	(revision 3e2007362d836bf325d886faec0dfc231c162014)
+++ uspace/lib/usb/include/usb/classes/hub.h	(revision 2be477d52d8fed39a2862f10b87d12afb454b9c7)
@@ -43,8 +43,8 @@
  */
 typedef enum {
+	USB_HUB_FEATURE_C_HUB_LOCAL_POWER = 0,
+	USB_HUB_FEATURE_C_HUB_OVER_CURRENT = 1,
 	USB_HUB_FEATURE_HUB_LOCAL_POWER = 0,
 	USB_HUB_FEATURE_HUB_OVER_CURRENT = 1,
-	USB_HUB_FEATURE_C_HUB_LOCAL_POWER = 0,
-	USB_HUB_FEATURE_C_HUB_OVER_CURRENT = 1,
 	USB_HUB_FEATURE_PORT_CONNECTION = 0,
 	USB_HUB_FEATURE_PORT_ENABLE = 1,
@@ -59,4 +59,6 @@
 	USB_HUB_FEATURE_C_PORT_OVER_CURRENT = 19,
 	USB_HUB_FEATURE_C_PORT_RESET = 20,
+	USB_HUB_FEATURE_PORT_TEST = 21,
+	USB_HUB_FEATURE_PORT_INDICATOR = 22
 	/* USB_HUB_FEATURE_ = , */
 } usb_hub_class_feature_t;
@@ -171,5 +173,5 @@
     /** */
     USB_HUB_REQUEST_CLEAR_FEATURE = 1,
-    /** */
+    /** USB 1.0 only */
     USB_HUB_REQUEST_GET_STATE = 2,
     /** */
@@ -178,5 +180,13 @@
     USB_HUB_REQUEST_GET_DESCRIPTOR = 6,
     /** */
-    USB_HUB_REQUEST_SET_DESCRIPTOR = 7
+    USB_HUB_REQUEST_SET_DESCRIPTOR = 7,
+    /** */
+    USB_HUB_REQUEST_CLEAR_TT_BUFFER = 8,
+    /** */
+    USB_HUB_REQUEST_RESET_TT = 9,
+    /** */
+    USB_HUB_GET_TT_STATE = 10,
+    /** */
+    USB_HUB_STOP_TT = 11,
 } usb_hub_request_t;
 
@@ -185,5 +195,5 @@
  */
 /* 7 (basic size) + 2*32 (port bitmasks) */
-#define USB_HUB_MAX_DESCRIPTOR_SIZE 71
+#define USB_HUB_MAX_DESCRIPTOR_SIZE (7 + 2 * 32)
 
 #endif
Index: uspace/lib/usb/include/usb/descriptor.h
===================================================================
--- uspace/lib/usb/include/usb/descriptor.h	(revision 3e2007362d836bf325d886faec0dfc231c162014)
+++ uspace/lib/usb/include/usb/descriptor.h	(revision 2be477d52d8fed39a2862f10b87d12afb454b9c7)
@@ -45,4 +45,9 @@
 	USB_DESCTYPE_INTERFACE = 4,
 	USB_DESCTYPE_ENDPOINT = 5,
+	/* New in USB2.0 */
+	USB_DESCTYPE_DEVICE_QUALIFIER = 6,
+	USB_DESCTYPE_OTHER_SPEED_CONFIGURATION = 7,
+	USB_DESCTYPE_INTERFACE_POWER = 8,
+	/* Class specific */
 	USB_DESCTYPE_HID = 0x21,
 	USB_DESCTYPE_HID_REPORT = 0x22,
@@ -89,4 +94,32 @@
 } __attribute__ ((packed)) usb_standard_device_descriptor_t;
 
+/** USB device qualifier decriptor is basically a cut down version of the device
+ * descriptor with values that would be valid if the device operated on the
+ * other speed (HIGH vs. FULL)
+ */
+typedef struct {
+	/** Size of this descriptor in bytes */
+	uint8_t length;
+	/** Descriptor type (USB_DESCTYPE_DEVICE_QUALIFIER) */
+	uint8_t descriptor_type;
+	/** USB specification release number.
+	 * The number shall be coded as binary-coded decimal (BCD).
+	 */
+	uint16_t usb_spec_version;
+	/** Device class. */
+	uint8_t device_class;
+	/** Device sub-class. */
+	uint8_t device_subclass;
+	/** Device protocol. */
+	uint8_t device_protocol;
+	/** Maximum packet size for endpoint zero.
+	 * Valid values are only 8, 16, 32, 64).
+	 */
+	uint8_t max_packet_size;
+	/** Number of possible configurations. */
+	uint8_t configuration_count;
+	uint8_t reserved;
+} __attribute__ ((packed)) usb_standard_device_qualifier_descriptor_t;
+
 /** Standard USB configuration descriptor.
  */
@@ -116,4 +149,11 @@
 } __attribute__ ((packed)) usb_standard_configuration_descriptor_t;
 
+/** USB Other Speed Configuration descriptor shows values that would change
+ * in the configuration descriptor if the device operated at its other
+ * possible speed (HIGH vs. FULL)
+ */
+typedef usb_standard_configuration_descriptor_t
+    usb_other_speed_configuration_descriptor_t;
+
 /** Standard USB interface descriptor.
  */
Index: uspace/lib/usb/include/usb/request.h
===================================================================
--- uspace/lib/usb/include/usb/request.h	(revision 3e2007362d836bf325d886faec0dfc231c162014)
+++ uspace/lib/usb/include/usb/request.h	(revision 2be477d52d8fed39a2862f10b87d12afb454b9c7)
@@ -54,4 +54,11 @@
 } usb_stddevreq_t;
 
+/** Standard device features */
+typedef enum {
+	USB_FEATURE_ENDPOINT_HALT = 0,
+	USB_FEATURE_DEVICE_REMOTE_WAKEUP = 1,
+	USB_FEATURE_TEST_MODE = 2
+} usb_std_feature_t;
+
 /** USB device status - device is self powered (opposed to bus powered). */
 #define USB_DEVICE_STATUS_SELF_POWERED ((uint16_t)(1 << 0))
@@ -62,10 +69,4 @@
 /** USB endpoint status - endpoint is halted (stalled). */
 #define USB_ENDPOINT_STATUS_HALTED ((uint16_t)(1 << 0))
-
-/** USB feature selector - endpoint halt (stall). */
-#define USB_FEATURE_SELECTOR_ENDPOINT_HALT (0)
-
-/** USB feature selector - device remote wake-up. */
-#define USB_FEATURE_SELECTOR_REMOTE_WAKEUP (1)
 
 /** Device request setup packet.
Index: uspace/lib/usb/src/usb.c
===================================================================
--- uspace/lib/usb/src/usb.c	(revision 3e2007362d836bf325d886faec0dfc231c162014)
+++ uspace/lib/usb/src/usb.c	(revision 2be477d52d8fed39a2862f10b87d12afb454b9c7)
@@ -135,5 +135,5 @@
 		/* 0x2 ( HOST to device | STANDART | TO ENPOINT) */
 		if ((request->request_type == 0x2) &&
-		    (request->value == USB_FEATURE_SELECTOR_ENDPOINT_HALT))
+		    (request->value == USB_FEATURE_ENDPOINT_HALT))
 			return uint16_usb2host(request->index);
 		break;
Index: uspace/lib/usbdev/src/request.c
===================================================================
--- uspace/lib/usbdev/src/request.c	(revision 3e2007362d836bf325d886faec0dfc231c162014)
+++ uspace/lib/usbdev/src/request.c	(revision 2be477d52d8fed39a2862f10b87d12afb454b9c7)
@@ -823,5 +823,5 @@
 	return usb_request_clear_feature(pipe,
 	    USB_REQUEST_TYPE_STANDARD, USB_REQUEST_RECIPIENT_ENDPOINT,
-	    uint16_host2usb(USB_FEATURE_SELECTOR_ENDPOINT_HALT),
+	    uint16_host2usb(USB_FEATURE_ENDPOINT_HALT),
 	    uint16_host2usb(ep_index));
 }
