Index: /branches/eam_branches/ohana.20150429/src/libdvo/include/dvo.h
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/include/dvo.h	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/include/dvo.h	(revision 38419)
@@ -54,6 +54,6 @@
   DVO_LOAD_STARPAR  = 0x1000,
   DVO_SKIP_STARPAR  = 0x2000,
-  DVO_LOAD_GALSHAPE = 0x4000,
-  DVO_SKIP_GALSHAPE = 0x8000,
+  DVO_LOAD_GALPHOT = 0x4000,
+  DVO_SKIP_GALPHOT = 0x8000,
 } DVOCatFlags;
 
@@ -494,5 +494,5 @@
   unsigned short   Nmeasure;             // number of psf measurements
   unsigned short   Nmissing;             // number of missings
-  unsigned short   Ngalshape;            // number of extended measurements
+  unsigned short   Ngalphot;            // number of extended measurements
   uint32_t         measureOffset;        // offset to first psf measurement
   uint32_t         missingOffset;        // offset to first missing obs
@@ -714,10 +714,10 @@
   unsigned short   Nlensing;             // number of lensing measurements
   unsigned short   Nlensobj;             // number of lensing measurements
-  unsigned short   Ngalshape;            // number of galshape measurements
+  unsigned short   Ngalphot;            // number of galphot measurements
   int              measureOffset;        // offset to first psf measurement
   int              missingOffset;        // offset to first missing obs
   int              lensingOffset;        // offset to first lensing obs
   int              lensobjOffset;        // offset to mean lensing data
-  int              galshapeOffset;       // offset to extended object entry
+  int              galphotOffset;       // offset to extended object entry
   int              starparOffset;        // offset to stellar parameter data
   float            refColorBlue;         // color of astrometry ref stars
@@ -755,10 +755,10 @@
   Lensobj  *lensobj;
   StarPar  *starpar;
-  GalShape *galshape;
+  GalPhot *galphot;
 
   int Nsecfilt;  /* number of secfilt entries for each average entry */
-  off_t Naverage,      Nmeasure,      Nmissing,      Nlensing,      Nlensobj,      Nstarpar,      Ngalshape,      Nsecfilt_mem;  /* current number of each component in memory */
-  off_t Naverage_disk, Nmeasure_disk, Nmissing_disk, Nlensing_disk, Nlensobj_disk, Nstarpar_disk, Ngalshape_disk, Nsecfilt_disk; /* current number of each component on disk */
-  off_t Naverage_off,  Nmeasure_off,  Nmissing_off,  Nlensing_off,  Nlensobj_off,  Nstarpar_off,  Ngalshape_off,  Nsecfilt_off;  /* index of first loaded data value */
+  off_t Naverage,      Nmeasure,      Nmissing,      Nlensing,      Nlensobj,      Nstarpar,      Ngalphot,      Nsecfilt_mem;  /* current number of each component in memory */
+  off_t Naverage_disk, Nmeasure_disk, Nmissing_disk, Nlensing_disk, Nlensobj_disk, Nstarpar_disk, Ngalphot_disk, Nsecfilt_disk; /* current number of each component on disk */
+  off_t Naverage_off,  Nmeasure_off,  Nmissing_off,  Nlensing_off,  Nlensobj_off,  Nstarpar_off,  Ngalphot_off,  Nsecfilt_off;  /* index of first loaded data value */
 
   // note that we use these for the full-sky relphot analysis
@@ -782,5 +782,5 @@
   struct Catalog *lensobj_catalog;		/* lensobj  catalog data (split) */
   struct Catalog *starpar_catalog;		/* starpar  catalog data (split) */
-  struct Catalog *galshape_catalog;		/* galshape catalog data (split) */
+  struct Catalog *galphot_catalog;		/* galphot catalog data (split) */
 
   unsigned int objID;
@@ -982,5 +982,5 @@
 Lensobj *FtableToLensobj   (FTable *ftable, Average *average, off_t *Nlensobj,  DVOCatFormat *format, char nativeOrder);
 StarPar *FtableToStarPar   (FTable *ftable, Average *average, off_t *Nstarpar,  DVOCatFormat *format, char nativeOrder);
-GalShape *FtableToGalShape (FTable *ftable, Average *average, off_t *Ngalshape, DVOCatFormat *format, char nativeOrder);
+GalPhot *FtableToGalPhot (FTable *ftable, Average *average, off_t *Ngalphot, DVOCatFormat *format, char nativeOrder);
 
 int      FtableToImage   (FTable *ftable, Header *theader, DVOCatFormat *format);
@@ -992,5 +992,5 @@
 int LensobjToFtable  (FTable *ftable, Lensobj  *lensobj,  off_t Nlensobj,  DVOCatFormat format, int swapFromNative);
 int StarParToFtable  (FTable *ftable, StarPar  *starpar,  off_t Nstarpar,  DVOCatFormat format, int swapFromNative);
-int GalShapeToFtable (FTable *ftable, GalShape *galshape, off_t Ngalshape, DVOCatFormat format, int swapFromNative);
+int GalPhotToFtable (FTable *ftable, GalPhot *galphot, off_t Ngalphot, DVOCatFormat format, int swapFromNative);
 
 int ImageToFtable (FTable *ftable, Header *theader, DVOCatFormat format);
@@ -1128,5 +1128,5 @@
 void dvo_lensobj_init (Lensobj *lensobj, int toZero);
 void dvo_starpar_init (StarPar *starpar);
-void dvo_galshape_init (GalShape *galshape);
+void dvo_galphot_init (GalPhot *galphot);
 
 void InitRegionHosts (RegionHostInfo *hosts, int Nhosts, int NHOSTS);
Index: /branches/eam_branches/ohana.20150429/src/libdvo/include/ps1_v5_defs.h
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/include/ps1_v5_defs.h	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/include/ps1_v5_defs.h	(revision 38419)
@@ -23,6 +23,6 @@
 StarPar_PS1_V5          *StarParInternalTo_PS1_V5 (StarPar *in, off_t Nvalues);
 
-GalShape 	       	*GalShape_PS1_V5_ToInternal (GalShape_PS1_V5 *in, off_t Nvalues);
-GalShape_PS1_V5         *GalShapeInternalTo_PS1_V5 (GalShape *in, off_t Nvalues);
+GalPhot 	       	*GalPhot_PS1_V5_ToInternal (GalPhot_PS1_V5 *in, off_t Nvalues);
+GalPhot_PS1_V5         *GalPhotInternalTo_PS1_V5 (GalPhot *in, off_t Nvalues);
 
 PhotCode                *PhotCode_PS1_V5_To_Internal (PhotCode_PS1_V5 *in, off_t Nvalues);
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog.c	(revision 38419)
@@ -176,5 +176,5 @@
   average->Nlensobj        = 0;
   average->Nstarpar        = 0;
-  average->Ngalshape       = 0;
+  average->Ngalphot       = 0;
 
   average->measureOffset   = -1;
@@ -183,5 +183,5 @@
   average->lensobjOffset   = -1;
   average->starparOffset   = -1;
-  average->galshapeOffset  = -1;
+  average->galphotOffset  = -1;
 
   average->refColorBlue    = NAN;
@@ -511,26 +511,26 @@
 
 // init all data, or just catalog data
-void dvo_galshape_init (GalShape *galshape) {
-  galshape->Xfit         = NAN;
-  galshape->Yfit         = NAN;
-  galshape->mag          = NAN;
-  galshape->magErr       = NAN;
-  galshape->majorAxis    = NAN;
-  galshape->minorAxis    = NAN;
-  galshape->majorAxisErr = NAN;
-  galshape->minorAxisErr = NAN;
-  galshape->theta        = NAN;
-  galshape->theta_err    = NAN;
-  galshape->index        = NAN;
-  galshape->chisq        = NAN;
-  galshape->Npix         = 0;
-
-  galshape->detID   = -1;
-  galshape->objID   = -1;
-  galshape->catID   = -1;
-  galshape->imageID = -1;
-
-  galshape->photcode = 0;
-  galshape->modelType = 0;
+void dvo_galphot_init (GalPhot *galphot) {
+  galphot->Xfit         = NAN;
+  galphot->Yfit         = NAN;
+  galphot->mag          = NAN;
+  galphot->magErr       = NAN;
+  galphot->majorAxis    = NAN;
+  galphot->minorAxis    = NAN;
+  galphot->majorAxisErr = NAN;
+  galphot->minorAxisErr = NAN;
+  galphot->theta        = NAN;
+  galphot->theta_err    = NAN;
+  galphot->index        = NAN;
+  galphot->chisq        = NAN;
+  galphot->Npix         = 0;
+
+  galphot->detID   = -1;
+  galphot->objID   = -1;
+  galphot->catID   = -1;
+  galphot->imageID = -1;
+
+  galphot->photcode = 0;
+  galphot->modelType = 0;
 }
 
@@ -582,5 +582,5 @@
   INIT_TABLE(lensobj);
   INIT_TABLE(starpar);
-  INIT_TABLE(galshape);
+  INIT_TABLE(galphot);
 
   catalog[0].objID = 0;
@@ -618,5 +618,8 @@
   if (catalog[0].f == NULL)   return (DVO_CAT_OPEN_FAIL);
 
-  fseeko (catalog[0].f, 0, SEEK_SET);
+  if (fseeko (catalog[0].f, 0, SEEK_SET)) {
+    perror ("fseeko: ");
+    exit (1);
+  }
   return (DVO_CAT_OPEN_OK);
 }
@@ -630,5 +633,6 @@
 
   if (fflush (catalog[0].f)) {
-    fprintf (stderr, "failed to flush file\n");
+    perror ("fflush: ");
+    fprintf (stderr, "failed to flush file %s\n", catalog[0].filename);
     return FALSE;
   }
@@ -657,4 +661,5 @@
     if (catalog[0].lensobj_catalog) { if (!dvo_catalog_unlock (catalog[0].lensobj_catalog)) { fprintf (stderr, "failed to unlock lensobj\n"); return (0); }}
     if (catalog[0].starpar_catalog) { if (!dvo_catalog_unlock (catalog[0].starpar_catalog)) { fprintf (stderr, "failed to unlock starpar\n"); return (0); }}
+    if (catalog[0].galphot_catalog) { if (!dvo_catalog_unlock (catalog[0].galphot_catalog)) { fprintf (stderr, "failed to unlock galphot\n"); return (0); }}
   }
   return (1);
@@ -938,4 +943,9 @@
       free (catalog[0].starpar_catalog);
     }
+    if (catalog[0].galphot_catalog) {
+      free (catalog[0].galphot_catalog[0].filename);
+      dvo_catalog_free (catalog[0].galphot_catalog);
+      free (catalog[0].galphot_catalog);
+    }
   }
   dvo_catalog_free_data (catalog);
@@ -981,4 +991,9 @@
     catalog[0].Nstarpar = 0;
     catalog[0].starpar = NULL;
+  }
+  if (catalog[0].galphot) {
+    free (catalog[0].galphot); 
+    catalog[0].Ngalphot = 0;
+    catalog[0].galphot = NULL;
   }
   if (catalog[0].nOwn_t)      { free (catalog[0].nOwn_t); catalog[0].nOwn_t = NULL; }
@@ -1103,4 +1118,14 @@
       }
     }
