diff --git a/flash.h b/flash.h
index 8783032..e31a219 100644
--- a/flash.h
+++ b/flash.h
@@ -446,9 +446,9 @@
 int spi_chip_read(struct flashchip *flash, uint8_t *buf, int start, int len);
 uint8_t spi_read_status_register(void);
 int spi_disable_blockprotect(void);
-void spi_byte_program(int address, uint8_t byte);
-int spi_nbyte_program(int address, uint8_t *bytes, int len);
-int spi_nbyte_read(int address, uint8_t *bytes, int len);
+int spi_byte_program(int addr, uint8_t byte);
+int spi_nbyte_program(int addr, uint8_t *bytes, int len);
+int spi_nbyte_read(int addr, uint8_t *bytes, int len);
 int spi_read_chunked(struct flashchip *flash, uint8_t *buf, int start, int len, int chunksize);
 int spi_aai_write(struct flashchip *flash, uint8_t *buf);
 uint32_t spi_get_valid_read_addr(void);
diff --git a/ft2232_spi.c b/ft2232_spi.c
index ea7a810..8e6e836 100644
--- a/ft2232_spi.c
+++ b/ft2232_spi.c
@@ -276,7 +276,6 @@
 		else
 			l = total_size - i;
 
-		spi_write_enable();
 		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
diff --git a/it87spi.c b/it87spi.c
index eae4978..d5f7a51 100644
--- a/it87spi.c
+++ b/it87spi.c
@@ -232,6 +232,7 @@
 	result = spi_write_enable();
 	if (result)
 		return result;
+	/* FIXME: The command below seems to be redundant or wrong. */
 	OUTB(0x06, it8716f_flashport + 1);
 	OUTB(((2 + (fast_spi ? 1 : 0)) << 4), it8716f_flashport);
 	for (i = 0; i < 256; i++) {
@@ -262,10 +263,7 @@
 
 	spi_disable_blockprotect();
 	for (i = 0; i < total_size; i++) {
-		result = spi_write_enable();
-		if (result)
-			return result;
-		spi_byte_program(i, buf[i]);
+		result = spi_byte_program(i, buf[i]);
 		while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
 			programmer_delay(10);
 	}
diff --git a/sb600spi.c b/sb600spi.c
index faafd82..937550d 100644
--- a/sb600spi.c
+++ b/sb600spi.c
@@ -73,10 +73,7 @@
 	printf("Programming flash");
 	for (i = 0; i < total_size; i++, buf++) {
 		spi_disable_blockprotect();
-		result = spi_write_enable();
-		if (result)
-			return result;
-		spi_byte_program(i, *buf);
+		result = spi_byte_program(i, *buf);
 		/* wait program complete. */
 		if (i % 0x8000 == 0)
 			printf(".");
diff --git a/spi.c b/spi.c
index 8a5bf93..ceda14e 100644
--- a/spi.c
+++ b/spi.c
@@ -154,21 +154,7 @@
 	result = spi_send_command(sizeof(cmd), 0, cmd, NULL);
 
 	if (result)
-		printf_debug("%s failed", __func__);
-	if (result == SPI_INVALID_OPCODE) {
-		switch (spi_controller) {
-		case SPI_CONTROLLER_ICH7:
-		case SPI_CONTROLLER_ICH9:
-		case SPI_CONTROLLER_VIA:
-			printf_debug(" due to SPI master limitation, ignoring"
-				     " and hoping it will be run as PREOP\n");
-			return 0;
-		default:
-			break;
-		}
-	}
-	if (result)
-		printf_debug("\n");
+		printf_debug("%s failed\n", __func__);
 
 	return result;
 }
@@ -736,39 +722,80 @@
 	return spi_send_command(sizeof(cmd), 0, cmd, NULL);
 }
 
