     {
         delete pendingResponders[index];
 
-        var item:Object = null;
-        if (createFailedItemFunction !== null)
-        {
-            item = createFailedItemFunction(index, info);
-            list.setItemAt(item, index); 
-        }
+        if (createFailedItemFunction === null)
+            return;
+        
+        const item:Object = createFailedItemFunction(index, info);
+        failedItems[index] = item;
+            
+        // dispatch collection and property change events
+        
+        const hasCollectionListener:Boolean = hasEventListener(CollectionEvent.COLLECTION_CHANGE);
+        const hasPropertyListener:Boolean = hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE);
+        var pce:PropertyChangeEvent; 
+                
+        if (hasCollectionListener || hasPropertyListener)
+        {
+            pce = new PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
+            pce.kind = PropertyChangeEventKind.UPDATE;
+            pce.oldValue = null;
+            pce.newValue = item;
+            pce.property = index;
+        }
+                
+        if (hasCollectionListener)
+        {
+            var ce:CollectionEvent = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
+            ce.kind = CollectionEventKind.REPLACE;
+            ce.location = index;
+            ce.items.push(pce);
+            dispatchEvent(ce);
+        }
+                
+        if (hasPropertyListener)
+            dispatchEvent(pce);
     }
             
     

     */
    public function getItemIndex(item:Object):int
    {
        for each (var responder:ListItemResponder in pendingResponders)
            if (responder && responder.item === item)
                return responder.index;

     *  Handler for a CollectionEventKind.ADD.  The event indicates 
     *  that a block of ce.items.length items starting at ce.location was inserted,
     *  which implies that all of the pendingResponders whose index is greater than or
     *  equal to ce.location, must be shifted right by ce.items.length.  The failedItems
     *  array is handled similarly.
     */
    private function shiftPendingRespondersRight(ce:CollectionEvent):void
    {
