Index: trunk/Ohana/src/addstar/src/build_links.c
===================================================================
--- trunk/Ohana/src/addstar/src/build_links.c	(revision 37261)
+++ trunk/Ohana/src/addstar/src/build_links.c	(revision 37334)
@@ -1,3 +1,5 @@
 # include "addstar.h"
+
+# define myAbortF(FORMAT,...) { fprintf (stderr, FORMAT, __VA_ARGS__); abort(); }
 
 /* 
@@ -47,6 +49,5 @@
 
     if (N >= Nmeasure) {
-      fprintf (stderr, "overflow in init_measure_links\n");
-      abort ();
+      myAbort ("overflow in init_measure_links\n");
     }
   }
@@ -136,5 +137,5 @@
 Measure *sort_measure (Average *average, off_t Naverage, Measure *measure, off_t Nmeasure, off_t *next_meas) {
 
-  off_t i, k, n, N;
+  int i, k, n, N;
   Measure *tmpmeasure;
 
@@ -146,7 +147,7 @@
     average[i].measureOffset = N;
     for (k = 0; k < average[i].Nmeasure; k++, N++) {
-      if (n == -1) abort();
+      if (n == -1) myAbortF("invalid measureOffset for ave %d, measureOffset %d, measure %d\n", i, average[i].measureOffset, k);
       tmpmeasure[N] = measure[n]; 
-      if (measure[n].averef != i) abort();
+      if (measure[n].averef != i) myAbortF("invalid averef for ave %d, measureOffset %d, measure %d, averef %d\n", i, average[i].measureOffset, k, measure[n].averef);
       tmpmeasure[N].averef = i;
       n = next_meas[n];
@@ -175,6 +176,5 @@
       next_miss[N] = -1;
       if (N >= Nmissing) {
-	fprintf (stderr, "overflow in init_missing_links");
-	abort ();
+	myAbort ("overflow in init_missing_links");
       }
       N++;
@@ -253,6 +253,5 @@
 
     if (N >= Nlensing) {
-      fprintf (stderr, "overflow in init_lensing_links\n");
-      abort ();
+      myAbort ("overflow in init_lensing_links\n");
     }
     N++;
@@ -343,5 +342,5 @@
 Lensing *sort_lensing (Average *average, off_t Naverage, Lensing *lensing, off_t Nlensing, off_t *next_lens) {
 
-  off_t i, k, n, N;
+  int i, k, n, N;
   Lensing *tmplensing;
 
@@ -354,7 +353,7 @@
     average[i].lensingOffset = N;
     for (k = 0; k < average[i].Nlensing; k++, N++) {
-      if (n == -1) abort();
+      if (n == -1) myAbortF("invalid lensingOffset for ave %d, lensingOffset %d, lensing %d\n", i, average[i].lensingOffset, k);
       tmplensing[N] = lensing[n]; 
-      if (lensing[n].averef != i) abort();
+      if (lensing[n].averef != i) myAbortF("invalid averef for ave %d, lensingOffset %d, lensing %d, averef %d\n", i, average[i].lensingOffset, k, lensing[n].averef);
       tmplensing[N].averef = i;
       n = next_lens[n];
Index: trunk/Ohana/src/addstar/src/resort_catalog.c
===================================================================
--- trunk/Ohana/src/addstar/src/resort_catalog.c	(revision 37261)
+++ trunk/Ohana/src/addstar/src/resort_catalog.c	(revision 37334)
@@ -82,5 +82,26 @@
       myAssert(average[averageSeq[i]].catID == measure[measureSeq[i]].catID, "object / detection mismatch");
 # if (1)
-      myAssert(average[averageSeq[i]].objID == measure[measureSeq[i]].objID, "object / detection mismatch");
+      // myAssert(average[averageSeq[i]].objID == measure[measureSeq[i]].objID, "object / detection mismatch");
+      // check if the objID is correct. if not, check if it is byte-swapped (this has happened) and repair if so.  
+      // otherwise, abort
+      if (average[averageSeq[i]].objID != measure[measureSeq[i]].objID) {
+	fprintf (stderr, "object / detection mismatch average.objID = %d, measure.objID = %d, catID: %d, detID: %d", 
+		 average[averageSeq[i]].objID, measure[measureSeq[i]].objID, 
+		 measure[measureSeq[i]].catID, measure[measureSeq[i]].detID);
+	int objIDalt = measure[measureSeq[i]].objID;
+	char *byte = (char *) &objIDalt;
+	char tmp;
+	tmp = byte[0]; byte[0] = byte[3]; byte[3] = tmp;
+	tmp = byte[1]; byte[1] = byte[2]; byte[2] = tmp;
+	if (average[averageSeq[i]].objID == objIDalt) {
+	  fprintf (stderr, "objID is byte-swapped, repairing\n");
+	  measure[measureSeq[i]].objID = average[averageSeq[i]].objID; // XXX I don't really like this...
+	} else if (measure[measureSeq[i]].objID == 0) {
+	  fprintf (stderr, "objID is 0, repairing\n");
+	  measure[measureSeq[i]].objID = average[averageSeq[i]].objID; // XXX I don't really like this...
+	} else {
+	  myAbort ("objID is NOT byte-swapped, aborting\n");
+	}
+      }
 # else
       // for reasons I do not understand, the mini dvodbs generated on stsci1X had a handful of detections with an inconsistency between averef and objID.  
