Index: /branches/eam_branch_20071130/Ohana/src/addstar/src/SEDfit.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/addstar/src/SEDfit.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/addstar/src/SEDfit.c	(revision 15732)
@@ -210,6 +210,7 @@
     }
   }
-  outcat[0].Naverage = Nave;
-  outcat[0].Nmeasure = Nmeas;
+  outcat[0].Naverage  = Nave;
+  outcat[0].Nmeasure  = Nmeas;
+  outcat[0].Nsecf_mem = Nave*Nsec;
   
   free (sourceValue.mags);
Index: /branches/eam_branch_20071130/Ohana/src/addstar/src/UpdateDatabase_Image.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/addstar/src/UpdateDatabase_Image.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/addstar/src/UpdateDatabase_Image.c	(revision 15732)
@@ -13,5 +13,5 @@
 
   catalog.catflags = LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF;
-  if (options[0].update) catalog.catflags = LOAD_AVES | LOAD_MEAS_META | LOAD_MISS | LOAD_SECF;
+  if (options[0].update) catalog.catflags = LOAD_AVES | LOAD_MISS | LOAD_SECF;
   
   // XXX this is probably not needed anymore
@@ -49,5 +49,5 @@
     catalog.Nsecfilt  = GetPhotcodeNsecfilt ();
     catalog.catflags  = LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF;
-    if (options[0].update) catalog.catflags = LOAD_AVES | LOAD_MEAS_META | LOAD_MISS | LOAD_SECF;
+    if (options[0].update) catalog.catflags = LOAD_AVES | LOAD_MISS | LOAD_SECF;
 
     // an error exit status here is a significant error
@@ -57,7 +57,7 @@
     }
 
-    // Nave_disk == 0 implies an empty catalog file
+    // Naves_disk == 0 implies an empty catalog file
     // for only_match, skip empty catalogs 
