             if (gridSelection)
                 gridSelection.columnsCollectionChanged(event);
             
-            // TBD: hover and caretIndex
-            
+            if (caretColumnIndex != -1)
+                updateCaretForColumnsChange(event);                
+            
+            if (gridDimensions && hoverColumnIndex != -1)
+                updateHoverForColumnsChange(event);	
+
             invalidateSize();
             invalidateDisplayList();        
         } 

                {
                    // All columns between the old and new locations need to 
                    // have their index updated.
                    index = Math.min(event.oldLocation, event.location);
                    var maxIndex:int = Math.max(event.oldLocation, event.location);
                    while (index <= maxIndex)
                    {
                        column = GridColumn(columns.getItemAt(index));
                        column.setColumnIndex(index);
                        index++;
                    }                
                    break;
                }
                    
                case CollectionEventKind.REPLACE:
                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++)
                    {
                        column = GridColumn(columns.getItemAt(index));
                        column.setColumnIndex(index);
                    }                
                    break;
                }

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