Index: trunk/Ohana/src/libdvo/doc/notes.txt
===================================================================
--- trunk/Ohana/src/libdvo/doc/notes.txt	(revision 34717)
+++ trunk/Ohana/src/libdvo/doc/notes.txt	(revision 34749)
@@ -17,5 +17,5 @@
 
 4) create a DVOTableFormat entry for the new format
-   (libdvo/include/dvo.h).  the naming convetion is DVO_FORMAT_FOO.
+   (libdvo/include/dvo.h).  the naming convention is DVO_FORMAT_FOO.
 
 5) add an entry for the new format in dvo_catalog_catformat
Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 34717)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 34749)
@@ -175,4 +175,7 @@
   ID_OBJ_GOOD       = 0x04000000, // good-quality measurement in our data (eg,PS)
   ID_OBJ_GOOD_ALT   = 0x08000000, // good-quality measurement in  external data (eg, 2MASS)
+  ID_OBJ_GOOD_STACK = 0x10000000, // good-quality object in the stack (> 1 good stack)
+  ID_OBJ_SUSPECT_STACK = 0x20000000, // suspect object in the stack (> 1 good or suspect stack, < 2 good)
+  ID_OBJ_BAD_STACK  = 0x40000000, // good-quality object in the stack (> 1 good stack)
 } DVOAverageFlags;
 
Index: trunk/Ohana/src/libdvo/include/dvodb.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvodb.h	(revision 34717)
+++ trunk/Ohana/src/libdvo/include/dvodb.h	(revision 34749)
@@ -122,4 +122,6 @@
       MEAS_XCCD_ERR, 
       MEAS_YCCD_ERR, 
+      MEAS_XOFF, 
+      MEAS_YOFF, 
       MEAS_POS_SYS_ERR, 
       MEAS_XMOSAIC, 
Index: trunk/Ohana/src/libdvo/src/LoadPhotcodes.c
===================================================================
--- trunk/Ohana/src/libdvo/src/LoadPhotcodes.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/LoadPhotcodes.c	(revision 34749)
@@ -11,4 +11,6 @@
   }
 
+  if (!master_file) return FALSE;
+
   /* next try to load the photcodes from the master text photcode file */
   /* automatically (or on demand?) save the text file to the FITS version */
Index: trunk/Ohana/src/libdvo/src/dbExtractMeasures.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dbExtractMeasures.c	(revision 34749)
@@ -385,4 +385,12 @@
       value.Flt = FromShortDegrees(measure[0].theta);
       break;
+
+    case MEAS_POSANGLE: /* OK */
+      value.Flt = FromShortDegrees(measure[0].posangle);
+      break;
+    case MEAS_PLATESCALE: /* OK */
+      value.Flt = measure[0].pltscale;
+      break;
+
     case MEAS_MXX: /* OK */
       value.Flt = FromShortPixels(measure[0].Mxx);
@@ -435,4 +443,10 @@
 # endif
       break;
+    case MEAS_XOFF: /* OK */
+      value.Flt = measure[0].Xoff;
+      break;
+    case MEAS_YOFF: /* OK */
+      value.Flt = measure[0].Yoff;
+      break;
     case MEAS_XCCD_ERR: /* OK */
       value.Flt = FromShortPixels(measure[0].dXccd);
Index: trunk/Ohana/src/libdvo/src/dbFields.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dbFields.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dbFields.c	(revision 34749)
@@ -217,4 +217,6 @@
   if (!strcasecmp (fieldName, "XCCD:ERR"))   	 ESCAPE (MEAS_XCCD_ERR,       MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "YCCD:ERR"))   	 ESCAPE (MEAS_YCCD_ERR,       MAG_NONE, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "XOFF"))       	 ESCAPE (MEAS_XOFF,           MAG_NONE, OPIHI_FLT);
+  if (!strcasecmp (fieldName, "YOFF"))       	 ESCAPE (MEAS_YOFF,           MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "POS_SYS_ERR"))    ESCAPE (MEAS_POS_SYS_ERR,    MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "XMOSAIC"))    	 ESCAPE (MEAS_XMOSAIC,        MAG_NONE, OPIHI_FLT);
@@ -228,4 +230,5 @@
   if (!strcasecmp (fieldName, "CATID"))      	 ESCAPE (MEAS_CAT_ID,         MAG_NONE, OPIHI_INT);
   if (!strcasecmp (fieldName, "IMAGEID"))    	 ESCAPE (MEAS_IMAGE_ID,       MAG_NONE, OPIHI_INT);
+  if (!strcasecmp (fieldName, "EXTERNID"))    	 ESCAPE (MEAS_EXTERN_ID,      MAG_NONE, OPIHI_INT);
   if (!strcasecmp (fieldName, "PSF_QF"))     	 ESCAPE (MEAS_PSF_QF,         MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "PSF_QF_PERFECT")) ESCAPE (MEAS_PSF_QF_PERFECT, MAG_NONE, OPIHI_FLT);
@@ -237,5 +240,4 @@
   if (!strcasecmp (fieldName, "SKY"))        	 ESCAPE (MEAS_SKY,            MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "SKY_ERR"))    	 ESCAPE (MEAS_dSKY,           MAG_NONE, OPIHI_FLT);
-  if (!strcasecmp (fieldName, "externID"))    	 ESCAPE (MEAS_EXTERN_ID,      MAG_NONE, OPIHI_INT);
   if (!strcasecmp (fieldName, "MCAL_OFFSET"))    ESCAPE (MEAS_MCAL_OFFSET,    MAG_NONE, OPIHI_FLT);
   if (!strcasecmp (fieldName, "FLAT"))    	 ESCAPE (MEAS_FLAT,           MAG_NONE, OPIHI_FLT);
Index: trunk/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 34749)
@@ -83,12 +83,12 @@
   average->dP        	   = 0;
 
-  average->ChiSqAve  	   = 0.0;
-  average->ChiSqPM   	   = 0.0;
-  average->ChiSqPar  	   = 0.0;
+  average->ChiSqAve  	   = NAN;
+  average->ChiSqPM   	   = NAN;
+  average->ChiSqPar  	   = NAN;
   average->Tmean   	   = 0;
   average->Trange   	   = 0;
 
