                 
         var elementChanged:Boolean;
         
+        const bounds:Rectangle = this.getCellRegionsBounds();
+       
         const firstRemoveIndex:int = event.location;
         const lastRemoveIndex:int = event.location + event.items.length - 1;
                     
-        var bounds:Rectangle = getCellRegionsBounds();
-        
-        const firstIndex:int = bounds.top;
-        const lastIndex:int = bounds.bottom;
-        
-        for (var rowIndex:int = firstIndex; rowIndex < lastIndex; rowIndex++)
-        {
-            for (var columnIndex:int = firstRemoveIndex; 
-                 columnIndex <= lastRemoveIndex; columnIndex++)
-            {
-                if (containsCell(rowIndex, columnIndex))
-                {
-                    removeCellRegion(rowIndex, columnIndex, 1, 1);
+        for (var columnIndex:int = firstRemoveIndex; columnIndex < bounds.right; 
+            columnIndex++)
+        {
+            if (columnIndex <= lastRemoveIndex)
+            {
+                if (removeCellsInColumn(columnIndex, bounds))
                     elementChanged = true;
-                }
-            }
-        }
-            
-        if (elementChanged && requireSelection)
-        {        
-            var dataProviderLength:int = getGridDataProviderLength();
-            if (dataProviderLength > 0 && selectionLength == 0)
-            {
-                rowIndex = firstRemoveIndex <= dataProviderLength - 1 ? 
-                           firstRemoveIndex : dataProviderLength - 1;
-                setCell(rowIndex, 0);
-            }
-        }            
-
+            }
+            else
+            {
+                if (moveCellsInColumn(columnIndex, columnIndex - 1, bounds))               
+                    elementChanged = true;
+            }
+        }
+       
+        if (elementChanged)
+            ensureRequiredSelection();
+        
         return elementChanged;
     }
     

        else if (cellRegions.length)
            elementChanged = adjustCellsAfterRemove(firstRemoveIndex, lastRemoveIndex);
        
        // If a selection is required and there isn't one after the deletion,
        // select the item that took the place of the first item that was
        // deleted, except if the last item was deleted, select the new last
        // item.
        
        if (elementChanged && requireSelection)
        {        
            var dataProviderLength:int = getGridDataProviderLength();
            if (dataProviderLength > 0)
            {
                const rowIndex:int = firstRemoveIndex <= dataProviderLength - 1 ? 
                                     firstRemoveIndex : dataProviderLength - 1;
                if (isRowSelectionMode() && !hasRowSelection())
                        setRow(rowIndex);
                else if (isCellSelectionMode() && !hasCellSelection())
                        setCell(rowIndex, 0);
                }
            }

        return elementChanged;
    }

    
    /**
     *  @private
     *  Move all the selected cells in column oldColumnIndex to newColumnIndex.
     *  No other adjustments are made to the selection.
     */
    private function moveCellsInColumn(oldColumnIndex:int, newColumnIndex:int, 
                                       bounds:Rectangle=null):Boolean
    {
        var elementChanged:Boolean;
        
        if (bounds == null)
            bounds = getCellRegionsBounds();
        
        const firstIndex:int = bounds.top;
        const lastIndex:int = bounds.bottom;
        
        for (var rowIndex:int = firstIndex; rowIndex < lastIndex; rowIndex++)
        {
            // ToDo: if group contigous cells together into a cell region.
            if (containsCell(rowIndex, oldColumnIndex))
            {
                removeCellRegion(rowIndex, oldColumnIndex, 1, 1);
                addCellRegion(rowIndex, newColumnIndex, 1, 1);
                elementChanged = true;
            }
        }
                
        return elementChanged;
    }

    /**
     *  @private
     *  Remove all the selected cells in row rowIndex.  No other adjustments to
     *  the selection are made.
     */
