Index: trunk/Ohana/src/opihi/dvo/avextract.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/avextract.c	(revision 37049)
+++ trunk/Ohana/src/opihi/dvo/avextract.c	(revision 37807)
@@ -5,5 +5,5 @@
   off_t i, j, n, m;
   int N, Npts, NPTS, last, next, state, Nfields, Nreturn, Ncstack, Nstack;
-  int Nsecfilt, VERBOSE, needMeasures;
+  int Nsecfilt, VERBOSE;
   char **cstack, name[1024];
   void *Signal;
@@ -137,5 +137,5 @@
   // this does all the work of re-packaging the command, calling it on the remote machines, then loading in the results
   if (PARALLEL && !HOST_ID) {
-      int status = HostTableParallelOps (skylist, argc, argv, RESULT_FILE, TRUE, 0, VERBOSE);
+    int status = HostTableParallelOps (skylist, argc, argv, RESULT_FILE, TRUE, 0, VERBOSE);
 
     dbFreeFields (fields, Nfields);
@@ -163,11 +163,8 @@
   }
 
-  // check the requested fields : are all average/secfilt entries, or do we need measures?
-  needMeasures = FALSE;
-  for (i = 0; !needMeasures && (i < Nfields); i++) {
-    if (fields[i].photcode == NULL) continue; // non-measure fields do not have a photcode
-    if (fields[i].photcode[0].type == PHOT_REF) needMeasures = TRUE;
-    if (fields[i].photcode[0].type == PHOT_DEP) needMeasures = TRUE;
-  }
+  // check the requested fields
+  int needMeasure = dbFieldNeedMeasure (fields, Nfields);
+  int needLensobj = dbFieldNeedLensobj (fields, Nfields);
+  int needStarpar = dbFieldNeedStarpar (fields, Nfields, TRUE);
 
   // grab data from all selected sky regions
@@ -189,5 +186,7 @@
     catalog.filename = (HOST_ID || PARALLEL_LOCAL) ? hostfile : skylist[0].filename[i];
     catalog.catflags = LOAD_AVES | LOAD_SECF;
-    catalog.catflags |= needMeasures ? LOAD_MEAS : SKIP_MEAS;
+    catalog.catflags |= needMeasure ? LOAD_MEAS : SKIP_MEAS;
+    catalog.catflags |= needLensobj ? LOAD_LENSOBJ : SKIP_LENSOBJ;
+    catalog.catflags |= needStarpar ? LOAD_STARPAR : SKIP_STARPAR;
     catalog.Nsecfilt = 0;
 
@@ -205,10 +204,22 @@
       // XXX for measure values, this could be optimized for one loop over measures...
 
-      m = catalog.average[j].measureOffset;
-
       dbExtractAveragesInitAve ();  // reset counters for saved fields (costs very little)
 
+      Average *average = &catalog.average[j];
+
+      m = average->measureOffset;
+      Measure *measure = needMeasure ? &catalog.measure[m] : NULL;
+
+      m = average->lensobjOffset;
+      Lensobj *lensobj = needLensobj ? &catalog.lensobj[m] : NULL;
+
+      m = average->starparOffset;
+      StarPar *starpar = needStarpar ? &catalog.starpar[m] : NULL;
+
+      m = j*Nsecfilt;
+      SecFilt *secfilt = &catalog.secfilt[m];
+
       for (n = 0; n < Nfields; n++) {
-	values[n] = dbExtractAverages (&catalog.average[j], &catalog.secfilt[j*Nsecfilt], &catalog.measure[m], &fields[n]);
+	values[n] = dbExtractAverages (average, secfilt, measure, lensobj, starpar, &fields[n]);
       }
 
