diff --git a/Makefile b/Makefile
index ae857a2..f95ba8d 100644
--- a/Makefile
+++ b/Makefile
@@ -74,7 +74,7 @@
 	$(CC) $(CFLAGS) $(CPPFLAGS) $(FEATURE_CFLAGS) -c -o $@ $< $(SVNDEF)
 
 %.o: %.c .features
-	$(CC) $(CFLAGS) $(CPPFLAGS) $(FEATURE_CFLAGS) -c $< -o $@
+	$(CC) $(CFLAGS) $(CPPFLAGS) $(FEATURE_CFLAGS) -c $< -o $@ $(SVNDEF)
 
 clean:
 	rm -f $(PROGRAM) *.o
diff --git a/flash.h b/flash.h
index 1d991e0..5abda95 100644
--- a/flash.h
+++ b/flash.h
@@ -248,12 +248,6 @@
 	const char *name;
 };
 
-struct board_info_url {
-	const char *vendor;
-	const char *name;
-	const char *url;
-};
-
 extern const struct board_info boards_ok[];
 extern const struct board_info boards_bad[];
 extern const struct board_info laptops_ok[];
@@ -287,12 +281,7 @@
 void print_supported_chipsets(void);
 void print_supported_boards(void);
 void print_supported_pcidevs(struct pcidev_status *devs);
-void print_supported_chips_wiki(void);
-void print_supported_boards_wiki(void);
-void print_supported_chipsets_wiki(void);
-void print_supported_pcidevs_wiki_header(void);
-void print_supported_pcidevs_wiki_footer(void);
-void print_supported_pcidevs_wiki(struct pcidev_status *devs);
+void print_wiki_tables(void);
 
 /* board_enable.c */
 void w836xx_ext_enter(uint16_t port);
diff --git a/flashrom.c b/flashrom.c
index 1ccafca..b3f9b03 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -681,14 +681,7 @@
 	}
 
 	if (list_supported_wiki) {
-		printf("= Supported devices =\n");
-		print_supported_chips_wiki();
-		print_supported_chipsets_wiki();
-		print_supported_boards_wiki();
-		print_supported_pcidevs_wiki_header();
-		print_supported_pcidevs_wiki(nics_3com);
-		print_supported_pcidevs_wiki(satas_sii);
-		print_supported_pcidevs_wiki_footer();
+		print_wiki_tables();
 		exit(0);
 	}
 
diff --git a/print.c b/print.c
index 53883c3..c124783 100644
--- a/print.c
+++ b/print.c
@@ -21,9 +21,22 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include <time.h>
 #include "flash.h"
 #include "flashchips.h"
 
