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 38741)
+++ /branches/eam_branches/ipp-20150625/Ohana/src/dvomerge/src/dvoverify_utils.c	(revision 38742)
@@ -235,8 +235,8 @@
 	fprintf (stderr, "%sOffset >= catalog.N%s: %d : %d >= %d\n", #NAME, #NAME, i, catalog.average[i].NAME##Offset, (int) catalog.N##NAME); \
       }									\
-      isOK = (catalog.average[i].N##NAME == 0) || (catalog.average[i].NAME##Offset + catalog.average[i].N##NAME < catalog.N##NAME); \
+      isOK = (catalog.average[i].N##NAME == 0) || (catalog.average[i].NAME##Offset + catalog.average[i].N##NAME <= catalog.N##NAME); \
       offsetOK &= isOK;							\
       if (VERBOSE && !isOK) {						\
-	fprintf (stderr, "%sOffset + N%s > catalog.N%s : %d : %d + %d >= %d\n", #NAME, #NAME, #NAME, i, catalog.average[i].N##NAME, catalog.average[i].NAME##Offset, (int) catalog.N##NAME); \
+	fprintf (stderr, "%sOffset + N%s > catalog.N%s : %d : %d + %d > %d\n", #NAME, #NAME, #NAME, i, catalog.average[i].N##NAME, catalog.average[i].NAME##Offset, (int) catalog.N##NAME); \
       } }								\
     if (!offsetOK) {							\
@@ -365,4 +365,62 @@
   }
 
+  // check starpar <-> average links
+  {
+    int objIDsOK = TRUE;
+    int catIDsOK = TRUE;
+    int averefOK = TRUE;
+
+    for (i = 0; i < catalog.Naverage; i++) {
+      m = catalog.average[i].starparOffset;
+      for (j = 0; j < catalog.average[i].Nstarpar; j++) {
+	objIDsOK &= (catalog.average[i].objID == catalog.starpar[m+j].objID);
+	catIDsOK &= (catalog.average[i].catID == catalog.starpar[m+j].catID);
+	averefOK &= (catalog.starpar[m+j].averef == i);
+      }
+    }
+    
+    if (!objIDsOK) {
+      fprintf (stderr, "ERROR: catalog %s has invalid starpar obj IDs\n", catalog.filename);
+      status = FALSE;
+    }
+    if (!catIDsOK) {
+      fprintf (stderr, "ERROR: catalog %s has invalid starpar cat IDs\n", catalog.filename);
+      status = FALSE;
+    }
+    if (!averefOK) {
+      fprintf (stderr, "ERROR: catalog %s has invalid starpar averef values\n", catalog.filename);
+      status = FALSE;
+    }
+  }
+
+  // check galphot <-> average links
+  {
+    int objIDsOK = TRUE;
+    int catIDsOK = TRUE;
+    int averefOK = TRUE;
+
+    for (i = 0; i < catalog.Naverage; i++) {
+      m = catalog.average[i].galphotOffset;
+      for (j = 0; j < catalog.average[i].Ngalphot; j++) {
+	objIDsOK &= (catalog.average[i].objID == catalog.galphot[m+j].objID);
+	catIDsOK &= (catalog.average[i].catID == catalog.galphot[m+j].catID);
+	averefOK &= (catalog.galphot[m+j].averef == i);
+      }
+    }
+    
+    if (!objIDsOK) {
+      fprintf (stderr, "ERROR: catalog %s has invalid galphot obj IDs\n", catalog.filename);
+      status = FALSE;
+    }
+    if (!catIDsOK) {
+      fprintf (stderr, "ERROR: catalog %s has invalid galphot cat IDs\n", catalog.filename);
+      status = FALSE;
+    }
+    if (!averefOK) {
+      fprintf (stderr, "ERROR: catalog %s has invalid galphot averef values\n", catalog.filename);
+      status = FALSE;
+    }
+  }
+
   // check the image ID here?
   if (CHECK_IMAGE_ID) {
