         else if (selectionMode == GridSelectionMode.SINGLE_CELL)
         {
             // Can't extend the selection so move it to the caret position.
-            changed = commitInteractiveSelection(
+            success = commitInteractiveSelection(
                 GridSelectionEventKind.SET_CELL, 
                 caretRowIndex, caretColumnIndex, 1, 1);                
         }
         
         // Update the caret.
-        commitCaretPosition(caretRowIndex, caretColumnIndex);
-        
-        return changed;
+        if (success)
+            commitCaretPosition(caretRowIndex, caretColumnIndex);
+        
+        return success;
     }
     
     /**

    {
        // click sets the selection and updates the caret and anchor 
        // positions.
        var changed:Boolean;
        if (isRowSelectionMode())
        {
            // Select the row.
            changed = commitInteractiveSelection(
                GridSelectionEventKind.SET_ROW, 
                rowIndex, columnIndex);
        }
        else if (isCellSelectionMode())
        {
            // Select the cell.
            changed = commitInteractiveSelection(
                GridSelectionEventKind.SET_CELL, 
                rowIndex, columnIndex);
        }
        
        // Update the caret and anchor positions even if the selection did not
        // change.
        commitCaretPosition(rowIndex, columnIndex);
        grid.anchorRowIndex = rowIndex;
        grid.anchorColumnIndex = columnIndex; 
        
        return changed;
    }
    
    /**

                Math.max(grid.anchorColumnIndex, caretColumnIndex); 
            const columnCount:int = endColumnIndex - startColumnIndex + 1;
            
            success = commitInteractiveSelection(
                GridSelectionEventKind.SET_CELL_REGION, 
                startRowIndex, startColumnIndex,
                rowCount, columnCount);
