diff --git a/atahpt.c b/atahpt.c
index f1e1296..2552697 100644
--- a/atahpt.c
+++ b/atahpt.c
@@ -30,7 +30,7 @@
 
 #define PCI_VENDOR_ID_HPT	0x1103
 
-struct pcidev_status ata_hpt[] = {
+const struct pcidev_status ata_hpt[] = {
 	{0x1103, 0x0004, NT, "Highpoint", "HPT366/368/370/370A/372/372N"},
 	{0x1103, 0x0005, NT, "Highpoint", "HPT372A/372N"},
 	{0x1103, 0x0006, NT, "Highpoint", "HPT302/302N"},
diff --git a/cli_classic.c b/cli_classic.c
index 979a822..9b9b451 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -33,11 +33,6 @@
 
 static void cli_classic_usage(const char *name)
 {
-	const char *pname;
-	int pnamelen;
-	int remaining = 0;
-	enum programmer p;
-
 	printf("Usage: flashrom [-n] [-V] [-f] [-h|-R|-L|"
 #if CONFIG_PRINT_WIKI == 1
 	         "-z|"
@@ -83,32 +78,9 @@
 	         "in wiki syntax\n"
 #endif
 	       "   -p | --programmer <name>[:<param>] specify the programmer "
-	         "device");
+	         "device\n");
 
-	for (p = 0; p < PROGRAMMER_INVALID; p++) {
-		pname = programmer_table[p].name;
-		pnamelen = strlen(pname);
-		if (remaining - pnamelen - 2 < 0) {
-			printf("\n                                     ");
-			remaining = 43;
-		} else {
-			printf(" ");
-			remaining--;
-		}
-		if (p == 0) {
-			printf("(");
-			remaining--;
-		}
-		printf("%s", pname);
-		remaining -= pnamelen;
-		if (p < PROGRAMMER_INVALID - 1) {
-			printf(",");
-			remaining--;
-		} else {
-			printf(")\n");
-		}
-	}
-
+	list_programmers_linebreak(37, 80, 1);
 	printf("\nYou can specify one of -h, -R, -L, "
 #if CONFIG_PRINT_WIKI == 1
 	         "-z, "
diff --git a/flash.h b/flash.h
index 25624aa..40382f0 100644
--- a/flash.h
+++ b/flash.h
@@ -200,6 +200,7 @@
 char *strcat_realloc(char *dest, const char *src);
 void print_version(void);
 void print_banner(void);
+void list_programmers_linebreak(int startcol, int cols, int paren);
 int selfcheck(void);
 int doit(struct flashchip *flash, int force, char *filename, int read_it, int write_it, int erase_it, int verify_it);
 
diff --git a/flashrom.c b/flashrom.c
index 0a3e4fe..fa36bfb 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -1332,6 +1332,47 @@
 	msg_ginfo("\n");	
 }
 
+void list_programmers_linebreak(int startcol, int cols, int paren)
+{
+	const char *pname;
+	int pnamelen;
+	int remaining = 0;
+	int firstline = 1;
+	enum programmer p;
+	int i;
+
+	for (p = 0; p < PROGRAMMER_INVALID; p++) {
+		pname = programmer_table[p].name;
+		pnamelen = strlen(pname);
+		if (remaining - pnamelen - 2 < 0) {
+			if (firstline)
+				firstline = 0;
+			else
+				printf("\n");
+			for (i = 0; i < startcol; i++)
+				printf(" ");
+			remaining = cols - startcol;
+		} else {
+			printf(" ");
+			remaining--;
+		}
+		if (paren && (p == 0)) {
+			printf("(");
+			remaining--;
+		}
+		printf("%s", pname);
+		remaining -= pnamelen;
+		if (p < PROGRAMMER_INVALID - 1) {
+			printf(",");
+			remaining--;
+		} else {
+			if (paren)
+				printf(")");
+			printf("\n");
+		}
+	}
+}
+
 void print_sysinfo(void)
 {
 #if HAVE_UTSNAME == 1
diff --git a/ft2232_spi.c b/ft2232_spi.c
index 9c6b017..ee2b693 100644
--- a/ft2232_spi.c
+++ b/ft2232_spi.c
@@ -346,6 +346,7 @@
 {
 	int i;
 
+	msg_pinfo("USB devices:\n");
 	for (i = 0; devs[i].vendor_name != NULL; i++) {
 		msg_pinfo("%s %s [%04x:%04x]%s\n", devs[i].vendor_name,
 			  devs[i].device_name, devs[i].vendor_id,
diff --git a/pcidev.c b/pcidev.c
index 742184c..933fd4b 100644
--- a/pcidev.c
+++ b/pcidev.c
@@ -132,6 +132,7 @@
 {
 	int i;
 
+	msg_pinfo("PCI devices:\n");
 	for (i = 0; devs[i].vendor_name != NULL; i++) {
 		msg_pinfo("%s %s [%02x:%02x]%s\n", devs[i].vendor_name,
 		       devs[i].device_name, devs[i].vendor_id,
diff --git a/print.c b/print.c
index ccd499c..66b2938 100644
--- a/print.c
+++ b/print.c
@@ -223,49 +223,89 @@
 
 void print_supported(void)
 {
-		print_supported_chips();
+	print_supported_chips();
+
+	printf("\nSupported programmers:\n");
+	list_programmers_linebreak(0, 80, 0);
 #if CONFIG_INTERNAL == 1
-		print_supported_chipsets();
-		print_supported_boards_helper(boards_known, "boards");
-		print_supported_boards_helper(laptops_known, "laptops");
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_INTERNAL].name);
+	print_supported_chipsets();
+	print_supported_boards_helper(boards_known, "boards");
+	print_supported_boards_helper(laptops_known, "laptops");
 #endif
-#if CONFIG_NIC3COM+CONFIG_NICREALTEK+CONFIG_NICNATSEMI+CONFIG_GFXNVIDIA+CONFIG_DRKAISER+CONFIG_SATASII+CONFIG_ATAHPT >= 1
-		printf("\nSupported PCI devices flashrom can use "
-		       "as programmer:\n\n");
+#if CONFIG_DUMMY == 1
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_DUMMY].name);
+	/* FIXME */
 #endif
 #if CONFIG_NIC3COM == 1
-		print_supported_pcidevs(nics_3com);
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_NIC3COM].name);
+	print_supported_pcidevs(nics_3com);
 #endif
 #if CONFIG_NICREALTEK == 1
-		print_supported_pcidevs(nics_realtek);
-		print_supported_pcidevs(nics_realteksmc1211);
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_NICREALTEK].name);
+	print_supported_pcidevs(nics_realtek);
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_NICREALTEK2].name);
+	print_supported_pcidevs(nics_realteksmc1211);
 #endif
 #if CONFIG_NICNATSEMI == 1
