Index: /branches/eam_branches/ohana.20190329/src/addstar/src/args_loadukirt_uhs.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/addstar/src/args_loadukirt_uhs.c	(revision 40901)
+++ /branches/eam_branches/ohana.20190329/src/addstar/src/args_loadukirt_uhs.c	(revision 40902)
@@ -24,4 +24,9 @@
     UKIRT_MODE = UKIRT_MODE_UGCS;
     UKIRT_NFILTER = 6;
+    remove_argument (N, argc, argv);
+  }
+  if ((N = get_argument (*argc, argv, "-ugps"))) {
+    UKIRT_MODE = UKIRT_MODE_UGPS;
+    UKIRT_NFILTER = 5;
     remove_argument (N, argc, argv);
   }
@@ -147,6 +152,7 @@
 static void help () {
 
-  fprintf (stderr, "USAGE: loadukirt_uhs [options] (file) [..more files]\n");
-  fprintf (stderr, "  add data from stellar parameter file to DVO\n\n");
+  fprintf (stderr, "USAGE: loadukirt_uhs [options] (file) [-uhs | -ugcs | -ulas | -ugps] [..more files]\n");
+  fprintf (stderr, "  add data from UKIRT CSV file to DVO\n");
+  fprintf (stderr, "  mode is required : -uhs | -ugcs | -ulas | -ugps\n\n");
 
   fprintf (stderr, "  optional flags:\n");
Index: /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars.c	(revision 40901)
+++ /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars.c	(revision 40902)
@@ -12,4 +12,9 @@
     case UKIRT_MODE_UGCS: {
       UKIRT_Stars *stars = loadukirt_uhs_readstars_ugcs (f, buffer, nstart, options, nstars);
+      return stars;
+    }
+      
+    case UKIRT_MODE_UGPS: {
+      UKIRT_Stars *stars = loadukirt_uhs_readstars_ugps (f, buffer, nstart, options, nstars);
       return stars;
     }
Index: /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_ugcs.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_ugcs.c	(revision 40901)
+++ /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_ugcs.c	(revision 40902)
@@ -223,10 +223,9 @@
 UKIRT_Stars *loadukirt_uhs_readstars_ugcs (FILE *f, char *buffer, int *nstart, AddstarClientOptions *options, int *nstars) {
 
-  int codeZ  = GetPhotcodeCodebyName ("UKIRT_Z");  if (!codeZ ) Shutdown ("missing photcode UKIRT_Z ");
-  int codeY  = GetPhotcodeCodebyName ("UKIRT_Y");  if (!codeY ) Shutdown ("missing photcode UKIRT_Y ");
-  int codeJ  = GetPhotcodeCodebyName ("UKIRT_J");  if (!codeJ ) Shutdown ("missing photcode UKIRT_J ");
-  int codeH  = GetPhotcodeCodebyName ("UKIRT_H");  if (!codeH ) Shutdown ("missing photcode UKIRT_H ");
-  int codeK1 = GetPhotcodeCodebyName ("UKIRT_K1"); if (!codeK1) Shutdown ("missing photcode UKIRT_K1");
-  int codeK2 = GetPhotcodeCodebyName ("UKIRT_K2"); if (!codeK2) Shutdown ("missing photcode UKIRT_K2");
+  int codeZ = GetPhotcodeCodebyName ("UKIRT_Z"); if (!codeZ) Shutdown ("missing photcode UKIRT_Z");
+  int codeY = GetPhotcodeCodebyName ("UKIRT_Y"); if (!codeY) Shutdown ("missing photcode UKIRT_Y");
+  int codeJ = GetPhotcodeCodebyName ("UKIRT_J"); if (!codeJ) Shutdown ("missing photcode UKIRT_J");
+  int codeH = GetPhotcodeCodebyName ("UKIRT_H"); if (!codeH) Shutdown ("missing photcode UKIRT_H");
+  int codeK = GetPhotcodeCodebyName ("UKIRT_K"); if (!codeK) Shutdown ("missing photcode UKIRT_K");
 
   // XXX I need a UKIRT UHS Mean Epoch
@@ -556,7 +555,4 @@
 
   ALLOCATE_PTR (stars, UKIRT_Stars, NSTARS);
-  for (int i = 0; i < NSTARS; i++) {
-    ALLOCATE (stars[i].measure, Measure, UKIRT_NFILTER);
-  }
 
   for (int i = 0; i < NstarsIn; i++) {
@@ -566,4 +562,7 @@
     Dmin = MIN (Dmin, dec[i]);
     Dmax = MAX (Dmax, dec[i]);
+
+    // only allocate the measures for stars as we define them
+    ALLOCATE (stars[Nstars].measure, Measure, UKIRT_NFILTER);
 
     // we have NFILTER (== 6) UKIRT measurements per object
@@ -572,5 +571,5 @@
       dvo_measure_init (&stars[Nstars].measure[j]);
     }
-
+    
     stars[Nstars].average.R = ra[i];
     stars[Nstars].average.D = dec[i];
@@ -691,5 +690,5 @@
     stars[Nstars].measure[4].photFlags2 = photFlags2;
     stars[Nstars].measure[4].detID      = k1SeqNum[i];
-    stars[Nstars].measure[4].photcode   = codeK1;
+    stars[Nstars].measure[4].photcode   = codeK;
 
     // K1 measure
@@ -711,5 +710,5 @@
     stars[Nstars].measure[5].photFlags2 = photFlags2;
     stars[Nstars].measure[5].detID      = k2SeqNum[i];
-    stars[Nstars].measure[5].photcode   = codeK2;
+    stars[Nstars].measure[5].photcode   = codeK;
 
     stars[Nstars].average.Nmeasure = UKIRT_NFILTER;
@@ -719,7 +718,4 @@
       NSTARS += 10000;
       REALLOCATE (stars, UKIRT_Stars, NSTARS);
-      for (int j = Nstars; j < NSTARS; j++) {
-	ALLOCATE (stars[j].measure, Measure, UKIRT_NFILTER);
-      }
     }
   }
@@ -729,4 +725,5 @@
   FREE (ra);
   FREE (dec);
+  FREE (epoch);
   FREE (priOrSec);
   FREE (mergedClass);
Index: /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_ugps.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_ugps.c	(revision 40901)
+++ /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_ugps.c	(revision 40902)
@@ -48,98 +48,94 @@
  35 pSaturated		      : 
 
