Index: /branches/eam_branches/ohana.20190329/src/dvomerge/include/dvomerge.h
===================================================================
--- /branches/eam_branches/ohana.20190329/src/dvomerge/include/dvomerge.h	(revision 41147)
+++ /branches/eam_branches/ohana.20190329/src/dvomerge/include/dvomerge.h	(revision 41148)
@@ -31,5 +31,8 @@
 int    IMAGES_ONLY;
 int    ACCEPT_MOTION;
+
 int    ACCEPT_ASTROM;
+int    RETAIN_AVE_PHOTOMETRY;
+
 char   CATDIR[DVO_MAX_PATH];
 char   GSCFILE[DVO_MAX_PATH];
@@ -63,4 +66,5 @@
 
 int    SKIP_MEASURE;
+int    SKIP_MISSING;
 int    SKIP_LENSING;
 int    SKIP_LENSOBJ;
Index: /branches/eam_branches/ohana.20190329/src/dvomerge/src/LoadCatalog.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/dvomerge/src/LoadCatalog.c	(revision 41147)
+++ /branches/eam_branches/ohana.20190329/src/dvomerge/src/LoadCatalog.c	(revision 41148)
@@ -10,5 +10,5 @@
   // always load all of the data (if any exists)
 
-  catalog[0].catflags = DVO_LOAD_AVERAGE | DVO_LOAD_MISSING | DVO_LOAD_SECFILT;
+  catalog[0].catflags = DVO_LOAD_AVERAGE | DVO_LOAD_SECFILT;
 
   if (SKIP_MEASURE) {
@@ -16,4 +16,10 @@
   } else {
     catalog[0].catflags = catalog[0].catflags | DVO_LOAD_MEASURE;
+  }
+
+  if (SKIP_MISSING) {
+    catalog[0].catflags = catalog[0].catflags | DVO_SKIP_MISSING;
+  } else {
+    catalog[0].catflags = catalog[0].catflags | DVO_LOAD_MISSING;
   }
 
Index: /branches/eam_branches/ohana.20190329/src/dvomerge/src/args.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/dvomerge/src/args.c	(revision 41147)
+++ /branches/eam_branches/ohana.20190329/src/dvomerge/src/args.c	(revision 41148)
@@ -53,4 +53,9 @@
     remove_argument (N, argc, argv);
   }
+  SKIP_MISSING = FALSE;
+  if ((N = get_argument (*argc, argv, "-skip-missing"))) {
+    SKIP_MISSING = TRUE;
+    remove_argument (N, argc, argv);
+  }
   SKIP_LENSING = FALSE;
   if ((N = get_argument (*argc, argv, "-skip-lensing"))) {
@@ -118,4 +123,12 @@
     remove_argument (N, argc, argv);
     ACCEPT_ASTROM = TRUE;
+  }
+
+  /* limit the impact of a dvomerge -parallel */
+  RETAIN_AVE_PHOTOMETRY = FALSE;
+  if ((N = get_argument (*argc, argv, "-retain-ave-photometry"))) {
+    remove_argument (N, argc, argv);
+    RETAIN_AVE_PHOTOMETRY = TRUE;
+    remove_argument (N, argc, argv);
   }
 
@@ -343,4 +356,12 @@
   }
 
+  /* limit the impact of a dvomerge -parallel */
+  RETAIN_AVE_PHOTOMETRY = FALSE;
+  if ((N = get_argument (*argc, argv, "-retain-ave-photometry"))) {
+    remove_argument (N, argc, argv);
+    RETAIN_AVE_PHOTOMETRY = TRUE;
+    remove_argument (N, argc, argv);
+  }
+
   /* extra error messages */
   MATCHED_TABLES = FALSE;
