--- fis.orig/fis.c	2010-05-12 11:09:22.000000000 -0700
+++ fis/fis.c	2010-05-12 11:05:45.000000000 -0700
@@ -401,9 +401,24 @@
   dir_t dir;
   load_dir(fd,offset,&size,swap_endianness,&dir);
   fprintf(stdout,"Name              FLASH addr  Mem addr    Length      Entry point Checksum\n");
-  FOR_EACH_DIR_ENTRY(dir,i) {
-    dump_desc(stdout,get(i));
-  }
+  uint32_t last_addr = 0;
+  bool image_found;
+  do {
+    uint32_t lowest_addr = 0xffffffff;
+    iter_t index;
+    image_found = false;
+    FOR_EACH_DIR_ENTRY(dir,i) {
+      const struct fis_image_desc *d = get(i);
+      if ((d->flash_base >= last_addr) && (d->flash_base < lowest_addr)) {
+        lowest_addr = d->flash_base;
+        image_found = true;
+        index = i;
+      }
+    }
+    if (image_found)
+      dump_desc(stdout,get(index));
+    last_addr = lowest_addr + 1;
+  } while (image_found == true);
 }
 
 
