             result = findAfter(index, _head);
         }
         
-        recentNode = result;
+        if (result)
+            recentNode = result;
         
         return result;
     }

        }
        
        // Uses last searched node if its closest to the target.
        if (recentNode && temp < lastToIndex && temp < index)
        {
            if (indexToRecent > 0)
                result = findBefore(index, recentNode);

            return null;
        
        var indexToRecent:int;
        var temp:int;
        var lastToIndex:int = _tail.rowIndex - index;
        var result:GridRowNode = null;
        
        if (recentNode)
        {
            if (recentNode.rowIndex == index)
                return recentNode;
            
            indexToRecent = recentNode.rowIndex - index;
            temp = Math.abs(indexToRecent);
        }
        
        if (index < _head.rowIndex)
        {
            result = null;
        }
        // Uses last searched node if its closest to the target.
        else if (lastToIndex < 0)
        {
            result = _tail;
        }
        else if (recentNode && temp < lastToIndex && temp < index)
        {
            if (indexToRecent > 0)
                result = findNearestBefore(index, recentNode);
            else
                result = findNearestAfter(index, recentNode);
        }
        else if (lastToIndex < index)
        {
            result = findNearestBefore(index, _tail);