-  average->psfQF   	   = 0.0;
-  average->psfQFperf   	   = 0.0;
+  average->psfQF   	   = NAN;
+  average->psfQFperf   	   = NAN;
 
   average->stargal    	   = 0.0;
@@ -161,4 +161,6 @@
  measure->Xccd      = NAN;
  measure->Yccd      = NAN;
+ measure->Xoff      = 0.0;
+ measure->Yoff      = 0.0;
 
  measure->Sky       = NAN;
@@ -176,4 +178,5 @@
 
  measure->psfQF     = NAN;
+ measure->psfQFperf = NAN;
  measure->psfChisq  = NAN;
  measure->psfNdof   = 0;
Index: trunk/Ohana/src/libdvo/src/dvo_catalog_split.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_catalog_split.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_catalog_split.c	(revision 34749)
@@ -83,4 +83,5 @@
     return (FALSE);
   }
+  off_t fullsize = catalog->header.datasize;
 
   // write the PHU matrix; this is probably a NOP, do I have to keep it in?
@@ -91,4 +92,5 @@
     return (FALSE);
   }
+  fullsize += matrix.datasize;
   gfits_free_matrix (&matrix);
 
@@ -98,4 +100,15 @@
     return (FALSE);
   }
+  fullsize += ftable->datasize + ftable->header->datasize;
+
+  // if the output file will be completely re-written, truncate to total datasize
+  if ((start == 0) && (Nrows == Ntotal)) {
+    int fd = fileno (catalog->f);
+    if (ftruncate (fd, fullsize)) {
+      perror ("dvo_catalog_save_subset: ");
+      return (FALSE);
+    }
+  }
+
   return (TRUE);
 }
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c	(revision 34749)
@@ -11,4 +11,5 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
     out[i].dR         = in[i].dR;
     out[i].dD         = in[i].dD;
@@ -40,30 +41,9 @@
     out[i].photFlags  = in[i].photFlags;
 
-    // changed or added for PS1_DEV_2
+    // changed for PS1_DEV_2
     out[i].Map        = in[i].Mgal;
-    out[i].dMcal      = 0; 
-
-    // changed or added for PS1_V1
+
+    // changed for PS1_V1
     out[i].photFlags  = in[i].photFlags | (in[i].dophot << 16);
-    out[i].t_msec     = 0;
-    out[i].extID      = 0;
-    out[i].objID      = 0;
-    out[i].catID      = 0;
-    out[i].Mxx 	      = 0.0;
-    out[i].Mxy 	      = 0.0;
-    out[i].Myy        = 0.0;
-    out[i].posangle   = 0;
-    out[i].pltscale   = 0;
-    out[i].psfNdof    = 0;
-    out[i].psfNpix    = 0;
-
-    // added for PS1_V4
-    out[i].Mkron      = NAN;
-    out[i].dMkron     = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -125,4 +105,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
@@ -138,30 +120,14 @@
     out[i].catID 	 = in[i].catID;
 
-    // changed or added for PS1_DEV_2
+    // changed for PS1_DEV_2
     out[i].Nmeasure      = in[i].Nm;     
     out[i].Nmissing      = in[i].Nn;     
     out[i].measureOffset = in[i].offset; 
     out[i].missingOffset = in[i].missing;
-    out[i].Nextend       = 0;
-    out[i].extendOffset  = 0;
-
-    // changed or added for PS1_V1
+
+    // changed for PS1_V1
     out[i].flags    	 = in[i].code;   
-    out[i].ChiSqAve    	 = NAN;
-    out[i].ChiSqPM    	 = NAN;
-    out[i].ChiSqPar    	 = NAN;
-    out[i].Tmean    	 = 0;
-    out[i].Trange   	 = 0;
-    out[i].Npos       	 = 0.0;
-    out[i].extID 	 = 0;
-
-    // added in PS1_V3
-    out[i].photFlagsUpper = 0;
-    out[i].photFlagsLower = 0;
-
-    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
-    out[i].psfQF         = NAN;
-    out[i].psfQFperf     = NAN;
-    out[i].stargal     	 = NAN;
+
+    // PS1_V4 : Xp dropped in V4 onward, was not really used anyway
   }
   return (out);
@@ -210,4 +176,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
     out[i].M     = in[i].M;      
     out[i].dM    = in[i].dM;      
@@ -215,25 +183,4 @@
     out[i].Ncode = in[i].Ncode;
     out[i].Nused = in[i].Nused;
-
-    // changed or added for PS1_V1
-    out[i].M_20  = 0;      
-    out[i].M_80  = 0;      
-
-    // changed or added for PS1_V2
-    out[i].flags = 0;
-
-    // added in PS1_V3
-    out[i].Map         = 0;
-    out[i].Mstdev      = 0;
-    out[i].ubercalDist = 0;
-
-    // added for PS1_V4
-    out[i].Mkron       = NAN;
-    out[i].dMkron      = NAN;
-    out[i].FluxPSF     = NAN;
-    out[i].dFluxPSF    = NAN;
-    out[i].FluxKron    = NAN;
-    out[i].dFluxKron   = NAN;
-    out[i].stackDetectID     = 0;
  }
   return (out);
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_2.c	(revision 34749)
@@ -11,4 +11,5 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
     out[i].dR         = in[i].dR;
     out[i].dD         = in[i].dD;
@@ -41,26 +42,6 @@
     out[i].dbFlags    = in[i].dbFlags;
 
-    // changed or added for PS1_V1
+    // changed for PS1_V1
     out[i].photFlags  = in[i].photFlags | (in[i].dophot << 16);
-    out[i].t_msec     = 0;
-    out[i].extID      = 0;
-    out[i].objID      = 0;
-    out[i].catID      = 0;
-    out[i].Mxx 	      = 0.0;
-    out[i].Mxy 	      = 0.0;
-    out[i].Myy        = 0.0;
-    out[i].posangle   = 0;
-    out[i].pltscale   = 0;
-    out[i].psfNdof    = 0;
-    out[i].psfNpix    = 0;
-
-    // added for PS1_V4
-    out[i].Mkron      = NAN;
-    out[i].dMkron     = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].psfQFperf  = NAN;
  }
   return (out);
