Index: /trunk/Ohana/src/libdvo/Makefile
===================================================================
--- /trunk/Ohana/src/libdvo/Makefile	(revision 15034)
+++ /trunk/Ohana/src/libdvo/Makefile	(revision 15035)
@@ -24,5 +24,12 @@
 libdvo: $(LIB)/libdvo.$(ARCH).a $(LIB)/libdvo.$(ARCH).$(DLLTYPE)
 
-INCS = $(DESTINC)/dvo.h $(DESTINC)/autocode.h
+DEFS = \
+$(DESTINC)/loneos_defs.h \
+$(DESTINC)/elixir_defs.h \
+$(DESTINC)/panstarrs_dev_0_defs.h \
+$(DESTINC)/panstarrs_dev_1_defs.h \
+$(DESTINC)/ps1_dev_1_defs.h
+
+INCS = $(DEFS) $(DESTINC)/dvo.h $(DESTINC)/autocode.h
 
 OBJS = \
@@ -52,4 +59,5 @@
 $(SRC)/dvo_convert_panstarrs_DEV_0.$(ARCH).o \
 $(SRC)/dvo_convert_panstarrs_DEV_1.$(ARCH).o \
+$(SRC)/dvo_convert_PS1_DEV_1.$(ARCH).o \
 $(SRC)/skyregion_io.$(ARCH).o    \
 $(SRC)/skyregion_gsc.$(ARCH).o    \
Index: /trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/dvo.h	(revision 15034)
+++ /trunk/Ohana/src/libdvo/include/dvo.h	(revision 15035)
@@ -19,11 +19,10 @@
 /* DVO table formats */
 typedef enum {DVO_FORMAT_UNDEF, 
-      DVO_FORMAT_INTERNAL, 
-      DVO_FORMAT_ELIXIR, 
-      DVO_FORMAT_LONEOS, 
-      DVO_FORMAT_PANSTARRS, 
-      DVO_FORMAT_PMTEST, 
-      DVO_FORMAT_PANSTARRS_DEV_0,
-      DVO_FORMAT_PANSTARRS_DEV_1
+	      DVO_FORMAT_INTERNAL, 
+	      DVO_FORMAT_ELIXIR, 
+	      DVO_FORMAT_LONEOS, 
+	      DVO_FORMAT_PANSTARRS_DEV_0,
+	      DVO_FORMAT_PANSTARRS_DEV_1,
+	      DVO_FORMAT_PS1_DEV_1
 } DVOTableFormat;
 
@@ -33,18 +32,18 @@
 
 typedef enum {
-    PROJ_NONE, // undefined
-    PROJ_ZEA, // zenithal
-    PROJ_ZPL, // zenithal
-    PROJ_ARC, // zenithal
-    PROJ_STG, // zenithal
-    PROJ_SIN, // zenithal
-    PROJ_TAN, // zenithal
-    PROJ_DIS, // zenithal (TAN + polyterms)
-    PROJ_LIN, // cartesian
-    PROJ_PLY, // cartesian
-    PROJ_WRP, // cartesian
-    PROJ_AIT, // pseudocyl
-    PROJ_GLS, // pseudocyl
-    PROJ_PAR, // pseudocyl
+  PROJ_NONE, // undefined
+  PROJ_ZEA, // zenithal
+  PROJ_ZPL, // zenithal
+  PROJ_ARC, // zenithal
+  PROJ_STG, // zenithal
+  PROJ_SIN, // zenithal
+  PROJ_TAN, // zenithal
+  PROJ_DIS, // zenithal (TAN + polyterms)
+  PROJ_LIN, // cartesian
+  PROJ_PLY, // cartesian
+  PROJ_WRP, // cartesian
+  PROJ_AIT, // pseudocyl
+  PROJ_GLS, // pseudocyl
+  PROJ_PAR, // pseudocyl
 } OhanaProjection;
 
@@ -294,4 +293,5 @@
 int GetPhotcodeNsecfilt ();
 void SetZeroPoint (double ZP);
+double GetZeroPoint ();
 int *GetPhotcodeEquivList (int code, int *nlist);
 void ParseColorTerms (char *terms, float *X, int *N);
@@ -354,51 +354,9 @@
 int ImageToVtable (VTable *vtable, Header *theader, int format);
 
-Image 		       *ImageElixirToInternal (ImageElixir *in, int Nvalues);
-Image 		       *ImageLoneosToInternal (ImageLoneos *in, int Nvalues);
-Image 		       *ImagePanstarrsToInternal (ImagePanstarrs *in, int Nvalues);
-Image 		       *ImagePanstarrs_DEV_0_ToInternal (ImagePanstarrs_DEV_0 *in, int Nvalues);
-Image 		       *ImagePanstarrs_DEV_1_ToInternal (ImagePanstarrs_DEV_1 *in, int Nvalues);
-
-ImageElixir 	       *ImageInternalToElixir (Image *in, int Nvalues);
-ImageLoneos 	       *ImageInternalToLoneos (Image *in, int Nvalues);
-ImagePanstarrs         *ImageInternalToPanstarrs (Image *in, int Nvalues);
-ImagePanstarrs_DEV_0   *ImageInternalToPanstarrs_DEV_0 (Image *in, int Nvalues);
-ImagePanstarrs_DEV_1   *ImageInternalToPanstarrs_DEV_1 (Image *in, int Nvalues);
-
-Average                *AverageLoneosToInternal (AverageLoneos *in, int Nvalues, SecFilt **primary);
-Average 	       *AverageElixirToInternal (AverageElixir *in, int Nvalues, SecFilt **primary);
-Average 	       *AveragePanstarrsToInternal (AveragePanstarrs *in, int Nvalues);
-Average 	       *AveragePanstarrs_DEV_0_ToInternal (AveragePanstarrs_DEV_0 *in, int Nvalues);
-Average 	       *AveragePanstarrs_DEV_1_ToInternal (AveragePanstarrs_DEV_1 *in, int Nvalues);
-
-AverageLoneos 	       *AverageInternalToLoneos (Average *in, int Nvalues, SecFilt *primary);
-AverageElixir 	       *AverageInternalToElixir (Average *in, int Nvalues, SecFilt *primary);
-AveragePanstarrs       *AverageInternalToPanstarrs (Average *in, int Nvalues);
-AveragePanstarrs_DEV_0 *AverageInternalToPanstarrs_DEV_0 (Average *in, int Nvalues);
-AveragePanstarrs_DEV_1 *AverageInternalToPanstarrs_DEV_1 (Average *in, int Nvalues);
-
-Measure                *MeasureLoneosToInternal (MeasureLoneos *in, int Nvalues);
-Measure 	       *MeasureElixirToInternal (MeasureElixir *in, int Nvalues);
-Measure 	       *MeasurePanstarrsToInternal (MeasurePanstarrs *in, int Nvalues);
-Measure 	       *MeasurePanstarrs_DEV_0_ToInternal (MeasurePanstarrs_DEV_0 *in, int Nvalues);
-Measure 	       *MeasurePanstarrs_DEV_1_ToInternal (MeasurePanstarrs_DEV_1 *in, int Nvalues);
-
-MeasureLoneos 	       *MeasureInternalToLoneos (Measure *in, int Nvalues);
-MeasureElixir 	       *MeasureInternalToElixir (Measure *in, int Nvalues);
-MeasurePanstarrs       *MeasureInternalToPanstarrs (Measure *in, int Nvalues);
-MeasurePanstarrs_DEV_0 *MeasureInternalToPanstarrs_DEV_0 (Measure *in, int Nvalues);
-MeasurePanstarrs_DEV_1 *MeasureInternalToPanstarrs_DEV_1 (Measure *in, int Nvalues);
-
-SecFilt 	       *SecFiltLoneosToInternal (SecFiltLoneos *in, int Nvalues);
-SecFilt 	       *SecFiltElixirToInternal (SecFiltElixir *in, int Nvalues);
-SecFilt 	       *SecFiltPanstarrsToInternal (SecFiltPanstarrs *in, int Nvalues);
-SecFilt 	       *SecFiltPanstarrs_DEV_0_ToInternal (SecFiltPanstarrs_DEV_0 *in, int Nvalues);
-SecFilt 	       *SecFiltPanstarrs_DEV_1_ToInternal (SecFiltPanstarrs_DEV_1 *in, int Nvalues);
-
-SecFiltLoneos 	       *SecFiltInternalToLoneos (SecFilt *in, int Nvalues);
-SecFiltElixir 	       *SecFiltInternalToElixir (SecFilt *in, int Nvalues);
-SecFiltPanstarrs       *SecFiltInternalToPanstarrs (SecFilt *in, int Nvalues);
-SecFiltPanstarrs_DEV_0 *SecFiltInternalToPanstarrs_DEV_0 (SecFilt *in, int Nvalues);
-SecFiltPanstarrs_DEV_1 *SecFiltInternalToPanstarrs_DEV_1 (SecFilt *in, int Nvalues);
+# include "loneos_defs.h"
+# include "elixir_defs.h"
+# include "panstarrs_dev_0_defs.h"
+# include "panstarrs_dev_1_defs.h"
+# include "ps1_dev_1_defs.h"
 
 /*** DVO image db I/O Functions ***/
Index: /trunk/Ohana/src/libdvo/include/elixir_defs.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/elixir_defs.h	(revision 15035)
+++ /trunk/Ohana/src/libdvo/include/elixir_defs.h	(revision 15035)
@@ -0,0 +1,8 @@
+Image 		       	*Image_Elixir_ToInternal (Image_Elixir *in, int Nvalues);
+Image_Elixir 	       	*ImageInternalTo_Elixir (Image *in, int Nvalues);
+Average 	       	*Average_Elixir_ToInternal (Average_Elixir *in, int Nvalues, SecFilt **primary);
+Average_Elixir 	        *AverageInternalTo_Elixir (Average *in, int Nvalues, SecFilt *primary);
+Measure 	       	*Measure_Elixir_ToInternal (Measure_Elixir *in, int Nvalues);
+Measure_Elixir 	        *MeasureInternalTo_Elixir (Measure *in, int Nvalues);
+SecFilt 	       	*SecFilt_Elixir_ToInternal (SecFilt_Elixir *in, int Nvalues);
+SecFilt_Elixir 	       	*SecFiltInternalTo_Elixir (SecFilt *in, int Nvalues);
Index: /trunk/Ohana/src/libdvo/include/loneos_defs.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/loneos_defs.h	(revision 15035)
+++ /trunk/Ohana/src/libdvo/include/loneos_defs.h	(revision 15035)
@@ -0,0 +1,8 @@
+Image 		       	*Image_Loneos_ToInternal (Image_Loneos *in, int Nvalues);
+Image_Loneos 	       	*ImageInternalTo_Loneos (Image *in, int Nvalues);
+Average                	*Average_Loneos_ToInternal (Average_Loneos *in, int Nvalues, SecFilt **primary);
+Average_Loneos 	        *AverageInternalTo_Loneos (Average *in, int Nvalues, SecFilt *primary);
+Measure                	*Measure_Loneos_ToInternal (Measure_Loneos *in, int Nvalues);
+Measure_Loneos 	        *MeasureInternalTo_Loneos (Measure *in, int Nvalues);
+SecFilt 	       	*SecFilt_Loneos_ToInternal (SecFilt_Loneos *in, int Nvalues);
+SecFilt_Loneos 	       	*SecFiltInternalTo_Loneos (SecFilt *in, int Nvalues);
Index: /trunk/Ohana/src/libdvo/include/panstarrs_dev_0_defs.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/panstarrs_dev_0_defs.h	(revision 15035)
+++ /trunk/Ohana/src/libdvo/include/panstarrs_dev_0_defs.h	(revision 15035)
@@ -0,0 +1,8 @@
+Image 		       	*Image_Panstarrs_DEV_0_ToInternal (Image_Panstarrs_DEV_0 *in, int Nvalues);
+Image_Panstarrs_DEV_0  	*ImageInternalTo_Panstarrs_DEV_0 (Image *in, int Nvalues);
+Average 	       	*Average_Panstarrs_DEV_0_ToInternal (Average_Panstarrs_DEV_0 *in, int Nvalues, SecFilt **primary);
+Average_Panstarrs_DEV_0 *AverageInternalTo_Panstarrs_DEV_0 (Average *in, int Nvalues, SecFilt *primary);
+Measure 	       	*Measure_Panstarrs_DEV_0_ToInternal (Measure_Panstarrs_DEV_0 *in, int Nvalues);
+Measure_Panstarrs_DEV_0 *MeasureInternalTo_Panstarrs_DEV_0 (Measure *in, int Nvalues);
+SecFilt 	       	*SecFilt_Panstarrs_DEV_0_ToInternal (SecFilt_Panstarrs_DEV_0 *in, int Nvalues);
+SecFilt_Panstarrs_DEV_0 *SecFiltInternalTo_Panstarrs_DEV_0 (SecFilt *in, int Nvalues);
Index: /trunk/Ohana/src/libdvo/include/panstarrs_dev_1_defs.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/panstarrs_dev_1_defs.h	(revision 15035)
+++ /trunk/Ohana/src/libdvo/include/panstarrs_dev_1_defs.h	(revision 15035)
@@ -0,0 +1,8 @@
+Image 		       	*Image_Panstarrs_DEV_1_ToInternal (Image_Panstarrs_DEV_1 *in, int Nvalues);
+Image_Panstarrs_DEV_1  	*ImageInternalTo_Panstarrs_DEV_1 (Image *in, int Nvalues);
+Average 	       	*Average_Panstarrs_DEV_1_ToInternal (Average_Panstarrs_DEV_1 *in, int Nvalues, SecFilt **primary);
+Average_Panstarrs_DEV_1 *AverageInternalTo_Panstarrs_DEV_1 (Average *in, int Nvalues, SecFilt *primary);
+Measure 	       	*Measure_Panstarrs_DEV_1_ToInternal (Measure_Panstarrs_DEV_1 *in, int Nvalues);
+Measure_Panstarrs_DEV_1 *MeasureInternalTo_Panstarrs_DEV_1 (Measure *in, int Nvalues);
+SecFilt 	       	*SecFilt_Panstarrs_DEV_1_ToInternal (SecFilt_Panstarrs_DEV_1 *in, int Nvalues);
+SecFilt_Panstarrs_DEV_1 *SecFiltInternalTo_Panstarrs_DEV_1 (SecFilt *in, int Nvalues);
Index: /trunk/Ohana/src/libdvo/include/ps1_dev_1_defs.h
===================================================================
--- /trunk/Ohana/src/libdvo/include/ps1_dev_1_defs.h	(revision 15035)
+++ /trunk/Ohana/src/libdvo/include/ps1_dev_1_defs.h	(revision 15035)
@@ -0,0 +1,8 @@
+Image 		       	*Image_PS1_DEV_1_ToInternal (Image_PS1_DEV_1 *in, int Nvalues);
+Image_PS1_DEV_1  	*ImageInternalTo_PS1_DEV_1 (Image *in, int Nvalues);
+Average 	       	*Average_PS1_DEV_1_ToInternal (Average_PS1_DEV_1 *in, int Nvalues, SecFilt **primary);
+Average_PS1_DEV_1       *AverageInternalTo_PS1_DEV_1 (Average *in, int Nvalues, SecFilt *primary);
+Measure 	       	*Measure_PS1_DEV_1_ToInternal (Measure_PS1_DEV_1 *in, int Nvalues);
+Measure_PS1_DEV_1       *MeasureInternalTo_PS1_DEV_1 (Measure *in, int Nvalues);
+SecFilt 	       	*SecFilt_PS1_DEV_1_ToInternal (SecFilt_PS1_DEV_1 *in, int Nvalues);
+SecFilt_PS1_DEV_1       *SecFiltInternalTo_PS1_DEV_1 (SecFilt *in, int Nvalues);
Index: /trunk/Ohana/src/libdvo/src/dvo_catalog.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 15034)
+++ /trunk/Ohana/src/libdvo/src/dvo_catalog.c	(revision 15035)
@@ -45,11 +45,10 @@
   
   /* set the specified CATFORMAT */
-  if (!strcasecmp (catformat, "INTERNAL"))  return (DVO_FORMAT_INTERNAL);
-  if (!strcasecmp (catformat, "LONEOS"))    return (DVO_FORMAT_LONEOS);
-  if (!strcasecmp (catformat, "ELIXIR"))    return (DVO_FORMAT_ELIXIR);
-  if (!strcasecmp (catformat, "PANSTARRS")) return (DVO_FORMAT_PANSTARRS);
-  if (!strcasecmp (catformat, "PMTEST"))    return (DVO_FORMAT_PMTEST);
+  if (!strcasecmp (catformat, "INTERNAL"))        return (DVO_FORMAT_INTERNAL);
+  if (!strcasecmp (catformat, "LONEOS"))    	  return (DVO_FORMAT_LONEOS);
+  if (!strcasecmp (catformat, "ELIXIR"))    	  return (DVO_FORMAT_ELIXIR);
   if (!strcasecmp (catformat, "PANSTARRS_DEV_0")) return (DVO_FORMAT_PANSTARRS_DEV_0);
   if (!strcasecmp (catformat, "PANSTARRS_DEV_1")) return (DVO_FORMAT_PANSTARRS_DEV_1);
