Index: /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/include/dvoverify.h
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/include/dvoverify.h	(revision 38729)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/include/dvoverify.h	(revision 38730)
@@ -37,4 +37,6 @@
 int    LIST_MISSING;
 
+int    IGNORE_SORTED_STATE;
+
 SkyRegion UserPatch;
 
Index: /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/dvorepairDeleteImagesByExternID.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/dvorepairDeleteImagesByExternID.c	(revision 38729)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/dvorepairDeleteImagesByExternID.c	(revision 38730)
@@ -102,5 +102,4 @@
   int NdeleteIDs;
   int *deleteIDs = ReadDeleteListExternID(delList, &NdeleteIDs);
-  exit (2);
 
   int NdeleteImages = 0;
Index: /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/dvoverify_args.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/dvoverify_args.c	(revision 38729)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/dvoverify_args.c	(revision 38730)
@@ -24,4 +24,11 @@
   if ((N = get_argument (*argc, argv, "-sorted"))) {
     CHECKSORTED = TRUE;
+    remove_argument (N, argc, argv);
+  }
+
+  // in some cases, the header sorted state can claim F but is actually T
+  IGNORE_SORTED_STATE = FALSE;
+  if ((N = get_argument (*argc, argv, "-ignore-sorted-state"))) {
+    IGNORE_SORTED_STATE = TRUE;
     remove_argument (N, argc, argv);
   }
@@ -204,4 +211,11 @@
   }
 
