 				{
 					if (filterFunction(item))
 					{
-						loc = getFilteredItemIndex(item);
+						if (sort)
+							loc = findItem(item, Sort.ANY_INDEX_MODE, true);
+						else 
+							loc = getFilteredItemIndex(item);
+						
 						if (firstOne)
 						{
 							addLocation = loc;

			else 
				listIndex = list.getItemIndex(localIndex[index]);
		}
		else if (localIndex && sort)
        {
            listIndex = list.length;
        }
		// List is sorted or filtered but refresh has not been called
		// Just add to end of list
		else if (localIndex)


        var listIndex:int = index;
		
		// if we're sorted addItemAt is meaningless, just add to the end
		if (localIndex && sort)
        {
            listIndex = list.length;
        }
		else if (localIndex && filterFunction != null)
		{
			// if end of filtered list, put at end of source list
			if (listIndex == localIndex.length)