+  if (!strcasecmp (catformat, "PS1_DEV_1"))       return (DVO_FORMAT_PS1_DEV_1);
   return (DVO_FORMAT_UNDEF);
 }
Index: /trunk/Ohana/src/libdvo/src/dvo_catalog_raw.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_catalog_raw.c	(revision 15034)
+++ /trunk/Ohana/src/libdvo/src/dvo_catalog_raw.c	(revision 15035)
@@ -50,48 +50,34 @@
   return (FALSE);
 
+// this macro generates the case statements for each type
+# define FORMAT_CASE(NAME,TYPE) \
+  case DVO_FORMAT_##NAME: { \
+    AverageSize = sizeof(Average_##TYPE); \
+    MeasureSize = sizeof(Measure_##TYPE); \
+    SecFiltSize = sizeof(SecFilt_##TYPE); \
+    break; }
+
 got_format:
   /* determine datatype sizes */
   switch (catalog[0].catformat) {
-    case DVO_FORMAT_INTERNAL:
+    case DVO_FORMAT_INTERNAL: {
       AverageSize = sizeof(Average);
       MeasureSize = sizeof(Measure);
       SecFiltSize = sizeof(SecFilt);
       break;
-    case DVO_FORMAT_LONEOS:
-      AverageSize = sizeof(AverageLoneos);
-      MeasureSize = sizeof(MeasureLoneos);
-      SecFiltSize = sizeof(SecFiltLoneos);
-      break;
-    case DVO_FORMAT_ELIXIR:
-      AverageSize = sizeof(AverageElixir);
-      MeasureSize = sizeof(MeasureElixir);
-      SecFiltSize = sizeof(SecFiltElixir);
-      break;
-    case DVO_FORMAT_PANSTARRS_DEV_0:
-      AverageSize = sizeof(AveragePanstarrs_DEV_0);
-      MeasureSize = sizeof(MeasurePanstarrs_DEV_0);
-      SecFiltSize = sizeof(SecFiltPanstarrs_DEV_0);
-      break;
-    case DVO_FORMAT_PANSTARRS_DEV_1:
-      AverageSize = sizeof(AveragePanstarrs_DEV_1);
-      MeasureSize = sizeof(MeasurePanstarrs_DEV_1);
-      SecFiltSize = sizeof(SecFiltPanstarrs_DEV_1);
-      break;
-# if 0
-    case DVO_FORMAT_PANSTARRS:
-      AverageSize = sizeof(AveragePanstarrs);
-      MeasureSize = sizeof(MeasurePanstarrs);
-      SecFiltSize = sizeof(SecFiltPanstarrs);
-      break;
-    case DVO_FORMAT_PMTEST:
-      AverageSize = sizeof(AveragePMtest);
-      MeasureSize = sizeof(MeasurePanstarrs);
-      SecFiltSize = sizeof(SecFiltPanstarrs);
-      break;
-# endif
+    }
+
+      FORMAT_CASE (LONEOS, Loneos);
+      FORMAT_CASE (ELIXIR, Elixir);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1, PS1_DEV_1);
+
     default:
       fprintf (stderr, "programming error in phot_catalog_raw\n");
       exit (2);
   }
+# undef FORMAT_CASE
+
   MissingSize = sizeof (Missing);
 
@@ -263,11 +249,10 @@
 
   /* specify the appropriate data format */
-  if (catalog[0].catformat == DVO_FORMAT_INTERNAL)  gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "INTERNAL");
-  if (catalog[0].catformat == DVO_FORMAT_LONEOS)    gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "LONEOS");
-  if (catalog[0].catformat == DVO_FORMAT_ELIXIR)    gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "ELIXIR");
+  if (catalog[0].catformat == DVO_FORMAT_INTERNAL)  	  gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "INTERNAL");
+  if (catalog[0].catformat == DVO_FORMAT_LONEOS)    	  gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "LONEOS");
+  if (catalog[0].catformat == DVO_FORMAT_ELIXIR)    	  gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "ELIXIR");
   if (catalog[0].catformat == DVO_FORMAT_PANSTARRS_DEV_0) gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "PANSTARRS_DEV_0");
   if (catalog[0].catformat == DVO_FORMAT_PANSTARRS_DEV_1) gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "PANSTARRS_DEV_1");
-  // if (catalog[0].catformat == DVO_FORMAT_PANSTARRS) gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "PANSTARRS");
-  // if (catalog[0].catformat == DVO_FORMAT_PMTEST)    gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "PMTEST");
+  if (catalog[0].catformat == DVO_FORMAT_PS1_DEV_1)       gfits_modify (&catalog[0].header, "FORMAT", "%s", 1, "PS1_DEV_1");
 
   /* rewind file pointers and truncate file */
@@ -322,15 +307,32 @@
 /** Average / Raw Table conversions **/
 
+/* in the Elixir and Loneos cases, we are supplied with an average magnitude in Average
+   in these cases, save these values in primary; otherwise set primary to NULL */
+
 Average *ReadRawAverage (FILE *f, int Naverage, int format, SecFilt **primary) {
 
-  int nitems;
   Average *average;
 
-  /* in the Elixir and Loneos cases, we are supplied with an average magnitude in Average
-     in these cases, save these values in primary; otherwise set primary to NULL */
   *primary = NULL;
 
+// this macro generates the case statements for each type
+# define FORMAT_CASE(NAME,TYPE) \
+    case DVO_FORMAT_##NAME: { \
+      int nitems; \
+      Average_##TYPE *tmpAverage; \
+      ALLOCATE (tmpAverage, Average_##TYPE, MAX (Naverage, 1)); \
+      nitems = fread (tmpAverage, sizeof(Average_##TYPE), Naverage, f); \
+      if (nitems != Naverage) { \
+	fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage); \
+	return (NULL); \
+      } \
+      gfits_convert_Average_##TYPE (tmpAverage, sizeof(Average_##TYPE), Naverage); \
+      average = Average_##TYPE##_ToInternal (tmpAverage, Naverage, primary); \
+      free (tmpAverage); \
+      break; } \
+
   switch (format) {
     case DVO_FORMAT_INTERNAL: {
+      int nitems;
       ALLOCATE (average, Average, MAX (Naverage, 1));
       nitems = fread (average, sizeof(Average), Naverage, f);
@@ -341,82 +343,17 @@
       gfits_convert_Average (average, sizeof(Average), Naverage);
       break; }
-    case DVO_FORMAT_ELIXIR: {
-      AverageElixir *tmpAverage;
-      ALLOCATE (tmpAverage, AverageElixir, MAX (Naverage, 1));
-      nitems = fread (tmpAverage, sizeof(AverageElixir), Naverage, f);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
-	return (NULL);
-      }
-      gfits_convert_AverageElixir (tmpAverage, sizeof(AverageElixir), Naverage);
-      average = AverageElixirToInternal (tmpAverage, Naverage, primary);
-      free (tmpAverage);
-      break; }
-    case DVO_FORMAT_LONEOS: {
-      AverageLoneos *tmpAverage;
-      ALLOCATE (tmpAverage, AverageLoneos, MAX (Naverage, 1));
-      nitems = fread (tmpAverage, sizeof(AverageLoneos), Naverage, f);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
-	return (NULL);
-      }
-      gfits_convert_AverageLoneos (tmpAverage, sizeof(AverageLoneos), Naverage);
-      average = AverageLoneosToInternal (tmpAverage, Naverage, primary);
-      free (tmpAverage);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      AveragePanstarrs_DEV_0 *tmpAverage;
-      ALLOCATE (tmpAverage, AveragePanstarrs_DEV_0, MAX (Naverage, 1));
-      nitems = fread (tmpAverage, sizeof(AveragePanstarrs_DEV_0), Naverage, f);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
-	return (NULL);
-      }
-      gfits_convert_AveragePanstarrs_DEV_0 (tmpAverage, sizeof(AveragePanstarrs_DEV_0), Naverage);
-      average = AveragePanstarrs_DEV_0_ToInternal (tmpAverage, Naverage);
-      free (tmpAverage);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      AveragePanstarrs_DEV_1 *tmpAverage;
-      ALLOCATE (tmpAverage, AveragePanstarrs_DEV_1, MAX (Naverage, 1));
-      nitems = fread (tmpAverage, sizeof(AveragePanstarrs_DEV_1), Naverage, f);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
-	return (NULL);
-      }
-      gfits_convert_AveragePanstarrs_DEV_1 (tmpAverage, sizeof(AveragePanstarrs_DEV_1), Naverage);
-      average = AveragePanstarrs_DEV_1_ToInternal (tmpAverage, Naverage);
-      free (tmpAverage);
-      break; }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      AveragePanstarrs *tmpAverage;
-      ALLOCATE (tmpAverage, AveragePanstarrs, MAX (Naverage, 1));
-      nitems = fread (tmpAverage, sizeof(AveragePanstarrs), Naverage, f);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
-	return (NULL);
-      }
-      gfits_convert_AveragePanstarrs (tmpAverage, sizeof(AveragePanstarrs), Naverage);
-      average = AveragePanstarrsToInternal (tmpAverage, Naverage);
-      free (tmpAverage);
-      break; }
-    case DVO_FORMAT_PMTEST: {
-      AveragePMtest *tmpAverage;
-      ALLOCATE (tmpAverage, AveragePMtest, MAX (Naverage, 1));
-      nitems = fread (tmpAverage, sizeof(AveragePMtest), Naverage, f);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to read averages (%d vs %d)\n", nitems, Naverage);
-	return (NULL);
-      }
-      gfits_convert_AveragePMtest (tmpAverage, sizeof(AveragePMtest), Naverage);
-      average = AveragePMtestToInternal (tmpAverage, Naverage);
-      free (tmpAverage);
-      break; }
-# endif
+
+      FORMAT_CASE (LONEOS, Loneos);
+      FORMAT_CASE (ELIXIR, Elixir);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1, PS1_DEV_1);
+
     default:
       fprintf (stderr, "error reading measures\n");
       return (NULL);
   }
+# undef FORMAT_CASE
+
   return (average);
 }
@@ -426,8 +363,22 @@
 int WriteRawAverage (FILE *f, Average *average, int Naverage, int format, SecFilt *primary) {
 
-  int nitems;
+// this macro generates the case statements for each type
+# define FORMAT_CASE(NAME,TYPE) \
+    case DVO_FORMAT_##NAME: { \
+      int nitems; \
+      Average_##TYPE *tmpAverage; \
+      tmpAverage = AverageInternalTo_##TYPE (average, Naverage, primary); \
+      gfits_convert_Average_##TYPE (tmpAverage, sizeof(Average_##TYPE), Naverage); \
+      nitems = fwrite (tmpAverage, sizeof(Average_##TYPE), Naverage, f); \
+      free (tmpAverage); \
+      if (nitems != Naverage) { \
+	fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage); \
+	return (FALSE); \
+      } \
+      break; }
 
   switch (format) {
     case DVO_FORMAT_INTERNAL: {
+      int nitems;
       gfits_convert_Average (average, sizeof(Average), Naverage);
       nitems = fwrite (average, sizeof(Average), Naverage, f);
@@ -437,76 +388,17 @@
       }
       break; }
-    case DVO_FORMAT_ELIXIR: {
-      AverageElixir *tmpAverage;
-      tmpAverage = AverageInternalToElixir (average, Naverage, primary);
-      gfits_convert_AverageElixir (tmpAverage, sizeof(AverageElixir), Naverage);
-      nitems = fwrite (tmpAverage, sizeof(AverageElixir), Naverage, f);
-      free (tmpAverage);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
-	return (FALSE);
-      }
-      break; }
-    case DVO_FORMAT_LONEOS: {
-      AverageLoneos *tmpAverage;
-      tmpAverage = AverageInternalToLoneos (average, Naverage, primary);
-      gfits_convert_AverageLoneos (tmpAverage, sizeof(AverageLoneos), Naverage);
-      nitems = fwrite (tmpAverage, sizeof(AverageLoneos), Naverage, f);
-      free (tmpAverage);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
-	return (FALSE);
-      }
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      AveragePanstarrs_DEV_0 *tmpAverage;
-      tmpAverage = AverageInternalToPanstarrs_DEV_0 (average, Naverage);
-      gfits_convert_AveragePanstarrs_DEV_0 (tmpAverage, sizeof(AveragePanstarrs_DEV_0), Naverage);
-      nitems = fwrite (tmpAverage, sizeof(AveragePanstarrs_DEV_0), Naverage, f);
-      free (tmpAverage);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
-	return (FALSE);
-      }
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      AveragePanstarrs_DEV_1 *tmpAverage;
-      tmpAverage = AverageInternalToPanstarrs_DEV_1 (average, Naverage);
-      gfits_convert_AveragePanstarrs_DEV_1 (tmpAverage, sizeof(AveragePanstarrs_DEV_1), Naverage);
-      nitems = fwrite (tmpAverage, sizeof(AveragePanstarrs_DEV_1), Naverage, f);
-      free (tmpAverage);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
-	return (FALSE);
-      }
-      break; }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      AveragePanstarrs *tmpAverage;
-      tmpAverage = AverageInternalToPanstarrs (average, Naverage);
-      gfits_convert_AveragePanstarrs (tmpAverage, sizeof(AveragePanstarrs), Naverage);
-      nitems = fwrite (tmpAverage, sizeof(AveragePanstarrs), Naverage, f);
-      free (tmpAverage);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
-	return (FALSE);
-      }
-      break; }
-    case DVO_FORMAT_PMTEST: {
-      AveragePMtest *tmpAverage;
-      tmpAverage = AverageInternalToPMtest (average, Naverage);
-      gfits_convert_AveragePMtest (tmpAverage, sizeof(AveragePMtest), Naverage);
-      nitems = fwrite (tmpAverage, sizeof(AveragePMtest), Naverage, f);
-      free (tmpAverage);
-      if (nitems != Naverage) {
-	fprintf (stderr, "failed to write averages (%d vs %d)\n", nitems, Naverage);
-	return (FALSE);
-      }
-      break; }
-# endif
+
+      FORMAT_CASE (LONEOS, Loneos);
+      FORMAT_CASE (ELIXIR, Elixir);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1, PS1_DEV_1);
+
     default:
       fprintf (stderr, "error writing averages\n");
       return (FALSE);
   }
+# undef FORMAT_CASE
+
   return (TRUE);
 }
@@ -516,9 +408,25 @@
 Measure *ReadRawMeasure (FILE *f, int Nmeasure, int format) {
 
-  int nitems;
   Measure *measure;
 
+// this macro generates the case statements for each type
+# define FORMAT_CASE(NAME,TYPE) \
+    case DVO_FORMAT_##NAME: { \
+      int nitems; \
+      Measure_##TYPE *tmpMeasure; \
+      ALLOCATE (tmpMeasure, Measure_##TYPE, MAX (Nmeasure, 1)); \
+      nitems = fread (tmpMeasure, sizeof(Measure_##TYPE), Nmeasure, f); \
+      if (nitems != Nmeasure) { \
+	fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure); \
+	return (NULL); \
+      } \
+      gfits_convert_Measure_##TYPE (tmpMeasure, sizeof(Measure_##TYPE), Nmeasure); \
+      measure = Measure_##TYPE##_ToInternal (tmpMeasure, Nmeasure); \
+      free (tmpMeasure); \
+      break; }
+
   switch (format) {
     case DVO_FORMAT_INTERNAL: {
+      int nitems;
       ALLOCATE (measure, Measure, MAX (Nmeasure, 1));
       nitems = fread (measure, sizeof(Measure), Nmeasure, f);
@@ -529,70 +437,17 @@
       gfits_convert_Measure (measure, sizeof(Measure), Nmeasure);
       break; }
-    case DVO_FORMAT_ELIXIR: {
-      MeasureElixir *tmpMeasure;
-      ALLOCATE (tmpMeasure, MeasureElixir, MAX (Nmeasure, 1));
-      nitems = fread (tmpMeasure, sizeof(MeasureElixir), Nmeasure, f);
-      if (nitems != Nmeasure) {
-	fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
-	return (NULL);
-      }
-      gfits_convert_MeasureElixir (tmpMeasure, sizeof(MeasureElixir), Nmeasure);
-      measure = MeasureElixirToInternal (tmpMeasure, Nmeasure);
-      free (tmpMeasure);
-      break; }
-    case DVO_FORMAT_LONEOS: {
-      MeasureLoneos *tmpMeasure;
-      ALLOCATE (tmpMeasure, MeasureLoneos, MAX (Nmeasure, 1));
-      nitems = fread (tmpMeasure, sizeof(MeasureLoneos), Nmeasure, f);
-      if (nitems != Nmeasure) {
-	fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
-	return (NULL);
-      }
-      gfits_convert_MeasureLoneos (tmpMeasure, sizeof(MeasureLoneos), Nmeasure);
-      measure = MeasureLoneosToInternal (tmpMeasure, Nmeasure);
-      free (tmpMeasure);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      MeasurePanstarrs_DEV_0 *tmpMeasure;
-      ALLOCATE (tmpMeasure, MeasurePanstarrs_DEV_0, MAX (Nmeasure, 1));
-      nitems = fread (tmpMeasure, sizeof(MeasurePanstarrs_DEV_0), Nmeasure, f);
-      if (nitems != Nmeasure) {
-	fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
-	return (NULL);
-      }
-      gfits_convert_MeasurePanstarrs_DEV_0 (tmpMeasure, sizeof(MeasurePanstarrs_DEV_0), Nmeasure);
-      measure = MeasurePanstarrs_DEV_0_ToInternal (tmpMeasure, Nmeasure);
-      free (tmpMeasure);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      MeasurePanstarrs_DEV_1 *tmpMeasure;
-      ALLOCATE (tmpMeasure, MeasurePanstarrs_DEV_1, MAX (Nmeasure, 1));
-      nitems = fread (tmpMeasure, sizeof(MeasurePanstarrs_DEV_1), Nmeasure, f);
-      if (nitems != Nmeasure) {
-	fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
-	return (NULL);
-      }
-      gfits_convert_MeasurePanstarrs_DEV_1 (tmpMeasure, sizeof(MeasurePanstarrs_DEV_1), Nmeasure);
-      measure = MeasurePanstarrs_DEV_1_ToInternal (tmpMeasure, Nmeasure);
-      free (tmpMeasure);
-      break; }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      MeasurePanstarrs *tmpMeasure;
-      ALLOCATE (tmpMeasure, MeasurePanstarrs, MAX (Nmeasure, 1));
-      nitems = fread (tmpMeasure, sizeof(MeasurePanstarrs), Nmeasure, f);
-      if (nitems != Nmeasure) {
-	fprintf (stderr, "failed to read measures (%d vs %d)\n", nitems, Nmeasure);
-	return (NULL);
-      }
-      gfits_convert_MeasurePanstarrs (tmpMeasure, sizeof(MeasurePanstarrs), Nmeasure);
-      measure = MeasurePanstarrsToInternal (tmpMeasure, Nmeasure);
-      free (tmpMeasure);
-      break; }
-# endif
+
+      FORMAT_CASE (LONEOS, Loneos);
+      FORMAT_CASE (ELIXIR, Elixir);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1, PS1_DEV_1);
+
     default:
       fprintf (stderr, "error reading measures\n");
       return (NULL);
   }
