diff --git a/flash.h b/flash.h
index e4f60c4..7383b5d 100644
--- a/flash.h
+++ b/flash.h
@@ -505,7 +505,6 @@
 int it8716f_spi_send_command(unsigned int writecnt, unsigned int readcnt,
 			const unsigned char *writearr, unsigned char *readarr);
 int it8716f_spi_chip_read(struct flashchip *flash, uint8_t *buf, int start, int len);
-int it8716f_spi_chip_write_1(struct flashchip *flash, uint8_t *buf);
 int it8716f_spi_chip_write_256(struct flashchip *flash, uint8_t *buf);
 
 /* sb600spi.c */
diff --git a/ft2232_spi.c b/ft2232_spi.c
index 5d229b3..955bc56 100644
--- a/ft2232_spi.c
+++ b/ft2232_spi.c
@@ -271,6 +271,14 @@
 	int total_size = 1024 * flash->total_size;
 	int i;
 
+	spi_disable_blockprotect();
+	/* Erase first */
+	printf("Erasing flash before programming... ");
+	if (flash->erase(flash)) {
+		fprintf(stderr, "ERASE FAILED!\n");
+		return -1;
+	}
+	printf("done.\n");
 	printf_debug("total_size is %d\n", total_size);
 	for (i = 0; i < total_size; i += 256) {
 		int l, r;
@@ -281,14 +289,12 @@
 
 		if ((r = spi_nbyte_program(i, &buf[i], l))) {
 			fprintf(stderr, "%s: write fail %d\n", __FUNCTION__, r);
-			// spi_write_disable();  chip does this for us
 			return 1;
 		}
 		
 		while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
 			/* loop */;
 	}
-	// spi_write_disable();  chip does this for us
 
 	return 0;
 }
diff --git a/it87spi.c b/it87spi.c
index 41ce6db..f3b9227 100644
--- a/it87spi.c
+++ b/it87spi.c
@@ -248,32 +248,6 @@
 }
 
 /*
- * Program chip using firmware cycle byte programming. (SLOW!)
- * This is for chips which can only handle one byte writes
- * and for chips where memory mapped programming is impossible due to
- * size constraints in IT87* (over 512 kB)
- */
-int it8716f_spi_chip_write_1(struct flashchip *flash, uint8_t *buf)
-{
-	int total_size = 1024 * flash->total_size;
-	int i;
-	int result;
-
-	fast_spi = 0;
-
-	spi_disable_blockprotect();
-	for (i = 0; i < total_size; i++) {
-		result = spi_byte_program(i, buf[i]);
-		while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
-			programmer_delay(10);
-	}
-	/* resume normal ops... */
-	OUTB(0x20, it8716f_flashport);
-
-	return 0;
-}
-
-/*
  * IT8716F only allows maximum of 512 kb SPI mapped to LPC memory cycles
  * Need to read this big flash using firmware cycles 3 byte at a time.
  */
@@ -301,8 +275,16 @@
 	 * mapped access.
 	 */
 	if ((programmer == PROGRAMMER_IT87SPI) || (total_size > 512 * 1024)) {
-		it8716f_spi_chip_write_1(flash, buf);
+		spi_chip_write_1(flash, buf);
 	} else {
+		spi_disable_blockprotect();
+		/* Erase first */
+		printf("Erasing flash before programming... ");
+		if (flash->erase(flash)) {
+			fprintf(stderr, "ERASE FAILED!\n");
+			return -1;
+		}
+		printf("done.\n");
 		for (i = 0; i < total_size / 256; i++) {
 			it8716f_spi_page_program(flash, i, buf);
 		}
diff --git a/sb600spi.c b/sb600spi.c
index 5f2cf98..c853f42 100644
--- a/sb600spi.c
+++ b/sb600spi.c
@@ -45,12 +45,14 @@
 	return spi_read_chunked(flash, buf, start, len, 8);
 }
 
+/* FIXME: SB600 can write 5 bytes per transaction. */
 int sb600_spi_write_1(struct flashchip *flash, uint8_t *buf)
 {
 	int rc = 0, i;
 	int total_size = flash->total_size * 1024;
 	int result;
 
+	spi_disable_blockprotect();
 	/* Erase first */
 	printf("Erasing flash before programming... ");
 	if (flash->erase(flash)) {
@@ -61,7 +63,6 @@
 
 	printf("Programming flash");
 	for (i = 0; i < total_size; i++, buf++) {
-		spi_disable_blockprotect();
 		result = spi_byte_program(i, *buf);
 		/* wait program complete. */
 		if (i % 0x8000 == 0)
diff --git a/spi.c b/spi.c
index b2812ba..85d1e47 100644
--- a/spi.c
+++ b/spi.c
@@ -963,6 +963,13 @@
 	int i;
 
 	spi_disable_blockprotect();
+	/* Erase first */
+	printf("Erasing flash before programming... ");
+	if (flash->erase(flash)) {
+		fprintf(stderr, "ERASE FAILED!\n");
+		return -1;
+	}
+	printf("done.\n");
 	for (i = 0; i < total_size; i++) {
 		spi_byte_program(i, buf[i]);
 		while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
diff --git a/wbsio_spi.c b/wbsio_spi.c
index ded0840..6b9425f 100644
--- a/wbsio_spi.c
+++ b/wbsio_spi.c
@@ -183,29 +183,17 @@
 		return 1;
 	}
 
-	read_memmapped(flash, buf, start, len);
-	return 0;
+	return read_memmapped(flash, buf, start, len);
 }
 
 int wbsio_spi_write_1(struct flashchip *flash, uint8_t *buf)
 {
-	int pos, size = flash->total_size * 1024;
-	int result;
+	int size = flash->total_size * 1024;
 
-	if (flash->total_size > 1024) {
+	if (size > 1024 * 1024) {
 		fprintf(stderr, "%s: Winbond saved on 4 register bits so max chip size is 1024 KB!\n", __func__);
 		return 1;
 	}
 
-	if (flash->erase(flash)) {
-		fprintf(stderr, "ERASE FAILED!\n");
-		return -1;
-	}
-	for (pos = 0; pos < size; pos++) {
-		result = spi_byte_program(pos, buf[pos]);
-		while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
-			programmer_delay(10);
-	}
-	spi_write_disable();
-	return 0;
+	return spi_chip_write_1(flash, buf);
 }