@@ -121,4 +102,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
@@ -140,22 +123,6 @@
     out[i].catID 	 = in[i].catID;
 
-    // changed or added for PS1_V1
+    // changed for PS1_V1
     out[i].flags    	 = in[i].code;   
-    out[i].ChiSqAve    	 = NAN;
-    out[i].ChiSqPM    	 = NAN;
-    out[i].ChiSqPar    	 = NAN;
-    out[i].Tmean    	 = 0;
-    out[i].Trange   	 = 0;
-    out[i].Npos       	 = 0.0;
-    out[i].extID 	 = 0;
-
-    // added in PS1_V3
-    out[i].photFlagsUpper = 0;
-    out[i].photFlagsLower = 0;
-
-    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
-    out[i].psfQF         = NAN;
-    out[i].psfQFperf     = NAN;
-    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -204,4 +171,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
     out[i].M     = in[i].M;      
     out[i].dM    = in[i].dM;      
@@ -209,25 +178,4 @@
     out[i].Ncode = in[i].Ncode;
     out[i].Nused = in[i].Nused;
-
-    // changed or added for PS1_V1
-    out[i].M_20  = 0;      
-    out[i].M_80  = 0;      
-
-    // changed or added for PS1_V2
-    out[i].flags = 0;
-
-    // added in PS1_V3
-    out[i].Map         = 0;
-    out[i].Mstdev      = 0;
-    out[i].ubercalDist = 0;
-
-    // added for PS1_V4
-    out[i].Mkron       = NAN;
-    out[i].dMkron      = NAN;
-    out[i].FluxPSF     = NAN;
-    out[i].dFluxPSF    = NAN;
-    out[i].FluxKron    = NAN;
-    out[i].dFluxKron   = NAN;
-    out[i].stackDetectID     = 0;
  }
   return (out);
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_REF.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_REF.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_REF.c	(revision 34749)
@@ -11,54 +11,17 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
+
     out[i].dR         = in[i].dR;
     out[i].dD         = in[i].dD;
     out[i].M          = in[i].M;
-    out[i].Mcal       = 0.0;
-    out[i].Map        = NAN;
     out[i].dM         = in[i].dM;
-    out[i].dMcal      = 0.0;
     out[i].dt         = in[i].dt;
-    out[i].airmass    = NAN;
-    out[i].az         = NAN;
-    out[i].Xccd       = NAN;
-    out[i].Yccd       = NAN;
-    out[i].Sky        = NAN;
-    out[i].dSky       = NAN;
     out[i].t          = in[i].t;
-    out[i].t_msec     = 0;
     out[i].averef     = in[i].averef;
-    out[i].detID      = 0;
-    out[i].imageID    = 0;
     out[i].objID      = in[i].objID;
     out[i].catID      = in[i].catID;
-    out[i].extID      = 0;
     out[i].psfQF      = 1.0; // we do not save a value, but some operations (relphot/average) filter on this value..
-    out[i].psfChisq   = NAN;
-    out[i].psfNdof    = 0;
-    out[i].psfNpix    = 0;
-    out[i].crNsigma   = NAN;
-    out[i].extNsigma  = NAN;
-    out[i].FWx 	      = 0;
-    out[i].FWy 	      = 0;
-    out[i].theta      = 0;
-    out[i].Mxx 	      = 0;
-    out[i].Mxy 	      = 0;
-    out[i].Myy 	      = 0;
-    out[i].dXccd      = 0;
-    out[i].dYccd      = 0;
-    out[i].posangle   = 0;
-    out[i].pltscale   = NAN;
     out[i].photcode   = in[i].photcode;
-    out[i].dbFlags    = 0;
-    out[i].photFlags  = 0;
-
-    // added for PS1_V4
-    out[i].Mkron      = NAN;
-    out[i].dMkron     = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -96,39 +59,16 @@
 
   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       	 = NAN;
-    out[i].uD       	 = NAN;
-    out[i].duR      	 = NAN;
-    out[i].duD      	 = NAN;
-    out[i].P        	 = NAN;
-    out[i].dP       	 = NAN;
-    out[i].ChiSqAve    	 = NAN;
-    out[i].ChiSqPM    	 = NAN;
-    out[i].ChiSqPar    	 = NAN;
-    out[i].Tmean    	 = 0;
-    out[i].Trange   	 = 0;
-    out[i].Npos       	 = 0;
     out[i].Nmeasure      = in[i].Nmeasure;     
     out[i].Nmissing      = in[i].Nmissing;     
-    out[i].Nextend       = 0;
     out[i].measureOffset = in[i].measureOffset; 
     out[i].missingOffset = in[i].missingOffset;
-    out[i].extendOffset  = 0;
-    out[i].flags     	 = 0;
     out[i].objID 	 = in[i].objID;
     out[i].catID 	 = in[i].catID;
-    out[i].extID 	 = 0;
-
-    // added in PS1_V3
-    out[i].photFlagsUpper = 0;
-    out[i].photFlagsLower = 0;
-
-    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
-    out[i].psfQF         = NAN;
-    out[i].psfQFperf     = NAN;
-    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -167,28 +107,8 @@
 
   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].Xm    = NAN_S_SHORT;
-    out[i].Ncode = 0;
-    out[i].Nused = 0;
-    out[i].M_20  = 0;
-    out[i].M_80  = 0;
-
-    // changed or added for PS1_V2
-    out[i].flags = 0;
-
-    // added in PS1_V3
-    out[i].Map         = 0;
-    out[i].Mstdev      = 0;
-    out[i].ubercalDist = 0;
-
-    // added for PS1_V4
-    out[i].Mkron       = NAN;
-    out[i].dMkron      = NAN;
-    out[i].FluxPSF     = NAN;
-    out[i].dFluxPSF    = NAN;
-    out[i].FluxKron    = NAN;
-    out[i].dFluxKron   = NAN;
-    out[i].stackDetectID     = 0;
  }
   return (out);
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V1.c	(revision 34749)
@@ -11,4 +11,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
+
     out[i].dR         = in[i].dR;
     out[i].dD         = in[i].dD;
