Index: branches/eam_branches/ipp-20130306/Ohana/src/opihi/dvo/mextract.c
===================================================================
--- branches/eam_branches/ipp-20130306/Ohana/src/opihi/dvo/mextract.c	(revision 35245)
+++ branches/eam_branches/ipp-20130306/Ohana/src/opihi/dvo/mextract.c	(revision 35246)
@@ -1,3 +1,7 @@
 # include "dvoshell.h"
+
+int SaveImageMetadata () {
+
+}
 
 int field_needs_images (dbField *field) {
@@ -16,4 +20,5 @@
     if (field->ID == MEAS_CENTER_OFFSET)  return TRUE; // 0.5*NX, 0.5*NY
     if (field->ID == MEAS_EXPNAME_AS_INT) return TRUE; // expname (or as int)
+    mean airmass;
     return FALSE;
 }
@@ -124,6 +129,30 @@
   if ((skylist = SelectRegions (selection)) == NULL) goto escape;
 
+  // load image data if needed (for fields listed below)
+  loadImages = FALSE;
+  for (i = 0; !loadImages && (i < Nfields); i++) {
+    loadImages = field_needs_images (&fields[i]);
+  }
+    
   // 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) {
+
+    // Image Metadata for remote queries:
+    // 1) figure out if we need any image metadata
+    // 2) load the images and generate a subset table with just the fields of interest
+    // 3) add the input subset filename to the dvo_client command
+
+    if (loadImages) {
+      Image *image;
+      off_t Nimage;
+      if ((image = LoadImagesDVO (&Nimage)) == NULL) goto escape;
+
+      char *filename = abspath("image.metadata.fits", DVO_MAX_PATH);
+      SaveImageMetadata (filename, image, Nimage);
+      argc += 2;
+      argv[argc-2] = strcreate ("-image-metadata");
+      argv[argc-1] = strcreate (filename);
+    }
+
     int status = HostTableParallelOps (argc, argv, RESULT_FILE, TRUE, 0, VERBOSE);
 
@@ -134,13 +163,20 @@
     dvo_catalog_free (&catalog);
 
+    if (loadImages) {
+      free (argv[argc-1]);
+      free (argv[argc-2]);
+    }
+
     return status;
   }
 
-  // load image data if needed (for fields listed below)
-  loadImages = FALSE;
-  for (i = 0; !loadImages && (i < Nfields); i++) {
-    loadImages = field_needs_images (&fields[i]);
-  }
-  if (loadImages && !SetImageSelection (TRUE, selection)) goto escape;
+  if (REMOTE_CLIENT) {
+    if (loadImages) {
+      ImageMetadata = *imageMetadata = LoadImageMetadata (filename, &Nimages);
+      if (!imageMetadata) goto escape;
+      SetImageMetadata (imageMetadata, Nimages);
+  } else {
+    if (loadImages && !SetImageSelection (TRUE, selection)) goto escape;
+  }
 
   /* create storage vector */
