Index: branches/eam_branches/ipp-20140206/Ohana/src/libdvo/Makefile
===================================================================
--- branches/eam_branches/ipp-20140206/Ohana/src/libdvo/Makefile	(revision 36517)
+++ branches/eam_branches/ipp-20140206/Ohana/src/libdvo/Makefile	(revision 36518)
@@ -103,4 +103,5 @@
 $(SRC)/ImageMetadata.$(ARCH).o \
 $(SRC)/ImageOps.$(ARCH).o		\
+$(SRC)/RegionHostTable.$(ARCH).o		\
 $(SRC)/match_image.$(ARCH).o		\
 $(SRC)/db_utils.$(ARCH).o		\
Index: branches/eam_branches/ipp-20140206/Ohana/src/libdvo/include/dvo.h
===================================================================
--- branches/eam_branches/ipp-20140206/Ohana/src/libdvo/include/dvo.h	(revision 36517)
+++ branches/eam_branches/ipp-20140206/Ohana/src/libdvo/include/dvo.h	(revision 36518)
@@ -434,4 +434,5 @@
   short          dYccd;
   short          dRsys;
+  char           myDet;
 } MeasureTiny;
 
@@ -843,3 +844,8 @@
 void dvo_measureT_init (MeasureTiny *measure);
 
+void InitRegionHosts (RegionHostInfo *hosts, int Nhosts, int NHOSTS);
+void FreeRegionHosts (RegionHostInfo *hosts, int Nhosts);
+void FreeRegionHostTable (RegionHostTable *table);
+RegionHostTable *RegionHostTableLoad (char *catdir, char *rootname);
+
 # endif // DVO_H
Index: branches/eam_branches/ipp-20140206/Ohana/src/libdvo/src/RegionHostTable.c
===================================================================
--- branches/eam_branches/ipp-20140206/Ohana/src/libdvo/src/RegionHostTable.c	(revision 36517)
+++ branches/eam_branches/ipp-20140206/Ohana/src/libdvo/src/RegionHostTable.c	(revision 36518)
@@ -75,5 +75,4 @@
     int ID;
     char tmphost[1024];
-    char tmppath[1024];
     char line[1024];
 
@@ -87,4 +86,5 @@
     if (line[i] == 0) continue;
 
+    double Rmin, Rmax, Dmin, Dmax;
     status = sscanf (line, "%d %1023s %lf %lf %lf %lf", &ID, tmphost, &Rmin, &Rmax, &Dmin, &Dmax);
     if (status != 6) {
Index: branches/eam_branches/ipp-20140206/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- branches/eam_branches/ipp-20140206/Ohana/src/libdvo/src/dvo_catalog.c	(revision 36517)
+++ branches/eam_branches/ipp-20140206/Ohana/src/libdvo/src/dvo_catalog.c	(revision 36518)
@@ -242,4 +242,5 @@
  measure->dYccd     = 0;
  measure->dRsys     = 0;
+ measure->myDet     = FALSE;
 }
 
Index: branches/eam_branches/ipp-20140206/Ohana/src/relphot/Makefile
===================================================================
--- branches/eam_branches/ipp-20140206/Ohana/src/relphot/Makefile	(revision 36517)
+++ branches/eam_branches/ipp-20140206/Ohana/src/relphot/Makefile	(revision 36518)
@@ -47,5 +47,15 @@
 $(SRC)/relphot_images.$(ARCH).o	 \
 $(SRC)/relphot_objects.$(ARCH).o	 \
+$(SRC)/relphot_parallel_regions.$(ARCH).o \
+$(SRC)/relphot_parallel_images.$(ARCH).o \
 $(SRC)/select_images.$(ARCH).o	 \
+$(SRC)/assign_images.$(ARCH).o	 \
+$(SRC)/launch_region_hosts.$(ARCH).o	 \
+$(SRC)/ImageTable.$(ARCH).o	 \
+$(SRC)/ImageMagIO.$(ARCH).o	 \
+$(SRC)/share_image_mags.$(ARCH).o	 \
+$(SRC)/share_mean_mags.$(ARCH).o	 \
+$(SRC)/MeanMagIO.$(ARCH).o	 \
+$(SRC)/indexCatalog.$(ARCH).o	 \
 $(SRC)/client_logger.$(ARCH).o	 \
 $(SRC)/setExclusions.$(ARCH).o 	 \
