                 }
                 else
                 {
+                    var oldOrNewValueSpecified:Boolean = updateInfo.oldValue != null || updateInfo.newValue != null;
+                    var objectReplacedInCollection:Boolean = updateInfo.property == null && oldOrNewValueSpecified;
                     updateEntry = {item: item, move: defaultMove, events: [updateInfo],
-                        entireObjectChanged: updateInfo.property == null, oldItem: updateInfo.property == null ? updateInfo.oldValue : null};
+                        objectReplacedWithAnother: objectReplacedInCollection, oldItem: updateInfo.oldValue};
                     updatedItems.push(updateEntry);
                 }
 

                //if the property affects the sort, we'll need to move
                updateEntry.move = updateEntry.move
                    || filterFunction != null
                    || updateEntry.entireObjectChanged
                    || (sort && sort.propertyAffectsSort(String(updateInfo.property)));
            }


                updateEntry = updatedItems[i];
                if (updateEntry.move)
                {
                    if(updateEntry.objectReplacedWithAnother)
                    {
                        removeItemsFromView([updateEntry.oldItem], -1, true);
                    }
