anchor.diff:      _startPostProcessing();
   
       _lastRenderedScrollTop = _scrollTop;
  -    _lastRenderedScrollLeft = scrollLeft;
  +    _lastRenderedScrollLeft = _scrollLeft;
       _h_render = null;
     }
   
     void _handleHeaderRowScroll([dom.Event e]) {
       var scrollLeft = _headerRowScroller.scrollLeft;
       if (scrollLeft != _viewport.scrollLeft) {
  -      _viewport.scrollLeft = scrollLeft;
  +      _viewport.scrollLeft = _scrollLeft;
       }
     }
   
     void _handleScroll([dom.Event e]) {
       _scrollTop = _viewport.scrollTop;
  -    scrollLeft = _viewport.scrollLeft;
  +    _scrollLeft = _viewport.scrollLeft;
       int vScrollDist = (_scrollTop - _prevScrollTop).abs();
  -    int hScrollDist = (scrollLeft - _prevScrollLeft).abs();
  -
  -    if (hScrollDist != 0) {
  -      _prevScrollLeft = scrollLeft;
  -      _headerScroller.scrollLeft = scrollLeft;
  -      _topPanelScroller.scrollLeft = scrollLeft;
  -      _headerRowScroller.scrollLeft = scrollLeft;
  -    }
  -
  -    if (vScrollDist != 0) {
  +    int hScrollDist = (_scrollLeft - _prevScrollLeft).abs();
  +
  +    if (hScrollDist != null && hScrollDist != 0) {
  +      _prevScrollLeft = _scrollLeft;
  +      _headerScroller.scrollLeft = _scrollLeft;
  +      _topPanelScroller.scrollLeft = _scrollLeft;
  +      _headerRowScroller.scrollLeft = _scrollLeft;
  +    }
  +
  +    if (vScrollDist != null && vScrollDist != 0) {
         _vScrollDir = _prevScrollTop < _scrollTop ? 1 : -1;
         _prevScrollTop = _scrollTop;
   
  
positive.code:       }
      }
  
      if (hScrollDist != null || vScrollDist != null) {
        if (_h_render != null) {
          _h_render.cancel();
        }
  
negative.code:     _cleanupRows(rendered);
  
      // add new rows & missing cells in existing rows
      if (_lastRenderedScrollLeft != _scrollLeft) {
        _cleanUpAndRenderCells(rendered);
      }
  
  