anchor.diff:          else
           if (FCurrentSelectionType <> stNone) and SelectionsEquals(LSelection, FLastSelection) then
           begin
  -          ResetLastSelection;
  -          UpdateSelection(stNone)
  +          ResetSelection(FLastSelection);
  +          UpdateSelection(stNone, true)
           end
           else begin
             // lock for select event, otherwise we get false information about selection
             // (highly visible problem for deselection option)
             FIgnoreSelectionEvent := true;
  -          UpdateSelection(FSelectionType);
  +          UpdateSelection(FSelectionType, true);
             FIgnoreSelectionEvent := false;
             FLastSelection := LSelection;
             GridSelection(nil, 0, 0);
  
positive.code:     Result.Selections[i].Top:=Result.Selections[i].Top-1; // - fixed row
      Result.Selections[i].Bottom:=Result.Selections[i].Bottom-1; // - fixed row
    end;
  end;
  
  function TCustomVisualGrid.GetSelectedRows : TArray<Variant>;
  
negative.code: 
      if RefreshColumns then
        ReloadColumns;
      // when last page has different count than all other pages
      // we need to handle events on own way
      FIgnoreSelectionEvent:=true;
      FDrawGrid.RowCount := Length(FDataTable.Rows) + 1;
      FIgnoreSelectionEvent:=false;
    end;
    RefreshPageIndexAndGridInterface;
  
    // each page means different records so selection should be not moved to
    // new page nor deselected
    if FLastSelectionEvent.Page = FPageIndex then
    begin
      UpdateSelection(FSelectionType, false);
      UpdateDrawGridRect;
    end
    else
      UpdateSelection(stNone, false);
  end;
  
  procedure TCustomVisualGrid.UpdateSelection(ASelectionType: TSelectionType; AResetSelection: boolean);
  begin
    if FCurrentSelectionType = ASelectionType then
      Exit;
  
    FCurrentSelectionType:=ASelectionType;
    case FCurrentSelectionType of
      stNone: FDrawGrid.Options:=FDefaultDrawGridOptions;
      stCell: FDrawGrid.Options:=FDefaultDrawGridOptions+[goDrawFocusSelected];
      stRow: FDrawGrid.Options:=FDefaultDrawGridOptions+[goRowSelect];
      stMultiRow: FDrawGrid.Options:=FDefaultDrawGridOptions+[goRowSelect,goRangeSelect];
    end;
  
    if AResetSelection then
      GridSelection(nil, 0, 0);
  end;
  
  function TCustomVisualGrid.SelectionsEquals(constref A, B: TVisualGridSelection
    ): boolean;
  begin
    Result := A.Page = B.Page;
    if Result then
      case FSelectionType of
        stNone: Result := (A.Selections = nil) and (B.Selections = nil);
        stCell: Result := (A.Col = B.Col) and (A.Row = B.Row) and (A.ColCount = B.ColCount);
        stRow: Result := (A.Row = B.Row)  and (A.ColCount = B.ColCount);
        stMultiRow: Result := (A.Row = B.Row) and (A.RowCount = B.RowCount) and (A.ColCount = B.ColCount);
      end;
  end;
  
  procedure TCustomVisualGrid.ResetSelection(out ASelection: TVisualGridSelection);
  begin
    ASelection.Selections := nil;
    ASelection.Page := -1;
  end;
  
  procedure TCustomVisualGrid.SetPageSize(Value: Integer);
  