Index: /trunk/Ohana/src/addstar/Makefile
===================================================================
--- /trunk/Ohana/src/addstar/Makefile	(revision 17438)
+++ /trunk/Ohana/src/addstar/Makefile	(revision 17439)
@@ -235,4 +235,5 @@
 $(ADDSTAR)  : $(INC)/addstar.h
 $(SKYCELLS) : $(INC)/addstar.h
+$(LOAD-2MASS) : $(INC)/addstar.h $(INC)/2mass.h
 
 $(BIN)/addstar.$(ARCH) : $(ADDSTAR)
Index: /trunk/Ohana/src/addstar/include/2mass.h
===================================================================
--- /trunk/Ohana/src/addstar/include/2mass.h	(revision 17438)
+++ /trunk/Ohana/src/addstar/include/2mass.h	(revision 17439)
@@ -43,5 +43,5 @@
 int       get2mass_3star (Stars *star, char *line, int Nmax);
 
-int get2mass_3star_full (Stars *star, char *line, int Nmax);
+int get2mass_3star_full (Stars **star, char *line, int Nmax);
 char *next2MASSfield (char *line);
 int set2MASS_ph_qual (Stars *star, char qual);
Index: /trunk/Ohana/src/addstar/src/find_matches_refstars.c
===================================================================
--- /trunk/Ohana/src/addstar/src/find_matches_refstars.c	(revision 17438)
+++ /trunk/Ohana/src/addstar/src/find_matches_refstars.c	(revision 17439)
@@ -150,9 +150,9 @@
       catalog[0].measure[Nmeas].Map      = NAN;
       catalog[0].measure[Nmeas].airmass  = 0;
-      catalog[0].measure[Nmeas].FWx      = NAN_S_SHORT;
-      catalog[0].measure[Nmeas].FWy      = NAN_S_SHORT;
-      catalog[0].measure[Nmeas].theta    = NAN_S_SHORT;
+      catalog[0].measure[Nmeas].FWx      = stars[N][0].fx; // XXX make sure these are zero'ed as needed
+      catalog[0].measure[Nmeas].FWy      = stars[N][0].fy; // XXX make sure these are zero'ed as needed
+      catalog[0].measure[Nmeas].theta    = stars[N][0].df; // XXX make sure these are zero'ed as needed
 	
-      catalog[0].measure[Nmeas].photFlags = 0;
+      catalog[0].measure[Nmeas].photFlags = stars[N][0].flags; // XXX make sure these are zero'ed as needed
       catalog[0].measure[Nmeas].qPSF      = 0;
       catalog[0].measure[Nmeas].psfChisq  = 0;
@@ -170,6 +170,6 @@
       catalog[0].measure[Nmeas].dYccd     = 0;
 