Index: branches/eam_branches/ipp-20140206/Ohana/src/relphot/include/relphot.h
===================================================================
--- branches/eam_branches/ipp-20140206/Ohana/src/relphot/include/relphot.h	(revision 36517)
+++ branches/eam_branches/ipp-20140206/Ohana/src/relphot/include/relphot.h	(revision 36518)
@@ -119,4 +119,15 @@
   unsigned int catID;
 } MeanMag;
+
+typedef struct {
+  float Mcal;
+  float dMcal;
+  float dMagSys;
+  float Xm;
+  int nFitPhotom;
+  int flags;
+  unsigned int imageID;
+  short ubercalDist;
+} ImageMag;
 
 typedef struct {
@@ -439,2 +450,39 @@
 int init_synthetic_mags ();
 int add_synthetic_mags (AverageTiny *average, SecFilt *secfilt, MeasureTiny *measure, off_t *Nmeasure, off_t *Nm);
+
+int relphot_parallel_regions ();
+
+int assign_images (FITS_DB *db, RegionHostTable *regionHosts);
+int select_images_hostregion (RegionHostTable *hosts, Image *image, off_t Nimage);
+int find_host_for_coords (RegionHostTable *regionHosts, double R, double d);
+
+int launch_region_hosts (RegionHostTable *regionHosts);
+int strextend (char *input, char *format,...);
+
+Image *ImageTableLoad(char *filename, off_t *nimage);
+int ImageTableSave (char *filename, Image *images, off_t Nimages);
+
+int indexCatalogs (Catalog *catalog, int Ncatalog);
+int catID_and_objID_to_seq (int catID, int objID, int *catSeq, off_t *objSeq);
+
+int share_mean_mags (Catalog *catalog, int Ncatalog, RegionHostTable *regionHosts, int nloop);
+int slurp_mean_mags (Catalog *catalog, int Ncatalog, RegionHostTable *regionHosts, int nloop);
+int check_sync_file (char *hostname, int nloop);
+int clear_sync_file (char *hostname);
+int update_sync_file (char *hostname, int nloop);
+int set_mean_mags (MeanMag *meanmags, Average *average, SecFilt *secfilt, int Nsec);
+MeanMag *merge_mean_mags (MeanMag *target, int *ntarget, MeanMag *source, int Nsource);
+
+MeanMag *MeanMagLoad(char *filename, off_t *nmeanmags);
+int MeanMagSave(char *filename, MeanMag *meanmags, off_t Nmeanmags);
+
+int share_image_mags (RegionHostTable *regionHosts, int nloop);
+int slurp_image_mags (RegionHostTable *regionHosts, int nloop);
+int check_imsync_file (char *hostname, int nloop);
+int update_imsync_file (char *hostname, int nloop);
+int clear_imsync_file (char *hostname);
+int set_image_mags (ImageMag *image_mags, Image *image);
+ImageMag *merge_image_mags (ImageMag *target, int *ntarget, ImageMag *source, int Nsource);
+
+ImageMag *ImageMagLoad(char *filename, off_t *nimage_mags);
+int ImageMagSave(char *filename, ImageMag *image_mags, off_t Nimage_mags);
Index: branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/ImageMagIO.c
===================================================================
--- branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/ImageMagIO.c	(revision 36517)
+++ branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/ImageMagIO.c	(revision 36518)
@@ -65,4 +65,5 @@
   GET_COLUMN (flags,             "FLAGS",            int);
   GET_COLUMN (ubercalDist,       "UDIST",            int);
+  GET_COLUMN (imageID,           "ID",               int);
 
   ALLOCATE (image_mags, ImageMag, Nrow);
@@ -75,4 +76,5 @@
     image_mag[i].flags                     = flags      [i];
     image_mag[i].ubercalDist               = ubercalDist[i];
+    image_mag[i].imageID                   = imageID    [i];
   }
   fprintf (stderr, "loaded data for %lld images\n", (long long) Nrow);
