Index: trunk/Ohana/src/opihi/cmd.data/box.c
===================================================================
--- trunk/Ohana/src/opihi/cmd.data/box.c	(revision 34621)
+++ trunk/Ohana/src/opihi/cmd.data/box.c	(revision 34749)
@@ -149,4 +149,30 @@
  usage:
   gprint (GP_ERR, "USAGE: box [-ticks NNNN] [-axis NNNN] [-labels NNNN]\n");
+
+  gprint (GP_ERR, "  additional options:\n");
+  gprint (GP_ERR, "  -fn (font) (size) : set font used for box\n");
+  gprint (GP_ERR, "  -lw (weight) : set box line weight\n");
+  gprint (GP_ERR, "  -c (color) : set box color\n");
+  gprint (GP_ERR, "  \n");
+  gprint (GP_ERR, "  for the descriptions below:\n");
+  gprint (GP_ERR, "    -x refers to the bottom x-axis, \n");
+  gprint (GP_ERR, "    -y refers to the left y-axis, \n");
+  gprint (GP_ERR, "    +x refers to the top x-axis, \n");
+  gprint (GP_ERR, "    +y refers to the right y-axis, \n");
+  gprint (GP_ERR, "  \n");
+  gprint (GP_ERR, "  -ticks [NNNN]  : turn on (1), off (0), or use default for ticks\n");
+  gprint (GP_ERR, "  -labels [NNNN] : turn on (1), off (0), or use default for label\n");
+  gprint (GP_ERR, "  -axis [NNNN]   : turn on (1), off (0), or use default for axis\n");
+  gprint (GP_ERR, "    the order for the NNNN values in the above options is: -x, -y, +x, +y\n");
+  gprint (GP_ERR, "  \n");
+  gprint (GP_ERR, "  -tickpad : set the spacing between the ticks and the tick text \n");
+  gprint (GP_ERR, "  \n");
+  gprint (GP_ERR, "  the following set the spacing between the label and the given axis:\n");
+  gprint (GP_ERR, "    -labelpadx, -labelpady, +labelpadx, +labelpady\n");
+  gprint (GP_ERR, "  \n");
+  gprint (GP_ERR, "  -pad : set the spacing between the plot section boundary and the axes\n");
+  gprint (GP_ERR, "         alternatively, set each axis independently with:\n");
+  gprint (GP_ERR, "        -xpad, -ypad, +xpad, +ypad\n");
+
   return (FALSE);
 }
Index: trunk/Ohana/src/opihi/dvo/avextract.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/avextract.c	(revision 34621)
+++ trunk/Ohana/src/opihi/dvo/avextract.c	(revision 34749)
@@ -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 (argc, argv, RESULT_FILE, 0, VERBOSE);
+    int status = HostTableParallelOps (argc, argv, RESULT_FILE, TRUE, 0, VERBOSE);
 
     dbFreeFields (fields, Nfields);
@@ -325,4 +325,24 @@
     gprint (GP_ERR, "  <photcode>:nphot : number of measurements used for average magnitude in this photcode\n");
 
+    // gprint (GP_ERR, "  <photcode>:ap :  catalog aperture magnitude for photcode\n");
+    // gprint (GP_ERR, "  <photcode>:aper :  catalog aperture magnitude for photcode\n");
+    // gprint (GP_ERR, "  <photcode>:aveerr : average error (stdev)\n");
+    // gprint (GP_ERR, "  <photcode>:aperinst : aperture flux\n");
+    // gprint (GP_ERR, "  <photcode>:aper_inst : aperture flux\n");
+
+    gprint (GP_ERR, "  <photcode>:kron : kron flux\n");
+    // gprint (GP_ERR, "  <photcode>:kronerr : kron error\n");
+    gprint (GP_ERR, "  <photcode>:photflags : photometry flags for measurements\n");
+    gprint (GP_ERR, "  <photcode>:flags : photometry flags for measurements\n");
+    gprint (GP_ERR, "  <photcode>:stdev : standard deviation of measurements\n");
+    gprint (GP_ERR, "  <photcode>:20 : 20 percentile psf mag\n");
+    gprint (GP_ERR, "  <photcode>:80 : 80 percentile psf mag\n");
+    gprint (GP_ERR, "  <photcode>:ucdist : distance to ubercalibrated exposure (in exposure overlaps)\n");
+    gprint (GP_ERR, "  <photcode>:stackDetectID : PSPS ID for stack detection\n");
+    gprint (GP_ERR, "  <photcode>:fluxpsf : psf flux\n");
+    gprint (GP_ERR, "  <photcode>:fluxpsferr : psf flux error\n");
+    gprint (GP_ERR, "  <photcode>:fluxkron : kron flux\n");
+    gprint (GP_ERR, "  <photcode>:fluxkronerr : kron flux error\n");
+
     // gprint (GP_ERR, "  type : dophot type (unused)\n");
     // gprint (GP_ERR, "  typefrac : dophot type fraction (unused)\n");
