             
             case CollectionEventKind.REFRESH:
             case CollectionEventKind.RESET:
-                initializeCaretPosition();
+                // maintain row position
+                caretColumnIndex = _columns && _columns.length > 0 ? 0 : -1; 
                 horizontalScrollPosition = 0;
-                verticalScrollPosition = 0;
                 break;
         }            
     }

        const oldCaretRowIndex:int = caretRowIndex;
        const location:int = event.location;
        var itemsLength:int;

        // this should stay in sync with updateCaretForColumnsChange
        switch (event.kind)
        {
            case CollectionEventKind.ADD:

                caretRowIndex = _dataProvider.length - 1;
            if (_columns && caretColumnIndex >= _columns.length)
                caretColumnIndex =  _columns.length - 1;

            caretSelectedItem = 
                _dataProvider && _caretRowIndex >= 0 ?
                _dataProvider.getItemAt(_caretRowIndex) : null;

            dispatchCaretChangeEvent();
            caretChanged = false;        
         }
    }
    
    /**
