                 var j:int = 0;
                 for (; j < updatedItems.length; j++)
                 {
-                     if (updatedItems[j].item == item)
+					if (updatedItems[j].item == item)
+					{
+						// even if it is, if a different property changed, track that too.
+						var events:Array = updatedItems[j].events;
+						var l:int = events.length;
+						for (var k:int = 0; k < l; k++)
+						{
+							if (events[k].property != updateInfo.property)
+							{
+								events.push(updateInfo);
+								break;
+							}
+							// we could also merge events for changes to the same
+							// property but that's hopefully low probability
+							// and leads to questions of event order.
+						}
                         break;
+					}
                 }
 
                 if (j < updatedItems.length)

                }
                else
                {
                    updateEntry = { item: item, move: defaultMove, event:updateInfo};
                    updatedItems.push(updateEntry);
                }


                    || (sort && sort.propertyAffectsSort(String(updateInfo.property)));
            }

			// go through the items and move and send move events for ones that moved
			// and build the list of remaining items we need to send UPDATE events for
            eventItems = [];
            for (i = 0; i < updatedItems.length; i++)
            {