+struct board_info_url {
+	const char *vendor;
+	const char *name;
+	const char *url;
+};
+
+struct board_info_notes {
+	const char *vendor;
+	const char *name;
+	const char *note;
+};
+
 /*
  * Return a string corresponding to the bustype parameter.
  * Memory is obtained with malloc() and can be freed with free().
@@ -222,6 +235,13 @@
 		"Laptops which have been verified to NOT work yet");
 }
 
+const char *wiki_header = "= Supported devices =\n\n\
+<div style=\"margin-top:0.5em; padding:0.5em 0.5em 0.5em 0.5em; \
+background-color:#eeeeee; align:right; border:1px solid #aabbcc;\"><small>\n\
+Please do '''not''' edit these tables in the wiki directly, they are \
+semi-automatically generated by pasting '''flashrom -z''' output.<br />\
+'''Last update:''' %s(generated by flashrom %s)\n</small></div>\n";
+
 const char *chipset_th = "{| border=\"0\" style=\"font-size: smaller\"\n\
 |- bgcolor=\"#6699dd\"\n! align=\"left\" | Vendor\n\
 ! align=\"left\" | Southbridge\n! align=\"left\" | PCI IDs\n\
@@ -263,9 +283,20 @@
 ! align=\"left\" | Device\n! align=\"left\" | PCI IDs\n\
 ! align=\"left\" | Status\n\n";
 
+const char *laptop_intro = "\n== Supported laptops/notebooks ==\n\n\
+In general, flashing laptops is more difficult because laptops\n\n\
+* often use the flash chip for stuff besides the BIOS,\n\
+* often have special protection stuff which has to be handled by flashrom,\n\
+* often use flash translation circuits which need drivers in flashrom.\n\n\
+<div style=\"margin-top:0.5em; padding:0.5em 0.5em 0.5em 0.5em; \
+background-color:#ff9f9f; align:right; border:1px solid #aabbcc;\">\n\
+'''IMPORTANT:''' At this point we recommend to '''not''' use flashrom on \
+untested laptops unless you have a means to recover from a flashing that goes \
+wrong (a working backup flash chip and/or good soldering skills).\n</div>\n";
+
+/* Please keep these lists alphabetically ordered by vendor/board. */
 const struct board_info_url boards_url[] = {
 	/* Verified working boards that don't need write-enables. */
-	/* Please keep this list alphabetically ordered by vendor/board. */
 	{ "Abit",		"AX8",			"http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?DEFTITLE=Y&fMTYPE=Socket%20939&pMODEL_NAME=AX8" },
 	{ "Advantech",		"PCM-5820", 		"http://taiwan.advantech.com.tw/products/Model_Detail.asp?model_id=1-1TGZL8&BU=ACG&PD=" },
 	{ "ASI",		"MB-5BLMP",		"http://www.hojerteknik.com/winnet.htm" },
@@ -342,7 +373,6 @@
 	{ "VIA",		"VB700X",		"http://www.via.com.tw/en/products/mainboards/motherboards.jsp?motherboard_id=490" },
 
 	/* Verified working boards that DO need write-enables. */
-	/* Please keep this list alphabetically ordered by vendor/board. */
 	{ "Acorp",		"6A815EPD",		NULL },
 	{ "agami",		"Aruma",		NULL },
 	{ "Albatron",		"PM266A",		NULL },
@@ -380,7 +410,6 @@
 	{ "VIA",		"PC3500G",		NULL },
 
 	/* Verified non-working boards (for now). */
-	/* Please keep this list alphabetically ordered by vendor/board. */
 	{ "Abit",		"IS-10",		"http://www.abit.com.tw/page/en/motherboard/motherboard_detail.php?pMODEL_NAME=IS-10&fMTYPE=Socket+478" },
 	{ "ASUS",		"M3N78 Pro",		NULL },
 	{ "ASUS",		"MEW-AM",		"ftp://ftp.asus.com.tw/pub/ASUS/mb/sock370/810/mew-am/" },
@@ -404,19 +433,43 @@
 	{ "Sun",		"Fire x4600",		"http://www.sun.com/servers/x64/x4600/" },
 
 	/* Verified working laptops. */
-	/* Please keep this list alphabetically ordered by vendor/board. */
-	{ "Lenovo",		"3000 V100 TF05Cxx",	NULL },
+	{ "Lenovo",		"3000 V100 TF05Cxx",	"http://www5.pc.ibm.com/europe/products.nsf/products?openagent&brand=Lenovo3000Notebook&series=Lenovo+3000+V+Series#viewallmodelstop" },
 
 	/* Verified non-working laptops (for now). */
-	/* Please keep this list alphabetically ordered by vendor/board. */
 	{ "Acer",		"Aspire One",		NULL },
-	{ "Dell",		"Latitude CPi A366XT",	NULL },
-	{ "IBM/Lenovo",		"Thinkpad T40p",	NULL },
+	{ "Dell",		"Latitude CPi A366XT",	"http://www.coreboot.org/Dell_Latitude_CPi_A366XT" },
+	{ "IBM/Lenovo",		"Thinkpad T40p",	"http://www.thinkwiki.org/wiki/Category:T40p" },
 	{ "IBM/Lenovo",		"240",			NULL },
 
 	{ NULL,			NULL,			0 },
 };
 
+/* Please keep these lists alphabetically ordered by vendor/board. */
+const struct board_info_notes boards_notes[] = {
+	/* Verified working boards that don't need write-enables. */
+	{ "ASI",		"MB-5BLMP",		"Used in the IGEL WinNET III thin client." },
+	{ "ASUS",		"A8V-E SE",		"See http://www.coreboot.org/pipermail/coreboot/2007-October/026496.html." },
+	{ "ASUS",		"M2A-VM",		"See http://www.coreboot.org/pipermail/coreboot/2007-September/025281.html." },
+	{ "BCOM",		"WinNET100",		"Used in the IGEL-316 thin client." },
+
+	/* Verified working boards that DO need write-enables. */
+	{ "Acer",		"Aspire One",		"See http://www.coreboot.org/pipermail/coreboot/2009-May/048041.html." },
+
+	/* Verified non-working boards (for now). */
+	{ "MSI",		"MS-6178",		"Immediately powers off if you try to hot-plug the chip. However, this does '''not''' happen if you use coreboot." },
+	{ "MSI",		"MS-7260 (K9N Neo)",	"Interestingly flashrom does not work when the vendor BIOS is booted, but it ''does'' work flawlessly when the machine is booted with coreboot." },
+
+	/* Verified working laptops. */
+	/* None which need comments, yet... */
+
+	/* Verified non-working laptops (for now). */
+	{ "Acer",		"Aspire One",		"http://www.coreboot.org/pipermail/coreboot/2009-May/048041.html" },
+	{ "Dell",		"Latitude CPi A366XT",	"The laptop immediately powers off if you try to hot-swap the chip. It's not yet tested if write/erase would work on this laptop." },
+	{ "IBM/Lenovo",		"Thinkpad T40p",	"Seems to (partially) work at first, but one block/sector cannot be written which then leaves you with a bricked laptop. Maybe this can be investigated and fixed in software later." },
+
+	{ NULL,			NULL,			0 },
+};
+
 static int url(const char *vendor, const char *board)
 {
 	int i;
@@ -430,6 +483,19 @@
 	return -1;
 }
 