Index: trunk/Ohana/src/opihi/dvo/avmatch.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/avmatch.c	(revision 34621)
+++ trunk/Ohana/src/opihi/dvo/avmatch.c	(revision 34749)
@@ -95,5 +95,5 @@
 
     // I need to pass the RA & DEC vectors to the remote clients...
-    int status = HostTableParallelOps (argc, argv, RESULT_FILE, RAvec->Nelements, VERBOSE);
+    int status = HostTableParallelOps (argc, argv, RESULT_FILE, TRUE, RAvec->Nelements, VERBOSE);
     if (vec) free (vec);
     
Index: trunk/Ohana/src/opihi/dvo/dvo_host_utils.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/dvo_host_utils.c	(revision 34621)
+++ trunk/Ohana/src/opihi/dvo/dvo_host_utils.c	(revision 34749)
@@ -79,10 +79,14 @@
 }
 
-// bundle the arguments into a command and pass to dvo_client.  this implementation
-// expects there to be a result file from the clients, and to load this into vectors in
-// the main shell.  'Nelements' is a temp hack : for most commands, the result vectors are
-// concatenated, but for avmatch, the vectors are merged by index into a pre-known
-// length.  this is probably not a solution to a general problem..
-int HostTableParallelOps (int argc, char **argv, char *ResultFile, int Nelements, int VERBOSE) {
+// bundle the arguments into a command and pass to dvo_client.  
+
+// the normal ending step expects there to be a result file from the clients, and to load
+// this into vectors in the main shell.  'Nelements' is a temp hack : for most commands,
+// the result vectors are concatenated, but for avmatch, the vectors are merged by index
+// into a pre-known length.  this is probably not a solution to a general problem..
+
+// an alternative ending step ignores the result files and instead saves the names into
+// the list 'result:n' for the user to access as desired
+int HostTableParallelOps (int argc, char **argv, char *ResultFile, int ReadVectors, int Nelements, int VERBOSE) {
 
   int i;
@@ -153,9 +157,113 @@
   }
 
+  // create the result file list
+  char name[256];
+  snprintf (name, 256, "RESULT_FILE:n");
+  set_int_variable (name, table->Nhosts);
+  snprintf (name, 256, "RESULT_DATA:n");
+  set_int_variable (name, table->Nhosts);
+  snprintf (name, 256, "RESULT_STATUS:n");
+  set_int_variable (name, table->Nhosts);
+
   // load fields from file
   int    Nvec = 0;
   Vector **vec = NULL;
   for (i = 0; i < table->Nhosts; i++) {
+
+    snprintf (name, 256, "RESULT_FILE:%d", i);
+    set_str_variable (name, table->hosts[i].results);
+
+    // DATA : 0 (unread), 1 (read)
+    snprintf (name, 256, "RESULT_DATA:%d", i);
+    set_int_variable (name, 0);
+
+    // STATUS : 0 (normal exit), -1 (crash), N (failure exit status)
+    snprintf (name, 256, "RESULT_STATUS:%d", i);
+    set_int_variable (name, table->hosts[i].status);
+
     if (table->hosts[i].status) continue; 
+
+    if (ReadVectors) {
+      int    Ninvec = 0;
+      Vector **invec = ReadVectorTableFITS (table->hosts[i].results, "RESULT", &Ninvec);
+      if (!invec) {
+	// failed to read the file, now what?
+	gprint (GP_ERR, "failed to read remote result file : %s\n", table->hosts[i].results);
+	free (table->hosts[i].results);
+	table->hosts[i].results = NULL;
+	continue;
+      }
+      free (table->hosts[i].results);
+      table->hosts[i].results = NULL;
+      set_int_variable (name, 1); // result file has been read
+
+      if (Nelements == 0) {
+	vec = MergeVectors (vec, &Nvec, invec, Ninvec);
+	if (vec != invec) {
+	  FreeVectorArray (invec, Ninvec);
+	}
+      } else {
+	vec = MergeVectorsByIndex (vec, &Nvec, invec, Ninvec, Nelements);
+	FreeVectorArray (invec, Ninvec);
+      }
+    }
+  }
+
+  // write vectors to a table (this is used by parallel dvo operations, but can be used elsewhere)
+  if (ResultFile) {
+    int status = WriteVectorTableFITS (ResultFile, "RESULT", vec, Nvec, FALSE, NULL);
+    if (!status) {
+      gprint (GP_ERR, "failed to write result file %s\n", ResultFile);
+      return FALSE;
+    }
+  }
+
+  for (i = 0; i < Nvec; i++) {
+    AssignVector (vec[i], vec[i]->name, ANYVECTOR, TRUE);
+  }
+  free (vec);
+
+  free (table);
+  return TRUE;
+}
+
+// re-gather the remote results files: this can be used in case one of the clients failed,
+// and has since been re-run
+int HostTableReloadResults (char *uniquer, int VERBOSE) {
+
+  int i;
+
+  // load the list of hosts
+  SkyTable *sky = GetSkyTable();
+  if (!sky) {
+    gprint (GP_ERR, "failed to load sky table for database\n");
+    return FALSE;
+  }
+
+  char *CATDIR = GetCATDIR ();
+  if (!CATDIR) {
+    gprint (GP_ERR, "failed to get CATDIR for database\n");
+    return FALSE;
+  }
+
+  HostTable *table = HostTableLoad (CATDIR, sky->hosts);
+  if (!table) {
+    gprint (GP_ERR, "ERROR: failure reading Host Table %s for database %s\n", sky->hosts, CATDIR);
+    return FALSE;
+  }    
+
+  // load fields from file
+  int    Nvec = 0;
+  Vector **vec = NULL;
+  for (i = 0; i < table->Nhosts; i++) {
+    // ensure that the paths are absolute path names
+    char *tmppath = abspath (table->hosts[i].pathname, DVO_MAX_PATH);
+    free (table->hosts[i].pathname);
+    table->hosts[i].pathname = tmppath;
+
+    // need to save the results filename with the uniquer
+    // XXX a bit of a waste (but only 1024 * 60 bytes or so
+    ALLOCATE (table->hosts[i].results, char, DVO_MAX_PATH);
+    snprintf (table->hosts[i].results, DVO_MAX_PATH, "%s/dvo.results.%s.fits", table->hosts[i].pathname, uniquer);
 
     int    Ninvec = 0;
@@ -171,21 +279,9 @@
     table->hosts[i].results = NULL;
 
-    if (Nelements == 0) {
-      vec = MergeVectors (vec, &Nvec, invec, Ninvec);
-      if (vec != invec) {
-	FreeVectorArray (invec, Ninvec);
-      }
-    } else {
-      vec = MergeVectorsByIndex (vec, &Nvec, invec, Ninvec, Nelements);
+    // fprintf (stderr, "%s : %d\n", table->hosts[i].pathname, invec[0]->Nelements);
+
+    vec = MergeVectors (vec, &Nvec, invec, Ninvec);
+    if (vec != invec) {
       FreeVectorArray (invec, Ninvec);
-    }
-  }
-
-  // write vectors to a table (this is used by parallel dvo operations, but can be used elsewhere)
-  if (ResultFile) {
-    int status = WriteVectorTableFITS (ResultFile, "RESULT", vec, Nvec, FALSE, NULL);
-    if (!status) {
-      gprint (GP_ERR, "failed to write result file %s\n", ResultFile);
-      return FALSE;
     }
   }
@@ -199,70 +295,2 @@
   return TRUE;
 }
-
-// re-gather the remote results files: this can be used in case one of the clients failed,
-// and has since been re-run
-int HostTableReloadResults (char *uniquer, int VERBOSE) {
-
-  int i;
-
-  // load the list of hosts
-  SkyTable *sky = GetSkyTable();
-  if (!sky) {
-    gprint (GP_ERR, "failed to load sky table for database\n");
-    return FALSE;
-  }
-
-  char *CATDIR = GetCATDIR ();
-  if (!CATDIR) {
-    gprint (GP_ERR, "failed to get CATDIR for database\n");
-    return FALSE;
-  }
-
-  HostTable *table = HostTableLoad (CATDIR, sky->hosts);
-  if (!table) {
-    gprint (GP_ERR, "ERROR: failure reading Host Table %s for database %s\n", sky->hosts, CATDIR);
-    return FALSE;
-  }    
-
-  // load fields from file
-  int    Nvec = 0;
-  Vector **vec = NULL;
-  for (i = 0; i < table->Nhosts; i++) {
-    // ensure that the paths are absolute path names
-    char *tmppath = abspath (table->hosts[i].pathname, DVO_MAX_PATH);
-    free (table->hosts[i].pathname);
-    table->hosts[i].pathname = tmppath;
-
-    // need to save the results filename with the uniquer
-    // XXX a bit of a waste (but only 1024 * 60 bytes or so
-    ALLOCATE (table->hosts[i].results, char, DVO_MAX_PATH);
-    snprintf (table->hosts[i].results, DVO_MAX_PATH, "%s/dvo.results.%s.fits", table->hosts[i].pathname, uniquer);
-
-    int    Ninvec = 0;
-    Vector **invec = ReadVectorTableFITS (table->hosts[i].results, "RESULT", &Ninvec);
-    if (!invec) {
-      // failed to read the file, now what?
-      gprint (GP_ERR, "failed to read remote result file : %s\n", table->hosts[i].results);
-      free (table->hosts[i].results);
-      table->hosts[i].results = NULL;
-      continue;
-    }
-    free (table->hosts[i].results);
-    table->hosts[i].results = NULL;
-
-    // fprintf (stderr, "%s : %d\n", table->hosts[i].pathname, invec[0]->Nelements);
-
-    vec = MergeVectors (vec, &Nvec, invec, Ninvec);
-    if (vec != invec) {
-      FreeVectorArray (invec, Ninvec);
-    }
-  }
-
-  for (i = 0; i < Nvec; i++) {
-    AssignVector (vec[i], vec[i]->name, ANYVECTOR, TRUE);
-  }
-  free (vec);
-
-  free (table);
-  return TRUE;
-}
Index: trunk/Ohana/src/opihi/dvo/mextract.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/mextract.c	(revision 34621)
+++ trunk/Ohana/src/opihi/dvo/mextract.c	(revision 34749)
@@ -108,5 +108,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 (argc, argv, RESULT_FILE, 0, VERBOSE);
+    int status = HostTableParallelOps (argc, argv, RESULT_FILE, TRUE, 0, VERBOSE);
 
     dbFreeFields (fields, Nfields);
@@ -313,7 +313,8 @@
     gprint (GP_ERR, "  Npos  : number of measurments used for astrometry\n");
 
-    gprint (GP_ERR, "  objflags  : object flags\n");
-    gprint (GP_ERR, "  photflags : detection flags from image analysis\n");
-    gprint (GP_ERR, "  dbflags : detection flags from database analysis\n");
+    gprint (GP_ERR, "  objflags  : object flags [alias: obj_flags]\n");
+    gprint (GP_ERR, "  secflags  : average photometry flags [aliases: obj_phot_flags, sec_flags, secfilt_flags]\n");
+    gprint (GP_ERR, "  photflags : detection flags from image analysis [alias: phot_flags]\n");
+    gprint (GP_ERR, "  dbflags : detection flags from database analysis [alias: db_flags]\n");
 
     gprint (GP_ERR, "  obj_flags : object flags\n");
@@ -321,4 +322,73 @@
     gprint (GP_ERR, "  db_flags : detection flags from database analysis\n");
 
+    gprint (GP_ERR, "  airmass : airmass of detection\n");
+    gprint (GP_ERR, "  meas_airmass : airmass of exposure\n");
+    gprint (GP_ERR, "  alt : altitude of detection\n");
+    gprint (GP_ERR, "  az  : azimuth of detection\n");
+    gprint (GP_ERR, "  exptime : exposure time [s]\n");
+    gprint (GP_ERR, "  photcode : photcode \n");
+    gprint (GP_ERR, "  photcode:equiv : equivalent average photcode \n");
+    gprint (GP_ERR, "  photcode:c : zero point of photcode \n");
+    gprint (GP_ERR, "  photcode:klam : airmass slope of photcode \n");
+    gprint (GP_ERR, "  time : time of exposure [Seconds since Jan 1, 1970/\n");
+    gprint (GP_ERR, "  fwhm : fwhm (average) of fitted PSF [pixels]\n");
+    gprint (GP_ERR, "  fwhm_maj : fwhm (major axis) of fitted PSF [pixels]\n");
+    gprint (GP_ERR, "  fwhm_min : fwhm (minor axis) of fitted PSF [pixels]\n");
+    gprint (GP_ERR, "  theta : position angle of fitted PSF\n");
+    gprint (GP_ERR, "  posangle : position angle of detector at measurement [degrees]\n");
+    gprint (GP_ERR, "  platescale : plate scale of detector at measurement [arcsec/pixel] (negative = sky parity)\n");
+
+    gprint (GP_ERR, "  Mxx : second moment in X [pixels^2]\n");
+    gprint (GP_ERR, "  Mxy : second moment cross term [pixels^2]\n");
+    gprint (GP_ERR, "  Myy : second moment in Y [pixels^2]\n");
+
+    gprint (GP_ERR, "  xccd : ccd x position\n");
+    gprint (GP_ERR, "  yccd : ccd y position\n");
+    gprint (GP_ERR, "  xoff : ccd x correction\n");
+    gprint (GP_ERR, "  yoff : ccd y correction\n");
+    gprint (GP_ERR, "  xccd:err : ccd x position error\n");
+    gprint (GP_ERR, "  yccd:err : ccd y position error\n");
+
+    gprint (GP_ERR, "  pos_sys_err : systematic position error\n");
+
+    gprint (GP_ERR, "  xmosaic : mosaic x position\n");
+    gprint (GP_ERR, "  ymosaic : mosaic y position\n");
+
+    gprint (GP_ERR, "  xchip : chip x position (= ccd position)\n");
+    gprint (GP_ERR, "  ychip : chip y position (= ccd position)\n");
+    gprint (GP_ERR, "  xfpa : fpa x position (= mosaic position)\n");
+    gprint (GP_ERR, "  yfpa : fpa y position (= mosaic position)\n");
+
+    gprint (GP_ERR, "  detID : ID of detection (unique on source image)\n");
+    gprint (GP_ERR, "  objID : object ID (32 bit, unique in catalog)\n");
+    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");
+
+    gprint (GP_ERR, "  psf_qf : PSF quality factor (psf-weighted mask fraction)\n");
+    gprint (GP_ERR, "  psf_qf_perfect : PSF quality factor, perfect mask version (psf-weighted mask fraction)\n");
+
+    gprint (GP_ERR, "  psf_chisq : PSF fit chi square\n");
+    gprint (GP_ERR, "  psf_ndof : PSF number of degrees of freedom\n");
+    gprint (GP_ERR, "  psf_npix : PSF number of pixels\n");
+
+    gprint (GP_ERR, "  cr_nsigma : Nsigma deviation towards cosmic ray\n");
+    gprint (GP_ERR, "  ext_nsigma : Nsigma deviation towards extended source\n");
+
+    gprint (GP_ERR, "  sky : sky model flux at measurement location\n");
+    gprint (GP_ERR, "  sky_err : sky model stdev at measurement location\n");
+
+    gprint (GP_ERR, "  Mcal_offset : difference wrt nominal zero point (clouds are positive)\n");
+    gprint (GP_ERR, "  flat : flat-field correction (measure.Mcal - image.Mcal)\n");
+
+    gprint (GP_ERR, "  center_offset : distance to image center\n");
+    gprint (GP_ERR, "  flux : PSF flux\n");
+    gprint (GP_ERR, "  flux_err : PSF flux error\n");
+    gprint (GP_ERR, "  flux_psf : PSF flux\n");
+    gprint (GP_ERR, "  flux_psf_err : PSF flux error\n");
+    gprint (GP_ERR, "  flux_kron : KRON flux\n");
+    gprint (GP_ERR, "  flux_kron_err : KRON flux error\n");
+
+    gprint (GP_ERR, "  --- the following fields are selected by giving a photcode with the attached ending\n");
     gprint (GP_ERR, "  <photcode>:ave : average magnitude for photcode (or equivalent)\n");
     gprint (GP_ERR, "  <photcode>:ref : reference magnitude system for photcode (or equivalent)\n");
@@ -335,49 +405,19 @@
     gprint (GP_ERR, "  <photcode>:ncode : number of measurements in photcode\n");
     gprint (GP_ERR, "  <photcode>:nphot : number of measurements used for average magnitude\n");
-    gprint (GP_ERR, "  airmass : airmass of detection\n");
-    gprint (GP_ERR, "  alt : altitude of detection\n");
-    gprint (GP_ERR, "  az  : azimuth of detection\n");
-    gprint (GP_ERR, "  exptime : exposure time [s]\n");
-    gprint (GP_ERR, "  photcode : photcode \n");
-    gprint (GP_ERR, "  photcode:equiv : equivalent average photcode \n");
-    gprint (GP_ERR, "  time : time of exposure [Seconds since Jan 1, 1970/\n");
-    gprint (GP_ERR, "  fwhm : fwhm (average) of fitted PSF [pixels]\n");
-    gprint (GP_ERR, "  fwhm_maj : fwhm (major axis) of fitted PSF [pixels]\n");
-    gprint (GP_ERR, "  fwhm_min : fwhm (minor axis) of fitted PSF [pixels]\n");
-    gprint (GP_ERR, "  theta : position angle of fitted PSF\n");
-    gprint (GP_ERR, "  posangle : position angle of detector at measurement [degrees]\n");
-    gprint (GP_ERR, "  platescale : plate scale of detector at measurement [arcsec/pixel] \n");
-
-    gprint (GP_ERR, "  psf_qf : PSF quality factor (psf-weighted mask fraction)\n");
-    gprint (GP_ERR, "  psf_chisq : PSF fit chi square\n");
-    gprint (GP_ERR, "  psf_ndof : PSF number of degrees of freedom\n");
-    gprint (GP_ERR, "  psf_npix : PSF number of pixels\n");
-
-    gprint (GP_ERR, "  cr_nsigma : Nsigma deviation towards cosmic ray\n");
-    gprint (GP_ERR, "  ext_nsigma : Nsigma deviation towards extended source\n");
-
-    gprint (GP_ERR, "  Mxx : second moment in X [pixels^2]\n");
-    gprint (GP_ERR, "  Mxy : second moment cross term [pixels^2]\n");
-    gprint (GP_ERR, "  Myy : second moment in Y [pixels^2]\n");
-
-    gprint (GP_ERR, "  xccd : ccd x position\n");
-    gprint (GP_ERR, "  yccd : ccd y position\n");
-    gprint (GP_ERR, "  xccd:err : ccd x position error\n");
-    gprint (GP_ERR, "  yccd:err : ccd y position error\n");
-    gprint (GP_ERR, "  xmosaic : mosaic x position\n");
-    gprint (GP_ERR, "  ymosaic : mosaic y position\n");
-    gprint (GP_ERR, "  xchip : chip x position (= ccd position)\n");
-    gprint (GP_ERR, "  ychip : chip y position (= ccd position)\n");
-    gprint (GP_ERR, "  xfpa : fpa x position (= mosaic position)\n");
-    gprint (GP_ERR, "  yfpa : fpa y position (= mosaic position)\n");
-
-    gprint (GP_ERR, "  detID : ID of detection (unique on source image)\n");
-    gprint (GP_ERR, "  objID : object ID (32 bit, unique in catalog)\n");
-    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");
-
-    gprint (GP_ERR, "  Mcal_offset : difference wrt nominal zero point (clouds are positive)\n");
-    gprint (GP_ERR, "  flat : flat-field correction (measure.Mcal - image.Mcal)\n");
+
+    gprint (GP_ERR, "  <photcode>:aperinst : instrumental aperture magnitude\n");
+    gprint (GP_ERR, "  <photcode>:aper_inst : instrumental aperture magnitude\n");
+    gprint (GP_ERR, "  <photcode>:kron : kron mag\n");
+    gprint (GP_ERR, "  <photcode>:kroninst : instrumental kron mag\n");
+    gprint (GP_ERR, "  <photcode>:kron_inst : instrumental kron mag\n");
+    gprint (GP_ERR, "  <photcode>:kronerr : kron mag error\n");
+
+    gprint (GP_ERR, "  <photcode>:photflags : photometry flags for measurements\n");
+    gprint (GP_ERR, "  <photcode>:flags : photometry flags for measurements\n");
+    gprint (GP_ERR, "  <photcode>:fluxpsf : average psf flux\n");
+    gprint (GP_ERR, "  <photcode>:fluxpsferr : average psf flux error\n");
+    gprint (GP_ERR, "  <photcode>:fluxkron : average kron flux\n");
+    gprint (GP_ERR, "  <photcode>:fluxkronerr : average kron flux error\n");
+
     return (FALSE);
   }
