diff --git a/ChangeLog b/ChangeLog
index f2e130b..04a45d8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,26 @@
 
     * docs/*: serious rewriting of the documentation
 
+    * include/freetype/internal/ftobjs.h, src/base/ftobjs.c, src/bdf/bdfdrivr.c,
+    src/pcf/pcfdriver.c, src/pfr/pfrsbit.c, src/sfnt/ttsbit.c,
+    src/type42/t42objs.c, src/winfonts/winfnt.c: introduced three new functions
+    to deal with glyph bitmaps within FT_GlyphSlot objects. these are:
+
+      ft_glyphslot_free_bitmap
+      ft_glyphslot_alloc_bitmap
+      ft_glyphslot_set_bitmap
+
+    these are much more convenient to use than managing the FT_GLYPH_OWN_BITMAP
+    flag manually. the font drivers have been modified to use them as well.
+
+    * src/cache/ftlru.c: fixed an invalid assertion check
+
+    * src/autohint/ahglyph.h, src/autohint/ahglyph.c, src/autohint/ahglobal.c,
+    src/autohint/ahhint.c: fixed blue-scale problem
+
+    * src/cache/ftccache.c: fixed small bug that could crash the cache
+    in rare circumstances (mostly with broken fonts)
+
 
 2003-03-15  David Turner  <david@freetype.org>
 
diff --git a/src/autohint/ahglobal.c b/src/autohint/ahglobal.c
index b8fb48a..efce344 100644
--- a/src/autohint/ahglobal.c
+++ b/src/autohint/ahglobal.c
@@ -323,7 +323,7 @@
       if ( error )
         goto Exit;
 
-      error = ah_outline_load( hinter->glyph, hinter->face );
+      error = ah_outline_load( hinter->glyph, 0x10000L, 0x10000L, hinter->face );
       if ( error )
         goto Exit;
 
diff --git a/src/autohint/ahglyph.c b/src/autohint/ahglyph.c
index d4fcd4b..4f37504 100644
--- a/src/autohint/ahglyph.c
+++ b/src/autohint/ahglyph.c
@@ -389,6 +389,8 @@
   /*                                                                       */
   FT_LOCAL_DEF( FT_Error )
   ah_outline_load( AH_Outline  outline,
+                   FT_Fixed    x_scale,
+                   FT_Fixed    y_scale,
                    FT_Face     face )
   {
     FT_Memory    memory       = outline->memory;
@@ -461,8 +463,8 @@
       outline->horz_major_dir = AH_DIR_RIGHT;
     }
 
-    outline->x_scale = face->size->metrics.x_scale;
-    outline->y_scale = face->size->metrics.y_scale;
+    outline->x_scale = x_scale;
+    outline->y_scale = y_scale;
 
     points = outline->points;
     if ( outline->num_points == 0 )
@@ -478,8 +480,6 @@
       /* compute coordinates */
       {
         FT_Vector*  vec     = source->points;
-        FT_Fixed    x_scale = outline->x_scale;
-        FT_Fixed    y_scale = outline->y_scale;
 
 
         for ( point = points; point < point_limit; vec++, point++ )
diff --git a/src/autohint/ahglyph.h b/src/autohint/ahglyph.h
index b116ed9..b346cbe 100644
--- a/src/autohint/ahglyph.h
+++ b/src/autohint/ahglyph.h
@@ -58,6 +58,8 @@
 
   FT_LOCAL( FT_Error )
   ah_outline_load( AH_Outline  outline,
+                   FT_Fixed    x_scale,
+                   FT_Fixed    y_scale,
                    FT_Face     face );
 
   FT_LOCAL( void )
diff --git a/src/autohint/ahhint.c b/src/autohint/ahhint.c
index ffc86d6..5814e37 100644
--- a/src/autohint/ahhint.c
+++ b/src/autohint/ahhint.c
@@ -1391,7 +1391,7 @@
 
       /* now, load the slot image into the auto-outline, and run the */
       /* automatic hinting process                                   */
-      error = ah_outline_load( outline, face );   /* XXX: change to slot */
+      error = ah_outline_load( outline, x_scale, y_scale, face );
       if ( error )
         goto Exit;
 
diff --git a/src/cache/ftccache.c b/src/cache/ftccache.c
index aba7ca4..a12fedc 100644
--- a/src/cache/ftccache.c
+++ b/src/cache/ftccache.c
@@ -362,7 +362,7 @@
     if ( manager->num_nodes == 0 )
       FT_ERROR(( "ftc_node_destroy: invalid cache node count! = %d\n",
                   manager->num_nodes ));
-#endif                  
+#endif
   }
 
 