- zAperMag1		      : M
- zAperMag1Err	      : dM
- zAperMag3		      : Map
- zAperMag3Err	      : dMap
- zAperMag4		      : Mkron
- zAperMag4Err	      : dMron
- zGausig		      : 
- zEll		      : 
- zPA			      : posangle
- zErrBits		      : 
- zDeblend		      : 
- zClass		      : psfQF
- zClassStat		      : 
- zppErrBits		      : photFlags
- zSeqNum                   : detID
- zObjID		      : 
- zXi   		      : 
- zEta		      : 
-
- zAperMag1		      : M
- zAperMag1Err	      : dM
- zAperMag3		      : Map
- zAperMag3Err	      : dMap
- zAperMag4		      : Mkron
- zAperMag4Err	      : dMron
- zGausig		      : 
- zEll		      : 
- zPA			      : posangle
- zErrBits		      : 
- zDeblend		      : 
- zClass		      : psfQF
- zClassStat		      : 
- zppErrBits		      : photFlags
- zSeqNum                   : detID
- zObjID		      : 
- zXi   		      : 
- zEta		      : 
-
- zAperMag1		      : M
- zAperMag1Err	      : dM
- zAperMag3		      : Map
- zAperMag3Err	      : dMap
- zAperMag4		      : Mkron
- zAperMag4Err	      : dMron
- zGausig		      : 
- zEll		      : 
- zPA			      : posangle
- zErrBits		      : 
- zDeblend		      : 
- zClass		      : psfQF
- zClassStat		      : 
- zppErrBits		      : photFlags
- zSeqNum                   : detID
- zObjID		      : 
- zXi   		      : 
- zEta		      : 
-
- zAperMag1		      : M
- zAperMag1Err	      : dM
- zAperMag3		      : Map
- zAperMag3Err	      : dMap
- zAperMag4		      : Mkron
- zAperMag4Err	      : dMron
- zGausig		      : 
- zEll		      : 
- zPA			      : posangle
- zErrBits		      : 
- zDeblend		      : 
- zClass		      : psfQF
- zClassStat		      : 
- zppErrBits		      : photFlags
- zSeqNum                   : detID
- zObjID		      : 
- zXi   		      : 
- zEta		      : 
-
- zAperMag1		      : M
- zAperMag1Err	      : dM
- zAperMag3		      : Map
- zAperMag3Err	      : dMap
- zAperMag4		      : Mkron
- zAperMag4Err	      : dMron
- zGausig		      : 
- zEll		      : 
- zPA			      : posangle
- zErrBits		      : 
- zDeblend		      : 
- zClass		      : psfQF
- zClassStat		      : 
- zppErrBits		      : photFlags
- zSeqNum                   : detID
- zObjID		      : 
- zXi   		      : 
- zEta		      : 
+ 36 jAperMag1		      : M
+ 37 jAperMag1Err	      : dM
+ 38 jAperMag3		      : Map
+ 39 jAperMag3Err	      : dMap
+ 40 jAperMag4		      : Mkron
+ 41 jAperMag4Err	      : dMron
+ 42 jGausig		      : 
+ 43 jEll		      : 
+ 44 jPA			      : posangle
+ 45 jErrBits		      : 
+ 46 jDeblend		      : 
+ 47 jClass		      : psfQF
+ 48 jClassStat		      : 
+ 49 jppErrBits		      : photFlags
+ 50 jSeqNum                   : detID
+ 51 jObjID		      : 
+ 52 jXi   		      : 
+ 53 jEta		      : 
+ 54 hAperMag1		      : M
+ 55 hAperMag1Err	      : dM
+ 56 hAperMag3		      : Map
+ 57 hAperMag3Err	      : dMap
+ 58 hAperMag4		      : Mkron
+ 59 hAperMag4Err	      : dMron
+ 60 hGausig		      : 
+ 61 hEll		      : 
+ 62 hPA			      : posangle
+ 63 hErrBits		      : 
+ 64 hDeblend		      : 
+ 65 hClass		      : psfQF
+ 66 hClassStat		      : 
+ 67 hppErrBits		      : photFlags
+ 68 hSeqNum                   : detID
+ 69 hObjID		      : 
+ 70 hXi   		      : 
+ 71 hEta		      : 
+ 72 k_1AperMag1		      : M
+ 73 k_1AperMag1Err	      : dM
+ 74 k_1AperMag3		      : Map
+ 75 k_1AperMag3Err	      : dMap
+ 76 k_1AperMag4		      : Mkron
+ 77 k_1AperMag4Err	      : dMron
+ 78 k_1Gausig		      : 
+ 79 k_1Ell		      : 
+ 80 k_1PA		      : posangle
+ 81 k_1ErrBits		      : 
+ 82 k_1Deblend		      : 
+ 83 k_1Class		      : psfQF
+ 84 k_1ClassStat	      : 
+ 85 k_1ppErrBits	      : photFlags
+ 86 k_1SeqNum                 : detID
+ 87 k_1ObjID		      : 
+ 88 k_1Xi   		      : 
+ 89 k_1Eta		      : 
+ 90 k_2AperMag1		      : M
+ 91 k_2AperMag1Err	      : dM
+ 92 k_2AperMag3		      : Map
+ 93 k_2AperMag3Err	      : dMap
+ 94 k_2AperMag4		      : Mkron
+ 95 k_2AperMag4Err	      : dMron
+ 96 k_2Gausig		      : 
+ 97 k_2Ell		      : 
+ 98 k_2PA		      : posangle
+ 99 k_2ErrBits		      : 
+100 k_2Deblend		      : 
+101 k_2Class		      : psfQF
+102 k_2ClassStat	      : 
+103 k_2ppErrBits	      : photFlags
+104 k_2SeqNum                 : detID
+105 k_2ObjID		      : 
+106 k_2Xi   		      : 
+107 k_2Eta		      : 
+108 h_2AperMag1		      : M
+109 h_2AperMag1Err	      : dM
+110 h_2AperMag3		      : Map
+111 h_2AperMag3Err	      : dMap
+112 h_2AperMag4		      : Mkron
+113 h_2AperMag4Err	      : dMron
+114 h_2Gausig		      : 
+115 h_2Ell		      : 
+116 h_2PA		      : posangle
+117 h_2ErrBits		      : 
+118 h_2Deblend		      : 
+119 h_2Class		      : psfQF
+120 h_2ClassStat	      : 
+121 h_2ppErrBits	      : photFlags
+122 h_2SeqNum                 : detID
+123 h_2ObjID		      : 
+124 h_2Xi   		      : 
+125 h_2Eta		      : 
 
 */
@@ -169,12 +165,9 @@
 static int Nskip = 0; // UKIRT UHS CSV files have a single header row (and no special character to mark)
 
