anchor.diff:  
   procedure TCustomVisualGrid.GridMouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
  +var
  +  LCol, LRow: Integer;
   begin
     if ColCount = 0 then
       Exit;
   
  -  if FDeselectionType = dtClick then
  -    case Button of
  -      mbLeft:
  -        if (SelectionType <> stNone) and (FDrawGrid.MouseToGridZone(X, Y) = gzNormal) then
  -          if Assigned(FLastSelection.Selections) then
  -          begin
  -            ResetLastSelection;
  -            UpdateSelection(stNone);
  -            FIgnoreSelectionEvent := true;
  -          end else
  -            UpdateSelection(FSelectionType);
  -    end;
  +  // handle special case: when was selected row in fist page (for example row 20)
  +  // and the last page has 10 rows, when we click to row 5 implicitly is called
  +  // event for row 10 and next for row 5 (we have one extra event with row 10)
  +  if (FLastSelectionEvent.Page <> FPageIndex) and (Y <> FDrawGrid.Row) then
  +  begin
  +    FDrawGrid.MouseToCell(X, Y, LCol, LRow);
  +    FIgnoreSelectionEvent:=true;
  +    TDrawGridAccess(FDrawGrid).MoveExtend(false, LCol, LRow);
  +    FIgnoreSelectionEvent:=false;
  +  end;
  +
  +  case FDeselectionType of
  +    dtClick:
  +      case Button of
  +        mbLeft:
  +          if (SelectionType <> stNone) and (FDrawGrid.MouseToGridZone(X, Y) = gzNormal) then
  +            if Assigned(FLastSelectionEvent.Selections) and (FLastSelectionEvent.Page = FPageIndex) then
  +            begin
  +              ResetSelection(FLastSelection);
  +              UpdateSelection(stNone, true);
  +              FIgnoreSelectionEvent := true;
  +            end else
  +              UpdateSelection(FSelectionType, true);
  +      end;
  +    dtDefault, dtNone:
  +      case Button of
  +        mbLeft: UpdateSelection(FSelectionType, true);
  +      end;
  +  end;
   end;
   
   procedure TCustomVisualGrid.GridMouseUp(Sender: TObject; Button: TMouseButton;
  
positive.code:     procedure FetchPage(out AResult: TPageFetchResult);
      procedure AfterFetchPage;
      property ActiveDataTable: PDataTable read GetActiveDataTable;
      procedure UpdateSelection(ASelectionType: TSelectionType);
      function SelectionsEquals(constref A, B: TVisualGridSelection): boolean;
      procedure ResetLastSelection; inline;
    public
      constructor Create(Owner: TComponent); override;
      destructor Destroy; override;
  
negative.code:   FMultiSearchEdits := TObjectList<TSearchEdit>.Create;
    FColumns := TObjectList<TVisualColumn>.Create;
    FFilters := TList<TColumnFilter>.Create;
    ResetSelection(FLastSelection);
    ResetSelection(FLastSelectionEvent);
  
    { component layout }
  
  