Index: uspace/app/usbinfo/dump.c
===================================================================
--- uspace/app/usbinfo/dump.c	(revision 5f635ca5f17ad0cfb38319aa99fcff04ca83851a)
+++ uspace/app/usbinfo/dump.c	(revision 6fe1ab4654f3d29aa401e00bfbe8206d0dd7a4ca)
@@ -48,4 +48,5 @@
 
 #define INDENT "  "
+#define PRINTLINE(indent, fmt, ...) printf("%s" fmt, get_indent(indent), __VA_ARGS__)
 #define BYTES_PER_LINE 12
 
@@ -84,5 +85,22 @@
 };
 
-void dump_buffer(const char *msg, const uint8_t *buffer, size_t length)
+static const char *get_indent(size_t level)
+{
+	static const char *indents[] = {
+		INDENT,
+		INDENT INDENT,
+		INDENT INDENT INDENT,
+		INDENT INDENT INDENT INDENT,
+		INDENT INDENT INDENT INDENT INDENT
+	};
+	static size_t indents_count = sizeof(indents)/sizeof(indents[0]);
+	if (level >= indents_count) {
+		return indents[indents_count - 1];
+	}
+	return indents[level];
+}
+
+void dump_buffer(const char *msg, size_t indent,
+    const uint8_t *buffer, size_t length)
 {
 	if (msg != NULL) {
@@ -91,9 +109,17 @@
 
 	size_t i;
+	if (length > 0) {
+		printf("%s", get_indent(indent));
+	}
 	for (i = 0; i < length; i++) {
-		printf("  0x%02X", buffer[i]);
+		printf("0x%02X", buffer[i]);
 		if (((i > 0) && (((i+1) % BYTES_PER_LINE) == 0))
 		    || (i + 1 == length)) {
 			printf("\n");
+			if (i + 1 < length) {
+				printf("%s", get_indent(indent));
+			}
+		} else {
+			printf("  ");
 		}
 	}
@@ -130,19 +156,19 @@
 	}
 	
-	printf(INDENT "bLength = %d\n", d->length);
-	printf(INDENT "bDescriptorType = 0x%02x\n", d->descriptor_type);
-	printf(INDENT "bcdUSB = %d (" BCD_FMT ")\n", d->usb_spec_version,
+	PRINTLINE(indent, "bLength = %d\n", d->length);
+	PRINTLINE(indent, "bDescriptorType = 0x%02x\n", d->descriptor_type);
+	PRINTLINE(indent, "bcdUSB = %d (" BCD_FMT ")\n", d->usb_spec_version,
 	    BCD_ARGS(d->usb_spec_version));
-	printf(INDENT "bDeviceClass = 0x%02x\n", d->device_class);
-	printf(INDENT "bDeviceSubClass = 0x%02x\n", d->device_subclass);
-	printf(INDENT "bDeviceProtocol = 0x%02x\n", d->device_protocol);
-	printf(INDENT "bMaxPacketSize0 = %d\n", d->max_packet_size);
-	printf(INDENT "idVendor = %d\n", d->vendor_id);
-	printf(INDENT "idProduct = %d\n", d->product_id);
-	printf(INDENT "bcdDevice = %d\n", d->device_version);
-	printf(INDENT "iManufacturer = %d\n", d->str_manufacturer);
-	printf(INDENT "iProduct = %d\n", d->str_product);
-	printf(INDENT "iSerialNumber = %d\n", d->str_serial_number);
-	printf(INDENT "bNumConfigurations = %d\n", d->configuration_count);
+	PRINTLINE(indent, "bDeviceClass = 0x%02x\n", d->device_class);
+	PRINTLINE(indent, "bDeviceSubClass = 0x%02x\n", d->device_subclass);
+	PRINTLINE(indent, "bDeviceProtocol = 0x%02x\n", d->device_protocol);
+	PRINTLINE(indent, "bMaxPacketSize0 = %d\n", d->max_packet_size);
+	PRINTLINE(indent, "idVendor = %d\n", d->vendor_id);
+	PRINTLINE(indent, "idProduct = %d\n", d->product_id);
+	PRINTLINE(indent, "bcdDevice = %d\n", d->device_version);
+	PRINTLINE(indent, "iManufacturer = %d\n", d->str_manufacturer);
+	PRINTLINE(indent, "iProduct = %d\n", d->str_product);
+	PRINTLINE(indent, "iSerialNumber = %d\n", d->str_serial_number);
+	PRINTLINE(indent, "bNumConfigurations = %d\n", d->configuration_count);
 }
 
@@ -158,15 +184,15 @@
 	bool remote_wakeup = d->attributes & 32;
 	
-	printf(INDENT "bLength = %d\n", d->length);
-	printf(INDENT "bDescriptorType = 0x%02x\n", d->descriptor_type);
-	printf(INDENT "wTotalLength = %d\n", d->total_length);
-	printf(INDENT "bNumInterfaces = %d\n", d->interface_count);
-	printf(INDENT "bConfigurationValue = %d\n", d->configuration_number);
-	printf(INDENT "iConfiguration = %d\n", d->str_configuration);
-	printf(INDENT "bmAttributes = %d [%s%s%s]\n", d->attributes,
+	PRINTLINE(indent, "bLength = %d\n", d->length);
+	PRINTLINE(indent, "bDescriptorType = 0x%02x\n", d->descriptor_type);
+	PRINTLINE(indent, "wTotalLength = %d\n", d->total_length);
+	PRINTLINE(indent, "bNumInterfaces = %d\n", d->interface_count);
+	PRINTLINE(indent, "bConfigurationValue = %d\n", d->configuration_number);
+	PRINTLINE(indent, "iConfiguration = %d\n", d->str_configuration);
+	PRINTLINE(indent, "bmAttributes = %d [%s%s%s]\n", d->attributes,
 	    self_powered ? "self-powered" : "",
 	    (self_powered & remote_wakeup) ? ", " : "",
 	    remote_wakeup ? "remote-wakeup" : "");
-	printf(INDENT "MaxPower = %d (%dmA)\n", d->max_power,
+	PRINTLINE(indent, "MaxPower = %d (%dmA)\n", d->max_power,
 	    2 * d->max_power);
 }
@@ -199,5 +225,5 @@
 void dump_descriptor_generic(size_t indent, uint8_t *descr, size_t size)
 {
-	dump_buffer(NULL, descr, size);
+	dump_buffer(NULL, indent, descr, size);
 }
 
@@ -220,8 +246,4 @@
 	if (descriptor == NULL) {
 		return;
-	}
-	while (depth > 0) {
-		printf("  ");
-		depth--;
 	}
 	int type = (int) *(descriptor + 1);
@@ -241,5 +263,5 @@
 #undef _TYPE
 	}
-	printf("0x%02x (%s)\n", type, name);
+	printf("%s%s (0x%02X):\n", get_indent(depth), name, type);
 	dump_descriptor_by_type(depth, descriptor, descriptor[0]);
 	
@@ -264,5 +286,5 @@
 	uint8_t *ptr = data->data;
 	printf("Descriptor tree:\n");
-	dump_tree_internal(parser, data, ptr, 1);
+	dump_tree_internal(parser, data, ptr, 0);
 }
 
