             {
                 return true;
             }
-            
+
             // Last event was Shift+TAB
-            if (lastEvent.type == KeyboardEvent.KEY_DOWN && 
+            if (lastEvent.type == KeyboardEvent.KEY_DOWN &&
                 KeyboardEvent(lastEvent).keyCode == Keyboard.TAB &&
                 KeyboardEvent(lastEvent).shiftKey)
             {
                 return true;
             }
         }
-        
+
         return false;
     }
-    
-    /**
-     *  @private
-     * 
+
+    /**
+     *  @private
+     *
      *  Start editing a cell for a specified row and column index.
-     *  
+     *
      *  Dispatches a <code>GridItemEditorEvent.GRID_ITEM_EDITOR_SESSION_STARTING
-     *  </code> event. 
-     * 
+     *  </code> event.
+     *
      *  @param rowIndex The zero-based row index of the cell to edit.
-     * 
+     *
      *  @param columnIndex The zero-based column index of the cell to edit.
      */
     public function startItemEditorSession(rowIndex:int, columnIndex:int):Boolean
     {
-        
+
         // validate row and column index
         if (!isValidCellPosition(rowIndex, columnIndex))
             return false;
-            
+
         dataGrid.addEventListener(GridItemEditorEvent.GRID_ITEM_EDITOR_SESSION_STARTING,
                                   dataGrid_gridItemEditorSessionStartingHandler,
                                   false, EventPriority.DEFAULT_HANDLER);
-        
+
         var column:GridColumn = grid.columns.getItemAt(columnIndex) as GridColumn;
-        
+
         if (!column || !column.visible)
             return false;
-        
+
         // The START_GRID_ITEM_EDITOR_SESSION event is cancelable
         var dataGridEvent:GridItemEditorEvent = new GridItemEditorEvent(
-                                                        GridItemEditorEvent.GRID_ITEM_EDITOR_SESSION_STARTING, 
-                                                        false, true); 
+                                                        GridItemEditorEvent.GRID_ITEM_EDITOR_SESSION_STARTING,
+                                                        false, true);
         dataGridEvent.rowIndex = Math.min(rowIndex, grid.dataProvider.length - 1);
         dataGridEvent.columnIndex = Math.min(columnIndex, grid.columns.length - 1);
         dataGridEvent.column = column;

     *  @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
     *  
     *  Add a FlexEvent.ENTER listener to all child IVisualElements.
     * 
     *  @param element add listener to element and its children.
     *  @param addListener if true add a listener, otherwise remove a listener.
     */

            var o:DisplayObject = item as DisplayObject;
            var firstComponent:DisplayObject = null;
            var found:Boolean = false;

            // find the first component to take focus inside the renderer.
            do
            {
                fm.fauxFocus = o;
                o = fm.getNextFocusManagerComponent(false) as DisplayObject;
                if (o == item ||
                    item is DisplayObjectContainer &&
                    DisplayObjectContainer(item).contains(o))
                {
                    found = true;
