Index: /trunk/Ohana/src/opihi/dvo/avmatch.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/avmatch.c	(revision 27609)
+++ /trunk/Ohana/src/opihi/dvo/avmatch.c	(revision 27610)
@@ -83,4 +83,11 @@
     if ((vec[i] = SelectVector (name, ANYVECTOR, TRUE)) == NULL) goto escape;
     ResetVector (vec[i], fields[i].type, NPTS);
+    for (n = 0; n < vec[i][0].Nelements; n++) {
+      if (vec[i][0].type == OPIHI_FLT) {
+	vec[i][0].elements.Flt[n] = NAN;
+      } else {
+	vec[i][0].elements.Int[n] = 0; // or NAN_INT?
+      }
+    }
   }
   ALLOCATE (index, off_t, NPTS);
@@ -103,4 +110,8 @@
     }
     dvo_catalog_unlock (&catalog);  /// we can unlock here since this is read-only (do not block other access)
+    if (catalog.Naverage == 0) {
+      dvo_catalog_free (&catalog);
+      continue;
+    }
 
     find_matches_by_vectors (skylist[0].regions[i], &catalog, RAvec, DECvec, RADIUS, index);
@@ -111,14 +122,6 @@
 
       if (Ncat == -1) continue;
-      if (Ncat == -2) {
-	for (n = 0; n < Nfields; n++) {
-	  if (vec[n][0].type == OPIHI_FLT) {
-	    vec[n][0].elements.Flt[Npts] = NAN;
-	  } else {
-	    vec[n][0].elements.Int[Npts] = 0; // or NAN_INT?
-	  }
-	}
-	continue;
-      }
+      if (Ncat == -2) continue;
+
       // XXX set a 'found' vector to double check we catch everything?
       m = catalog.average[Ncat].measureOffset;
@@ -148,5 +151,4 @@
   dbFreeFields (fields, Nfields);
   SkyListFree (skylist);
-  dvo_catalog_free (&catalog);
   return (TRUE);
 
@@ -156,5 +158,4 @@
   dbFreeFields (fields, Nfields);
   SkyListFree (skylist);
-  dvo_catalog_free (&catalog);
   return (FALSE);
 
Index: /trunk/Ohana/src/opihi/dvo/find_matches.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/find_matches.c	(revision 27609)
+++ /trunk/Ohana/src/opihi/dvo/find_matches.c	(revision 27610)
@@ -7,5 +7,5 @@
 int find_matches_by_vectors (SkyRegion *region, Catalog *catalog, Vector *RAvec, Vector *DECvec, float RADIUS, off_t *index) {
 
-  off_t i, j, J, Jmin, n, N, Npoints;
+  off_t i, j, J, Jmin, Npoints, Nmatch;
   off_t *N1, *N2;
   double *X1, *Y1, *X2, *Y2;
@@ -16,7 +16,9 @@
   Coords tcoords;
 
-  assert(catalog[0].sorted);
+  // XXX dvoconvert does not correctly maintain 'sorted' 
+  // assert(catalog[0].sorted);
 
   Npoints = RAvec->Nelements;
+  Nmatch = 0;
 
   /** allocate local arrays (points) **/
@@ -80,10 +82,10 @@
   RADIUS2 = RADIUS*RADIUS;
 
-# define NEXTi { i++; continue; }                                                                                                                                                
-# define NEXTj { j++; continue; }                                                                                                                                                
+# define NEXTi { i++; continue; }
+# define NEXTj { j++; continue; }
                                                                                                                                                                                  
   /** find matched stars **/
   for (i = j = 0; (i < Npoints) && (j < Nave); ) {
-    if (index[i] == -1) NEXTi;
+    if (index[N1[i]] == -1) NEXTi;
     if (!finite(X1[i]) || !finite(Y1[i])) NEXTi;
     if (!finite(X2[j]) || !finite(Y2[j])) NEXTj;
@@ -112,10 +114,12 @@
 
     /* no match, try next detection */ 
-    if (Jmin == -1) NEXTi;
+    if (Jmin == -1) {
+      NEXTi;
+    }
 
     /*** a match is found, set the index for this entry ***/
-    n = N2[Jmin];
-    N = N1[i];
-    index[N] = n;
+    index[N1[i]] = N2[Jmin];
+
+    Nmatch ++;
 
     NEXTi;
Index: /trunk/Ohana/src/opihi/dvo/skyregion.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/skyregion.c	(revision 27609)
+++ /trunk/Ohana/src/opihi/dvo/skyregion.c	(revision 27610)
@@ -140,4 +140,5 @@
     }
   }
+  list[0].Nregions = Nout;
 
   free (found);