Index: uspace/app/usbinfo/info.c
===================================================================
--- uspace/app/usbinfo/info.c	(revision 5f635ca5f17ad0cfb38319aa99fcff04ca83851a)
+++ uspace/app/usbinfo/info.c	(revision 6fe1ab4654f3d29aa401e00bfbe8206d0dd7a4ca)
@@ -108,6 +108,4 @@
 		return rc;
 	}
-	dump_buffer("Full configuration descriptor:",
-	    full_config_descriptor, config_descriptor.total_length);
 
 	dump_descriptor_tree(full_config_descriptor,
Index: uspace/app/usbinfo/usbinfo.h
===================================================================
--- uspace/app/usbinfo/usbinfo.h	(revision 5f635ca5f17ad0cfb38319aa99fcff04ca83851a)
+++ uspace/app/usbinfo/usbinfo.h	(revision 6fe1ab4654f3d29aa401e00bfbe8206d0dd7a4ca)
@@ -44,5 +44,5 @@
 #define NAME "usbinfo"
 
-void dump_buffer(const char *, const uint8_t *, size_t);
+void dump_buffer(const char *, size_t, const uint8_t *, size_t);
 void dump_match_ids(match_id_list_t *matches);
 void dump_usb_descriptor(uint8_t *, size_t);
