diff --git a/flash_rom.c b/flash_rom.c
index 758c0e2..e7d49a5 100644
--- a/flash_rom.c
+++ b/flash_rom.c
@@ -33,6 +33,7 @@
 #include <unistd.h>
 #include <stdio.h>
 #include <pci/pci.h>
+#include <string.h>
 
 #include "flash.h"
 #include "jedec.h"
@@ -69,6 +70,8 @@
     {NULL,}
 };
 
+char *chip_to_probe = NULL;
+
 int enable_flash_sis630 (struct pci_dev *dev, char *name)
 {
     char b;
@@ -127,7 +130,6 @@
 enable_flash_e7500(struct pci_dev *dev, char *name) {
   /* register 4e.b gets or'ed with one */
   unsigned char old, new;
-  int ok;
   /* if it fails, it fails. There are so many variations of broken mobos
    * that it is hard to argue that we should quit at this point. 
    */
@@ -139,11 +141,11 @@
   if (new == old)
       return 0;
 
-  ok = pci_write_byte(dev, 0x4e, new);
+  pci_write_byte(dev, 0x4e, new);
 
-  if (ok != new) {
+  if (pci_read_byte(dev, 0x4e) != new) {
     printf("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 
-	   old, new, name);
+	   0x4e, new, name);
     return -1;
   }
   return 0;
@@ -189,21 +191,15 @@
 
 int
 enable_flash_vt8231(struct pci_dev *dev, char *name) {
-  unsigned char old, new;
-  int ok;
+  unsigned char val;
   
-  old = pci_read_byte(dev, 0x40);
+  val = pci_read_byte(dev, 0x40);
+  val |= 0x10;
+  pci_write_byte(dev, 0x40, val);
 
-  new = old | 0x10;
-
-  if (new == old)
-      return 0;
-
-  ok = pci_write_byte(dev, 0x40, new);
-
-  if (ok != 0) {
+  if (pci_read_byte(dev, 0x40) != val) {
     printf("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 
-	   old, new, name);
+	   0x40, val, name);
     return -1;
   }
   return 0;
@@ -278,6 +274,10 @@
     }
 
     while (flash->name != NULL) {
+	if (chip_to_probe && strcmp(flash->name, chip_to_probe) != 0) {
+	    flash++;
+	    continue;
+	}
 	printf("Trying %s, %d KB\n", flash->name, flash->total_size);
 	size = flash->total_size * 1024;
 	bios = mmap (0, size, PROT_WRITE | PROT_READ, MAP_SHARED,
@@ -425,10 +425,11 @@
 
 void usage(const char *name)
 {
-    printf("usage: %s [-rwv] [file]\n", name);
+    printf("usage: %s [-rwv] [-c chipname][file]\n", name);
     printf("-r: read flash and save into file\n"
         "-w: write file into flash (default when file is specified)\n"
         "-v: verify flash against file\n"
+        "-c: probe only for specified flash chip\n"
         " If no file is specified, then all that happens\n"
         " is that flash info is dumped\n");
     exit(1);
@@ -444,7 +445,10 @@
     int opt;
     int read_it = 0, write_it = 0, verify_it = 0;
     char *filename = NULL;
-    while ((opt = getopt(argc, argv, "rwv")) != EOF) {
+
+    setbuf(stdout, NULL);
+
+    while ((opt = getopt(argc, argv, "rwvc:")) != EOF) {
         switch (opt) {
         case 'r':
             read_it = 1;
@@ -455,6 +459,9 @@
         case 'v':
             verify_it = 1;
             break;
+        case 'c':
+            chip_to_probe = strdup(optarg);
+            break;
         default:
             usage(argv[0]);
             break;
@@ -509,7 +516,7 @@
         fclose(image);
     }
 
-    if (write_it)
+    if (write_it || (!read_it && !verify_it))
         flash->write (flash, buf);
     if (verify_it)
         verify_flash (flash, buf, /* verbose = */ 0);
diff --git a/mx29f002.c b/mx29f002.c
index d42ca2b..4ff98a0 100644
--- a/mx29f002.c
+++ b/mx29f002.c
@@ -97,7 +97,8 @@
    printf ("Programming Page: ");
     for (i = 0; i < total_size; i++) {
 	/* write to the sector */
-	printf ("address: 0x%08lx", i);
+	if ((i & 0xfff) == 0)
+	    printf ("address: 0x%08lx", i);
 	*(bios + 0x5555) = 0xAA;
 	*(bios + 0x2AAA) = 0x55;
 	*(bios + 0x5555) = 0xA0;
@@ -106,7 +107,8 @@
 	/* wait for Toggle bit ready */
 	toggle_ready_jedec(dst);
 
-	printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
+	if ((i & 0xfff) == 0)
+	    printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
     }
 #endif
     printf("\n");
diff --git a/w49f002u.c b/w49f002u.c
index 65b540c..bf8feb4 100644
--- a/w49f002u.c
+++ b/w49f002u.c
@@ -97,7 +97,8 @@
    printf ("Programming Page: ");
     for (i = 0; i < total_size; i++) {
 	/* write to the sector */
-	printf ("address: 0x%08lx", i);
+	if ((i & 0xfff) == 0)
+	    printf ("address: 0x%08lx", i);
 	*(bios + 0x5555) = 0xAA;
 	*(bios + 0x2AAA) = 0x55;
 	*(bios + 0x5555) = 0xA0;
@@ -106,7 +107,8 @@
 	/* wait for Toggle bit ready */
 	toggle_ready_jedec(dst);
 
-	printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
+	if ((i & 0xfff) == 0)
+	    printf ("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
     }
 #endif
     printf("\n");