@@ -354,4 +375,9 @@
   if ((N = get_argument (*argc, argv, "-skip-measure"))) {
     SKIP_MEASURE = TRUE;
+    remove_argument (N, argc, argv);
+  }
+  SKIP_MISSING = FALSE;
+  if ((N = get_argument (*argc, argv, "-skip-missing"))) {
+    SKIP_MISSING = TRUE;
     remove_argument (N, argc, argv);
   }
Index: /branches/eam_branches/ohana.20190329/src/dvomerge/src/build_links.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/dvomerge/src/build_links.c	(revision 41147)
+++ /branches/eam_branches/ohana.20190329/src/dvomerge/src/build_links.c	(revision 41148)
@@ -185,4 +185,7 @@
   off_t *next_missing;
 
+  if (!missing) return NULL;
+  if (SKIP_MISSING) return NULL;
+
   N = 0;
 
Index: /branches/eam_branches/ohana.20190329/src/dvomerge/src/dvomergeUpdate_catalogs.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/dvomerge/src/dvomergeUpdate_catalogs.c	(revision 41147)
+++ /branches/eam_branches/ohana.20190329/src/dvomerge/src/dvomergeUpdate_catalogs.c	(revision 41148)
@@ -320,21 +320,23 @@
 	       UserPatch.Rmin, UserPatch.Rmax, UserPatch.Dmin, UserPatch.Dmax, RADIUS);
 
-    if (VERBOSE)             { strextend (&command, "-v"); }
-    if (VERIFY)              { strextend (&command, "-verify"); }
-    if (VERIFY_CATALOG_ONLY) { strextend (&command, "-verify-catalogs"); }
-    if (REPLACE_BY_PHOTCODE) { strextend (&command, "-replace"); }
-    if (REPLACE_TYCHO)       { strextend (&command, "-replace-tycho"); }
-    if (PARALLEL_INPUT)      { strextend (&command, "-parallel-input"); }
-    if (FORCE_MERGE)         { strextend (&command, "-force-merge"); }
-    if (ACCEPT_MOTION)       { strextend (&command, "-accept-motion"); }
-    if (ACCEPT_ASTROM)       { strextend (&command, "-accept-astrom"); }
-    if (MATCHED_TABLES)      { strextend (&command, "-matched-tables"); }
-    if (MATCH_BY_EXTERN_ID)  { strextend (&command, "-match-by-extern-id"); }
-    if (ONLY_MATCHES)        { strextend (&command, "-only-matches"); }
-    if (UPDATE_CATFORMAT)    { strextend (&command, "-update-catformat %s", UPDATE_CATFORMAT); }
-    if (UPDATE_CATCOMPRESS)  { strextend (&command, "-update-catcompress %s", UPDATE_CATCOMPRESS); }
-    if (REPAIR_BY_OBJID)     { strextend (&command, "-repair-by-objid"); }
+    if (VERBOSE)               { strextend (&command, "-v"); }
+    if (VERIFY)                { strextend (&command, "-verify"); }
+    if (VERIFY_CATALOG_ONLY)   { strextend (&command, "-verify-catalogs"); }
+    if (REPLACE_BY_PHOTCODE)   { strextend (&command, "-replace"); }
+    if (REPLACE_TYCHO)         { strextend (&command, "-replace-tycho"); }
+    if (PARALLEL_INPUT)        { strextend (&command, "-parallel-input"); }
+    if (FORCE_MERGE)           { strextend (&command, "-force-merge"); }
+    if (ACCEPT_MOTION)         { strextend (&command, "-accept-motion"); }
+    if (ACCEPT_ASTROM)         { strextend (&command, "-accept-astrom"); }
+    if (RETAIN_AVE_PHOTOMETRY) { strextend (&command, "-retain-ave-photometry"); }
+    if (MATCHED_TABLES)        { strextend (&command, "-matched-tables"); }
+    if (MATCH_BY_EXTERN_ID)    { strextend (&command, "-match-by-extern-id"); }
+    if (ONLY_MATCHES)          { strextend (&command, "-only-matches"); }
+    if (UPDATE_CATFORMAT)      { strextend (&command, "-update-catformat %s", UPDATE_CATFORMAT); }
+    if (UPDATE_CATCOMPRESS)    { strextend (&command, "-update-catcompress %s", UPDATE_CATCOMPRESS); }
+    if (REPAIR_BY_OBJID)       { strextend (&command, "-repair-by-objid"); }
 
     if (SKIP_MEASURE)               { strextend (&command, "-skip-measure"); }
