      */
     public function toArray():Array
     {
-        return (list) ? list.toArray() : [];
+        if (!list)
+            return [];
+        
+        const a:Array = new Array(list.length);
+        for(var i:int = 0; i < a.length; i++)
+            a[i] = getItemAt(i);
+        return a;
     }
     
  


    /**
     *  @private
     *  Delete the ListItemResponder at the specified index, if any.  
     *  This method assumes that the responder hasn't run yet, it sets
     *  the ListItemResponder index to -1 to prevent it from updating
     *  this AsyncListView later.
     */
    private function deletePendingResponder(index:int):void
    {
        if ((index < 0) || (index >= pendingResponders.length))
            return;

        const pendingResponder:ListItemResponder = pendingResponders[index];
        if (pendingResponder)
        {
            delete pendingResponders[index];
            ListItemResponder(pendingResponder).index = -1; 
        }
    }

    /**

     *  @playerversion AIR 1.1
     *  @productversion Flex 3
     */
    public function setItemAt(item:Object, index:int):Object
    {
        if (!list)
            return null;
        
        const pendingResponder:ListItemResponder = pendingResponders[index];
        const setItemValue:Object = list.setItemAt(item, index);
        return (pendingResponder) ? pendingResponder.item : setItemValue;
    }
    
    /**
     *  Returns an array with the same elements as this AsyncListView.  The array is initialized
     *  by retrieving each item with getItemAt(), so pending items will be substituted where actual
     *  values aren't available yet.   The array will not be updated when the ASyncList replaces
     *  the pending items with actual (or failed) values.
     *  
     *  @langversion 3.0
     *  @playerversion Flash 9
