Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 37116)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 37246)
@@ -464,5 +464,5 @@
 } MeasureTiny;
 
-/** STRUCT DEFINITION **/
+// alternate version of PS1_V4 (old dev version)
 typedef struct {
   double           R;                    // RA (decimal degrees )
@@ -500,5 +500,5 @@
 Average *Average_PS1_V4alt_ToInternal (Average_PS1_V4alt *in, off_t Nvalues);
 
-/** STRUCT DEFINITION **/
+// alternate version of PS1_V4 (old dev version)
 typedef struct {
   float            dR;                   // RA offset (arcsec)
@@ -556,4 +556,107 @@
 Measure *Measure_PS1_V4alt_ToInternal (Average *ave, Measure_PS1_V4alt *in, off_t Nvalues);
 
+// alternate version of PS1_V5 (old dev version)
+typedef struct {
+  float            M;                    // average mag in this band (mags)
+  float            dM;                   // formal error on average mag (mags)
+  float            Map;                  // ave aperture mag in this band (mags)
+  float            dMap;                 // ave aperture mag in this band (mags)
+  float            sMap;                 // standard deviation of ap mags (mags)
+  float            Mkron;                // ave kron mag in this band (mags)
+  float            dMkron;               // formal error on average kron mag (mags)
+  float            sMkron;               // standard deviation of kron mags (mags)
+  float            Mstdev;               // standard deviation of measurements (mags)
+  float            Mmin;                 // min accepted mag (mags)
+  float            Mmax;                 // max accepted mag (mags)
+  float            Mchisq;               // chisq on average mag (value)
+  short            Ncode;                // number of detections in band
+  short            Nused;                // number of detections used in average
+  short            NusedKron;            // number of detections used in average
+  short            NusedAp;              // number of detections used in average
+  uint32_t         flags;                // photometry flags
+  float            MpsfStk;              // magnitude from stack (primary if available)
+  float            FpsfStk;              // flux from stack (primary if available)
+  float            dFpsfStk;             // mean flux psf error
+  float            MkronStk;             // magnitude from stack (primary if available)
+  float            FkronStk;             // flux from stack (primary if available)
+  float            dFkronStk;            // mean flux kron error
+  float            MapStk;               // magnitude from stack (primary if available)
+  float            FapStk;               // flux from stack (primary if available)
+  float            dFapStk;              // mean flux ap error
+  int              stackPrmryOff;        // measure entry which is primary stack detection
+  int              stackBestOff;         // measure entry which is best stack detection
+  float            MpsfWrp;              // psf magnitude from stack (primary if available)
+  float            FpsfWrp;              // psf flux from stack (primary if available)
+  float            dFpsfWrp;             // mean flux psf error
+  float            sFpsfWrp;             // mean flux psf stdev
+  float            MkronWrp;             // kron magnitude from stack (primary if available)
+  float            FkronWrp;             // kron flux from stack (primary if available)
+  float            dFkronWrp;            // mean flux kron error
+  float            sFkronWrp;            // mean flux kron stdev
+  float            MapWrp;               // aper magnitude from stack (primary if available)
+  float            FapWrp;               // aper flux from stack (primary if available)
+  float            dFapWrp;              // mean flux ap error
+  float            sFapWrp;              // mean flux ap stdev
+  short            NusedWrp;             // number of detections used in average
+  short            NusedKronWrp;         // number of detections used in average
+  short            NusedApWrp;           // number of detections used in average
+  short            ubercalDist;          // number of images from an ubercal-image
+} SecFilt_PS1_V5alt;
+
+SecFilt_PS1_V5alt *gfits_table_get_SecFilt_PS1_V5alt (FTable *table, off_t *Ndata, char *swapped);
+int      gfits_convert_SecFilt_PS1_V5alt (SecFilt_PS1_V5alt *data, off_t size, off_t nitems);
+SecFilt *SecFilt_PS1_V5alt_ToInternal (SecFilt_PS1_V5alt *in, off_t Nvalues);
+
+// alternate version of PS1_V5alt (old dev version)
+typedef struct {
+  double           R;                    // RA (decimal degrees )
+  double           D;                    // DEC (decimal degrees )
+  float            dR;                   // RA error (arcsec)
+  float            dD;                   // DEC error (arcsec)
+  float            uR;                   // RA*cos(D) proper-motion (arcsec/year)
+  float            uD;                   // DEC proper-motion (arcsec/year)
+  float            duR;                  // RA*cos(D) p-m error (arcsec/year)
+  float            duD;                  // DEC p-m error (arcsec/year)
+  float            P;                    // parallax (arcsec)
+  float            dP;                   // parallax error (arcsec)
+  double           Rstk;                 // RA on stack (decimal degrees )
+  double           Dstk;                 // DEC on stack (decimal degrees )
+  float            dRstk;                // RA error on stack (arcsec)
+  float            dDstk;                // DEC error on stack (arcsec)
+  float            ChiSqAve;             // astrometry analysis chisq
+  float            ChiSqPM;              // astrometry analysis chisq
+  float            ChiSqPar;             // astrometry analysis chisq
+  int              Tmean;                // mean epoch (PM,PAR ref) (unix time seconds)
+  int              Trange;               // mean epoch (PM,PAR ref) (unix time seconds)
+  float            psfQF;                // psf coverage (bad masks)
+  float            psfQFperf;            // psf coverage (all masks)
+  float            stargal;              // star / galaxy separator (1/100 arcsec)
+  unsigned short   Npos;                 // number of detections used for astrometry
+  unsigned short   Nmeasure;             // number of psf measurements
+  unsigned short   Nmissing;             // number of missings
+  unsigned short   Nlensing;             // number of lensing measurements
+  unsigned short   Nlensobj;             // number of lensing measurements
+  unsigned short   Nextend;              // number of extended 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              extendOffset;         // offset to extended object entry
+  int              paramsOffset;         // offset to stellar parameter data
+  float            refColorBlue;         // color of astrometry ref stars
+  float            refColorRed;          // color of astrometry ref stars
+  uint32_t         flags;                // average object flags (star; ghost; etc)
+  uint32_t         photFlagsUpper;       // upper bit of 2 bit summary of per-measure photflags
+  uint32_t         photFlagsLower;       // lower bit of 2 bit summary of per-measure photflags
+  unsigned int     objID;                // unique ID for object in table
+  unsigned int     catID;                // unique ID for table in which object was first realized
+  uint64_t         extID;                // external ID for object (eg PSPS objID)
+  uint64_t         extIDgc;              // external ID for object in galactic coords
+} Average_PS1_V5alt;
+
+Average_PS1_V5alt *gfits_table_get_Average_PS1_V5alt (FTable *table, off_t *Ndata, char *swapped);
+int      gfits_convert_Average_PS1_V5alt (Average_PS1_V5alt *data, off_t size, off_t nitems);
+Average *Average_PS1_V5alt_ToInternal (Average_PS1_V5alt *in, off_t Nvalues);
+
 /* for some reason I have merged the set of tables and the file description,
    so I need to have an internal structure to point to the separate files */
Index: trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 37116)
+++ trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 37246)
@@ -646,7 +646,4 @@
     case MEAS_PSF_NPIX: /* OK */
       value.Int = measure[0].psfNpix;
