Index: /trunk/Ohana/src/opihi/dvo/ImageSelection.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/ImageSelection.c	(revision 28954)
+++ /trunk/Ohana/src/opihi/dvo/ImageSelection.c	(revision 28955)
@@ -45,9 +45,13 @@
 }
 
-Image *MatchImage (unsigned int time, short int source) { 
+Image *MatchImage (unsigned int time, short int source, unsigned int imageID) { 
 
   int m;
 
-  m = match_image_subset (image, subset, Nsubset, time, source);
+  if ((imageID != 0) && (imageID < Nimage)) {
+    m = (int) imageID - 1;
+  } else {
+    m = match_image_subset (image, subset, Nsubset, time, source);
+  }
   if (m == -1) return (NULL);
   if (!FindMosaicForImage (image, Nimage, m)) return (NULL);
Index: /trunk/Ohana/src/opihi/dvo/dbExtractMeasures.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dbExtractMeasures.c	(revision 28954)
+++ /trunk/Ohana/src/opihi/dvo/dbExtractMeasures.c	(revision 28955)
@@ -358,5 +358,5 @@
 	ra  = average[0].R - measure[0].dR / 3600.0;
 	dec = average[0].D - measure[0].dD / 3600.0;
-	image = MatchImage (measure[0].t, measure[0].photcode);
+	image = MatchImage (measure[0].t, measure[0].photcode, measure[0].imageID);
 	if (image == NULL) break;
 	RD_to_XY (&x, &y, ra, dec, &image[0].coords);
@@ -374,5 +374,5 @@
 	ra  = average[0].R - measure[0].dR / 3600.0;
 	dec = average[0].D - measure[0].dD / 3600.0;
-	image = MatchImage (measure[0].t, measure[0].photcode);
+	image = MatchImage (measure[0].t, measure[0].photcode, measure[0].imageID);
 	if (image == NULL) break;
 	RD_to_XY (&x, &y, ra, dec, &image[0].coords);
@@ -440,4 +440,12 @@
       value.Flt = measure[0].extNsigma;
       break;
+    case MEAS_EXTERN_ID: /* OK */
+      {
+	Image *image;
+	image = MatchImage (measure[0].t, measure[0].photcode, measure[0].imageID);
+	if (image == NULL) break;
+	value.Int = image->externID;
+      }
+      break;
 
       // add the star/galaxy sep -- 
Index: /trunk/Ohana/src/opihi/dvo/dbFields.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/dbFields.c	(revision 28954)
+++ /trunk/Ohana/src/opihi/dvo/dbFields.c	(revision 28955)
@@ -212,4 +212,5 @@
   if (!strcasecmp (fieldName, "SKY"))        	 ESCAPE (MEAS_SKY,            MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "SKY_ERR"))    	 ESCAPE (MEAS_dSKY,           MAG_NONE, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "externID"))    	 ESCAPE (MEAS_EXTERN_ID,      MAG_NONE, OPIHI_INT);
 
   // for words that don't parse, try a photcode
Index: /trunk/Ohana/src/opihi/dvo/mextract.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/mextract.c	(revision 28954)
+++ /trunk/Ohana/src/opihi/dvo/mextract.c	(revision 28955)
@@ -88,8 +88,9 @@
   mosaicMode = FALSE;
   for (i = 0; !loadImages && (i < Nfields); i++) {
-    if (fields[i].ID == MEAS_XCCD) loadImages = TRUE;
-    if (fields[i].ID == MEAS_YCCD) loadImages = TRUE;
+    if (fields[i].ID == MEAS_XCCD) loadImages = TRUE;   // Are these still needed? Xccd and Yccd are in measurement
+    if (fields[i].ID == MEAS_YCCD) loadImages = TRUE;   // and dbExtractMeasures doesn't look at the image for these
     if (fields[i].ID == MEAS_XMOSAIC) loadImages = mosaicMode = TRUE;
     if (fields[i].ID == MEAS_YMOSAIC) loadImages = mosaicMode = TRUE;
+    if (fields[i].ID == MEAS_EXTERN_ID) loadImages = mosaicMode = TRUE;
   }
   if (loadImages && !SetImageSelection (mosaicMode, selection)) goto escape;
@@ -305,4 +306,5 @@
     gprint (GP_ERR, "  catID : catalog ID (32 bit)\n");
     gprint (GP_ERR, "  imageID : ID of source image (32 bit)\n");
+    gprint (GP_ERR, "  externID : externID of source image (32 bit)\n");
     return (FALSE);
   }
Index: /trunk/Ohana/src/opihi/dvo/photometry.c
===================================================================
--- /trunk/Ohana/src/opihi/dvo/photometry.c	(revision 28954)
+++ /trunk/Ohana/src/opihi/dvo/photometry.c	(revision 28955)
@@ -1178,5 +1178,5 @@
       ra  = average[0].R - measure[0].dR / 3600.0;
       dec = average[0].D - measure[0].dD / 3600.0;
-      image = MatchImage (measure[0].t, measure[0].photcode);
+      image = MatchImage (measure[0].t, measure[0].photcode, measure[0].imageID);
       if (image == NULL) break;
       RD_to_XY (&x, &y, ra, dec, &image[0].coords);
@@ -1191,5 +1191,5 @@
       ra  = average[0].R - measure[0].dR / 3600.0;
       dec = average[0].D - measure[0].dD / 3600.0;
-      image = MatchImage (measure[0].t, measure[0].photcode);
+      image = MatchImage (measure[0].t, measure[0].photcode, measure[0].imageID);
       if (image == NULL) break;
       RD_to_XY (&x, &y, ra, dec, &image[0].coords);
Index: /trunk/Ohana/src/opihi/include/dvoshell.h
===================================================================
--- /trunk/Ohana/src/opihi/include/dvoshell.h	(revision 28954)
+++ /trunk/Ohana/src/opihi/include/dvoshell.h	(revision 28955)
@@ -121,4 +121,5 @@
       MEAS_CR_NSIGMA, 
       MEAS_EXT_NSIGMA, 
+      MEAS_EXTERN_ID,
 };
 
@@ -301,5 +302,5 @@
 int           InitPhotcodes         PROTO((void));
 Image        *LoadImages            PROTO((off_t *Nimage));
-Image        *MatchImage            PROTO((unsigned int time, short int source));
+Image        *MatchImage            PROTO((unsigned int time, short int source, unsigned int imageID));
 Coords       *MatchMosaic           PROTO((unsigned int time, short int source));
 int           Quality               PROTO((Measure *measure, int IsDophot));