+    if (SKIP_MISSING)               { strextend (&command, "-skip-missing"); }
     if (SKIP_LENSING)               { strextend (&command, "-skip-lensing"); }
     if (SKIP_LENSOBJ)               { strextend (&command, "-skip-lensobj"); }
Index: /branches/eam_branches/ohana.20190329/src/dvomerge/src/merge_catalogs_old.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/dvomerge/src/merge_catalogs_old.c	(revision 41147)
+++ /branches/eam_branches/ohana.20190329/src/dvomerge/src/merge_catalogs_old.c	(revision 41148)
@@ -1,4 +1,5 @@
 # include "dvomerge.h"
 # define PSPS_ID TRUE
+# define D_ITEM 100000
 
 # define IN_REGION(R,D) (					\
@@ -187,25 +188,25 @@
     /* make sure there is space for next Nmeasure entries */
     if (Nmeasure + input[0].average[N].Nmeasure >= NMEASURE) {
-      NMEASURE = Nmeasure + input[0].average[N].Nmeasure + 1000;
+      NMEASURE = Nmeasure + input[0].average[N].Nmeasure + D_ITEM;
       REALLOCATE (next_measure, off_t, NMEASURE);
       REALLOCATE (output[0].measure, Measure, NMEASURE);
     }
     if (Nlensing + input[0].average[N].Nlensing >= NLENSING) {
-      NLENSING = Nlensing + input[0].average[N].Nlensing + 1000;
+      NLENSING = Nlensing + input[0].average[N].Nlensing + D_ITEM;
       REALLOCATE (next_lensing, off_t, NLENSING);
       REALLOCATE (output[0].lensing, Lensing, NLENSING);
     }
     if (Nlensobj + input[0].average[N].Nlensobj >= NLENSOBJ) {
-      NLENSOBJ = Nlensobj + input[0].average[N].Nlensobj + 1000;
+      NLENSOBJ = Nlensobj + input[0].average[N].Nlensobj + D_ITEM;
       REALLOCATE (next_lensobj, off_t, NLENSOBJ);
       REALLOCATE (output[0].lensobj, Lensobj, NLENSOBJ);
     }
     if (Nstarpar + input[0].average[N].Nstarpar >= NSTARPAR) {
-      NSTARPAR = Nstarpar + input[0].average[N].Nstarpar + 1000;
+      NSTARPAR = Nstarpar + input[0].average[N].Nstarpar + D_ITEM;
       REALLOCATE (next_starpar, off_t, NSTARPAR);
       REALLOCATE (output[0].starpar, StarPar, NSTARPAR);
     }
     if (Ngalphot + input[0].average[N].Ngalphot >= NGALPHOT) {
-      NGALPHOT = Ngalphot + input[0].average[N].Ngalphot + 1000;
+      NGALPHOT = Ngalphot + input[0].average[N].Ngalphot + D_ITEM;
       REALLOCATE (next_galphot, off_t, NGALPHOT);
       REALLOCATE (output[0].galphot, GalPhot, NGALPHOT);
@@ -364,9 +365,12 @@
     // XXX: add choice of secfilt
     // update the average properties to reflect the incoming entries:
-    // if the original value is NAN but the input value is not, accept the input:
+    // if RETAIN_AVE_PHOTOMETRY is true and the original value is NAN, but the input value is not, accept the input:
+    // if RETAIN_AVE_PHOTOMETRY is false and the input value is not NAN, accept the input
+    // if RETAIN_AVE_PHOTOMETRY is true and the original value is not NAN, the keep the existing average photometry
+    
     if (!secfiltMap) {
       // secfilt tables of input and output are the same
       for (k = 0; k < NsecfiltIn; k++) {
-        if ( isfinite(output[0].secfilt[n*NsecfiltIn+k].MpsfChp)) continue;
+        if (RETAIN_AVE_PHOTOMETRY && isfinite(output[0].secfilt[n*NsecfiltIn+k].MpsfChp)) continue;
         if (!isfinite( input[0].secfilt[N*NsecfiltIn+k].MpsfChp)) continue;
         output[0].secfilt[n*NsecfiltIn+k] = input[0].secfilt[N*NsecfiltIn+k];
@@ -379,5 +383,5 @@
         int outputIndex = n * NsecfiltOut + secfiltMap[k];
         
-        if ( isfinite(output[0].secfilt[outputIndex].MpsfChp)) continue;
+        if (RETAIN_AVE_PHOTOMETRY && isfinite(output[0].secfilt[outputIndex].MpsfChp)) continue;
         if (!isfinite( input[0].secfilt[N*NsecfiltIn+k].MpsfChp)) continue;
         output[0].secfilt[outputIndex] = input[0].secfilt[N*NsecfiltIn+k];
@@ -416,30 +420,30 @@
     /* make sure there is space for next entry */
     if (Nmeasure + input[0].average[N].Nmeasure >= NMEASURE) {
-      NMEASURE = Nmeasure + input[0].average[N].Nmeasure + 1000;
+      NMEASURE = Nmeasure + input[0].average[N].Nmeasure + D_ITEM;
       REALLOCATE (next_measure, off_t, NMEASURE);
       REALLOCATE (output[0].measure, Measure, NMEASURE);
     }
     if (Nlensing + input[0].average[N].Nlensing >= NLENSING) {
-      NLENSING = Nlensing + input[0].average[N].Nlensing + 1000;
+      NLENSING = Nlensing + input[0].average[N].Nlensing + D_ITEM;
       REALLOCATE (next_lensing, off_t, NLENSING);
       REALLOCATE (output[0].lensing, Lensing, NLENSING);
     }
     if (Nlensobj + input[0].average[N].Nlensobj >= NLENSOBJ) {
-      NLENSOBJ = Nlensobj + input[0].average[N].Nlensobj + 1000;
+      NLENSOBJ = Nlensobj + input[0].average[N].Nlensobj + D_ITEM;
       REALLOCATE (next_lensobj, off_t, NLENSOBJ);
       REALLOCATE (output[0].lensobj, Lensobj, NLENSOBJ);
     }
     if (Nstarpar + input[0].average[N].Nstarpar >= NSTARPAR) {
-      NSTARPAR = Nstarpar + input[0].average[N].Nstarpar + 1000;
+      NSTARPAR = Nstarpar + input[0].average[N].Nstarpar + D_ITEM;
       REALLOCATE (next_starpar, off_t, NSTARPAR);
       REALLOCATE (output[0].starpar, StarPar, NSTARPAR);
     }
     if (Ngalphot + input[0].average[N].Ngalphot >= NGALPHOT) {
-      NGALPHOT = Ngalphot + input[0].average[N].Ngalphot + 1000;
+      NGALPHOT = Ngalphot + input[0].average[N].Ngalphot + D_ITEM;
       REALLOCATE (next_galphot, off_t, NGALPHOT);
       REALLOCATE (output[0].galphot, GalPhot, NGALPHOT);
     }
     if (Nave >= NAVE) {
-      NAVE = Nave + 1000;
+      NAVE = Nave + D_ITEM;
       REALLOCATE (output[0].average, Average, NAVE);
       REALLOCATE (output[0].secfilt, SecFilt, NAVE*NsecfiltOut);