-void spi_byte_program(int address, uint8_t byte)
+int spi_byte_program(int addr, uint8_t byte)
 {
-	const unsigned char cmd[JEDEC_BYTE_PROGRAM_OUTSIZE] = {
-		JEDEC_BYTE_PROGRAM,
-		(address >> 16) & 0xff,
-		(address >> 8) & 0xff,
-		(address >> 0) & 0xff,
-		byte
-	};
+	int result;
+	struct spi_command spicommands[] = {
+	{
+		.writecnt	= JEDEC_WREN_OUTSIZE,
+		.writearr	= (const unsigned char[]){ JEDEC_WREN },
+		.readcnt	= 0,
+		.readarr	= NULL,
+	}, {
+		.writecnt	= JEDEC_BYTE_PROGRAM_OUTSIZE,
+		.writearr	= (const unsigned char[]){ JEDEC_BYTE_PROGRAM, (addr >> 16) & 0xff, (addr >> 8) & 0xff, (addr & 0xff), byte },
+		.readcnt	= 0,
+		.readarr	= NULL,
+	}, {
+		.writecnt	= 0,
+		.writearr	= NULL,
+		.readcnt	= 0,
+		.readarr	= NULL,
+	}};
 
-	/* Send Byte-Program */
-	spi_send_command(sizeof(cmd), 0, cmd, NULL);
+	result = spi_send_multicommand(spicommands);
+	if (result) {
+		printf_debug("%s failed during command execution\n", __func__);
+		return result;
+	}
+	return result;
 }
 
 int spi_nbyte_program(int address, uint8_t *bytes, int len)
 {
+	int result;
+	/* FIXME: Switch to malloc based on len unless that kills speed. */
 	unsigned char cmd[JEDEC_BYTE_PROGRAM_OUTSIZE - 1 + 256] = {
 		JEDEC_BYTE_PROGRAM,
 		(address >> 16) & 0xff,
 		(address >> 8) & 0xff,
 		(address >> 0) & 0xff,
 	};
+	struct spi_command spicommands[] = {
+	{
+		.writecnt	= JEDEC_WREN_OUTSIZE,
+		.writearr	= (const unsigned char[]){ JEDEC_WREN },
+		.readcnt	= 0,
+		.readarr	= NULL,
+	}, {
+		.writecnt	= JEDEC_BYTE_PROGRAM_OUTSIZE - 1 + len,
+		.writearr	= cmd,
+		.readcnt	= 0,
+		.readarr	= NULL,
+	}, {
+		.writecnt	= 0,
+		.writearr	= NULL,
+		.readcnt	= 0,
+		.readarr	= NULL,
+	}};
 
+	if (!len) {
+		printf_debug ("%s called for zero-length write\n", __func__);
+		return 1;
+	}
 	if (len > 256) {
-		printf_debug ("%s called for too long a write\n",
-		     __FUNCTION__);
+		printf_debug ("%s called for too long a write\n", __func__);
 		return 1;
 	}
 
 	memcpy(&cmd[4], bytes, len);
 
-	/* Send Byte-Program */
-	return spi_send_command(4 + len, 0, cmd, NULL);
+	result = spi_send_multicommand(spicommands);
+	if (result) {
+		printf_debug("%s failed during command execution\n", __func__);
+		return result;
+	}
+	return result;
 }
 
 int spi_disable_blockprotect(void)
@@ -883,7 +910,6 @@
 
 	spi_disable_blockprotect();
 	for (i = 0; i < total_size; i++) {
-		spi_write_enable();
 		spi_byte_program(i, buf[i]);
 		while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
 			programmer_delay(10);
diff --git a/wbsio_spi.c b/wbsio_spi.c
index cbdddd2..7876198 100644
--- a/wbsio_spi.c
+++ b/wbsio_spi.c
@@ -200,11 +200,8 @@
 		fprintf(stderr, "ERASE FAILED!\n");
 		return -1;
 	}
-	result = spi_write_enable();
-	if (result)
-		return result;
 	for (pos = 0; pos < size; pos++) {
-		spi_byte_program(pos, buf[pos]);
+		result = spi_byte_program(pos, buf[pos]);
 		while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
 			programmer_delay(10);
 	}
