         {
             pos = itemRendererToIndices(r);
 
-            if (pos && pos.y >= 0 && displayableColumns[pos.x].editable && !dontEdit)
-            {
-                advancedDataGridEvent = new AdvancedDataGridEvent(AdvancedDataGridEvent.ITEM_EDIT_BEGINNING, false, true);
-                // ITEM_EDIT events are cancelable
-                advancedDataGridEvent.columnIndex = displayableColumns[pos.x].colNum;
-                advancedDataGridEvent.dataField = displayableColumns[pos.x].dataField;
-                advancedDataGridEvent.rowIndex = pos.y;
-                advancedDataGridEvent.itemRenderer = r;
-                dispatchEvent(advancedDataGridEvent);
+            if (pos && pos.y >= 0 && !dontEdit)
+            {
+				if (displayableColumns[pos.x].editable)
+				{
+	                advancedDataGridEvent = new AdvancedDataGridEvent(AdvancedDataGridEvent.ITEM_EDIT_BEGINNING, false, true);
+	                // ITEM_EDIT events are cancelable
+	                advancedDataGridEvent.columnIndex = displayableColumns[pos.x].colNum;
+	                advancedDataGridEvent.dataField = displayableColumns[pos.x].dataField;
+	                advancedDataGridEvent.rowIndex = pos.y;
+	                advancedDataGridEvent.itemRenderer = r;
+	                dispatchEvent(advancedDataGridEvent);
+				}
+				else
+				{
+					// if the item is not editable, set lastPosition to it anyways
+					// so future tabbing starts from there
+					lastEditedItemPosition = { columnIndex: displayableColumns[pos.x].colNum, rowIndex: pos.y };
+				}
             }
         }
         else if (lastItemDown && lastItemDown != itemEditorInstance)

        var oldVerticalScrollBar:Object = verticalScrollBar;

        var rowCount:int = listItems.length;
        if (rowCount + headerItems.length== 0)////TODO
        {
            // Get rid of any existing scrollbars.
            if (oldHorizontalScrollBar || oldVerticalScrollBar)


            // start somewhere
            if (!_editedItemPosition)
                _editedItemPosition = { rowIndex: 0, columnIndex: 0 };

            for (;
                 _editedItemPosition.columnIndex != _columns.length;
                 _editedItemPosition.columnIndex++)
	            {
	                // If the editedItemPosition is valid, focus it,
	                // otherwise find one.
	                if (_columns[_editedItemPosition.columnIndex].editable &&
	                    _columns[_editedItemPosition.columnIndex].visible)
	                {
	                    var row:Array = listItems[_editedItemPosition.rowIndex];
	                    if (row && row[_editedItemPosition.columnIndex])
	                    {
	                        foundOne = true;
	                        break;
	                    }
	                }
	            }

            if (foundOne)
            {