@@ -52,13 +54,4 @@
     out[i].dbFlags    = in[i].dbFlags;
     out[i].photFlags  = in[i].photFlags;
-
-    // added for PS1_V4
-    out[i].Mkron      = NAN;
-    out[i].dMkron     = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -128,4 +121,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
@@ -139,8 +134,4 @@
     out[i].dP       	 = in[i].dP;
     out[i].ChiSqAve    	 = in[i].ChiSq;     
-    out[i].ChiSqPM    	 = NAN;
-    out[i].ChiSqPar    	 = NAN;
-    out[i].Tmean    	 = 0;
-    out[i].Trange    	 = 0;
     out[i].Npos       	 = in[i].Npos;     
     out[i].Nmeasure      = in[i].Nmeasure;     
@@ -154,13 +145,4 @@
     out[i].catID 	 = in[i].catID;
     out[i].extID 	 = in[i].extID;
-
-    // added in PS1_V3
-    out[i].photFlagsUpper = 0;
-    out[i].photFlagsLower = 0;
-
-    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
-    out[i].psfQF         = NAN;
-    out[i].psfQFperf     = NAN;
-    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -210,4 +192,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
     out[i].M     = in[i].M;      
     out[i].dM    = in[i].dM;      
@@ -217,21 +201,4 @@
     out[i].M_20  = in[i].M_20;      
     out[i].M_80  = in[i].M_80;      
-
-    // changed or added for PS1_V2
-    out[i].flags = 0;
-
-    // added in PS1_V3
-    out[i].Map         = 0;
-    out[i].Mstdev      = 0;
-    out[i].ubercalDist = 0;
-
-    // added for PS1_V4
-    out[i].Mkron       = NAN;
-    out[i].dMkron      = NAN;
-    out[i].FluxPSF     = NAN;
-    out[i].dFluxPSF    = NAN;
-    out[i].FluxKron    = NAN;
-    out[i].dFluxKron   = NAN;
-    out[i].stackDetectID     = 0;
  }
   return (out);
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V2.c	(revision 34749)
@@ -11,4 +11,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
+
     out[i].dR         = in[i].dR;
     out[i].dD         = in[i].dD;
@@ -53,13 +55,4 @@
     out[i].dbFlags    = in[i].dbFlags;
     out[i].photFlags  = in[i].photFlags;
-
-    // added for PS1_V4
-    out[i].Mkron      = NAN;
-    out[i].dMkron     = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -129,4 +122,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
@@ -155,13 +150,4 @@
     out[i].catID 	 = in[i].catID;
     out[i].extID 	 = in[i].extID;
-
-    // added in PS1_V3
-    out[i].photFlagsUpper = 0;
-    out[i].photFlagsLower = 0;
-
-    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
-    out[i].psfQF         = NAN;
-    out[i].psfQFperf     = NAN;
-    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -215,4 +201,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
     out[i].M     = in[i].M;      
     out[i].dM    = in[i].dM;      
@@ -223,18 +211,4 @@
     out[i].M_20  = in[i].M_20;      
     out[i].M_80  = in[i].M_80;      
-
-    // added in PS1_V3
-    out[i].Map         = 0;
-    out[i].Mstdev      = 0;
-    out[i].ubercalDist = 0;
-
-    // added for PS1_V4
-    out[i].Mkron       = NAN;
-    out[i].dMkron      = NAN;
-    out[i].FluxPSF     = NAN;
-    out[i].dFluxPSF    = NAN;
-    out[i].FluxKron    = NAN;
-    out[i].dFluxKron   = NAN;
-    out[i].stackDetectID     = 0;
  }
   return (out);
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V3.c	(revision 34749)
@@ -11,4 +11,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
+
     out[i].dR         = in[i].dR;
     out[i].dD         = in[i].dD;
@@ -53,13 +55,4 @@
     out[i].dbFlags    = in[i].dbFlags;
     out[i].photFlags  = in[i].photFlags;
-
-    // added for PS1_V4
-    out[i].Mkron      = NAN;
-    out[i].dMkron     = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -129,4 +122,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
@@ -157,9 +152,4 @@
     out[i].catID 	 = in[i].catID;
     out[i].extID 	 = in[i].extID;
-
-    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
-    out[i].psfQF         = NAN;
-    out[i].psfQFperf     = NAN;
-    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -215,4 +205,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
     out[i].M           = in[i].M;      
     out[i].Map         = in[i].Map;      
@@ -226,13 +218,4 @@
     out[i].Mstdev      = in[i].Mstdev;      
     out[i].ubercalDist = in[i].ubercalDist;      
-
-    // added for PS1_V4
-    out[i].Mkron       = NAN;
-    out[i].dMkron      = NAN;
-    out[i].FluxPSF     = NAN;
-    out[i].dFluxPSF    = NAN;
-    out[i].FluxKron    = NAN;
-    out[i].dFluxKron   = NAN;
-    out[i].stackDetectID     = 0;
  }
   return (out);
