Index: /trunk/Ohana/src/delstar/src/find_matches.c
===================================================================
--- /trunk/Ohana/src/delstar/src/find_matches.c	(revision 17243)
+++ /trunk/Ohana/src/delstar/src/find_matches.c	(revision 17244)
@@ -3,7 +3,7 @@
 void find_matches (Catalog *catalog, int photcode, int start, int end) {
 
-  int i, j, k, n, m, N, M, drop;
+  int i, j, k, n, m, N, M, drop, averef;
   int *next, *next_miss, *ave_miss, last, last_miss;
-  int Nave, Nmeas, Nmiss;
+  int Nave, Nmeas, NMEAS, Nmiss;
   int Nmeasfound, Nsecfilt;
   int this, prev;
@@ -123,4 +123,8 @@
       /* find next valid entry -- notice lack of error checking... */
       for (j = 0; (j < Nmeas) && (next[m+j] == -2); j++);
+      if (catalog[0].measure[m+j].averef != n) {
+	fprintf (stderr, "error? measure.averef and average.measureOffset are mismatched\n");
+	exit (1);
+      }
       catalog[0].average[n].measureOffset = m + j;
     }
@@ -187,8 +191,10 @@
   /* fix order of Measure (memory intensive, but fast) */
   N = 0; 
-  ALLOCATE (tmpmeasure, Measure, Nmeas);
+  NMEAS = Nmeas;
+  ALLOCATE (tmpmeasure, Measure, NMEAS);
   for (i = 0; i < Nave; i++) {
     n = catalog[0].average[i].measureOffset;
     catalog[0].average[i].measureOffset = N;
+    averef = catalog[0].measure[n].averef;
     for (k = 0; k < catalog[0].average[i].Nmeasure; k++, N++) {
       if ((n == -1) || (n == -2)) {
@@ -196,7 +202,13 @@
 	exit (1);
       }
+      // all measures for this object should have the same initial averef
+      if (catalog[0].measure[n].averef != averef) {
+	fprintf (stderr, "measure table is confused\n");
+	exit (1);
+      }
       tmpmeasure[N] = catalog[0].measure[n]; 
       tmpmeasure[N].averef = i;
       n = next[n];
+      CHECK_REALLOCATE (tmpmeasure, Measure, NMEAS, N, 10000);
     }
   }
