         swapItemsAt(getItemIndex(item1), getItemIndex(item2));
     }
     
-    public function swapItemsAt(index1:*, index2:*):void
-    {
+    public function swapItemsAt(index1:int, index2:int):void
+    {
+    	// Make sure that index1 is the smaller index so that addItemAt 
+    	// doesn't RTE
+    	if (index1 > index2)
+    	{
+    		var temp:int = index2;
+    		index2 = index1;
+    		index1 = temp; 
+    	}
+    	else if (index1 == index2)
+    		return;
+    	
         var item1:* = getItemAt(index1);
         var item2:* = getItemAt(index2);
         

    
    [Bindable("propertyChange")]
    [Inspectable(category="General")]
    private var _actualFilters:Array;
    
    override public function set filters(value:Array):void
    {

        var child:DisplayObject;
        
        // TODO!! Don't add Group this way
        
        if (item is IGraphicElement && !alwaysUseItemRenderer) 
        {
        	// Hack for SDK-15738 to remove item if it is currently attached
        	var host:IGraphicElementHost = IGraphicElement(item).elementHost;
        	if (host && host is Group)
        		Group(host).removeItem(item);
        		 
            child = initElement(IGraphicElement(item), index);
        }   
        else
        {
        	// Hack for SDK-15738 to remove item if it is currently attached
        	var dispObj:DisplayObject = item as DisplayObject;
        	if (dispObj)
        	{
        		var dispObjParent:DisplayObjectContainer = dispObj.parent;
        		if (dispObjParent)
        		{
        			if (dispObjParent is Group)
        				Group(dispObjParent).removeItem(item);
        		} 
        	}
        	
            child = super.addChildAt(createVisualForItem(item), index);
        }
        