Index: trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_PS1_V4.c	(revision 34749)
@@ -9,4 +9,69 @@
 
   ALLOCATE_ZERO (out, Measure, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
+
+    out[i].dR         = in[i].dR;
+    out[i].dD         = in[i].dD;
+    out[i].M          = in[i].M;
+    out[i].Mcal       = in[i].Mcal;
+    out[i].Map        = in[i].Map;
+    out[i].Mkron      = in[i].Mkron;
+    out[i].dMkron     = in[i].dMkron;
+    out[i].dM         = in[i].dM;
+    out[i].dMcal      = in[i].dMcal;
+    out[i].dt         = in[i].dt;
+    out[i].FluxPSF    = in[i].FluxPSF;
+    out[i].dFluxPSF   = in[i].dFluxPSF;
+    out[i].FluxKron   = in[i].FluxKron;
+    out[i].dFluxKron  = in[i].dFluxKron;
+    out[i].airmass    = in[i].airmass;
+    out[i].az         = in[i].az;
+    out[i].Xccd       = in[i].Xccd;
+    out[i].Yccd       = in[i].Yccd;
+    out[i].Xoff       = in[i].Xoff;
+    out[i].Yoff       = in[i].Yoff;
+    out[i].Sky        = in[i].Sky;
+    out[i].dSky       = in[i].dSky;
+    out[i].t          = in[i].t;
+    out[i].t_msec     = in[i].t_msec;
+    out[i].averef     = in[i].averef;
+    out[i].detID      = in[i].detID;
+    out[i].imageID    = in[i].imageID;
+    out[i].objID      = in[i].objID;
+    out[i].catID      = in[i].catID;
+    out[i].extID      = in[i].extID;
+    out[i].psfQF      = in[i].psfQF;
+    out[i].psfQFperf  = in[i].psfQFperf;
+    out[i].psfChisq   = in[i].psfChisq;
+    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;
+    out[i].FWy 	      = in[i].FWy;
+    out[i].theta      = in[i].theta;
+    out[i].Mxx 	      = in[i].Mxx;
+    out[i].Mxy 	      = in[i].Mxy;
+    out[i].Myy 	      = in[i].Myy;
+    out[i].dXccd      = in[i].dXccd;
+    out[i].dYccd      = in[i].dYccd;
+    out[i].dRsys      = in[i].dRsys;
+    out[i].posangle   = in[i].posangle;
+    out[i].pltscale   = in[i].pltscale;
+    out[i].photcode   = in[i].photcode;
+    out[i].dbFlags    = in[i].dbFlags;
+    out[i].photFlags  = in[i].photFlags;
+  }
+  return (out);
+}
+
+Measure_PS1_V4 *MeasureInternalTo_PS1_V4 (Measure *in, off_t Nvalues) {
+
+  off_t i;
+  Measure_PS1_V4 *out;
+
+  ALLOCATE_ZERO (out, Measure_PS1_V4, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -64,65 +129,4 @@
 }
 
-Measure_PS1_V4 *MeasureInternalTo_PS1_V4 (Measure *in, off_t Nvalues) {
-
-  off_t i;
-  Measure_PS1_V4 *out;
-
-  ALLOCATE_ZERO (out, Measure_PS1_V4, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    out[i].dR         = in[i].dR;
-    out[i].dD         = in[i].dD;
-    out[i].M          = in[i].M;
-    out[i].Mcal       = in[i].Mcal;
-    out[i].Map        = in[i].Map;
-    out[i].Mkron      = in[i].Mkron;
-    out[i].dMkron     = in[i].dMkron;
-    out[i].dM         = in[i].dM;
-    out[i].dMcal      = in[i].dMcal;
-    out[i].dt         = in[i].dt;
-    out[i].FluxPSF    = in[i].FluxPSF;
-    out[i].dFluxPSF   = in[i].dFluxPSF;
-    out[i].FluxKron   = in[i].FluxKron;
-    out[i].dFluxKron  = in[i].dFluxKron;
-    out[i].airmass    = in[i].airmass;
-    out[i].az         = in[i].az;
-    out[i].Xccd       = in[i].Xccd;
-    out[i].Yccd       = in[i].Yccd;
-    out[i].Sky        = in[i].Sky;
-    out[i].dSky       = in[i].dSky;
-    out[i].t          = in[i].t;
-    out[i].t_msec     = in[i].t_msec;
-    out[i].averef     = in[i].averef;
-    out[i].detID      = in[i].detID;
-    out[i].imageID    = in[i].imageID;
-    out[i].objID      = in[i].objID;
-    out[i].catID      = in[i].catID;
-    out[i].extID      = in[i].extID;
-    out[i].psfQF      = in[i].psfQF;
-    out[i].psfQFperf  = in[i].psfQFperf;
-    out[i].psfChisq   = in[i].psfChisq;
-    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;
-    out[i].FWy 	      = in[i].FWy;
-    out[i].theta      = in[i].theta;
-    out[i].Mxx 	      = in[i].Mxx;
-    out[i].Mxy 	      = in[i].Mxy;
-    out[i].Myy 	      = in[i].Myy;
-    out[i].dXccd      = in[i].dXccd;
-    out[i].dYccd      = in[i].dYccd;
-    out[i].dRsys      = in[i].dRsys;
-    out[i].posangle   = in[i].posangle;
-    out[i].pltscale   = in[i].pltscale;
-    out[i].photcode   = in[i].photcode;
-    out[i].dbFlags    = in[i].dbFlags;
-    out[i].photFlags  = in[i].photFlags;
-  }
-  return (out);
-}
-
 // 'primary' is needed to conform with the API for Loneos and Elixir, but is not used
 Average *Average_PS1_V4_ToInternal (Average_PS1_V4 *in, off_t Nvalues, SecFilt **primary) {
@@ -134,4 +138,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
@@ -221,4 +227,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
     out[i].M             = in[i].M;      
     out[i].Map           = in[i].Map;      
Index: trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c	(revision 34749)
@@ -10,4 +10,5 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
     out[i].FWx 	    = in[i].FWx;
     out[i].t        = in[i].t;
@@ -28,49 +29,17 @@
     
     // added for PANSTARRS_DEV_0
-    out[i].Xccd      = 0;  // determine on-the-fly
-    out[i].Yccd      = 0;  // determine on-the-fly
-    out[i].dXccd     = 0;
-    out[i].dYccd     = 0;
-    out[i].az        = 0;
-    out[i].Sky       = 0;
-    out[i].dSky      = 0;
-    out[i].psfQF     = 0;
-    out[i].psfChisq  = 0;
-    out[i].crNsigma  = 0;
-    out[i].extNsigma = 0;
-    out[i].detID     = 0;  // determine on-the-fly
-    out[i].imageID   = 0;  // determine on-the-fly
-
-    // changed or added for PS1_DEV_1 (2008.02.26)
+    // out[i].Xccd      = 0;  // determine on-the-fly
+    // out[i].Yccd      = 0;  // determine on-the-fly
+    // out[i].detID     = 0;  // determine on-the-fly
+    // out[i].imageID   = 0;  // determine on-the-fly
+
+    // changed for PS1_DEV_1 (2008.02.26)
     out[i].dbFlags    = in[i].flags;
-    out[i].detID      = 0;
-    out[i].imageID    = 0;
-
-    // changed or added for PS1_DEV_2
+
+    // changed for PS1_DEV_2
     out[i].Map        = in[i].Mgal;
-    out[i].dMcal      = 0; 
-
-    // changed or added for PS1_V1
+
+    // changed for PS1_V1
     out[i].photFlags  = in[i].dophot << 16;
-    out[i].t_msec     = 0;
-    out[i].extID      = 0;
-    out[i].objID      = 0;
-    out[i].catID      = 0;
-    out[i].Mxx 	      = 0.0;
-    out[i].Mxy 	      = 0.0;
-    out[i].Myy        = 0.0;
-    out[i].posangle   = 0;
-    out[i].pltscale   = 0;
-    out[i].psfNdof    = 0;
-    out[i].psfNpix    = 0;
-
-    // added for PS1_V4
-    out[i].Mkron      = NAN;
-    out[i].dMkron     = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -126,4 +95,7 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+    dvo_secfilt_init (&primary[0][i]);
+
     out[i].R       	 = in[i].R;      
     out[i].D       	 = in[i].D;      
@@ -134,18 +106,7 @@
     primary[0][i].Xm    = in[i].Xm;     
 
-    primary[0][i].Ncode = 0;     
-    primary[0][i].Nused = 0;
-
     // added for PANSTARRS_DEV_0
-    out[i].dR      = 0;
-    out[i].dD      = 0;
-    out[i].uR      = 0;
-    out[i].uD      = 0;
-    out[i].duR     = 0;
-    out[i].duD     = 0;
-    out[i].P       = 0;
-    out[i].dP      = 0;
-    out[i].objID   = 0; // determine on-the-fly
-    out[i].catID   = 0; // determine on-the-fly
+    // out[i].objID   = 0; // determine on-the-fly
+    // out[i].catID   = 0; // determine on-the-fly
 
     // changed or added for PS1_DEV_2
@@ -154,25 +115,7 @@
     out[i].measureOffset = in[i].offset; 
     out[i].missingOffset = in[i].missing;
-    out[i].Nextend       = 0;
-    out[i].extendOffset  = 0;
 
     // changed or added for PS1_V1
     out[i].flags    	 = in[i].code;   
-    out[i].ChiSqAve    	 = NAN;
-    out[i].ChiSqPM    	 = NAN;
-    out[i].ChiSqPar    	 = NAN;
-    out[i].Tmean    	 = 0;
-    out[i].Trange   	 = 0;
-    out[i].Npos       	 = 0.0;
-    out[i].extID 	 = 0;
-
-    // added in PS1_V3
-    out[i].photFlagsUpper = 0;
-    out[i].photFlagsLower = 0;
-
-    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
-    out[i].psfQF         = NAN;
-    out[i].psfQFperf     = NAN;
-    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -217,4 +160,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
     out[i].Xm    = in[i].Xm;     
 
@@ -222,27 +167,4 @@
     out[i].M     = (in[i].M  == NAN_S_SHORT) ? NAN : in[i].M   * 0.001;
     out[i].dM    = (in[i].dM == NAN_S_SHORT) ? NAN : in[i].dM  * 0.001;
-    out[i].Ncode = 0;
-    out[i].Nused = 0;
-
-    // changed or added for PS1_V1
-    out[i].M_20  = 0;      
-    out[i].M_80  = 0;      
-
-    // changed or added for PS1_V2
-    out[i].flags = 0;
-
-    // added in PS1_V3
-    out[i].Map         = 0;
-    out[i].Mstdev      = 0;
-    out[i].ubercalDist = 0;
-
-    // added for PS1_V4
-    out[i].Mkron       = NAN;
-    out[i].dMkron      = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].stackDetectID     = 0;
   }
   return (out);