+  // in some cases, the header sorted state can claim F but is actually T
+  IGNORE_SORTED_STATE = FALSE;
+  if ((N = get_argument (*argc, argv, "-ignore-sorted-state"))) {
+    IGNORE_SORTED_STATE = TRUE;
+    remove_argument (N, argc, argv);
+  }
+
   if (!HOST_ID || !HOSTDIR || (*argc != 2)) {
     fprintf (stderr, "USAGE: dvoverify_client (catdir) -results (file) -hostID ID -hostdir DIR [-region Rmin Rmax Dmin Dmax] [-v] [-s]\n\n");
Index: /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/dvoverify_utils.c
===================================================================
--- /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/dvoverify_utils.c	(revision 38729)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/dvoverify_utils.c	(revision 38730)
@@ -188,5 +188,5 @@
   dvo_catalog_init (&catalog, TRUE);
   catalog.filename  = filename;
-  catalog.catflags  = DVO_LOAD_AVERAGE | DVO_LOAD_MEASURE | DVO_LOAD_LENSING | DVO_LOAD_LENSOBJ;
+  catalog.catflags  = DVO_LOAD_AVERAGE | DVO_LOAD_MEASURE | DVO_LOAD_LENSING | DVO_LOAD_LENSOBJ | DVO_LOAD_STARPAR | DVO_LOAD_GALPHOT;
   catalog.Nsecfilt  = 0;
   
@@ -214,5 +214,5 @@
 
   // if the table is NOT SORTED, do we have a subset of checks we can make?
-  if (!catalog.sorted) {
+  if (!catalog.sorted && !IGNORE_SORTED_STATE) {
     fprintf (stderr, "!");
     dvo_catalog_unlock (&catalog);
@@ -222,83 +222,35 @@
     return TRUE;
   }
-
-  int NmeasureTotal = 0;
-  int measureOffsetOK = TRUE;
-  int NlensingTotal = 0;
-  int lensingOffsetOK = TRUE;
-  int NlensobjTotal = 0;
-  int lensobjOffsetOK = TRUE;
-  for (i = 0; i < catalog.Naverage; i++) {
-    NmeasureTotal += catalog.average[i].Nmeasure;
-    if (VERBOSE && !(NmeasureTotal <= catalog.Nmeasure)) {
-      fprintf (stderr, "NmeasureTotal > catalog.Nmeasure: %d %d %d\n", i, catalog.average[i].Nmeasure, (int) catalog.Nmeasure);
-    }
-    measureOffsetOK &= (catalog.average[i].measureOffset < catalog.Nmeasure);
-    if (VERBOSE && !(catalog.average[i].measureOffset < catalog.Nmeasure)) {
-      fprintf (stderr, "measureOffset >= catalog.Nmeasure: %d %d %d\n", i, catalog.average[i].measureOffset, (int) catalog.Nmeasure);
-    }
-    measureOffsetOK &= (catalog.average[i].measureOffset + catalog.average[i].Nmeasure <= catalog.Nmeasure);
-    if (VERBOSE && !(catalog.average[i].measureOffset + catalog.average[i].Nmeasure <= catalog.Nmeasure)) {
-      fprintf (stderr, "measureOffset + Nmeasure > catalog.Nmeasure : %d %d %d\n", i, catalog.average[i].Nmeasure, (int) catalog.Nmeasure);
-    }
-
-    // sum of Nlensing for each object < Nlensing for catalog
-    NlensingTotal += catalog.average[i].Nlensing;
-    if (VERBOSE && !(NlensingTotal <= catalog.Nlensing)) {
-      fprintf (stderr, "NlensingTotal > catalog.Nlensing: %d %d %d\n", i, catalog.average[i].Nlensing, (int) catalog.Nlensing);
-    }
-    // lensingOffset needs to be in range for each object
-    lensingOffsetOK &= (!catalog.Nlensing || (catalog.average[i].lensingOffset < catalog.Nlensing));
-    if (VERBOSE && catalog.Nlensing && !(catalog.average[i].lensingOffset < catalog.Nlensing)) {
-      fprintf (stderr, "lensingOffset >= catalog.Nlensing: %d %d %d\n", i, catalog.average[i].lensingOffset, (int) catalog.Nlensing);
-    }
-    lensingOffsetOK &= (catalog.average[i].lensingOffset + catalog.average[i].Nlensing <= catalog.Nlensing);
-    if (VERBOSE && !(catalog.average[i].lensingOffset + catalog.average[i].Nlensing <= catalog.Nlensing)) {
-      fprintf (stderr, "lensingOffset + Nlensing > catalog.Nlensing : %d %d %d\n", i, catalog.average[i].Nlensing, (int) catalog.Nlensing);
-    }
-
-    NlensobjTotal += catalog.average[i].Nlensobj;
-    if (VERBOSE && !(NlensobjTotal <= catalog.Nlensobj)) {
-      fprintf (stderr, "NlensobjTotal > catalog.Nlensobj: %d %d %d\n", i, catalog.average[i].Nlensobj, (int) catalog.Nlensobj);
-    }
-    lensobjOffsetOK &= (catalog.average[i].lensobjOffset < catalog.Nlensobj);
-    if (VERBOSE && !(catalog.average[i].lensobjOffset < catalog.Nlensobj)) {
-      fprintf (stderr, "lensobjOffset >= catalog.Nlensobj: %d %d %d\n", i, catalog.average[i].lensobjOffset, (int) catalog.Nlensobj);
-    }
-    lensobjOffsetOK &= (catalog.average[i].lensobjOffset + catalog.average[i].Nlensobj <= catalog.Nlensobj);
-    if (VERBOSE && !(catalog.average[i].lensobjOffset + catalog.average[i].Nlensobj <= catalog.Nlensobj)) {
-      fprintf (stderr, "lensobjOffset + Nlensobj > catalog.Nlensobj : %d %d %d\n", i, catalog.average[i].Nlensobj, (int) catalog.Nlensobj);
-    }
-  }
-
-  if (!measureOffsetOK) {
-    fprintf (stderr, "ERROR: catalog %s has an invalid measureOffset\n", catalog.filename);
-    status = FALSE;
-  }
-
-  if (NmeasureTotal != catalog.Nmeasure) {
-    fprintf (stderr, "ERROR: catalog %s has an invalid Nmeasure\n", catalog.filename);
-    status = FALSE;
-  }
-
-  if (!lensingOffsetOK) {
-    fprintf (stderr, "ERROR: catalog %s has an invalid lensingOffset\n", catalog.filename);
-    status = FALSE;
-  }
-
-  if (NlensingTotal != catalog.Nlensing) {
-    fprintf (stderr, "ERROR: catalog %s has an invalid Nlensing\n", catalog.filename);
-    status = FALSE;
-  }
-
-  if (!lensobjOffsetOK) {
-    fprintf (stderr, "ERROR: catalog %s has an invalid lensobjOffset\n", catalog.filename);
-    status = FALSE;
-  }
-
-  if (NlensobjTotal != catalog.Nlensobj) {
-    fprintf (stderr, "ERROR: catalog %s has an invalid Nlensobj\n", catalog.filename);
-    status = FALSE;
-  }
+  
+# define CHECK_TABLE(NAME) {						\
+    int Ntotal = 0; int offsetOK = TRUE;				\
+    for (i = 0; i < catalog.Naverage; i++) {				\
+      Ntotal += catalog.average[i].N##NAME;				\
+      if (VERBOSE && !(Ntotal <= catalog.N##NAME)) {			\
+	fprintf (stderr, "Ntotal (%s) > catalog.N##NAME: %d %d %d\n", #NAME, i, catalog.average[i].N##NAME, (int) catalog.N##NAME); \
+      }									\
+      offsetOK &= (catalog.average[i].NAME##Offset < catalog.N##NAME); \
+      if (VERBOSE && !(catalog.average[i].NAME##Offset < catalog.N##NAME)) { \
+	fprintf (stderr, "%sOffset >= catalog.N%s: %d %d %d\n", #NAME, #NAME, i, catalog.average[i].NAME##Offset, (int) catalog.N##NAME); \
+      }									\
+      offsetOK &= (catalog.average[i].NAME##Offset + catalog.average[i].N##NAME <= catalog.N##NAME); \
+      if (VERBOSE && !(catalog.average[i].NAME##Offset + catalog.average[i].N##NAME <= catalog.N##NAME)) { \
+	fprintf (stderr, "%sOffset + N%s > catalog.N%s : %d %d %d\n", #NAME, #NAME, #NAME, i, catalog.average[i].N##NAME, (int) catalog.N##NAME); \
+      } }								\
+    if (!offsetOK) {							\
+      fprintf (stderr, "ERROR: catalog %s has an invalid %sOffset\n", catalog.filename, #NAME); \
+      status = FALSE;							\
+    }									\
+    if (Ntotal != catalog.N##NAME) {					\
+      fprintf (stderr, "ERROR: catalog %s has an invalid N%s\n", catalog.filename, #NAME); \
+      status = FALSE;							\
+    }									\
+  }
+  
+  CHECK_TABLE(measure);
+  CHECK_TABLE(lensing);
+  CHECK_TABLE(lensobj);
+  CHECK_TABLE(starpar);
+  CHECK_TABLE(galphot);
 
   // if we have a problem with Nmeasure and/or measureOffset values, we
