diff --git a/am29f040b.c b/am29f040b.c
index cde4b96..46a5ef4 100644
--- a/am29f040b.c
+++ b/am29f040b.c
@@ -20,6 +20,8 @@
 
 #include "flash.h"
 
+/* FIMXE: check that the 2 second delay is really needed.
+          Use erase_sector_jedec if not? */
 static int erase_sector_29f040b(struct flashchip *flash, unsigned long address)
 {
 	int page_size = flash->page_size;
@@ -44,6 +46,7 @@
 	return 0;
 }
 
+/* FIXME: use write_sector_jedec? */
 static int write_sector_29f040b(chipaddr bios, uint8_t *src, chipaddr dst,
 				unsigned int page_size)
 {
@@ -91,6 +94,7 @@
 	return 0;
 }
 
+/* FIXME: use erase_chip_jedec? */
 int erase_29f040b(struct flashchip *flash)
 {
 	int total_size = flash->total_size * 1024;
diff --git a/en29f002a.c b/en29f002a.c
index 14fccab..020df32 100644
--- a/en29f002a.c
+++ b/en29f002a.c
@@ -87,39 +87,3 @@
 
 	return 0;
 }
-
-/* The EN29F002 chip needs repeated single byte writing, no block writing. */
-int write_en29f002a(struct flashchip *flash, uint8_t *buf)
-{
-	int i;
-	int total_size = flash->total_size * 1024;
-	chipaddr bios = flash->virtual_memory;
-	chipaddr dst = bios;
-
-	//chip_writeb(0xF0, bios);
-	programmer_delay(10);
-	if (erase_chip_jedec(flash)) {
-		fprintf(stderr, "ERASE FAILED!\n");
-		return -1;
-	}
-
-	printf("Programming page: ");
-	for (i = 0; i < total_size; i++) {
-		/* write to the sector */
-		if ((i & 0xfff) == 0)
-			printf("address: 0x%08lx", (unsigned long)i);
-		chip_writeb(0xAA, bios + 0x5555);
-		chip_writeb(0x55, bios + 0x2AAA);
-		chip_writeb(0xA0, bios + 0x5555);
-		chip_writeb(*buf++, dst++);
-
-		/* wait for Toggle bit ready */
-		toggle_ready_jedec(dst);
-
-		if ((i & 0xfff) == 0)
-			printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
-	}
-
-	printf("\n");
-	return 0;
-}
diff --git a/flash.h b/flash.h
index 1a1d8f8..4178d47 100644
--- a/flash.h
+++ b/flash.h
@@ -653,6 +653,7 @@
 int probe_jedec(struct flashchip *flash);
 int erase_chip_jedec(struct flashchip *flash);
 int write_jedec(struct flashchip *flash, uint8_t *buf);
