     private function wasCellPreviouslySelected(rowIndex:int, columnIndex:int):Boolean
     {
         if (dataGrid.isRowSelectionMode())
-            return (dataGrid.isCellSelectionMode() || previouslySelectedIndices.indexOf(rowIndex) >= 0);
-        else
-        {
-            // loop thru the previously selected cells to compare
-            for each (var cp:CellPosition in previouslySelectedCells)
-            {
-                if (cp.rowIndex == rowIndex &&
-                    cp.columnIndex == columnIndex)
-                    return true;
-            }
-        }
+            return dataGrid.selectionContainsIndex(rowIndex);
+        else if (dataGrid.isCellSelectionMode())
+            return dataGrid.selectionContainsCell(rowIndex, columnIndex);
         
         return false;
     }
 
+    /**
+     *  @private
+     *
+     *  Determine if a cell position is valid.
+     * 
+     *  @return true if valid, false otherwise.  
+     */
+    private function isValidCellPosition(rowIndex:int, cellIndex:int):Boolean
+    {
+        if (rowIndex >= 0 && rowIndex < dataGrid.dataProvider.length &&
+            cellIndex >= 0 && cellIndex < dataGrid.columns.length)
+        { 
+            return true;
+        }
+        
+        return false;
+    }
+    
     /**
      *  @private
      *  

        
        // this happens if the renderer is removed asynchronously ususally with FDS
        if (!itemEditorInstance)
            return true;
        
        inEndEdit = true;
        

        // remove listeners to disable cell editing   
        
        grid.removeEventListener(KeyboardEvent.KEY_DOWN, dataGrid_keyboardDownHandler);
        grid.removeEventListener(GridEvent.GRID_MOUSE_DOWN, grid_gridMouseDownHandler);
        grid.removeEventListener(GridEvent.GRID_MOUSE_UP, grid_gridMouseUpHandler);
        grid.removeEventListener(GridEvent.GRID_DOUBLE_CLICK, grid_gridDoubleClickHandler);
