Index: uspace/app/usbinfo/dump.c
===================================================================
--- uspace/app/usbinfo/dump.c	(revision 4fa05a324a1c38f24d71dff2ffe3f7d22923a6ea)
+++ uspace/app/usbinfo/dump.c	(revision 7b13d8e4475adb45eca5728fbab2199a8ca45782)
@@ -109,5 +109,5 @@
 		match_id_t *match = list_get_instance(link, match_id_t, link);
 
-		printf("%s%d %s\n", line_prefix, match->score, match->id);
+		printf("%s%3d %s\n", line_prefix, match->score, match->id);
 	}
 }
Index: uspace/app/usbinfo/info.c
===================================================================
--- uspace/app/usbinfo/info.c	(revision 4fa05a324a1c38f24d71dff2ffe3f7d22923a6ea)
+++ uspace/app/usbinfo/info.c	(revision 7b13d8e4475adb45eca5728fbab2199a8ca45782)
@@ -50,4 +50,39 @@
 }
 
+static void dump_match_ids_from_interface(uint8_t *descriptor, size_t depth,
+    void *arg)
+{
+	if (depth != 1) {
+		return;
+	}
+	size_t descr_size = descriptor[0];
+	if (descr_size < sizeof(usb_standard_interface_descriptor_t)) {
+		return;
+	}
+	int descr_type = descriptor[1];
+	if (descr_type != USB_DESCTYPE_INTERFACE) {
+		return;
+	}
+
+	usbinfo_device_t *dev = (usbinfo_device_t *) arg;
+
+	usb_standard_interface_descriptor_t *iface
+	    = (usb_standard_interface_descriptor_t *) descriptor;
+
+	printf("%sInterface #%d match ids (%s, 0x%02x, 0x%02x)\n",
+	    get_indent(0),
+	    (int) iface->interface_number,
+	    usb_str_class(iface->interface_class),
+	    (int) iface->interface_subclass,
+	    (int) iface->interface_protocol);
+
+	match_id_list_t matches;
+	init_match_ids(&matches);
+	usb_device_create_match_ids_from_interface(&dev->device_descriptor,
+	    iface, &matches);
+	dump_match_ids(&matches, get_indent(1));
+	clean_match_ids(&matches);
+}
+
 void dump_device_match_ids(usbinfo_device_t *dev)
 {
@@ -56,5 +91,16 @@
 	usb_device_create_match_ids_from_device_descriptor(
 	    &dev->device_descriptor, &matches);
-	dump_match_ids(&matches, get_indent(0));
+	printf("%sDevice match ids (0x%04x by 0x%04x, %s)\n", get_indent(0),
+	    (int) dev->device_descriptor.product_id,
+	    (int) dev->device_descriptor.vendor_id,
+	    usb_str_class(dev->device_descriptor.device_class));
+	dump_match_ids(&matches, get_indent(1));
+	clean_match_ids(&matches);
+
+	usb_dp_walk_simple(dev->full_configuration_descriptor,
+	    dev->full_configuration_descriptor_size,
+	    usb_dp_standard_descriptor_nesting,
+	    dump_match_ids_from_interface,
+	    dev);
 }
 