+# undef FORMAT_CASE
+
   return (measure);
 }
@@ -602,8 +457,22 @@
 int WriteRawMeasure (FILE *f, Measure *measure, int Nmeasure, int format) {
 
-  int nitems;
+// this macro generates the case statements for each type
+# define FORMAT_CASE(NAME,TYPE) \
+    case DVO_FORMAT_##NAME: { \
+      int nitems; \
+      Measure_##TYPE *tmpMeasure; \
+      tmpMeasure = MeasureInternalTo_##TYPE (measure, Nmeasure); \
+      gfits_convert_Measure_##TYPE (tmpMeasure, sizeof(Measure_##TYPE), Nmeasure); \
+      nitems = fwrite (tmpMeasure, sizeof(Measure_##TYPE), Nmeasure, f); \
+      free (tmpMeasure); \
+      if (nitems != Nmeasure) { \
+	fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure); \
+	return (FALSE); \
+      } \
+      break; }
 
   switch (format) {
     case DVO_FORMAT_INTERNAL: {
+      int nitems;
       gfits_convert_Measure (measure, sizeof(Measure), Nmeasure);
       nitems = fwrite (measure, sizeof(Measure), Nmeasure, f);
@@ -613,65 +482,17 @@
       }
       break; }
-    case DVO_FORMAT_ELIXIR: {
-      MeasureElixir *tmpMeasure;
-      tmpMeasure = MeasureInternalToElixir (measure, Nmeasure);
-      gfits_convert_MeasureElixir (tmpMeasure, sizeof(MeasureElixir), Nmeasure);
-      nitems = fwrite (tmpMeasure, sizeof(MeasureElixir), Nmeasure, f);
-      free (tmpMeasure);
-      if (nitems != Nmeasure) {
-	fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
-	return (FALSE);
-      }
-      break; }
-    case DVO_FORMAT_LONEOS: {
-      MeasureLoneos *tmpMeasure;
-      tmpMeasure = MeasureInternalToLoneos (measure, Nmeasure);
-      gfits_convert_MeasureLoneos (tmpMeasure, sizeof(MeasureLoneos), Nmeasure);
-      nitems = fwrite (tmpMeasure, sizeof(MeasureLoneos), Nmeasure, f);
-      free (tmpMeasure);
-      if (nitems != Nmeasure) {
-	fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
-	return (FALSE);
-      }
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      MeasurePanstarrs_DEV_0 *tmpMeasure;
-      tmpMeasure = MeasureInternalToPanstarrs_DEV_0 (measure, Nmeasure);
-      gfits_convert_MeasurePanstarrs_DEV_0 (tmpMeasure, sizeof(MeasurePanstarrs_DEV_0), Nmeasure);
-      nitems = fwrite (tmpMeasure, sizeof(MeasurePanstarrs_DEV_0), Nmeasure, f);
-      free (tmpMeasure);
-      if (nitems != Nmeasure) {
-	fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
-	return (FALSE);
-      }
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      MeasurePanstarrs_DEV_1 *tmpMeasure;
-      tmpMeasure = MeasureInternalToPanstarrs_DEV_1 (measure, Nmeasure);
-      gfits_convert_MeasurePanstarrs_DEV_1 (tmpMeasure, sizeof(MeasurePanstarrs_DEV_1), Nmeasure);
-      nitems = fwrite (tmpMeasure, sizeof(MeasurePanstarrs_DEV_1), Nmeasure, f);
-      free (tmpMeasure);
-      if (nitems != Nmeasure) {
-	fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
-	return (FALSE);
-      }
-      break; }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      MeasurePanstarrs *tmpMeasure;
-      tmpMeasure = MeasureInternalToPanstarrs (measure, Nmeasure);
-      gfits_convert_MeasurePanstarrs (tmpMeasure, sizeof(MeasurePanstarrs), Nmeasure);
-      nitems = fwrite (tmpMeasure, sizeof(MeasurePanstarrs), Nmeasure, f);
-      free (tmpMeasure);
-      if (nitems != Nmeasure) {
-	fprintf (stderr, "failed to write measures (%d vs %d)\n", nitems, Nmeasure);
-	return (FALSE);
-      }
-      break; }
-# endif
+
+      FORMAT_CASE (LONEOS, Loneos);
+      FORMAT_CASE (ELIXIR, Elixir);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1, PS1_DEV_1);
+
     default:
       fprintf (stderr, "error writing measures\n");
       return (FALSE);
   }
+# undef FORMAT_CASE
+
   return (TRUE);
 }
@@ -681,9 +502,25 @@
 SecFilt *ReadRawSecFilt (FILE *f, int Nsecfilt, int format) {
 
-  int nitems;
   SecFilt *secfilt;
 
+// this macro generates the case statements for each type
+# define FORMAT_CASE(NAME,TYPE) \
+    case DVO_FORMAT_##NAME: { \
+      int nitems; \
+      SecFilt_##TYPE *tmpSecFilt; \
+      ALLOCATE (tmpSecFilt, SecFilt_##TYPE, MAX (Nsecfilt, 1)); \
+      nitems = fread (tmpSecFilt, sizeof(SecFilt_##TYPE), Nsecfilt, f); \
+      if (nitems != Nsecfilt) { \
+	fprintf (stderr, "failed to read secfilts (%d vs %d)\n", nitems, Nsecfilt); \
+	return (NULL); \
+      } \
+      gfits_convert_SecFilt_##TYPE (tmpSecFilt, sizeof(SecFilt_##TYPE), Nsecfilt); \
+      secfilt = SecFilt_##TYPE##_ToInternal (tmpSecFilt, Nsecfilt); \
+      free (tmpSecFilt); \
+      break; }
+
   switch (format) {
     case DVO_FORMAT_INTERNAL: {
+      int nitems;
       ALLOCATE (secfilt, SecFilt, MAX (Nsecfilt, 1));
       nitems = fread (secfilt, sizeof(SecFilt), Nsecfilt, f);
@@ -694,70 +531,17 @@
       gfits_convert_SecFilt (secfilt, sizeof(SecFilt), Nsecfilt);
       break; }
-    case DVO_FORMAT_ELIXIR: {
-      SecFiltElixir *tmpSecFilt;
-      ALLOCATE (tmpSecFilt, SecFiltElixir, MAX (Nsecfilt, 1));
-      nitems = fread (tmpSecFilt, sizeof(SecFiltElixir), Nsecfilt, f);
-      if (nitems != Nsecfilt) {
-	fprintf (stderr, "failed to read secfilts (%d vs %d)\n", nitems, Nsecfilt);
-	return (NULL);
-      }
-      gfits_convert_SecFiltElixir (tmpSecFilt, sizeof(SecFiltElixir), Nsecfilt);
-      secfilt = SecFiltElixirToInternal (tmpSecFilt, Nsecfilt);
-      free (tmpSecFilt);
-      break; }
-    case DVO_FORMAT_LONEOS: {
-      SecFiltLoneos *tmpSecFilt;
-      ALLOCATE (tmpSecFilt, SecFiltLoneos, MAX (Nsecfilt, 1));
-      nitems = fread (tmpSecFilt, sizeof(SecFiltLoneos), Nsecfilt, f);
-      if (nitems != Nsecfilt) {
-	fprintf (stderr, "failed to read secfilts (%d vs %d)\n", nitems, Nsecfilt);
-	return (NULL);
-      }
-      gfits_convert_SecFiltLoneos (tmpSecFilt, sizeof(SecFiltLoneos), Nsecfilt);
-      secfilt = SecFiltLoneosToInternal (tmpSecFilt, Nsecfilt);
-      free (tmpSecFilt);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      SecFiltPanstarrs_DEV_0 *tmpSecFilt;
-      ALLOCATE (tmpSecFilt, SecFiltPanstarrs_DEV_0, MAX (Nsecfilt, 1));
-      nitems = fread (tmpSecFilt, sizeof(SecFiltPanstarrs_DEV_0), Nsecfilt, f);
-      if (nitems != Nsecfilt) {
-	fprintf (stderr, "failed to read secfilts (%d vs %d)\n", nitems, Nsecfilt);
-	return (NULL);
-      }
-      gfits_convert_SecFiltPanstarrs_DEV_0 (tmpSecFilt, sizeof(SecFiltPanstarrs_DEV_0), Nsecfilt);
-      secfilt = SecFiltPanstarrs_DEV_0_ToInternal (tmpSecFilt, Nsecfilt);
-      free (tmpSecFilt);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      SecFiltPanstarrs_DEV_1 *tmpSecFilt;
-      ALLOCATE (tmpSecFilt, SecFiltPanstarrs_DEV_1, MAX (Nsecfilt, 1));
-      nitems = fread (tmpSecFilt, sizeof(SecFiltPanstarrs_DEV_1), Nsecfilt, f);
-      if (nitems != Nsecfilt) {
-	fprintf (stderr, "failed to read secfilts (%d vs %d)\n", nitems, Nsecfilt);
-	return (NULL);
-      }
-      gfits_convert_SecFiltPanstarrs_DEV_1 (tmpSecFilt, sizeof(SecFiltPanstarrs_DEV_1), Nsecfilt);
-      secfilt = SecFiltPanstarrs_DEV_1_ToInternal (tmpSecFilt, Nsecfilt);
-      free (tmpSecFilt);
-      break; }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      SecFiltPanstarrs *tmpSecFilt;
-      ALLOCATE (tmpSecFilt, SecFiltPanstarrs, MAX (Nsecfilt, 1));
-      nitems = fread (tmpSecFilt, sizeof(SecFiltPanstarrs), Nsecfilt, f);
-      if (nitems != Nsecfilt) {
-	fprintf (stderr, "failed to read secfilts (%d vs %d)\n", nitems, Nsecfilt);
-	return (NULL);
-      }
-      gfits_convert_SecFiltPanstarrs (tmpSecFilt, sizeof(SecFiltPanstarrs), Nsecfilt);
-      secfilt = SecFiltPanstarrsToInternal (tmpSecFilt, Nsecfilt);
-      free (tmpSecFilt);
-      break; }
-# endif
+
+      FORMAT_CASE (LONEOS, Loneos);
+      FORMAT_CASE (ELIXIR, Elixir);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1, PS1_DEV_1);
+
     default:
       fprintf (stderr, "error reading measures\n");
       return (NULL);
   }
+# undef FORMAT_CASE
+
   return (secfilt);
 }
@@ -767,8 +551,22 @@
 int WriteRawSecFilt (FILE *f, SecFilt *secfilt, int Nsecfilt, int format) {
 
-  int nitems;
+// this macro generates the case statements for each type
+# define FORMAT_CASE(NAME,TYPE) \
+    case DVO_FORMAT_##NAME: { \
+      int nitems; \
+      SecFilt_##TYPE *tmpSecFilt; \
+      tmpSecFilt = SecFiltInternalTo_##TYPE (secfilt, Nsecfilt); \
+      gfits_convert_SecFilt_##TYPE (tmpSecFilt, sizeof(SecFilt_##TYPE), Nsecfilt); \
+      nitems = fwrite (tmpSecFilt, sizeof(SecFilt_##TYPE), Nsecfilt, f); \
+      free (tmpSecFilt); \
+      if (nitems != Nsecfilt) { \
+	fprintf (stderr, "failed to write secfilts (%d vs %d)\n", nitems, Nsecfilt); \
+	return (FALSE); \
+      } \
+      break; }
 
   switch (format) {
     case DVO_FORMAT_INTERNAL: {
+      int nitems;
       gfits_convert_SecFilt (secfilt, sizeof(SecFilt), Nsecfilt);
       nitems = fwrite (secfilt, sizeof(SecFilt), Nsecfilt, f);
@@ -778,65 +576,17 @@
       }
       break; }
-    case DVO_FORMAT_ELIXIR: {
-      SecFiltElixir *tmpSecFilt;
-      tmpSecFilt = SecFiltInternalToElixir (secfilt, Nsecfilt);
-      gfits_convert_SecFiltElixir (tmpSecFilt, sizeof(SecFiltElixir), Nsecfilt);
-      nitems = fwrite (tmpSecFilt, sizeof(SecFiltElixir), Nsecfilt, f);
-      free (tmpSecFilt);
-      if (nitems != Nsecfilt) {
-	fprintf (stderr, "failed to write secfilts (%d vs %d)\n", nitems, Nsecfilt);
-	return (FALSE);
-      }
-      break; }
-    case DVO_FORMAT_LONEOS: {
-      SecFiltLoneos *tmpSecFilt;
-      tmpSecFilt = SecFiltInternalToLoneos (secfilt, Nsecfilt);
-      gfits_convert_SecFiltLoneos (tmpSecFilt, sizeof(SecFiltLoneos), Nsecfilt);
-      nitems = fwrite (tmpSecFilt, sizeof(SecFiltLoneos), Nsecfilt, f);
-      free (tmpSecFilt);
-      if (nitems != Nsecfilt) {
-	fprintf (stderr, "failed to write secfilts (%d vs %d)\n", nitems, Nsecfilt);
-	return (FALSE);
-      }
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      SecFiltPanstarrs_DEV_0 *tmpSecFilt;
-      tmpSecFilt = SecFiltInternalToPanstarrs_DEV_0 (secfilt, Nsecfilt);
-      gfits_convert_SecFiltPanstarrs_DEV_0 (tmpSecFilt, sizeof(SecFiltPanstarrs_DEV_0), Nsecfilt);
-      nitems = fwrite (tmpSecFilt, sizeof(SecFiltPanstarrs_DEV_0), Nsecfilt, f);
-      free (tmpSecFilt);
-      if (nitems != Nsecfilt) {
-	fprintf (stderr, "failed to write secfilts (%d vs %d)\n", nitems, Nsecfilt);
-	return (FALSE);
-      }
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      SecFiltPanstarrs_DEV_1 *tmpSecFilt;
-      tmpSecFilt = SecFiltInternalToPanstarrs_DEV_1 (secfilt, Nsecfilt);
-      gfits_convert_SecFiltPanstarrs_DEV_1 (tmpSecFilt, sizeof(SecFiltPanstarrs_DEV_1), Nsecfilt);
-      nitems = fwrite (tmpSecFilt, sizeof(SecFiltPanstarrs_DEV_1), Nsecfilt, f);
-      free (tmpSecFilt);
-      if (nitems != Nsecfilt) {
-	fprintf (stderr, "failed to write secfilts (%d vs %d)\n", nitems, Nsecfilt);
-	return (FALSE);
-      }
-      break; }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      SecFiltPanstarrs *tmpSecFilt;
-      tmpSecFilt = SecFiltInternalToPanstarrs (secfilt, Nsecfilt);
-      gfits_convert_SecFiltPanstarrs (tmpSecFilt, sizeof(SecFiltPanstarrs), Nsecfilt);
-      nitems = fwrite (tmpSecFilt, sizeof(SecFiltPanstarrs), Nsecfilt, f);
-      free (tmpSecFilt);
-      if (nitems != Nsecfilt) {
-	fprintf (stderr, "failed to write secfilts (%d vs %d)\n", nitems, Nsecfilt);
-	return (FALSE);
-      }
-      break; }
-# endif
+
+      FORMAT_CASE (LONEOS, Loneos);
+      FORMAT_CASE (ELIXIR, Elixir);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1, PS1_DEV_1);
+
     default:
       fprintf (stderr, "error writing secfilts\n");
       return (FALSE);
   }
