Index: /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/include/dvo.h
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/include/dvo.h	(revision 38499)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/include/dvo.h	(revision 38500)
@@ -259,4 +259,5 @@
 typedef struct {
   off_t Nregions;
+  off_t Nalloc;
   char **filename;
   SkyRegion *regions;
@@ -920,4 +921,6 @@
 PhotCodeData *GetPhotcodeTable (void);
 void SetPhotcodeTable (PhotCodeData *);
+void FreePhotcodeData (PhotCodeData *myPhotcodes);
+void FreePhotcodeTable (void);
 
 int *GetSecFiltMap(PhotCodeData *ouput, PhotCodeData* input);
Index: /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/LoadPhotcodesFITS.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/LoadPhotcodesFITS.c	(revision 38499)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/LoadPhotcodesFITS.c	(revision 38500)
@@ -51,5 +51,4 @@
     }									\
     photcode = PhotCode_##FORMAT##_To_Internal (photcode_input, Ncode); \
-    free (photcode_input);						\
   }
 
@@ -65,4 +64,6 @@
   CONVERT_FORMAT("DVO_PHOTCODE_PS1_V4",    PS1_V4);
   CONVERT_FORMAT("DVO_PHOTCODE_PS1_V5",    PS1_V5);
+
+  gfits_db_free (&db);
 
   table = GetPhotcodeTable ();
Index: /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/SavePhotcodesFITS.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/SavePhotcodesFITS.c	(revision 38499)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/SavePhotcodesFITS.c	(revision 38500)
@@ -37,4 +37,5 @@
   if (!gfits_db_save (&db)) return (FALSE);
   if (!gfits_db_close (&db)) return (FALSE);
+  if (!gfits_db_free (&db)) return (FALSE);
 
   free (photcode_output);
Index: /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/dvo_convert.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/dvo_convert.c	(revision 38499)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/dvo_convert.c	(revision 38500)
@@ -1035,12 +1035,13 @@
   Nimage = theader[0].Naxis[1];
 
-# define FORMAT_CASE(FORMAT, TYPE) \
-    case DVO_FORMAT_##FORMAT: { \
-      Image_##TYPE *tmpImage; \
+# 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, TRUE); \
-      free (tmpImage); \
-      break; }
+	free (ftable[0].buffer);					\
+	gfits_free_header (ftable->header);				\
+	gfits_table_set_Image_##TYPE (ftable, tmpImage, Nimage, TRUE);	\
+	  free (tmpImage);						\
+	  break; }
 
   /* convert from the internal format */
Index: /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/dvo_photcode_ops.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 38499)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/dvo_photcode_ops.c	(revision 38500)
@@ -43,5 +43,19 @@
 }
 
-// set the photcode table. This is used to switch between serveral previously
+// free a specified photcode set
+void FreePhotcodeData (PhotCodeData *myPhotcodes) {
+  if (!myPhotcodes) return;
+  FREE(myPhotcodes->code);
+  FREE(myPhotcodes);
+}
+
+// free the internal table
+void FreePhotcodeTable (void) {
+  FreePhotcodeData (photcodes);
+  FREE(genericCodeMag);
+  FREE(genericCodeFlux);
+}
+
+// set the photcode table. This is used to switch between several previously
 // allocated tables
 void SetPhotcodeTable (PhotCodeData *new) {
Index: /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/skyregion_gsc.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/skyregion_gsc.c	(revision 38499)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/skyregion_gsc.c	(revision 38500)
@@ -46,5 +46,4 @@
   FTable ftable;
   SkyTable *skytable;
-  SkyTable *band;
   SkyTable L0, L1, L2, L3, L4;
   SkyRegionZone *zones;
@@ -79,5 +78,6 @@
 /* L0 : full sky */
   L0.Nregions = 1;
-  ALLOCATE (L0.regions, SkyRegion, L0.Nregions);
+  L0.Nalloc = 1;
+  ALLOCATE (L0.regions, SkyRegion, L0.Nalloc);
   L0.regions[0].Rmin 	=   0;
   L0.regions[0].Rmax 	= 360;
@@ -99,8 +99,8 @@
   /* allocate space for all levels */
   L1.Nregions = L2.Nregions = L3.Nregions = L4.Nregions = 0;
-  ALLOCATE (L1.regions, SkyRegion, 1);
-  ALLOCATE (L2.regions, SkyRegion, 1);
-  ALLOCATE (L3.regions, SkyRegion, 1);
-  ALLOCATE (L4.regions, SkyRegion, 1);
+  L1.Nalloc = NDECBANDS;         ALLOCATE (L1.regions, SkyRegion, L1.Nalloc);
+  L2.Nalloc = NDECBANDS*0x10;    ALLOCATE (L2.regions, SkyRegion, L2.Nalloc);
+  L3.Nalloc = NDECBANDS*0x100;   ALLOCATE (L3.regions, SkyRegion, L3.Nalloc);
+  L4.Nalloc = NDECBANDS*0x1000;  ALLOCATE (L4.regions, SkyRegion, L4.Nalloc);
 
   // skipLines = 0;
@@ -130,5 +130,5 @@
 
     /* load all GSC Regions in this band */
-    band = SkyRegionForDecBand (&ftable.buffer[skipLines*48], DecLines[i], DecNames[i], L1.regions[i].Dmin, L1.regions[i].Dmax);
+    SkyTable *band = SkyRegionForDecBand (&ftable.buffer[skipLines*48], DecLines[i], DecNames[i], L1.regions[i].Dmin, L1.regions[i].Dmax);
     skipLines += DecLines[i];
 
@@ -151,5 +151,5 @@
 
     L1.Nregions ++;
-    REALLOCATE (L1.regions, SkyRegion, L1.Nregions + 1);
+    myAssert (L1.Nregions <= NDECBANDS, "too many L1 regions");
   }
 
