anchor.diff:    Result := Self.InternalFindByString(aStringKey) as IVDDatum;
   end;
   
  +function TmDataProvider.FindDatumByIndexedField(const aIndexedFieldName, aValue: String): IVDDatum;
  +var
  +  tmpIndex : TmStringDictionary;
  +begin
  +  Result := nil;
  +  if FMustRebuildIndex then
  +    RebuildIndex;
  +  tmpIndex := FIndexes.Find(aIndexedFieldName) as TmStringDictionary;
  +  if Assigned(tmpIndex) then
  +    Result := tmpIndex.Find(aValue) as IVDDatum;
  +  FMustRebuildIndex:=false;
  +end;
  +
   end.
  
positive.code: constructor TmDataProvider.Create(const aOwnsObject : boolean = true);
  begin
    FList := TObjectList.Create(aOwnsObject);
    FMap := TmStringDictionary.Create;
    FMustRebuildIndex:= true;
  end;
  
  destructor TmDataProvider.Destroy;
  begin
    FList.Free;
    FMap.Free;
    inherited Destroy;
  end;
  
  procedure TmDataProvider.Clear;
  begin
    FList.Clear;
    FMap.Clear;
    FMustRebuildIndex:=true;
  
  end;
  
  function TmDataProvider.Count: integer;
  
negative.code:     FList : TObjectList;
  
      FMustRebuildIndex : boolean;
      FMainIndex : TmStringDictionary;
      FIndexes : TmStringDictionary;
      FIndexedFieldNames : TStringList;
      procedure ClearIndexes;
    protected
      procedure AddIndex (const aFieldName : String);
      procedure InternalAdd(aDatum : TObject);
      procedure InternalRemove(aDatum : TObject);
      procedure InternalDelete(const aIndex: integer);
  