+# undef FORMAT_CASE
+
   return (TRUE);
 }
Index: /trunk/Ohana/src/libdvo/src/dvo_convert.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert.c	(revision 15034)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert.c	(revision 15035)
@@ -27,4 +27,14 @@
     return (FALSE);
   }
+
+# define CONVERT_FORMAT(NAME, FORMAT, TYPE) \
+  if (!strcmp (extname, NAME)) { \
+    Average_##TYPE *tmpAverage; \
+    tmpAverage = gfits_table_get_Average_##TYPE (ftable, Naverage, NULL); \
+    average = Average_##TYPE##_ToInternal (tmpAverage, *Naverage, primary); \
+    free (tmpAverage); \
+    *format = DVO_FORMAT_##FORMAT; \
+    return (average); }
+
   if (!strcmp (extname, "DVO_AVERAGE")) {
     average = gfits_table_get_Average (ftable, Naverage, NULL);
@@ -32,57 +42,11 @@
     return (average);
   }
-  if (!strcmp (extname, "DVO_AVERAGE_ELIXIR")) {
-    AverageElixir *tmpAverage;
-    tmpAverage = gfits_table_get_AverageElixir (ftable, Naverage, NULL);
-    average = AverageElixirToInternal (tmpAverage, *Naverage, primary);
-    free (tmpAverage);
-    *format = DVO_FORMAT_ELIXIR;
-    return (average);
-  }
-  if (!strcmp (extname, "DVO_AVERAGE_LONEOS")) {
-    AverageLoneos *tmpAverage;
-    tmpAverage = gfits_table_get_AverageLoneos (ftable, Naverage, NULL);
-    average = AverageLoneosToInternal (tmpAverage, *Naverage, primary);
-    free (tmpAverage);
-    *format = DVO_FORMAT_LONEOS;
-    return (average);
-  }
-  if (!strcmp (extname, "DVO_AVERAGE_PANSTARRS_DEV_0")) {
-    AveragePanstarrs_DEV_0 *tmpAverage;
-    tmpAverage = gfits_table_get_AveragePanstarrs_DEV_0 (ftable, Naverage, NULL);
-    average = AveragePanstarrs_DEV_0_ToInternal (tmpAverage, *Naverage);
-    free (tmpAverage);
-    *format = DVO_FORMAT_PANSTARRS_DEV_0;
-    return (average);
-  }
-  if (!strcmp (extname, "DVO_AVERAGE_PANSTARRS_DEV_1")) {
-    AveragePanstarrs_DEV_1 *tmpAverage;
-    tmpAverage = gfits_table_get_AveragePanstarrs_DEV_1 (ftable, Naverage, NULL);
-    average = AveragePanstarrs_DEV_1_ToInternal (tmpAverage, *Naverage);
-    free (tmpAverage);
-    *format = DVO_FORMAT_PANSTARRS_DEV_1;
-    return (average);
-  }
-/* disable the new and minimally-used versions for now.  
-   put them back in after dev work is further along
-   OR replace with other output formats */
-# if 0
-  if (!strcmp (extname, "DVO_AVERAGE_PANSTARRS")) {
-    AveragePanstarrs *tmpAverage;
-    tmpAverage = gfits_table_get_AveragePanstarrs (ftable, Naverage, NULL);
-    average = AveragePanstarrsToInternal (tmpAverage, *Naverage);
-    free (tmpAverage);
-    *format = DVO_FORMAT_PANSTARRS;
-    return (average);
-  }
-  if (!strcmp (extname, "DVO_AVERAGE_PMTEST")) {
-    AveragePMtest *tmpAverage;
-    tmpAverage = gfits_table_get_AveragePMtest (ftable, Naverage, NULL);
-    average = AveragePMtestToInternal (tmpAverage, *Naverage);
-    free (tmpAverage);
-    *format = DVO_FORMAT_PMTEST;
-    return (average);
-  }
-# endif
+
+  CONVERT_FORMAT ("DVO_AVERAGE_ELIXIR", 	 ELIXIR, 	  Elixir);
+  CONVERT_FORMAT ("DVO_AVERAGE_LONEOS", 	 LONEOS, 	  Loneos);
+  CONVERT_FORMAT ("DVO_AVERAGE_PANSTARRS_DEV_0", PANSTARRS_DEV_0, Panstarrs_DEV_0);
+  CONVERT_FORMAT ("DVO_AVERAGE_PANSTARRS_DEV_1", PANSTARRS_DEV_1, Panstarrs_DEV_1);
+  CONVERT_FORMAT ("DVO_AVERAGE_PS1_DEV_1",       PS1_DEV_1,       PS1_DEV_1);
+# undef CONVERT_FORMAT
 
   fprintf (stderr, "table format unknown: %s\n", extname);
@@ -94,4 +58,11 @@
 int AverageToFtable (FTable *ftable, Average *average, int Naverage, int format, SecFilt *primary) {
 
+# define FORMAT_CASE(FORMAT, TYPE) \
+    case DVO_FORMAT_##FORMAT: { \
+      Average_##TYPE *tmpAverage; \
+      tmpAverage = AverageInternalTo_##TYPE (average, Naverage, primary); \
+      gfits_table_set_Average_##TYPE (ftable, tmpAverage, Naverage); \
+      free (tmpAverage); \
+      break; }
 
   /* convert from the internal format */
@@ -100,42 +71,12 @@
       gfits_table_set_Average (ftable, average, Naverage);
       break; }
-    case DVO_FORMAT_ELIXIR: {
-      AverageElixir *tmpAverage;
-      tmpAverage = AverageInternalToElixir (average, Naverage, primary);
-      gfits_table_set_AverageElixir (ftable, tmpAverage, Naverage);
-      free (tmpAverage);
-      break; }
-    case DVO_FORMAT_LONEOS: {
-      AverageLoneos *tmpAverage ;
-      tmpAverage  = AverageInternalToLoneos (average, Naverage, primary);
-      gfits_table_set_AverageLoneos (ftable, tmpAverage, Naverage);
-      free (tmpAverage );
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      AveragePanstarrs_DEV_0 *tmpAverage;
-      tmpAverage = AverageInternalToPanstarrs_DEV_0 (average, Naverage);
-      gfits_table_set_AveragePanstarrs_DEV_0 (ftable, tmpAverage, Naverage);
-      free (tmpAverage);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      AveragePanstarrs_DEV_1 *tmpAverage;
-      tmpAverage = AverageInternalToPanstarrs_DEV_1 (average, Naverage);
-      gfits_table_set_AveragePanstarrs_DEV_1 (ftable, tmpAverage, Naverage);
-      free (tmpAverage);
-      break; }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      AveragePanstarrs *tmpAverage;
-      tmpAverage = AverageInternalToPanstarrs (average, Naverage);
-      gfits_table_set_AveragePanstarrs (ftable, tmpAverage, Naverage);
-      free (tmpAverage);
-      break; }
-    case DVO_FORMAT_PMTEST: {
-      AveragePMtest *tmpAverage;
-      tmpAverage = AverageInternalToPMtest (average, Naverage);
-      gfits_table_set_AveragePMtest (ftable, tmpAverage, Naverage);
-      free (tmpAverage);
-      break; }
-# endif
+
+      FORMAT_CASE (ELIXIR, 	    Elixir);
+      FORMAT_CASE (LONEOS, 	    Loneos);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1,       PS1_DEV_1);
+# undef FORMAT_CASE
+
     default:
       fprintf (stderr, "table format unknown (average)\n");
@@ -157,4 +98,14 @@
     return (FALSE);
   }
+
+# define CONVERT_FORMAT(NAME, FORMAT, TYPE) \
+  if (!strcmp (extname, NAME)) { \
+    Measure_##TYPE *tmpMeasure; \
+    tmpMeasure = gfits_table_get_Measure_##TYPE (ftable, Nmeasure, NULL); \
+    measure = Measure_##TYPE##_ToInternal (tmpMeasure, *Nmeasure); \
+    free (tmpMeasure); \
+    *format = DVO_FORMAT_##FORMAT; \
+    return (measure); }
+
   if (!strcmp (extname, "DVO_MEASURE")) {
     measure = gfits_table_get_Measure (ftable, Nmeasure, NULL);
@@ -162,46 +113,11 @@
     return (measure);
   }
-  if (!strcmp (extname, "DVO_MEASURE_ELIXIR")) {
-    MeasureElixir *tmpMeasure;
-    tmpMeasure = gfits_table_get_MeasureElixir (ftable, Nmeasure, NULL);
-    measure = MeasureElixirToInternal (tmpMeasure, *Nmeasure);
-    free (tmpMeasure);
-    *format = DVO_FORMAT_ELIXIR;
-    return (measure);
-  }
-  if (!strcmp (extname, "DVO_MEASURE_LONEOS")) {
-    MeasureLoneos *tmpMeasure;
-    tmpMeasure = gfits_table_get_MeasureLoneos (ftable, Nmeasure, NULL);
-    measure = MeasureLoneosToInternal (tmpMeasure, *Nmeasure);
-    free (tmpMeasure);
-    *format = DVO_FORMAT_LONEOS;
-    return (measure);
-  }
-  if (!strcmp (extname, "DVO_MEASURE_PANSTARRS_DEV_0")) {
-    MeasurePanstarrs_DEV_0 *tmpMeasure;
-    tmpMeasure = gfits_table_get_MeasurePanstarrs_DEV_0 (ftable, Nmeasure, NULL);
-    measure = MeasurePanstarrs_DEV_0_ToInternal (tmpMeasure, *Nmeasure);
-    free (tmpMeasure);
-    *format = DVO_FORMAT_PANSTARRS_DEV_0;
-    return (measure);
-  }
-  if (!strcmp (extname, "DVO_MEASURE_PANSTARRS_DEV_1")) {
-    MeasurePanstarrs_DEV_1 *tmpMeasure;
-    tmpMeasure = gfits_table_get_MeasurePanstarrs_DEV_1 (ftable, Nmeasure, NULL);
-    measure = MeasurePanstarrs_DEV_1_ToInternal (tmpMeasure, *Nmeasure);
-    free (tmpMeasure);
-    *format = DVO_FORMAT_PANSTARRS_DEV_1;
-    return (measure);
-  }
-# if 0
-  if (!strcmp (extname, "DVO_MEASURE_PANSTARRS") || !strcmp (extname, "DVO_MEASURE_PMTEST")) {
-    MeasurePanstarrs *tmpMeasure;
-    tmpMeasure = gfits_table_get_MeasurePanstarrs (ftable, Nmeasure, NULL);
-    measure = MeasurePanstarrsToInternal (tmpMeasure, *Nmeasure);
-    free (tmpMeasure);
-    *format = DVO_FORMAT_PANSTARRS;
-    return (measure);
-  }
-# endif
+
+  CONVERT_FORMAT ("DVO_MEASURE_ELIXIR", 	 ELIXIR, 	  Elixir);
+  CONVERT_FORMAT ("DVO_MEASURE_LONEOS", 	 LONEOS,          Loneos);
+  CONVERT_FORMAT ("DVO_MEASURE_PANSTARRS_DEV_0", PANSTARRS_DEV_0, Panstarrs_DEV_0);
+  CONVERT_FORMAT ("DVO_MEASURE_PANSTARRS_DEV_1", PANSTARRS_DEV_1, Panstarrs_DEV_1);
+  CONVERT_FORMAT ("DVO_MEASURE_PS1_DEV_1",       PS1_DEV_1,       PS1_DEV_1);
+# undef CONVERT_FORMAT
 
   fprintf (stderr, "table format unknown: %s\n", extname);
@@ -213,4 +129,11 @@
 int MeasureToFtable (FTable *ftable, Measure *measure, int Nmeasure, int format) {
 
+# define FORMAT_CASE(FORMAT, TYPE) \
+    case DVO_FORMAT_##FORMAT: { \
+      Measure_##TYPE *tmpMeasure; \
+      tmpMeasure = MeasureInternalTo_##TYPE (measure, Nmeasure); \
+      gfits_table_set_Measure_##TYPE (ftable, tmpMeasure, Nmeasure); \
+      free (tmpMeasure); \
+      break; }
 
   /* convert from the internal format */
@@ -219,36 +142,12 @@
       gfits_table_set_Measure (ftable, measure, Nmeasure);
       break; }
-    case DVO_FORMAT_ELIXIR: {
-      MeasureElixir *tmpMeasure;
-      tmpMeasure = MeasureInternalToElixir (measure, Nmeasure);
-      gfits_table_set_MeasureElixir (ftable, tmpMeasure, Nmeasure);
-      free (tmpMeasure);
-      break; }
-    case DVO_FORMAT_LONEOS: {
-      MeasureLoneos *tmpMeasure;
-      tmpMeasure = MeasureInternalToLoneos (measure, Nmeasure);
-      gfits_table_set_MeasureLoneos (ftable, tmpMeasure, Nmeasure);
-      free (tmpMeasure);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      MeasurePanstarrs_DEV_0 *tmpMeasure;
-      tmpMeasure = MeasureInternalToPanstarrs_DEV_0 (measure, Nmeasure);
-      gfits_table_set_MeasurePanstarrs_DEV_0 (ftable, tmpMeasure, Nmeasure);
-      free (tmpMeasure);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      MeasurePanstarrs_DEV_1 *tmpMeasure;
-      tmpMeasure = MeasureInternalToPanstarrs_DEV_1 (measure, Nmeasure);
-      gfits_table_set_MeasurePanstarrs_DEV_1 (ftable, tmpMeasure, Nmeasure);
-      free (tmpMeasure);
-      break; }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      MeasurePanstarrs *tmpMeasure;
-      tmpMeasure = MeasureInternalToPanstarrs (measure, Nmeasure);
-      gfits_table_set_MeasurePanstarrs (ftable, tmpMeasure, Nmeasure);
-      free (tmpMeasure);
-      break; }
-# endif
+
+      FORMAT_CASE (ELIXIR, 	    Elixir);
+      FORMAT_CASE (LONEOS, 	    Loneos);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1,       PS1_DEV_1);
+# undef FORMAT_CASE
+
     default:
       fprintf (stderr, "table format unknown (measure)\n");
@@ -270,4 +169,14 @@
     return (FALSE);
   }
+
+# define CONVERT_FORMAT(NAME, FORMAT, TYPE) \
+  if (!strcmp (extname, NAME)) { \
+    SecFilt_##TYPE *tmpSecFilt; \
+    tmpSecFilt = gfits_table_get_SecFilt_##TYPE (ftable, Nsecfilt, NULL); \
+    secfilt = SecFilt_##TYPE##_ToInternal (tmpSecFilt, *Nsecfilt); \
+    free (tmpSecFilt); \
+    *format = DVO_FORMAT_##FORMAT; \
+    return (secfilt); }
+
   if (!strcmp (extname, "DVO_SECFILT")) {
     secfilt = gfits_table_get_SecFilt (ftable, Nsecfilt, NULL);
@@ -275,46 +184,11 @@
     return (secfilt);
   }