@@ -85,4 +87,5 @@
   free (flags      );
   free (ubercalDist);
+  free (imageID    );
 
   *nimage_mag = Nrow;
@@ -97,5 +100,5 @@
   }
 
-int ImageMagsSave(char *filename, ImageMags *image_mags, off_t Nimage_mags) {
+int ImageMagSave(char *filename, ImageMag *image_mags, off_t Nimage_mags) {
 
   int i;
@@ -119,4 +122,5 @@
   gfits_define_bintable_column (&theader, "E", "FLAGS",          "analysis flags", "unitless", 1.0, 0.0);
   gfits_define_bintable_column (&theader, "E", "UDIST",          "distance to ubercal images", "images", 1.0, 0.0);
+  gfits_define_bintable_column (&theader, "E", "ID",             "image ID", "unitless", 1.0, 0.0);
 
   // generate the output array that carries the data
@@ -130,4 +134,5 @@
   int   *flags       ;
   int   *ubercalDist ;
+  int   *imageID     ;
 
   // create intermediate storage arrays
@@ -139,4 +144,5 @@
   ALLOCATE (flags       ,           int,          Nimage_mags);
   ALLOCATE (ubercalDist ,           int,          Nimage_mags);
+  ALLOCATE (imageID     ,           int,          Nimage_mags);
 
   // assign the storage arrays
@@ -149,4 +155,5 @@
     flags      [i]   = image_mag[i].flags      ;
     ubercalDist[i]   = image_mag[i].ubercalDist;
+    imageID    [i]   = image_mag[i].imageID    ;
   }
 
@@ -159,4 +166,5 @@
   gfits_set_bintable_column (&theader, &ftable, "FLAGS",          flags      ,         Nimage_mags);
   gfits_set_bintable_column (&theader, &ftable, "UDIST",          ubercalDist,         Nimage_mags);
+  gfits_set_bintable_column (&theader, &ftable, "ID",             imageID    ,         Nimage_mags);
 
   free (Mcal       );
@@ -167,4 +175,5 @@
   free (flags      );
   free (ubercalDist);
+  free (imageID    );
 
   FILE *f = fopen (filename, "w");
Index: branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/MeanMagIO.c
===================================================================
--- branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/MeanMagIO.c	(revision 36517)
+++ branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/MeanMagIO.c	(revision 36518)
@@ -94,5 +94,5 @@
   }
 
-int MeanMagsSave(char *filename, MeanMags *meanmags, off_t Nmeanmags) {
+int MeanMagSave(char *filename, MeanMag *meanmags, off_t Nmeanmags) {
 
   int i;
Index: branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/indexCatalog.c
===================================================================
--- branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/indexCatalog.c	(revision 36517)
+++ branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/indexCatalog.c	(revision 36518)
@@ -4,5 +4,5 @@
 static int **objIDseq = NULL;
 
-int indexCatalogs (catalog, Ncatalog) {
+int indexCatalogs (Catalog *catalog, int Ncatalog) {
 
   // find the max value of catID
@@ -42,5 +42,5 @@
 }
 
-int catID_and_objID_to_seq (int catID, int objID, *catSeq, *objSeq) {
+int catID_and_objID_to_seq (int catID, int objID, int *catSeq, off_t *objSeq) {
 
   int cat = catIDseq[catID];
Index: branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/share_mean_mags.c
===================================================================
--- branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/share_mean_mags.c	(revision 36517)
+++ branches/eam_branches/ipp-20140206/Ohana/src/relphot/src/share_mean_mags.c	(revision 36518)
@@ -76,8 +76,10 @@
 
   for (i = 0; i < Nmeanmags; i++) {
-    objID = meanmags[i].objID;
-    catID = meanmags[i].catID;
+    int objID = meanmags[i].objID;
+    int catID = meanmags[i].catID;
 
     // set the mean mag
+    int catSeq;
+    off_t objSeq;
     if (!catID_and_objID_to_seq (catID, objID, &catSeq, &objSeq)) {
 	// XXX what should I do if this does not match?
