Index: trunk/Ohana/src/addstar/include/loadstarpar.h
===================================================================
--- trunk/Ohana/src/addstar/include/loadstarpar.h	(revision 39329)
+++ trunk/Ohana/src/addstar/include/loadstarpar.h	(revision 39330)
@@ -24,4 +24,5 @@
 
 int init_remote_hosts (void);
+void free_remote_hosts (void);
 int find_empty_slot (void);
 int harvest_all (void);
Index: trunk/Ohana/src/addstar/src/find_matches_starpar.c
===================================================================
--- trunk/Ohana/src/addstar/src/find_matches_starpar.c	(revision 39329)
+++ trunk/Ohana/src/addstar/src/find_matches_starpar.c	(revision 39330)
@@ -124,5 +124,5 @@
     N = N1[i];
 
-    /* make sure there is space for next entry */
+    /* make sure there is space for next entry (we add at most 1) */
     if (Nstarpar >= NSTARPAR) {
       NSTARPAR = Nstarpar + 1000;
@@ -200,7 +200,4 @@
   REALLOCATE (catalog[0].starpar, StarPar, Nstarpar);
  
-  resort_catalog_starpar (catalog);
-  catalog[0].sorted = TRUE;
-
   /* check if the catalog has changed?  if no change, no need to write */
   catalog[0].objID     = objID; // new max value, save on catalog close
@@ -208,4 +205,8 @@
   catalog[0].Nstarpar  = Nstarpar;
   catalog[0].Nsecfilt_mem = Nave*Nsecfilt;
+
+  resort_catalog_starpar (catalog);
+  catalog[0].sorted = TRUE;
+
   if (VERBOSE) fprintf (stderr, "Nstars, Nave, Nstarpar: %d "OFF_T_FMT" "OFF_T_FMT" ("OFF_T_FMT" matches)\n",  Nstars, Nave, Nstarpar, Nmatch);
 
Index: trunk/Ohana/src/addstar/src/loadgalphot_readstars.c
===================================================================
--- trunk/Ohana/src/addstar/src/loadgalphot_readstars.c	(revision 39329)
+++ trunk/Ohana/src/addstar/src/loadgalphot_readstars.c	(revision 39330)
@@ -48,4 +48,13 @@
   }
   ftable_xfit.header = &header_xfit;
+
+  if (header_xfit.Naxis[1] == 0) {
+    if (VERBOSE) fprintf (stderr, "no data in file %s, skipping\n", filename);
+    gfits_free_header (&header_xfit);
+    gfits_free_header (&PHU);
+    fclose (f);
+    *nstars = 0;
+    return NULL;
+  }
 
   // in xgal, we have numerical values to specify the model types
Index: trunk/Ohana/src/addstar/src/loadstarpar.c
===================================================================
--- trunk/Ohana/src/addstar/src/loadstarpar.c	(revision 39329)
+++ trunk/Ohana/src/addstar/src/loadstarpar.c	(revision 39330)
@@ -55,4 +55,15 @@
     loadstarpar_table (skylist, hosts, argv[i], &options);
   }
+
+  FreeConfig ();
+  FreePhotcodeTable ();
+  SkyListFree (skylist);
+  SkyTableFree (sky);
+  FreeHostTable (hosts);
+
+  free_remote_hosts();
+
+  ohana_memcheck(TRUE);
+  ohana_memdump(TRUE);
   exit (0);
 }  
Index: trunk/Ohana/src/addstar/src/loadstarpar_client.c
===================================================================
--- trunk/Ohana/src/addstar/src/loadstarpar_client.c	(revision 39329)
+++ trunk/Ohana/src/addstar/src/loadstarpar_client.c	(revision 39330)
@@ -28,4 +28,15 @@
   free (stars);
 
+  FreeConfig ();
+  FreePhotcodeTable ();
+  SkyListFree (skylist);
+  SkyTableFree (sky);
+
+  free (CPT_FILE);
+  free (HOSTDIR);
+  free (INPUT);
+
+  ohana_memcheck(TRUE);
+  ohana_memdump(TRUE);
   exit (0);
 }
Index: trunk/Ohana/src/addstar/src/loadstarpar_io.c
===================================================================
--- trunk/Ohana/src/addstar/src/loadstarpar_io.c	(revision 39329)
+++ trunk/Ohana/src/addstar/src/loadstarpar_io.c	(revision 39330)
@@ -84,4 +84,20 @@
   gfits_free_table (&ftable);
 