+int write_jedec_1(struct flashchip *flash, uint8_t *buf);
 int erase_sector_jedec(struct flashchip *flash, unsigned int page, unsigned int pagesize);
 int erase_block_jedec(struct flashchip *flash, unsigned int page, unsigned int blocksize);
 int write_sector_jedec(chipaddr bios, uint8_t *src,
diff --git a/flashchips.c b/flashchips.c
index 8618c46..5e74ccf 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -81,7 +81,7 @@
 		.probe		= probe_jedec,
 		.probe_timing	= TIMING_ZERO,
 		.erase		= erase_chip_jedec,
-		.write		= write_en29f002a,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
@@ -93,11 +93,11 @@
 		.model_id	= AM_29F002BT,
 		.total_size	= 256,
 		.page_size	= 256,
-		.tested		= TEST_OK_PREW,
+		.tested		= TEST_OK_PRE,
 		.probe		= probe_jedec,
 		.probe_timing	= TIMING_ZERO,
 		.erase		= erase_chip_jedec,
-		.write		= write_en29f002a,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
@@ -739,7 +739,7 @@
 		.probe		= probe_29f002,
 		.probe_timing	= TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
 		.erase		= erase_29f002,
-		.write		= write_29f002,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
@@ -751,11 +751,11 @@
 		.model_id	= AMIC_A29002T,
 		.total_size	= 256,
 		.page_size	= 64 * 1024,
-		.tested		= TEST_OK_PREW,
+		.tested		= TEST_OK_PRE,
 		.probe		= probe_29f002,
 		.probe_timing	= TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
 		.erase		= erase_29f002,
-		.write		= write_29f002,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
@@ -1075,7 +1075,7 @@
 		.probe		= probe_jedec,
 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
 		.erase		= erase_chip_jedec,
-		.write		= write_en29f002a,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
@@ -1087,11 +1087,11 @@
 		.model_id	= EN_29F002T,
 		.total_size	= 256,
 		.page_size	= 256,
-		.tested		= TEST_OK_PREW,
+		.tested		= TEST_OK_PRE,
 		.probe		= probe_jedec,
 		.probe_timing	= TIMING_ZERO,	/* Datasheet has no timing info specified */
 		.erase		= erase_chip_jedec,
-		.write		= write_en29f002a,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
@@ -1518,11 +1518,11 @@
 		.model_id	= MX_29F001B,
 		.total_size	= 128,
 		.page_size	= 32 * 1024,
-		.tested		= TEST_OK_PREW,
+		.tested		= TEST_OK_PRE,
 		.probe		= probe_29f002,
 		.probe_timing	= TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
 		.erase		= erase_29f002,
-		.write		= write_29f002,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
@@ -1534,11 +1534,11 @@
 		.model_id	= MX_29F001T,
 		.total_size	= 128,
 		.page_size	= 32 * 1024,
-		.tested		= TEST_OK_PREW,
+		.tested		= TEST_OK_PRE,
 		.probe		= probe_29f002,
 		.probe_timing	= TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
 		.erase		= erase_29f002,
-		.write		= write_29f002,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
@@ -1554,7 +1554,7 @@
 		.probe		= probe_29f002,
 		.probe_timing	= TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
 		.erase		= erase_29f002,
-		.write		= write_29f002,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
@@ -1566,11 +1566,11 @@
 		.model_id	= MX_29F002T,
 		.total_size	= 256,
 		.page_size	= 64 * 1024,
-		.tested		= TEST_OK_PREW,
+		.tested		= TEST_OK_PRE,
 		.probe		= probe_29f002,
 		.probe_timing	= TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
 		.erase		= erase_29f002,
-		.write		= write_29f002,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
@@ -1586,7 +1586,7 @@
 		.probe		= probe_29f002,
 		.probe_timing	= TIMING_IGNORED, /* routine don't use probe_timing (mx29f002.c) */
 		.erase		= erase_29f002,
-		.write		= write_29f002,
+		.write		= write_jedec_1,
 		.read		= read_memmapped,
 	},
 
diff --git a/jedec.c b/jedec.c
index 0a5eda0..83a0b83 100644
--- a/jedec.c
+++ b/jedec.c
@@ -353,3 +353,30 @@
 
 	return failed;
 }
+
+int write_jedec_1(struct flashchip *flash, uint8_t * buf)
+{
+	int i;
+	chipaddr bios = flash->virtual_memory;
+	chipaddr dst = bios;
+
+	programmer_delay(10);
+	if (erase_flash(flash)) {
+		fprintf(stderr, "ERASE FAILED!\n");
+		return -1;
+	}
+
+	printf("Programming page: ");
+	for (i = 0; i < flash->total_size; i++) {
+		if ((i & 0x3) == 0)
+			printf("address: 0x%08lx", (unsigned long)i * 1024);
+
+                write_sector_jedec(bios, buf + i * 1024, dst + i * 1024, 1024);
+
+		if ((i & 0x3) == 0)
+			printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
+	}
+
+	printf("\n");
+	return 0;
+}
diff --git a/m29f002.c b/m29f002.c
index 00cbbc1..01a7a50 100644
--- a/m29f002.c
+++ b/m29f002.c
@@ -45,6 +45,7 @@
 	chipaddr dst = bios + start;
 
 	/* erase */