-      break;
-    case MEAS_CR_NSIGMA: /* OK */
-      value.Flt = measure[0].crNsigma;
       break;
     case MEAS_EXT_NSIGMA: /* OK */
Index: trunk/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 37116)
+++ trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 37246)
@@ -141,4 +141,9 @@
   average->refColorRed     = NAN;
 
+  average->tessID          = 0;
+  average->skycellID       = 0;
+  average->projectionID    = 0;
+  average->dummy           = 0;
+
   average->flags           = 0;
   average->photFlagsUpper  = 0;
@@ -173,4 +178,7 @@
   secfilt->sMkron      = NAN;
 
+  secfilt->psfQfMax     = NAN;
+  secfilt->psfQfPerfMax = NAN;
+
   secfilt->Mstdev      = NAN;
   secfilt->Mmin        = NAN;
@@ -197,4 +205,7 @@
   secfilt->dFapStk     = NAN;
 
+  secfilt->Nstack      = 0;
+  secfilt->NstackDet   = 0;
+
   secfilt->stackPrmryOff = -1;
   secfilt->stackBestOff  = -1;
@@ -218,4 +229,7 @@
   secfilt->NusedKronWrp = 0;
   secfilt->NusedApWrp   = 0;
+
+  secfilt->Nwarp        = 0;
+  secfilt->NwarpGood    = 0;
 
   secfilt->ubercalDist = 1000;
@@ -279,5 +293,4 @@
  measure->psfNdof   = 0;
  measure->psfNpix   = 0;
- measure->crNsigma  = NAN;
  measure->extNsigma = NAN;
 
@@ -302,4 +315,5 @@
  measure->dbFlags   = 0;
  measure->photFlags = 0;
+ measure->photFlags2= 0;
 }
 
Index: trunk/Ohana/src/libdvo/src/dvo_convert.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert.c	(revision 37116)
+++ trunk/Ohana/src/libdvo/src/dvo_convert.c	(revision 37246)
@@ -80,4 +80,18 @@
   }
 
+  // block to convert old tables (PS1_V5 versions made during development)
+  if (!strcmp (extname, "DVO_AVERAGE_PS1_V5") && (ftable[0].header[0].Naxis[0] == 184)) {
+    Average_PS1_V5alt *tmpAverage;
+    tmpAverage = gfits_table_get_Average_PS1_V5alt (ftable, Naverage, NULL);
+    if (!tmpAverage) {
+      fprintf (stderr, "ERROR: failed to read averages\n");
+      exit (2);
+    }
+    average = Average_PS1_V5alt_ToInternal (tmpAverage, *Naverage);
+    free (tmpAverage);
+    *format = DVO_FORMAT_PS1_V5;
+    return (average); 
+  }
+
 # define CONVERT_FORMAT(NAME, FORMAT, TYPE) \
   if (!strcmp (extname, NAME)) { \
@@ -285,4 +299,19 @@
     return (FALSE);
   }
