     {
         const selectionIndicatorFactory:IFactory = grid.selectionIndicator;
         
+        if (!selectionIndicatorFactory)
+        {
+            clearSelectionIndicators();
+            return;
+        }
+        
         // layout and update visibleSelectionIndicators,Indices
                 
         if (isRowSelectionMode())
         {
             // Selection is row-based so if there are existing cell selections, 
             // free them since they can't be reused.
-            // TBD: this check won't work with column selections.
             if (visibleColumnSelectionIndices.length > 0)
-            {
-                freeGridElements(visibleSelectionIndicators);
-                visibleSelectionIndicators.length = 0;
-                visibleRowSelectionIndices.length = 0;
-                visibleColumnSelectionIndices.length = 0;
-            }
+                clearSelectionIndicators();
 
             var oldVisibleRowSelectionIndices:Vector.<int> = 
                 visibleRowSelectionIndices;

        layoutGridElementR(indicator, gridDimensions.getCellBounds(rowIndex, columnIndex));
    }    

    //--------------------------------------------------------------------------
    //
    //  Indicators: hover, caret

        
        freeItemRenderers(visibleItemRenderers);
        
        clearSelectionIndicators();
        
        freeGridElement(hoverIndicator)
        hoverIndicator = null;
