anchor.diff:  
   implementation
   
  +uses
  +  sysutils;
  +
  +{ TmBaseDictionary }
  +
  +procedure TmBaseDictionary.InternalAdd(const aObject: TObject);
  +begin
  +  if FOwnsObjects and Assigned(aObject) then
  +    FGarbage.Add(aObject);
  +end;
  +
  +procedure TmBaseDictionary.InternalRemove(aObject: TObject);
  +begin
  +  if FOwnsObjects and Assigned(aObject) then
  +    FGarbage.Remove(aObject);
  +end;
  +
  +procedure TmBaseDictionary.InternalClear;
  +begin
  +  if FOwnsObjects then
  +    FGarbage.Clear;
  +end;
  +
  +constructor TmBaseDictionary.Create(const aOwnsObjects: boolean);
  +begin
  +  FOwnsObjects:= aOwnsObjects;
  +  if FOwnsObjects then
  +    FGarbage := TObjectList.Create(true);
  +end;
  +
  +destructor TmBaseDictionary.Destroy;
  +begin
  +  FreeAndNil(FGarbage);
  +  inherited Destroy;
  +end;
  +
   { TmIntegerDictionary }
   
  -constructor TmIntegerDictionary.Create;
  -begin
  +constructor TmIntegerDictionary.Create(const aOwnsObjects : boolean = false);
  +begin
  +  inherited;
     FImpl := CreateTmIntegerDictionary;
   end;
   
  
positive.code: 
    { TmIntegerDictionary }
  
    TmIntegerDictionary = class
      strict private
        FImpl : TmIntegerDictionaryImpl;
      public
        constructor Create();
        destructor Destroy; override;
  
        procedure Add(const aIntegerKey : integer; aObject: TObject);
  
negative.code: procedure TmStringDictionary.Add(const aStringKey: String; aObject: TObject);
  begin
    FImpl._Add(aStringKey, aObject);
    InternalAdd(aObject);
  end;
  
  function TmStringDictionary.Find(const aStringKey: String): TObject;
  