     {
         // click sets the selection and updates the caret and anchor 
         // positions.
-        var changed:Boolean;
+        var success:Boolean;
         if (isRowSelectionMode())
         {
             // Select the row.
-            changed = commitInteractiveSelection(
+            success = commitInteractiveSelection(
                 GridSelectionEventKind.SET_ROW, 
                 rowIndex, columnIndex);
         }
         else if (isCellSelectionMode())
         {
             // Select the cell.
-            changed = commitInteractiveSelection(
+            success = 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;
+        // Update the caret and anchor positions unless cancelled.
+        if (success)
+        {
+            commitCaretPosition(rowIndex, columnIndex);
+            grid.anchorRowIndex = rowIndex;
+            grid.anchorColumnIndex = columnIndex; 
+        }    
+
+        return success;
     }
     
     /**

     *  the 0-based row indices of the rows in the selection.  The default is 
     *  null to indicate this parameter is not being used.
     * 
     *  @return <code>true</code> if the selection was committed, or <code>false</code> 
     *  if the selection was canceled or could not be committed due to an error, such as
     *  index out of range or the <code>selectionEventKind</code> is not compatible 
     *  with the <code>selectionMode</code>.
     * 
     *  @see spark.events.GridSelectionEvent#SELECTION_CHANGE
     *  @see spark.events.GridSelectionEvent#SELECTION_CHANGING

        // Step 1: determine if the selection will change if the operation.
        // is committed.  
        if (!doesChangeCurrentSelection(selectionEventKind, selectionChange))
            return true;
        
        // Step 2: dispatch the "changing" event. If preventDefault() is called
        // on this event, the selection change will be cancelled.        
