             case CollectionEventKind.REFRESH:
                 if (!(beforeFirst || afterLast))
                 {
-                    currentIndex = ListCollectionView(view).getItemIndex(currentValue);
+                    try 
+                    {
+                        currentIndex = ListCollectionView(view).getItemIndex(currentValue);
+                    }
+                    catch (e:SortError)
+                    {
+                        if (ListCollectionView(view).sort)
+                        {
+                            currentIndex = ListCollectionView(view).getLocalItemIndex(currentValue);
+                        }
+                    }
                     if (currentIndex == -1)
                     {
                         setCurrent(null);

            // and only then calling getItemAt.
            if (bm.index < 0 || bm.index >= length || getItemAt(bm.index) != bm.value)
            {
                bm.index = getItemIndex(bm.value);
            }

            bm.viewRevision = revision;

    }

    /**
     * @inheritDoc 
     */
    mx_internal function getLocalItemIndex(item:Object):int
    {
        var i:int;
        
        var len:int = localIndex.length;
        for (i = 0; i < len; i++)
        {
            if (localIndex[i] == item)
                return i;
        }

        return -1;
    }

    /**
     * @private
     */
    private function getFilteredItemIndex(item:Object):int