+    if (catalog[0].galphot_catalog != NULL) {
+      if (catalog[0].Ngalphot_disk == 0) {
+	// need to relock (and re-open) file for close elsewhere
+	status = dvo_catalog_lock (catalog[0].galphot_catalog, lockmode);
+      } else {
+	if (!dvo_catalog_backup (catalog[0].galphot_catalog, FALSE)) {
+	  return FALSE;
+	}
+      }
+    }
   }
   return TRUE;
@@ -1159,4 +1184,9 @@
       }
     }
+    if ((catalog[0].galphot_catalog != NULL) && (catalog[0].Ngalphot_disk > 0)) {
+      if (!dvo_catalog_unlink_backup (catalog[0].galphot_catalog, FALSE)) {
+	return FALSE;
+      }
+    }
   }
   return TRUE;
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog_create.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog_create.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog_create.c	(revision 38419)
@@ -33,5 +33,5 @@
     catalog[0].lensobj_catalog 	= dvo_catalog_create_subcat (catalog, "cpy", "LENSOBJ");
     catalog[0].starpar_catalog 	= dvo_catalog_create_subcat (catalog, "cpz", "STARPAR");
-    catalog[0].galshape_catalog = dvo_catalog_create_subcat (catalog, "cpq", "GALSHAPE");
+    catalog[0].galphot_catalog = dvo_catalog_create_subcat (catalog, "cpq", "GALPHOT");
 
     // lock the additional split files
@@ -61,5 +61,5 @@
       exit (2);
     }
