                 {
                     // All columns between the old and new locations need to 
                     // have their index updated.
-                    index = Math.min(event.oldLocation, event.location);
+                    columnIndex = Math.min(event.oldLocation, event.location);
                     var maxIndex:int = Math.max(event.oldLocation, event.location);
-                    while (index <= maxIndex)
+                    while (columnIndex <= maxIndex)
                     {
-                        column = GridColumn(columns.getItemAt(index));
-                        column.setColumnIndex(index);
-                        index++;
+                        column = GridColumn(columns.getItemAt(columnIndex));
+                        column.setColumnIndex(columnIndex);
+                        columnIndex++;
                     }                
                     break;
                 }
                     
                 case CollectionEventKind.REPLACE:
+                {
+                    var items:Array = event.items;                   
+                    var length:int = items.length;
+                    for (i = 0; i < length; i++)
+                    {
+                        if (items[i].oldValue is GridColumn)
+                        {
+                            column = GridColumn(items[i].oldValue);
+                            column.setGrid(null);
+                            column.setColumnIndex(-1);
+                        }
+                        if (items[i].newValue is GridColumn)
+                        {
+                            column = GridColumn(items[i].newValue);
+                            column.setGrid(this);
+                            column.setColumnIndex(columnIndex);
+                        }
+                    }
+                    break;
+                }
+                    
                 case CollectionEventKind.UPDATE:
                 {
-                    column = GridColumn(columns.getItemAt(index));
-                    column.setGrid(this);
-                    column.setColumnIndex(index);
                     break;
                 }
                     
                 case CollectionEventKind.REFRESH:
                 {
-                    for (index = 0; index < columns.length; index++)
+                    for (columnIndex = 0; columnIndex < columns.length; columnIndex++)
                     {
-                        column = GridColumn(columns.getItemAt(index));
-                        column.setColumnIndex(index);
+                        column = GridColumn(columns.getItemAt(columnIndex));
+                        column.setColumnIndex(columnIndex);
                     }                
                     break;
                 }

                    // Note: multiple columns may be removed.
                    var count:int = event.items.length;
                    
                    for (var i:int = 0; i < count; i++)
                    {
                        column = GridColumn(event.items[i]);
                        column.setGrid(null);

                    if (oldHoverRowIndex >= location)
                        hoverRowIndex = gridDimensions.getRowIndexAt(mouseX, mouseY);
                    break;
                               
                case CollectionEventKind.REFRESH:
                case CollectionEventKind.RESET:
                    hoverRowIndex = gridDimensions.getRowIndexAt(mouseX, mouseY);
                    break;
            }                        
        }
        
        /**
         *  @private
         *  Update hoverColumnIndex if necessary.  This method should only be called when 
         *  hoverColumnIndex is valid, i.e. != -1.
         */
        private function updateHoverForColumnsChange(event:CollectionEvent):void
        {
            switch (event.kind)
            {
                case CollectionEventKind.ADD:
                case CollectionEventKind.REMOVE:
                case CollectionEventKind.REPLACE:
                case CollectionEventKind.UPDATE:
                case CollectionEventKind.MOVE:
                    if (hoverColumnIndex >= event.location)
                        hoverColumnIndex = gridDimensions.getColumnIndexAt(mouseX, mouseY);
                    break;
                                
                case CollectionEventKind.REFRESH:
                case CollectionEventKind.RESET:
                    hoverColumnIndex = gridDimensions.getColumnIndexAt(mouseX, mouseY);
                    break;
            }                        
        }

        /**
         *  @private
         */