Index: trunk/Ohana/src/opihi/dvo/mmatch.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/mmatch.c	(revision 34621)
+++ trunk/Ohana/src/opihi/dvo/mmatch.c	(revision 34749)
@@ -124,5 +124,5 @@
 
     // call the remote client
-    int status = HostTableParallelOps (targc, targv, RESULT_FILE, 0, VERBOSE);
+    int status = HostTableParallelOps (targc, targv, RESULT_FILE, TRUE, 0, VERBOSE);
     if (vec) free (vec);
     
Index: trunk/Ohana/src/opihi/dvo/remote.c
===================================================================
--- trunk/Ohana/src/opihi/dvo/remote.c	(revision 34621)
+++ trunk/Ohana/src/opihi/dvo/remote.c	(revision 34749)
@@ -12,4 +12,10 @@
     remove_argument (N, &argc, argv);
     VERBOSE = TRUE;
+  }
+
+  int ReadVectors = TRUE;
+  if ((N = get_argument (argc, argv, "-skip-result"))) {
+    remove_argument (N, &argc, argv);
+    ReadVectors = FALSE;
   }
 
@@ -43,5 +49,5 @@
 
   // strip of the 'remote' and send the remaining arguments to the remote machine
-  int status = HostTableParallelOps (argc - 1, &argv[1], NULL, 0, VERBOSE);
+  int status = HostTableParallelOps (argc - 1, &argv[1], NULL, ReadVectors, 0, VERBOSE);
   return status;
 }
Index: trunk/Ohana/src/opihi/include/dvoshell.h
===================================================================
--- trunk/Ohana/src/opihi/include/dvoshell.h	(revision 34621)
+++ trunk/Ohana/src/opihi/include/dvoshell.h	(revision 34749)
@@ -100,5 +100,5 @@
 
 int          HostTableLaunchJobs    PROTO((HostTable *table, char *basecmd, char *options, int VERBOSE));
-int          HostTableParallelOps   PROTO((int argc, char **argv, char *ResultFile, int Nelements, int VERBOSE));
+int          HostTableParallelOps   PROTO((int argc, char **argv, char *ResultFile, int ReadVectors, int Nelements, int VERBOSE));
 int          HostTableReloadResults PROTO((char *uniquer, int VERBOSE));
 