-UKIRT_Stars *loadukirt_uhs_readstars_ugcs (FILE *f, char *buffer, int *nstart, AddstarClientOptions *options, int *nstars) {
-
-  int codeZ  = GetPhotcodeCodebyName ("UKIRT_Z");  if (!codeZ ) Shutdown ("missing photcode UKIRT_Z ");
-  int codeY  = GetPhotcodeCodebyName ("UKIRT_Y");  if (!codeY ) Shutdown ("missing photcode UKIRT_Y ");
-  int codeJ  = GetPhotcodeCodebyName ("UKIRT_J");  if (!codeJ ) Shutdown ("missing photcode UKIRT_J ");
-  int codeH  = GetPhotcodeCodebyName ("UKIRT_H");  if (!codeH ) Shutdown ("missing photcode UKIRT_H ");
-  int codeK1 = GetPhotcodeCodebyName ("UKIRT_K1"); if (!codeK1) Shutdown ("missing photcode UKIRT_K1");
-  int codeK2 = GetPhotcodeCodebyName ("UKIRT_K2"); if (!codeK2) Shutdown ("missing photcode UKIRT_K2");
+UKIRT_Stars *loadukirt_uhs_readstars_ugps (FILE *f, char *buffer, int *nstart, AddstarClientOptions *options, int *nstars) {
+
+  int codeJ = GetPhotcodeCodebyName ("UKIRT_J"); if (!codeJ) Shutdown ("missing photcode UKIRT_J");
+  int codeH = GetPhotcodeCodebyName ("UKIRT_H"); if (!codeH) Shutdown ("missing photcode UKIRT_H");
+  int codeK = GetPhotcodeCodebyName ("UKIRT_K"); if (!codeK) Shutdown ("missing photcode UKIRT_K");
 
   // XXX I need a UKIRT UHS Mean Epoch
@@ -196,28 +189,6 @@
   ALLOCATE_PTR (pGalaxy,      double,   NELEM);
 
-  ALLOCATE_PTR (zHallMag,     double,   NELEM);
-  ALLOCATE_PTR (zHallMagErr,  double,   NELEM);
-  ALLOCATE_PTR (zAperMag3,    double,   NELEM);
-  ALLOCATE_PTR (zAperMag3Err, double,   NELEM);
-  ALLOCATE_PTR (zAperMag4,    double,   NELEM);
-  ALLOCATE_PTR (zAperMag4Err, double,   NELEM);
-  ALLOCATE_PTR (zPA,          double,   NELEM);
-  ALLOCATE_PTR (zClass,       int,      NELEM);
-  ALLOCATE_PTR (zppErrBits,   int,      NELEM);
-  ALLOCATE_PTR (zSeqNum,      int,      NELEM);
-
-  ALLOCATE_PTR (yHallMag,     double,   NELEM);
-  ALLOCATE_PTR (yHallMagErr,  double,   NELEM);
-  ALLOCATE_PTR (yAperMag3,    double,   NELEM);
-  ALLOCATE_PTR (yAperMag3Err, double,   NELEM);
-  ALLOCATE_PTR (yAperMag4,    double,   NELEM);
-  ALLOCATE_PTR (yAperMag4Err, double,   NELEM);
-  ALLOCATE_PTR (yPA,          double,   NELEM);
-  ALLOCATE_PTR (yClass,       int,      NELEM);
-  ALLOCATE_PTR (yppErrBits,   int,      NELEM);
-  ALLOCATE_PTR (ySeqNum,      int,      NELEM);
-
-  ALLOCATE_PTR (jHallMag,     double,   NELEM);
-  ALLOCATE_PTR (jHallMagErr,  double,   NELEM);
+  ALLOCATE_PTR (jAperMag1,    double,   NELEM);
+  ALLOCATE_PTR (jAperMag1Err, double,   NELEM);
   ALLOCATE_PTR (jAperMag3,    double,   NELEM);
   ALLOCATE_PTR (jAperMag3Err, double,   NELEM);
@@ -229,6 +200,6 @@
   ALLOCATE_PTR (jSeqNum,      int,      NELEM);
 
-  ALLOCATE_PTR (hHallMag,     double,   NELEM);
-  ALLOCATE_PTR (hHallMagErr,  double,   NELEM);
+  ALLOCATE_PTR (hAperMag1,    double,   NELEM);
+  ALLOCATE_PTR (hAperMag1Err, double,   NELEM);
   ALLOCATE_PTR (hAperMag3,    double,   NELEM);
   ALLOCATE_PTR (hAperMag3Err, double,   NELEM);
@@ -240,6 +211,6 @@
   ALLOCATE_PTR (hSeqNum,      int,      NELEM);
 
-  ALLOCATE_PTR (k1HallMag,     double,   NELEM);
-  ALLOCATE_PTR (k1HallMagErr,  double,   NELEM);
+  ALLOCATE_PTR (k1AperMag1,    double,   NELEM);
+  ALLOCATE_PTR (k1AperMag1Err, double,   NELEM);
   ALLOCATE_PTR (k1AperMag3,    double,   NELEM);
   ALLOCATE_PTR (k1AperMag3Err, double,   NELEM);
@@ -251,6 +222,6 @@
   ALLOCATE_PTR (k1SeqNum,      int,      NELEM);
 
-  ALLOCATE_PTR (k2HallMag,     double,   NELEM);
-  ALLOCATE_PTR (k2HallMagErr,  double,   NELEM);
+  ALLOCATE_PTR (k2AperMag1,    double,   NELEM);
+  ALLOCATE_PTR (k2AperMag1Err, double,   NELEM);
   ALLOCATE_PTR (k2AperMag3,    double,   NELEM);
   ALLOCATE_PTR (k2AperMag3Err, double,   NELEM);
@@ -261,4 +232,15 @@
   ALLOCATE_PTR (k2ppErrBits,   int,      NELEM);
   ALLOCATE_PTR (k2SeqNum,      int,      NELEM);
+
+  ALLOCATE_PTR (h2AperMag1,    double,   NELEM);
+  ALLOCATE_PTR (h2AperMag1Err, double,   NELEM);
+  ALLOCATE_PTR (h2AperMag3,    double,   NELEM);
+  ALLOCATE_PTR (h2AperMag3Err, double,   NELEM);
+  ALLOCATE_PTR (h2AperMag4,    double,   NELEM);
+  ALLOCATE_PTR (h2AperMag4Err, double,   NELEM);
+  ALLOCATE_PTR (h2PA,          double,   NELEM);
+  ALLOCATE_PTR (h2Class,       int,      NELEM);
+  ALLOCATE_PTR (h2ppErrBits,   int,      NELEM);
+  ALLOCATE_PTR (h2SeqNum,      int,      NELEM);
 
   // we have a working buffer read from the file. we parse the lines in the working buffer
@@ -334,73 +316,63 @@
 
       // the start of the line is the 1st element (fields are 1-counting)
-      jPARSE (  1,   1, sourceID,      "sourceID");
-      iPARSE (  3,   1, frameSetID,    "frameSetID");
-      dPARSE (  4,   3, ra,            "ra");
-      dPARSE (  5,   4, dec,           "dec");
-      dPARSE (  8,   5, epoch,         "epoch");
-      jPARSE ( 23,   8, priOrSec,      "priOrSec"); // watch for epoch
-      iPARSE ( 41,  23, mergedClass,   "mergedClass");
-      dPARSE ( 42,  41, pStar,         "pStar");
-      dPARSE ( 43,  42, pGalaxy,       "pGalaxy");
-      dPARSE ( 46,  43, zHallMag,      "zHallMag");
-      dPARSE ( 47,  46, zHallMagErr,   "zHallMagErr");
-      dPARSE ( 50,  47, zAperMag3,     "zAperMag3");
-      dPARSE ( 51,  50, zAperMag3Err,  "zAperMag3Err");
-      dPARSE ( 52,  51, zAperMag4,     "zAperMag4");
-      dPARSE ( 53,  52, zAperMag4Err,  "zAperMag4Err");
-      dPARSE ( 58,  53, zPA,           "zPA");
-      iPARSE ( 61,  58, zClass,        "zClass");
-      iPARSE ( 63,  61, zppErrBits,    "zppErrBits");
-      iPARSE ( 64,  63, zSeqNum,       "zSeqNum");
-      dPARSE ( 68,  64, yHallMag,      "yHallMag");
-      dPARSE ( 69,  68, yHallMagErr,   "yHallMagErr");
-      dPARSE ( 72,  69, yAperMag3,     "yAperMag3");
-      dPARSE ( 73,  72, yAperMag3Err,  "yAperMag3Err");
-      dPARSE ( 74,  73, yAperMag4,     "yAperMag4");
-      dPARSE ( 75,  74, yAperMag4Err,  "yAperMag4Err");
-      dPARSE ( 80,  75, yPA,           "yPA");
-      iPARSE ( 83,  80, yClass,        "yClass");
-      iPARSE ( 85,  83, yppErrBits,    "yppErrBits");
-      iPARSE ( 86,  85, ySeqNum,       "ySeqNum");
-      dPARSE ( 90,  86, jHallMag,      "jHallMag");
-      dPARSE ( 91,  90, jHallMagErr,   "jHallMagErr");
-      dPARSE ( 94,  91, jAperMag3,     "jAperMag3");
-      dPARSE ( 95,  94, jAperMag3Err,  "jAperMag3Err");
-      dPARSE ( 96,  95, jAperMag4,     "jAperMag4");
-      dPARSE ( 97,  96, jAperMag4Err,  "jAperMag4Err");
-      dPARSE (102,  97, jPA,           "jPA");
-      iPARSE (105, 102, jClass,        "jClass");
-      iPARSE (107, 105, jppErrBits,    "jppErrBits");
-      iPARSE (108, 107, jSeqNum,       "jSeqNum");
-      dPARSE (112, 108, hHallMag,      "hHallMag");
-      dPARSE (113, 112, hHallMagErr,   "hHallMagErr");
-      dPARSE (116, 113, hAperMag3,     "hAperMag3");
-      dPARSE (117, 116, hAperMag3Err,  "hAperMag3Err");
-      dPARSE (118, 117, hAperMag4,     "hAperMag4");
-      dPARSE (119, 118, hAperMag4Err,  "hAperMag4Err");
-      dPARSE (124, 119, hPA,           "hPA");
-      iPARSE (127, 124, hClass,        "hClass");
-      iPARSE (129, 127, hppErrBits,    "hppErrBits");
-      iPARSE (130, 129, hSeqNum,       "hSeqNum");
-      dPARSE (134, 130, k1HallMag,     "k1HallMag");
-      dPARSE (135, 134, k1HallMagErr,  "k1HallMagErr");
-      dPARSE (138, 135, k1AperMag3,    "k1AperMag3");
-      dPARSE (139, 138, k1AperMag3Err, "k1AperMag3Err");
-      dPARSE (140, 139, k1AperMag4,    "k1AperMag4");
-      dPARSE (141, 140, k1AperMag4Err, "k1AperMag4Err");
-      dPARSE (146, 141, k1PA,          "k1PA");
-      iPARSE (149, 146, k1Class,       "k1Class");
-      iPARSE (151, 149, k1ppErrBits,   "k1ppErrBits");
-      iPARSE (152, 151, k1SeqNum,      "k1SeqNum");
-      dPARSE (156, 152, k2HallMag,     "k2HallMag");
-      dPARSE (157, 156, k2HallMagErr,  "k2HallMagErr");
-      dPARSE (160, 157, k2AperMag3,    "k2AperMag3");
-      dPARSE (161, 160, k2AperMag3Err, "k2AperMag3Err");
-      dPARSE (162, 161, k2AperMag4,    "k2AperMag4");
-      dPARSE (163, 162, k2AperMag4Err, "k2AperMag4Err");
-      dPARSE (168, 163, k2PA,          "k2PA");
-      iPARSE (171, 168, k2Class,       "k2Class");
-      iPARSE (173, 171, k2ppErrBits,   "k2ppErrBits");
-      iPARSE (174, 173, k2SeqNum,      "k2SeqNum");
+      jPARSE (  1,   1, sourceID,       "sourceID");
+      iPARSE (  3,   1, frameSetID,     "frameSetID");
+      dPARSE (  4,   3, ra,             "ra");
+      dPARSE (  5,   4, dec,            "dec");
+      dPARSE (  8,   5, epoch,          "epoch");
+      jPARSE ( 23,   8, priOrSec,       "priOrSec"); // watch for epoch
+      iPARSE ( 31,  23, mergedClass,    "mergedClass");
+      dPARSE ( 32,  31, pStar,          "pStar");
+      dPARSE ( 33,  32, pGalaxy,        "pGalaxy");
+      dPARSE ( 36,  33, jAperMag1,      "jAperMag1");
+      dPARSE ( 37,  36, jAperMag1Err,   "jAperMag1Err");
+      dPARSE ( 38,  37, jAperMag3,      "jAperMag3");
+      dPARSE ( 39,  38, jAperMag3Err,   "jAperMag3Err");
+      dPARSE ( 40,  39, jAperMag4,      "jAperMag4");
+      dPARSE ( 41,  40, jAperMag4Err,   "jAperMag4Err");
+      dPARSE ( 44,  41, jPA,            "jPA");
+      iPARSE ( 47,  44, jClass,         "jClass");
+      iPARSE ( 49,  47, jppErrBits,     "jppErrBits");
+      iPARSE ( 50,  49, jSeqNum,        "jSeqNum");
+      dPARSE ( 54,  50, hAperMag1,      "hAperMag1");
+      dPARSE ( 55,  54, hAperMag1Err,   "hAperMag1Err");
+      dPARSE ( 56,  55, hAperMag3,      "hAperMag3");
+      dPARSE ( 57,  56, hAperMag3Err,   "hAperMag3Err");
+      dPARSE ( 58,  57, hAperMag4,      "hAperMag4");
+      dPARSE ( 59,  58, hAperMag4Err,   "hAperMag4Err");
+      dPARSE ( 62,  59, hPA,            "hPA");
+      iPARSE ( 65,  62, hClass,         "hClass");
+      iPARSE ( 67,  65, hppErrBits,     "hppErrBits");
+      iPARSE ( 68,  67, hSeqNum,        "hSeqNum");
+      dPARSE ( 72,  68, k1AperMag1,     "k1AperMag1");
+      dPARSE ( 73,  72, k1AperMag1Err,  "k1AperMag1Err");
+      dPARSE ( 74,  73, k1AperMag3,     "k1AperMag3");
+      dPARSE ( 75,  74, k1AperMag3Err,  "k1AperMag3Err");
+      dPARSE ( 76,  75, k1AperMag4,     "k1AperMag4");
+      dPARSE ( 77,  76, k1AperMag4Err,  "k1AperMag4Err");
+      dPARSE ( 80,  77, k1PA,           "k1PA");
+      iPARSE ( 83,  80, k1Class,        "k1Class");
+      iPARSE ( 85,  83, k1ppErrBits,    "k1ppErrBits");
+      iPARSE ( 86,  85, k1SeqNum,       "k1SeqNum");
+      dPARSE ( 90,  86, k2AperMag1,     "k2AperMag1");
+      dPARSE ( 91,  90, k2AperMag1Err,  "k2AperMag1Err");
+      dPARSE ( 92,  91, k2AperMag3,     "k2AperMag3");
+      dPARSE ( 93,  92, k2AperMag3Err,  "k2AperMag3Err");
+      dPARSE ( 94,  93, k2AperMag4,     "k2AperMag4");
+      dPARSE ( 95,  94, k2AperMag4Err,  "k2AperMag4Err");
+      dPARSE ( 98,  95, k2PA,           "k2PA");
+      iPARSE (101,  98, k2Class,        "k2Class");
+      iPARSE (103, 101, k2ppErrBits,    "k2ppErrBits");
+      iPARSE (104, 103, k2SeqNum,       "k2SeqNum");
+      dPARSE (108, 104, h2AperMag1,     "hAperMag1");
+      dPARSE (109, 108, h2AperMag1Err,  "hAperMag1Err");
+      dPARSE (110, 109, h2AperMag3,     "hAperMag3");
+      dPARSE (111, 110, h2AperMag3Err,  "hAperMag3Err");
+      dPARSE (112, 111, h2AperMag4,     "hAperMag4");
+      dPARSE (113, 112, h2AperMag4Err,  "hAperMag4Err");
+      dPARSE (116, 113, h2PA,           "hPA");
+      iPARSE (119, 116, h2Class,        "hClass");
+      iPARSE (121, 119, h2ppErrBits,    "hppErrBits");
+      iPARSE (122, 121, h2SeqNum,       "hSeqNum");
 
       if (!lineStatus && VERBOSE) {
@@ -424,26 +396,6 @@
 	REALLOCATE (pStar,        double,   NELEM);
 	REALLOCATE (pGalaxy,      double,   NELEM);
-	REALLOCATE (zHallMag,     double,   NELEM);
-	REALLOCATE (zHallMagErr,  double,   NELEM);
-	REALLOCATE (zAperMag3,    double,   NELEM);
-	REALLOCATE (zAperMag3Err, double,   NELEM);
-	REALLOCATE (zAperMag4,    double,   NELEM);
-	REALLOCATE (zAperMag4Err, double,   NELEM);
-	REALLOCATE (zPA,          double,   NELEM);
-	REALLOCATE (zClass,       int,      NELEM);
-	REALLOCATE (zppErrBits,   int,      NELEM);
-	REALLOCATE (zSeqNum,      int,      NELEM);
-	REALLOCATE (yHallMag,     double,   NELEM);
-	REALLOCATE (yHallMagErr,  double,   NELEM);
-	REALLOCATE (yAperMag3,    double,   NELEM);
-	REALLOCATE (yAperMag3Err, double,   NELEM);
-	REALLOCATE (yAperMag4,    double,   NELEM);
-	REALLOCATE (yAperMag4Err, double,   NELEM);
-	REALLOCATE (yPA,          double,   NELEM);
-	REALLOCATE (yClass,       int,      NELEM);
-	REALLOCATE (yppErrBits,   int,      NELEM);
-	REALLOCATE (ySeqNum,      int,      NELEM);
-	REALLOCATE (jHallMag,     double,   NELEM);
-	REALLOCATE (jHallMagErr,  double,   NELEM);
+	REALLOCATE (jAperMag1,     double,   NELEM);
+	REALLOCATE (jAperMag1Err,  double,   NELEM);
 	REALLOCATE (jAperMag3,    double,   NELEM);
 	REALLOCATE (jAperMag3Err, double,   NELEM);
@@ -454,6 +406,6 @@
 	REALLOCATE (jppErrBits,   int,      NELEM);
 	REALLOCATE (jSeqNum,      int,      NELEM);
-	REALLOCATE (hHallMag,     double,   NELEM);
-	REALLOCATE (hHallMagErr,  double,   NELEM);
+	REALLOCATE (hAperMag1,     double,   NELEM);
+	REALLOCATE (hAperMag1Err,  double,   NELEM);
 	REALLOCATE (hAperMag3,    double,   NELEM);
 	REALLOCATE (hAperMag3Err, double,   NELEM);
@@ -464,6 +416,6 @@
 	REALLOCATE (hppErrBits,   int,      NELEM);
 	REALLOCATE (hSeqNum,      int,      NELEM);
-	REALLOCATE (k1HallMag,     double,   NELEM);
-	REALLOCATE (k1HallMagErr,  double,   NELEM);
+	REALLOCATE (k1AperMag1,     double,   NELEM);
+	REALLOCATE (k1AperMag1Err,  double,   NELEM);
 	REALLOCATE (k1AperMag3,    double,   NELEM);
 	REALLOCATE (k1AperMag3Err, double,   NELEM);
@@ -474,6 +426,6 @@
 	REALLOCATE (k1ppErrBits,   int,      NELEM);
 	REALLOCATE (k1SeqNum,      int,      NELEM);
-	REALLOCATE (k2HallMag,     double,   NELEM);
-	REALLOCATE (k2HallMagErr,  double,   NELEM);
+	REALLOCATE (k2AperMag1,     double,   NELEM);
+	REALLOCATE (k2AperMag1Err,  double,   NELEM);
 	REALLOCATE (k2AperMag3,    double,   NELEM);
 	REALLOCATE (k2AperMag3Err, double,   NELEM);
@@ -484,4 +436,14 @@
 	REALLOCATE (k2ppErrBits,   int,      NELEM);
 	REALLOCATE (k2SeqNum,      int,      NELEM);
+	REALLOCATE (h2AperMag1,     double,   NELEM);
+	REALLOCATE (h2AperMag1Err,  double,   NELEM);
+	REALLOCATE (h2AperMag3,    double,   NELEM);
+	REALLOCATE (h2AperMag3Err, double,   NELEM);
+	REALLOCATE (h2AperMag4,    double,   NELEM);
+	REALLOCATE (h2AperMag4Err, double,   NELEM);
+	REALLOCATE (h2PA,          double,   NELEM);
+	REALLOCATE (h2Class,       int,      NELEM);
+	REALLOCATE (h2ppErrBits,   int,      NELEM);
+	REALLOCATE (h2SeqNum,      int,      NELEM);
       }
       if (!EndOfFile) {
@@ -504,7 +466,4 @@
 
   ALLOCATE_PTR (stars, UKIRT_Stars, NSTARS);
-  for (int i = 0; i < NSTARS; i++) {
-    ALLOCATE (stars[i].measure, Measure, UKIRT_NFILTER);
-  }
 
   for (int i = 0; i < NstarsIn; i++) {
@@ -514,4 +473,7 @@
     Dmin = MIN (Dmin, dec[i]);
     Dmax = MAX (Dmax, dec[i]);
+
+    // only allocate the measures for stars as we define them
+    ALLOCATE (stars[Nstars].measure, Measure, UKIRT_NFILTER);
 
     // we have NFILTER (== 6) UKIRT measurements per object
@@ -541,5 +503,5 @@
     }
 
-    // y measure
+    // J measure
     stars[Nstars].measure[0].extID      = sourceID[i];
     stars[Nstars].measure[0].imageID    = frameSetID[i]; // XXX check for frameSetID > 31-bit int
@@ -548,18 +510,18 @@
     stars[Nstars].measure[0].psfChisq   = pStar[i];
     stars[Nstars].measure[0].extNsigma  = pGalaxy[i];
-    stars[Nstars].measure[0].M          = yHallMag[i];
-    stars[Nstars].measure[0].dM         = yHallMagErr[i];
-    stars[Nstars].measure[0].Map        = yAperMag3[i];
-    stars[Nstars].measure[0].dMap       = yAperMag3Err[i];
-    stars[Nstars].measure[0].Mkron      = yAperMag4[i];
-    stars[Nstars].measure[0].dMkron     = yAperMag4Err[i];
-    stars[Nstars].measure[0].posangle   = yPA[i]; // XXX units
-    stars[Nstars].measure[0].psfQF      = yClass[i];
-    stars[Nstars].measure[0].photFlags  = yppErrBits[i];
+    stars[Nstars].measure[0].M          = jAperMag1[i];
+    stars[Nstars].measure[0].dM         = jAperMag1Err[i];
+    stars[Nstars].measure[0].Map        = jAperMag3[i];
+    stars[Nstars].measure[0].dMap       = jAperMag3Err[i];
+    stars[Nstars].measure[0].Mkron      = jAperMag4[i];
+    stars[Nstars].measure[0].dMkron     = jAperMag4Err[i];
+    stars[Nstars].measure[0].posangle   = jPA[i]; // XXX units
+    stars[Nstars].measure[0].psfQF      = jClass[i];
+    stars[Nstars].measure[0].photFlags  = jppErrBits[i];
     stars[Nstars].measure[0].photFlags2 = photFlags2;
-    stars[Nstars].measure[0].detID      = ySeqNum[i];
-    stars[Nstars].measure[0].photcode   = codeY;
-
-    // z measure
+    stars[Nstars].measure[0].detID      = jSeqNum[i];
+    stars[Nstars].measure[0].photcode   = codeJ;
+
+    // H measure
     stars[Nstars].measure[1].extID      = sourceID[i];
     stars[Nstars].measure[1].imageID    = frameSetID[i]; // XXX check for frameSetID > 31-bit int
@@ -568,18 +530,18 @@
     stars[Nstars].measure[1].psfChisq   = pStar[i];
     stars[Nstars].measure[1].extNsigma  = pGalaxy[i];
-    stars[Nstars].measure[1].M          = zHallMag[i];
-    stars[Nstars].measure[1].dM         = zHallMagErr[i];
-    stars[Nstars].measure[1].Map        = zAperMag3[i];
-    stars[Nstars].measure[1].dMap       = zAperMag3Err[i];
-    stars[Nstars].measure[1].Mkron      = zAperMag4[i];
-    stars[Nstars].measure[1].dMkron     = zAperMag4Err[i];
-    stars[Nstars].measure[1].posangle   = zPA[i]; // XXX units
-    stars[Nstars].measure[1].psfQF      = zClass[i];
-    stars[Nstars].measure[1].photFlags  = zppErrBits[i];
+    stars[Nstars].measure[1].M          = hAperMag1[i];
+    stars[Nstars].measure[1].dM         = hAperMag1Err[i];
+    stars[Nstars].measure[1].Map        = hAperMag3[i];
+    stars[Nstars].measure[1].dMap       = hAperMag3Err[i];
+    stars[Nstars].measure[1].Mkron      = hAperMag4[i];
+    stars[Nstars].measure[1].dMkron     = hAperMag4Err[i];
+    stars[Nstars].measure[1].posangle   = hPA[i]; // XXX units
+    stars[Nstars].measure[1].psfQF      = hClass[i];
+    stars[Nstars].measure[1].photFlags  = hppErrBits[i];
     stars[Nstars].measure[1].photFlags2 = photFlags2;
-    stars[Nstars].measure[1].detID      = zSeqNum[i];
-    stars[Nstars].measure[1].photcode   = codeZ;
-
-    // J measure
+    stars[Nstars].measure[1].detID      = hSeqNum[i];
+    stars[Nstars].measure[1].photcode   = codeH;
+
+    // K1 measure
     stars[Nstars].measure[2].extID      = sourceID[i];
     stars[Nstars].measure[2].imageID    = frameSetID[i]; // XXX check for frameSetID > 31-bit int
@@ -588,18 +550,18 @@
     stars[Nstars].measure[2].psfChisq   = pStar[i];
     stars[Nstars].measure[2].extNsigma  = pGalaxy[i];
-    stars[Nstars].measure[2].M          = jHallMag[i];
-    stars[Nstars].measure[2].dM         = jHallMagErr[i];
-    stars[Nstars].measure[2].Map        = jAperMag3[i];
-    stars[Nstars].measure[2].dMap       = jAperMag3Err[i];
-    stars[Nstars].measure[2].Mkron      = jAperMag4[i];
-    stars[Nstars].measure[2].dMkron     = jAperMag4Err[i];
-    stars[Nstars].measure[2].posangle   = jPA[i]; // XXX units
-    stars[Nstars].measure[2].psfQF      = jClass[i];
-    stars[Nstars].measure[2].photFlags  = jppErrBits[i];
+    stars[Nstars].measure[2].M          = k1AperMag1[i];
+    stars[Nstars].measure[2].dM         = k1AperMag1Err[i];
+    stars[Nstars].measure[2].Map        = k1AperMag3[i];
+    stars[Nstars].measure[2].dMap       = k1AperMag3Err[i];
+    stars[Nstars].measure[2].Mkron      = k1AperMag4[i];
+    stars[Nstars].measure[2].dMkron     = k1AperMag4Err[i];
+    stars[Nstars].measure[2].posangle   = k1PA[i]; // XXX units
+    stars[Nstars].measure[2].psfQF      = k1Class[i];
+    stars[Nstars].measure[2].photFlags  = k1ppErrBits[i];
     stars[Nstars].measure[2].photFlags2 = photFlags2;
-    stars[Nstars].measure[2].detID      = jSeqNum[i];
-    stars[Nstars].measure[2].photcode   = codeJ;
-
-    // H measure
+    stars[Nstars].measure[2].detID      = k1SeqNum[i];
+    stars[Nstars].measure[2].photcode   = codeK;
+
+    // K1 measure
     stars[Nstars].measure[3].extID      = sourceID[i];
     stars[Nstars].measure[3].imageID    = frameSetID[i]; // XXX check for frameSetID > 31-bit int
@@ -608,18 +570,18 @@
     stars[Nstars].measure[3].psfChisq   = pStar[i];
     stars[Nstars].measure[3].extNsigma  = pGalaxy[i];
-    stars[Nstars].measure[3].M          = hHallMag[i];
-    stars[Nstars].measure[3].dM         = hHallMagErr[i];
-    stars[Nstars].measure[3].Map        = hAperMag3[i];
-    stars[Nstars].measure[3].dMap       = hAperMag3Err[i];
-    stars[Nstars].measure[3].Mkron      = hAperMag4[i];
-    stars[Nstars].measure[3].dMkron     = hAperMag4Err[i];
-    stars[Nstars].measure[3].posangle   = hPA[i]; // XXX units
-    stars[Nstars].measure[3].psfQF      = hClass[i];
-    stars[Nstars].measure[3].photFlags  = hppErrBits[i];
+    stars[Nstars].measure[3].M          = k2AperMag1[i];
+    stars[Nstars].measure[3].dM         = k2AperMag1Err[i];
+    stars[Nstars].measure[3].Map        = k2AperMag3[i];
+    stars[Nstars].measure[3].dMap       = k2AperMag3Err[i];
+    stars[Nstars].measure[3].Mkron      = k2AperMag4[i];
+    stars[Nstars].measure[3].dMkron     = k2AperMag4Err[i];
+    stars[Nstars].measure[3].posangle   = k2PA[i]; // XXX units
+    stars[Nstars].measure[3].psfQF      = k2Class[i];
+    stars[Nstars].measure[3].photFlags  = k2ppErrBits[i];
     stars[Nstars].measure[3].photFlags2 = photFlags2;
-    stars[Nstars].measure[3].detID      = hSeqNum[i];
-    stars[Nstars].measure[3].photcode   = codeH;
-
-    // K1 measure
+    stars[Nstars].measure[3].detID      = k2SeqNum[i];
+    stars[Nstars].measure[3].photcode   = codeK;
+
+    // H2 measure
     stars[Nstars].measure[4].extID      = sourceID[i];
     stars[Nstars].measure[4].imageID    = frameSetID[i]; // XXX check for frameSetID > 31-bit int
@@ -628,36 +590,16 @@
     stars[Nstars].measure[4].psfChisq   = pStar[i];
     stars[Nstars].measure[4].extNsigma  = pGalaxy[i];
-    stars[Nstars].measure[4].M          = k1HallMag[i];
-    stars[Nstars].measure[4].dM         = k1HallMagErr[i];
-    stars[Nstars].measure[4].Map        = k1AperMag3[i];
-    stars[Nstars].measure[4].dMap       = k1AperMag3Err[i];
-    stars[Nstars].measure[4].Mkron      = k1AperMag4[i];
-    stars[Nstars].measure[4].dMkron     = k1AperMag4Err[i];
-    stars[Nstars].measure[4].posangle   = k1PA[i]; // XXX units
-    stars[Nstars].measure[4].psfQF      = k1Class[i];
-    stars[Nstars].measure[4].photFlags  = k1ppErrBits[i];
+    stars[Nstars].measure[4].M          = h2AperMag1[i];
+    stars[Nstars].measure[4].dM         = h2AperMag1Err[i];
+    stars[Nstars].measure[4].Map        = h2AperMag3[i];
+    stars[Nstars].measure[4].dMap       = h2AperMag3Err[i];
+    stars[Nstars].measure[4].Mkron      = h2AperMag4[i];
+    stars[Nstars].measure[4].dMkron     = h2AperMag4Err[i];
+    stars[Nstars].measure[4].posangle   = h2PA[i]; // XXX units
+    stars[Nstars].measure[4].psfQF      = h2Class[i];
+    stars[Nstars].measure[4].photFlags  = h2ppErrBits[i];
     stars[Nstars].measure[4].photFlags2 = photFlags2;
-    stars[Nstars].measure[4].detID      = k1SeqNum[i];
-    stars[Nstars].measure[4].photcode   = codeK1;
-
-    // K1 measure
-    stars[Nstars].measure[5].extID      = sourceID[i];
-    stars[Nstars].measure[5].imageID    = frameSetID[i]; // XXX check for frameSetID > 31-bit int
-    stars[Nstars].measure[5].R          = ra[i];
-    stars[Nstars].measure[5].D          = dec[i];
-    stars[Nstars].measure[5].psfChisq   = pStar[i];
-    stars[Nstars].measure[5].extNsigma  = pGalaxy[i];
-    stars[Nstars].measure[5].M          = k2HallMag[i];
-    stars[Nstars].measure[5].dM         = k2HallMagErr[i];
-    stars[Nstars].measure[5].Map        = k2AperMag3[i];
-    stars[Nstars].measure[5].dMap       = k2AperMag3Err[i];
-    stars[Nstars].measure[5].Mkron      = k2AperMag4[i];
-    stars[Nstars].measure[5].dMkron     = k2AperMag4Err[i];
-    stars[Nstars].measure[5].posangle   = k2PA[i]; // XXX units
-    stars[Nstars].measure[5].psfQF      = k2Class[i];
-    stars[Nstars].measure[5].photFlags  = k2ppErrBits[i];
-    stars[Nstars].measure[5].photFlags2 = photFlags2;
-    stars[Nstars].measure[5].detID      = k2SeqNum[i];
-    stars[Nstars].measure[5].photcode   = codeK2;
+    stars[Nstars].measure[4].detID      = h2SeqNum[i];
+    stars[Nstars].measure[4].photcode   = codeH;
 
     stars[Nstars].average.Nmeasure = UKIRT_NFILTER;
@@ -667,7 +609,4 @@
       NSTARS += 10000;
       REALLOCATE (stars, UKIRT_Stars, NSTARS);
-      for (int j = Nstars; j < NSTARS; j++) {
-	ALLOCATE (stars[j].measure, Measure, UKIRT_NFILTER);
-      }
     }
   }
@@ -677,4 +616,5 @@
   FREE (ra);
   FREE (dec);
+  FREE (epoch);
   FREE (priOrSec);
   FREE (mergedClass);
@@ -682,28 +622,6 @@
   FREE (pGalaxy);
 
-  FREE (zHallMag);
-  FREE (zHallMagErr);
-  FREE (zAperMag3);
-  FREE (zAperMag3Err);
-  FREE (zAperMag4);
-  FREE (zAperMag4Err);
-  FREE (zPA);
-  FREE (zClass);
-  FREE (zppErrBits);
-  FREE (zSeqNum);
-
-  FREE (yHallMag);
-  FREE (yHallMagErr);
-  FREE (yAperMag3);
-  FREE (yAperMag3Err);
-  FREE (yAperMag4);
-  FREE (yAperMag4Err);
-  FREE (yPA);
-  FREE (yClass);
-  FREE (yppErrBits);
-  FREE (ySeqNum);
-
-  FREE (jHallMag);
-  FREE (jHallMagErr);
+  FREE (jAperMag1);
+  FREE (jAperMag1Err);
   FREE (jAperMag3);
   FREE (jAperMag3Err);
@@ -715,6 +633,6 @@
   FREE (jSeqNum);
 
-  FREE (hHallMag);
-  FREE (hHallMagErr);
+  FREE (hAperMag1);
+  FREE (hAperMag1Err);
   FREE (hAperMag3);
   FREE (hAperMag3Err);
@@ -726,6 +644,6 @@
   FREE (hSeqNum);
 
-  FREE (k1HallMag);
-  FREE (k1HallMagErr);
+  FREE (k1AperMag1);
+  FREE (k1AperMag1Err);
   FREE (k1AperMag3);
   FREE (k1AperMag3Err);
@@ -737,6 +655,6 @@
   FREE (k1SeqNum);
 
-  FREE (k2HallMag);
-  FREE (k2HallMagErr);
+  FREE (k2AperMag1);
+  FREE (k2AperMag1Err);
   FREE (k2AperMag3);
   FREE (k2AperMag3Err);
@@ -748,149 +666,17 @@
   FREE (k2SeqNum);
 
+  FREE (h2AperMag1);
+  FREE (h2AperMag1Err);
+  FREE (h2AperMag3);
+  FREE (h2AperMag3Err);
+  FREE (h2AperMag4);
+  FREE (h2AperMag4Err);
+  FREE (h2PA);
+  FREE (h2Class);
+  FREE (h2ppErrBits);
+  FREE (h2SeqNum);
+
   *nstars = Nstars;
   *nstart = Nstart;
   return (stars);
 }