-		print_supported_pcidevs(nics_natsemi);
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_NICNATSEMI].name);
+	print_supported_pcidevs(nics_natsemi);
 #endif
 #if CONFIG_GFXNVIDIA == 1
-		print_supported_pcidevs(gfx_nvidia);
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_GFXNVIDIA].name);
+	print_supported_pcidevs(gfx_nvidia);
 #endif
 #if CONFIG_DRKAISER == 1
-		print_supported_pcidevs(drkaiser_pcidev);
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_DRKAISER].name);
+	print_supported_pcidevs(drkaiser_pcidev);
 #endif
 #if CONFIG_SATASII == 1
-		print_supported_pcidevs(satas_sii);
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_SATASII].name);
+	print_supported_pcidevs(satas_sii);
 #endif
 #if CONFIG_ATAHPT == 1
-		print_supported_pcidevs(ata_hpt);
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_ATAHPT].name);
+	print_supported_pcidevs(ata_hpt);
+#endif
+#if CONFIG_FT2232_SPI == 1
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_FT2232_SPI].name);
+	print_supported_usbdevs(devs_ft2232spi);
+#endif
+#if CONFIG_SERPROG == 1
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_SERPROG].name);
+	/* FIXME */
+#endif
+#if CONFIG_BUSPIRATE_SPI == 1
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_BUSPIRATE_SPI].name);
+	/* FIXME */
+#endif
+#if CONFIG_DEDIPROG == 1
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_DEDIPROG].name);
+	/* FIXME */
+#endif
+#if CONFIG_RAYER_SPI == 1
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_RAYER_SPI].name);
+	/* FIXME */
 #endif
 #if CONFIG_NICINTEL_SPI == 1
-		print_supported_pcidevs(nics_intel_spi);
-#endif
-
-#if CONFIG_FT2232_SPI+CONFIG_DEDIPROG >= 1
-		printf("\nSupported USB devices flashrom can use "
-		       "as programmer:\n\n");
-#endif
-
-#if CONFIG_FT2232_SPI == 1
-		print_supported_usbdevs(devs_ft2232spi);
+	printf("\nSupported devices for the %s programmer:\n",
+	       programmer_table[PROGRAMMER_NICINTEL_SPI].name);
+	print_supported_pcidevs(nics_intel_spi);
 #endif
 }
 