+
+  // block to convert old tables (PS1_V5 versions made during development)
+  if (!strcmp (extname, "DVO_SECFILT_PS1_V5") && (ftable[0].header[0].Naxis[0] == 160)) {
+    SecFilt_PS1_V5alt *tmpSecFilt;
+    tmpSecFilt = gfits_table_get_SecFilt_PS1_V5alt (ftable, Nsecfilt, NULL);
+    if (!tmpSecFilt) {
+      fprintf (stderr, "ERROR: failed to read secfilts\n");
+      exit (2);
+    }
+    secfilt = SecFilt_PS1_V5alt_ToInternal (tmpSecFilt, *Nsecfilt);
+    free (tmpSecFilt);
+    *format = DVO_FORMAT_PS1_V5;
+    return (secfilt); 
+  }
+
 
 # define CONVERT_FORMAT(NAME, FORMAT, TYPE) \
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c	(revision 37116)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c	(revision 37246)
@@ -32,5 +32,4 @@
     out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -80,5 +79,4 @@
     out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c	(revision 37116)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c	(revision 37246)
@@ -34,5 +34,4 @@
     out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -80,5 +79,4 @@
     out[i].psfQF      = in[i].psfQF;
     out[i].psfChisq   = in[i].psfChisq;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c	(revision 37116)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c	(revision 37246)
@@ -40,5 +40,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -95,5 +94,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c	(revision 37116)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c	(revision 37246)
@@ -40,5 +40,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -96,5 +95,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c	(revision 37116)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c	(revision 37246)
@@ -40,5 +40,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -96,5 +95,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 37116)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 37246)
@@ -49,5 +49,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -114,5 +113,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -541,5 +539,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c	(revision 37116)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V5.c	(revision 37246)
@@ -56,5 +56,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -73,4 +72,5 @@
     out[i].dbFlags    = in[i].dbFlags;
     out[i].photFlags  = in[i].photFlags;
+    out[i].photFlags2 = in[i].photFlags2;
   }
   return (out);
@@ -128,5 +128,4 @@
     out[i].psfNdof    = in[i].psfNdof;
     out[i].psfNpix    = in[i].psfNpix;
-    out[i].crNsigma   = in[i].crNsigma;
     out[i].extNsigma  = in[i].extNsigma;
     out[i].FWx 	      = in[i].FWx;
@@ -145,4 +144,5 @@
     out[i].dbFlags    = in[i].dbFlags;
     out[i].photFlags  = in[i].photFlags;
+    out[i].photFlags2 = in[i].photFlags2;
   }
   return (out);
@@ -203,4 +203,8 @@
     out[i].refColorRed   = in[i].refColorRed;
 
+    out[i].tessID        = in[i].tessID;
+    out[i].skycellID     = in[i].skycellID;
+    out[i].projectionID  = in[i].projectionID;
+
     out[i].flags     	 = in[i].flags;   
     out[i].photFlagsUpper = in[i].photFlagsUpper;   
