      */
     public function set caretRowIndex(value:int):void
     {
-        _oldCaretRowIndex = _caretRowIndex;
-
         if (_caretRowIndex == value || value < -1)
             return;
         
+        _oldCaretRowIndex = _caretRowIndex;        
         _caretRowIndex = value;
         
         caretChanged = true;

        {
            // Validate values now.  Need to let caret be set in the same
            // update as the dp and/or columns.  -1 is a valid value.
            if (_dataProvider && caretRowIndex >= _dataProvider.length)
                caretRowIndex = _dataProvider.length - 1;
            if (_columns && caretColumnIndex >= _columns.length)
                caretColumnIndex =  _columns.length - 1;

            caretSelectedItem = 
                _dataProvider && _caretRowIndex >= 0 ?

            case CollectionEventKind.MOVE:
                {
                    const oldLocation:int = event.oldLocation;
                    if ((oldCaretRowIndex >= oldLocation) && (oldCaretRowIndex < (oldLocation + itemsLength)))
                        caretRowIndex += location - oldLocation;
                }
