Index: pj_malloc.c
===================================================================
--- pj_malloc.c	(revision 2044)
+++ pj_malloc.c	(working copy)
@@ -19,6 +19,7 @@
         void *res = malloc(size);       
         if ( res && !old_errno )
                 errno = 0;        	 
+        memset(res, 0, size);
         return res;
 }
 	void
Index: PJ_igh.c
===================================================================
--- PJ_igh.c	(revision 2044)
+++ PJ_igh.c	(working copy)
@@ -114,10 +114,12 @@
 }
 FREEUP;
         if (P) {
-                int i;
-                for (i = 0; i < 12; ++i)
-                        if (P->pj[i]) free(P->pj[i]);
-                free(P);
+            int i;
+            for (i = 0; i < 12; ++i) {
+                if (P->pj[i])
+                    (*(P->pj[i]->pfree))(P->pj[i]);
+            }
+            pj_dalloc(P);
         }
 }
 ENTRY0(igh)