-
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-162
-163
-164
-165
-166
-167
-168
-169
-170
-171
-172
-173
-174
-175
-176
-177
Index: /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_uhs.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_uhs.c	(revision 40901)
+++ /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_uhs.c	(revision 40902)
@@ -248,7 +248,4 @@
 
   ALLOCATE_PTR (stars, UKIRT_Stars, NSTARS);
-  for (int i = 0; i < NSTARS; i++) {
-    ALLOCATE (stars[i].measure, Measure, UKIRT_NFILTER);
-  }
 
   for (int i = 0; i < NstarsIn; i++) {
@@ -258,4 +255,7 @@
     Dmin = MIN (Dmin, dec[i]);
     Dmax = MAX (Dmax, dec[i]);
+
+    // only allocate the measures for stars as we define them
+    ALLOCATE (stars[Nstars].measure, Measure, UKIRT_NFILTER);
 
     // we have one UKIRT UHS (J-band) measurement per object
@@ -310,7 +310,4 @@
       NSTARS += 10000;
       REALLOCATE (stars, UKIRT_Stars, NSTARS);
-      for (int j = Nstars; j < NSTARS; j++) {
-	ALLOCATE (stars[j].measure, Measure, UKIRT_NFILTER);
-      }
     }
   }
Index: /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_ulas.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_ulas.c	(revision 40901)
+++ /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_readstars_ulas.c	(revision 40902)
@@ -51,97 +51,97 @@
  41 eBV		              : 
  42 aY		              : 