-  if (!strcmp (extname, "DVO_SECFILT_ELIXIR")) {
-    SecFiltElixir *tmpSecFilt;
-    tmpSecFilt = gfits_table_get_SecFiltElixir (ftable, Nsecfilt, NULL);
-    secfilt = SecFiltElixirToInternal (tmpSecFilt, *Nsecfilt);
-    free (tmpSecFilt);
-    *format = DVO_FORMAT_ELIXIR;
-    return (secfilt);
-  }
-  if (!strcmp (extname, "DVO_SECFILT_LONEOS")) {
-    SecFiltLoneos *tmpSecFilt;
-    tmpSecFilt = gfits_table_get_SecFiltLoneos (ftable, Nsecfilt, NULL);
-    secfilt = SecFiltLoneosToInternal (tmpSecFilt, *Nsecfilt);
-    free (tmpSecFilt);
-    *format = DVO_FORMAT_LONEOS;
-    return (secfilt);
-  }
-  if (!strcmp (extname, "DVO_SECFILT_PANSTARRS_DEV_0")) {
-    SecFiltPanstarrs_DEV_0 *tmpSecFilt;
-    tmpSecFilt = gfits_table_get_SecFiltPanstarrs_DEV_0 (ftable, Nsecfilt, NULL);
-    secfilt = SecFiltPanstarrs_DEV_0_ToInternal (tmpSecFilt, *Nsecfilt);
-    free (tmpSecFilt);
-    *format = DVO_FORMAT_PANSTARRS_DEV_0;
-    return (secfilt);
-  }
-  if (!strcmp (extname, "DVO_SECFILT_PANSTARRS_DEV_1")) {
-    SecFiltPanstarrs_DEV_1 *tmpSecFilt;
-    tmpSecFilt = gfits_table_get_SecFiltPanstarrs_DEV_1 (ftable, Nsecfilt, NULL);
-    secfilt = SecFiltPanstarrs_DEV_1_ToInternal (tmpSecFilt, *Nsecfilt);
-    free (tmpSecFilt);
-    *format = DVO_FORMAT_PANSTARRS_DEV_1;
-    return (secfilt);
-  }
-# if 0
-  if (!strcmp (extname, "DVO_SECFILT_PANSTARRS") || !strcmp (extname, "DVO_SECFILT_PMTEST")) {
-    SecFiltPanstarrs *tmpSecFilt;
-    tmpSecFilt = gfits_table_get_SecFiltPanstarrs (ftable, Nsecfilt, NULL);
-    secfilt = SecFiltPanstarrsToInternal (tmpSecFilt, *Nsecfilt);
-    free (tmpSecFilt);
-    *format = DVO_FORMAT_PANSTARRS;
-    return (secfilt);
-  }
-# endif
+
+  CONVERT_FORMAT ("DVO_SECFILT_ELIXIR", 	 ELIXIR, 	  Elixir);
+  CONVERT_FORMAT ("DVO_SECFILT_LONEOS", 	 LONEOS, 	  Loneos);
+  CONVERT_FORMAT ("DVO_SECFILT_PANSTARRS_DEV_0", PANSTARRS_DEV_0, Panstarrs_DEV_0);
+  CONVERT_FORMAT ("DVO_SECFILT_PANSTARRS_DEV_1", PANSTARRS_DEV_1, Panstarrs_DEV_1);
+  CONVERT_FORMAT ("DVO_SECFILT_PS1_DEV_1",       PS1_DEV_1,       PS1_DEV_1);
+# undef CONVERT_FORMAT
 
   fprintf (stderr, "table format unknown: %s\n", extname);
@@ -326,4 +200,12 @@
 int SecFiltToFtable (FTable *ftable, SecFilt *secfilt, int Nsecfilt, int format) {
 
+# define FORMAT_CASE(FORMAT, TYPE) \
+    case DVO_FORMAT_##FORMAT: { \
+      SecFilt_##TYPE *tmpSecFilt; \
+      tmpSecFilt = SecFiltInternalTo_##TYPE (secfilt, Nsecfilt); \
+      gfits_table_set_SecFilt_##TYPE (ftable, tmpSecFilt, Nsecfilt); \
+      free (tmpSecFilt); \
+      break; }
+
   /* convert from the internal format */
   switch (format) {
@@ -331,36 +213,12 @@
       gfits_table_set_SecFilt (ftable, secfilt, Nsecfilt);
       break; }
-    case DVO_FORMAT_ELIXIR: {
-      SecFiltElixir *tmpSecFilt;
-      tmpSecFilt = SecFiltInternalToElixir (secfilt, Nsecfilt);
-      gfits_table_set_SecFiltElixir (ftable, tmpSecFilt, Nsecfilt);
-      free (tmpSecFilt);
-      break; }
-    case DVO_FORMAT_LONEOS: {
-      SecFiltLoneos *tmpSecFilt;
-      tmpSecFilt = SecFiltInternalToLoneos (secfilt, Nsecfilt);
-      gfits_table_set_SecFiltLoneos (ftable, tmpSecFilt, Nsecfilt);
-      free (tmpSecFilt);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      SecFiltPanstarrs_DEV_0 *tmpSecFilt;
-      tmpSecFilt = SecFiltInternalToPanstarrs_DEV_0 (secfilt, Nsecfilt);
-      gfits_table_set_SecFiltPanstarrs_DEV_0 (ftable, tmpSecFilt, Nsecfilt);
-      free (tmpSecFilt);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      SecFiltPanstarrs_DEV_1 *tmpSecFilt;
-      tmpSecFilt = SecFiltInternalToPanstarrs_DEV_1 (secfilt, Nsecfilt);
-      gfits_table_set_SecFiltPanstarrs_DEV_1 (ftable, tmpSecFilt, Nsecfilt);
-      free (tmpSecFilt);
-      break; }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      SecFiltPanstarrs *tmpSecFilt;
-      tmpSecFilt = SecFiltInternalToPanstarrs (secfilt, Nsecfilt);
-      gfits_table_set_SecFiltPanstarrs (ftable, tmpSecFilt, Nsecfilt);
-      free (tmpSecFilt);
-      break; }
-# endif
+
+      FORMAT_CASE (ELIXIR, 	    Elixir);
+      FORMAT_CASE (LONEOS, 	    Loneos);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1,       PS1_DEV_1);
+# undef FORMAT_CASE
+
     default:
       fprintf (stderr, "table format unknown (secfilt)\n");
@@ -379,9 +237,14 @@
   /* extname may be set from outside if the source is RAW not MEF */
   if (*format == DVO_FORMAT_ELIXIR) {		  // special case for ELIXIR
-    ImageElixir *tmpimage;
-    tmpimage = gfits_table_get_ImageElixir (ftable, &Nimage, NULL);
-    ftable[0].buffer = (char *) ImageElixirToInternal (tmpimage, Nimage);
+    Image_Elixir *tmpimage;
+    tmpimage = gfits_table_get_Image_Elixir (ftable, &Nimage, NULL);
+    ftable[0].buffer = (char *) Image_Elixir_ToInternal (tmpimage, Nimage);
     free (tmpimage);
-    goto set_header;
+    gfits_free_header (theader);
+    gfits_table_mkheader_Image (theader);
+    gfits_modify (theader, "NAXIS2", "%d", 1, Nimage);
+    theader[0].Naxis[1] = Nimage;
+    ftable[0].size = gfits_matrix_size (theader);
+    return (TRUE);
   }
 
@@ -391,4 +254,19 @@
     return (FALSE);
   }
+
+# define CONVERT_FORMAT(NAME, FORMAT, TYPE) \
+  if (!strcmp (extname, NAME)) { \
+    Image_##TYPE *tmpimage; \
+    *format = DVO_FORMAT_##FORMAT; \
+    tmpimage = gfits_table_get_Image_##TYPE (ftable, &Nimage, NULL); \
+    ftable[0].buffer = (char *) Image_##TYPE##_ToInternal (tmpimage, Nimage); \
+    free (tmpimage); \
+    gfits_free_header (theader); \
+    gfits_table_mkheader_Image (theader); \
+    gfits_modify (theader, "NAXIS2", "%d", 1, Nimage); \
+    theader[0].Naxis[1] = Nimage; \
+    ftable[0].size = gfits_matrix_size (theader); \
+    return (TRUE); }
+
   if (!strcmp (extname, "DVO_IMAGE")) {
     Image *image;
@@ -397,56 +275,14 @@
     return (TRUE);
   }
-  if (!strcmp (extname, "DVO_IMAGE_ELIXIR")) {
-    ImageElixir *tmpimage;
-    *format = DVO_FORMAT_ELIXIR;
-    tmpimage = gfits_table_get_ImageElixir (ftable, &Nimage, NULL);
-    ftable[0].buffer = (char *) ImageElixirToInternal (tmpimage, Nimage);
-    free (tmpimage);
-    goto set_header;
-  }
-  if (!strcmp (extname, "DVO_IMAGE_LONEOS")) {
-    ImageLoneos *tmpimage;
-    *format = DVO_FORMAT_LONEOS;
-    tmpimage = gfits_table_get_ImageLoneos (ftable, &Nimage, NULL);
-    ftable[0].buffer = (char *) ImageLoneosToInternal (tmpimage, Nimage);
-    free (tmpimage);
-    goto set_header;
-  }
-  if (!strcmp (extname, "DVO_IMAGE_PANSTARRS_DEV_0")) {
-    ImagePanstarrs_DEV_0 *tmpimage;
-    *format = DVO_FORMAT_PANSTARRS_DEV_0;
-    tmpimage = gfits_table_get_ImagePanstarrs_DEV_0 (ftable, &Nimage, NULL);
-    ftable[0].buffer = (char *) ImagePanstarrs_DEV_0_ToInternal (tmpimage, Nimage);
-    free (tmpimage);
-    goto set_header;
-  }
-  if (!strcmp (extname, "DVO_IMAGE_PANSTARRS_DEV_1")) {
-    ImagePanstarrs_DEV_1 *tmpimage;
-    *format = DVO_FORMAT_PANSTARRS_DEV_1;
-    tmpimage = gfits_table_get_ImagePanstarrs_DEV_1 (ftable, &Nimage, NULL);
-    ftable[0].buffer = (char *) ImagePanstarrs_DEV_1_ToInternal (tmpimage, Nimage);
-    free (tmpimage);
-    goto set_header;
-  }
-# if 0
-  if (!strcmp (extname, "DVO_IMAGE_PANSTARRS") || !strcmp (extname, "DVO_IMAGE_PMTEST")) {
-    ImagePanstarrs *tmpimage;
-    *format = DVO_FORMAT_PANSTARRS;
-    tmpimage = gfits_table_get_ImagePanstarrs (ftable, &Nimage, NULL);
-    ftable[0].buffer = (char *) ImagePanstarrsToInternal (tmpimage, Nimage);
-    free (tmpimage);
-    goto set_header;
-  }
-# endif
+
+  CONVERT_FORMAT ("DVO_IMAGE_ELIXIR", 	       ELIXIR,          Elixir);
+  CONVERT_FORMAT ("DVO_IMAGE_LONEOS", 	       LONEOS,          Loneos);
+  CONVERT_FORMAT ("DVO_IMAGE_PANSTARRS_DEV_0", PANSTARRS_DEV_0, Panstarrs_DEV_0);
+  CONVERT_FORMAT ("DVO_IMAGE_PANSTARRS_DEV_1", PANSTARRS_DEV_1, Panstarrs_DEV_1);
+  CONVERT_FORMAT ("DVO_IMAGE_PS1_DEV_1",       PS1_DEV_1,       PS1_DEV_1);
+# undef CONVERT_FORMAT
+
   fprintf (stderr, "table format unknown: %s\n", extname);
   return (FALSE);
-
-set_header:
-  gfits_free_header (theader);
-  gfits_table_mkheader_Image (theader);
-  gfits_modify (theader, "NAXIS2", "%d", 1, Nimage);
-  theader[0].Naxis[1] = Nimage;
-  ftable[0].size = gfits_matrix_size (theader);
-  return (TRUE);
 }
 
@@ -457,4 +293,13 @@
   Nimage = theader[0].Naxis[1];
 
+# define FORMAT_CASE(FORMAT, TYPE) \
+    case DVO_FORMAT_##FORMAT: { \
+      Image_##TYPE *tmpImage; \
+      tmpImage = ImageInternalTo_##TYPE ((Image *) ftable[0].buffer, Nimage); \
+      free (ftable[0].buffer); \
+      gfits_table_set_Image_##TYPE (ftable, tmpImage, Nimage); \
+      free (tmpImage); \
+      break; }
+
   /* convert from the internal format */
   switch (format) {
@@ -462,41 +307,12 @@
       gfits_convert_Image ((Image *) ftable[0].buffer, sizeof(Image), Nimage);
       break; }
-    case DVO_FORMAT_ELIXIR: {
-      ImageElixir *tmpImage;
-      tmpImage = ImageInternalToElixir ((Image *) ftable[0].buffer, Nimage);
-      free (ftable[0].buffer);
-      gfits_table_set_ImageElixir (ftable, tmpImage, Nimage);
-      free (tmpImage);
-      break; }
-    case DVO_FORMAT_LONEOS: {
-      ImageLoneos *tmpImage;
-      tmpImage = ImageInternalToLoneos ((Image *) ftable[0].buffer, Nimage);
-      free (ftable[0].buffer);
-      gfits_table_set_ImageLoneos (ftable, tmpImage, Nimage);
-      free (tmpImage);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      ImagePanstarrs_DEV_0 *tmpImage;
-      tmpImage = ImageInternalToPanstarrs_DEV_0 ((Image *) ftable[0].buffer, Nimage);
-      free (ftable[0].buffer);
-      gfits_table_set_ImagePanstarrs_DEV_0 (ftable, tmpImage, Nimage);
-      free (tmpImage);
-      break; }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      ImagePanstarrs_DEV_1 *tmpImage;
-      tmpImage = ImageInternalToPanstarrs_DEV_1 ((Image *) ftable[0].buffer, Nimage);
-      free (ftable[0].buffer);
-      gfits_table_set_ImagePanstarrs_DEV_1 (ftable, tmpImage, Nimage);
-      free (tmpImage);
-      break; }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      ImagePanstarrs *tmpImage;
-      tmpImage = ImageInternalToPanstarrs ((Image *) ftable[0].buffer, Nimage);
-      free (ftable[0].buffer);
-      gfits_table_set_ImagePanstarrs (ftable, tmpImage, Nimage);
-      free (tmpImage);
-      break; }
-# endif
+
+      FORMAT_CASE (ELIXIR, 	    Elixir);
+      FORMAT_CASE (LONEOS, 	    Loneos);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1,       PS1_DEV_1);
+# undef FORMAT_CASE
+
     default:
       fprintf (stderr, "table format unknown (image ftable)\n");
@@ -511,4 +327,24 @@
 
   Nrow = vtable[0].Nrow;
+
+# define FORMAT_CASE(FORMAT, TYPE) \
+  case DVO_FORMAT_##FORMAT: { \
+      Image_##TYPE *tmpImage; \
+      /* convert table rows from internal to external format */ \
+      for (i = 0; i < Nrow; i++) { \
+	  tmpImage = ImageInternalTo_##TYPE ((Image *) vtable[0].buffer[i], 1); \
+	  gfits_convert_Image_##TYPE (tmpImage, sizeof(Image_##TYPE), 1); \
+	  free (vtable[0].buffer[i]); \
+	  vtable[0].buffer[i] = (char *) tmpImage; \
+      } \
+      /* convert header from old format to new format */ \
+      gfits_scan (theader, "NAXIS2", "%d", 1, &Nimage); \
+      gfits_free_header (theader); \
+      gfits_table_mkheader_Image_##TYPE (theader); \
+      gfits_modify (theader, "NAXIS2", "%d", 1, Nimage); \
+      theader[0].Naxis[1] = Nimage; \
+      vtable[0].size = gfits_matrix_size (theader); \
+      return (TRUE); }
+
 
   /* convert from the internal format */
@@ -519,97 +355,12 @@
       }
       return (TRUE); }