@@ -223,54 +227,58 @@
 
   for (i = 0; i < Nvalues; i++) {
-    out[i].R        	 = in[i].R;      
-    out[i].D        	 = in[i].D;      
-    out[i].dR       	 = in[i].dR;
-    out[i].dD       	 = in[i].dD;
-    out[i].uR       	 = in[i].uR;
-    out[i].uD       	 = in[i].uD;
-    out[i].duR      	 = in[i].duR;
-    out[i].duD      	 = in[i].duD;
-    out[i].P        	 = in[i].P;
-    out[i].dP       	 = in[i].dP;
-
-    out[i].Rstk        	 = in[i].Rstk;      
-    out[i].Dstk        	 = in[i].Dstk;      
-    out[i].dRstk       	 = in[i].dRstk;
-    out[i].dDstk       	 = in[i].dDstk;
-
-    out[i].ChiSqAve    	 = in[i].ChiSqAve;     
-    out[i].ChiSqPM     	 = in[i].ChiSqPM;     
-    out[i].ChiSqPar   	 = in[i].ChiSqPar;     
-    out[i].Tmean    	 = in[i].Tmean;     
-    out[i].Trange   	 = in[i].Trange;     
-
-    out[i].psfQF         = in[i].psfQF;
-    out[i].psfQFperf     = in[i].psfQFperf;
-    out[i].stargal     	 = in[i].stargal;     
-    out[i].Npos       	 = in[i].Npos;     
-
-    out[i].Nmeasure      = in[i].Nmeasure;     
-    out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Nlensing      = in[i].Nlensing;     
-    out[i].Nlensobj      = in[i].Nlensobj;     
-    out[i].Nextend       = in[i].Nextend;     
-
-    out[i].measureOffset = in[i].measureOffset; 
-    out[i].missingOffset = in[i].missingOffset;
-    out[i].lensingOffset = in[i].lensingOffset;
-    out[i].lensobjOffset = in[i].lensobjOffset;
-    out[i].extendOffset  = in[i].extendOffset;
-    out[i].paramsOffset  = in[i].paramsOffset;
-
-    out[i].refColorBlue  = in[i].refColorBlue;
-    out[i].refColorRed   = in[i].refColorRed;
-
-    out[i].flags     	 = in[i].flags;   
+    out[i].R        	  = in[i].R;      
+    out[i].D        	  = in[i].D;      
+    out[i].dR       	  = in[i].dR;
+    out[i].dD       	  = in[i].dD;
+    out[i].uR       	  = in[i].uR;
+    out[i].uD       	  = in[i].uD;
+    out[i].duR      	  = in[i].duR;
+    out[i].duD      	  = in[i].duD;
+    out[i].P        	  = in[i].P;
+    out[i].dP       	  = in[i].dP;
+			  
+    out[i].Rstk        	  = in[i].Rstk;      
+    out[i].Dstk        	  = in[i].Dstk;      
+    out[i].dRstk       	  = in[i].dRstk;
+    out[i].dDstk       	  = in[i].dDstk;
+			  
+    out[i].ChiSqAve    	  = in[i].ChiSqAve;     
+    out[i].ChiSqPM     	  = in[i].ChiSqPM;     
+    out[i].ChiSqPar   	  = in[i].ChiSqPar;     
+    out[i].Tmean    	  = in[i].Tmean;     
+    out[i].Trange   	  = in[i].Trange;     
+			  
+    out[i].psfQF          = in[i].psfQF;
+    out[i].psfQFperf      = in[i].psfQFperf;
+    out[i].stargal     	  = in[i].stargal;     
+    out[i].Npos       	  = in[i].Npos;     
+			  
+    out[i].Nmeasure       = in[i].Nmeasure;     
+    out[i].Nmissing       = in[i].Nmissing;     
+    out[i].Nlensing       = in[i].Nlensing;     
+    out[i].Nlensobj       = in[i].Nlensobj;     
+    out[i].Nextend        = in[i].Nextend;     
+			  
+    out[i].measureOffset  = in[i].measureOffset; 
+    out[i].missingOffset  = in[i].missingOffset;
+    out[i].lensingOffset  = in[i].lensingOffset;
+    out[i].lensobjOffset  = in[i].lensobjOffset;
+    out[i].extendOffset   = in[i].extendOffset;
+    out[i].paramsOffset   = in[i].paramsOffset;
+			  
+    out[i].refColorBlue   = in[i].refColorBlue;
+    out[i].refColorRed    = in[i].refColorRed;
+			  
+    out[i].tessID         = in[i].tessID;
+    out[i].skycellID      = in[i].skycellID;
+    out[i].projectionID   = in[i].projectionID;
+			  
+    out[i].flags     	  = in[i].flags;   
     out[i].photFlagsUpper = in[i].photFlagsUpper;   
     out[i].photFlagsLower = in[i].photFlagsLower;   
-    out[i].objID 	 = in[i].objID;
-    out[i].catID 	 = in[i].catID;
-    out[i].extID 	 = in[i].extID;
-    out[i].extIDgc 	 = in[i].extIDgc;
+    out[i].objID 	  = in[i].objID;
+    out[i].catID 	  = in[i].catID;
+    out[i].extID 	  = in[i].extID;
+    out[i].extIDgc 	  = in[i].extIDgc;
   }
   return (out);
