             else
                 insertIndex = index;
                 
-            super.setChildIndex(child, insertIndex);
+            // Quietly ignore invalid indices since they're typically caused
+            // by duplicate data items and Halo quietly ignore those
+            if ((insertIndex > 0) && (insertIndex < super.numChildren)) 
+                super.setChildIndex(child, insertIndex);
+
             return child;
         }
         else if (child.parent && child.parent is DataGroup)

        setTypicalLayoutElement(obj);
        super.removeChild(obj);
    }    

    //----------------------------------
    //  layout

                super.removeChild(DisplayObject(elt));
            }
        }
    }
    
    /**
     *  @private
     *  During virtual layout getLayoutElementAt() eagerly validates lazily
     *  created (or recycled) IRs.   We don't want changes to those IRs to
     *  invalidate the size of this UIComponent.
     */
    override public function invalidateSize():void
    {
        if (!virtualLayoutUnderway)
            super.invalidateSize();
    }
    
    
    /**
     *  @private 
     *  Make sure there's a typicalLayoutElement for virtual layout.
     */
    override protected function measure():void
    {
        if (layout && layout.virtualLayout)
            ensureTypicalLayoutElement();
        super.measure();
    }

    /**
     *  @private
     *  Manages the state required by virtual layout. 
     */
    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        if (layout && layout.virtualLayout)
        {
            virtualLayoutUnderway = true;
            virtualLayoutStartIndex = -1;
            ensureTypicalLayoutElement();
        }
        
        super.updateDisplayList(unscaledWidth, unscaledHeight);

        if (virtualLayoutUnderway)
        {
            finishVirtualLayout();
            virtualLayoutUnderway = false;
        }
    }    
    
    /**
     *  @private