-    case DVO_FORMAT_ELIXIR: {
-      ImageElixir *tmpImage;
-      /* convert table rows from internal to external format */
-      for (i = 0; i < Nrow; i++) {
-	tmpImage = ImageInternalToElixir ((Image *) vtable[0].buffer[i], 1);
-	gfits_convert_ImageElixir (tmpImage, sizeof(ImageElixir), 1);
-	free (vtable[0].buffer[i]);
-	vtable[0].buffer[i] = (char *) tmpImage;
-      }
-
-      /* convert header from old format to new format */
-      gfits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
-
-      gfits_free_header (theader);
-      gfits_table_mkheader_ImageElixir (theader);
-
-      gfits_modify (theader, "NAXIS2", "%d", 1, Nimage);
-      theader[0].Naxis[1] = Nimage;
-      vtable[0].size = gfits_matrix_size (theader);
-      return (TRUE); }
-    case DVO_FORMAT_LONEOS: {
-      ImageLoneos *tmpImage;
-      /* convert table rows from internal to external format */
-      for (i = 0; i < Nrow; i++) {
-	tmpImage = ImageInternalToLoneos ((Image *) vtable[0].buffer[i], 1);
-	gfits_convert_ImageLoneos (tmpImage, sizeof(ImageLoneos), 1);
-	free (vtable[0].buffer[i]);
-	vtable[0].buffer[i] = (char *) tmpImage;
-      }
-
-      /* convert header from old format to new format */
-      gfits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
-
-      gfits_free_header (theader);
-      gfits_table_mkheader_ImageLoneos (theader);
-
-      gfits_modify (theader, "NAXIS2", "%d", 1, Nimage);
-      theader[0].Naxis[1] = Nimage;
-      vtable[0].size = gfits_matrix_size (theader);
-      return (TRUE); }
-    case DVO_FORMAT_PANSTARRS_DEV_0: {
-      ImagePanstarrs_DEV_0 *tmpImage;
-      /* convert table rows from internal to external format */
-      for (i = 0; i < Nrow; i++) {
-	tmpImage = ImageInternalToPanstarrs_DEV_0 ((Image *) vtable[0].buffer[i], 1);
-	gfits_convert_ImagePanstarrs_DEV_0 (tmpImage, sizeof(ImagePanstarrs_DEV_0), 1);
-	free (vtable[0].buffer[i]);
-	vtable[0].buffer[i] = (char *) tmpImage;
-      }
-      /* convert header from old format to new format */
-      gfits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
-      gfits_free_header (theader);
-      gfits_table_mkheader_ImagePanstarrs_DEV_0 (theader);
-      gfits_modify (theader, "NAXIS2", "%d", 1, Nimage);
-      theader[0].Naxis[1] = Nimage;
-      vtable[0].size = gfits_matrix_size (theader);
-      return (TRUE); }
-    case DVO_FORMAT_PANSTARRS_DEV_1: {
-      ImagePanstarrs_DEV_1 *tmpImage;
-      /* convert table rows from internal to external format */
-      for (i = 0; i < Nrow; i++) {
-	tmpImage = ImageInternalToPanstarrs_DEV_1 ((Image *) vtable[0].buffer[i], 1);
-	gfits_convert_ImagePanstarrs_DEV_1 (tmpImage, sizeof(ImagePanstarrs_DEV_1), 1);
-	free (vtable[0].buffer[i]);
-	vtable[0].buffer[i] = (char *) tmpImage;
-      }
-      /* convert header from old format to new format */
-      gfits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
-      gfits_free_header (theader);
-      gfits_table_mkheader_ImagePanstarrs_DEV_1 (theader);
-      gfits_modify (theader, "NAXIS2", "%d", 1, Nimage);
-      theader[0].Naxis[1] = Nimage;
-      vtable[0].size = gfits_matrix_size (theader);
-      return (TRUE); }
-# if 0
-    case DVO_FORMAT_PANSTARRS: {
-      ImagePanstarrs *tmpImage;
-      /* convert table rows from internal to external format */
-      for (i = 0; i < Nrow; i++) {
-	tmpImage = ImageInternalToPanstarrs ((Image *) vtable[0].buffer[i], 1);
-	gfits_convert_ImagePanstarrs (tmpImage, sizeof(ImagePanstarrs), 1);
-	free (vtable[0].buffer[i]);
-	vtable[0].buffer[i] = (char *) tmpImage;
-      }
-      /* convert header from old format to new format */
-      gfits_scan (theader, "NAXIS2", "%d", 1, &Nimage);
-      gfits_free_header (theader);
-      gfits_table_mkheader_ImagePanstarrs (theader);
-      gfits_modify (theader, "NAXIS2", "%d", 1, Nimage);
-      theader[0].Naxis[1] = Nimage;
-      vtable[0].size = gfits_matrix_size (theader);
-      return (TRUE); }
-# endif
+
+      FORMAT_CASE (ELIXIR, 	    Elixir);
+      FORMAT_CASE (LONEOS, 	    Loneos);
+      FORMAT_CASE (PANSTARRS_DEV_0, Panstarrs_DEV_0);
+      FORMAT_CASE (PANSTARRS_DEV_1, Panstarrs_DEV_1);
+      FORMAT_CASE (PS1_DEV_1,       PS1_DEV_1);
+# undef FORMAT_CASE
+
     default:
       break;
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c	(revision 15035)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_PS1_DEV_1.c	(revision 15035)
@@ -0,0 +1,299 @@
+# include <dvo.h>
+
+// XXX these functions ahve to be adjusted to agree with the new definition of PS1_DEV_1
+
+/* convert panstarrs-format measures to internal measures */
+Measure *Measure_PS1_DEV_1_ToInternal (Measure_PS1_DEV_1 *in, int Nvalues) {
+
+  int i;
+  Measure *out;
+
+  ALLOCATE (out, Measure, 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].dM         = in[i].dM;
+    out[i].Mcal       = in[i].Mcal;
+    out[i].Mgal       = in[i].Mgal;
+    out[i].airmass    = in[i].airmass;
+    out[i].az         = in[i].az;
+    out[i].dt         = in[i].dt;
+    out[i].FWx 	      = in[i].FWx;
+    out[i].FWy 	      = in[i].FWy;
+    out[i].theta      = in[i].theta;
+    out[i].dophot     = in[i].dophot;
+    out[i].photcode   = in[i].photcode;
+    out[i].t          = in[i].t;
+    out[i].averef     = in[i].averef;
+    out[i].flags      = in[i].flags;
+    out[i].Xccd       = in[i].Xccd;
+    out[i].Yccd       = in[i].Yccd;
+    out[i].dXccd      = in[i].dXccd;
+    out[i].dYccd      = in[i].dYccd;
+    out[i].stargal    = in[i].stargal;
+    out[i].Sky        = in[i].Sky;
+    out[i].dSky       = in[i].dSky;
+    out[i].qPSF       = in[i].qPSF;
+    out[i].detID_hi   = in[i].detID_hi;
+    out[i].detID_lo   = in[i].detID_lo;
+    out[i].imageID_hi = in[i].imageID_hi;
+    out[i].imageID_lo = in[i].imageID_lo;
+  }
+  return (out);
+}
+
+/* convert internal measures to panstarrs-format measures */
+Measure_PS1_DEV_1 *MeasureInternalTo_PS1_DEV_1 (Measure *in, int Nvalues) {
+
+  int i;
+  Measure_PS1_DEV_1 *out;
+
+  ALLOCATE (out, Measure_PS1_DEV_1, 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].dM         = in[i].dM;
+    out[i].Mcal       = in[i].Mcal;
+    out[i].Mgal       = in[i].Mgal;
+    out[i].airmass    = in[i].airmass;
+    out[i].az         = in[i].az;
+    out[i].dt         = in[i].dt;
+    out[i].FWx 	      = in[i].FWx;
+    out[i].FWy 	      = in[i].FWy;
+    out[i].theta      = in[i].theta;
+    out[i].dophot     = in[i].dophot;
+    out[i].photcode   = in[i].photcode;
+    out[i].t          = in[i].t;
+    out[i].averef     = in[i].averef;
+    out[i].flags      = in[i].flags;
+    out[i].Xccd       = in[i].Xccd;
+    out[i].Yccd       = in[i].Yccd;
+    out[i].dXccd      = in[i].dXccd;
+    out[i].dYccd      = in[i].dYccd;
+    out[i].stargal    = in[i].stargal;
+    out[i].Sky        = in[i].Sky;
+    out[i].dSky       = in[i].dSky;
+    out[i].qPSF       = in[i].qPSF;
+    out[i].detID_hi   = in[i].detID_hi;
+    out[i].detID_lo   = in[i].detID_lo;
+    out[i].imageID_hi = in[i].imageID_hi;
+    out[i].imageID_lo = in[i].imageID_lo;
+  }
+  return (out);
+}
+
+/* convert panstarrs-format averages to internal averages */
+// 'primary is needed to conform with the API for Loneos and Elixir, but is not used
+Average *Average_PS1_DEV_1_ToInternal (Average_PS1_DEV_1 *in, int Nvalues, SecFilt **primary) {
+
+  int i;
+  Average *out;
+
+  ALLOCATE (out, Average, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    out[i].R        = in[i].R;      
+    out[i].D        = in[i].D;      
+    out[i].Xp       = in[i].Xp;     
+    out[i].Nm       = in[i].Nm;     
+    out[i].Nn       = in[i].Nn;     
+    out[i].code     = in[i].code;   
+    out[i].offset   = in[i].offset; 
+    out[i].missing  = in[i].missing;
+    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].objID_hi = in[i].objID_hi;
+    out[i].objID_lo = in[i].objID_lo;
+  }
+  return (out);
+}
+
+/* convert internal averages to panstarrs-format averages */
+// 'primary is needed to conform with the API for Loneos and Elixir, but is not used
+Average_PS1_DEV_1 *AverageInternalTo_PS1_DEV_1 (Average *in, int Nvalues, SecFilt *primary) {
+
+  int i;
+  Average_PS1_DEV_1 *out;
+
+  ALLOCATE (out, Average_PS1_DEV_1, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    out[i].R        = in[i].R;      
+    out[i].D        = in[i].D;      
+    out[i].Xp       = in[i].Xp;     
+    out[i].Nm       = in[i].Nm;     
+    out[i].Nn       = in[i].Nn;     
+    out[i].code     = in[i].code;   
+    out[i].offset   = in[i].offset; 
+    out[i].missing  = in[i].missing;
+    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].objID_hi = in[i].objID_hi;
+    out[i].objID_lo = in[i].objID_lo;
+  }
+  return (out);
+}
+
+/* convert panstarrs-format secfilts to internal secfilts */
+SecFilt *SecFilt_PS1_DEV_1_ToInternal (SecFilt_PS1_DEV_1 *in, int Nvalues) {
+
+  int i;
+  SecFilt *out;
+
+  ALLOCATE (out, SecFilt, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    out[i].M     = in[i].M;      
+    out[i].dM    = in[i].dM;      
+    out[i].Xm    = in[i].Xm;     
+    out[i].Ncode = in[i].Ncode;
+    out[i].Nused = in[i].Nused;
+ }
+  return (out);
+}
+
+/* convert internal secfilts to panstarrs-format secfilts */
+SecFilt_PS1_DEV_1 *SecFiltInternalTo_PS1_DEV_1 (SecFilt *in, int Nvalues) {
+
+  int i;
+  SecFilt_PS1_DEV_1 *out;
+
+  ALLOCATE (out, SecFilt_PS1_DEV_1, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    out[i].M     = in[i].M;      
+    out[i].dM    = in[i].dM;      
+    out[i].Xm    = in[i].Xm;     
+    out[i].Ncode = in[i].Ncode;
+    out[i].Nused = in[i].Nused;
+  }
+  return (out);
+}
+
+/* convert panstarrs-format images to internal images */
+Image *Image_PS1_DEV_1_ToInternal (Image_PS1_DEV_1 *in, int Nvalues) {
+
+  int i;
+  Image *out;
+
+  ALLOCATE (out, Image, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    memcpy (&out[i].coords, &in[i].coords, sizeof(Coords));
+    strcpy (out[i].name, in[i].name);
+
+    out[i].tzero    	    = in[i].tzero;
+    out[i].nstar    	    = in[i].nstar;
+    out[i].secz	    	    = in[i].secz;
+    out[i].NX	    	    = in[i].NX;
+    out[i].NY	    	    = in[i].NY;
+    out[i].apmifit  	    = in[i].apmifit;
+    out[i].dapmifit 	    = in[i].dapmifit;
+    out[i].Mcal	    	    = in[i].Mcal;
+    out[i].dMcal    	    = in[i].dMcal;
+    out[i].Xm	    	    = in[i].Xm;
+    out[i].photcode   	    = in[i].photcode;
+    out[i].exptime  	    = in[i].exptime;
+    out[i].sidtime  	    = in[i].sidtime;
+    out[i].latitude  	    = in[i].latitude;
+    out[i].detection_limit  = in[i].detection_limit;
+    out[i].saturation_limit = in[i].saturation_limit;
+    out[i].cerror	    = in[i].cerror;
+    out[i].fwhm_x	    = in[i].fwhm_x;
+    out[i].fwhm_y	    = in[i].fwhm_y;
+    out[i].trate	    = in[i].trate;
+    out[i].code		    = in[i].code;
+    out[i].ccdnum	    = in[i].ccdnum;
+    out[i].imageID_hi	    = in[i].imageID_hi;
+    out[i].imageID_lo	    = in[i].imageID_lo;
+
+    out[i].order	    = in[i].order;
+    out[i].Mx		    = in[i].Mx;
+    out[i].My		    = in[i].My;
+    out[i].Mxx		    = in[i].Mxx;
+    out[i].Mxy		    = in[i].Mxy;
+    out[i].Myy		    = in[i].Myy;
+    out[i].Mxxx		    = in[i].Mxxx;
+    out[i].Mxxy		    = in[i].Mxxy;
+    out[i].Mxyy		    = in[i].Mxyy;
+    out[i].Myyy		    = in[i].Myyy;
+    out[i].Mxxxx	    = in[i].Mxxxx;
+    out[i].Mxxxy	    = in[i].Mxxxy;
+    out[i].Mxxyy	    = in[i].Mxxyy;
+    out[i].Mxyyy	    = in[i].Mxyyy;
+    out[i].Myyyy	    = in[i].Myyyy;
+  }
+  return (out);
+}
+
+/* convert internal images to panstarrs-format images */
+Image_PS1_DEV_1 *ImageInternalTo_PS1_DEV_1 (Image *in, int Nvalues) {
+
+  int i;
+  Image_PS1_DEV_1 *out;
+
+  ALLOCATE (out, Image_PS1_DEV_1, Nvalues);
+
+  for (i = 0; i < Nvalues; i++) {
+    memcpy (&out[i].coords, &in[i].coords, sizeof(Coords));
+    strcpy (out[i].name, in[i].name);
+
+    out[i].tzero    	    = in[i].tzero;
+    out[i].nstar    	    = in[i].nstar;
+    out[i].secz	    	    = in[i].secz;
+    out[i].NX	    	    = in[i].NX;
+    out[i].NY	    	    = in[i].NY;
+    out[i].apmifit  	    = in[i].apmifit;
+    out[i].dapmifit 	    = in[i].dapmifit;
+    out[i].Mcal	    	    = in[i].Mcal;
+    out[i].dMcal    	    = in[i].dMcal;
+    out[i].Xm	    	    = in[i].Xm;
+    out[i].photcode   	    = in[i].photcode;
+    out[i].exptime  	    = in[i].exptime;
+    out[i].sidtime  	    = in[i].sidtime;
+    out[i].latitude  	    = in[i].latitude;
+    out[i].detection_limit  = in[i].detection_limit;
+    out[i].saturation_limit = in[i].saturation_limit;
+    out[i].cerror	    = in[i].cerror;
+    out[i].fwhm_x	    = in[i].fwhm_x;
+    out[i].fwhm_y	    = in[i].fwhm_y;
+    out[i].trate	    = in[i].trate;
+    out[i].code		    = in[i].code;
+    out[i].ccdnum	    = in[i].ccdnum;
+    out[i].imageID_hi	    = in[i].imageID_hi;
+    out[i].imageID_lo	    = in[i].imageID_lo;
+
+    out[i].order	    = in[i].order;
+    out[i].Mx		    = in[i].Mx;
+    out[i].My		    = in[i].My;
+    out[i].Mxx		    = in[i].Mxx;
+    out[i].Mxy		    = in[i].Mxy;
+    out[i].Myy		    = in[i].Myy;
+    out[i].Mxxx		    = in[i].Mxxx;
+    out[i].Mxxy		    = in[i].Mxxy;
+    out[i].Mxyy		    = in[i].Mxyy;
+    out[i].Myyy		    = in[i].Myyy;
+    out[i].Mxxxx	    = in[i].Mxxxx;
+    out[i].Mxxxy	    = in[i].Mxxxy;
+    out[i].Mxxyy	    = in[i].Mxxyy;
+    out[i].Mxyyy	    = in[i].Mxyyy;
+    out[i].Myyyy	    = in[i].Myyyy;
+  }
+  return (out);
+}
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c	(revision 15034)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_elixir.c	(revision 15035)
@@ -2,5 +2,5 @@
 
 /* convert elixir-format measures to internal measures */