@@ -286,72 +294,4 @@
   for (i = 0; i < Nvalues; i++) {
     dvo_secfilt_init (&out[i]);
-
-    out[i].M             = in[i].M;      
-    out[i].dM            = in[i].dM;      
-    out[i].Map           = in[i].Map;      
-    out[i].dMap          = in[i].dMap;      
-    out[i].sMap          = in[i].sMap;      
-    out[i].Mkron         = in[i].Mkron;      
-    out[i].dMkron        = in[i].dMkron;      
-
-    out[i].Mstdev        = in[i].Mstdev;      
-    out[i].Mmin          = in[i].Mmin;      
-    out[i].Mmax          = in[i].Mmax;      
-    out[i].Mchisq        = in[i].Mchisq;     
-
-    out[i].Ncode         = in[i].Ncode;
-    out[i].Nused         = in[i].Nused;
-    out[i].NusedKron     = in[i].NusedKron;
-    out[i].NusedAp       = in[i].NusedAp;
-
-    out[i].flags         = in[i].flags;     
-
-    out[i].MpsfStk       = in[i].MpsfStk;
-    out[i].FpsfStk       = in[i].FpsfStk;
-    out[i].dFpsfStk      = in[i].dFpsfStk;
-
-    out[i].MkronStk      = in[i].MkronStk;
-    out[i].FkronStk      = in[i].FkronStk;
-    out[i].dFkronStk     = in[i].dFkronStk;
-
-    out[i].MapStk        = in[i].MapStk;
-    out[i].FapStk        = in[i].FapStk;
-    out[i].dFapStk       = in[i].dFapStk;
-
-    out[i].stackPrmryOff = in[i].stackPrmryOff;      
-    out[i].stackBestOff  = in[i].stackBestOff;      
-
-    out[i].MpsfWrp       = in[i].MpsfWrp;
-    out[i].FpsfWrp       = in[i].FpsfWrp;
-    out[i].dFpsfWrp      = in[i].dFpsfWrp;
-    out[i].sFpsfWrp      = in[i].sFpsfWrp;
-
-    out[i].MkronWrp      = in[i].MkronWrp;
-    out[i].FkronWrp      = in[i].FkronWrp;
-    out[i].dFkronWrp     = in[i].dFkronWrp;
-    out[i].sFkronWrp     = in[i].sFkronWrp;
-
-    out[i].MapWrp        = in[i].MapWrp;
-    out[i].FapWrp        = in[i].FapWrp;
-    out[i].dFapWrp       = in[i].dFapWrp;
-    out[i].sFapWrp       = in[i].sFapWrp;
-
-    out[i].NusedWrp      = in[i].NusedWrp;
-    out[i].NusedKronWrp  = in[i].NusedKronWrp;
-    out[i].NusedApWrp    = in[i].NusedApWrp;
-
-    out[i].ubercalDist   = in[i].ubercalDist;      
-  }
-  return (out);
-}
-
-SecFilt_PS1_V5 *SecFiltInternalTo_PS1_V5 (SecFilt *in, off_t Nvalues) {
-
-  off_t i;
-  SecFilt_PS1_V5 *out;
-
-  ALLOCATE_ZERO (out, SecFilt_PS1_V5, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
 
     out[i].M             = in[i].M;      
@@ -364,4 +304,7 @@
     out[i].sMkron        = in[i].sMkron;      
 
+    out[i].psfQfMax      = in[i].psfQfMax;      
+    out[i].psfQfPerfMax  = in[i].psfQfPerfMax;      
+
     out[i].Mstdev        = in[i].Mstdev;      
     out[i].Mmin          = in[i].Mmin;      
@@ -388,4 +331,7 @@
     out[i].dFapStk       = in[i].dFapStk;
 
+    out[i].Nstack        = in[i].Nstack;      
+    out[i].NstackDet     = in[i].NstackDet;      
+
     out[i].stackPrmryOff = in[i].stackPrmryOff;      
     out[i].stackBestOff  = in[i].stackBestOff;      
@@ -409,4 +355,85 @@
     out[i].NusedKronWrp  = in[i].NusedKronWrp;
     out[i].NusedApWrp    = in[i].NusedApWrp;
+
+    out[i].Nwarp         = in[i].Nwarp;      
+    out[i].NwarpGood     = in[i].NwarpGood;      
+
+    out[i].ubercalDist   = in[i].ubercalDist;      
+  }
+  return (out);
+}
+
+SecFilt_PS1_V5 *SecFiltInternalTo_PS1_V5 (SecFilt *in, off_t Nvalues) {
+
+  off_t i;
+  SecFilt_PS1_V5 *out;
+
+  ALLOCATE_ZERO (out, SecFilt_PS1_V5, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+
+    out[i].M             = in[i].M;      
+    out[i].dM            = in[i].dM;      
+    out[i].Map           = in[i].Map;      
+    out[i].dMap          = in[i].dMap;      
+    out[i].sMap          = in[i].sMap;      
+    out[i].Mkron         = in[i].Mkron;      
+    out[i].dMkron        = in[i].dMkron;      
+    out[i].sMkron        = in[i].sMkron;      
+
+    out[i].psfQfMax      = in[i].psfQfMax;      
+    out[i].psfQfPerfMax  = in[i].psfQfPerfMax;      
+
+    out[i].Mstdev        = in[i].Mstdev;      
+    out[i].Mmin          = in[i].Mmin;      
+    out[i].Mmax          = in[i].Mmax;      
+    out[i].Mchisq        = in[i].Mchisq;     
+
+    out[i].Ncode         = in[i].Ncode;
+    out[i].Nused         = in[i].Nused;
+    out[i].NusedKron     = in[i].NusedKron;
+    out[i].NusedAp       = in[i].NusedAp;
+
+    out[i].flags         = in[i].flags;     
+
+    out[i].MpsfStk       = in[i].MpsfStk;
+    out[i].FpsfStk       = in[i].FpsfStk;
+    out[i].dFpsfStk      = in[i].dFpsfStk;
+
+    out[i].MkronStk      = in[i].MkronStk;
+    out[i].FkronStk      = in[i].FkronStk;
+    out[i].dFkronStk     = in[i].dFkronStk;
+
+    out[i].MapStk        = in[i].MapStk;
+    out[i].FapStk        = in[i].FapStk;
+    out[i].dFapStk       = in[i].dFapStk;
+
+    out[i].Nstack        = in[i].Nstack;      
+    out[i].NstackDet     = in[i].NstackDet;      
+
+    out[i].stackPrmryOff = in[i].stackPrmryOff;      
+    out[i].stackBestOff  = in[i].stackBestOff;      
+
+    out[i].MpsfWrp       = in[i].MpsfWrp;
+    out[i].FpsfWrp       = in[i].FpsfWrp;
+    out[i].dFpsfWrp      = in[i].dFpsfWrp;
+    out[i].sFpsfWrp      = in[i].sFpsfWrp;
+
+    out[i].MkronWrp      = in[i].MkronWrp;
+    out[i].FkronWrp      = in[i].FkronWrp;
+    out[i].dFkronWrp     = in[i].dFkronWrp;
+    out[i].sFkronWrp     = in[i].sFkronWrp;
+
+    out[i].MapWrp        = in[i].MapWrp;
+    out[i].FapWrp        = in[i].FapWrp;
+    out[i].dFapWrp       = in[i].dFapWrp;
+    out[i].sFapWrp       = in[i].sFapWrp;
+
+    out[i].NusedWrp      = in[i].NusedWrp;
+    out[i].NusedKronWrp  = in[i].NusedKronWrp;
+    out[i].NusedApWrp    = in[i].NusedApWrp;
+
+    out[i].Nwarp         = in[i].Nwarp;      
+    out[i].NwarpGood     = in[i].NwarpGood;      
 
     out[i].ubercalDist   = in[i].ubercalDist;      
@@ -834,2 +861,327 @@
   return (out);
 }
+
+/*********************** old / alternate version **********************/
+
+// 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
+Average *Average_PS1_V5alt_ToInternal (Average_PS1_V5alt *in, off_t Nvalues) {
+
+  off_t i;
+  Average *out;
+
+  ALLOCATE_ZERO (out, Average, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+
+    out[i].R        	  = in[i].R;      
+    out[i].D        	  = in[i].D;      
+    out[i].dR       	  = in[i].dR;
+    out[i].dD       	  = in[i].dD;
+    out[i].uR       	  = in[i].uR;
+    out[i].uD       	  = in[i].uD;
+    out[i].duR      	  = in[i].duR;
+    out[i].duD      	  = in[i].duD;
+    out[i].P        	  = in[i].P;
+    out[i].dP       	  = in[i].dP;
+			  
+    out[i].Rstk        	  = in[i].Rstk;      
+    out[i].Dstk        	  = in[i].Dstk;      
+    out[i].dRstk       	  = in[i].dRstk;
+    out[i].dDstk       	  = in[i].dDstk;
+			  
+    out[i].ChiSqAve    	  = in[i].ChiSqAve;     
+    out[i].ChiSqPM    	  = in[i].ChiSqPM;     
+    out[i].ChiSqPar    	  = in[i].ChiSqPar;     
+    out[i].Tmean    	  = in[i].Tmean;     
+    out[i].Trange   	  = in[i].Trange;     
+			  
+    out[i].psfQF          = in[i].psfQF;
+    out[i].psfQFperf      = in[i].psfQFperf;
+    out[i].stargal     	  = in[i].stargal;     
+    out[i].Npos       	  = in[i].Npos;     
+			  
+    out[i].Nmeasure       = in[i].Nmeasure;     
+    out[i].Nmissing       = in[i].Nmissing;     
+    out[i].Nlensing       = in[i].Nlensing;     
+    out[i].Nlensobj       = in[i].Nlensobj;     
+    out[i].Nextend        = in[i].Nextend;     
+			  
+    out[i].measureOffset  = in[i].measureOffset; 
+    out[i].missingOffset  = in[i].missingOffset;
+    out[i].lensingOffset  = in[i].lensingOffset;
+    out[i].lensobjOffset  = in[i].lensobjOffset;
+    out[i].extendOffset   = in[i].extendOffset;
+    out[i].paramsOffset   = in[i].paramsOffset;
+			  
+    out[i].refColorBlue   = in[i].refColorBlue;
+    out[i].refColorRed    = in[i].refColorRed;
+			  
+    out[i].flags     	  = in[i].flags;   
+    out[i].photFlagsUpper = in[i].photFlagsUpper;   
+    out[i].photFlagsLower = in[i].photFlagsLower;   
+    out[i].objID 	  = in[i].objID;
+    out[i].catID 	  = in[i].catID;
+    out[i].extID 	  = in[i].extID;
+    out[i].extIDgc 	  = in[i].extIDgc;
+  }
+  return (out);
+}
+
+int gfits_convert_Average_PS1_V5alt (Average_PS1_V5alt *data, off_t size, off_t nitems) {
+
+  off_t i;
+  unsigned char *byte, tmp;
+
+  if (size != 184) { 
+    fprintf (stderr, "WARNING: mismatch in data types Average_PS1_V5alt: "OFF_T_FMT" vs %d\n",  size,  184);
+    return (FALSE);
+  }
+
+  /* provide initial values to avoid compiler warnings for non-BYTE_SWAP arch */
+  i = tmp = 0;
+  byte = NULL;
+
+# ifdef BYTE_SWAP
+  byte = (unsigned char *) data;
+  for (i = 0; i < nitems; i++, byte += 184) {
+    /** BYTE SWAP **/
+    SWAP_DBLE (0); // RA
+    SWAP_DBLE (8); // DEC
+    SWAP_WORD (16); // RA_ERR
+    SWAP_WORD (20); // DEC_ERR
+    SWAP_WORD (24); // U_RA
+    SWAP_WORD (28); // U_DEC
+    SWAP_WORD (32); // V_RA_ERR
+    SWAP_WORD (36); // V_DEC_ERR
+    SWAP_WORD (40); // PAR
+    SWAP_WORD (44); // PAR_ERR
+    SWAP_DBLE (48); // RA_STK
+    SWAP_DBLE (56); // DEC_STK
+    SWAP_WORD (64); // RA_STK_ERR
+    SWAP_WORD (68); // DEC_STK_ERR
+    SWAP_WORD (72); // CHISQ_POS
+    SWAP_WORD (76); // CHISQ_PM
+    SWAP_WORD (80); // CHISQ_PAP
+    SWAP_WORD (84); // MEAN_EPOCH
+    SWAP_WORD (88); // TIME_RANGE
+    SWAP_WORD (92); // PSF_QF
+    SWAP_WORD (96); // PSF_QF_PERF
+    SWAP_WORD (100); // STARGAL_SEP
+    SWAP_BYTE (104); // NUMBER_POS
+    SWAP_BYTE (106); // NMEASURE
+    SWAP_BYTE (108); // NMISSING
+    SWAP_BYTE (110); // NLENSING
+    SWAP_BYTE (112); // NLENSOBJ
+    SWAP_BYTE (114); // NEXTEND
+    SWAP_WORD (116); // OFF_MEASURE
+    SWAP_WORD (120); // OFF_MISSING
+    SWAP_WORD (124); // OFF_LENSING
+    SWAP_WORD (128); // OFF_LENSOBJ
+    SWAP_WORD (132); // OFF_EXTEND
+    SWAP_WORD (136); // OFF_PARAMS
+    SWAP_WORD (140); // REF_COLOR_BLUE
+    SWAP_WORD (144); // REF_COLOR_RED
+    SWAP_WORD (148); // FLAGS
+    SWAP_WORD (152); // PHOTFLAGS_U
+    SWAP_WORD (156); // PHOTFLAGS_L
+    SWAP_WORD (160); // OBJ_ID
+    SWAP_WORD (164); // CAT_ID
+    SWAP_DBLE (168); // EXT_ID
+    SWAP_DBLE (176); // EXT_ID_GC
+  }
+# endif  
+
+  return (TRUE);
+} 
+
+/*** add test of EXTNAME and header-defined columns? ***/
+/* return internal structure representation */
+Average_PS1_V5alt *gfits_table_get_Average_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped) {
+
+  int Ncols;
+  Average_PS1_V5alt *data;
+
+  Ncols = ftable[0].header[0].Naxis[0];
+  if (Ncols != 184) {
+    fprintf (stderr, "ERROR: mis-match in table size: width is %d but should be %d bytes\n", Ncols, 184);
+    return NULL;
+  }
+
+  *Ndata = ftable[0].header[0].Naxis[1];
+  data = (Average_PS1_V5alt *) ftable[0].buffer;
+  if ((swapped == NULL) || (*swapped == FALSE)) {
+    if (!gfits_convert_Average_PS1_V5alt (data, sizeof (Average_PS1_V5alt), *Ndata)) {
+      return NULL;
+    }
+    gfits_table_scale_data (ftable);
+    if (swapped != NULL) *swapped = TRUE;
+  }
+  return (data);
+}
+
+/****** alt secfilt **********/
+
+SecFilt *SecFilt_PS1_V5alt_ToInternal (SecFilt_PS1_V5alt *in, off_t Nvalues) {
+
+  off_t i;
+  SecFilt *out;
+
+  ALLOCATE_ZERO (out, SecFilt, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
+    out[i].M             = in[i].M;      
+    out[i].dM            = in[i].dM;      
+    out[i].Map           = in[i].Map;      
+    out[i].dMap          = in[i].dMap;      
+    out[i].sMap          = in[i].sMap;      
+    out[i].Mkron         = in[i].Mkron;      
+    out[i].dMkron        = in[i].dMkron;      
+
+    out[i].Mstdev        = in[i].Mstdev;      
+    out[i].Mmin          = in[i].Mmin;      
+    out[i].Mmax          = in[i].Mmax;      
+    out[i].Mchisq        = in[i].Mchisq;     
+
+    out[i].Ncode         = in[i].Ncode;
+    out[i].Nused         = in[i].Nused;
+    out[i].NusedKron     = in[i].NusedKron;
+    out[i].NusedAp       = in[i].NusedAp;
+
+    out[i].flags         = in[i].flags;     
+
+    out[i].MpsfStk       = in[i].MpsfStk;
+    out[i].FpsfStk       = in[i].FpsfStk;
+    out[i].dFpsfStk      = in[i].dFpsfStk;
+
+    out[i].MkronStk      = in[i].MkronStk;
+    out[i].FkronStk      = in[i].FkronStk;
+    out[i].dFkronStk     = in[i].dFkronStk;
+
+    out[i].MapStk        = in[i].MapStk;
+    out[i].FapStk        = in[i].FapStk;
+    out[i].dFapStk       = in[i].dFapStk;
+
+    out[i].stackPrmryOff = in[i].stackPrmryOff;      
+    out[i].stackBestOff  = in[i].stackBestOff;      
+
+    out[i].MpsfWrp       = in[i].MpsfWrp;
+    out[i].FpsfWrp       = in[i].FpsfWrp;
+    out[i].dFpsfWrp      = in[i].dFpsfWrp;
+    out[i].sFpsfWrp      = in[i].sFpsfWrp;
+
+    out[i].MkronWrp      = in[i].MkronWrp;
+    out[i].FkronWrp      = in[i].FkronWrp;
+    out[i].dFkronWrp     = in[i].dFkronWrp;
+    out[i].sFkronWrp     = in[i].sFkronWrp;
+
+    out[i].MapWrp        = in[i].MapWrp;
+    out[i].FapWrp        = in[i].FapWrp;
+    out[i].dFapWrp       = in[i].dFapWrp;
+    out[i].sFapWrp       = in[i].sFapWrp;
+
+    out[i].NusedWrp      = in[i].NusedWrp;
+    out[i].NusedKronWrp  = in[i].NusedKronWrp;
+    out[i].NusedApWrp    = in[i].NusedApWrp;
+
+    out[i].ubercalDist   = in[i].ubercalDist;      
+  }
+  return (out);
+}
+
+int gfits_convert_SecFilt_PS1_V5alt (SecFilt_PS1_V5alt *data, off_t size, off_t nitems) {
+
+  off_t i;
+  unsigned char *byte, tmp;
+
+  if (size != 160) { 
+    fprintf (stderr, "WARNING: mismatch in data types SecFilt_PS1_V5alt: "OFF_T_FMT" vs %d\n",  size,  160);
+    return (FALSE);
+  }
+
+  /* provide initial values to avoid compiler warnings for non-BYTE_SWAP arch */
+  i = tmp = 0;
+  byte = NULL;
+
+# ifdef BYTE_SWAP
+  byte = (unsigned char *) data;
+  for (i = 0; i < nitems; i++, byte += 160) {
+    /** BYTE SWAP **/
+    SWAP_WORD (0); // MAG
+    SWAP_WORD (4); // MAG_ERR
+    SWAP_WORD (8); // MAG_AP
+    SWAP_WORD (12); // MAG_AP_ERR
+    SWAP_WORD (16); // MAG_AP_STDEV
+    SWAP_WORD (20); // MAG_KRON
+    SWAP_WORD (24); // MAG_KRON_ERR
+    SWAP_WORD (28); // MAG_KRON_STDEV
+    SWAP_WORD (32); // MAG_STDEV
+    SWAP_WORD (36); // MAG_MIN
+    SWAP_WORD (40); // MAG_MAX
+    SWAP_WORD (44); // MAG_CHI
+    SWAP_BYTE (48); // NCODE
+    SWAP_BYTE (50); // NUSED
+    SWAP_BYTE (52); // NUSED_KRON
+    SWAP_BYTE (54); // NUSED_AP
+    SWAP_WORD (56); // FLAGS
+    SWAP_WORD (60); // MAG_PSF_STK
+    SWAP_WORD (64); // FLUX_PSF_STK
+    SWAP_WORD (68); // FLUX_PSF_STK_ERR
+    SWAP_WORD (72); // MAG_KRON_STK
+    SWAP_WORD (76); // FLUX_KRON_STK
+    SWAP_WORD (80); // FLUX_KRON_STK_ERR
+    SWAP_WORD (84); // MAG_AP_STK
+    SWAP_WORD (88); // FLUX_AP_STK
+    SWAP_WORD (92); // FLUX_AP_STK_ERR
+    SWAP_WORD (96); // STACK_PRIMARY_OFF
+    SWAP_WORD (100); // STACK_BEST_OFF
+    SWAP_WORD (104); // MAG_PSF_WRP
+    SWAP_WORD (108); // FLUX_PSF_WRP
+    SWAP_WORD (112); // FLUX_PSF_WRP_ERR
+    SWAP_WORD (116); // FLUX_PSF_WRP_STD
+    SWAP_WORD (120); // MAG_KRON_WRP
+    SWAP_WORD (124); // FLUX_KRON_WRP
+    SWAP_WORD (128); // FLUX_KRON_WRP_ERR
+    SWAP_WORD (132); // FLUX_KRON_WRP_STD
+    SWAP_WORD (136); // MAG_AP_WRP
+    SWAP_WORD (140); // FLUX_AP_WRP
+    SWAP_WORD (144); // FLUX_AP_WRP_ERR
+    SWAP_WORD (148); // FLUX_AP_WRP_STD
+    SWAP_BYTE (152); // NUSED_WRP
+    SWAP_BYTE (154); // NUSED_KRON_WRP
+    SWAP_BYTE (156); // NUSED_AP_WRP
+    SWAP_BYTE (158); // UBERCAL_DIST
+  }
+# endif  
+
+  return (TRUE);
+} 
+
+/*** add test of EXTNAME and header-defined columns? ***/
+/* return internal structure representation */
+SecFilt_PS1_V5alt *gfits_table_get_SecFilt_PS1_V5alt (FTable *ftable, off_t *Ndata, char *swapped) {
+
+  int Ncols;
+  SecFilt_PS1_V5alt *data;
+
+  Ncols = ftable[0].header[0].Naxis[0];
+  if (Ncols != 160) {
+    fprintf (stderr, "ERROR: mis-match in table size: width is %d but should be %d bytes\n", Ncols, 160);
+    return NULL;
+  }
+
+  *Ndata = ftable[0].header[0].Naxis[1];
+  data = (SecFilt_PS1_V5alt *) ftable[0].buffer;
+  if ((swapped == NULL) || (*swapped == FALSE)) {
+    if (!gfits_convert_SecFilt_PS1_V5alt (data, sizeof (SecFilt_PS1_V5alt), *Ndata)) {
+      return NULL;
+    }
+    gfits_table_scale_data (ftable);
+    if (swapped != NULL) *swapped = TRUE;
+  }
+  return (data);
+}
+
+
