 
             return -1;
         }
-        else if (localIndex && filterFunction != null)
-        {
-            var len:int = localIndex.length;
-            for (i = 0; i < len; i++)
-            {
-                if (localIndex[i] == item)
-                    return i;
-            }
-
-            return -1;
-        }
+		else if (localIndex && sort)
+		{
+			var startIndex:int = findItem(item, Sort.FIRST_INDEX_MODE);
+			if (startIndex == -1)
+				return -1;
+			
+			var endIndex:int = findItem(item, Sort.LAST_INDEX_MODE);
+			for (i = startIndex; i <= endIndex; i++)
+			{
+				if (localIndex[i] == item)
+					return i;
+			}
+			
+			return -1;
+		}
 		// List is sorted or filtered but refresh has not been called
 		else if (localIndex)
 		{

                }
                localIndex = tmp;
            }
            if (sort)
            {
                sort.sort(localIndex);

            {
                var item:Object = items[i];
				
				if (filterFunction != null)
				{
					if (filterFunction(item))
					{
						loc = getFilteredItemIndex(item);
						if (firstOne)
						{
							addLocation = loc;
							firstOne = false;
						}
					}
					else
					{
						loc = -1;
					}
				}
				else if (sort)
                {
                    loc = findItem(item, Sort.ANY_INDEX_MODE, true);
                    if (firstOne)
                    {
                        addLocation = loc;