Index: trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c	(revision 34749)
@@ -10,4 +10,5 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
     out[i].t        = in[i].t;
 
@@ -16,9 +17,4 @@
     out[i].dbFlags   = (in[i].averef & 0xff000000) >> 24;
     out[i].t         = in[i].t;
-    out[i].dt        = 0;
-    out[i].airmass   = 0;
-    out[i].FWy 	     = 0;
-    out[i].FWx       = 0;
-    out[i].theta     = 0;
 
     // changed for PANSTARRS_DEV_0
@@ -32,47 +28,11 @@
     
     // added for PANSTARRS_DEV_0
-    out[i].Xccd      = 0;  // determine on-the-fly
-    out[i].Yccd      = 0;  // determine on-the-fly
-    out[i].dXccd     = 0;
-    out[i].dYccd     = 0;
-    out[i].az        = 0;
-    out[i].Sky       = 0;
-    out[i].dSky      = 0;
-    out[i].psfQF     = 0;
-    out[i].psfChisq  = 0;
-    out[i].crNsigma  = 0;
-    out[i].extNsigma = 0;
-    out[i].detID     = 0;  // determine on-the-fly
-    out[i].imageID   = 0;  // determine on-the-fly
-
-    // changed or added for PS1_DEV_1 (2008.02.26)
-    out[i].detID      = 0;
-    out[i].imageID    = 0;
-
-    // changed or added for PS1_DEV_2
-    out[i].dMcal      = 0; 
+    // out[i].Xccd      = 0;  // determine on-the-fly
+    // out[i].Yccd      = 0;  // determine on-the-fly
+    // out[i].detID     = 0;  // determine on-the-fly
+    // out[i].imageID   = 0;  // determine on-the-fly
 
     // changed or added for PS1_V1
     out[i].photFlags  = in[i].dophot << 16;
