             if (itemEditorInstance)
                 return;
             
-            // Edit the last column edited. If now last column then try to 
+            // Edit the last column edited. If no last column then try to 
             // edit the first column.
             var nextCell:Point = null;
             if (dataGrid.isRowSelectionMode())
             {
                 var lastColumn:int = lastEditedItemPosition ? lastEditedItemPosition.columnIndex : 0;
-                nextCell = getNextEditableCell(dataGrid.grid.caretRowIndex, 
-                    lastColumn - 1,
-                    false);
+                openEditorInNextEditableCell(dataGrid.grid.caretRowIndex, 
+                                                        lastColumn - 1,
+                                                        false);
+                return;
             }
             else
             {
-                nextCell = new Point(grid.caretRowIndex, grid.caretColumnIndex); 
+                startItemEditorSession(grid.caretRowIndex, grid.caretColumnIndex);                
             }
-            
-            if (nextCell)
-                startItemEditorSession(nextCell.x, nextCell.y);
         }            
     }
     

     */
    private function grid_gridMouseUpHandler(event:GridEvent):void
    {
        if (!dataGrid.editable)
            return;

        lastEvent = event;
        
        const eventRowIndex:int = event.rowIndex; //gridDimensions.getRowIndexAt(eventGridXY.x, eventGridXY.y);
        const eventColumnIndex:int = event.columnIndex; //gridDimensions.getColumnIndexAt(eventGridXY.x, eventGridXY.y);
        
        // Only start an edit if the row is the only selected row.
        // Only start editing when one row is selected.

            {
                if (grid.columns.getItemAt(columnIndex).editable)
                {
                    // Check if clicking again on the same item
                    if (doubleClickTimer)
                    {
                        if (rowIndex == lastItemClickedPosition.rowIndex &&
                            columnIndex == lastItemClickedPosition.columnIndex)
                        {
                            // click on the same item again and we already have a timer
                            // do, wait on the timer
                            lastItemDown == null;
                            return;
                        }
                        else 
                        {
                            // click on a different item. Stop the timer and start a new one
                            doubleClickTimer.stop();
                            doubleClickTimer = null;
                        }
                    }
                    
                    lastItemClickedPosition = { columnIndex: columnIndex, rowIndex: rowIndex};
                    
                    // start timer to make sure a double click does not cancel the edit.
                    if (dataGrid.editOnDoubleClick || 
                        InteractiveObject(lastItemDown).doubleClickEnabled == false)
                    {
                        // we don't need to wait on the time since editting double click is ok.
                        startItemEditorSession(rowIndex, columnIndex);
                    }
                    else 
                    {
                        doubleClickTimer = new Timer(dataGrid.doubleClickTime, 1);
                        doubleClickTimer.addEventListener(TimerEvent.TIMER, doubleClickTimerHandler);
                        doubleClickTimer.start();                        
                    }
                }
                else
                    // if the item is not editable, set lastPosition to it anyways
