diff --git a/src/gf/gfdrivr.c b/src/gf/gfdrivr.c
index 50de121..8723f26 100644
--- a/src/gf/gfdrivr.c
+++ b/src/gf/gfdrivr.c
@@ -189,10 +189,10 @@
 
     memory = FT_FACE_MEMORY( face );
 
-    gf_free_font( face );
-
     FT_FREE( gfface->available_sizes );
-
+    FT_FREE( face->gf_glyph->encodings );
+    FT_FREE( face->gf_glyph->metrics );
+    gf_free_font( face );
   }
 
 
@@ -429,7 +429,6 @@
     GF_MetricRec metric;
     GF_Glyph     go;
     FT_ULong     bytes;
-    FT_Byte      *bitmp;
 
     go = gf->gf_glyph;
 
@@ -470,12 +469,7 @@
     bitmap->width      = metric.bbx_width;
     bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
 
-    bitmap->pitch = (int)( metric.raster );
-
-    /* note: we don't allocate a new array to hold the bitmap; */
-    /*       we can simply point to it                         */
-    ft_glyphslot_set_bitmap( slot, metric.bitmap );
-
+    bitmap->pitch = (int)( ( bitmap->width + 7 ) >> 3 );
 
     slot->format      = FT_GLYPH_FORMAT_BITMAP;
     slot->bitmap_left = metric.off_x ;
@@ -489,7 +483,13 @@
 
     ft_synthesize_vertical_metrics( &slot->metrics, metric.bbx_height * 64 );
 
-    /* XXX: to do: are there cases that need repadding the bitmap? */
+    if ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY )
+      goto Exit;
+
+    bytes = (FT_ULong)bitmap->pitch * bitmap->rows;
+
+    error = ft_glyphslot_alloc_bitmap( slot, (FT_ULong)bytes );
+    memset( slot->bitmap.buffer, 0, bytes );
 
   Exit:
     return error;
@@ -567,7 +567,6 @@
 
     if ( !error )
     {
-      printf("Hi I reached here\n");
       /* Modify GF_Glyph data according to TFM metric values */
 
       /*face->gf_glyph->font_bbx_w = fi->font_bbx_w;
@@ -575,7 +574,6 @@
       */
 
       face->tfm_data       = fi;
-      fi                   = NULL;
     }
 
   Exit:
diff --git a/src/gf/gflib.c b/src/gf/gflib.c
index 9e922a3..960f700 100644
--- a/src/gf/gflib.c
+++ b/src/gf/gflib.c
@@ -195,6 +195,7 @@
     }
 
     FT_FREE(metric);
+    FT_FREE(tosort);
 
     go->nencodings = k;
     go->encodings  = encoding;
@@ -283,14 +284,14 @@
 
     BOC:
       if(error != FT_Err_Ok)
-        return -1;
+        return error;
       w = max_m - min_m + 1;
       h = max_n - min_n + 1;
       if ((w < 0) || (h < 0))
       {
         FT_ERROR(( "gf_read_glyph: invalid w and h values\n" ));
         error = FT_THROW( Invalid_File_Format );
-        return -1;
+        return error;
       }
 
       /* FT_TRACE2(( "w      is %ld\n"
@@ -300,14 +301,21 @@
       */
 
       /* allocate and build bitmap */
+      /*
       if ((metrics->bitmap = (FT_Byte*)malloc(h*((w+7)/8))) == NULL)
       {
         error = FT_THROW( Invalid_File_Format );
-        return -1;
+        return error;
       }
+      */
 
+      /* if( FT_ALLOC( metrics->bitmap, (h*((w+7)/8)) ) )
+        return error;
+      */
+      /*
       memset(metrics->bitmap, 0, h*((w+7)/8));
       metrics->raster     = (FT_UInt)(w+7)/8;
+      */
       metrics->bbx_width  = w;
       metrics->bbx_height = h;
       metrics->off_x      = -min_m;
@@ -596,6 +604,12 @@
       go->metrics[code - bc].mv_y        = dy;
       go->metrics[code - bc].char_offset = (FT_ULong)ptr;
       go->metrics[code - bc].code        = (FT_UShort)code;
+      go->metrics[code - bc].bbx_width   = 0; /* Initialize other metrics here */
+      go->metrics[code - bc].bbx_height  = 0;
+      go->metrics[code - bc].off_x       = 0;
+      go->metrics[code - bc].off_y       = 0;
+      go->metrics[code - bc].raster      = 0;
+      go->metrics[code - bc].bitmap      = NULL;
       go->nglyphs                       += 1;
     }
 
@@ -628,10 +642,6 @@
     if ( !go )
       return;
 
-    if(go->metrics != NULL)
-    {
-      FT_FREE(go->metrics);
-    }
     FT_FREE(go);
   }
 
diff --git a/src/pk/pkdrivr.c b/src/pk/pkdrivr.c
index 8dc0dd3..3844d8b 100644
--- a/src/pk/pkdrivr.c
+++ b/src/pk/pkdrivr.c
@@ -517,7 +517,6 @@
       */
 
       face->tfm_data       = fi;
-      fi                   = NULL;
     }
 
   Exit:
diff --git a/src/tfm/tfmobjs.c b/src/tfm/tfmobjs.c
index 75e2b46..63fd089 100644
--- a/src/tfm/tfmobjs.c
+++ b/src/tfm/tfmobjs.c
@@ -131,9 +131,9 @@
   FT_LOCAL( void )
   tfm_close( TFM_Parser  parser )
   {
-    FT_Memory  memory = parser->memory;
+    FT_UNUSED( parser );
 
-    FT_FREE( parser->stream );
+    /* nothing */
   }
 
 
@@ -346,13 +346,10 @@
     fi->slant = (FT_ULong)((double)fi->slant/(double)(1<<20));
 
   Exit:
-    if( !ci || !w || !h || !d )
-    {
-      FT_FREE(ci);
-      FT_FREE(w);
-      FT_FREE(h);
-      FT_FREE(d);
-    }
+    FT_FREE(ci);
+    FT_FREE(w);
+    FT_FREE(h);
+    FT_FREE(d);
     return error;
   }
 