+	/* FIXME: use erase_sector_jedec? */
 	chip_writeb(0xaa, bios + 0x555);
 	chip_writeb(0x55, bios + 0xaaa);
 	chip_writeb(0x80, bios + 0x555);
@@ -59,6 +60,7 @@
 	}
 
 	/* program */
+	/* FIXME: use write_sector_jedec? */
 	while (size--) {
 		chip_writeb(0xaa, bios + 0x555);
 		chip_writeb(0x55, bios + 0xaaa);
diff --git a/m29f400bt.c b/m29f400bt.c
index 5c36db9..c327f44 100644
--- a/m29f400bt.c
+++ b/m29f400bt.c
@@ -20,6 +20,12 @@
 
 #include "flash.h"
 
+/* WARNING! 
+   This chip uses the standard JEDEC Addresses in 16-bit mode as word
+   addresses. In byte mode, 0xAAA has to be used instead of 0x555 and
+   0x555 instead of 0x2AA. Do *not* blindly replace with standard JEDEC
+   functions. */
+
 void write_page_m29f400bt(chipaddr bios, uint8_t *src,
 			  chipaddr dst, int page_size)
 {
diff --git a/mx29f002.c b/mx29f002.c
index f170360..7838c3d 100644
--- a/mx29f002.c
+++ b/mx29f002.c
@@ -43,6 +43,9 @@
 	return 0;
 }
 
+/* FIXME: Use erase_chip_jedec?
+ * erase_29f002 uses shorter addresses, sends F0 (exit ID mode) and
+ * and has a bigger delay before polling the toggle bit */
 int erase_29f002(struct flashchip *flash)
 {
 	chipaddr bios = flash->virtual_memory;
@@ -64,37 +67,3 @@
 	}
 	return 0;
 }
-
-int write_29f002(struct flashchip *flash, uint8_t *buf)
-{
-	int i;
-	int total_size = flash->total_size * 1024;
-	chipaddr bios = flash->virtual_memory;
-	chipaddr dst = bios;
-
-	chip_writeb(0xF0, bios);
-	programmer_delay(10);
-	if (erase_29f002(flash)) {
-		fprintf(stderr, "ERASE FAILED!\n");
-		return -1;
-	}
-	printf("Programming page: ");
-	for (i = 0; i < total_size; i++) {
-		/* write to the sector */
-		if ((i & 0xfff) == 0)
-			printf("address: 0x%08lx", (unsigned long)i);
-		chip_writeb(0xAA, bios + 0x5555);
-		chip_writeb(0x55, bios + 0x2AAA);
-		chip_writeb(0xA0, bios + 0x5555);
-		chip_writeb(*buf++, dst++);
-
-		/* wait for Toggle bit ready */
-		toggle_ready_jedec(dst);
-
-		if ((i & 0xfff) == 0)
-			printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
-	}
-	printf("\n");
-
-	return 0;
-}
diff --git a/pm29f002.c b/pm29f002.c
index a01df88..bf78d13 100644
--- a/pm29f002.c
+++ b/pm29f002.c
@@ -20,18 +20,20 @@
 
 #include "flash.h"
 
+/* if write_sector_jedec is used,
+   this is write_jedec_1 */
 int write_pm29f002(struct flashchip *flash, uint8_t *buf)
 {
 	int i, total_size = flash->total_size * 1024;
 	chipaddr bios = flash->virtual_memory;
 	chipaddr dst = bios;
 
-	/* Pm29F002T/B use the same erase method... */
-	if (erase_29f040b(flash)) {
+	if (erase_flash(flash)) {
 		fprintf(stderr, "ERASE FAILED!\n");
 		return -1;
 	}
 
+	/* FIXME: use write_sector_jedec? */
 	printf("Programming page: ");
 	for (i = 0; i < total_size; i++) {
 		if ((i & 0xfff) == 0)
