Index: /trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/dvo.h	(revision 42101)
+++ /trunk/Ohana/src/libdvo/include/dvo.h	(revision 42102)
@@ -1237,5 +1237,5 @@
 int InitGalaxyModel (char *version);
 
-# define LENSFIELD(NAME) float LensValue_##NAME (PhotCode *code, Lensobj *lensobj);
+# define LENSFIELD(NAME) float LensValue_##NAME (PhotCode *code, Lensobj *lensobj, int Nlensobj);
 
 LENSFIELD(X11_sm_obj)
Index: /trunk/Ohana/src/libdvo/src/dbExtractAverages.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 42101)
+++ /trunk/Ohana/src/libdvo/src/dbExtractAverages.c	(revision 42102)
@@ -50,4 +50,7 @@
 
 /* return average.field based on the selection */
+// secfilt is a pointer to the first of Nsecfilt entries : code below decides which entry based on requested photcode
+// measure is a pointer to the first of Nmeasure entries
+// lensobj is a pointer to the first of Nlensobj entries : need to compare photcode to requested code
 dbValue dbExtractAverages (Average *average, SecFilt *secfilt, Measure *measure, Lensobj *lensobj, StarPar *starpar, GalPhot *galphot, dbField *field) {
 
@@ -428,45 +431,45 @@
 
 	  // g:X11_SM_OBJ, etc, are only valid for average 
-	case MAG_OPTION_X11_SM_OBJ: { value.Flt = LensValue_X11_sm_obj (field->photcode, lensobj); break; }
-	case MAG_OPTION_X12_SM_OBJ: { value.Flt = LensValue_X12_sm_obj (field->photcode, lensobj); break; }
-	case MAG_OPTION_X22_SM_OBJ: { value.Flt = LensValue_X22_sm_obj (field->photcode, lensobj); break; }
-	case MAG_OPTION_E1_SM_OBJ:  { value.Flt = LensValue_E1_sm_obj  (field->photcode, lensobj); break; }
-	case MAG_OPTION_E2_SM_OBJ:  { value.Flt = LensValue_E2_sm_obj  (field->photcode, lensobj); break; }
-
-	case MAG_OPTION_X11_SH_OBJ: { value.Flt = LensValue_X11_sh_obj (field->photcode, lensobj); break; }
-	case MAG_OPTION_X12_SH_OBJ: { value.Flt = LensValue_X12_sh_obj (field->photcode, lensobj); break; }
-	case MAG_OPTION_X22_SH_OBJ: { value.Flt = LensValue_X22_sh_obj (field->photcode, lensobj); break; }
-	case MAG_OPTION_E1_SH_OBJ:  { value.Flt = LensValue_E1_sh_obj  (field->photcode, lensobj); break; }
-	case MAG_OPTION_E2_SH_OBJ:  { value.Flt = LensValue_E2_sh_obj  (field->photcode, lensobj); break; }
-
-	case MAG_OPTION_X11_SM_PSF: { value.Flt = LensValue_X11_sm_psf (field->photcode, lensobj); break; }
-	case MAG_OPTION_X12_SM_PSF: { value.Flt = LensValue_X12_sm_psf (field->photcode, lensobj); break; }
-	case MAG_OPTION_X22_SM_PSF: { value.Flt = LensValue_X22_sm_psf (field->photcode, lensobj); break; }
-	case MAG_OPTION_E1_SM_PSF:  { value.Flt = LensValue_E1_sm_psf  (field->photcode, lensobj); break; }
-	case MAG_OPTION_E2_SM_PSF:  { value.Flt = LensValue_E2_sm_psf  (field->photcode, lensobj); break; }
-
-	case MAG_OPTION_X11_SH_PSF: { value.Flt = LensValue_X11_sh_psf (field->photcode, lensobj); break; }
-	case MAG_OPTION_X12_SH_PSF: { value.Flt = LensValue_X12_sh_psf (field->photcode, lensobj); break; }
-	case MAG_OPTION_X22_SH_PSF: { value.Flt = LensValue_X22_sh_psf (field->photcode, lensobj); break; }
-	case MAG_OPTION_E1_SH_PSF:  { value.Flt = LensValue_E1_sh_psf  (field->photcode, lensobj); break; }
-	case MAG_OPTION_E2_SH_PSF:  { value.Flt = LensValue_E2_sh_psf  (field->photcode, lensobj); break; }
-
-	case MAG_OPTION_F_AP_R5:       { value.Flt = LensValue_F_ApR5  (field->photcode, lensobj); break; }
-	case MAG_OPTION_F_ERR_AP_R5:   { value.Flt = LensValue_dF_ApR5 (field->photcode, lensobj); break; }
-	case MAG_OPTION_F_STDEV_AP_R5: { value.Flt = LensValue_sF_ApR5 (field->photcode, lensobj); break; }
-	case MAG_OPTION_F_FILL_AP_R5:  { value.Flt = LensValue_fF_ApR5 (field->photcode, lensobj); break; }
-
-	case MAG_OPTION_F_AP_R6:       { value.Flt = LensValue_F_ApR6  (field->photcode, lensobj); break; }
-	case MAG_OPTION_F_ERR_AP_R6:   { value.Flt = LensValue_dF_ApR6 (field->photcode, lensobj); break; }
-	case MAG_OPTION_F_STDEV_AP_R6: { value.Flt = LensValue_sF_ApR6 (field->photcode, lensobj); break; }
-	case MAG_OPTION_F_FILL_AP_R6:  { value.Flt = LensValue_fF_ApR6 (field->photcode, lensobj); break; }
-
-	case MAG_OPTION_F_AP_R7:       { value.Flt = LensValue_F_ApR7  (field->photcode, lensobj); break; }
-	case MAG_OPTION_F_ERR_AP_R7:   { value.Flt = LensValue_dF_ApR7 (field->photcode, lensobj); break; }
-	case MAG_OPTION_F_STDEV_AP_R7: { value.Flt = LensValue_sF_ApR7 (field->photcode, lensobj); break; }
-	case MAG_OPTION_F_FILL_AP_R7:  { value.Flt = LensValue_fF_ApR7 (field->photcode, lensobj); break; }
-
-	case MAG_OPTION_E1:  	       { value.Flt = LensValue_E1      (field->photcode, lensobj); break; }
-	case MAG_OPTION_E2:  	       { value.Flt = LensValue_E2      (field->photcode, lensobj); break; }
+	case MAG_OPTION_X11_SM_OBJ: { value.Flt = LensValue_X11_sm_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SM_OBJ: { value.Flt = LensValue_X12_sm_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SM_OBJ: { value.Flt = LensValue_X22_sm_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SM_OBJ:  { value.Flt = LensValue_E1_sm_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SM_OBJ:  { value.Flt = LensValue_E2_sm_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_X11_SH_OBJ: { value.Flt = LensValue_X11_sh_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SH_OBJ: { value.Flt = LensValue_X12_sh_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SH_OBJ: { value.Flt = LensValue_X22_sh_obj (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SH_OBJ:  { value.Flt = LensValue_E1_sh_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SH_OBJ:  { value.Flt = LensValue_E2_sh_obj  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_X11_SM_PSF: { value.Flt = LensValue_X11_sm_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SM_PSF: { value.Flt = LensValue_X12_sm_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SM_PSF: { value.Flt = LensValue_X22_sm_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SM_PSF:  { value.Flt = LensValue_E1_sm_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SM_PSF:  { value.Flt = LensValue_E2_sm_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_X11_SH_PSF: { value.Flt = LensValue_X11_sh_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X12_SH_PSF: { value.Flt = LensValue_X12_sh_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_X22_SH_PSF: { value.Flt = LensValue_X22_sh_psf (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E1_SH_PSF:  { value.Flt = LensValue_E1_sh_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2_SH_PSF:  { value.Flt = LensValue_E2_sh_psf  (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_F_AP_R5:       { value.Flt = LensValue_F_ApR5  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_ERR_AP_R5:   { value.Flt = LensValue_dF_ApR5 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_STDEV_AP_R5: { value.Flt = LensValue_sF_ApR5 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_FILL_AP_R5:  { value.Flt = LensValue_fF_ApR5 (field->photcode, lensobj, average->Nlensobj); break; }
+												
+	case MAG_OPTION_F_AP_R6:       { value.Flt = LensValue_F_ApR6  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_ERR_AP_R6:   { value.Flt = LensValue_dF_ApR6 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_STDEV_AP_R6: { value.Flt = LensValue_sF_ApR6 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_FILL_AP_R6:  { value.Flt = LensValue_fF_ApR6 (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_F_AP_R7:       { value.Flt = LensValue_F_ApR7  (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_ERR_AP_R7:   { value.Flt = LensValue_dF_ApR7 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_STDEV_AP_R7: { value.Flt = LensValue_sF_ApR7 (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_F_FILL_AP_R7:  { value.Flt = LensValue_fF_ApR7 (field->photcode, lensobj, average->Nlensobj); break; }
+
+	case MAG_OPTION_E1:  	       { value.Flt = LensValue_E1      (field->photcode, lensobj, average->Nlensobj); break; }
+	case MAG_OPTION_E2:  	       { value.Flt = LensValue_E2      (field->photcode, lensobj, average->Nlensobj); break; }
 
 	case MAG_OPTION_NONE:
Index: /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 42101)
+++ /trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 42102)
@@ -796,5 +796,7 @@
     case MEAS_E2_PSF:     { value.Flt = lensing ? lensing->E2_psf     : NAN; break; } 
 
-    case MEAS_F_AP_R5:       { value.Flt = lensing ? lensing-> F_ApR5 : NAN; break; } 
+    case MEAS_F_AP_R5:       {
+      value.Flt = lensing ? lensing-> F_ApR5 : NAN; break;
+    } 
     case MEAS_F_ERR_AP_R5:   { value.Flt = lensing ? lensing->dF_ApR5 : NAN; break; } 
     case MEAS_F_STDEV_AP_R5: { value.Flt = lensing ? lensing->sF_ApR5 : NAN; break; } 
Index: /trunk/Ohana/src/libdvo/src/dbFields.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dbFields.c	(revision 42101)
+++ /trunk/Ohana/src/libdvo/src/dbFields.c	(revision 42102)
@@ -284,4 +284,5 @@
   if (!strcasecmp (string, "E1_PSF"))        return MAG_OPTION_E1_PSF; 
   if (!strcasecmp (string, "E2_PSF"))        return MAG_OPTION_E2_PSF; 
+
   if (!strcasecmp (string, "F_AP_R5"))       return MAG_OPTION_F_AP_R5; 
   if (!strcasecmp (string, "F_ERR_AP_R5"))   return MAG_OPTION_F_ERR_AP_R5; 
@@ -296,4 +297,32 @@
   if (!strcasecmp (string, "F_STDEV_AP_R7")) return MAG_OPTION_F_STDEV_AP_R7; 
   if (!strcasecmp (string, "F_FILL_AP_R7"))  return MAG_OPTION_F_FILL_AP_R7; 
+
+  if (!strcasecmp (string, "F_AP_R5_C0"))       return MAG_OPTION_F_AP_R5; 
+  if (!strcasecmp (string, "F_ERR_AP_R5_C0"))   return MAG_OPTION_F_ERR_AP_R5; 
+  if (!strcasecmp (string, "F_STDEV_AP_R5_C0")) return MAG_OPTION_F_STDEV_AP_R5; 
+  if (!strcasecmp (string, "F_FILL_AP_R5_C0"))  return MAG_OPTION_F_FILL_AP_R5; 
+  if (!strcasecmp (string, "F_AP_R6_C0"))       return MAG_OPTION_F_AP_R6; 
+  if (!strcasecmp (string, "F_ERR_AP_R6_C0"))   return MAG_OPTION_F_ERR_AP_R6; 
+  if (!strcasecmp (string, "F_STDEV_AP_R6_C0")) return MAG_OPTION_F_STDEV_AP_R6; 
+  if (!strcasecmp (string, "F_FILL_AP_R6_C0"))  return MAG_OPTION_F_FILL_AP_R6; 
+  if (!strcasecmp (string, "F_AP_R7_C0"))       return MAG_OPTION_F_AP_R7; 
+  if (!strcasecmp (string, "F_ERR_AP_R7_C0"))   return MAG_OPTION_F_ERR_AP_R7; 
+  if (!strcasecmp (string, "F_STDEV_AP_R7_C0")) return MAG_OPTION_F_STDEV_AP_R7; 
+  if (!strcasecmp (string, "F_FILL_AP_R7_C0"))  return MAG_OPTION_F_FILL_AP_R7; 
+
+  if (!strcasecmp (string, "F_AP_R5_C1"))       return MAG_OPTION_X11_SM_OBJ;
+  if (!strcasecmp (string, "F_ERR_AP_R5_C1"))   return MAG_OPTION_E1_SM_OBJ; 
+  if (!strcasecmp (string, "F_AP_R6_C1"))       return MAG_OPTION_X22_SM_OBJ; 
+  if (!strcasecmp (string, "F_ERR_AP_R6_C1"))   return MAG_OPTION_E2_SM_OBJ; 
+  if (!strcasecmp (string, "F_AP_R7_C1"))       return MAG_OPTION_X11_SH_OBJ;
+  if (!strcasecmp (string, "F_ERR_AP_R7_C1"))   return MAG_OPTION_E2_SH_OBJ; 
+
+  if (!strcasecmp (string, "F_AP_R5_C2"))       return MAG_OPTION_X11_SM_PSF;
+  if (!strcasecmp (string, "F_ERR_AP_R5_C2"))   return MAG_OPTION_E1_SM_PSF; 
+  if (!strcasecmp (string, "F_AP_R6_C2"))       return MAG_OPTION_X22_SM_PSF; 
+  if (!strcasecmp (string, "F_ERR_AP_R6_C2"))   return MAG_OPTION_E2_SM_PSF; 
+  if (!strcasecmp (string, "F_AP_R7_C2"))       return MAG_OPTION_X11_SH_PSF;
+  if (!strcasecmp (string, "F_ERR_AP_R7_C2"))   return MAG_OPTION_E2_SH_PSF; 
+
   if (!strcasecmp (string, "E1"))            return MAG_OPTION_E1; 
   if (!strcasecmp (string, "E2"))            return MAG_OPTION_E2; 
@@ -662,4 +691,33 @@
   if (!strcasecmp (fieldName, "F_FILL_AP_R7"))   ESCAPE (MEAS_F_FILL_AP_R7,  OPIHI_FLT);
 
+  if (!strcasecmp (fieldName, "F_AP_R5_C0"))        ESCAPE (MEAS_F_AP_R5,       OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_ERR_AP_R5_C0"))    ESCAPE (MEAS_F_ERR_AP_R5,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_STDEV_AP_R5_C0"))  ESCAPE (MEAS_F_STDEV_AP_R5, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_FILL_AP_R5_C0"))   ESCAPE (MEAS_F_FILL_AP_R5,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_AP_R6_C0"))        ESCAPE (MEAS_F_AP_R6,       OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_ERR_AP_R6_C0"))    ESCAPE (MEAS_F_ERR_AP_R6,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_STDEV_AP_R6_C0"))  ESCAPE (MEAS_F_STDEV_AP_R6, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_FILL_AP_R6_C0"))   ESCAPE (MEAS_F_FILL_AP_R6,  OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_AP_R7_C0"))        ESCAPE (MEAS_F_AP_R7,       OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_ERR_AP_R7_C0"))    ESCAPE (MEAS_F_ERR_AP_R7,   OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_STDEV_AP_R7_C0"))  ESCAPE (MEAS_F_STDEV_AP_R7, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_FILL_AP_R7_C0"))   ESCAPE (MEAS_F_FILL_AP_R7,  OPIHI_FLT);
+
+  // these names are overloaded (used for e.g., UNIONS DR3)
+  if (!strcasecmp (fieldName, "F_AP_R5_C1"))        ESCAPE (MEAS_X11_SM_OBJ,      OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_ERR_AP_R5_C1"))    ESCAPE (MEAS_E1_SM_OBJ,       OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_AP_R6_C1"))        ESCAPE (MEAS_X22_SM_OBJ,      OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_ERR_AP_R6_C1"))    ESCAPE (MEAS_E2_SM_OBJ,       OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_AP_R7_C1"))        ESCAPE (MEAS_X11_SH_OBJ,      OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_ERR_AP_R7_C1"))    ESCAPE (MEAS_E2_SH_OBJ,       OPIHI_FLT);
+
+  // these names are overloaded (used for e.g., UNIONS DR3)
+  if (!strcasecmp (fieldName, "F_AP_R5_C2"))        ESCAPE (MEAS_X11_SM_PSF,      OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_ERR_AP_R5_C2"))    ESCAPE (MEAS_E1_SM_PSF,       OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_AP_R6_C2"))        ESCAPE (MEAS_X22_SM_PSF,      OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_ERR_AP_R6_C2"))    ESCAPE (MEAS_E2_SM_PSF,       OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_AP_R7_C2"))        ESCAPE (MEAS_X11_SH_PSF,      OPIHI_FLT);
+  if (!strcasecmp (fieldName, "F_ERR_AP_R7_C2"))    ESCAPE (MEAS_E2_SH_PSF,       OPIHI_FLT);
+
   if (!strcasecmp (fieldName, "E_BV"))             ESCAPE (MEAS_E_BV          ,   OPIHI_FLT);
   if (!strcasecmp (fieldName, "E_BV_ERR"))         ESCAPE (MEAS_E_BV_ERR      ,   OPIHI_FLT);
Index: /trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 42101)
+++ /trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 42102)
@@ -2086,11 +2086,13 @@
 // >> will either have 0 or Nsecfilt lensobj entries
 
-# define LENSFIELD(NAME) \
-  float LensValue_##NAME (PhotCode *code, Lensobj *lensobj) {	\
-    if (lensobj == NULL) return NAN;				\
-    if (code == NULL) return NAN;				\
-    int Ns = photcodes->hashNsec[code->code];			\
-    float value = (Ns == -1) ? NAN : lensobj[Ns].NAME;		\
-    return (value);						\
+# define LENSFIELD(NAME)						\
+  float LensValue_##NAME (PhotCode *code, Lensobj *lensobj, int Nlensobj) { \
+    if (lensobj == NULL) return NAN;					\
+    if (code == NULL) return NAN;					\
+    if (Nlensobj < 1) return NAN;					\
+    for (int i = 0; i < Nlensobj; i++) {				\
+      if (lensobj[i].photcode == code->code) return (lensobj[i].NAME);	\
+    }									\
+    return (NAN);							\
   }
 
