         if (bEditedItemPositionChanged)
         {
             bEditedItemPositionChanged = false;
-            commitEditedItemPosition(_proposedEditedItemPosition);
+			// don't do this if mouse is down on an item
+			// on mouse up, we'll let the edit session logic
+			// request a new position
+			if (!lastItemDown)
+            	commitEditedItemPosition(_proposedEditedItemPosition);
             _proposedEditedItemPosition = undefined;
             itemsSizeChanged = false;
         }

        {
            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);
            }
        }
        else if (lastItemDown && lastItemDown != itemEditorInstance)


            // 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)
            {