-    if (dvo_catalog_lock (catalog[0].galshape_catalog, catalog[0].lockmode) != DVO_CAT_OPEN_EMPTY) {
+    if (dvo_catalog_lock (catalog[0].galphot_catalog, catalog[0].lockmode) != DVO_CAT_OPEN_EMPTY) {
       fprintf (stderr, "error with file lock\n");
       exit (2);
@@ -93,5 +93,5 @@
   ALLOCATE (catalog[0].lensobj, Lensobj, 1);
   ALLOCATE (catalog[0].starpar, StarPar, 1);
-  ALLOCATE (catalog[0].galshape, GalShape, 1);
+  ALLOCATE (catalog[0].galphot, GalPhot, 1);
 
   /* setup secondary filters to match photcodes:
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog_mef.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog_mef.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog_mef.c	(revision 38419)
@@ -47,5 +47,5 @@
   GET_TABLE_SIZES ("NLENSOBJ",  lensobj,  Nlensobj_disk,  FALSE);
   GET_TABLE_SIZES ("NSTARPAR",  starpar,  Nstarpar_disk,  FALSE);
-  GET_TABLE_SIZES ("NGALSHAPE", galshape, Ngalshape_disk, FALSE);
+  GET_TABLE_SIZES ("NGALPHOT", galphot, Ngalphot_disk, FALSE);
 
   /**  Nsecfilt is unusual: it does not list the number of data items in the table
@@ -280,27 +280,27 @@
   }
 
-  /* read GalShape table header */
-  if (!gfits_fread_header (catalog[0].f, &header)) {
-    if (VERBOSE) fprintf (stderr, "can't read table galshape header");
-    return (FALSE);
-  }
-  /* read GalShape table data */
-  if (catalog[0].catflags & DVO_LOAD_GALSHAPE) {
-    if (!gfits_fread_ftable_data (catalog[0].f, &ftable, FALSE)) {
-      if (VERBOSE) fprintf (stderr, "can't read table galshape data");
-      return (FALSE);
-    }
-    catalog[0].galshape = FtableToGalShape (&ftable, catalog[0].average, &catalog[0].Ngalshape, &catalog[0].catformat, FALSE);
-    if (Ngalshape != catalog[0].Ngalshape_disk) {
-      fprintf (stderr, "Warning: mismatch between Ngalshape in PHU and Table headers ("OFF_T_FMT" vs "OFF_T_FMT")\n",  Ngalshape,  catalog[0].Ngalshape_disk);
-    }
-    catalog[0].Ngalshape = catalog[0].Ngalshape_disk;
-    catalog[0].Ngalshape_off = 0;
-  } else {
-    Nbytes = gfits_data_size (&header);
-    fseeko (catalog[0].f, Nbytes, SEEK_CUR);
-    ALLOCATE (catalog[0].galshape, GalShape, 1);
-    catalog[0].Ngalshape = 0;
-    catalog[0].Ngalshape_off = catalog[0].Ngalshape_disk;
+  /* read GalPhot table header */
+  if (!gfits_fread_header (catalog[0].f, &header)) {
+    if (VERBOSE) fprintf (stderr, "can't read table galphot header");
+    return (FALSE);
+  }
+  /* read GalPhot table data */
+  if (catalog[0].catflags & DVO_LOAD_GALPHOT) {
+    if (!gfits_fread_ftable_data (catalog[0].f, &ftable, FALSE)) {
+      if (VERBOSE) fprintf (stderr, "can't read table galphot data");
+      return (FALSE);
+    }
+    catalog[0].galphot = FtableToGalPhot (&ftable, catalog[0].average, &catalog[0].Ngalphot, &catalog[0].catformat, FALSE);
+    if (Ngalphot != catalog[0].Ngalphot_disk) {
+      fprintf (stderr, "Warning: mismatch between Ngalphot in PHU and Table headers ("OFF_T_FMT" vs "OFF_T_FMT")\n",  Ngalphot,  catalog[0].Ngalphot_disk);
+    }
+    catalog[0].Ngalphot = catalog[0].Ngalphot_disk;
+    catalog[0].Ngalphot_off = 0;
+  } else {
+    Nbytes = gfits_data_size (&header);
+    fseeko (catalog[0].f, Nbytes, SEEK_CUR);
+    ALLOCATE (catalog[0].galphot, GalPhot, 1);
+    catalog[0].Ngalphot = 0;
+    catalog[0].Ngalphot_off = catalog[0].Ngalphot_disk;
   }
 
@@ -356,5 +356,5 @@
   gfits_modify (&catalog[0].header, "NLENSOBJ", OFF_T_FMT, 1,  catalog[0].Nlensobj);
   gfits_modify (&catalog[0].header, "NSTARPAR", OFF_T_FMT, 1,  catalog[0].Nstarpar);
-  gfits_modify (&catalog[0].header, "NGALSHAPE", OFF_T_FMT, 1,  catalog[0].Ngalshape);
+  gfits_modify (&catalog[0].header, "NGALPHOT", OFF_T_FMT, 1,  catalog[0].Ngalphot);
 
   gfits_modify_alt (&catalog[0].header, "EXTEND",   "%t", 1, TRUE);
@@ -476,6 +476,6 @@
   gfits_free_header (&header);
 
-  /* write out GalShape table (convert to FITS table format) */
-  GalShapeToFtable (&ftable, catalog[0].galshape, catalog[0].Ngalshape, catalog[0].catformat, TRUE);
+  /* write out GalPhot table (convert to FITS table format) */
+  GalPhotToFtable (&ftable, catalog[0].galphot, catalog[0].Ngalphot, catalog[0].catformat, TRUE);
   if (!gfits_fwrite_Theader (catalog[0].f, &header)) {
     fprintf (stderr, "can't write table header");
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog_split.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog_split.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_catalog_split.c	(revision 38419)
@@ -89,4 +89,5 @@
     perror ("dvo_catalog_save_subset: ");
     fprintf (stderr, "failed to seek to beginning\n");
+    return FALSE;
   }
 
@@ -197,5 +198,5 @@
     if (!strcmp (name, "LENSOBJ"))  return (DVO_CAT_OPEN_EMPTY);
     if (!strcmp (name, "STARPAR"))  return (DVO_CAT_OPEN_EMPTY);
-    if (!strcmp (name, "GALSHAPE")) return (DVO_CAT_OPEN_EMPTY);
+    if (!strcmp (name, "GALPHOT")) return (DVO_CAT_OPEN_EMPTY);
     return (DVO_CAT_OPEN_FAIL);
   }
@@ -226,5 +227,5 @@
   }
   Nskip = gfits_data_size (&subcat[0].header);
-  fseeko (subcat[0].f, Nskip, SEEK_CUR);
+  if (fseeko (subcat[0].f, Nskip, SEEK_CUR)) { perror ("fseeko: "); exit (1); }
 
   /* read table header */
@@ -316,6 +317,6 @@
 	  fprintf (stderr, "Warning: mismatch between N%s in PHU and Table headers ("OFF_T_FMT" vs "OFF_T_FMT")\n", #FIELD, Nitems, catalog[0].N##FIELD##_disk); \
 	}								\
-	catalog[0].N##FIELD = catalog[0].N##FIELD##_disk;			\
-	  catalog[0].N##FIELD##_off = 0;					\
+	catalog[0].N##FIELD = catalog[0].N##FIELD##_disk;		\
+	  catalog[0].N##FIELD##_off = 0;				\
     } else {								\
       if (catalog[0].FIELD##_catalog) {					\
@@ -342,5 +343,5 @@
   off_t Nlensobj;
   off_t Nstarpar;
-  off_t Ngalshape;
+  off_t Ngalphot;
   int Nsecfilt;
   SecFilt *primary;
@@ -349,5 +350,5 @@
 
   /* get the components from the header - these duplicate information in the split files (NAXIS2) */
-  // NSTARS, NMEAS, NMISS are required; NLENSING, NLENSOBJ, NSTARPAR, NGALSHAPE are not (0 if not found)
+  // NSTARS, NMEAS, NMISS are required; NLENSING, NLENSOBJ, NSTARPAR, NGALPHOT are not (0 if not found)
   if (!gfits_scan (&catalog[0].header, "NSTARS",    OFF_T_FMT, 1,  &Naverage))  return (FALSE);
   if (!gfits_scan (&catalog[0].header, "NMEAS",     OFF_T_FMT, 1,  &Nmeasure))  return (FALSE);
@@ -357,5 +358,5 @@
   if (!gfits_scan (&catalog[0].header, "NLENSOBJ",  OFF_T_FMT, 1,  &Nlensobj))  Nlensobj  = 0;
   if (!gfits_scan (&catalog[0].header, "NSTARPAR",  OFF_T_FMT, 1,  &Nstarpar))  Nstarpar  = 0;
-  if (!gfits_scan (&catalog[0].header, "NGALSHAPE", OFF_T_FMT, 1,  &Ngalshape)) Ngalshape = 0;
+  if (!gfits_scan (&catalog[0].header, "NGALPHOT", OFF_T_FMT, 1,  &Ngalphot)) Ngalphot = 0;
 
   /* the OBJID is a counter that uniquely defines an average entry and never changes.  if
@@ -379,5 +380,5 @@
   catalog[0].Nlensobj_disk  = Nlensobj;
   catalog[0].Nstarpar_disk  = Nstarpar;
-  catalog[0].Ngalshape_disk = Ngalshape;
+  catalog[0].Ngalphot_disk = Ngalphot;
 
   /* default values, but we will assign these a valid value before we exit (even if empty) */
@@ -389,5 +390,5 @@
   catalog[0].lensobj  = NULL;
   catalog[0].starpar  = NULL;
-  catalog[0].galshape = NULL;
+  catalog[0].galphot = NULL;
 
   /*** Average Table ***/
@@ -396,5 +397,5 @@
   /* move pointer past PHU header -- must be already read (load_catalog) */
   Nbytes = catalog[0].header.datasize + gfits_data_size (&catalog[0].header);
-  fseeko (catalog[0].f, Nbytes, SEEK_SET);
+  if (fseeko (catalog[0].f, Nbytes, SEEK_SET)) { perror ("fseeko: "); exit (1); }
 
   /* ftable header storage for below */
@@ -443,5 +444,5 @@
   LOAD_SUBCAT(lensobj,LENSOBJ,Lensobj);
   LOAD_SUBCAT(starpar,STARPAR,StarPar);
-  LOAD_SUBCAT(galshape,GALSHAPE,GalShape);
+  LOAD_SUBCAT(galphot,GALPHOT,GalPhot);
 
   /**  catalog->Nsecfilt is unusual: it does not list the number of data items in the
@@ -472,5 +473,5 @@
 
   off_t Nbytes;
-  off_t Naverage, Nexpect, Nitems, Nmeasure, Nmissing, Nlensing, Nlensobj, Nstarpar, Ngalshape;
+  off_t Naverage, Nexpect, Nitems, Nmeasure, Nmissing, Nlensing, Nlensobj, Nstarpar, Ngalphot;
   Header header;
   FTable ftable;
@@ -489,5 +490,6 @@
     /* move pointer past header and matrix -- must be already read (load_catalog) */
     Nbytes = catalog[0].header.datasize + gfits_data_size (&catalog[0].header);
-    fseeko (catalog[0].f, Nbytes, SEEK_SET);
+    if (fseeko (catalog[0].f, Nbytes, SEEK_SET)) { perror ("fseeko: "); exit (1); }
+
     /* read Average table header */
     if (!gfits_fread_header (catalog[0].f, &header)) {
@@ -518,5 +520,5 @@
     /* move pointer past header -- must be already read (load_catalog) */
     Nbytes = subcat[0].header.datasize + gfits_data_size (&subcat[0].header);
-    fseeko (subcat[0].f, Nbytes, SEEK_SET);
+    if (fseeko (subcat[0].f, Nbytes, SEEK_SET)) { perror ("fseeko: "); exit (1); }
 
     /* read Secfilt table header */
@@ -554,5 +556,5 @@
     /* move pointer past header -- must be already read (load_catalog) */
     Nbytes = subcat[0].header.datasize + gfits_data_size (&subcat[0].header);
-    fseeko (subcat[0].f, Nbytes, SEEK_SET);
+    if (fseeko (subcat[0].f, Nbytes, SEEK_SET)) { perror ("fseeko: "); exit (1); }
 
     /* read Measure table header */
@@ -585,5 +587,5 @@
     /* move pointer past header -- must be already read (load_catalog) */
     Nbytes = subcat[0].header.datasize + gfits_data_size (&subcat[0].header);
-    fseeko (subcat[0].f, Nbytes, SEEK_SET);
+    if (fseeko (subcat[0].f, Nbytes, SEEK_SET)) { perror ("fseeko: "); exit (1); }
 
     /* read Missing table header */
@@ -619,5 +621,5 @@
     /* move pointer past header -- must be already read (load_catalog) */
     Nbytes = subcat[0].header.datasize + gfits_data_size (&subcat[0].header);
-    fseeko (subcat[0].f, Nbytes, SEEK_SET);
+    if (fseeko (subcat[0].f, Nbytes, SEEK_SET)) { perror ("fseeko: "); exit (1); }
 
     /* read Lensing table header */
@@ -650,5 +652,5 @@
     /* move pointer past header -- must be already read (load_catalog) */
     Nbytes = subcat[0].header.datasize + gfits_data_size (&subcat[0].header);
-    fseeko (subcat[0].f, Nbytes, SEEK_SET);
+    if (fseeko (subcat[0].f, Nbytes, SEEK_SET)) { perror ("fseeko: "); exit (1); }
 
     /* read Lensobj table header */
@@ -681,5 +683,5 @@
     /* move pointer past header -- must be already read (load_catalog) */
     Nbytes = subcat[0].header.datasize + gfits_data_size (&subcat[0].header);
-    fseeko (subcat[0].f, Nbytes, SEEK_SET);
+    if (fseeko (subcat[0].f, Nbytes, SEEK_SET)) { perror ("fseeko: "); exit (1); }
 
     /* read StarPar table header */
@@ -706,32 +708,32 @@
 
   // XXX check the open status of the catalog
-  if (catalog[0].catflags & DVO_LOAD_GALSHAPE) {
-
-    Catalog *subcat = catalog[0].galshape_catalog;
+  if (catalog[0].catflags & DVO_LOAD_GALPHOT) {
+
+    Catalog *subcat = catalog[0].galphot_catalog;
 
     /* move pointer past header -- must be already read (load_catalog) */
     Nbytes = subcat[0].header.datasize + gfits_data_size (&subcat[0].header);
-    fseeko (subcat[0].f, Nbytes, SEEK_SET);
-
-    /* read GalShape table header */
+    if (fseeko (subcat[0].f, Nbytes, SEEK_SET)) { perror ("fseeko: "); exit (1); }
+
+    /* read GalPhot table header */
     if (!gfits_fread_header (subcat[0].f, &header)) {
-      if (VERBOSE) fprintf (stderr, "can't read table galshape header");
-      return (FALSE);
-    }
-    /* read GalShape table data : format is irrelevant here */
+      if (VERBOSE) fprintf (stderr, "can't read table galphot header");
+      return (FALSE);
+    }
+    /* read GalPhot table data : format is irrelevant here */
     if (!gfits_fread_ftable_range (subcat[0].f, FALSE, &ftable, start, Nrows)) {
-      if (VERBOSE) fprintf (stderr, "can't read table galshape data");
-      return (FALSE);
-    }
-
-    /* convert data format to internal : returns number of row read in Ngalshape */
-    catalog[0].galshape = FtableToGalShape (&ftable, catalog[0].average, &Ngalshape, &catalog[0].catformat, FALSE);
-    if (Ngalshape != Nrows) {
+      if (VERBOSE) fprintf (stderr, "can't read table galphot data");
+      return (FALSE);
+    }
+
+    /* convert data format to internal : returns number of row read in Ngalphot */
+    catalog[0].galphot = FtableToGalPhot (&ftable, catalog[0].average, &Ngalphot, &catalog[0].catformat, FALSE);
+    if (Ngalphot != Nrows) {
       // XXX this condition denotes the eof has been reached; not an error or a warning
-      // fprintf (stderr, "Warning: mismatch between Ngalshape in PHU and Table headers ("OFF_T_FMT" vs "OFF_T_FMT")\n",  Ngalshape,  Nrows);
-    }
-    gfits_free_header (&header);
-    catalog[0].Ngalshape = Ngalshape;
-    catalog[0].Ngalshape_off = start;
+      // fprintf (stderr, "Warning: mismatch between Ngalphot in PHU and Table headers ("OFF_T_FMT" vs "OFF_T_FMT")\n",  Ngalphot,  Nrows);
+    }
+    gfits_free_header (&header);
+    catalog[0].Ngalphot = Ngalphot;
+    catalog[0].Ngalphot_off = start;
   }
 
@@ -747,5 +749,5 @@
   SecFilt *primary, *secfilt;
   int Nsecfilt;
-  off_t Naverage_disk_new, Nmeasure_disk_new, Nmissing_disk_new, Nsecfilt_disk_new, Nlensing_disk_new, Nlensobj_disk_new, Nstarpar_disk_new, Ngalshape_disk_new;
+  off_t Naverage_disk_new, Nmeasure_disk_new, Nmissing_disk_new, Nsecfilt_disk_new, Nlensing_disk_new, Nlensobj_disk_new, Nstarpar_disk_new, Ngalphot_disk_new;
   off_t first, start, Nrows;
 
@@ -781,5 +783,5 @@
   Nlensobj_disk_new = MAX (catalog[0].Nlensobj_disk, catalog[0].Nlensobj + catalog[0].Nlensobj_off);
   Nstarpar_disk_new = MAX (catalog[0].Nstarpar_disk, catalog[0].Nstarpar + catalog[0].Nstarpar_off);
-  Ngalshape_disk_new = MAX (catalog[0].Ngalshape_disk, catalog[0].Ngalshape + catalog[0].Ngalshape_off);
+  Ngalphot_disk_new = MAX (catalog[0].Ngalphot_disk, catalog[0].Ngalphot + catalog[0].Ngalphot_off);
 
   /* make sure header is consistent with data */
@@ -791,5 +793,5 @@
   gfits_modify (&catalog[0].header, "NLENSOBJ",  OFF_T_FMT, 1,  Nlensobj_disk_new);
   gfits_modify (&catalog[0].header, "NSTARPAR",  OFF_T_FMT, 1,  Nstarpar_disk_new);
-  gfits_modify (&catalog[0].header, "NGALSHAPE", OFF_T_FMT, 1,  Ngalshape_disk_new);
+  gfits_modify (&catalog[0].header, "NGALPHOT", OFF_T_FMT, 1,  Ngalphot_disk_new);
 
   gfits_modify_alt (&catalog[0].header, "EXTEND",   "%t", 1, TRUE);
@@ -812,5 +814,5 @@
     /* convert internal to external format : also results in a byte-swapped, scaled output
        table.  Note that ftable is newly allocated.
-     */
+    */
     
     // if we are going to compress, we need to receive unswapped data -- 
@@ -831,5 +833,302 @@
     // even if we do not save the average table, we need to keep the header in sync
     /* rewind file pointers and truncate (file is still open) */
-    fseeko (catalog[0].f, 0, SEEK_SET);
+    if (fseeko (catalog[0].f, 0, SEEK_SET)) { perror ("fseeko: "); exit (1); }
+
+    /* write table PHU header - always write this out */
+    /* XXX EAM : check if disk file size has changed */
+    if (!gfits_fwrite_header  (catalog[0].f, &catalog[0].header)) {
+      fprintf (stderr, "can't write primary header");
+      goto failure;
+    }
+  }
+
+  /*** Measure Table ***/
+  if ((catalog[0].catflags & DVO_LOAD_MEASURE) && (catalog[0].measure != NULL)) {
+
+    first  = 0;                    // first row in memory to write
+    start  = catalog[0].Nmeasure_off; // first disk row to write
+    Nrows  = catalog[0].Nmeasure - first;
+
+    assert (Nrows >= 0);
+    assert (first >= 0);
+    assert (first <= catalog[0].Nmeasure);
+    assert (catalog[0].Nmeasure_disk >= catalog[0].Nmeasure_off);
+
+    // convert to external table format
+    if (!MeasureToFtable (&ftable, catalog[0].average, &catalog[0].measure[first], Nrows, catalog[0].catformat, TRUE)) {
+      fprintf (stderr, "trouble converting format\n");
+      goto failure;
+    }
+
+    // write out Measure table
+    if (!dvo_catalog_save_subcat (catalog[0].measure_catalog, &ftable, start, Nrows, catalog[0].Nmeasure_disk, Nmeasure_disk_new)) {
+      fprintf (stderr, "trouble writing Measure table\n");
+      goto failure;
+    }
+    gfits_free_header (&header);
+    gfits_free_table (&ftable);
+  }
+
+  /*** Missing Table ***/
+  if ((catalog[0].catflags & DVO_LOAD_MISSING) && (catalog[0].missing != NULL)) {
+
+    if (catalog[0].Nmissing_off != 0) {
+      fprintf (stderr, "inconsistency: Missing table cannot be written in segments\n");
+      goto failure;
+    }
+
+    // convert to external table format
+    if (!gfits_table_set_Missing (&ftable, catalog[0].missing, catalog[0].Nmissing, TRUE)) {
+      fprintf (stderr, "trouble converting format\n");
+      goto failure;
+    }
+
+    // write out Missing table (must write out entire table)
+    if (!dvo_catalog_save_subcat (catalog[0].missing_catalog, &ftable, 0, catalog[0].Nmissing, catalog[0].Nmissing, catalog[0].Nmissing)) {
+      fprintf (stderr, "trouble writing Missing Table\n");
+      goto failure;
+    }
+    gfits_free_header (&header);
+    gfits_free_table (&ftable);
+  }
+
+  /*** Secfilt Table ***/
+  if ((catalog[0].catflags & DVO_LOAD_SECFILT) && (catalog[0].secfilt != NULL)) {
+
+    first  = 0;                    // first row in memory to write
+    start  = catalog[0].Nsecfilt_off; // first disk row to write
+    Nitems = catalog[0].Naverage*Nsecfilt;
+    Nrows  = Nitems - first;
+
+    assert (Nrows >= 0);
+    assert (first >= 0);
+    assert (first <= Nitems);
+    assert (catalog[0].Nsecfilt_disk >= catalog[0].Nsecfilt_off);
+    // XXX check these for consistency...
+
+    // convert to external table format
+    SecFiltToFtable (&ftable, &secfilt[first], Nrows, catalog[0].catformat, TRUE);
+
+    // write out SecFilt table
+    if (!dvo_catalog_save_subcat (catalog[0].secfilt_catalog, &ftable, start, Nrows, catalog[0].Nsecfilt_disk, Nsecfilt_disk_new)) {
+      fprintf (stderr, "failure writing SecFilt table\n");
+      goto failure;
+    }
+    gfits_free_header (&header);
+    gfits_free_table (&ftable);
+  }
+
+  /*** Lensing Table ***/
+  if ((catalog[0].catflags & DVO_LOAD_LENSING) && (catalog[0].lensing != NULL)) {
+
+    first  = 0;                    // first row in memory to write
+    start  = catalog[0].Nlensing_off; // first disk row to write
+    Nrows  = catalog[0].Nlensing - first;
+
+    assert (Nrows >= 0);
+    assert (first >= 0);
+    assert (first <= catalog[0].Nlensing);
+    assert (catalog[0].Nlensing_disk >= catalog[0].Nlensing_off);
+
+    // convert to external table format
+    if (!LensingToFtable (&ftable, &catalog[0].lensing[first], Nrows, catalog[0].catformat, TRUE)) {
+      fprintf (stderr, "trouble converting format\n");
+      goto failure;
+    }
+
+    // write out Lensing table
+    if (!dvo_catalog_save_subcat (catalog[0].lensing_catalog, &ftable, start, Nrows, catalog[0].Nlensing_disk, Nlensing_disk_new)) {
+      fprintf (stderr, "trouble writing Lensing table\n");
+      goto failure;
+    }
+    gfits_free_header (&header);
+    gfits_free_table (&ftable);
+  }
+
+  /*** Lensobj Table ***/
+  if ((catalog[0].catflags & DVO_LOAD_LENSOBJ) && (catalog[0].lensobj != NULL)) {
+
+    first  = 0;                    // first row in memory to write
+    start  = catalog[0].Nlensobj_off; // first disk row to write
+    Nrows  = catalog[0].Nlensobj - first;
+
+    assert (Nrows >= 0);
+    assert (first >= 0);
+    assert (first <= catalog[0].Nlensobj);
+    assert (catalog[0].Nlensobj_disk >= catalog[0].Nlensobj_off);
+
+    // convert to external table format
+    if (!LensobjToFtable (&ftable, &catalog[0].lensobj[first], Nrows, catalog[0].catformat, TRUE)) {
+      fprintf (stderr, "trouble converting format\n");
+      goto failure;
+    }
+
+    // write out Lensobj table
+    if (!dvo_catalog_save_subcat (catalog[0].lensobj_catalog, &ftable, start, Nrows, catalog[0].Nlensobj_disk, Nlensobj_disk_new)) {
+      fprintf (stderr, "trouble writing Lensobj table\n");
+      goto failure;
+    }
+    gfits_free_header (&header);
+    gfits_free_table (&ftable);
+  }
+
+  /*** StarPar Table ***/
+  if ((catalog[0].catflags & DVO_LOAD_STARPAR) && (catalog[0].starpar != NULL)) {
+
+    first  = 0;                    // first row in memory to write
+    start  = catalog[0].Nstarpar_off; // first disk row to write
+    Nrows  = catalog[0].Nstarpar - first;
+
+    assert (Nrows >= 0);
+    assert (first >= 0);
+    assert (first <= catalog[0].Nstarpar);
+    assert (catalog[0].Nstarpar_disk >= catalog[0].Nstarpar_off);
+
+    // convert to external table format
+    if (!StarParToFtable (&ftable, &catalog[0].starpar[first], Nrows, catalog[0].catformat, TRUE)) {
+      fprintf (stderr, "trouble converting format\n");
+      goto failure;
+    }
+
+    // write out StarPar table
+    if (!dvo_catalog_save_subcat (catalog[0].starpar_catalog, &ftable, start, Nrows, catalog[0].Nstarpar_disk, Nstarpar_disk_new)) {
+      fprintf (stderr, "trouble writing StarPar table\n");
+      goto failure;
+    }
+    gfits_free_header (&header);
+    gfits_free_table (&ftable);
+  }
+
+  /*** GalPhot Table ***/
+  if ((catalog[0].catflags & DVO_LOAD_GALPHOT) && (catalog[0].galphot != NULL)) {
+
+    first  = 0;                    // first row in memory to write
+    start  = catalog[0].Ngalphot_off; // first disk row to write
+    Nrows  = catalog[0].Ngalphot - first;
+
+    assert (Nrows >= 0);
+    assert (first >= 0);
+    assert (first <= catalog[0].Ngalphot);
+    assert (catalog[0].Ngalphot_disk >= catalog[0].Ngalphot_off);
+
+    // convert to external table format
+    if (!GalPhotToFtable (&ftable, &catalog[0].galphot[first], Nrows, catalog[0].catformat, TRUE)) {
+      fprintf (stderr, "trouble converting format\n");
+      goto failure;
+    }
+
+    // write out GalPhot table
+    if (!dvo_catalog_save_subcat (catalog[0].galphot_catalog, &ftable, start, Nrows, catalog[0].Ngalphot_disk, Ngalphot_disk_new)) {
+      fprintf (stderr, "trouble writing GalPhot table\n");
+      goto failure;
+    }
+    gfits_free_header (&header);
+    gfits_free_table (&ftable);
+  }
+
+  /* free temp storage */
+  if (primary != NULL) {
+    free (primary);
+    free (secfilt);
+  }
+  return (TRUE);
+
+ failure:
+  /* free temp storage */
+  gfits_free_header (&header);
+  gfits_free_table (&ftable);
+  if (primary != NULL) {
+    free (primary);
+    free (secfilt);
+  }
+  return (FALSE);
+}
+
+/* update_catalog_split only writes new lines to file. */
+int dvo_catalog_update_split (Catalog *catalog, char VERBOSE) {
+
+  off_t Nitems;
+  Header header;
+  FTable ftable;
+  SecFilt *primary, *secfilt;
+  int Nsecfilt;
+  off_t Naverage_disk_new, Nmeasure_disk_new, Nmissing_disk_new, Nsecfilt_disk_new, Nlensing_disk_new, Nlensobj_disk_new, Nstarpar_disk_new, Ngalphot_disk_new;
+  off_t first, start, Nrows;
+
+  ftable.header = &header;
+  ftable.buffer = NULL;
+  header.buffer = NULL;
+
+  // skip empty catalogs: it is illegal to have Measures without corresponding Averages
+  Naverage_disk_new = MAX (catalog[0].Naverage_disk, catalog[0].Naverage + catalog[0].Naverage_off);
+  if (Naverage_disk_new == 0) {
+    if (VERBOSE) fprintf (stderr, "no stars in catalog, skipping\n");
+    return (TRUE);
+  }
+
+  // for the appropriate types, pull out the first secfilt and pass to AverageToFtable as primary 
+  switch (catalog[0].catformat) {
+    case DVO_FORMAT_ELIXIR: // special case for ELIXIR
+    case DVO_FORMAT_LONEOS: // special case for LONEOS
+      dvo_catalog_secfilt_to_primary (catalog, &primary, &secfilt, &Nsecfilt);
+      break;
+    default:
+      primary = NULL;
+      secfilt = catalog[0].secfilt;
+      Nsecfilt = catalog[0].Nsecfilt;
+      break;
+  }
+
+  Nmeasure_disk_new = MAX (catalog[0].Nmeasure_disk, catalog[0].Nmeasure + catalog[0].Nmeasure_off);
+  Nmissing_disk_new = MAX (catalog[0].Nmissing_disk, catalog[0].Nmissing + catalog[0].Nmissing_off);
+  Nsecfilt_disk_new = MAX (catalog[0].Nsecfilt_disk, catalog[0].Naverage*Nsecfilt + catalog[0].Nsecfilt_off);
+  Nlensing_disk_new = MAX (catalog[0].Nlensing_disk, catalog[0].Nlensing + catalog[0].Nlensing_off);
+  Nlensobj_disk_new = MAX (catalog[0].Nlensobj_disk, catalog[0].Nlensobj + catalog[0].Nlensobj_off);
+  Nstarpar_disk_new = MAX (catalog[0].Nstarpar_disk, catalog[0].Nstarpar + catalog[0].Nstarpar_off);
+  Ngalphot_disk_new = MAX (catalog[0].Ngalphot_disk, catalog[0].Ngalphot + catalog[0].Ngalphot_off);
+
+  /* make sure header is consistent with data */
+  gfits_modify (&catalog[0].header, "NSTARS",   OFF_T_FMT, 1,  Naverage_disk_new);
+  gfits_modify (&catalog[0].header, "NMEAS",    OFF_T_FMT, 1,  Nmeasure_disk_new);
+  gfits_modify (&catalog[0].header, "NMISS",    OFF_T_FMT, 1,  Nmissing_disk_new);
+  gfits_modify (&catalog[0].header, "NSECFILT", "%d", 1, Nsecfilt);
+  gfits_modify (&catalog[0].header, "NLENSING", OFF_T_FMT, 1,  Nlensing_disk_new);
+  gfits_modify (&catalog[0].header, "NLENSOBJ", OFF_T_FMT, 1,  Nlensobj_disk_new);
+  gfits_modify (&catalog[0].header, "NSTARPAR", OFF_T_FMT, 1,  Nstarpar_disk_new);
+  gfits_modify (&catalog[0].header, "NGALPHOT", OFF_T_FMT, 1,  Ngalphot_disk_new);
+
+  gfits_modify_alt (&catalog[0].header, "EXTEND",   "%t", 1, TRUE);
+  gfits_modify (&catalog[0].header, "OBJID",    "%d", 1, catalog[0].objID);
+
+  /* in split mode, we can save only part of the data */ 
+
+  /*** Average Table ***/
+  if (catalog[0].average != NULL) {
+
+    first  = catalog[0].Naverage_disk - catalog[0].Naverage_off; // first row to write (memory)
+    start  = catalog[0].Naverage_disk;                        // first row to write (disk)
+    Nrows  = catalog[0].Naverage - first;
+
+    assert (Nrows >= 0);
+    assert (first >= 0);
+    assert (first <= catalog[0].Naverage);
+    assert (catalog[0].Naverage_disk >= catalog[0].Naverage_off);
+
+    /* convert internal to external format */
+    if (!AverageToFtable (&ftable, &catalog[0].average[first], Nrows, catalog[0].catformat, primary, TRUE)) {
+      fprintf (stderr, "trouble converting format\n");
+      goto failure;
+    }
+
+    if (!dvo_catalog_save_subcat (catalog, &ftable, start, Nrows, catalog[0].Naverage_disk, Naverage_disk_new)) {
+      fprintf (stderr, "failure writing Average table\n");
+      goto failure;
+    }
+    gfits_free_header (&header);
+    gfits_free_table (&ftable);
+  } else {
+    // even if we do not save the average table, we need to keep the header in sync
+    /* rewind file pointers and truncate (file is still open) */
+    if (fseeko (catalog[0].f, 0, SEEK_SET)) { perror ("fseeko: "); exit (1); }
 
     /* write table PHU header - always write this out */
@@ -991,5 +1290,5 @@
 
   /*** StarPar Table (optional, do not save if not loaded) ***/
-    if ((catalog[0].catflags & DVO_LOAD_STARPAR) && catalog[0].starpar_catalog->f && catalog[0].starpar) {
+  if ((catalog[0].catflags & DVO_LOAD_STARPAR) && catalog[0].starpar_catalog->f && catalog[0].starpar) {
 
     first  = 0;                    // first row in memory to write
@@ -1022,29 +1321,29 @@
   }
 
-  /*** GalShape Table (optional, do not save if not loaded) ***/
-  if ((catalog[0].catflags & DVO_LOAD_GALSHAPE) && catalog[0].galshape_catalog->f && catalog[0].galshape) {
+  /*** GalPhot Table (optional, do not save if not loaded) ***/
+  if ((catalog[0].catflags & DVO_LOAD_GALPHOT) && catalog[0].galphot_catalog->f && catalog[0].galphot) {
 
     first  = 0;                    // first row in memory to write
-    start  = catalog[0].Ngalshape_off; // first disk row to write
-    Nrows  = catalog[0].Ngalshape - first;
-
-    assert (Nrows >= 0);
-    assert (first >= 0);
-    assert (first <= catalog[0].Ngalshape);
-    assert (catalog[0].Ngalshape_disk >= catalog[0].Ngalshape_off);
-
-    if (catalog[0].Ngalshape) {
+    start  = catalog[0].Ngalphot_off; // first disk row to write
+    Nrows  = catalog[0].Ngalphot - first;
+
+    assert (Nrows >= 0);
+    assert (first >= 0);
+    assert (first <= catalog[0].Ngalphot);
+    assert (catalog[0].Ngalphot_disk >= catalog[0].Ngalphot_off);
+
+    if (catalog[0].Ngalphot) {
       // if we are going to compress, we need to receive unswapped data -- 
-      int swapFromNative = !output_is_compressed (start, Nrows, Ngalshape_disk_new, catalog->catcompress);
+      int swapFromNative = !output_is_compressed (start, Nrows, Ngalphot_disk_new, catalog->catcompress);
 
       // convert to external table format (note that the block above does not damage or free catalog.average) 
-      if (!GalShapeToFtable (&ftable, &catalog[0].galshape[first], Nrows, catalog[0].catformat, swapFromNative)) {
+      if (!GalPhotToFtable (&ftable, &catalog[0].galphot[first], Nrows, catalog[0].catformat, swapFromNative)) {
 	fprintf (stderr, "trouble converting format\n");
 	goto failure;
       }
 
-      // write out GalShape table
-      if (!dvo_catalog_save_subcat (catalog[0].galshape_catalog, &ftable, start, Nrows, catalog[0].Ngalshape_disk, Ngalshape_disk_new)) {
-	fprintf (stderr, "trouble writing GalShape table\n");
+      // write out GalPhot table
+      if (!dvo_catalog_save_subcat (catalog[0].galphot_catalog, &ftable, start, Nrows, catalog[0].Ngalphot_disk, Ngalphot_disk_new)) {
+	fprintf (stderr, "trouble writing GalPhot table\n");
 	goto failure;
       }
@@ -1061,5 +1360,5 @@
   return (TRUE);
 
-failure:
+ failure:
   /* free temp storage */
   gfits_free_header (&header);
@@ -1075,10 +1374,9 @@
 int dvo_catalog_save_split_complete (Catalog *catalog, char VERBOSE) {
 
-  off_t Nitems;
   Header header;
   FTable ftable;
   SecFilt *primary, *secfilt;
   int Nsecfilt;
-  off_t Naverage_disk_new, Nmeasure_disk_new, Nmissing_disk_new, Nsecfilt_disk_new, Nlensing_disk_new, Nlensobj_disk_new, Nstarpar_disk_new, Ngalshape_disk_new;
+  off_t Naverage_disk_new, Nmeasure_disk_new, Nmissing_disk_new, Nsecfilt_disk_new, Nlensing_disk_new, Nlensobj_disk_new, Nstarpar_disk_new, Ngalphot_disk_new;
   off_t first, start, Nrows;
 
@@ -1117,6 +1415,6 @@
     goto failure;
   }
-  if (catalog[0].Ngalshape_off > 0) {
-    fprintf (stderr, "ERROR: only partial catalog (GalShape) was loaded\n");
+  if (catalog[0].Ngalphot_off > 0) {
+    fprintf (stderr, "ERROR: only partial catalog (GalPhot) was loaded\n");
     goto failure;
   }
@@ -1148,5 +1446,5 @@
   Nlensobj_disk_new = catalog[0].Nlensobj;
   Nstarpar_disk_new = catalog[0].Nstarpar;
-  Ngalshape_disk_new = catalog[0].Ngalshape;
+  Ngalphot_disk_new = catalog[0].Ngalphot;
 
   /* make sure header is consistent with data */
@@ -1158,5 +1456,5 @@
   gfits_modify (&catalog[0].header, "NLENSOBJ", OFF_T_FMT, 1,  Nlensobj_disk_new);
   gfits_modify (&catalog[0].header, "NSTARPAR", OFF_T_FMT, 1,  Nstarpar_disk_new);
-  gfits_modify (&catalog[0].header, "NGALSHAPE", OFF_T_FMT, 1, Ngalshape_disk_new);
+  gfits_modify (&catalog[0].header, "NGALPHOT", OFF_T_FMT, 1, Ngalphot_disk_new);
   gfits_modify_alt (&catalog[0].header, "EXTEND",   "%t", 1, TRUE);
   gfits_modify (&catalog[0].header, "OBJID",    "%d", 1, catalog[0].objID);
@@ -1191,5 +1489,5 @@
     // even if we do not save the average table, we need to keep the header in sync
     /* rewind file pointers and truncate (file is still open) */
-    fseeko (catalog[0].f, 0, SEEK_SET);
+    if (fseeko (catalog[0].f, 0, SEEK_SET)) { perror ("fseeko: "); exit (1); }
 
     /* write table PHU header - always write this out */
@@ -1202,8 +1500,8 @@
 
   /*** Measure Table ***/
-  if ((catalog[0].catflags & DVO_LOAD_MEASURE) && (catalog[0].measure != NULL)) {
-
-    first  = 0;                    // first row in memory to write
-    start  = catalog[0].Nmeasure_off; // first disk row to write
+  if (catalog[0].measure != NULL) {
+
+    first  = catalog[0].Nmeasure_disk - catalog[0].Nmeasure_off;  // first row in memory to write
+    start  = catalog[0].Nmeasure_disk; // first disk row to write
     Nrows  = catalog[0].Nmeasure - first;
 
@@ -1214,4 +1512,5 @@
 
     // convert to external table format
+    // XXX does catalog.measure have averef correctly set up?
     if (!MeasureToFtable (&ftable, catalog[0].average, &catalog[0].measure[first], Nrows, catalog[0].catformat, TRUE)) {
       fprintf (stderr, "trouble converting format\n");
@@ -1228,6 +1527,10 @@
   }
 
+  /* missing table CANNOT be written unsorted, thus it is always written 
+     out in full */
+
   /*** Missing Table ***/
-  if ((catalog[0].catflags & DVO_LOAD_MISSING) && (catalog[0].missing != NULL)) {
+
+  if (catalog[0].missing != NULL) {
 
     if (catalog[0].Nmissing_off != 0) {
@@ -1252,16 +1555,13 @@
 
   /*** Secfilt Table ***/
-  if ((catalog[0].catflags & DVO_LOAD_SECFILT) && (catalog[0].secfilt != NULL)) {
-
-    first  = 0;                    // first row in memory to write
-    start  = catalog[0].Nsecfilt_off; // first disk row to write
-    Nitems = catalog[0].Naverage*Nsecfilt;
-    Nrows  = Nitems - first;
-
-    assert (Nrows >= 0);
-    assert (first >= 0);
-    assert (first <= Nitems);
+  if (catalog[0].secfilt != NULL) {
+
+    first  = catalog[0].Nsecfilt_disk - catalog[0].Nsecfilt_off;  // first row in memory to write
+    start  = catalog[0].Nsecfilt_disk; // first disk row to write
+    Nrows  = catalog[0].Nsecfilt_mem - first;
+
+    assert (Nrows >= 0);
+    assert (first >= 0);
     assert (catalog[0].Nsecfilt_disk >= catalog[0].Nsecfilt_off);
-    // XXX check these for consistency...
 
     // convert to external table format
@@ -1278,8 +1578,8 @@
 
   /*** Lensing Table ***/
-  if ((catalog[0].catflags & DVO_LOAD_LENSING) && (catalog[0].lensing != NULL)) {
-
-    first  = 0;                    // first row in memory to write
-    start  = catalog[0].Nlensing_off; // first disk row to write
+  if (catalog[0].lensing != NULL) {
+
+    first  = catalog[0].Nlensing_disk - catalog[0].Nlensing_off;  // first row in memory to write
+    start  = catalog[0].Nlensing_disk; // first disk row to write
     Nrows  = catalog[0].Nlensing - first;
 
@@ -1290,4 +1590,5 @@
 
     // convert to external table format
+    // XXX does catalog.lensing have averef correctly set up?
     if (!LensingToFtable (&ftable, &catalog[0].lensing[first], Nrows, catalog[0].catformat, TRUE)) {
       fprintf (stderr, "trouble converting format\n");
@@ -1305,8 +1606,8 @@
 
   /*** Lensobj Table ***/
-  if ((catalog[0].catflags & DVO_LOAD_LENSOBJ) && (catalog[0].lensobj != NULL)) {
-
-    first  = 0;                    // first row in memory to write
-    start  = catalog[0].Nlensobj_off; // first disk row to write
+  if (catalog[0].lensobj != NULL) {
+
+    first  = catalog[0].Nlensobj_disk - catalog[0].Nlensobj_off;  // first row in memory to write
+    start  = catalog[0].Nlensobj_disk; // first disk row to write
     Nrows  = catalog[0].Nlensobj - first;
 
@@ -1317,4 +1618,5 @@
 
     // convert to external table format
+    // XXX does catalog.lensobj have averef correctly set up?
     if (!LensobjToFtable (&ftable, &catalog[0].lensobj[first], Nrows, catalog[0].catformat, TRUE)) {
       fprintf (stderr, "trouble converting format\n");
@@ -1332,8 +1634,8 @@
 
   /*** StarPar Table ***/
-  if ((catalog[0].catflags & DVO_LOAD_STARPAR) && (catalog[0].starpar != NULL)) {
-
-    first  = 0;                    // first row in memory to write
-    start  = catalog[0].Nstarpar_off; // first disk row to write
+  if (catalog[0].starpar != NULL) {
+
+    first  = catalog[0].Nstarpar_disk - catalog[0].Nstarpar_off;  // first row in memory to write
+    start  = catalog[0].Nstarpar_disk; // first disk row to write
     Nrows  = catalog[0].Nstarpar - first;
 
@@ -1344,4 +1646,5 @@
 
     // convert to external table format
+    // XXX does catalog.starpar have averef correctly set up?
     if (!StarParToFtable (&ftable, &catalog[0].starpar[first], Nrows, catalog[0].catformat, TRUE)) {
       fprintf (stderr, "trouble converting format\n");
@@ -1358,25 +1661,26 @@
   }
 
-  /*** GalShape Table ***/
-  if ((catalog[0].catflags & DVO_LOAD_GALSHAPE) && (catalog[0].galshape != NULL)) {
-
-    first  = 0;                    // first row in memory to write
-    start  = catalog[0].Ngalshape_off; // first disk row to write
-    Nrows  = catalog[0].Ngalshape - first;
-
-    assert (Nrows >= 0);
-    assert (first >= 0);
-    assert (first <= catalog[0].Ngalshape);
-    assert (catalog[0].Ngalshape_disk >= catalog[0].Ngalshape_off);
+  /*** GalPhot Table ***/
+  if (catalog[0].galphot != NULL) {
+
+    first  = catalog[0].Ngalphot_disk - catalog[0].Ngalphot_off;  // first row in memory to write
+    start  = catalog[0].Ngalphot_disk; // first disk row to write
+    Nrows  = catalog[0].Ngalphot - first;
+
+    assert (Nrows >= 0);
+    assert (first >= 0);
+    assert (first <= catalog[0].Ngalphot);
+    assert (catalog[0].Ngalphot_disk >= catalog[0].Ngalphot_off);
 
     // convert to external table format
-    if (!GalShapeToFtable (&ftable, &catalog[0].galshape[first], Nrows, catalog[0].catformat, TRUE)) {
+    // XXX does catalog.galphot have averef correctly set up?
+    if (!GalPhotToFtable (&ftable, &catalog[0].galphot[first], Nrows, catalog[0].catformat, TRUE)) {
       fprintf (stderr, "trouble converting format\n");
       goto failure;
     }
 
-    // write out GalShape table
-    if (!dvo_catalog_save_subcat (catalog[0].galshape_catalog, &ftable, start, Nrows, catalog[0].Ngalshape_disk, Ngalshape_disk_new)) {
-      fprintf (stderr, "trouble writing GalShape table\n");
+    // write out GalPhot table
+    if (!dvo_catalog_save_subcat (catalog[0].galphot_catalog, &ftable, start, Nrows, catalog[0].Ngalphot_disk, Ngalphot_disk_new)) {
+      fprintf (stderr, "trouble writing GalPhot table\n");
       goto failure;
     }
@@ -1390,310 +1694,8 @@
     free (secfilt);
   }
+
   return (TRUE);
 
-failure:
-  /* free temp storage */
-  gfits_free_header (&header);
-  gfits_free_table (&ftable);
-  if (primary != NULL) {
-    free (primary);
-    free (secfilt);
-  }
-  return (FALSE);
-}
-
-/* update_catalog_split only writes new lines to file. */
-int dvo_catalog_update_split (Catalog *catalog, char VERBOSE) {
-
-  Header header;
-  FTable ftable;
-  SecFilt *primary, *secfilt;
-  int Nsecfilt;
-  off_t Naverage_disk_new, Nmeasure_disk_new, Nmissing_disk_new, Nsecfilt_disk_new, Nlensing_disk_new, Nlensobj_disk_new, Nstarpar_disk_new, Ngalshape_disk_new;
-  off_t first, start, Nrows;
-
-  ftable.header = &header;
-  ftable.buffer = NULL;
-  header.buffer = NULL;
-
-  // skip empty catalogs: it is illegal to have Measures without corresponding Averages
-  Naverage_disk_new = MAX (catalog[0].Naverage_disk, catalog[0].Naverage + catalog[0].Naverage_off);
-  if (Naverage_disk_new == 0) {
-    if (VERBOSE) fprintf (stderr, "no stars in catalog, skipping\n");
-    return (TRUE);
-  }
-
-  // for the appropriate types, pull out the first secfilt and pass to AverageToFtable as primary 
-  switch (catalog[0].catformat) {
-    case DVO_FORMAT_ELIXIR: // special case for ELIXIR
-    case DVO_FORMAT_LONEOS: // special case for LONEOS
-      dvo_catalog_secfilt_to_primary (catalog, &primary, &secfilt, &Nsecfilt);
-      break;
-    default:
-      primary = NULL;
-      secfilt = catalog[0].secfilt;
-      Nsecfilt = catalog[0].Nsecfilt;
-      break;
-  }
-
-  Nmeasure_disk_new = MAX (catalog[0].Nmeasure_disk, catalog[0].Nmeasure + catalog[0].Nmeasure_off);
-  Nmissing_disk_new = MAX (catalog[0].Nmissing_disk, catalog[0].Nmissing + catalog[0].Nmissing_off);
-  Nsecfilt_disk_new = MAX (catalog[0].Nsecfilt_disk, catalog[0].Naverage*Nsecfilt + catalog[0].Nsecfilt_off);
-  Nlensing_disk_new = MAX (catalog[0].Nlensing_disk, catalog[0].Nlensing + catalog[0].Nlensing_off);
-  Nlensobj_disk_new = MAX (catalog[0].Nlensobj_disk, catalog[0].Nlensobj + catalog[0].Nlensobj_off);
-  Nstarpar_disk_new = MAX (catalog[0].Nstarpar_disk, catalog[0].Nstarpar + catalog[0].Nstarpar_off);
-  Ngalshape_disk_new = MAX (catalog[0].Ngalshape_disk, catalog[0].Ngalshape + catalog[0].Ngalshape_off);
-
-  /* make sure header is consistent with data */
-  gfits_modify (&catalog[0].header, "NSTARS",   OFF_T_FMT, 1,  Naverage_disk_new);
-  gfits_modify (&catalog[0].header, "NMEAS",    OFF_T_FMT, 1,  Nmeasure_disk_new);
-  gfits_modify (&catalog[0].header, "NMISS",    OFF_T_FMT, 1,  Nmissing_disk_new);
-  gfits_modify (&catalog[0].header, "NSECFILT", "%d", 1, Nsecfilt);
-  gfits_modify (&catalog[0].header, "NLENSING", OFF_T_FMT, 1,  Nlensing_disk_new);
-  gfits_modify (&catalog[0].header, "NLENSOBJ", OFF_T_FMT, 1,  Nlensobj_disk_new);
-  gfits_modify (&catalog[0].header, "NSTARPAR", OFF_T_FMT, 1,  Nstarpar_disk_new);
-  gfits_modify (&catalog[0].header, "NGALSHAPE", OFF_T_FMT, 1,  Ngalshape_disk_new);
-
-  gfits_modify_alt (&catalog[0].header, "EXTEND",   "%t", 1, TRUE);
-  gfits_modify (&catalog[0].header, "OBJID",    "%d", 1, catalog[0].objID);
-
-  /* in split mode, we can save only part of the data */ 
-
-  /*** Average Table ***/
-  if (catalog[0].average != NULL) {
-
-    first  = catalog[0].Naverage_disk - catalog[0].Naverage_off; // first row to write (memory)
-    start  = catalog[0].Naverage_disk;                        // first row to write (disk)
-    Nrows  = catalog[0].Naverage - first;
-
-    assert (Nrows >= 0);
-    assert (first >= 0);
-    assert (first <= catalog[0].Naverage);
-    assert (catalog[0].Naverage_disk >= catalog[0].Naverage_off);
-
-    /* convert internal to external format */
-    if (!AverageToFtable (&ftable, &catalog[0].average[first], Nrows, catalog[0].catformat, primary, TRUE)) {
-      fprintf (stderr, "trouble converting format\n");
-      goto failure;
-    }
-
-    if (!dvo_catalog_save_subcat (catalog, &ftable, start, Nrows, catalog[0].Naverage_disk, Naverage_disk_new)) {
-      fprintf (stderr, "failure writing Average table\n");
-      goto failure;
-    }
-    gfits_free_header (&header);
-    gfits_free_table (&ftable);
-  } else {
-    // even if we do not save the average table, we need to keep the header in sync
-    /* rewind file pointers and truncate (file is still open) */
-    fseeko (catalog[0].f, 0, SEEK_SET);
-
-    /* write table PHU header - always write this out */
-    /* XXX EAM : check if disk file size has changed */
-    if (!gfits_fwrite_header  (catalog[0].f, &catalog[0].header)) {
-      fprintf (stderr, "can't write primary header");
-      goto failure;
-    }
-  }
-
-  /*** Measure Table ***/
-  if (catalog[0].measure != NULL) {
-
-    first  = catalog[0].Nmeasure_disk - catalog[0].Nmeasure_off;  // first row in memory to write
-    start  = catalog[0].Nmeasure_disk; // first disk row to write
-    Nrows  = catalog[0].Nmeasure - first;
-
-    assert (Nrows >= 0);
-    assert (first >= 0);
-    assert (first <= catalog[0].Nmeasure);
-    assert (catalog[0].Nmeasure_disk >= catalog[0].Nmeasure_off);
-
-    // convert to external table format
-    // XXX does catalog.measure have averef correctly set up?
-    if (!MeasureToFtable (&ftable, catalog[0].average, &catalog[0].measure[first], Nrows, catalog[0].catformat, TRUE)) {
-      fprintf (stderr, "trouble converting format\n");
-      goto failure;
-    }
-
-    // write out Measure table
-    if (!dvo_catalog_save_subcat (catalog[0].measure_catalog, &ftable, start, Nrows, catalog[0].Nmeasure_disk, Nmeasure_disk_new)) {
-      fprintf (stderr, "trouble writing Measure table\n");
-      goto failure;
-    }
-    gfits_free_header (&header);
-    gfits_free_table (&ftable);
-  }
-
-  /* missing table CANNOT be written unsorted, thus it is always written 
-     out in full */
-
-  /*** Missing Table ***/
-
-  if (catalog[0].missing != NULL) {
-
-    if (catalog[0].Nmissing_off != 0) {
-      fprintf (stderr, "inconsistency: Missing table cannot be written in segments\n");
-      goto failure;
-    }
-
-    // convert to external table format
-    if (!gfits_table_set_Missing (&ftable, catalog[0].missing, catalog[0].Nmissing, TRUE)) {
-      fprintf (stderr, "trouble converting format\n");
-      goto failure;
-    }
-
-    // write out Missing table (must write out entire table)
-    if (!dvo_catalog_save_subcat (catalog[0].missing_catalog, &ftable, 0, catalog[0].Nmissing, catalog[0].Nmissing, catalog[0].Nmissing)) {
-      fprintf (stderr, "trouble writing Missing Table\n");
-      goto failure;
-    }
-    gfits_free_header (&header);
-    gfits_free_table (&ftable);
-  }
-
-  /*** Secfilt Table ***/
-  if (catalog[0].secfilt != NULL) {
-
-    first  = catalog[0].Nsecfilt_disk - catalog[0].Nsecfilt_off;  // first row in memory to write
-    start  = catalog[0].Nsecfilt_disk; // first disk row to write
-    Nrows  = catalog[0].Nsecfilt_mem - first;
-
-    assert (Nrows >= 0);
-    assert (first >= 0);
-    assert (catalog[0].Nsecfilt_disk >= catalog[0].Nsecfilt_off);
-
-    // convert to external table format
-    SecFiltToFtable (&ftable, &secfilt[first], Nrows, catalog[0].catformat, TRUE);
-
-    // write out SecFilt table
-    if (!dvo_catalog_save_subcat (catalog[0].secfilt_catalog, &ftable, start, Nrows, catalog[0].Nsecfilt_disk, Nsecfilt_disk_new)) {
-      fprintf (stderr, "failure writing SecFilt table\n");
-      goto failure;
-    }
-    gfits_free_header (&header);
-    gfits_free_table (&ftable);
-  }
-
-  /*** Lensing Table ***/
-  if (catalog[0].lensing != NULL) {
-
-    first  = catalog[0].Nlensing_disk - catalog[0].Nlensing_off;  // first row in memory to write
-    start  = catalog[0].Nlensing_disk; // first disk row to write
-    Nrows  = catalog[0].Nlensing - first;
-
-    assert (Nrows >= 0);
-    assert (first >= 0);
-    assert (first <= catalog[0].Nlensing);
-    assert (catalog[0].Nlensing_disk >= catalog[0].Nlensing_off);
-
-    // convert to external table format
-    // XXX does catalog.lensing have averef correctly set up?
-    if (!LensingToFtable (&ftable, &catalog[0].lensing[first], Nrows, catalog[0].catformat, TRUE)) {
-      fprintf (stderr, "trouble converting format\n");
-      goto failure;
-    }
-
-    // write out Lensing table
-    if (!dvo_catalog_save_subcat (catalog[0].lensing_catalog, &ftable, start, Nrows, catalog[0].Nlensing_disk, Nlensing_disk_new)) {
-      fprintf (stderr, "trouble writing Lensing table\n");
-      goto failure;
-    }
-    gfits_free_header (&header);
-    gfits_free_table (&ftable);
-  }
-
-  /*** Lensobj Table ***/
-  if (catalog[0].lensobj != NULL) {
-
-    first  = catalog[0].Nlensobj_disk - catalog[0].Nlensobj_off;  // first row in memory to write
-    start  = catalog[0].Nlensobj_disk; // first disk row to write
-    Nrows  = catalog[0].Nlensobj - first;
-
-    assert (Nrows >= 0);
-    assert (first >= 0);
-    assert (first <= catalog[0].Nlensobj);
-    assert (catalog[0].Nlensobj_disk >= catalog[0].Nlensobj_off);
-
-    // convert to external table format
-    // XXX does catalog.lensobj have averef correctly set up?
-    if (!LensobjToFtable (&ftable, &catalog[0].lensobj[first], Nrows, catalog[0].catformat, TRUE)) {
-      fprintf (stderr, "trouble converting format\n");
-      goto failure;
-    }
-
-    // write out Lensobj table
-    if (!dvo_catalog_save_subcat (catalog[0].lensobj_catalog, &ftable, start, Nrows, catalog[0].Nlensobj_disk, Nlensobj_disk_new)) {
-      fprintf (stderr, "trouble writing Lensobj table\n");
-      goto failure;
-    }
-    gfits_free_header (&header);
-    gfits_free_table (&ftable);
-  }
-
-  /*** StarPar Table ***/
-  if (catalog[0].starpar != NULL) {
-
-    first  = catalog[0].Nstarpar_disk - catalog[0].Nstarpar_off;  // first row in memory to write
-    start  = catalog[0].Nstarpar_disk; // first disk row to write
-    Nrows  = catalog[0].Nstarpar - first;
-
-    assert (Nrows >= 0);
-    assert (first >= 0);
-    assert (first <= catalog[0].Nstarpar);
-    assert (catalog[0].Nstarpar_disk >= catalog[0].Nstarpar_off);
-
-    // convert to external table format
-    // XXX does catalog.starpar have averef correctly set up?
-    if (!StarParToFtable (&ftable, &catalog[0].starpar[first], Nrows, catalog[0].catformat, TRUE)) {
-      fprintf (stderr, "trouble converting format\n");
-      goto failure;
-    }
-
-    // write out StarPar table
-    if (!dvo_catalog_save_subcat (catalog[0].starpar_catalog, &ftable, start, Nrows, catalog[0].Nstarpar_disk, Nstarpar_disk_new)) {
-      fprintf (stderr, "trouble writing StarPar table\n");
-      goto failure;
-    }
-    gfits_free_header (&header);
-    gfits_free_table (&ftable);
-  }
-
-  /*** GalShape Table ***/
-  if (catalog[0].galshape != NULL) {
-
-    first  = catalog[0].Ngalshape_disk - catalog[0].Ngalshape_off;  // first row in memory to write
-    start  = catalog[0].Ngalshape_disk; // first disk row to write
-    Nrows  = catalog[0].Ngalshape - first;
-
-    assert (Nrows >= 0);
-    assert (first >= 0);
-    assert (first <= catalog[0].Ngalshape);
-    assert (catalog[0].Ngalshape_disk >= catalog[0].Ngalshape_off);
-
-    // convert to external table format
-    // XXX does catalog.galshape have averef correctly set up?
-    if (!GalShapeToFtable (&ftable, &catalog[0].galshape[first], Nrows, catalog[0].catformat, TRUE)) {
-      fprintf (stderr, "trouble converting format\n");
-      goto failure;
-    }
-
-    // write out GalShape table
-    if (!dvo_catalog_save_subcat (catalog[0].galshape_catalog, &ftable, start, Nrows, catalog[0].Ngalshape_disk, Ngalshape_disk_new)) {
-      fprintf (stderr, "trouble writing GalShape table\n");
-      goto failure;
-    }
-    gfits_free_header (&header);
-    gfits_free_table (&ftable);
-  }
-
-  /* free temp storage */
-  if (primary != NULL) {
-    free (primary);
-    free (secfilt);
-  }
-
-  return (TRUE);
-
-failure:
+ failure:
   /* free temp storage */
   if (primary != NULL) {
@@ -1719,11 +1721,11 @@
 
 
-    // * convert to an ftable
-    // * optionally write the PHU header/matrix
-    // * advance to the start of the output data block:
-    // ** Nx * catalog[0].Nmeasure_off
-    // * write out the ftable data block
-    // * if Nmeasure_off + Nmeasure >= Nmeasure_disk, update padding
-    // ** start = Nmeasure_off
-    // ** Nrows = Nmeasure
-
+// * convert to an ftable
+// * optionally write the PHU header/matrix
+// * advance to the start of the output data block:
+// ** Nx * catalog[0].Nmeasure_off
+// * write out the ftable data block
+// * if Nmeasure_off + Nmeasure >= Nmeasure_disk, update padding
+// ** start = Nmeasure_off
+// ** Nrows = Nmeasure
+
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert.c	(revision 38419)
@@ -853,14 +853,14 @@
 }
 
-/*** GalShape / FTable conversion functions ***/
-
-GalShape *FtableToGalShape (FTable *ftable, Average *average, off_t *Ngalshape, DVOCatFormat *format, char nativeBytes) {
-
-  GalShape *galshape;
+/*** GalPhot / FTable conversion functions ***/
+
+GalPhot *FtableToGalPhot (FTable *ftable, Average *average, off_t *Ngalphot, DVOCatFormat *format, char nativeBytes) {
+
+  GalPhot *galphot;
   char extname[80];
 
   /* convert to the internal format */
   if (!gfits_scan (ftable[0].header, "EXTNAME", "%s", 1, extname)) {
-    fprintf (stderr, "EXTNAME missing for galshape table\n");
+    fprintf (stderr, "EXTNAME missing for galphot table\n");
     return (FALSE);
   }
@@ -868,6 +868,6 @@
 # define SKIPPING_FORMAT(NAME, FORMAT, TYPE)		\
   if (!strcmp (extname, NAME)) {					\
-    fprintf (stderr, "ERROR: format %s not defined for galshape, skipping\n", NAME); \
-    *Ngalshape = 0; \
+    fprintf (stderr, "ERROR: format %s not defined for galphot, skipping\n", NAME); \
+    *Ngalphot = 0; \
     return NULL; \
   }
@@ -875,38 +875,38 @@
 # define CONVERT_FORMAT(NAME, FORMAT, TYPE)		\
   if (!strcmp (extname, NAME)) {					\
-    GalShape_##TYPE *tmpGalShape;						\
-    tmpGalShape = gfits_table_get_GalShape_##TYPE (ftable, Ngalshape, NULL, &nativeBytes); \
-    if (!tmpGalShape) {							\
-      fprintf (stderr, "ERROR: failed to read galshapes\n");		\
+    GalPhot_##TYPE *tmpGalPhot;						\
+    tmpGalPhot = gfits_table_get_GalPhot_##TYPE (ftable, Ngalphot, NULL, &nativeBytes); \
+    if (!tmpGalPhot) {							\
+      fprintf (stderr, "ERROR: failed to read galphots\n");		\
       exit (2);								\
     }									\
-    galshape = GalShape_##TYPE##_ToInternal (tmpGalShape, *Ngalshape); \
-    free (tmpGalShape);							\
+    galphot = GalPhot_##TYPE##_ToInternal (tmpGalPhot, *Ngalphot); \
+    free (tmpGalPhot);							\
     *format = DVO_FORMAT_##FORMAT;					\
-    return (galshape); }
-
-  if (!strcmp (extname, "DVO_GALSHAPE")) {
-    galshape = gfits_table_get_GalShape (ftable, Ngalshape, NULL, &nativeBytes);
-    if (!galshape) {
-      fprintf (stderr, "ERROR: failed to read galshapes\n");
+    return (galphot); }
+
+  if (!strcmp (extname, "DVO_GALPHOT")) {
+    galphot = gfits_table_get_GalPhot (ftable, Ngalphot, NULL, &nativeBytes);
+    if (!galphot) {
+      fprintf (stderr, "ERROR: failed to read galphots\n");
       exit (2);
     }
     *format = DVO_FORMAT_INTERNAL;
-    return (galshape);
-  }
-
-  SKIPPING_FORMAT ("DVO_GALSHAPE_PS1_REF",         PS1_REF,         PS1_REF);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_ELIXIR", 	  ELIXIR,  	   Elixir);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_LONEOS", 	  LONEOS,          Loneos);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_PANSTARRS_DEV_0", PANSTARRS_DEV_0, Panstarrs_DEV_0);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_PANSTARRS_DEV_1", PANSTARRS_DEV_1, Panstarrs_DEV_1);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_PS1_DEV_1",       PS1_DEV_1,       PS1_DEV_1);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_PS1_DEV_2",       PS1_DEV_2,       PS1_DEV_2);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_PS1_V1",          PS1_V1,          PS1_V1);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_PS1_V2",          PS1_V2,          PS1_V2);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_PS1_V3",          PS1_V3,          PS1_V3);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_PS1_V4",          PS1_V4,          PS1_V4);
-  CONVERT_FORMAT  ("DVO_GALSHAPE_PS1_V5",          PS1_V5,          PS1_V5);
-  SKIPPING_FORMAT ("DVO_GALSHAPE_PS1_SIM",         PS1_SIM,         PS1_SIM);
+    return (galphot);
+  }
+
+  SKIPPING_FORMAT ("DVO_GALPHOT_PS1_REF",         PS1_REF,         PS1_REF);
+  SKIPPING_FORMAT ("DVO_GALPHOT_ELIXIR", 	  ELIXIR,  	   Elixir);
+  SKIPPING_FORMAT ("DVO_GALPHOT_LONEOS", 	  LONEOS,          Loneos);
+  SKIPPING_FORMAT ("DVO_GALPHOT_PANSTARRS_DEV_0", PANSTARRS_DEV_0, Panstarrs_DEV_0);
+  SKIPPING_FORMAT ("DVO_GALPHOT_PANSTARRS_DEV_1", PANSTARRS_DEV_1, Panstarrs_DEV_1);
+  SKIPPING_FORMAT ("DVO_GALPHOT_PS1_DEV_1",       PS1_DEV_1,       PS1_DEV_1);
+  SKIPPING_FORMAT ("DVO_GALPHOT_PS1_DEV_2",       PS1_DEV_2,       PS1_DEV_2);
+  SKIPPING_FORMAT ("DVO_GALPHOT_PS1_V1",          PS1_V1,          PS1_V1);
+  SKIPPING_FORMAT ("DVO_GALPHOT_PS1_V2",          PS1_V2,          PS1_V2);
+  SKIPPING_FORMAT ("DVO_GALPHOT_PS1_V3",          PS1_V3,          PS1_V3);
+  SKIPPING_FORMAT ("DVO_GALPHOT_PS1_V4",          PS1_V4,          PS1_V4);
+  CONVERT_FORMAT  ("DVO_GALPHOT_PS1_V5",          PS1_V5,          PS1_V5);
+  SKIPPING_FORMAT ("DVO_GALPHOT_PS1_SIM",         PS1_SIM,         PS1_SIM);
 # undef CONVERT_FORMAT
 # undef SKIPPING_FORMAT
@@ -914,17 +914,17 @@
   fprintf (stderr, "table format unknown: %s\n", extname);
 
-  *Ngalshape = 0;
+  *Ngalphot = 0;
   return (NULL);
 }
 
-// GalShapeToFtable needs the Average since old formats stored galshape.dR,dD only
-int GalShapeToFtable (FTable *ftable, GalShape *galshape, off_t Ngalshape, DVOCatFormat format, int swapFromNative) {
+// GalPhotToFtable needs the Average since old formats stored galphot.dR,dD only
+int GalPhotToFtable (FTable *ftable, GalPhot *galphot, off_t Ngalphot, DVOCatFormat format, int swapFromNative) {
 
 # define FORMAT_CASE(FORMAT, TYPE)		\
     case DVO_FORMAT_##FORMAT: { \
-      GalShape_##TYPE *tmpGalShape; \
-      tmpGalShape = GalShapeInternalTo_##TYPE (galshape, Ngalshape); \
-	gfits_table_set_GalShape_##TYPE (ftable, tmpGalShape, Ngalshape, swapFromNative); \
-      free (tmpGalShape); \
+      GalPhot_##TYPE *tmpGalPhot; \
+      tmpGalPhot = GalPhotInternalTo_##TYPE (galphot, Ngalphot); \
+	gfits_table_set_GalPhot_##TYPE (ftable, tmpGalPhot, Ngalphot, swapFromNative); \
+      free (tmpGalPhot); \
       break; }
 
@@ -932,5 +932,5 @@
   switch (format) {
     case DVO_FORMAT_INTERNAL: {
-      gfits_table_set_GalShape (ftable, galshape, Ngalshape, swapFromNative);
+      gfits_table_set_GalPhot (ftable, galphot, Ngalphot, swapFromNative);
       break; }
 
@@ -950,5 +950,5 @@
 
     default:
-      fprintf (stderr, "table format unknown (galshape)\n");
+      fprintf (stderr, "table format unknown (galphot)\n");
       return (FALSE);
   }
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_DEV_2.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_DEV_2.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_DEV_2.c	(revision 38419)
@@ -118,5 +118,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Ngalshape     = in[i].Nextend;     
+    out[i].Ngalphot     = in[i].Nextend;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
@@ -152,5 +152,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Nextend       = in[i].Ngalshape;     
+    out[i].Nextend       = in[i].Ngalphot;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V1.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V1.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V1.c	(revision 38419)
@@ -138,5 +138,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Ngalshape     = in[i].Ngalshape;     
+    out[i].Ngalphot     = in[i].Ngalphot;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
@@ -173,5 +173,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Ngalshape     = in[i].Ngalshape;     
+    out[i].Ngalphot     = in[i].Ngalphot;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V2.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V2.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V2.c	(revision 38419)
@@ -143,5 +143,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Ngalshape     = in[i].Ngalshape;     
+    out[i].Ngalphot     = in[i].Ngalphot;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
@@ -182,5 +182,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Ngalshape     = in[i].Ngalshape;     
+    out[i].Ngalphot     = in[i].Ngalphot;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V3.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V3.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V3.c	(revision 38419)
@@ -143,5 +143,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Ngalshape     = in[i].Ngalshape;     
+    out[i].Ngalphot     = in[i].Ngalphot;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
@@ -184,5 +184,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Ngalshape     = in[i].Ngalshape;     
+    out[i].Ngalphot     = in[i].Ngalphot;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V4.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 38419)
@@ -164,5 +164,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Ngalshape     = in[i].Ngalshape;     
+    out[i].Ngalphot     = in[i].Ngalphot;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
@@ -208,5 +208,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Ngalshape     = in[i].Ngalshape;     
+    out[i].Ngalphot     = in[i].Ngalphot;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
@@ -690,5 +690,5 @@
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Ngalshape     = in[i].Ngalshape;     
+    out[i].Ngalphot     = in[i].Ngalphot;     
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V5.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V5.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/dvo_convert_PS1_V5.c	(revision 38419)
@@ -196,5 +196,5 @@
     out[i].Nlensobj      = in[i].Nlensobj;     
     out[i].Nstarpar      = in[i].Nstarpar;     
-    out[i].Ngalshape     = in[i].Ngalshape;     
+    out[i].Ngalphot     = in[i].Ngalphot;     
 
     out[i].measureOffset = in[i].measureOffset; 
@@ -203,5 +203,5 @@
     out[i].lensobjOffset = in[i].lensobjOffset;
     out[i].starparOffset = in[i].starparOffset;
-    out[i].galshapeOffset  = in[i].galshapeOffset;
+    out[i].galphotOffset  = in[i].galphotOffset;
 
     out[i].refColorBlue  = in[i].refColorBlue;
@@ -264,5 +264,5 @@
     out[i].Nlensobj       = in[i].Nlensobj;     
     out[i].Nstarpar       = in[i].Nstarpar;     
-    out[i].Ngalshape        = in[i].Ngalshape;     
+    out[i].Ngalphot        = in[i].Ngalphot;     
 			  
     out[i].measureOffset  = in[i].measureOffset; 
@@ -271,5 +271,5 @@
     out[i].lensobjOffset  = in[i].lensobjOffset;
     out[i].starparOffset  = in[i].starparOffset;
-    out[i].galshapeOffset   = in[i].galshapeOffset;
+    out[i].galphotOffset   = in[i].galphotOffset;
 			  
     out[i].refColorBlue   = in[i].refColorBlue;
@@ -979,13 +979,13 @@
 }
 
-GalShape *GalShape_PS1_V5_ToInternal (GalShape_PS1_V5 *in, off_t Nvalues) {
-
-  off_t i;
-  GalShape *out;
-
-  ALLOCATE_ZERO (out, GalShape, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    dvo_galshape_init (&out[i]);
+GalPhot *GalPhot_PS1_V5_ToInternal (GalPhot_PS1_V5 *in, off_t Nvalues) {
+
+  off_t i;
+  GalPhot *out;
+
+  ALLOCATE_ZERO (out, GalPhot, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_galphot_init (&out[i]);
 
     out[i].Xfit       	 = in[i].Xfit;
@@ -1012,10 +1012,10 @@
 }
 
-GalShape_PS1_V5 *GalShapeInternalTo_PS1_V5 (GalShape *in, off_t Nvalues) {
-
-  off_t i;
-  GalShape_PS1_V5 *out;
-
-  ALLOCATE_ZERO (out, GalShape_PS1_V5, Nvalues);
+GalPhot_PS1_V5 *GalPhotInternalTo_PS1_V5 (GalPhot *in, off_t Nvalues) {
+
+  off_t i;
+  GalPhot_PS1_V5 *out;
+
+  ALLOCATE_ZERO (out, GalPhot_PS1_V5, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -1298,5 +1298,5 @@
     out[i].Nlensing       = in[i].Nlensing;     
     out[i].Nlensobj       = in[i].Nlensobj;     
-    out[i].Ngalshape        = in[i].Ngalshape;     
+    out[i].Ngalphot        = in[i].Ngalphot;     
 			  
     out[i].measureOffset  = in[i].measureOffset; 
@@ -1305,5 +1305,5 @@
     out[i].lensobjOffset  = in[i].lensobjOffset;
     out[i].starparOffset  = in[i].starparOffset;
-    out[i].galshapeOffset   = in[i].galshapeOffset;
+    out[i].galphotOffset   = in[i].galphotOffset;
 			  
     out[i].refColorBlue   = in[i].refColorBlue;
@@ -1366,10 +1366,10 @@
     SWAP_BYTE (110); // NLENSING
     SWAP_BYTE (112); // NLENSOBJ
-    SWAP_BYTE (114); // NGALSHAPE
+    SWAP_BYTE (114); // NGALPHOT
     SWAP_WORD (116); // OFF_MEASURE
     SWAP_WORD (120); // OFF_MISSING
     SWAP_WORD (124); // OFF_LENSING
     SWAP_WORD (128); // OFF_LENSOBJ
-    SWAP_WORD (132); // OFF_GALSHAPE
+    SWAP_WORD (132); // OFF_GALPHOT
     SWAP_WORD (136); // OFF_PARAMS
     SWAP_WORD (140); // REF_COLOR_BLUE
Index: /branches/eam_branches/ohana.20150429/src/libdvo/src/flatcorr_io.c
===================================================================
--- /branches/eam_branches/ohana.20150429/src/libdvo/src/flatcorr_io.c	(revision 38418)
+++ /branches/eam_branches/ohana.20150429/src/libdvo/src/flatcorr_io.c	(revision 38419)
@@ -93,5 +93,5 @@
     for (j = 0; j < flatcorrTable->image[i].Nx; j++) {
       ALLOCATE (flatcorrTable->offset[i][j], float, flatcorrTable->image[i].Ny);
-      memset (flatcorrTable->offset[i][j], 0.0, flatcorrTable->image[i].Ny*sizeof(float));
+      memset (flatcorrTable->offset[i][j], 0, flatcorrTable->image[i].Ny*sizeof(float));
     }
   }
