  
     if (!match_sesstime(bsr, bsr->sesstime, rec, 1)) {
        Dmsg2(dbglevel, "Fail on sesstime. bsr=%u rec=%u\n",
-@@ -605,42 +651,35 @@
+@@ -605,42 +631,35 @@
     return 0;
  }
  

+         } else {
+            return found_bsr;
+         }
       }
    }
 
-   /* Find the smallest file in the bsr */
-   vf = bsr->volfile;
-   bsr_sfile = vf->sfile;
-   while ( (vf=vf->next) ) {
-      if (vf->sfile < bsr_sfile) {
-         bsr_sfile = vf->sfile;
-      }
+   if (!get_smallest_volfile(found_bsr->volfile, &found_bsr_sfile)) {
+      return bsr;               /* found_bsr seems to be done...*/
    }
+   
+   if (!get_smallest_volfile(bsr->volfile, &bsr_sfile)) {
+      return found_bsr;         /* bsr seems to be done... */
+   }
     
    /* if the bsr file is less than the found_bsr file, return bsr */
    if (found_bsr_sfile > bsr_sfile) {
       return_bsr = bsr;
    } else if (found_bsr_sfile == bsr_sfile) {
-      /* Files are equal */
-      /* find smallest block in found_bsr */
-      vb = found_bsr->volblock;
-      found_bsr_sblock = vb->sblock;
-      while ( (vb=vb->next) ) {
-         if (vb->sblock < found_bsr_sblock) {
-            found_bsr_sblock = vb->sblock;
-         }
+      /* Files are equal, use block to find the smallest */
+      if (!get_smallest_volblock(found_bsr->volblock, &found_bsr_sblock)) {
+         return bsr;            /* Should not be there */
       }
-      /* Find smallest block in bsr */
-      vb = bsr->volblock;
-      bsr_sblock = vb->sblock;
-      while ( (vb=vb->next) ) {
-         if (vb->sblock < bsr_sblock) {
-            bsr_sblock = vb->sblock;
-         }
+
+      if (!get_smallest_volblock(bsr->volblock, &bsr_sblock)) {
+         return found_bsr;      /* Should not be there */
       }
+
       /* Compare and return the smallest */
       if (found_bsr_sblock > bsr_sblock) {
          return_bsr = bsr;
       }
    }
+   Dmsg5(dbglevel, "find_smallest_volfile bsr=0x%p %i > %i | %i > %i\n",
+         return_bsr, found_bsr_sfile, bsr_sfile, found_bsr_sblock, bsr_sblock);
    return return_bsr;
 }
 
@@ -374,20 +420,20 @@
             volrec->VolumeName);
 
    if (!match_volfile(bsr, bsr->volfile, rec, 1)) {

 static int match_stream(BSR *bsr, BSR_STREAM *stream, DEV_RECORD *rec, bool done);
 static int match_all(BSR *bsr, DEV_RECORD *rec, VOLUME_LABEL *volrec, SESSION_LABEL *sessrec, bool done, JCR *jcr);
 static int match_block_sesstime(BSR *bsr, BSR_SESSTIME *sesstime, DEV_BLOCK *block);
@@ -255,7 +246,29 @@
 }
 
 /*
- * ***FIXME***
+ * Get the smallest address from this voladdr part
+ * Don't use "done" elements
+ */
+static bool get_smallest_voladdr(BSR_VOLADDR *va, uint64_t *ret)
+{
+   bool ok=false;