+  free (ra      );
+  free (dec     );
+  free (glon    );
+  free (glat    );
+  free (Ebv     );
+  free (dEbv    );
+  free (DistMag );
+  free (dDistMag);
+  free (M_r     );
+  free (dM_r    );
+  free (FeH     );
+  free (dFeH    );
+  free (averef  );
+  free (objID   );
+  free (catID   );
+
   fflush (f);
   fclose (f);
@@ -180,4 +196,20 @@
   }
 
+  free (ra      );
+  free (dec     );
+  free (glon    );
+  free (glat    );
+  free (Ebv     );
+  free (dEbv    );
+  free (DistMag );
+  free (dDistMag);
+  free (M_r     );
+  free (dM_r    );
+  free (FeH     );
+  free (dFeH    );
+  free (averef  );
+  free (objID   );
+  free (catID   );
+
   fclose (f);
   *nstars = Nrow;
Index: trunk/Ohana/src/addstar/src/loadstarpar_readstars.c
===================================================================
--- trunk/Ohana/src/addstar/src/loadstarpar_readstars.c	(revision 39329)
+++ trunk/Ohana/src/addstar/src/loadstarpar_readstars.c	(revision 39330)
@@ -146,4 +146,15 @@
   gfits_free_matrix (&matrix);
 
+  free (glon);
+  free (glat);
+  free (conv);
+  free (lnZ);
+  free (DistMag);
+  free (Ebv);
+  free (M_r);
+  free (FeH);
+
+  free (transform);
+
   *nstars = Nstars;
   return (stars);
Index: trunk/Ohana/src/addstar/src/loadstarpar_remote_hosts.c
===================================================================
--- trunk/Ohana/src/addstar/src/loadstarpar_remote_hosts.c	(revision 39329)
+++ trunk/Ohana/src/addstar/src/loadstarpar_remote_hosts.c	(revision 39330)
@@ -14,5 +14,5 @@
 HostInfo **hosts = NULL;
 
-int init_remote_hosts () {
+int init_remote_hosts (void) {
 
   Nhosts = 10;
@@ -24,4 +24,9 @@
   }
   return TRUE;
+}
+
+void free_remote_hosts (void) {
+  if (!hosts) return;
+  free (hosts);
 }
 
Index: trunk/Ohana/src/addstar/src/loadstarpar_table.c
===================================================================
--- trunk/Ohana/src/addstar/src/loadstarpar_table.c	(revision 39329)
+++ trunk/Ohana/src/addstar/src/loadstarpar_table.c	(revision 39330)
@@ -7,4 +7,5 @@
 
   StarPar_Stars *stars = loadstarpar_readstars (filename, &Nstars);
+  if (!stars) return FALSE;
 
   // sort the stars by RA
@@ -37,5 +38,9 @@
     // is available.  In serial mode, just match against the appropriate region and save
     loadstarpar_save_remote (subset, Nsubset, hosts, region, skylist[0].filename[0], options);
+
+    free (subset);
+    SkyListFree (skylist);
   }
+  free (stars);
 
   // wait for last remote clients to finish
Index: trunk/Ohana/src/addstar/src/resort_unthreaded.c
===================================================================
--- trunk/Ohana/src/addstar/src/resort_unthreaded.c	(revision 39329)
+++ trunk/Ohana/src/addstar/src/resort_unthreaded.c	(revision 39330)
@@ -26,5 +26,5 @@
     catalog.catmode     = dvo_catalog_catmode (CATMODE);      // set the default catmode from config data
     catalog.catcompress = dvo_catalog_catcompress (CATCOMPRESS); // set the default catcompress from config data
-    catalog.catflags    = DVO_LOAD_AVERAGE | DVO_LOAD_MEASURE | DVO_LOAD_LENSING;
+    catalog.catflags    = DVO_LOAD_AVERAGE | DVO_LOAD_MEASURE | DVO_LOAD_LENSING | DVO_LOAD_STARPAR | DVO_LOAD_GALPHOT;
     catalog.Nsecfilt    = GetPhotcodeNsecfilt ();
 
@@ -38,4 +38,10 @@
     if (catalog.Naverage_disk == 0) {
       dvo_catalog_unlock (&catalog);
+      dvo_catalog_free (&catalog);
+      continue;
+    }
+
+    if (!ForceSort && catalog.sorted) {
+      if (!dvo_catalog_unlock (&catalog)) { fprintf (stderr, "ERROR: failed to unlock %s\n", catalog.filename); exit (1); }
       dvo_catalog_free (&catalog);
       continue;
