anchor.diff:    // Rendering / Scrolling
   
     int _getRowTop(int row) {
  -    var x = _gridOptions.rowHeight * row - pageOffset;
  +    var x = _gridOptions.rowHeight * row - _pageOffset;
       //print('rowTop - row: ${row}: ${x}');
       return x;
     }
   
     int _getRowFromPosition(int y) {
  -    return ((y + pageOffset) / _gridOptions.rowHeight).floor();
  +    return ((y + _pageOffset) / _gridOptions.rowHeight).floor();
     }
   
     void _scrollTo(int y) {
       y = math.max(y, 0);
  -    y = math.min(y, th - _viewportH + (_viewportHasHScroll ? scrollbarDimensions.y : 0));
  -
  -    var oldOffset = pageOffset;
  -
  -    page = math.min(n - 1, (y / ph).floor());
  -    pageOffset = (page * cj).round();
  -    int newScrollTop = y - pageOffset;
  -
  -    if (pageOffset != oldOffset) {
  +    y = math.min(y, _th - _viewportH + (_viewportHasHScroll ? _scrollbarDimensions.y : 0));
  +
  +    var oldOffset = _pageOffset;
  +
  +    _page = math.min(_n - 1, (y / _ph).floor());
  +    _pageOffset = (_page * _cj).round();
  +    int newScrollTop = y - _pageOffset;
  +
  +    if (_pageOffset != oldOffset) {
         var range = _getVisibleRange(newScrollTop);
         _cleanupRows(range);
         _updateRowPositions();
       }
   
       if (_prevScrollTop != newScrollTop) {
  -      vScrollDir = (_prevScrollTop + oldOffset < newScrollTop + pageOffset) ? 1 : -1;
  +      _vScrollDir = (_prevScrollTop + oldOffset < newScrollTop + _pageOffset) ? 1 : -1;
         _viewport.scrollTop = (_lastRenderedScrollTop = _scrollTop = _prevScrollTop = newScrollTop);
   
         _eventBus.fire(core.Events.VIEWPORT_CHANGED, new core.ViewportChanged(this));
  
positive.code:     }
  
      do {
        cell += tools.parseInt(getColspan(row, cell));
      }
      while (cell < columns.length && !canCellBeActive(row, cell));
  
  
negative.code:       int width = columns[i].width;
        headersWidth += width;
      }
      headersWidth += _scrollbarDimensions.x;
      return math.max(headersWidth, _viewportW) + 1000;
    }
  
    int _getCanvasWidth() {
      int availableWidth = _viewportHasVScroll ? _viewportW - _scrollbarDimensions.x : _viewportW;
      int rowWidth = 0;
      int i = columns != null ? columns.length : 0;
      while (i-- > 0) {
  