@@ -231,4 +231,5 @@
   band[0].regions = regions;
   band[0].Nregions = Nregions;
+  band[0].Nalloc   = Nregions;
   return (band);
 }
@@ -277,5 +278,5 @@
   Nregions = band[0].Nregions;
 
-  NZ = 10;
+  NZ = 100;
   ALLOCATE (zones, SkyRegionZone, NZ);
  
@@ -312,5 +313,5 @@
       /* go to the next zone */
       Nz++;
-      CHECK_REALLOCATE (zones, SkyRegionZone, NZ, Nz, 10);
+      CHECK_REALLOCATE (zones, SkyRegionZone, NZ, Nz, 100);
 
       /* start info for the new zone */
@@ -401,9 +402,9 @@
 void SkyTableL2fromZone (SkyTable *L2, SkyTable *L3, SkyTable *L4, SkyTable *band, SkyRegionZone *zone, int parent) {
 
-  int i, Nr, Ns, Ne;
+  int i, Ns, Ne;
   char *p, name[80];
 
-  Nr = L2[0].Nregions;
-  REALLOCATE (L2[0].regions, SkyRegion, Nr + 1);
+  int Nr = L2[0].Nregions;
+  CHECK_REALLOCATE (L2[0].regions, SkyRegion, L2[0].Nalloc, L2[0].Nregions, 100);
   
   /* divide this zone into L2 regions with Nset L3 regions each (fewer on ends) */
@@ -444,5 +445,5 @@
 
     Nr++;
-    REALLOCATE (L2[0].regions, SkyRegion, Nr + 1);
+    CHECK_REALLOCATE (L2[0].regions, SkyRegion, L2[0].Nalloc, Nr, 100);
   }
   L2[0].Nregions = Nr;
@@ -456,5 +457,5 @@
   Nr = L3[0].Nregions;
   L3[0].Nregions += Ne - Ns;
-  REALLOCATE (L3[0].regions, SkyRegion, L3[0].Nregions);
+  CHECK_REALLOCATE (L3[0].regions, SkyRegion, L3[0].Nalloc, L3[0].Nregions, 0.5*L3[0].Nalloc);
 
   L2[0].child  = TRUE;
@@ -498,5 +499,5 @@
   Nr = L4[0].Nregions;
   L4[0].Nregions += NDIV*NDIV;
-  REALLOCATE (L4[0].regions, SkyRegion, L4[0].Nregions);
+  CHECK_REALLOCATE (L4[0].regions, SkyRegion, L4[0].Nalloc, L4[0].Nregions, 0.5*L4[0].Nalloc);
 
   L3[0].child  = TRUE;
Index: /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/skyregion_io.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/skyregion_io.c	(revision 38499)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/skyregion_io.c	(revision 38500)
@@ -113,4 +113,9 @@
   fclose (f);
 
+  gfits_free_header  (&header);
+  gfits_free_matrix  (&matrix);
+  gfits_free_header  (&theader);
+  gfits_free_table   (&ftable);
+
   return (TRUE);
 }
@@ -131,4 +136,5 @@
     exit (1);
   }
+  free (filename);
   return (sky);
 
Index: /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/skyregion_ops.c
===================================================================
--- /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/skyregion_ops.c	(revision 38499)
+++ /branches/eam_branches/ipp-20150616/Ohana/src/libdvo/src/skyregion_ops.c	(revision 38500)
@@ -550,4 +550,5 @@
     }
     free (list[0].regions);
+    free (list[0].filename);
   }
   free (list);