+static int note(const char *vendor, const char *board)
+{
+	int i;
+	const struct board_info_notes *n = boards_notes;
+
+        for (i = 0; n[i].vendor != NULL; i++) {
+		if (!strcmp(vendor, n[i].vendor) && !strcmp(board, n[i].name))
+			return i;
+	}
+
+	return -1;
+}
+
 void print_supported_chipsets_wiki(void)
 {
 	int i, j, enablescount = 0, color = 1;
@@ -467,9 +533,11 @@
 static void wiki_helper(const char *heading, const char *status,
 			int cols, const struct board_info boards[])
 {
-	int i, j, k, boardcount = 0, color = 1;
+	int i, j, k, c, boardcount = 0, color = 1, num_notes = 0;
 	const struct board_info *b;
 	const struct board_info_url *u = boards_url;
+	char *notes = calloc(1, 1);
+	char tmp[900 + 1];
 
 	for (b = boards; b->vendor != NULL; b++)
 		boardcount++;
@@ -484,13 +552,23 @@
 			color = !color;
 
 		k = url(b[i].vendor, b[i].name);
+		c = note(b[i].vendor, b[i].name);
 
 		printf("|- bgcolor=\"#%s\" valign=\"top\"\n| %s || %s%s %s%s ||"
-		       " {{%s}}\n", (color) ? "eeeeee" : "dddddd", b[i].vendor,
+		       " {{%s}}", (color) ? "eeeeee" : "dddddd", b[i].vendor,
 		       (k != -1 && u[k].url) ? "[" : "",
 		       (k != -1 && u[k].url) ? u[k].url : "",
 		       b[i].name, (k != -1 && u[k].url) ? "]" : "", status);
 
+		if (c != -1) {
+			printf("<sup>%d</sup>\n", num_notes + 1);
+			snprintf((char *)&tmp, 900, "<sup>%d</sup> %s<br />\n",
+				 1 + num_notes++, boards_notes[c].note);
+			notes = strcat_realloc(notes, (char *)&tmp);
+		} else {
+			printf("\n");
+		}
+
 		/* Split table in 'cols' columns. */
 		if (j >= (boardcount / cols + 1)) {
 			printf("\n|}\n\n| valign=\"top\"|\n\n%s", board_th);
@@ -499,6 +577,10 @@
 	}
 
 	printf("\n|}\n\n|}\n");
+
+	if (num_notes > 0)
+		printf("\n<small>\n%s</small>\n", notes);
+	free(notes);
 }
 
 static void wiki_helper2(const char *heading, int cols)
@@ -543,6 +625,10 @@
 	wiki_helper("Known good (worked out of the box)", "OK", 3, boards_ok);
 	wiki_helper2("Known good (with write-enable code in flashrom)", 3);
 	wiki_helper("Not supported (yet)", "No", 3, boards_bad);
+
+	printf("%s", laptop_intro);
+	wiki_helper("Known good (worked out of the box)", "OK", 1, laptops_ok);
+	wiki_helper("Not supported (yet)", "No", 1, laptops_bad);
 }
 
 void print_supported_chips_wiki(void)
@@ -586,16 +672,6 @@
 	printf("\n|}\n\n|}\n");
 }
 
-void print_supported_pcidevs_wiki_header(void)
-{
-	printf("%s", programmer_section);
-}
-
-void print_supported_pcidevs_wiki_footer(void)
-{
-	printf("\n|}\n");
-}
-
 void print_supported_pcidevs_wiki(struct pcidev_status *devs)
 {
 	int i = 0;
@@ -612,3 +688,18 @@
 		       (devs[i].status == PCI_NT) ? (c) ? "?2" : "?" : "OK");
 	}
 }
+
+void print_wiki_tables(void)
+{
+	time_t t = time(NULL);
+
+	printf(wiki_header, ctime(&t), FLASHROM_VERSION);
+	print_supported_chips_wiki();
+	print_supported_chipsets_wiki();
+	print_supported_boards_wiki();
+	printf("%s", programmer_section);
+	print_supported_pcidevs_wiki(nics_3com);
+	print_supported_pcidevs_wiki(satas_sii);
+	printf("\n|}\n");
+}
+