-    if ((catalog.Nave_disk == 0) && options[0].only_match) {
+    if ((catalog.Naves_disk == 0) && options[0].only_match) {
       dvo_catalog_unlock (&catalog);
       dvo_catalog_free (&catalog);
@@ -73,5 +73,9 @@
     if (!options[0].only_images) {
       SetProtect (TRUE);
-      dvo_catalog_save (&catalog, VERBOSE);
+      if (options[0].update) {
+	dvo_catalog_update (&catalog, VERBOSE);
+      } else {
+	dvo_catalog_save (&catalog, VERBOSE);
+      }
       SetProtect (FALSE);
     }
Index: /branches/eam_branch_20071130/Ohana/src/addstar/src/UpdateDatabase_Refcat.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/addstar/src/UpdateDatabase_Refcat.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/addstar/src/UpdateDatabase_Refcat.c	(revision 15732)
@@ -37,5 +37,5 @@
     catalog.catmode   = dvo_catalog_catmode (CATMODE);      // set the default catmode from config data
     catalog.catflags  = LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF;
-    if (options[0].update) catalog.catflags = LOAD_AVES | LOAD_MEAS_META | LOAD_MISS | LOAD_SECF;
+    if (options[0].update) catalog.catflags = LOAD_AVES | LOAD_MISS | LOAD_SECF;
   
     // an error exit status here is a significant error
@@ -45,7 +45,7 @@
     }
 
-    // Nave_disk == 0 implies an empty catalog file
+    // Naves_disk == 0 implies an empty catalog file
     // for only_match, skip empty catalogs
-    if ((catalog.Nave_disk == 0) && options[0].only_match) {
+    if ((catalog.Naves_disk == 0) && options[0].only_match) {
       dvo_catalog_unlock (&catalog);
       dvo_catalog_free (&catalog);
@@ -62,5 +62,9 @@
     if (!options[0].only_images) {
       SetProtect (TRUE);
-      dvo_catalog_save (&catalog, VERBOSE);
+      if (options[0].update) {
+	dvo_catalog_update (&catalog, VERBOSE);
+      } else {
+	dvo_catalog_save (&catalog, VERBOSE);
+      }
       SetProtect (FALSE);
     }
Index: /branches/eam_branch_20071130/Ohana/src/addstar/src/UpdateDatabase_Reflist.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/addstar/src/UpdateDatabase_Reflist.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/addstar/src/UpdateDatabase_Reflist.c	(revision 15732)
@@ -37,5 +37,5 @@
     catalog.catmode   = dvo_catalog_catmode (CATMODE);      // set the default catmode from config data
     catalog.catflags  = LOAD_AVES | LOAD_MEAS | LOAD_MISS | LOAD_SECF;
-    if (options[0].update) catalog.catflags = LOAD_AVES | LOAD_MEAS_META | LOAD_MISS | LOAD_SECF;
+    if (options[0].update) catalog.catflags = LOAD_AVES | LOAD_MISS | LOAD_SECF;
 
     // an error exit status here is a significant error
@@ -46,5 +46,5 @@
 
     /* for only_match, skip empty catalogs XXX EAM : this leaves behind empty files */
-    if ((catalog.Nave_disk == 0) && options[0].only_match) {
+    if ((catalog.Naves_disk == 0) && options[0].only_match) {
       dvo_catalog_unlock (&catalog);
       dvo_catalog_free (&catalog);
@@ -58,5 +58,9 @@
     if (!options[0].only_images) {
       SetProtect (TRUE);
-      dvo_catalog_save (&catalog, VERBOSE);
+      if (options[0].update) {
+	dvo_catalog_update (&catalog, VERBOSE);
+      } else {
+	dvo_catalog_save (&catalog, VERBOSE);
+      }
       SetProtect (FALSE);
     }
Index: /branches/eam_branch_20071130/Ohana/src/addstar/src/addstar.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/addstar/src/addstar.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/addstar/src/addstar.c	(revision 15732)
@@ -105,7 +105,7 @@
     }
 
-    // Nave_disk == 0 implies an empty catalog file
+    // Naves_disk == 0 implies an empty catalog file
     // for only_match, skip empty catalogs
-    if ((catalog.Nave_disk == 0) && options.only_match) {
+    if ((catalog.Naves_disk == 0) && options.only_match) {
       dvo_catalog_unlock (&catalog);
       dvo_catalog_free (&catalog);
Index: /branches/eam_branch_20071130/Ohana/src/addstar/src/find_matches.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/addstar/src/find_matches.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/addstar/src/find_matches.c	(revision 15732)
@@ -361,4 +361,5 @@
   catalog[0].Naverage = Nave;
   catalog[0].Nmeasure = Nmeas;
+  catalog[0].Nsecf_mem = Nave*Nsecfilt;
   if (VERBOSE) fprintf (stderr, "Nstars, Nave, Nmeas: %d %d %d, (%d matches)\n", Nstars, Nave, Nmeas, Nmatch);
 
Index: /branches/eam_branch_20071130/Ohana/src/addstar/src/find_matches_closest.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/addstar/src/find_matches_closest.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/addstar/src/find_matches_closest.c	(revision 15732)
@@ -362,4 +362,5 @@
   catalog[0].Naverage = Nave;
   catalog[0].Nmeasure = Nmeas;
+  catalog[0].Nsecf_mem = Nave*Nsecfilt;
   if (VERBOSE) fprintf (stderr, "Nstars, Nave, Nmeas: %d %d %d, (%d matches)\n", Nstars, Nave, Nmeas, Nmatch);
 
Index: /branches/eam_branch_20071130/Ohana/src/addstar/src/find_matches_refstars.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/addstar/src/find_matches_refstars.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/addstar/src/find_matches_refstars.c	(revision 15732)
@@ -372,4 +372,5 @@
   catalog[0].Nmeasure = Nmeas;
   catalog[0].Nmissing = Nmiss;
+  catalog[0].Nsecf_mem = Nave*Nsecfilt;
   if (VERBOSE) fprintf (stderr, "Nstars, Nave, Nmeas, Nmiss: %d %d %d %d, (%d matches)\n", Nstars, Nave, Nmeas, Nmiss, Nmatch);
   return (Nmatch);
Index: /branches/eam_branch_20071130/Ohana/src/addstar/src/load2mass_catalog.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/addstar/src/load2mass_catalog.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/addstar/src/load2mass_catalog.c	(revision 15732)
@@ -79,4 +79,5 @@
   catalog[0].Naverage = Nave;
   catalog[0].Nmeasure = Nmeas;
+  catalog[0].Nsecf_mem = Nave*Nsec;
   return (TRUE);
 }
Index: /branches/eam_branch_20071130/Ohana/src/addstar/src/sedstar.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/addstar/src/sedstar.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/addstar/src/sedstar.c	(revision 15732)
@@ -34,6 +34,6 @@
     }
 
-    // Nave_disk == 0 implies an empty catalog file
-    if ((incatalog.Nave_disk == 0) && options.only_match) {
+    // Naves_disk == 0 implies an empty catalog file
+    if ((incatalog.Naves_disk == 0) && options.only_match) {
       if (VERBOSE) fprintf (stderr, "skipping empty region\n");
       dvo_catalog_unlock (&incatalog);
Index: /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_imagefile.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_imagefile.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_imagefile.c	(revision 15732)
@@ -33,5 +33,5 @@
       exit (2);
     }
-    if (!catalog.Nave_disk) {
+    if (!catalog.Naves_disk) {
       dvo_catalog_unlock (&catalog);
       dvo_catalog_free (&catalog);
Index: /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_imagename.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_imagename.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_imagename.c	(revision 15732)
@@ -44,5 +44,5 @@
 	exit (2);
       }
-      if (!catalog.Nave_disk) {
+      if (!catalog.Naves_disk) {
 	dvo_catalog_unlock (&catalog);
 	dvo_catalog_free (&catalog);
Index: /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_orphans.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_orphans.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_orphans.c	(revision 15732)
@@ -252,4 +252,6 @@
   catalog.Nmeasure = Nmeas;
   catalog.Nmissing = Nmiss;
+  catalog.Nsecf_mem = Nave*Nsecfilt;
+
   if (VERBOSE) fprintf (stderr, "  ending with Nave, Nmeas, Nmiss: %d %d %d\n", Nave, Nmeas, Nmiss);
 
Index: /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_times.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_times.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/delstar/src/delete_times.c	(revision 15732)
@@ -64,5 +64,5 @@
       exit (2);
     }
-    if (!catalog.Nave_disk) {
+    if (!catalog.Naves_disk) {
       dvo_catalog_unlock (&catalog);
       dvo_catalog_free (&catalog);
Index: /branches/eam_branch_20071130/Ohana/src/delstar/src/find_matches.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/delstar/src/find_matches.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/delstar/src/find_matches.c	(revision 15732)
@@ -234,4 +234,6 @@
   catalog[0].Nmeasure = Nmeas;
   catalog[0].Nmissing = Nmiss;
+  catalog[0].Nsecf_mem = Nave*Nsecfilt;
+
   if (VERBOSE) fprintf (stderr, "  ending with Nave, Nmeas, Nmiss: %d %d %d\n", Nave, Nmeas, Nmiss);
 
Index: /branches/eam_branch_20071130/Ohana/src/dvosplit/src/split_averages.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/dvosplit/src/split_averages.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/dvosplit/src/split_averages.c	(revision 15732)
@@ -9,6 +9,6 @@
   AveLinks *avelinks;
 
-  ALLOCATE (outref, int, incatalog[0].Nave_disk);
-  ALLOCATE (outcat, int, incatalog[0].Nave_disk);
+  ALLOCATE (outref, int, incatalog[0].Naves_disk);
+  ALLOCATE (outcat, int, incatalog[0].Naves_disk);
 
   Nsecfilt = GetPhotcodeNsecfilt ();
@@ -23,5 +23,5 @@
   // split out the average & secfilt entries:
   incatalog[0].catflags = LOAD_AVES | LOAD_SECF;
-  Nblocks = incatalog[0].Nave_disk / NROWS;
+  Nblocks = incatalog[0].Naves_disk / NROWS;
   for (block = 0; block < Nblocks; block++) {
 
Index: /branches/eam_branch_20071130/Ohana/src/gastro/src/getptolemy.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/gastro/src/getptolemy.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/gastro/src/getptolemy.c	(revision 15732)
@@ -36,7 +36,7 @@
     dvo_catalog_unlock (&catalog);
 
-    // Nave_disk == 0 implies an empty catalog file
+    // Naves_disk == 0 implies an empty catalog file
     // for only_match, skip empty catalogs
-    if (!catalog.Nave_disk) {
+    if (!catalog.Naves_disk) {
       dvo_catalog_free (&catalog);
       continue;
Index: /branches/eam_branch_20071130/Ohana/src/gastro2/src/getptolemy.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/gastro2/src/getptolemy.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/gastro2/src/getptolemy.c	(revision 15732)
@@ -38,7 +38,7 @@
     dvo_catalog_unlock (&catalog);
 
-    // Nave_disk == 0 implies an empty catalog file
+    // Naves_disk == 0 implies an empty catalog file
     // for only_match, skip empty catalogs
-    if (!catalog.Nave_disk) {
+    if (!catalog.Naves_disk) {
       dvo_catalog_free (&catalog);
       continue;
Index: /branches/eam_branch_20071130/Ohana/src/getstar/src/getstar.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/getstar/src/getstar.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/getstar/src/getstar.c	(revision 15732)
@@ -47,5 +47,5 @@
 	  exit (2);
 	}
-	if (!catalog.Nave_disk) {
+	if (!catalog.Naves_disk) {
 	  dvo_catalog_unlock (&catalog);
 	  dvo_catalog_free (&catalog);
@@ -78,5 +78,5 @@
 	}
 	/* skip empty catalogs */
-	if (!catalog.Nave_disk) continue;
+	if (!catalog.Naves_disk) continue;
 	stars = select_by_image (&catalog, &image, 0, 0, stars, &Nstars);
       }
Index: /branches/eam_branch_20071130/Ohana/src/getstar/src/select_by_region.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/getstar/src/select_by_region.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/getstar/src/select_by_region.c	(revision 15732)
@@ -91,4 +91,6 @@
   output[0].Naverage = Nave;
   output[0].Nmeasure = Nmeas;
+  output[0].Nsecf_mem = Nave*Nsecfilt;
+
   fprintf (stderr, "output catalog has %d stars (%d measures, %d secfilt)\n",
 	   output[0].Naverage, output[0].Nmeasure, output[0].Nsecfilt);
Index: /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog.c	(revision 15732)
@@ -357,4 +357,5 @@
     catalog[0].secfilt = outsec;
     catalog[0].Nsecfilt = Nsecfilt;
+    catalog[0].Nsecf_mem = Nsecfilt * catalog[0].Naverage;
   }
   return (TRUE);
@@ -410,5 +411,6 @@
     case DVO_MODE_MEF:
       if (VERBOSE) fprintf (stderr, "reading catalog (mode DVO_MODE_MEF)\n");
-      dvo_catalog_load_segment_mef (catalog, VERBOSE, start, Nrows);
+      fprintf (stderr, "cannot do this in mef mode\n");
+      // dvo_catalog_load_segment_mef (catalog, VERBOSE, start, Nrows);
       break;
     case DVO_MODE_SPLIT:
Index: /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_mef.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_mef.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_mef.c	(revision 15732)
@@ -59,5 +59,5 @@
     /* old versions of DVO stored one of the average magnitudes in Average. we save this if needed */
     catalog[0].average = FtableToAverage (&ftable, &Naverage, &catalog[0].catformat, &primary);
-    if (Naverage != catalog[0].Naverage) {
+    if (Naverage != catalog[0].Naves_disk) {
       fprintf (stderr, "Warning: mismatch between Naverage in PHU and Table headers (%d vs %d)\n", Naverage, catalog[0].Naves_disk);
     }
@@ -86,6 +86,6 @@
     }
     catalog[0].measure = FtableToMeasure (&ftable, &catalog[0].Nmeasure, &catalog[0].catformat);
-    if (Nmeasure != catalog[0].Nmeasure) {
-      fprintf (stderr, "Warning: mismatch between Nmeasure in PHU and Table headers (%d vs %d)\n", Nmeasure, catalog[0].Nmeasure);
+    if (Nmeasure != catalog[0].Nmeas_disk) {
+      fprintf (stderr, "Warning: mismatch between Nmeasure in PHU and Table headers (%d vs %d)\n", Nmeasure, catalog[0].Nmeas_disk);
     }
     catalog[0].Nmeasure = catalog[0].Nmeas_disk;
@@ -112,6 +112,6 @@
     /* no conversions currently defined */
     catalog[0].missing = gfits_table_get_Missing (&ftable, &catalog[0].Nmissing, NULL);
-    if (Nmissing != catalog[0].Nmissing) {
-      fprintf (stderr, "Warning: mismatch between Nmissing in PHU and Table headers (%d vs %d)\n", Nmissing, catalog[0].Nmissing);
+    if (Nmissing != catalog[0].Nmiss_disk) {
+      fprintf (stderr, "Warning: mismatch between Nmissing in PHU and Table headers (%d vs %d)\n", Nmissing, catalog[0].Nmiss_disk);
     }
     catalog[0].Nmissing = catalog[0].Nmiss_disk;
Index: /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_raw.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_raw.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_raw.c	(revision 15732)
@@ -171,4 +171,5 @@
       }		
       catalog[0].Nsecfilt = Nsecfilt;
+      catalog[0].Nsecf_mem = Ntotal;
       free (primary);
     } 
Index: /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_split.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_split.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/libdvo/src/dvo_catalog_split.c	(revision 15732)
@@ -40,4 +40,31 @@
   *mySecfilt = secfilt;
   *myNsecfilt = Nsecfilt;
+}
+
+int dvo_catalog_primary_to_secfilt (Catalog *catalog, SecFilt *primary, int Naves) {
+
+  int Ntmpfilt, Nsecfilt, Ntotal, i, j;
+  SecFilt *tmpfilt;
+
+  tmpfilt  = catalog[0].secfilt;
+  Ntmpfilt = catalog[0].Nsecfilt;
+
+  // we do NOT modify Nsecf_disk; this operation only modifies in in-memory values
+
+  catalog[0].Nsecfilt ++;
+  Nsecfilt = catalog[0].Nsecfilt;
+  Ntotal = Nsecfilt * Naves;
+
+  catalog[0].Nsecf_mem = Ntotal;
+
+  ALLOCATE (catalog[0].secfilt, SecFilt, Ntotal);
+  for (i = 0; i < Naves; i++) {
+    catalog[0].secfilt[i*Nsecfilt + 0] = primary[i];
+    for (j = 0; j < Ntmpfilt; j++) {
+      catalog[0].secfilt[i*Nsecfilt + j + 1] = tmpfilt[i*Ntmpfilt + j];
+    }
+  }		
+  free (primary);
+  return (TRUE);
 }
 
@@ -279,33 +306,17 @@
       fprintf (stderr, "Warning: mismatch between Nsecfilt items in PHU and Table headers (%d vs %d)\n", Nitems, catalog[0].Nsecf_disk);
     }
+    catalog[0].Nsecf_mem = catalog[0].Nsecf_disk;
+    catalog[0].Nsecf_off = 0;
 
     /* if primary is defined, we were supplied with one additional average magnitude from Average
        we need to interleave these magnitudes with the secfilt entries just loaded */
     if (primary != NULL) {
-      int Ntmpfilt, Ntotal, i, j;
-      SecFilt *tmpfilt;
-      tmpfilt  = catalog[0].secfilt;
-      Ntmpfilt = catalog[0].Nsecfilt;
-
-      catalog[0].Nsecfilt ++;
-      catalog[0].Nsecf_disk = catalog[0].Nsecfilt * catalog[0].Naves_disk;
-      Nsecfilt = catalog[0].Nsecfilt;
-
-      ALLOCATE (catalog[0].secfilt, SecFilt, catalog[0].Nsecf_disk);
-      for (i = 0; i < catalog[0].Naves_disk; i++) {
-	catalog[0].secfilt[i*Nsecfilt + 0] = primary[i];
-	for (j = 0; j < Ntmpfilt; j++) {
-	  catalog[0].secfilt[i*Nsecfilt + j + 1] = tmpfilt[i*Ntmpfilt + j];
-	}
-      }		
-      free (primary);
+      // this modifies catalog.Nsecf_mem,Nsecfilt
+      dvo_catalog_primary_to_secfilt (catalog, primary, catalog[0].Naves_disk);
     } 
-    catalog[0].Nsecf_mem = catalog[0].Nsecf_disk;
-    catalog[0].Nsecf_off = 0;
   } else {
     if (primary != NULL) {
       free (primary);
       catalog[0].Nsecfilt ++;
-      catalog[0].Nsecf_disk =  catalog[0].Nsecfilt * catalog[0].Naves_disk;
     }
     gfits_create_header (&catalog[0].secfilt_catalog[0].header);
@@ -326,10 +337,10 @@
   Header header;
   Matrix matrix;
-  VTable vtable;
+  FTable ftable;
   SecFilt *primary;
 
-  /* vtable header storage for below */
-  vtable.header = &header;
-  vtable.buffer = NULL;
+  /* ftable header storage for below */
+  ftable.header = &header;
+  ftable.buffer = NULL;
   header.buffer = NULL;
 
@@ -351,5 +362,5 @@
     }
     /* read Average table data : format is irrelevant here */
-    if (!gfits_fread_vtable_range (catalog[0].f, &vtable, start, Nrows)) {
+    if (!gfits_fread_ftable_range (catalog[0].f, &ftable, start, Nrows)) {
       if (VERBOSE) fprintf (stderr, "can't read table average data");
       return (FALSE);
@@ -359,10 +370,8 @@
      * one of the average magnitudes in Average.  We save this in case it is needed below.  NOTE:
      * primary is only used if we read in the secfilt table, otherwise it should be freed */
-
-    // XXX Vtable version is needed (merge Ftable and Vtable versions?)
-    catalog[0].average = VtableToAverage (&vtable, &Naverage, &catalog[0].catformat, &primary);
-
-    // XXX validate the sizes?  start + Nrows < Naves_disk (no other constraints)
+    catalog[0].average = FtableToAverage (&ftable, &Naverage, &catalog[0].catformat, &primary);
     if (Naverage != Nrows) {
+      // XXX this is only an error if Nrows or more are available...
+      // XXX allow Nrows to go beyond end of the data?
       fprintf (stderr, "Warning: mismatch between Naverage in PHU and Table headers (%d vs %d)\n", Naverage, Nrows);
     }
@@ -387,5 +396,5 @@
     }
     /* read Measure table data : format is irrelevant here */
-    if (!gfits_fread_vtable_range (subcat[0].f, &vtable, start, Nrows)) {
+    if (!gfits_fread_ftable_range (subcat[0].f, &ftable, start, Nrows)) {
       if (VERBOSE) fprintf (stderr, "can't read table measure data");
       return (FALSE);
@@ -393,39 +402,18 @@
 
     Nexpect = Nrows * Nsecfilt;
-    catalog[0].secfilt = VtableToSecFilt (&vtable, &Nitems, &catalog[0].catformat);
+    catalog[0].secfilt = FtableToSecFilt (&ftable, &Nitems, &catalog[0].catformat);
     if (Nitems != Nexpect) {
-      fprintf (stderr, "Warning: mismatch between Nsecfilt items in PHU and Table headers (%d vs %d)\n", Nitems, catalog[0].Nsecf_disk);
-    }
+      fprintf (stderr, "Warning: mismatch between Nsecfilt items in PHU and Table headers (%d vs %d)\n", Nitems, Nexpect);
+    }
+    catalog[0].Nsecf_mem = Nrows * Nsecfilt;
+    catalog[0].Nsecf_off = start * Nsecfilt;
 
     /* if primary is defined, we were supplied with one additional average magnitude from Average
        we need to interleave these magnitudes with the secfilt entries just loaded */
     if (primary != NULL) {
-      int Ntmpfilt, i, j;
-      SecFilt *tmpfilt;
-      tmpfilt  = catalog[0].secfilt;
-      Ntmpfilt = catalog[0].Nsecfilt;
-
-      catalog[0].Nsecfilt ++;
-      catalog[0].Nsecf_disk = catalog[0].Nsecfilt * catalog[0].Naves_disk;
-      Nsecfilt = catalog[0].Nsecfilt;
-
-      // the loaded average rows correspond to the loaded secfilt rows
-      // supplement with the loaded primary secfilt data
-      Nexpect = Nrows * Nsecfilt;
-      ALLOCATE (catalog[0].secfilt, SecFilt, Nexpect);
-      for (i = 0; i < Nrows; i++) {
-	catalog[0].secfilt[i*Nsecfilt + 0] = primary[i];
-	for (j = 0; j < Ntmpfilt; j++) {
-	  catalog[0].secfilt[i*Nsecfilt + j + 1] = tmpfilt[i*Ntmpfilt + j];
-	}
-      }		
-      free (primary);
+      dvo_catalog_primary_to_secfilt (catalog, primary, Nrows);
     } 
     gfits_free_header (&header);
     gfits_free_matrix (&matrix);
-    catalog[0].Nsecf_mem = Nexpect;
-    catalog[0].Nsecf_off = start * Nsecfilt;
-
-    // CAREFUL: note that Nsecf_disk and Nsecf_off are set to the values if there were no primary data 
   }
 
@@ -448,5 +436,5 @@
     }
     /* read Measure table data : format is irrelevant here */
-    if (!gfits_fread_vtable_range (subcat[0].f, &vtable, start, Nrows)) {
+    if (!gfits_fread_ftable_range (subcat[0].f, &ftable, start, Nrows)) {
       if (VERBOSE) fprintf (stderr, "can't read table measure data");
       return (FALSE);
@@ -454,5 +442,5 @@
 
     /* convert data format to internal : returns number of row read in Nmeasure */
-    catalog[0].measure = VtableToMeasure (&vtable, &Nmeasure, &catalog[0].catformat);
+    catalog[0].measure = FtableToMeasure (&ftable, &Nmeasure, &catalog[0].catformat);
     if (Nmeasure != Nrows) {
       fprintf (stderr, "Warning: mismatch between Nmeasure in PHU and Table headers (%d vs %d)\n", Nmeasure, Nrows);
@@ -482,11 +470,11 @@
     }
     /* read Missing table data : format is irrelevant here */
-    if (!gfits_fread_vtable_range (subcat[0].f, &vtable, start, Nrows)) {
+    if (!gfits_fread_ftable_range (subcat[0].f, &ftable, start, Nrows)) {
       if (VERBOSE) fprintf (stderr, "can't read table missing data");
       return (FALSE);
     }
 
-    /* convert data format to internal : returns number of row read in Nmissing */
-    catalog[0].missing = VtableToMissing (&vtable, &Nmissing, &catalog[0].catformat);
+    /* no conversions currently defined : this just does the byte swap */
+    catalog[0].missing = gfits_table_get_Missing (&ftable, &Nmissing, NULL);
     if (Nmissing != Nrows) {
       fprintf (stderr, "Warning: mismatch between Nmissing in PHU and Table headers (%d vs %d)\n", Nmissing, Nrows);
@@ -568,5 +556,5 @@
     }
 
-    if (!dvo_catalog_save_subset (catalog, ftable, start, Nrows, catalog[0].Naves_disk, Naves_disk_new)) {
+    if (!dvo_catalog_save_subcat (catalog, &ftable, start, Nrows, catalog[0].Naves_disk, Naves_disk_new)) {
       fprintf (stderr, "failure writing Average table\n");
       goto failure;
@@ -606,5 +594,5 @@
 
     // write out Measure table
-    if (!dvo_catalog_save_subset (catalog[0].measure_catalog, ftable, start, Nrows, catalog[0].Nmeas_disk, Nmeas_disk_new)) {
+    if (!dvo_catalog_save_subcat (catalog[0].measure_catalog, &ftable, start, Nrows, catalog[0].Nmeas_disk, Nmeas_disk_new)) {
       fprintf (stderr, "trouble writing Measure table\n");
       goto failure;
@@ -629,5 +617,5 @@
 
     // write out Missing table (must write out entire table)
-    if (!dvo_catalog_save_subset (catalog[0].missing_catalog, ftable, 0, catalog[0].Nmissing, catalog[0].Nmissing, catalog[0].Nmissing)) {
+    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;
@@ -649,4 +637,5 @@
     assert (first < Nitems);
     assert (catalog[0].Nsecf_disk >= catalog[0].Nsecf_off);
+    // XXX check these for consistency...
 
     // convert to external table format
@@ -654,5 +643,5 @@
 
     // write out SecFilt table
-    if (!dvo_catalog_save_subset (catalog[0].secfilt_catalog, ftable, start, Nrows, catalog[0].Nsecf_disk, Nsecf_disk_new)) {
+    if (!dvo_catalog_save_subcat (catalog[0].secfilt_catalog, &ftable, start, Nrows, catalog[0].Nsecf_disk, Nsecf_disk_new)) {
       fprintf (stderr, "failure writing SecFilt table\n");
       goto failure;
@@ -688,5 +677,4 @@
   Header header;
   FTable ftable;
-  VTable vtable;
   Catalog *catfile;
   SecFilt *primary, *secfilt;
@@ -750,5 +738,5 @@
     }
 
-    if (!dvo_catalog_save_subset (catalog, ftable, start, Nrows, catalog[0].Naves_disk, Naves_disk_new)) {
+    if (!dvo_catalog_save_subcat (catalog, &ftable, start, Nrows, catalog[0].Naves_disk, Naves_disk_new)) {
       fprintf (stderr, "failure writing Average table\n");
       goto failure;
@@ -788,5 +776,5 @@
 
     // write out Measure table
-    if (!dvo_catalog_save_subset (catalog[0].measure_catalog, ftable, start, Nrows, catalog[0].Nmeas_disk, Nmeas_disk_new)) {
+    if (!dvo_catalog_save_subcat (catalog[0].measure_catalog, &ftable, start, Nrows, catalog[0].Nmeas_disk, Nmeas_disk_new)) {
       fprintf (stderr, "trouble writing Measure table\n");
       goto failure;
@@ -815,5 +803,5 @@
 
     // write out Missing table (must write out entire table)
-    if (!dvo_catalog_save_subset (catalog[0].missing_catalog, ftable, 0, catalog[0].Nmissing, catalog[0].Nmissing, catalog[0].Nmissing)) {
+    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;
@@ -840,5 +828,5 @@
 
     // write out SecFilt table
-    if (!dvo_catalog_save_subset (catalog[0].secfilt_catalog, ftable, start, Nrows, catalog[0].Nsecf_disk, Nsecf_disk_new)) {
+    if (!dvo_catalog_save_subcat (catalog[0].secfilt_catalog, &ftable, start, Nrows, catalog[0].Nsecf_disk, Nsecf_disk_new)) {
       fprintf (stderr, "failure writing SecFilt table\n");
       goto failure;
@@ -875,5 +863,5 @@
 /* XXX EAM : update is not efficient.  MeasureToFtable should only 
    convert the new rows (Nmeas_disk to Nmeasure). the resulting
-   table represents the end rows of the vtable.  we need to define
+   table represents the end rows of the ftable.  we need to define
    the vtable based on the ftable, but with Ny = Nmeasure */  
   
Index: /branches/eam_branch_20071130/Ohana/src/libfits/include/gfitsio.h
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/libfits/include/gfitsio.h	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/libfits/include/gfitsio.h	(revision 15732)
@@ -172,4 +172,5 @@
 int   	gfits_fread_ftable             PROTO((FILE *f, FTable *ftable, char *extname)); 
 int   	gfits_fread_ftable_data        PROTO((FILE *f, FTable *ftable));
+int   	gfits_fread_ftable_range       PROTO((FILE *f, FTable *ftable, int start, int Nrows));
 int   	gfits_fread_vtable             PROTO((FILE *f, VTable *vtable, char *extname, int Nrow, int *row));
 int   	gfits_fread_vtable_range       PROTO((FILE *f, VTable *vtable, int start, int Nrows));
Index: /branches/eam_branch_20071130/Ohana/src/libfits/table/F_read_T.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/libfits/table/F_read_T.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/libfits/table/F_read_T.c	(revision 15732)
@@ -63,4 +63,36 @@
   }
   table[0].size = Nbytes;
+  return (TRUE);
+}	
+
+/*********************** fits read ftable data ***********************************/
+int gfits_fread_ftable_range (FILE *f, FTable *table, int start, int Nrows) {
+
+  int Nbytes, Nread, Nskip, Nx, Ny;
+  char *buffer;
+
+  /* find disk table size */
+  Nx = table[0].header[0].Naxis[0];
+  Ny = table[0].header[0].Naxis[1];
+
+  if (start < 0) return (FALSE);
+  if (start + Nrows >= Ny) return (FALSE);
+  
+  Nskip = start * Nx;
+  Nbytes = Nrows * Nx;
+  ALLOCATE (table[0].buffer, char, MAX (Nbytes, 1));
+
+  fseek (f, Nskip, SEEK_CUR);
+  Nread = fread (buffer, sizeof (char), Nbytes, f);
+  if (Nread != Nbytes) {
+    free (buffer);
+    return (FALSE);
+  }
+
+  /* modify structure and header to match actual read rows Ny */
+  table[0].header[0].Naxis[1] = Nrows;
+  gfits_modify (table[0].header, "NAXIS2",  "%d", 1, Nrows);
+  table[0].size = gfits_data_size (table[0].header);
+
   return (TRUE);
 }	
Index: /branches/eam_branch_20071130/Ohana/src/markrock/src/markrock.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/markrock/src/markrock.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/markrock/src/markrock.c	(revision 15732)
@@ -45,5 +45,5 @@
     exit (2);
   }
-  if (catalog.Nave_disk) {
+  if (catalog.Naves_disk) {
     dvo_catalog_unlock (&catalog);
     dvo_catalog_free (&catalog);
Index: /branches/eam_branch_20071130/Ohana/src/markstar/src/markstar.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/markstar/src/markstar.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/markstar/src/markstar.c	(revision 15732)
@@ -48,5 +48,5 @@
     exit (2);
   }
-  if (!catalog.Nave_disk) {
+  if (!catalog.Naves_disk) {
     dvo_catalog_unlock (&catalog);
     dvo_catalog_free (&catalog);
Index: /branches/eam_branch_20071130/Ohana/src/mosastro/src/getptolemy.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/mosastro/src/getptolemy.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/mosastro/src/getptolemy.c	(revision 15732)
@@ -36,7 +36,7 @@
     dvo_catalog_unlock (&catalog);
 
-    // Nave_disk == 0 implies an empty catalog file
+    // Naves_disk == 0 implies an empty catalog file
     // for only_match, skip empty catalogs
-    if (!catalog.Nave_disk) {
+    if (!catalog.Naves_disk) {
       dvo_catalog_free (&catalog);
       continue;
Index: /branches/eam_branch_20071130/Ohana/src/photdbc/src/join_stars.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/photdbc/src/join_stars.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/photdbc/src/join_stars.c	(revision 15732)
@@ -172,4 +172,5 @@
   
   catalog[0].Naverage = Naves;
+  catalog[0].Nsecf_mem = Naves*catalog[0].Nsecfilt;
 }
 
@@ -181,4 +182,6 @@
    generates a new SecFilt table with empty values 
    does NOT update magnitudes 
+   output measure table is the same size as the input measure table
+   (measures are just moved around).  thus, catalog[0].Nmeasure does not change.
 */   
    
Index: /branches/eam_branch_20071130/Ohana/src/photdbc/src/make_subcatalog.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/photdbc/src/make_subcatalog.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/photdbc/src/make_subcatalog.c	(revision 15732)
@@ -10,4 +10,5 @@
 
   Nsecfilt = GetPhotcodeNsecfilt ();
+  assert (catalog[0].Nsecfilt == Nsecfilt);
 
   /* we are moving only the subset of measurements from catalog[0] to subcatalog[0] */
@@ -96,5 +97,6 @@
   subcatalog[0].Naverage = Naverage;
   subcatalog[0].Nmeasure = Nmeasure;
-  subcatalog[0].Nsecfilt = catalog[0].Nsecfilt;
+  subcatalog[0].Nsecfilt = Nsecfilt;
+  subcatalog[0].Nsecf_mem = Naverage * Nsecfilt;
 
   // XXX for now, don't copy the missing entries (these should be re-computed)
Index: /branches/eam_branch_20071130/Ohana/src/photdbc/src/photdbc.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/photdbc/src/photdbc.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/photdbc/src/photdbc.c	(revision 15732)
@@ -34,5 +34,5 @@
     }
     // skip empty input catalogs
-    if (!incatalog.Nave_disk) {
+    if (!incatalog.Naves_disk) {
       dvo_catalog_unlock (&incatalog);
       dvo_catalog_free (&incatalog);
Index: /branches/eam_branch_20071130/Ohana/src/relastro/src/bcatalog.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/relastro/src/bcatalog.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/relastro/src/bcatalog.c	(revision 15732)
@@ -6,4 +6,9 @@
   int NAVERAGE, NMEASURE, Naverage, Nmeasure, Nm;
   float mag;
+
+  // XXX PhotNsec as a global is a bad idea; either get it from catalog
+  // or get it from:
+  // Nsecfilt = GetPhotcodeNsecfilt ();
+  // assert (catalog[0].Nsecfilt == Nsecfilt);
 
   /* we are moving only the subset of measurements from catalog[0] to subcatalog[0] */
@@ -104,4 +109,6 @@
   subcatalog[0].Nmeasure = Nmeasure;
   subcatalog[0].Nsecfilt = catalog[0].Nsecfilt;
+  subcatalog[0].Nsecf_mem = Naverage * PhotNsec;
+  assert (PhotNsec == catalog[0].Nsecfilt);
 
   if (VERBOSE) {
Index: /branches/eam_branch_20071130/Ohana/src/relastro/src/load_catalogs.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/relastro/src/load_catalogs.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/relastro/src/load_catalogs.c	(revision 15732)
@@ -26,5 +26,5 @@
       exit (1);
     }
-    if (VERBOSE && !pcatalog[0].Nave_disk) fprintf (stderr, "no data in %s, skipping\n", pcatalog[0].filename);
+    if (VERBOSE && !pcatalog[0].Naves_disk) fprintf (stderr, "no data in %s, skipping\n", pcatalog[0].filename);
 
     // select only the brighter stars
Index: /branches/eam_branch_20071130/Ohana/src/relastro/src/reload_catalogs.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/relastro/src/reload_catalogs.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/relastro/src/reload_catalogs.c	(revision 15732)
@@ -29,5 +29,5 @@
       exit (1);
     }
-    if (VERBOSE && (catalog.Nave_disk == 0)) {
+    if (VERBOSE && (catalog.Naves_disk == 0)) {
 	fprintf (stderr, "no data in %s, skipping\n", catalog.filename);
 	dvo_catalog_unlock (&catalog);
Index: /branches/eam_branch_20071130/Ohana/src/relphot/src/bcatalog.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/relphot/src/bcatalog.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/relphot/src/bcatalog.c	(revision 15732)
@@ -6,4 +6,9 @@
   int NAVERAGE, NMEASURE, Naverage, Nmeasure, Nm;
   float mag;
+
+  // XXX PhotNsec as a global is a bad idea; either get it from catalog
+  // or get it from:
+  // Nsecfilt = GetPhotcodeNsecfilt ();
+  // assert (catalog[0].Nsecfilt == Nsecfilt);
 
   /* we are moving only the subset of measurements from catalog[0] to subcatalog[0] */
@@ -105,4 +110,6 @@
   subcatalog[0].Nmeasure = Nmeasure;
   subcatalog[0].Nsecfilt = catalog[0].Nsecfilt;
+  subcatalog[0].Nsecf_mem = Naverage * catalog[0].Nsecfilt;
+  assert (PhotNsec == catalog[0].Nsecfilt);
 
   if (VERBOSE) {
Index: /branches/eam_branch_20071130/Ohana/src/relphot/src/load_catalogs.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/relphot/src/load_catalogs.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/relphot/src/load_catalogs.c	(revision 15732)
@@ -24,5 +24,5 @@
       exit (1);
     }
-    if (VERBOSE && !tcatalog.Nave_disk) fprintf (stderr, "no data in %s, skipping\n", tcatalog.filename);
+    if (VERBOSE && !tcatalog.Naves_disk) fprintf (stderr, "no data in %s, skipping\n", tcatalog.filename);
 
     // select only the brighter stars
Index: /branches/eam_branch_20071130/Ohana/src/relphot/src/reload_catalogs.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/relphot/src/reload_catalogs.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/relphot/src/reload_catalogs.c	(revision 15732)
@@ -30,5 +30,5 @@
       exit (1);
     }
-    if (VERBOSE && (catalog.Nave_disk == 0)) {
+    if (VERBOSE && (catalog.Naves_disk == 0)) {
 	fprintf (stderr, "no data in %s, skipping\n", catalog.filename);
 	dvo_catalog_unlock (&catalog);
Index: /branches/eam_branch_20071130/Ohana/src/uniphot/src/update.c
===================================================================
--- /branches/eam_branch_20071130/Ohana/src/uniphot/src/update.c	(revision 15731)
+++ /branches/eam_branch_20071130/Ohana/src/uniphot/src/update.c	(revision 15732)
@@ -52,5 +52,5 @@
       exit (2);
     }
-    if (!catalog.Nave_disk) {
+    if (!catalog.Naves_disk) {
       dvo_catalog_unlock (&catalog);
       dvo_catalog_free (&catalog);