@@ -407,11 +407,14 @@
   FT_EXPORT_DEF( void )
   ftc_family_done( FTC_Family  family )
   {
-    FTC_Manager  manager = family->cache->manager;
+    if ( family && family->cache )
+    {
+      FTC_Manager  manager = family->cache->manager;
 
 
-    /* remove from manager's family table */
-    ftc_family_table_free( &manager->families, family->fam_index );
+      /* remove from manager's family table */
+      ftc_family_table_free( &manager->families, family->fam_index );
+    }
   }
 
 
@@ -592,7 +595,7 @@
         FT_LruList              list    = cache->families;
         FT_LruNode              fam, *pfam;
         FT_LruNode_CompareFunc  compare = list->clazz->node_compare;
-  
+
         pfam = &list->nodes;
         for (;;)
         {
@@ -602,18 +605,18 @@
             error = FT_LruList_Lookup( list, query, &lru );
             if ( error )
               goto Fail;
-  
+
             goto Skip;
           }
-  
+
           if ( compare( fam, query, list->data ) )
             break;
-  
+
           pfam = &fam->next;
         }
-  
+
         FT_ASSERT( fam != NULL );
-  
+
         /* move to top of list when needed */
         if ( fam != list->nodes )
         {
@@ -621,9 +624,9 @@
           fam->next   = list->nodes;
           list->nodes = fam;
         }
-  
+
         lru = fam;
-  
+
       Skip:
         ;
       }
@@ -634,15 +637,15 @@
         FT_UFast     hash    = query->hash;
         FTC_Node*    bucket;
         FT_UInt      idx;
-  
-  
+
+
         idx = hash & cache->mask;
         if ( idx < cache->p )
           idx = hash & ( cache->mask * 2 + 1 );
-  
+
         bucket  = cache->buckets + idx;
-  
-  
+
+
         if ( query->family     != family                 ||
              family->fam_index >= manager->families.size )
         {
@@ -651,22 +654,22 @@
           error = FTC_Err_Invalid_Argument;
           goto Exit;
         }
-  
+
         if ( *bucket )
         {
           FTC_Node*             pnode   = bucket;
           FTC_Node_CompareFunc  compare = cache->clazz->node_compare;
-  
+
 
           for ( ;; )
           {
             FTC_Node  node;
-  
-  
+
+
             node = *pnode;
             if ( node == NULL )
               break;
-  
+
             if ( node->hash == hash                            &&
                  (FT_UInt)node->fam_index == family->fam_index &&
                  compare( node, query, cache ) )
@@ -678,40 +681,40 @@
                 node->link = *bucket;
                 *bucket    = node;
               }
-  
+
               /* move to head of MRU list */
               if ( node != manager->nodes_list )
                 ftc_node_mru_up( node, manager );
-  
+
               *anode = node;
               goto Exit;
             }
-  
+
             pnode = &node->link;
           }
         }
-  
+
         /* didn't find a node, create a new one */
         {
           FTC_Cache_Class  clazz   = cache->clazz;
           FT_Memory        memory  = cache->memory;
           FTC_Node         node;
-  
-  
+
+
           if ( FT_ALLOC( node, clazz->node_size ) )
             goto Fail;
-  
+
           node->fam_index = (FT_UShort) family->fam_index;
           node->hash      = query->hash;
           node->ref_count = 0;
-  
+
           error = clazz->node_init( node, query, cache );
           if ( error )
           {
             FT_FREE( node );
             goto Fail;
           }
-  
+
           error = ftc_node_hash_link( node, cache );
           if ( error )
           {
@@ -719,11 +722,11 @@
             FT_FREE( node );
             goto Fail;
           }
-  
+
           ftc_node_mru_link( node, cache->manager );
-  
+
           cache->manager->cur_weight += clazz->node_weight( node, cache );
-  
+
           /* now try to compress the node pool when necessary */
           if ( manager->cur_weight >= manager->max_weight )
           {
@@ -731,19 +734,19 @@
             FTC_Manager_Compress( manager );
             node->ref_count--;
           }
-  
+
           *anode = node;
         }
-        
+
        /* all is well, exit now
         */
         goto Exit;
       }
-      
+
     Fail:
       if ( error != FT_Err_Out_Of_Memory )
         goto Exit;
-     
+
      /* there is not enough memory, try to release some unused nodes
       * from the cache to make room for a new one.
       */
@@ -757,7 +760,7 @@
           goto Exit;
 
         free_count = new_count;
-        
+
         /* try to remove "new_count" nodes from the list */
         {
           FTC_Node   first = manager->nodes_list;
@@ -781,7 +784,7 @@
               /* if there are no unused nodes in the list, we'd better exit */
               if ( new_count == free_count )
                 goto Exit;
-                
+
               break;
             }
 