-    out[i].t_msec     = 0;
-    out[i].extID      = 0;
-    out[i].objID      = 0;
-    out[i].catID      = 0;
-    out[i].Mxx 	      = 0.0;
-    out[i].Mxy 	      = 0.0;
-    out[i].Myy        = 0.0;
-    out[i].posangle   = 0;
-    out[i].pltscale   = 0;
-    out[i].psfNdof    = 0;
-    out[i].psfNpix    = 0;
-
-    // added for PS1_V4
-    out[i].Mkron      = NAN;
-    out[i].dMkron     = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -117,27 +77,17 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+    dvo_secfilt_init (&primary[0][i]);
+
     out[i].R       	 = in[i].R;      
     out[i].D       	 = in[i].D;      
-
-    // added for ELIXIR
-    primary[0][i].dM    = NAN;
 
     // changed for PANSTARRS_DEV_0 (moved from Average to Measure)
     primary[0][i].M     = (in[i].M  == NAN_S_SHORT) ? NAN : in[i].M  * 0.001;      
     primary[0][i].Xm    = in[i].Xm;     
-    primary[0][i].Ncode = 0;     
-    primary[0][i].Nused = 0;
 
     // added for PANSTARRS_DEV_0
-    out[i].dR      = 0;
-    out[i].dD      = 0;
-    out[i].uR      = 0;
-    out[i].uD      = 0;
-    out[i].duR     = 0;
-    out[i].duD     = 0;
-    out[i].P       = 0;
-    out[i].dP      = 0;
-    out[i].objID   = 0; // determine on-the-fly
-    out[i].catID   = 0; // determine on-the-fly
+    // out[i].objID   = 0; // determine on-the-fly
+    // out[i].catID   = 0; // determine on-the-fly
 
     // changed or added for PS1_DEV_2
@@ -146,25 +96,9 @@
     out[i].measureOffset = in[i].offset; 
     out[i].missingOffset = in[i].missing;
-    out[i].Nextend       = 0;
-    out[i].extendOffset  = 0;
 
     // changed or added for PS1_V1
     out[i].flags    	 = in[i].code;   
-    out[i].ChiSqAve    	 = NAN;
-    out[i].ChiSqPM    	 = NAN;
-    out[i].ChiSqPar    	 = NAN;
-    out[i].Tmean    	 = 0;
-    out[i].Trange   	 = 0;
-    out[i].Npos       	 = 0.0;
-    out[i].extID 	 = 0;
-
-    // added in PS1_V3
-    out[i].photFlagsUpper = 0;
-    out[i].photFlagsLower = 0;
-
-    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
-    out[i].psfQF         = NAN;
-    out[i].psfQFperf     = NAN;
-    out[i].stargal     	 = NAN;
+
+    // PS1_V4 : (Xp dropped in V4 onward, was not really used anyway)
   }
   return (out);
@@ -208,34 +142,10 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
     out[i].Xm    = in[i].Xm;      
 
-    // added for ELIXIR
-    out[i].dM    = NAN;
-
     // added or changed for PANSTARRS_DEV_0
     out[i].M     = (in[i].M  == NAN_S_SHORT) ? NAN : in[i].M * 0.001;
-    out[i].Ncode = 0;
-    out[i].Nused = 0;
-
-    // changed or added for PS1_V1
-    out[i].M_20  = 0;      
-    out[i].M_80  = 0;      
-
-    // changed or added for PS1_V2
-    out[i].flags = 0;
-
-    // added in PS1_V3
-    out[i].Map         = 0;
-    out[i].Mstdev      = 0;
-    out[i].ubercalDist = 0;
-
-    // added for PS1_V4
-    out[i].Mkron       = NAN;
-    out[i].dMkron      = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].stackDetectID     = 0;
   }
   return (out);
Index: trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_0.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_0.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_0.c	(revision 34749)
@@ -10,4 +10,5 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
     out[i].dR         = in[i].dR;
     out[i].dD         = in[i].dD;
@@ -35,39 +36,15 @@
     // magnitudes.  Most uses of Mgal in the past were actually aperture (isophotal) mags
 
-    // changed or added for PS1_DEV_1 (2008.02.26)
+    // changed for PS1_DEV_1 (2008.02.26)
     out[i].psfQF      = (in[i].psfQF == NAN_S_SHORT) ? NAN : in[i].psfQF;
     out[i].dbFlags    = in[i].flags;
     out[i].detID      = in[i].detID_lo;
     out[i].imageID    = in[i].imageID_lo;
-    out[i].psfChisq   = 0;
-    out[i].crNsigma   = 0;
-    out[i].extNsigma  = 0;
-
-    // changed or added for PS1_DEV_2
+
+    // changed for PS1_DEV_2
     out[i].Map        = in[i].Mgal;
-    out[i].dMcal      = 0; 
-
-    // changed or added for PS1_V1
+
+    // changed for PS1_V1
     out[i].photFlags  = in[i].dophot << 16;
-    out[i].t_msec     = 0;
-    out[i].extID      = 0;
-    out[i].objID      = 0;
-    out[i].catID      = 0;
-    out[i].Mxx 	      = 0.0;
-    out[i].Mxy 	      = 0.0;
-    out[i].Myy        = 0.0;
-    out[i].posangle   = 0;
-    out[i].pltscale   = 0;
-    out[i].psfNdof    = 0;
-    out[i].psfNpix    = 0;
-
-    // added for PS1_V4
-    out[i].Mkron      = NAN;
-    out[i].dMkron     = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -132,4 +109,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
@@ -145,30 +124,12 @@
     out[i].catID 	 = in[i].catID;
 
-    // changed or added for PS1_DEV_2
+    // changed for PS1_DEV_2
     out[i].Nmeasure      = in[i].Nm;     
     out[i].Nmissing      = in[i].Nn;     
     out[i].measureOffset = in[i].offset; 
     out[i].missingOffset = in[i].missing;
-    out[i].Nextend       = 0;
-    out[i].extendOffset  = 0;
-
-    // changed or added for PS1_V1
+
+    // changed for PS1_V1
     out[i].flags    	 = in[i].code;   
-    out[i].ChiSqAve    	 = NAN;
-    out[i].ChiSqPM    	 = NAN;
-    out[i].ChiSqPar    	 = NAN;
-    out[i].Tmean    	 = 0;
-    out[i].Trange   	 = 0;
-    out[i].Npos       	 = 0.0;
-    out[i].extID 	 = 0;
-
-    // added in PS1_V3
-    out[i].photFlagsUpper = 0;
-    out[i].photFlagsLower = 0;
-
-    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
-    out[i].psfQF         = NAN;
-    out[i].psfQFperf     = NAN;
-    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -219,4 +180,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
     out[i].M     = in[i].M;      
     out[i].dM    = in[i].dM;      
