anchor.diff:      function GetCount : Integer;
       function Get(Index : Integer) : TAbArchiveItem;
       procedure Put(Index : Integer; Item : TAbArchiveItem);
  +    procedure UpdateHash(aItem: TAbArchiveItem; const aOldFileName: string);
     public {methods}
       constructor Create(AOwnsItems: Boolean);
       destructor Destroy; override;
  -    function Add(Item : Pointer): Integer;
  +    function Add(aItem : TAbArchiveItem): Integer;
       procedure Clear;
       procedure Delete(Index : Integer);
       function Find(const FN : string) : Integer;
  
positive.code: procedure TAbArchiveList.Delete(Index: Integer);
  var
    Look : TAbArchiveItem;
    Last : Pointer;
    FN : string;
  begin
    if FOwnsItems then begin
      FN := TAbArchiveItem(FList[Index]).FileName;
      Last := @HashTable[GenerateHash(FN)];
      Look := TAbArchiveItem(Last^);
      while Look <> nil do begin
        if CompareText(Look.FileName, FN) = 0 then begin
          Move(Look.NextItem, Last^, 4);
          Break;
        end;
        Last := @Look.NextItem;
        Look := TAbArchiveItem(Last^);
      end;
      TObject(FList[Index]).Free;
    end;
  
negative.code:   inherited Destroy;
  end;
  { -------------------------------------------------------------------------- }
  function TAbArchiveList.Add(aItem : TAbArchiveItem) : Integer;
  var
    H : LongInt;
  begin
    if FOwnsItems then begin
      H := GenerateHash(aItem.FileName);
      aItem.NextItem := HashTable[H];
      HashTable[H] := aItem;
    end;
    Result := FList.Add(aItem);
  end;
  { -------------------------------------------------------------------------- }
  procedure TAbArchiveList.Clear;
  