- 43 yHallMag		      : M
- 44 yHallMagErr		      : dM
- 45 yPetroMag		      : 
- 46 yPetroMagErr	      : 
- 47 yAperMag3		      : Map
- 48 yAperMag3Err	      : dMap
- 49 yAperMag4		      : Mkron
- 50 yAperMag4Err	      : dMron
- 51 yAperMag6		      : 
- 52 yAperMag6Err	      : 
- 53 yGausig		      : 
- 54 yEll		      : 
- 55 yPA			      : posangle
- 56 yErrBits		      : 
- 57 yDeblend		      : 
- 58 yClass		      : psfQF
- 59 yClassStat		      : 
- 60 yppErrBits		      : photFlags
- 61 ySeqNum                   : detID
- 62 yObjID		      : 
- 63 yXi   		      : 
- 64 yEta		      : 
- 65 aJ
- 66 j_1HallMag		      : M
- 67 j_1HallMagErr	      : dM
- 68 j_1PetroMag		      : 
- 69 j_1PetroMagErr	      : 
- 70 j_1AperMag3		      : Map
- 71 j_1AperMag3Err	      : dMap
- 72 j_1AperMag4		      : Mkron
- 73 j_1AperMag4Err	      : dMron
- 74 j_1AperMag6		      : 
- 75 j_1AperMag6Err	      : 
- 76 j_1Gausig		      : 
- 77 j_1Ell		      : 
- 78 j_1PA		      : posangle
- 79 j_1ErrBits		      : 
- 80 j_1Deblend		      : 
- 81 j_1Class		      : psfQF
- 82 j_1ClassStat	      : 
- 83 j_1ppErrBits	      : photFlags
- 84 j_1SeqNum                 : detID
- 85 j_1ObjID		      : 
- 86 j_1Xi   		      : 
- 87 j_1Eta		      : 
- 88 j_2HallMag		      : M
- 89 j_2HallMagErr	      : dM
- 90 j_2PetroMag		      : 
- 91 j_2PetroMagErr	      : 
- 92 j_2AperMag3		      : Map
- 93 j_2AperMag3Err	      : dMap
- 94 j_2AperMag4		      : Mkron
- 95 j_2AperMag4Err	      : dMron
- 96 j_2AperMag6		      : 
- 97 j_2AperMag6Err	      : 
- 98 j_2Gausig		      : 
- 99 j_2Ell		      : 
-100 j_2PA		      : posangle
-101 j_2ErrBits		      : 
-102 j_2Deblend		      : 
-103 j_2Class		      : psfQF
-104 j_2ClassStat	      : 
-105 j_2ppErrBits	      : photFlags
-106 j_2SeqNum                 : detID
-107 j_2ObjID		      : 
-108 j_2Xi   		      : 
-109 j_2Eta		      : 
-110 aH
-111 hHallMag		      : M
-112 hHallMagErr		      : dM
-113 hPetroMag		      : 
-114 hPetroMagErr	      : 
-115 hAperMag3		      : Map
-116 hAperMag3Err	      : dMap
-117 hAperMag4		      : Mkron
-118 hAperMag4Err	      : dMron
-119 hAperMag6		      : 
-120 hAperMag6Err	      : 
-121 hGausig		      : 
-122 hEll		      : 
-123 hPA			      : posangle
-124 hErrBits		      : 
-125 hDeblend		      : 
-126 hClass		      : psfQF
-127 hClassStat		      : 
-128 hppErrBits		      : photFlags
-129 hSeqNum                   : detID
-130 hObjID		      : 
-131 hXi   		      : 
-132 hEta		      : 
-133 aK
+ 43 aJ
+ 44 aH
+ 45 aK
+ 46 yHallMag		      : M
+ 47 yHallMagErr		      : dM
+ 48 yPetroMag		      : 
+ 49 yPetroMagErr	      : 
+ 50 yAperMag3		      : Map
+ 51 yAperMag3Err	      : dMap
+ 52 yAperMag4		      : Mkron
+ 53 yAperMag4Err	      : dMron
+ 54 yAperMag6		      : 
+ 55 yAperMag6Err	      : 
+ 56 yGausig		      : 
+ 57 yEll		      : 
+ 58 yPA			      : posangle
+ 59 yErrBits		      : 
+ 60 yDeblend		      : 
+ 61 yClass		      : psfQF
+ 62 yClassStat		      : 
+ 63 yppErrBits		      : photFlags
+ 64 ySeqNum                   : detID
+ 65 yObjID		      : 
+ 66 yXi   		      : 
+ 67 yEta		      : 
+ 68 j_1HallMag		      : M
+ 69 j_1HallMagErr	      : dM
+ 70 j_1PetroMag		      : 
+ 71 j_1PetroMagErr	      : 
+ 72 j_1AperMag3		      : Map
+ 73 j_1AperMag3Err	      : dMap
+ 74 j_1AperMag4		      : Mkron
+ 75 j_1AperMag4Err	      : dMron
+ 76 j_1AperMag6		      : 
+ 77 j_1AperMag6Err	      : 
+ 78 j_1Gausig		      : 
+ 79 j_1Ell		      : 
+ 80 j_1PA		      : posangle
+ 81 j_1ErrBits		      : 
+ 82 j_1Deblend		      : 
+ 83 j_1Class		      : psfQF
+ 84 j_1ClassStat	      : 
+ 85 j_1ppErrBits	      : photFlags
+ 86 j_1SeqNum                 : detID
+ 87 j_1ObjID		      : 
+ 88 j_1Xi   		      : 
+ 89 j_1Eta		      : 
+ 90 j_2HallMag		      : M
+ 91 j_2HallMagErr	      : dM
+ 92 j_2PetroMag		      : 
+ 93 j_2PetroMagErr	      : 
+ 94 j_2AperMag3		      : Map
+ 95 j_2AperMag3Err	      : dMap
+ 96 j_2AperMag4		      : Mkron
+ 97 j_2AperMag4Err	      : dMron
+ 98 j_2AperMag6		      : 
+ 99 j_2AperMag6Err	      : 
+100 j_2Gausig		      : 
+101 j_2Ell		      : 
+102 j_2PA		      : posangle
+103 j_2ErrBits		      : 
+104 j_2Deblend		      : 
+105 j_2Class		      : psfQF
+106 j_2ClassStat	      : 
+107 j_2ppErrBits	      : photFlags
+108 j_2SeqNum                 : detID
+109 j_2ObjID		      : 
+110 j_2Xi   		      : 
+111 j_2Eta		      : 
+112 hHallMag		      : M
+113 hHallMagErr		      : dM
+114 hPetroMag		      : 
+115 hPetroMagErr	      : 
+116 hAperMag3		      : Map
+117 hAperMag3Err	      : dMap
+118 hAperMag4		      : Mkron
+119 hAperMag4Err	      : dMron
+120 hAperMag6		      : 
+121 hAperMag6Err	      : 
+122 hGausig		      : 
+123 hEll		      : 
+124 hPA			      : posangle
+125 hErrBits		      : 
+126 hDeblend		      : 
+127 hClass		      : psfQF
+128 hClassStat		      : 
+129 hppErrBits		      : photFlags
+130 hSeqNum                   : detID
+131 hObjID		      : 
+132 hXi   		      : 
+133 hEta		      : 
 134 kHallMag		      : M