@@ -224,25 +187,4 @@
     out[i].Ncode = in[i].Ncode;
     out[i].Nused = in[i].Nused;
-
-    // changed or added for PS1_V1
-    out[i].M_20  = 0;      
-    out[i].M_80  = 0;      
-
-    // changed or added for PS1_V2
-    out[i].flags = 0;
-
-    // added in PS1_V3
-    out[i].Map         = 0;
-    out[i].Mstdev      = 0;
-    out[i].ubercalDist = 0;
-
-    // added for PS1_V4
-    out[i].Mkron       = NAN;
-    out[i].dMkron      = NAN;
-    out[i].FluxPSF     = NAN;
-    out[i].dFluxPSF    = NAN;
-    out[i].FluxKron    = NAN;
-    out[i].dFluxKron   = NAN;
-    out[i].stackDetectID     = 0;
  }
   return (out);
Index: trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_1.c
===================================================================
--- trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_1.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_1.c	(revision 34749)
@@ -10,4 +10,5 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_measure_init (&out[i]);
     out[i].dR         = in[i].dR;
     out[i].dD         = in[i].dD;
@@ -40,34 +41,10 @@
     out[i].detID      = in[i].detID_lo;
     out[i].imageID    = in[i].imageID_lo;
-    out[i].psfChisq   = 0;
-    out[i].crNsigma   = 0;
-    out[i].extNsigma  = 0;
-
-    // changed or added for PS1_DEV_2
+
+    // changed for PS1_DEV_2
     out[i].Map        = in[i].Mgal;
-    out[i].dMcal      = 0; 
-
-    // changed or added for PS1_V1
+
+    // changed for PS1_V1
     out[i].photFlags  = in[i].dophot << 16;
-    out[i].t_msec     = 0;
-    out[i].extID      = 0;
-    out[i].objID      = 0;
-    out[i].catID      = 0;
-    out[i].Mxx 	      = 0.0;
-    out[i].Mxy 	      = 0.0;
-    out[i].Myy        = 0.0;
-    out[i].posangle   = 0;
-    out[i].pltscale   = 0;
-    out[i].psfNdof    = 0;
-    out[i].psfNpix    = 0;
-
-    // added for PS1_V4
-    out[i].Mkron      = NAN;
-    out[i].dMkron     = NAN;
-    out[i].FluxPSF    = NAN;
-    out[i].dFluxPSF   = NAN;
-    out[i].FluxKron   = NAN;
-    out[i].dFluxKron  = NAN;
-    out[i].psfQFperf  = NAN;
   }
   return (out);
@@ -132,4 +109,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_average_init (&out[i]);
+
     out[i].R        	 = in[i].R;      
     out[i].D        	 = in[i].D;      
@@ -145,30 +124,12 @@
     out[i].catID 	 = in[i].catID;
 
-    // changed or added for PS1_DEV_2
+    // changed for PS1_DEV_2
     out[i].Nmeasure      = in[i].Nm;     
     out[i].Nmissing      = in[i].Nn;     
     out[i].measureOffset = in[i].offset; 
     out[i].missingOffset = in[i].missing;
-    out[i].Nextend       = 0;
-    out[i].extendOffset  = 0;
-
-    // changed or added for PS1_V1
+
+    // changed for PS1_V1
     out[i].flags    	 = in[i].code;   
-    out[i].ChiSqAve    	 = NAN;
-    out[i].ChiSqPM    	 = NAN;
-    out[i].ChiSqPar    	 = NAN;
-    out[i].Tmean    	 = 0;
-    out[i].Trange    	 = 0;
-    out[i].Npos       	 = 0.0;
-    out[i].extID 	 = 0;
-
-    // added in PS1_V3
-    out[i].photFlagsUpper = 0;
-    out[i].photFlagsLower = 0;
-
-    // added for PS1_V4 (Xp dropped in V4 onward, was not really used anyway)
-    out[i].psfQF         = NAN;
-    out[i].psfQFperf     = NAN;
-    out[i].stargal     	 = NAN;
   }
   return (out);
@@ -219,4 +180,6 @@
 
   for (i = 0; i < Nvalues; i++) {
+    dvo_secfilt_init (&out[i]);
+
     out[i].M     = in[i].M;      
     out[i].dM    = in[i].dM;      
@@ -224,25 +187,4 @@
     out[i].Ncode = in[i].Ncode;
     out[i].Nused = in[i].Nused;
-
-    // changed or added for PS1_V1
-    out[i].M_20  = 0;      
-    out[i].M_80  = 0;      
-
-    // changed or added for PS1_V2
-    out[i].flags = 0;
-
-    // added in PS1_V3
-    out[i].Map         = 0;
-    out[i].Mstdev      = 0;
-    out[i].ubercalDist = 0;
-
-    // added for PS1_V4
-    out[i].Mkron       = NAN;
-    out[i].dMkron      = NAN;
-    out[i].FluxPSF     = NAN;
-    out[i].dFluxPSF    = NAN;
-    out[i].FluxKron    = NAN;
-    out[i].dFluxKron   = NAN;
-    out[i].stackDetectID     = 0;
  }
   return (out);
Index: trunk/Ohana/src/libdvo/src/fits_db.c
===================================================================
--- trunk/Ohana/src/libdvo/src/fits_db.c	(revision 34717)
+++ trunk/Ohana/src/libdvo/src/fits_db.c	(revision 34749)
@@ -159,4 +159,10 @@
   make_backup (db[0].filename);
   Fseek (db[0].f, 0, SEEK_SET);
+
+  int fd = fileno (db->f);
+  if (ftruncate (fd, 0)) {
+    perror ("gfits_db_save: ");
+    return (FALSE);
+  }
 
   if (!gfits_fwrite_header  (db[0].f, &db[0].header)) {
