Index: /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/include/dvomerge.h
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/include/dvomerge.h	(revision 38641)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/include/dvomerge.h	(revision 38642)
@@ -202,5 +202,5 @@
 int        dvomergeUpdate_catalogs PROTO((char *input, char *output, SkyTable *outsky, SkyList *inlist, int NsecfiltInput, int NsecfiltOutput, IDmapType *IDmap, int *secfiltMap));
 
-int        replace_match           PROTO((Average *average_out, Measure *measure_out, Average *average_in, Measure *measure_in));
+int        replace_match           PROTO((Average *average_out, Measure *measure_out, off_t *next_meas, Average *average_in, Measure *measure_in));
 
 int        IDmapSave               PROTO((char *filename, IDmapType *IDmap));
Index: /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/merge_catalogs_old.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/merge_catalogs_old.c	(revision 38641)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/merge_catalogs_old.c	(revision 38642)
@@ -216,7 +216,6 @@
 	// index to first measure for this object
 	// XXX this does not support lensing measurements
-	int Mout = output[0].average[n].measureOffset;  
-	if (replace_match (&output[0].average[n], &output[0].measure[Mout], &input[0].average[N], &input[0].measure[offset])) {
-	  input[0].found_t[N] = Mout;
+	if (replace_match (&output[0].average[n], output[0].measure, next_meas, &input[0].average[N], &input[0].measure[offset])) {
+	  input[0].found_t[N] = output[0].average[n].measureOffset;  
 	  continue;
 	}
Index: /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/replace_match.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/replace_match.c	(revision 38641)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/replace_match.c	(revision 38642)
@@ -6,5 +6,5 @@
 
 // average and measure pointers to the objects of interest and their first / current measurement
-int replace_match (Average *average_out, Measure *measure_out, Average *average_in, Measure *measure_in) {
+int replace_match (Average *average_out, Measure *measure_out, off_t *next_meas, Average *average_in, Measure *measure_in) {
 
   int Nout;
@@ -12,14 +12,18 @@
   unsigned int catID;
 
-  myAbort ("fix this function to use next_meas to loop over measurements for an object");
+  off_t m = average_out->measureOffset;
 
   // find the matching photcode in the object's list of measurements
   for (Nout = 0; Nout < average_out[0].Nmeasure; Nout ++) {
-    if (measure_out[Nout].photcode != measure_in[0].photcode) continue;
+    myAssert (m > -1, "oops");
+    if (measure_out[m].photcode != measure_in[0].photcode) {
+      m = next_meas[m];
+      continue;
+    }
     
     // set the new measurements
-    averef = measure_out[Nout].averef;
-    catID  = measure_out[Nout].catID;
-    measure_out[Nout] = measure_in[0];
+    averef = measure_out[m].averef;
+    catID  = measure_out[m].catID;
+    measure_out[m] = measure_in[0];
 
     // old code: find R,D using average_in[0], the get offset relative to average_out[0].  no longer
@@ -30,20 +34,20 @@
     // measure_out[Nout].dD = 3600.0*(average_out[0].D - Din);
 
-    measure_out[Nout].dbFlags  = 0;  // XXX why reset these?
-    measure_out[Nout].averef   = averef;
-    measure_out[Nout].objID    = average_out[0].objID;
-    measure_out[Nout].catID    = catID;
+    measure_out[m].dbFlags  = 0;  // XXX why reset these?
+    measure_out[m].averef   = averef;
+    measure_out[m].objID    = average_out[0].objID;
+    measure_out[m].catID    = catID;
 
-    float dRoff = dvoOffsetR(&measure_out[Nout], average_out);
+    float dRoff = dvoOffsetR(&measure_out[m], average_out);
 
     // rationalize dR
     if (dRoff > +180.0*3600.0) {
       // average on high end of boundary, move star up
-      measure_out[Nout].R += 360.0;
+      measure_out[m].R += 360.0;
       dRoff -= 360.0*3600.0;
     }
     if (dRoff < -180.0*3600.0) {
       // average on low end of boundary, move star down
-      measure_out[Nout].R -= 360.0;
+      measure_out[m].R -= 360.0;
       dRoff += 360.0*3600.0;
     }
@@ -55,5 +59,5 @@
       if (fabs(dRoff*cosD) > 10*RADIUS) {
 	fprintf (stderr, "surprisingly distant detection: %10.6f,%10.6f vs %10.6f,%10.6f\n", 
-		 average_out[0].R, average_out[0].D, measure_out[Nout].R, measure_out[Nout].D);
+		 average_out[0].R, average_out[0].D, measure_out[m].R, measure_out[m].D);
       }
     }