-      catalog[0].measure[Nmeas].Xccd     = 0.0;
-      catalog[0].measure[Nmeas].Yccd     = 0.0;
+      catalog[0].measure[Nmeas].Xccd     = stars[N][0].X; // XXX make sure these are zero'ed as needed
+      catalog[0].measure[Nmeas].Yccd     = stars[N][0].Y; // XXX make sure these are zero'ed as needed
 
       if (ACCEPT_MOTION) {
@@ -280,5 +280,5 @@
     catalog[0].measure[Nmeas].dt       = 0xffff;
 
-    catalog[0].measure[Nmeas].photFlags = 0;
+    catalog[0].measure[Nmeas].photFlags = stars[N][0].flags; // XXX make sure these are zero'ed as needed
     catalog[0].measure[Nmeas].qPSF      = 0;
     catalog[0].measure[Nmeas].psfChisq  = 0;
@@ -296,12 +296,12 @@
     catalog[0].measure[Nmeas].dYccd     = 0;
 
-    catalog[0].measure[Nmeas].Xccd     = 0.0;
-    catalog[0].measure[Nmeas].Yccd     = 0.0;
+    catalog[0].measure[Nmeas].Xccd     = stars[N][0].X; // XXX make sure these are zero'ed as needed
+    catalog[0].measure[Nmeas].Yccd     = stars[N][0].Y; // XXX make sure these are zero'ed as needed
 
     catalog[0].measure[Nmeas].airmass  = 0;
     catalog[0].measure[Nmeas].Map      = NAN;
-    catalog[0].measure[Nmeas].FWx      = NAN_S_SHORT;
-    catalog[0].measure[Nmeas].FWy      = NAN_S_SHORT;
-    catalog[0].measure[Nmeas].theta    = NAN_S_SHORT;
+    catalog[0].measure[Nmeas].FWx      = stars[N][0].fx; // XXX make sure these are zero'ed as needed
+    catalog[0].measure[Nmeas].FWy      = stars[N][0].fy; // XXX make sure these are zero'ed as needed
+    catalog[0].measure[Nmeas].theta    = stars[N][0].df; // XXX make sure these are zero'ed as needed
 
     catalog[0].measure[Nmeas].Xccd     = 0.0;
Index: /trunk/Ohana/src/addstar/src/get2mass.c
===================================================================
--- /trunk/Ohana/src/addstar/src/get2mass.c	(revision 17438)
+++ /trunk/Ohana/src/addstar/src/get2mass.c	(revision 17439)
@@ -11,4 +11,7 @@
   SkyTable *sky;
   struct stat filestat;
+
+  fprintf (stderr, "please use the load2mass program instead\n");
+  exit (1);
 
   NAMED_PHOTCODE (TM_J, "2MASS_J");
Index: /trunk/Ohana/src/addstar/src/get2mass_full.c
===================================================================
--- /trunk/Ohana/src/addstar/src/get2mass_full.c	(revision 17438)
+++ /trunk/Ohana/src/addstar/src/get2mass_full.c	(revision 17439)
@@ -4,5 +4,5 @@
 // fill in the data for a JHK triplet star.  takes a pointer to the start of the line the
 // RA and DEC have already been set
-int get2mass_3star_full (Stars *star, char *line, int Nmax) {
+int get2mass_3star_full (Stars **star, char *line, int Nmax) {
 
   char *ptr;
@@ -15,64 +15,64 @@
   ptr = next2MASSfield (ptr); // dec (assumed to be already set)
   ptr = next2MASSfield (ptr); // err_maj
-  star[0].fx = strtod (ptr, NULL);
+  star[0][0].fx = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // err_min
-  star[0].fy = strtod (ptr, NULL);
+  star[0][0].fy = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // err_ang
-  star[0].df = strtod (ptr, NULL);
-
-  star[2].fx = star[2].fx = star[0].fx;
-  star[2].fy = star[2].fy = star[0].fy;
-  star[2].df = star[2].df = star[0].df;
+  star[0][0].df = strtod (ptr, NULL);
+
+  star[2][0].fx = star[2][0].fx = star[0][0].fx;
+  star[2][0].fy = star[2][0].fy = star[0][0].fy;
+  star[2][0].df = star[2][0].df = star[0][0].df;
 
   ptr = next2MASSfield (ptr); // designation (skip)
 
   ptr = next2MASSfield (ptr); // j_m
-  star[0].M  = strtod (ptr, NULL);
+  star[0][0].M  = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // j_cmsig
-  star[0].dM = strtod (ptr, NULL);
+  star[0][0].dM = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // j_msigcom
   dMfull = strtod (ptr, NULL);
-  star[0].dMcal = sqrt (SQ(dMfull) - SQ(star[0].dM));
+  star[0][0].dMcal = sqrt (SQ(dMfull) - SQ(star[0][0].dM));
   ptr = next2MASSfield (ptr); // j_snr (skip)
 
   ptr = next2MASSfield (ptr); // h_m
-  star[1].M  = strtod (ptr, NULL);
+  star[1][0].M  = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // h_cmsig
-  star[1].dM = strtod (ptr, NULL);
+  star[1][0].dM = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // h_msigcom
   dMfull = strtod (ptr, NULL);
-  star[1].dMcal = sqrt (SQ(dMfull) - SQ(star[1].dM));
+  star[1][0].dMcal = sqrt (SQ(dMfull) - SQ(star[1][0].dM));
   ptr = next2MASSfield (ptr); // h_snr (skip)
 
   ptr = next2MASSfield (ptr); // k_m
-  star[2].M  = strtod (ptr, NULL);
+  star[2][0].M  = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // k_cmsig
-  star[2].dM = strtod (ptr, NULL);
+  star[2][0].dM = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // k_msigcom
   dMfull = strtod (ptr, NULL);
-  star[2].dMcal = sqrt (SQ(dMfull) - SQ(star[2].dM));
+  star[2][0].dMcal = sqrt (SQ(dMfull) - SQ(star[2][0].dM));
   ptr = next2MASSfield (ptr); // k_snr (skip)
 
-  star[2].flags = star[1].flags = star[0].flags = 0;
+  star[2][0].flags = star[1][0].flags = star[0][0].flags = 0;
 
   ptr = next2MASSfield (ptr); // ph_qual
-  set2MASS_ph_qual (&star[0], ptr[0]);
-  set2MASS_ph_qual (&star[1], ptr[1]);
-  set2MASS_ph_qual (&star[2], ptr[2]);
+  set2MASS_ph_qual (star[0], ptr[0]);
+  set2MASS_ph_qual (star[1], ptr[1]);
+  set2MASS_ph_qual (star[2], ptr[2]);
 
   ptr = next2MASSfield (ptr); // rd_flg
-  set2MASS_rd_flag (&star[0], ptr[0]);
-  set2MASS_rd_flag (&star[1], ptr[1]);
-  set2MASS_rd_flag (&star[2], ptr[2]);
+  set2MASS_rd_flag (star[0], ptr[0]);
+  set2MASS_rd_flag (star[1], ptr[1]);
+  set2MASS_rd_flag (star[2], ptr[2]);
 
   ptr = next2MASSfield (ptr); // bl_flg
-  set2MASS_bl_flag (&star[0], ptr[0]);
-  set2MASS_bl_flag (&star[1], ptr[1]);
-  set2MASS_bl_flag (&star[2], ptr[2]);
+  set2MASS_bl_flag (star[0], ptr[0]);
+  set2MASS_bl_flag (star[1], ptr[1]);
+  set2MASS_bl_flag (star[2], ptr[2]);
 
   ptr = next2MASSfield (ptr); // cc_flg
-  set2MASS_cc_flag (&star[0], ptr[0]);
-  set2MASS_cc_flag (&star[1], ptr[1]);
-  set2MASS_cc_flag (&star[2], ptr[2]);
+  set2MASS_cc_flag (star[0], ptr[0]);
+  set2MASS_cc_flag (star[1], ptr[1]);
+  set2MASS_cc_flag (star[2], ptr[2]);
 
   ptr = next2MASSfield (ptr); // ndet (skip for now, XXX use somehow?)
@@ -82,12 +82,12 @@
 
   ptr = next2MASSfield (ptr); // gal_contam (one flag for all filters)
-  set2MASS_gal_flag (&star[0], ptr[0]);
-  set2MASS_gal_flag (&star[1], ptr[0]);
-  set2MASS_gal_flag (&star[2], ptr[0]);
+  set2MASS_gal_flag (star[0], ptr[0]);
+  set2MASS_gal_flag (star[1], ptr[0]);
+  set2MASS_gal_flag (star[2], ptr[0]);
 
   ptr = next2MASSfield (ptr); // mp_flg (one flag for all filters)
-  set2MASS_mp_flag (&star[0], ptr[0]);
-  set2MASS_mp_flag (&star[1], ptr[0]);
-  set2MASS_mp_flag (&star[2], ptr[0]);
+  set2MASS_mp_flag (star[0], ptr[0]);
+  set2MASS_mp_flag (star[1], ptr[0]);
+  set2MASS_mp_flag (star[2], ptr[0]);
 
   ptr = next2MASSfield (ptr); // pts_key (skip for now, XXX use somehow?)
@@ -99,29 +99,29 @@
 
   ptr = next2MASSfield (ptr); // x_scan
-  star[0].X = strtod (ptr, NULL);
-  star[2].X = star[1].X = star[0].X;
+  star[0][0].X = strtod (ptr, NULL);
+  star[2][0].X = star[1][0].X = star[0][0].X;
 
   ptr = next2MASSfield (ptr); // jdate (julian date)
   jd = strtod (ptr, NULL);
-  star[0].t = ohana_jd_to_sec (jd);
-  star[2].t = star[1].t = star[0].t;
+  star[0][0].t = ohana_jd_to_sec (jd);
+  star[2][0].t = star[1][0].t = star[0][0].t;
 
   ptr = next2MASSfield (ptr); // j_psfchi
-  star[0].psfChisq = strtod (ptr, NULL);
+  star[0][0].psfChisq = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // h_psfchi
-  star[1].psfChisq = strtod (ptr, NULL);
+  star[1][0].psfChisq = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // k_psfchi
-  star[2].psfChisq = strtod (ptr, NULL);
+  star[2][0].psfChisq = strtod (ptr, NULL);
 
   ptr = next2MASSfield (ptr); // j_m_stdap
-  star[0].Map = strtod (ptr, NULL);
+  star[0][0].Map = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // j_msig_stdap (skip?)
 
   ptr = next2MASSfield (ptr); // h_m_stdap
-  star[1].Map = strtod (ptr, NULL);
+  star[1][0].Map = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // h_msig_stdap (skip?)
 
   ptr = next2MASSfield (ptr); // k_m_stdap
-  star[2].Map = strtod (ptr, NULL);
+  star[2][0].Map = strtod (ptr, NULL);
   ptr = next2MASSfield (ptr); // k_msig_stdap (skip?)
 
@@ -131,27 +131,27 @@
 
   ptr = next2MASSfield (ptr); // dup_src (one flag for all filters)
-  set2MASS_dup_flag (&star[0], ptr[0]);
-  set2MASS_dup_flag (&star[1], ptr[0]);
-  set2MASS_dup_flag (&star[2], ptr[0]);
+  set2MASS_dup_flag (star[0], ptr[0]);
+  set2MASS_dup_flag (star[1], ptr[0]);
+  set2MASS_dup_flag (star[2], ptr[0]);
 
   ptr = next2MASSfield (ptr); // use_src (one flag for all filters)
-  set2MASS_use_flag (&star[0], ptr[0]);
-  set2MASS_use_flag (&star[1], ptr[0]);
-  set2MASS_use_flag (&star[2], ptr[0]);
-
-  star[0].code  = TM_J;
-  star[0].found = -1;
-  star[0].detID   = 0;
-  star[0].imageID = 0;
-
-  star[1].code  = TM_H;
-  star[1].found = -1;
-  star[1].detID   = 0;
-  star[1].imageID = 0;
-
-  star[2].code  = TM_K;
-  star[2].found = -1;
-  star[2].detID   = 0;
-  star[2].imageID = 0;
+  set2MASS_use_flag (star[0], ptr[0]);
+  set2MASS_use_flag (star[1], ptr[0]);
+  set2MASS_use_flag (star[2], ptr[0]);
+
+  star[0][0].code  = TM_J;
+  star[0][0].found = -1;
+  star[0][0].detID   = 0;
+  star[0][0].imageID = 0;
+
+  star[1][0].code  = TM_H;
+  star[1][0].found = -1;
+  star[1][0].detID   = 0;
+  star[1][0].imageID = 0;
+
+  star[2][0].code  = TM_K;
+  star[2][0].found = -1;
+  star[2][0].detID   = 0;
+  star[2][0].imageID = 0;
 
   return TRUE;
Index: /trunk/Ohana/src/addstar/src/getgsc.c
===================================================================
--- /trunk/Ohana/src/addstar/src/getgsc.c	(revision 17438)
+++ /trunk/Ohana/src/addstar/src/getgsc.c	(revision 17439)
@@ -84,4 +84,10 @@
       stars[Nstars].imageID = 0;
 
+      stars[Nstars].X  = 0;
+      stars[Nstars].Y  = 0;
+      stars[Nstars].fx = 0;
+      stars[Nstars].fy = 0;
+      stars[Nstars].df = 0;
+
       Nstars ++;
       CHECK_REALLOCATE (stars, Stars, NSTARS, Nstars, 1000);
Index: /trunk/Ohana/src/addstar/src/gettycho.c
===================================================================
--- /trunk/Ohana/src/addstar/src/gettycho.c	(revision 17438)
+++ /trunk/Ohana/src/addstar/src/gettycho.c	(revision 17439)
@@ -104,4 +104,10 @@
 	stars[Ntycho].found = -1;
       
+	stars[Ntycho].X  = 0;
+	stars[Ntycho].Y  = 0;
+	stars[Ntycho].fx = 0;
+	stars[Ntycho].fy = 0;
+	stars[Ntycho].df = 0;
+
 	/* one pass of addstar does either r or b */
 	if (photcode == TYCHO_B) {
Index: /trunk/Ohana/src/addstar/src/getusno.c
===================================================================
--- /trunk/Ohana/src/addstar/src/getusno.c	(revision 17438)
+++ /trunk/Ohana/src/addstar/src/getusno.c	(revision 17439)
@@ -120,4 +120,10 @@
       stars[Nusno].imageID = 0;
 
+      stars[Nusno].X  = 0;
+      stars[Nusno].Y  = 0;
+      stars[Nusno].fx = 0;
+      stars[Nusno].fy = 0;
+      stars[Nusno].df = 0;
+
       /* one pass of addstar does either r or b */
       if (photcode == USNO_RED) {
Index: /trunk/Ohana/src/addstar/src/getusnob.c
===================================================================
--- /trunk/Ohana/src/addstar/src/getusnob.c	(revision 17438)
+++ /trunk/Ohana/src/addstar/src/getusnob.c	(revision 17439)
@@ -149,4 +149,10 @@
       stars[Nusno].imageID = 0;
 
+      stars[Nusno].X  = 0;
+      stars[Nusno].Y  = 0;
+      stars[Nusno].fx = 0;
+      stars[Nusno].fy = 0;
+      stars[Nusno].df = 0;
+
       /* USNO-B uses J2000 equinox and 2000.0 epoch for coordinates */
       /* the magnitudes have no temporal information */ 
Index: /trunk/Ohana/src/addstar/src/grefstars.c
===================================================================
--- /trunk/Ohana/src/addstar/src/grefstars.c	(revision 17438)
+++ /trunk/Ohana/src/addstar/src/grefstars.c	(revision 17439)
@@ -32,4 +32,11 @@
     stars[N].detID   = 0;
     stars[N].imageID = 0;
+
+    stars[N].X  = 0;
+    stars[N].Y  = 0;
+    stars[N].fx = 0;
+    stars[N].fy = 0;
+    stars[N].df = 0;
+
     CHECK_REALLOCATE (stars, Stars, NSTARS, N+1, 100);
   }
Index: /trunk/Ohana/src/addstar/src/load2mass_as_rawdata.c
===================================================================
--- /trunk/Ohana/src/addstar/src/load2mass_as_rawdata.c	(revision 17438)
+++ /trunk/Ohana/src/addstar/src/load2mass_as_rawdata.c	(revision 17439)
@@ -21,5 +21,5 @@
   char *buffer, *p, *q;
 
-  Stars *stars;
+  Stars **stars; // this is an array of pointers to be consistent with input to find_match_refstars
   TMStars *tstars;
   SkyList *skylist;
@@ -109,8 +109,8 @@
       if (tstars[i].D > UserPatch.Dmax) continue;
 
-      // collect stars in a new output catalog
+      // collect array of (Stars *) stars in a new output catalog
       Nstars = 0;
       NSTARS = 3000;
-      ALLOCATE (stars, Stars, NSTARS);
+      ALLOCATE (stars, Stars *, NSTARS);
 
       // identify the relevant catalog
@@ -136,10 +136,14 @@
 	offset = tstars[j].offset;
 
-	stars[Nstars+0].R = tstars[j].R;
-	stars[Nstars+0].D = tstars[j].D;
-	stars[Nstars+1].R = tstars[j].R;
-	stars[Nstars+1].D = tstars[j].D;
-	stars[Nstars+2].R = tstars[j].R;
-	stars[Nstars+2].D = tstars[j].D;
+	ALLOCATE (stars[Nstars+0], Stars, 1);
+	ALLOCATE (stars[Nstars+1], Stars, 1);
+	ALLOCATE (stars[Nstars+2], Stars, 1);
+
+	stars[Nstars+0][0].R = tstars[j].R;
+	stars[Nstars+0][0].D = tstars[j].D;
+	stars[Nstars+1][0].R = tstars[j].R;
+	stars[Nstars+1][0].D = tstars[j].D;
+	stars[Nstars+2][0].R = tstars[j].R;
+	stars[Nstars+2][0].D = tstars[j].D;
 	get2mass_3star_full (&stars[Nstars], &buffer[offset], Nbyte - offset);
 	// get2mass_star (&stars[Nstars], &buffer[offset], Nbyte - offset);
@@ -150,5 +154,5 @@
 	if (Nstars >= NSTARS - 3) {
 	  NSTARS += 3000;
-	  REALLOCATE (stars, Stars, NSTARS);
+	  REALLOCATE (stars, Stars *, NSTARS);
 	}
       }
@@ -181,5 +185,7 @@
 	// assume no input star matches an existing star 
 	// simply add to the existing table
-	load2mass_catalog (&catalog, stars, Nstars);
+	// load2mass_catalog (&catalog, stars, Nstars);
+	find_matches_refstars (skylist[0].regions[0], stars, Nstars, &catalog, options);
+	// load2mass_catalog (&catalog, stars, Nstars);
 
 	dvo_catalog_save (&catalog, VERBOSE);
@@ -191,4 +197,5 @@
 
       SkyListFree (skylist);
+      for (j = 0; j < Nstars; j++) free (stars[j]);
       free (stars);
       VERBOSE = verbose;
