Index: trunk/Ohana/src/dvomerge/src/IDmapIO.c
===================================================================
--- trunk/Ohana/src/dvomerge/src/IDmapIO.c	(revision 39318)
+++ trunk/Ohana/src/dvomerge/src/IDmapIO.c	(revision 39319)
@@ -135,4 +135,10 @@
   create_IDmap_lookup (IDmap);
 
+  gfits_free_header(&header);
+  gfits_free_matrix(&matrix);
+
+  gfits_free_header(&theader);
+  gfits_free_table (&ftable);
+
   return IDmap;
 }
Index: trunk/Ohana/src/dvomerge/src/dvomergeUpdate_catalogs.c
===================================================================
--- trunk/Ohana/src/dvomerge/src/dvomergeUpdate_catalogs.c	(revision 39318)
+++ trunk/Ohana/src/dvomerge/src/dvomergeUpdate_catalogs.c	(revision 39319)
@@ -277,4 +277,14 @@
     dvomergeUpdate_parallel_group (&groups[i], absinput, absoutput);
   }
+
+  for (i = 0; i < Ngroups; i++) {
+    free (groups[i].hosts);
+  }
+  free (groups);
+
+  FreeHostTable(table);
+
+  free (absinput);
+  free (absoutput);
   return TRUE;
 }
@@ -335,4 +345,5 @@
       group->hosts[i][0].pid = pid; // save for future reference
     }
+    free (command);
   }
 
Index: trunk/Ohana/src/dvomerge/src/dvomerge_client.c
===================================================================
--- trunk/Ohana/src/dvomerge/src/dvomerge_client.c	(revision 39318)
+++ trunk/Ohana/src/dvomerge/src/dvomerge_client.c	(revision 39319)
@@ -93,4 +93,20 @@
   dvomergeUpdate_catalogs (input, output, inlist, outsky, NsecfiltInput, NsecfiltOutput, IDmap, secfiltMap);
 
+  SkyTableFree (insky);
+  SkyTableFree (outsky);
+  SkyListFree (inlist);
+
+  if (IDmap) {
+    dvo_image_map_free (IDmap);
+    free (IDmap);
+  }
+  free (absoutput);
+  free (secfiltMap);
+  FreePhotcodeData (inputPhotcodes);
+  FreePhotcodeData (outputPhotcodes);
+
+  SetPhotcodeTable(NULL);
+  FreePhotcodeTable();
+
   dvomerge_client_args_free ();
   ohana_memcheck (TRUE);
Index: trunk/Ohana/src/libdvo/include/dvo.h
===================================================================
--- trunk/Ohana/src/libdvo/include/dvo.h	(revision 39318)
+++ trunk/Ohana/src/libdvo/include/dvo.h	(revision 39319)
@@ -1121,4 +1121,6 @@
 
 void InitHost (HostInfo *host);
+void FreeHostTable (HostTable *table);
+void FreeHostTableGroup (HostTableGroup *table);
 
 HostTableGroup *HostTableGroupsUniqueMachines (HostTable *table, int *ngroups);
Index: trunk/Ohana/src/libdvo/src/HostTable.c
===================================================================
--- trunk/Ohana/src/libdvo/src/HostTable.c	(revision 39318)
+++ trunk/Ohana/src/libdvo/src/HostTable.c	(revision 39319)
@@ -29,4 +29,6 @@
     free (hosts[i].hostname);
     free (hosts[i].pathname);
+    FreeIOBuffer (&hosts[i].stdout);
+    FreeIOBuffer (&hosts[i].stderr);
   }
   free (hosts);
@@ -34,5 +36,5 @@
 }
 
-void FreeTable (HostTable *table) {
+void FreeHostTable (HostTable *table) {
 
   if (!table) return;
@@ -46,5 +48,5 @@
 
 // a HostTableGroup is a pointer set to one or more HostTable entries
-void FreeTableGroup (HostTableGroup *table) {
+void FreeHostTableGroup (HostTableGroup *table) {
 
   if (!table) return;
@@ -264,5 +266,5 @@
     groups[i].Nhosts = 0;
     ALLOCATE (groups[i].hosts, HostInfo *, Nmax);
-    for (j = 0; j < Nmax; j++) {
+    for (j = 0; (j < Nmax) && (k < table->Nhosts); j++) {
       groups[i].hosts[groups[i].Nhosts] = &table->hosts[k];
       groups[i].Nhosts ++;
