     
     /**
      *  @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.
      */

        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;
    }

            if (!hasRowSelection())
                selectionChanged = grid.setSelectedIndex(0);
        }
        else if (isCellSelectionMode())
        {
            if (!hasCellSelection())
                selectionChanged = grid.setSelectedCell(0, 0);