-135 kHallMagErr	      : dM
+135 kHallMagErr	              : dM
 136 kPetroMag		      : 
 137 kPetroMagErr	      : 
@@ -154,11 +154,11 @@
 144 kGausig		      : 
 145 kEll		      : 
-146 kPA		      : posangle
+146 kPA		              : posangle
 147 kErrBits		      : 
 148 kDeblend		      : 
-159 kClass		      : psfQF
-150 kClassStat	      : 
-151 kppErrBits	      : photFlags
-152 kSeqNum                 : detID
+149 kClass		      : psfQF
+150 kClassStat	              : 
+151 kppErrBits	              : photFlags
+152 kSeqNum                   : detID
 153 kObjID		      : 
 154 kXi   		      : 
@@ -193,9 +193,8 @@
 UKIRT_Stars *loadukirt_uhs_readstars_ulas (FILE *f, char *buffer, int *nstart, AddstarClientOptions *options, int *nstars) {
 
-  int codeY  = GetPhotcodeCodebyName ("UKIRT_Y");  if (!codeY )  Shutdown ("missing photcode UKIRT_Y");
-  int codeJ1 = GetPhotcodeCodebyName ("UKIRT_J1"); if (!codeJ1 ) Shutdown ("missing photcode UKIRT_J1");
-  int codeJ2 = GetPhotcodeCodebyName ("UKIRT_J2"); if (!codeJ2 ) Shutdown ("missing photcode UKIRT_J2");
-  int codeH  = GetPhotcodeCodebyName ("UKIRT_H");  if (!codeH )  Shutdown ("missing photcode UKIRT_H");
-  int codeK  = GetPhotcodeCodebyName ("UKIRT_K");  if (!codeK)   Shutdown ("missing photcode UKIRT_K");
+  int codeY = GetPhotcodeCodebyName ("UKIRT_Y"); if (!codeY) Shutdown ("missing photcode UKIRT_Y");
+  int codeJ = GetPhotcodeCodebyName ("UKIRT_J"); if (!codeJ) Shutdown ("missing photcode UKIRT_J");
+  int codeH = GetPhotcodeCodebyName ("UKIRT_H"); if (!codeH) Shutdown ("missing photcode UKIRT_H");
+  int codeK = GetPhotcodeCodebyName ("UKIRT_K"); if (!codeK) Shutdown ("missing photcode UKIRT_K");
 
   // XXX I need a UKIRT UHS Mean Epoch
@@ -353,45 +352,45 @@
       dPARSE ( 37,  36, pStar,         "pStar");
       dPARSE ( 38,  37, pGalaxy,       "pGalaxy");
-      dPARSE ( 43,  38, yHallMag,      "yHallMag");
-      dPARSE ( 44,  43, yHallMagErr,   "yHallMagErr");
-      dPARSE ( 47,  44, yAperMag3,     "yAperMag3");
-      dPARSE ( 48,  47, yAperMag3Err,  "yAperMag3Err");
-      dPARSE ( 49,  48, yAperMag4,     "yAperMag4");
-      dPARSE ( 50,  49, yAperMag4Err,  "yAperMag4Err");
-      dPARSE ( 55,  50, yPA,           "yPA");
-      iPARSE ( 58,  55, yClass,        "yClass");
-      iPARSE ( 60,  58, yppErrBits,    "yppErrBits");
-      iPARSE ( 61,  60, ySeqNum,       "ySeqNum");
-      dPARSE ( 66,  61, j1HallMag,     "j1HallMag");
-      dPARSE ( 67,  66, j1HallMagErr,  "j1HallMagErr");
-      dPARSE ( 70,  67, j1AperMag3,    "j1AperMag3");
-      dPARSE ( 71,  70, j1AperMag3Err, "j1AperMag3Err");
-      dPARSE ( 72,  71, j1AperMag4,    "j1AperMag4");
-      dPARSE ( 73,  72, j1AperMag4Err, "j1AperMag4Err");
-      dPARSE ( 78,  73, j1PA,          "j1PA");
-      iPARSE ( 81,  78, j1Class,       "j1Class");
-      iPARSE ( 83,  81, j1ppErrBits,   "j1ppErrBits");
-      iPARSE ( 84,  83, j1SeqNum,      "j1SeqNum");
-      dPARSE ( 88,  84, j2HallMag,     "j2HallMag");
-      dPARSE ( 89,  88, j2HallMagErr,  "j2HallMagErr");
-      dPARSE ( 92,  89, j2AperMag3,    "j2AperMag3");
-      dPARSE ( 93,  92, j2AperMag3Err, "j2AperMag3Err");
-      dPARSE ( 94,  93, j2AperMag4,    "j2AperMag4");
-      dPARSE ( 95,  94, j2AperMag4Err, "j2AperMag4Err");
-      dPARSE (100,  95, j2PA,          "j2PA");
-      iPARSE (103, 100, j2Class,       "j2Class");
-      iPARSE (105, 103, j2ppErrBits,   "j2ppErrBits");
-      iPARSE (106, 105, j2SeqNum,      "j2SeqNum");
-      dPARSE (111, 106, hHallMag,      "hHallMag");
-      dPARSE (112, 111, hHallMagErr,   "hHallMagErr");
-      dPARSE (115, 112, hAperMag3,     "hAperMag3");
-      dPARSE (116, 115, hAperMag3Err,  "hAperMag3Err");
-      dPARSE (117, 116, hAperMag4,     "hAperMag4");
-      dPARSE (118, 117, hAperMag4Err,  "hAperMag4Err");
-      dPARSE (123, 118, hPA,           "hPA");
-      iPARSE (126, 123, hClass,        "hClass");
-      iPARSE (128, 126, hppErrBits,    "hppErrBits");
-      iPARSE (129, 128, hSeqNum,       "hSeqNum");
-      dPARSE (134, 129, kHallMag,      "kHallMag");
+      dPARSE ( 46,  38, yHallMag,      "yHallMag");
+      dPARSE ( 47,  46, yHallMagErr,   "yHallMagErr");
+      dPARSE ( 50,  47, yAperMag3,     "yAperMag3");
+      dPARSE ( 51,  50, yAperMag3Err,  "yAperMag3Err");
+      dPARSE ( 52,  51, yAperMag4,     "yAperMag4");
+      dPARSE ( 53,  52, yAperMag4Err,  "yAperMag4Err");
+      dPARSE ( 58,  53, yPA,           "yPA");
+      iPARSE ( 61,  58, yClass,        "yClass");
+      iPARSE ( 63,  61, yppErrBits,    "yppErrBits");
+      iPARSE ( 64,  63, ySeqNum,       "ySeqNum");
+      dPARSE ( 68,  64, j1HallMag,     "j1HallMag");
+      dPARSE ( 69,  68, j1HallMagErr,  "j1HallMagErr");
+      dPARSE ( 72,  69, j1AperMag3,    "j1AperMag3");
+      dPARSE ( 73,  72, j1AperMag3Err, "j1AperMag3Err");
+      dPARSE ( 74,  73, j1AperMag4,    "j1AperMag4");
+      dPARSE ( 75,  74, j1AperMag4Err, "j1AperMag4Err");
+      dPARSE ( 80,  75, j1PA,          "j1PA");
+      iPARSE ( 83,  80, j1Class,       "j1Class");
+      iPARSE ( 85,  83, j1ppErrBits,   "j1ppErrBits");
+      iPARSE ( 86,  85, j1SeqNum,      "j1SeqNum");
+      dPARSE ( 90,  86, j2HallMag,     "j2HallMag");
+      dPARSE ( 91,  90, j2HallMagErr,  "j2HallMagErr");
+      dPARSE ( 94,  91, j2AperMag3,    "j2AperMag3");
+      dPARSE ( 95,  94, j2AperMag3Err, "j2AperMag3Err");
+      dPARSE ( 96,  95, j2AperMag4,    "j2AperMag4");
+      dPARSE ( 97,  96, j2AperMag4Err, "j2AperMag4Err");
+      dPARSE (102,  97, j2PA,          "j2PA");
+      iPARSE (105, 102, j2Class,       "j2Class");
+      iPARSE (107, 105, j2ppErrBits,   "j2ppErrBits");
+      iPARSE (108, 107, j2SeqNum,      "j2SeqNum");
+      dPARSE (112, 108, hHallMag,      "hHallMag");
+      dPARSE (113, 112, hHallMagErr,   "hHallMagErr");
+      dPARSE (116, 113, hAperMag3,     "hAperMag3");
+      dPARSE (117, 116, hAperMag3Err,  "hAperMag3Err");
+      dPARSE (118, 117, hAperMag4,     "hAperMag4");
+      dPARSE (119, 118, hAperMag4Err,  "hAperMag4Err");
+      dPARSE (124, 119, hPA,           "hPA");
+      iPARSE (127, 124, hClass,        "hClass");
+      iPARSE (129, 127, hppErrBits,    "hppErrBits");
+      iPARSE (130, 129, hSeqNum,       "hSeqNum");
+      dPARSE (134, 130, kHallMag,      "kHallMag");
       dPARSE (135, 134, kHallMagErr,   "kHallMagErr");
       dPARSE (138, 135, kAperMag3,     "kAperMag3");
@@ -400,6 +399,6 @@
       dPARSE (141, 140, kAperMag4Err,  "kAperMag4Err");
       dPARSE (146, 141, kPA,           "kPA");
-      iPARSE (159, 146, kClass,        "kClass");
-      iPARSE (151, 159, kppErrBits,    "kppErrBits");
+      iPARSE (149, 146, kClass,        "kClass");
+      iPARSE (151, 149, kppErrBits,    "kppErrBits");
       iPARSE (152, 151, kSeqNum,       "kSeqNum");
 
@@ -494,7 +493,4 @@
 
   ALLOCATE_PTR (stars, UKIRT_Stars, NSTARS);
-  for (int i = 0; i < NSTARS; i++) {
-    ALLOCATE (stars[i].measure, Measure, UKIRT_NFILTER);
-  }
 
   for (int i = 0; i < NstarsIn; i++) {
@@ -504,4 +500,7 @@
     Dmin = MIN (Dmin, dec[i]);
     Dmax = MAX (Dmax, dec[i]);
+
+    // only allocate the measures for stars as we define them
+    ALLOCATE (stars[Nstars].measure, Measure, UKIRT_NFILTER);
 
     // we have NFILTER (== 6) UKIRT measurements per object
@@ -569,5 +568,5 @@
     stars[Nstars].measure[1].photFlags2 = photFlags2;
     stars[Nstars].measure[1].detID      = j1SeqNum[i];
-    stars[Nstars].measure[1].photcode   = codeJ1;
+    stars[Nstars].measure[1].photcode   = codeJ;
 
     // J measure
@@ -589,5 +588,5 @@
     stars[Nstars].measure[2].photFlags2 = photFlags2;
     stars[Nstars].measure[2].detID      = j2SeqNum[i];
-    stars[Nstars].measure[2].photcode   = codeJ2;
+    stars[Nstars].measure[2].photcode   = codeJ;
 
     // H measure
@@ -637,7 +636,4 @@
       NSTARS += 10000;
       REALLOCATE (stars, UKIRT_Stars, NSTARS);
-      for (int j = Nstars; j < NSTARS; j++) {
-	ALLOCATE (stars[j].measure, Measure, UKIRT_NFILTER);
-      }
     }
   }
@@ -647,4 +643,5 @@
   FREE (ra);
   FREE (dec);
+  FREE (epoch);
   FREE (priOrSec);
   FREE (mergedClass);
@@ -711,2 +708,115 @@
   return (stars);
 }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_table.c
===================================================================
--- /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_table.c	(revision 40901)
+++ /branches/eam_branches/ohana.20190329/src/addstar/src/loadukirt_uhs_table.c	(revision 40902)
@@ -28,4 +28,5 @@
       fclose (f);
       free (buffer);
+      free (stars);
       return TRUE; // end of file reached
     }
@@ -65,11 +66,9 @@
       // loadukirt_uhs_catalog (Nmeasure agnostic)
       loadukirt_uhs_catalog (subset, Nsubset, region, skylist[0].filename[0], options);
-      
-      // for (int j = 0; j < Nsubset; j++) {
-      // 	free (subset[j].measure);
-      // }
       free (subset);
-
       SkyListFree (skylist);
+    }
+    for (int i = 0; i < Nstars; i++) {
+      free (stars[i].measure);
     }
     free (stars);
