anchor.diff:  end;
   
   procedure TmStringDictionary.Remove(const aStringKey: String);
  -begin
  +var
  +  tmpObj : TObject;
  +begin
  +  tmpObj := Self.Find(aStringKey);
     FImpl._Remove(aStringKey);
  +  InternalRemove(tmpObj);
   end;
   
   procedure TmStringDictionary.Clear;
   begin
     FImpl._Clear;
  +  InternalClear;
   end;
   
   function TmStringDictionary.Count: integer;
  
positive.code: 
    { TmIntegerDictionary }
  
    TmIntegerDictionary = class
      strict private
        FImpl : TmIntegerDictionaryImpl;
      public
        constructor Create();
        destructor Destroy; override;
  
        procedure Add(const aIntegerKey : integer; aObject: TObject);
  
negative.code: interface
  
  uses
    contnrs,
    mMapsImpl;
  
  type
  
    { TmBaseDictionary }
  
    TmBaseDictionary = class abstract
    strict private
      FGarbage : TObjectList;
    protected
      FOwnsObjects : boolean;
      procedure InternalAdd (const aObject : TObject);
      procedure InternalRemove (aObject : TObject);
      procedure InternalClear;
    public
      constructor Create(const aOwnsObjects : boolean = false); virtual;
      destructor Destroy; override;
    end;
  
  
    { TmStringDictionary }
  
    TmStringDictionary = class (TmBaseDictionary)
      strict private
        FImpl : TmStringDictionaryImpl;
      public
        constructor Create(const aOwnsObjects : boolean = false); override;
        destructor Destroy; override;
  
        procedure Add(const aStringKey: String; aObject: TObject);
  