Index: /trunk/Ohana/src/dvomerge/src/merge_catalogs_old.c
===================================================================
--- /trunk/Ohana/src/dvomerge/src/merge_catalogs_old.c	(revision 28327)
+++ /trunk/Ohana/src/dvomerge/src/merge_catalogs_old.c	(revision 28328)
@@ -63,4 +63,6 @@
   tcoords.Npolyterms = 1;
   strcpy (tcoords.ctype, "RA---ARC");
+
+  if (VERBOSE) fprintf (stderr, "merging %s into %s\n", input[0].filename, output[0].filename);
 
   /* build spatial index (RA sort) referencing input array sequence */
@@ -161,4 +163,6 @@
       REALLOCATE (output[0].measure, Measure, NMEAS);
     }
+
+    // 4) average properties from the input and the output db need to be properly merged.
 
     /** add ALL measurements for this input average object **/
@@ -209,4 +213,18 @@
     }
 
+    // update the average properties to reflect the incoming entries:
+    // if the original value is NAN but the input value is not, accept the input:
+    for (j = 0; j < Nsecfilt; j++) {
+      if ( isfinite(output[0].secfilt[n*Nsecfilt+j].M)) continue;
+      if (!isfinite( input[0].secfilt[N*Nsecfilt+j].M)) continue;
+      output[0].secfilt[n*Nsecfilt+j].M     = input[0].secfilt[N*Nsecfilt+j].M;
+      output[0].secfilt[n*Nsecfilt+j].dM    = input[0].secfilt[N*Nsecfilt+j].dM;
+      output[0].secfilt[n*Nsecfilt+j].Xm    = input[0].secfilt[N*Nsecfilt+j].Xm;
+      output[0].secfilt[n*Nsecfilt+j].M_20  = input[0].secfilt[N*Nsecfilt+j].M_20;
+      output[0].secfilt[n*Nsecfilt+j].M_80  = input[0].secfilt[N*Nsecfilt+j].M_80;
+      output[0].secfilt[n*Nsecfilt+j].Ncode = input[0].secfilt[N*Nsecfilt+j].Ncode;
+      output[0].secfilt[n*Nsecfilt+j].Nused = input[0].secfilt[N*Nsecfilt+j].Nused;
+    }
+
     /* Nm is updated, but not written out in -update mode (for existing entries)
        Nm is recalculated in build_meas_links if loaded table is not sorted */
@@ -242,4 +260,6 @@
     if (!IN_REGION (input[0].average[N].R, input[0].average[N].D)) continue;
 
+    // XXX should we accept the input measurements for the fields?
+
     output[0].average[Nave].R         	   = input[0].average[N].R;
     output[0].average[Nave].D         	   = input[0].average[N].D;
@@ -247,5 +267,5 @@
     output[0].average[Nave].dD        	   = 0;
 
-    output[0].average[Nave].Nmeasure  	   = 1;
+    output[0].average[Nave].Nmeasure  	   = 0; // this value is update as the measurements are associated with this entry below
     output[0].average[Nave].Nmissing  	   = 0;
     output[0].average[Nave].Nextend        = 0;
@@ -282,11 +302,21 @@
 
     for (j = 0; j < Nsecfilt; j++) {
-      output[0].secfilt[Nave*Nsecfilt+j].M  = NAN;
-      output[0].secfilt[Nave*Nsecfilt+j].dM = NAN;
-      output[0].secfilt[Nave*Nsecfilt+j].Xm = NAN_S_SHORT;
-      output[0].secfilt[Nave*Nsecfilt+j].M_20 	= NAN_S_SHORT;
-      output[0].secfilt[Nave*Nsecfilt+j].M_80 	= NAN_S_SHORT;
-      output[0].secfilt[Nave*Nsecfilt+j].Ncode = 0;
-      output[0].secfilt[Nave*Nsecfilt+j].Nused = 0;
+      if (isfinite(input[0].secfilt[N*Nsecfilt+j].M)) {
+	output[0].secfilt[Nave*Nsecfilt+j].M     = input[0].secfilt[N*Nsecfilt+j].M;
+	output[0].secfilt[Nave*Nsecfilt+j].dM    = input[0].secfilt[N*Nsecfilt+j].dM;
+	output[0].secfilt[Nave*Nsecfilt+j].Xm    = input[0].secfilt[N*Nsecfilt+j].Xm;
+	output[0].secfilt[Nave*Nsecfilt+j].M_20  = input[0].secfilt[N*Nsecfilt+j].M_20;
+	output[0].secfilt[Nave*Nsecfilt+j].M_80  = input[0].secfilt[N*Nsecfilt+j].M_80;
+	output[0].secfilt[Nave*Nsecfilt+j].Ncode = input[0].secfilt[N*Nsecfilt+j].Ncode;
+	output[0].secfilt[Nave*Nsecfilt+j].Nused = input[0].secfilt[N*Nsecfilt+j].Nused;
+      } else {
+	output[0].secfilt[Nave*Nsecfilt+j].M     = NAN;
+	output[0].secfilt[Nave*Nsecfilt+j].dM    = NAN;
+	output[0].secfilt[Nave*Nsecfilt+j].Xm    = NAN_S_SHORT;
+	output[0].secfilt[Nave*Nsecfilt+j].M_20  = NAN_S_SHORT;
+	output[0].secfilt[Nave*Nsecfilt+j].M_80  = NAN_S_SHORT;
+	output[0].secfilt[Nave*Nsecfilt+j].Ncode = 0;
+	output[0].secfilt[Nave*Nsecfilt+j].Nused = 0;
+      }
     }
 
@@ -304,6 +334,8 @@
       output[0].measure[Nmeas].catID    = output[0].catID;
 
-      /* next[Nmeas] should always be -1 in this context (it is always the only
-	 measurement for the star) */
+      // as we add measurements, update Nmeasure to match
+      output[0].average[Nave].Nmeasure ++;
+
+      /* we set next[Nmeas] to -1 here, and update correctly below */
       input[0].found[N] = Nmeas;
       next_meas[Nmeas] = -1;
@@ -327,5 +359,5 @@
 # endif
 
-# define NOSORT FALSE
+# define NOSORT 0
   if (NOSORT) {
     output[0].sorted = FALSE;