-Measure *MeasureElixirToInternal (MeasureElixir *in, int Nvalues) {
+Measure *Measure_Elixir_ToInternal (Measure_Elixir *in, int Nvalues) {
 
   int i;
@@ -49,10 +49,10 @@
 
 /* convert internal measures to elixir-format measures */
-MeasureElixir *MeasureInternalToElixir (Measure *in, int Nvalues) {
-
-  int i;
-  MeasureElixir *out;
-
-  ALLOCATE (out, MeasureElixir, Nvalues);
+Measure_Elixir *MeasureInternalTo_Elixir (Measure *in, int Nvalues) {
+
+  int i;
+  Measure_Elixir *out;
+
+  ALLOCATE (out, Measure_Elixir, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -78,5 +78,5 @@
 
 /* convert elixir-format averages to internal averages */
-Average *AverageElixirToInternal (AverageElixir *in, int Nvalues, SecFilt **primary) {
+Average *Average_Elixir_ToInternal (Average_Elixir *in, int Nvalues, SecFilt **primary) {
 
   int i;
@@ -123,10 +123,10 @@
 
 /* convert internal averages to elixir-format averages */
-AverageElixir *AverageInternalToElixir (Average *in, int Nvalues, SecFilt *primary) {
-
-  int i;
-  AverageElixir *out;
-
-  ALLOCATE (out, AverageElixir, Nvalues);
+Average_Elixir *AverageInternalTo_Elixir (Average *in, int Nvalues, SecFilt *primary) {
+
+  int i;
+  Average_Elixir *out;
+
+  ALLOCATE (out, Average_Elixir, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -149,5 +149,5 @@
 
 /* convert elixir-format secfilts to internal secfilts */
-SecFilt *SecFiltElixirToInternal (SecFiltElixir *in, int Nvalues) {
+SecFilt *SecFilt_Elixir_ToInternal (SecFilt_Elixir *in, int Nvalues) {
 
   int i;
@@ -167,10 +167,10 @@
 
 /* convert internal secfilts to elixir-format secfilts */
-SecFiltElixir *SecFiltInternalToElixir (SecFilt *in, int Nvalues) {
-
-  int i;
-  SecFiltElixir *out;
-
-  ALLOCATE (out, SecFiltElixir, Nvalues);
+SecFilt_Elixir *SecFiltInternalTo_Elixir (SecFilt *in, int Nvalues) {
+
+  int i;
+  SecFilt_Elixir *out;
+
+  ALLOCATE (out, SecFilt_Elixir, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -183,5 +183,5 @@
 
 /* convert elixir-format images to internal images */
-Image *ImageElixirToInternal (ImageElixir *in, int Nvalues) {
+Image *Image_Elixir_ToInternal (Image_Elixir *in, int Nvalues) {
 
   int i;
@@ -239,10 +239,10 @@
 
 /* convert internal images to elixir-format images */
-ImageElixir *ImageInternalToElixir (Image *in, int Nvalues) {
-
-  int i;
-  ImageElixir *out;
-
-  ALLOCATE (out, ImageElixir, Nvalues);
+Image_Elixir *ImageInternalTo_Elixir (Image *in, int Nvalues) {
+
+  int i;
+  Image_Elixir *out;
+
+  ALLOCATE (out, Image_Elixir, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c	(revision 15034)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_loneos.c	(revision 15035)
@@ -2,5 +2,5 @@
 
 /* convert loneos-format measures to internal measures */
-Measure *MeasureLoneosToInternal (MeasureLoneos *in, int Nvalues) {
+Measure *Measure_Loneos_ToInternal (Measure_Loneos *in, int Nvalues) {
 
   int i;
@@ -51,10 +51,10 @@
 
 /* convert internal measures to loneos-format measures */
-MeasureLoneos *MeasureInternalToLoneos (Measure *in, int Nvalues) {
-
-  int i;
-  MeasureLoneos *out;
-
-  ALLOCATE (out, MeasureLoneos, Nvalues);
+Measure_Loneos *MeasureInternalTo_Loneos (Measure *in, int Nvalues) {
+
+  int i;
+  Measure_Loneos *out;
+
+  ALLOCATE (out, Measure_Loneos, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -75,5 +75,5 @@
 
 /* convert loneos-format averages to internal averages */
-Average *AverageLoneosToInternal (AverageLoneos *in, int Nvalues, SecFilt **primary) {
+Average *Average_Loneos_ToInternal (Average_Loneos *in, int Nvalues, SecFilt **primary) {
 
   int i;
@@ -120,10 +120,10 @@
 
 /* convert internal averages to loneos-format averages */
-AverageLoneos *AverageInternalToLoneos (Average *in, int Nvalues, SecFilt *primary) {
-
-  int i;
-  AverageLoneos *out;
-
-  ALLOCATE (out, AverageLoneos, Nvalues);
+Average_Loneos *AverageInternalTo_Loneos (Average *in, int Nvalues, SecFilt *primary) {
+
+  int i;
+  Average_Loneos *out;
+
+  ALLOCATE (out, Average_Loneos, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -144,5 +144,5 @@
 
 /* convert loneos-format secfilts to internal secfilts */
-SecFilt *SecFiltLoneosToInternal (SecFiltLoneos *in, int Nvalues) {
+SecFilt *SecFilt_Loneos_ToInternal (SecFilt_Loneos *in, int Nvalues) {
 
   int i;
@@ -162,10 +162,10 @@
 
 /* convert internal secfilts to loneos-format secfilts */
-SecFiltLoneos *SecFiltInternalToLoneos (SecFilt *in, int Nvalues) {
-
-  int i;
-  SecFiltLoneos *out;
-
-  ALLOCATE (out, SecFiltLoneos, Nvalues);
+SecFilt_Loneos *SecFiltInternalTo_Loneos (SecFilt *in, int Nvalues) {
+
+  int i;
+  SecFilt_Loneos *out;
+
+  ALLOCATE (out, SecFilt_Loneos, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -177,5 +177,5 @@
 
 /* convert loneos-format images to internal images */
-Image *ImageLoneosToInternal (ImageLoneos *in, int Nvalues) {
+Image *Image_Loneos_ToInternal (Image_Loneos *in, int Nvalues) {
 
   int i;
@@ -233,10 +233,10 @@
 
 /* convert internal images to loneos-format images */
-ImageLoneos *ImageInternalToLoneos (Image *in, int Nvalues) {
-
-  int i;
-  ImageLoneos *out;
-
-  ALLOCATE (out, ImageLoneos, Nvalues);
+Image_Loneos *ImageInternalTo_Loneos (Image *in, int Nvalues) {
+
+  int i;
+  Image_Loneos *out;
+
+  ALLOCATE (out, Image_Loneos, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
Index: unk/Ohana/src/libdvo/src/dvo_convert_panstarrs.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs.c	(revision 15034)
+++ 	(revision )
@@ -1,285 +1,0 @@
-# include <dvo.h>
-
-/*** XXX is this format actually used by anyone?? ***/
-
-/* convert panstarrs-format measures to internal measures */
-Measure *MeasurePanstarrsToInternal (MeasurePanstarrs *in, int Nvalues) {
-
-  int i;
-  Measure *out;
-
-  ALLOCATE (out, Measure, 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].dM         = in[i].dM;
-    out[i].Mcal       = in[i].Mcal;
-    out[i].Mgal       = in[i].Mgal;
-    out[i].airmass    = in[i].airmass;
-    out[i].dt         = in[i].dt;
-    out[i].FWx 	      = in[i].FWx;
-    out[i].FWy 	      = in[i].FWy;
-    out[i].theta      = in[i].theta;
-    out[i].dophot     = in[i].dophot;
-    out[i].photcode   = in[i].source;
-    out[i].t          = in[i].t;
-    out[i].averef     = in[i].averef;
-    out[i].flags      = in[i].flags;
-    
-    /* these can be determined if needed / desired */
-    out[i].Xccd     = 0;
-    out[i].Yccd     = 0;
-    out[i].dXccd    = 0;
-    out[i].dYccd    = 0;
-
-    /* these do not have a corresponding value */
-    out[i].stargal  = 0;
-    out[i].Sky      = 0;
-    out[i].dSky     = 0;
-    out[i].qPSF     = 0;
-
-    /* XXX add these later */
-    out[i].detID_hi = 0;
-    out[i].detID_lo = 0;
-    out[i].imageID_hi = 0;
-    out[i].imageID_lo = 0;
-  }
-  return (out);
-}
-
-/* convert internal measures to panstarrs-format measures */
-MeasurePanstarrs *MeasureInternalToPanstarrs (Measure *in, int Nvalues) {
-
-  int i;
-  MeasurePanstarrs *out;
-
-  ALLOCATE (out, MeasurePanstarrs, 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].dM      = in[i].dM;
-    out[i].Mcal    = in[i].Mcal;
-    out[i].Mgal    = in[i].Mgal;
-    out[i].airmass = in[i].airmass;
-    out[i].dt      = in[i].dt;
-    out[i].FWx 	   = in[i].FWx;
-    out[i].FWy 	   = in[i].FWy;
-    out[i].theta   = in[i].theta;
-    out[i].dophot  = in[i].dophot;
-    out[i].source  = in[i].photcode;
-    out[i].t       = in[i].t;
-    out[i].averef  = in[i].averef;
-    out[i].flags   = in[i].flags;
-  }
-  return (out);
-}
-
-/* convert panstarrs-format averages to internal averages */
-Average *AveragePanstarrsToInternal (AveragePanstarrs *in, int Nvalues) {
-
-  int i;
-  Average *out;
-
-  ALLOCATE (out, Average, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    out[i].R       = in[i].R;      
-    out[i].D       = in[i].D;      
-    out[i].M       = in[i].M;      
-    out[i].dM      = in[i].dM;
-    out[i].Xp      = in[i].Xp;     
-    out[i].Xm      = in[i].Xm;     
-    out[i].Xg      = in[i].Xg;
-    out[i].Nm      = in[i].Nm;     
-    out[i].Nn      = in[i].Nn;     
-    out[i].code    = in[i].code;   
-    out[i].offset  = in[i].offset; 
-    out[i].missing = in[i].missing;
-
-    /* these don't exist in Panstarrs */
-    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;
-
-    /* XXX add these later */
-    out[i].objID_hi = 0;
-    out[i].objID_lo = 0;
-  }
-  return (out);
-}
-
-/* convert internal averages to panstarrs-format averages */
-AveragePanstarrs *AverageInternalToPanstarrs (Average *in, int Nvalues) {
-
-  int i;
-  AveragePanstarrs *out;
-
-  ALLOCATE (out, AveragePanstarrs, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    out[i].R       = in[i].R;      
-    out[i].D       = in[i].D;      
-    out[i].M       = in[i].M;      
-    out[i].dM      = in[i].dM;
-    out[i].Xp      = in[i].Xp;     
-    out[i].Xm      = in[i].Xm;     
-    out[i].Xg      = in[i].Xg;
-    out[i].Nm      = in[i].Nm;     
-    out[i].Nn      = in[i].Nn;     
-    out[i].code    = in[i].code;   
-    out[i].offset  = in[i].offset; 
-    out[i].missing = in[i].missing;
-  }
-  return (out);
-}
-
-/* convert panstarrs-format secfilts to internal secfilts */
-SecFilt *SecFiltPanstarrsToInternal (SecFiltPanstarrs *in, int Nvalues) {
-
-  int i;
-  SecFilt *out;
-
-  ALLOCATE (out, SecFilt, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    out[i].M    = in[i].M;      
-    out[i].dM   = in[i].dM;      
-    out[i].Xm      = in[i].Xm;     
-     out[i].Ncode = 0;
-    out[i].Nused = 0;
- }
-  return (out);
-}
-
-/* convert internal secfilts to panstarrs-format secfilts */
-SecFiltPanstarrs *SecFiltInternalToPanstarrs (SecFilt *in, int Nvalues) {
-
-  int i;
-  SecFiltPanstarrs *out;
-
-  ALLOCATE (out, SecFiltPanstarrs, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    out[i].M       = in[i].M;      
-    out[i].dM      = in[i].dM;
-    out[i].Xm      = in[i].Xm;     
-  }
-  return (out);
-}
-
-/* convert panstarrs-format images to internal images */
-Image *ImagePanstarrsToInternal (ImagePanstarrs *in, int Nvalues) {
-
-  int i;
-  Image *out;
-
-  ALLOCATE (out, Image, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    memcpy (&out[i].coords, &in[i].coords, sizeof(Coords));
-    memcpy (out[i].dummy, in[i].dummy, 20);
-    strcpy (out[i].name, in[i].name);
-
-    out[i].tzero    	    = in[i].tzero;
-    out[i].nstar    	    = in[i].nstar;
-    out[i].secz	    	    = in[i].secz;
-    out[i].NX	    	    = in[i].NX;
-    out[i].NY	    	    = in[i].NY;
-    out[i].apmifit  	    = in[i].apmifit;
-    out[i].dapmifit 	    = in[i].dapmifit;
-    out[i].Mcal	    	    = in[i].Mcal;
-    out[i].dMcal    	    = in[i].dMcal;
-    out[i].Xm	    	    = in[i].Xm;
-    out[i].photcode   	    = in[i].source;
-    out[i].exptime  	    = in[i].exptime;
-    out[i].detection_limit  = in[i].detection_limit;
-    out[i].saturation_limit = in[i].saturation_limit;
-    out[i].cerror	    = in[i].cerror;
-    out[i].fwhm_x	    = in[i].fwhm_x;
-    out[i].fwhm_y	    = in[i].fwhm_y;
-    out[i].trate	    = in[i].trate;
-    out[i].code		    = in[i].code;
-    out[i].ccdnum	    = in[i].ccdnum;
-    out[i].order	    = in[i].order;
-    out[i].Mx		    = in[i].Mx;
-    out[i].My		    = in[i].My;
-    out[i].Mxx		    = in[i].Mxx;
-    out[i].Mxy		    = in[i].Mxy;
-    out[i].Myy		    = in[i].Myy;
-    out[i].Mxxx		    = in[i].Mxxx;
-    out[i].Mxxy		    = in[i].Mxxy;
-    out[i].Mxyy		    = in[i].Mxyy;
-    out[i].Myyy		    = in[i].Myyy;
-    out[i].Mxxxx	    = in[i].Mxxxx;
-    out[i].Mxxxy	    = in[i].Mxxxy;
-    out[i].Mxxyy	    = in[i].Mxxyy;
-    out[i].Mxyyy	    = in[i].Mxyyy;
-    out[i].Myyyy	    = in[i].Myyyy;
-
-    /* XXX add these later */
-    out[i].imageID_hi = 0;
-    out[i].imageID_lo = 0;
-  }
-  return (out);
-}
-
-/* convert internal images to panstarrs-format images */
-ImagePanstarrs *ImageInternalToPanstarrs (Image *in, int Nvalues) {
-
-  int i;
-  ImagePanstarrs *out;
-
-  ALLOCATE (out, ImagePanstarrs, Nvalues);
-
-  for (i = 0; i < Nvalues; i++) {
-    memcpy (&out[i].coords, &in[i].coords, sizeof(Coords));
-    memcpy (out[i].dummy, in[i].dummy, 20);
-    strcpy (out[i].name, in[i].name);
-
-    out[i].tzero    	    = in[i].tzero;
-    out[i].nstar    	    = in[i].nstar;
-    out[i].secz	    	    = in[i].secz;
-    out[i].NX	    	    = in[i].NX;
-    out[i].NY	    	    = in[i].NY;
-    out[i].apmifit  	    = in[i].apmifit;
-    out[i].dapmifit 	    = in[i].dapmifit;
-    out[i].Mcal	    	    = in[i].Mcal;
-    out[i].dMcal    	    = in[i].dMcal;
-    out[i].Xm	    	    = in[i].Xm;
-    out[i].source   	    = in[i].photcode;
-    out[i].exptime  	    = in[i].exptime;
-    out[i].detection_limit  = in[i].detection_limit;
-    out[i].saturation_limit = in[i].saturation_limit;
-    out[i].cerror	    = in[i].cerror;
-    out[i].fwhm_x	    = in[i].fwhm_x;
-    out[i].fwhm_y	    = in[i].fwhm_y;
-    out[i].trate	    = in[i].trate;
-    out[i].code		    = in[i].code;
-    out[i].ccdnum	    = in[i].ccdnum;
-    out[i].order	    = in[i].order;
-    out[i].Mx		    = in[i].Mx;
-    out[i].My		    = in[i].My;
-    out[i].Mxx		    = in[i].Mxx;
-    out[i].Mxy		    = in[i].Mxy;
-    out[i].Myy		    = in[i].Myy;
-    out[i].Mxxx		    = in[i].Mxxx;
-    out[i].Mxxy		    = in[i].Mxxy;
-    out[i].Mxyy		    = in[i].Mxyy;
-    out[i].Myyy		    = in[i].Myyy;
-    out[i].Mxxxx	    = in[i].Mxxxx;
-    out[i].Mxxxy	    = in[i].Mxxxy;
-    out[i].Mxxyy	    = in[i].Mxxyy;
-    out[i].Mxyyy	    = in[i].Mxyyy;
-    out[i].Myyyy	    = in[i].Myyyy;
-  }
-  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 15034)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_0.c	(revision 15035)
@@ -2,5 +2,5 @@
 
 /* convert panstarrs-format measures to internal measures */
-Measure *MeasurePanstarrs_DEV_0_ToInternal (MeasurePanstarrs_DEV_0 *in, int Nvalues) {
+Measure *Measure_Panstarrs_DEV_0_ToInternal (Measure_Panstarrs_DEV_0 *in, int Nvalues) {
 
   int i;
@@ -44,10 +44,10 @@
 
 /* convert internal measures to panstarrs-format measures */
-MeasurePanstarrs_DEV_0 *MeasureInternalToPanstarrs_DEV_0 (Measure *in, int Nvalues) {
-
-  int i;
-  MeasurePanstarrs_DEV_0 *out;
-
-  ALLOCATE (out, MeasurePanstarrs_DEV_0, Nvalues);
+Measure_Panstarrs_DEV_0 *MeasureInternalTo_Panstarrs_DEV_0 (Measure *in, int Nvalues) {
+
+  int i;
+  Measure_Panstarrs_DEV_0 *out;
+
+  ALLOCATE (out, Measure_Panstarrs_DEV_0, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -86,5 +86,6 @@
 
 /* convert panstarrs-format averages to internal averages */
-Average *AveragePanstarrs_DEV_0_ToInternal (AveragePanstarrs_DEV_0 *in, int Nvalues) {
+// 'primary is needed to conform with the API for Loneos and Elixir, but is not used
+Average *Average_Panstarrs_DEV_0_ToInternal (Average_Panstarrs_DEV_0 *in, int Nvalues, SecFilt **primary) {
 
   int i;
@@ -117,10 +118,11 @@
 
 /* convert internal averages to panstarrs-format averages */
-AveragePanstarrs_DEV_0 *AverageInternalToPanstarrs_DEV_0 (Average *in, int Nvalues) {
-
-  int i;
-  AveragePanstarrs_DEV_0 *out;
-
-  ALLOCATE (out, AveragePanstarrs_DEV_0, Nvalues);
+// 'primary is needed to conform with the API for Loneos and Elixir, but is not used
+Average_Panstarrs_DEV_0 *AverageInternalTo_Panstarrs_DEV_0 (Average *in, int Nvalues, SecFilt *primary) {
+
+  int i;
+  Average_Panstarrs_DEV_0 *out;
+
+  ALLOCATE (out, Average_Panstarrs_DEV_0, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -148,5 +150,5 @@
 
 /* convert panstarrs-format secfilts to internal secfilts */
-SecFilt *SecFiltPanstarrs_DEV_0_ToInternal (SecFiltPanstarrs_DEV_0 *in, int Nvalues) {
+SecFilt *SecFilt_Panstarrs_DEV_0_ToInternal (SecFilt_Panstarrs_DEV_0 *in, int Nvalues) {
 
   int i;
@@ -166,10 +168,10 @@
 
 /* convert internal secfilts to panstarrs-format secfilts */
-SecFiltPanstarrs_DEV_0 *SecFiltInternalToPanstarrs_DEV_0 (SecFilt *in, int Nvalues) {
-
-  int i;
-  SecFiltPanstarrs_DEV_0 *out;
-
-  ALLOCATE (out, SecFiltPanstarrs_DEV_0, Nvalues);
+SecFilt_Panstarrs_DEV_0 *SecFiltInternalTo_Panstarrs_DEV_0 (SecFilt *in, int Nvalues) {
+
+  int i;
+  SecFilt_Panstarrs_DEV_0 *out;
+
+  ALLOCATE (out, SecFilt_Panstarrs_DEV_0, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -184,5 +186,5 @@
 
 /* convert panstarrs-format images to internal images */
-Image *ImagePanstarrs_DEV_0_ToInternal (ImagePanstarrs_DEV_0 *in, int Nvalues) {
+Image *Image_Panstarrs_DEV_0_ToInternal (Image_Panstarrs_DEV_0 *in, int Nvalues) {
 
   int i;
@@ -240,10 +242,10 @@
 
 /* convert internal images to panstarrs-format images */
-ImagePanstarrs_DEV_0 *ImageInternalToPanstarrs_DEV_0 (Image *in, int Nvalues) {
-
-  int i;
-  ImagePanstarrs_DEV_0 *out;
-
-  ALLOCATE (out, ImagePanstarrs_DEV_0, Nvalues);
+Image_Panstarrs_DEV_0 *ImageInternalTo_Panstarrs_DEV_0 (Image *in, int Nvalues) {
+
+  int i;
+  Image_Panstarrs_DEV_0 *out;
+
+  ALLOCATE (out, Image_Panstarrs_DEV_0, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
Index: /trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_1.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_1.c	(revision 15034)
+++ /trunk/Ohana/src/libdvo/src/dvo_convert_panstarrs_DEV_1.c	(revision 15035)
@@ -2,5 +2,5 @@
 
 /* convert panstarrs-format measures to internal measures */
-Measure *MeasurePanstarrs_DEV_1_ToInternal (MeasurePanstarrs_DEV_1 *in, int Nvalues) {
+Measure *Measure_Panstarrs_DEV_1_ToInternal (Measure_Panstarrs_DEV_1 *in, int Nvalues) {
 
   int i;
@@ -44,10 +44,10 @@
 
 /* convert internal measures to panstarrs-format measures */
-MeasurePanstarrs_DEV_1 *MeasureInternalToPanstarrs_DEV_1 (Measure *in, int Nvalues) {
-
-  int i;
-  MeasurePanstarrs_DEV_1 *out;
-
-  ALLOCATE (out, MeasurePanstarrs_DEV_1, Nvalues);
+Measure_Panstarrs_DEV_1 *MeasureInternalTo_Panstarrs_DEV_1 (Measure *in, int Nvalues) {
+
+  int i;
+  Measure_Panstarrs_DEV_1 *out;
+
+  ALLOCATE (out, Measure_Panstarrs_DEV_1, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -86,5 +86,6 @@
 
 /* convert panstarrs-format averages to internal averages */
-Average *AveragePanstarrs_DEV_1_ToInternal (AveragePanstarrs_DEV_1 *in, int Nvalues) {
+// 'primary is needed to conform with the API for Loneos and Elixir, but is not used
+Average *Average_Panstarrs_DEV_1_ToInternal (Average_Panstarrs_DEV_1 *in, int Nvalues, SecFilt **primary) {
 
   int i;
@@ -117,10 +118,11 @@
 
 /* convert internal averages to panstarrs-format averages */
-AveragePanstarrs_DEV_1 *AverageInternalToPanstarrs_DEV_1 (Average *in, int Nvalues) {
-
-  int i;
-  AveragePanstarrs_DEV_1 *out;
-
-  ALLOCATE (out, AveragePanstarrs_DEV_1, Nvalues);
+// 'primary is needed to conform with the API for Loneos and Elixir, but is not used
+Average_Panstarrs_DEV_1 *AverageInternalTo_Panstarrs_DEV_1 (Average *in, int Nvalues, SecFilt *primary) {
+
+  int i;
+  Average_Panstarrs_DEV_1 *out;
+
+  ALLOCATE (out, Average_Panstarrs_DEV_1, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -148,5 +150,5 @@
 
 /* convert panstarrs-format secfilts to internal secfilts */
-SecFilt *SecFiltPanstarrs_DEV_1_ToInternal (SecFiltPanstarrs_DEV_1 *in, int Nvalues) {
+SecFilt *SecFilt_Panstarrs_DEV_1_ToInternal (SecFilt_Panstarrs_DEV_1 *in, int Nvalues) {
 
   int i;
@@ -166,10 +168,10 @@
 
 /* convert internal secfilts to panstarrs-format secfilts */
-SecFiltPanstarrs_DEV_1 *SecFiltInternalToPanstarrs_DEV_1 (SecFilt *in, int Nvalues) {
-
-  int i;
-  SecFiltPanstarrs_DEV_1 *out;
-
-  ALLOCATE (out, SecFiltPanstarrs_DEV_1, Nvalues);
+SecFilt_Panstarrs_DEV_1 *SecFiltInternalTo_Panstarrs_DEV_1 (SecFilt *in, int Nvalues) {
+
+  int i;
+  SecFilt_Panstarrs_DEV_1 *out;
+
+  ALLOCATE (out, SecFilt_Panstarrs_DEV_1, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
@@ -184,5 +186,5 @@
 
 /* convert panstarrs-format images to internal images */
-Image *ImagePanstarrs_DEV_1_ToInternal (ImagePanstarrs_DEV_1 *in, int Nvalues) {
+Image *Image_Panstarrs_DEV_1_ToInternal (Image_Panstarrs_DEV_1 *in, int Nvalues) {
 
   int i;
@@ -240,10 +242,10 @@
 
 /* convert internal images to panstarrs-format images */
-ImagePanstarrs_DEV_1 *ImageInternalToPanstarrs_DEV_1 (Image *in, int Nvalues) {
-
-  int i;
-  ImagePanstarrs_DEV_1 *out;
-
-  ALLOCATE (out, ImagePanstarrs_DEV_1, Nvalues);
+Image_Panstarrs_DEV_1 *ImageInternalTo_Panstarrs_DEV_1 (Image *in, int Nvalues) {
+
+  int i;
+  Image_Panstarrs_DEV_1 *out;
+
+  ALLOCATE (out, Image_Panstarrs_DEV_1, Nvalues);
 
   for (i = 0; i < Nvalues; i++) {
Index: unk/Ohana/src/libdvo/src/dvo_convert_pmtest.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_convert_pmtest.c	(revision 15034)
+++ 	(revision )
@@ -1,160 +1,0 @@
-# include <dvo.h>
-
-/* convert elixir-format measures to internal measures */
-Measure *MeasureElixirToInternal (MeasureElixir *in, int Nvalues) {
-
-  int i;
-  Measure *out;
-
-  ALLOCATE (out, Measure, 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].dM         = in[i].dM;
-    out[i].dt         = in[i].dt;
-    out[i].Mcal       = in[i].Mcal;
-    out[i].Mgal       = in[i].Mgal;
-    out[i].airmass    = in[i].airmass;
-    out[i].FWx 	      = in[i].FWx;
-    out[i].FWy 	      = in[i].FWy;
-    out[i].theta      = in[i].theta;
-    out[i].dophot     = in[i].dophot;
-    out[i].photcode   = in[i].source;
-    out[i].t          = in[i].t;
-    out[i].averef     = in[i].averef;
-    out[i].flags      = in[i].flags;
-
-    out[i].Xccd       = in[i].Xccd;
-    out[i].Yccd       = in[i].Yccd;
-    out[i].dXccd      = in[i].dXccd;
-    out[i].dYccd      = in[i].dYccd;
-					    
-    out[i].stargal    = in[i].stargal;
-    out[i].Sky        = in[i].Sky;
-    out[i].dSky       = in[i].dSky;
-    out[i].qPSF       = in[i].qPSF;
-					    
-    out[i].detID_hi   = in[i].detID_hi;
-    out[i].detID_lo   = in[i].detID_lo;
-    out[i].imageID_hi = in[i].imageID_hi;
-    out[i].imageID_lo = in[i].imageID_lo;
-  }
-  return (out);
-}
-
-/* convert internal measures to elixir-format measures */
-MeasureElixir *MeasureInternalToElixir (Measure *in, int Nvalues) {
-
-  int i;
-  MeasureElixir *out;
-
-  ALLOCATE (out, MeasureElixir, 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].dM         = in[i].dM;
-    out[i].dt         = in[i].dt;
-    out[i].Mcal       = in[i].Mcal;
-    out[i].Mgal       = in[i].Mgal;
-    out[i].airmass    = in[i].airmass;
-    out[i].FWx 	      = in[i].FWx;
-    out[i].FWy 	      = in[i].FWy;
-    out[i].theta      = in[i].theta;
-    out[i].dophot     = in[i].dophot;
-    out[i].photcode   = in[i].source;
-    out[i].t          = in[i].t;
-    out[i].averef     = in[i].averef;
-    out[i].flags      = in[i].flags;
-
-    out[i].Xccd       = in[i].Xccd;
-    out[i].Yccd       = in[i].Yccd;
-    out[i].dXccd      = in[i].dXccd;
-    out[i].dYccd      = in[i].dYccd;
-					    
-    out[i].stargal    = in[i].stargal;
-    out[i].Sky        = in[i].Sky;
-    out[i].dSky       = in[i].dSky;
-    out[i].qPSF       = in[i].qPSF;
-					    
-    out[i].detID_hi   = in[i].detID_hi;
-    out[i].detID_lo   = in[i].detID_lo;
-    out[i].imageID_hi = in[i].imageID_hi;
-    out[i].imageID_lo = in[i].imageID_lo;
-  }
-  return (out);
-}
-
-/* convert panstarrs-format averages to internal averages */
-Average *AveragePMtestToInternal (AveragePMtest *in, int Nvalues) {
-
-  int i;
-  Average *out;
-
-  ALLOCATE (out, Average, Nvalues);
-
-  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].M       = in[i].M;      
-    out[i].dM      = in[i].dM;
-    out[i].Xp      = in[i].Xp;     
-    out[i].Xm      = in[i].Xm;     
-    out[i].Xg      = in[i].Xg;
-    out[i].Nm      = in[i].Nm;     
-    out[i].Nn      = in[i].Nn;     
-    out[i].code    = in[i].code;   
-    out[i].offset  = in[i].offset; 
-    out[i].missing = in[i].missing;
-  }
-  return (out);
-}
-
-/* convert internal averages to panstarrs-format averages */
-AveragePMtest *AverageInternalToPMtest (Average *in, int Nvalues) {
-
-  int i;
-  AveragePMtest *out;
-
-  ALLOCATE (out, AveragePMtest, Nvalues);
-
-  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].M       = in[i].M;      
-    out[i].dM      = in[i].dM;
-    out[i].Xp      = in[i].Xp;     
-    out[i].Xm      = in[i].Xm;     
-    out[i].Xg      = in[i].Xg;
-    out[i].Nm      = in[i].Nm;     
-    out[i].Nn      = in[i].Nn;     
-    out[i].code    = in[i].code;   
-    out[i].offset  = in[i].offset; 
-    out[i].missing = in[i].missing;
-  }
-  return (out);
-}
-
Index: /trunk/Ohana/src/libdvo/src/dvo_image.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_image.c	(revision 15034)
+++ /trunk/Ohana/src/libdvo/src/dvo_image.c	(revision 15035)
@@ -192,6 +192,5 @@
   if (db[0].format == DVO_FORMAT_PANSTARRS_DEV_0) gfits_modify (&db[0].header, "FORMAT", "%s", 1, "PANSTARRS_DEV_0");
   if (db[0].format == DVO_FORMAT_PANSTARRS_DEV_1) gfits_modify (&db[0].header, "FORMAT", "%s", 1, "PANSTARRS_DEV_1");
-  // if (db[0].format == DVO_FORMAT_PANSTARRS) 	  gfits_modify (&db[0].header, "FORMAT", "%s", 1, "PANSTARRS");
-  // if (db[0].format == DVO_FORMAT_PMTEST)    	  gfits_modify (&db[0].header, "FORMAT", "%s", 1, "PMTEST");
+  if (db[0].format == DVO_FORMAT_PS1_DEV_1)       gfits_modify (&db[0].header, "FORMAT", "%s", 1, "PS1_DEV_1");
   
   return;
Index: /trunk/Ohana/src/libdvo/src/dvo_image_raw.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_image_raw.c	(revision 15034)
+++ /trunk/Ohana/src/libdvo/src/dvo_image_raw.c	(revision 15035)
@@ -48,9 +48,9 @@
   ImageSize = 0;
   if (db[0].format == DVO_FORMAT_INTERNAL)  	  ImageSize = sizeof(Image);
-  if (db[0].format == DVO_FORMAT_LONEOS)    	  ImageSize = sizeof(ImageLoneos);
-  if (db[0].format == DVO_FORMAT_ELIXIR)    	  ImageSize = sizeof(ImageElixir);
-  if (db[0].format == DVO_FORMAT_PANSTARRS) 	  ImageSize = sizeof(ImagePanstarrs);
-  if (db[0].format == DVO_FORMAT_PANSTARRS_DEV_0) ImageSize = sizeof(ImagePanstarrs_DEV_0);
-  if (db[0].format == DVO_FORMAT_PANSTARRS_DEV_1) ImageSize = sizeof(ImagePanstarrs_DEV_1);
+  if (db[0].format == DVO_FORMAT_LONEOS)    	  ImageSize = sizeof(Image_Loneos);
+  if (db[0].format == DVO_FORMAT_ELIXIR)    	  ImageSize = sizeof(Image_Elixir);
+  if (db[0].format == DVO_FORMAT_PANSTARRS_DEV_0) ImageSize = sizeof(Image_Panstarrs_DEV_0);
+  if (db[0].format == DVO_FORMAT_PANSTARRS_DEV_1) ImageSize = sizeof(Image_Panstarrs_DEV_1);
+  if (db[0].format == DVO_FORMAT_PS1_DEV_1)       ImageSize = sizeof(Image_PS1_DEV_1);
 
   /* check that filesize makes sense */
@@ -71,9 +71,9 @@
 
   if (db[0].format == DVO_FORMAT_INTERNAL)  	  gfits_table_mkheader_Image (&db[0].theader);
-  if (db[0].format == DVO_FORMAT_LONEOS)    	  gfits_table_mkheader_ImageLoneos (&db[0].theader);
-  if (db[0].format == DVO_FORMAT_ELIXIR)    	  gfits_table_mkheader_ImageElixir (&db[0].theader);
-  if (db[0].format == DVO_FORMAT_PANSTARRS) 	  gfits_table_mkheader_ImagePanstarrs (&db[0].theader);
-  if (db[0].format == DVO_FORMAT_PANSTARRS_DEV_0) gfits_table_mkheader_ImagePanstarrs_DEV_0 (&db[0].theader);
-  if (db[0].format == DVO_FORMAT_PANSTARRS_DEV_1) gfits_table_mkheader_ImagePanstarrs_DEV_1 (&db[0].theader);
+  if (db[0].format == DVO_FORMAT_LONEOS)    	  gfits_table_mkheader_Image_Loneos (&db[0].theader);
+  if (db[0].format == DVO_FORMAT_ELIXIR)    	  gfits_table_mkheader_Image_Elixir (&db[0].theader);
+  if (db[0].format == DVO_FORMAT_PANSTARRS_DEV_0) gfits_table_mkheader_Image_Panstarrs_DEV_0 (&db[0].theader);
+  if (db[0].format == DVO_FORMAT_PANSTARRS_DEV_1) gfits_table_mkheader_Image_Panstarrs_DEV_1 (&db[0].theader);
+  if (db[0].format == DVO_FORMAT_PS1_DEV_1)       gfits_table_mkheader_Image_PS1_DEV_1 (&db[0].theader);
     
   /* read data from file */
Index: /trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c
===================================================================
--- /trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 15034)
+++ /trunk/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 15035)
@@ -30,8 +30,12 @@
 
 /* the static ZERO_POINT is used by programs as an approximate nominal */
-static double ZERO_POINT;
+static double ZERO_POINT = 0.0;
 
 void SetZeroPoint (double ZP) {
   ZERO_POINT = ZP;
+}
+
+double GetZeroPoint () {
+  return ZERO_POINT;
 }
 
