anchor.diff:    FWidget := AWidget;
     FDefaultFont := fpgGetFont(DefaultTopicFont);
     FCanvas.Font := FDefaultFont;
  -  FFont := nil;
  +  FFontCache := TFPList.Create;
   end;
   
   destructor TCanvasFontManager.Destroy;
  +var
  +  i: Integer;
   begin
     FCanvas.Font := fpgApplication.DefaultFont;
     FDefaultFont.Free;
  -  FFont.Free;
  +
  +  for i := 0 to FFontCache.Count-1 do
  +    TObject(FFontCache.Items[i]).Free;
  +  FFontCache.Free;
  +
     inherited Destroy;
   end;
   
  
positive.code: // Set the current font for the canvas to match the given
  // spec, creating or re-using fonts as needed.
  procedure TCanvasFontManager.SetFont(const AFontDesc: TfpgString);
  begin
    if FCanvas.Font.FontDesc = AFontDesc then
      Exit; // nothing to do so exit
  
negative.code:   private
      FWidget: TfpgWidget;
      FCanvas: TfpgCanvas;
      FFontCache: TFPList;
      function    GetCurrentFont: TfpgFont;
      procedure   SetDefaultFont(const AValue: TfpgFont);
    protected
  