                     eventItems.push(updateEntry.item);
                 }
             }
+
+			// now go through the updated items and add all events for all 
+			// properties that changed in that item (except for those items
+			// we moved
             var temp:Array = [];
             for (var ctr:int = 0; ctr < eventItems.length; ctr++)
                 for (var ctr1:int = 0; ctr1 < updatedItems.length; ctr1++)
                     if (eventItems[ctr] == updatedItems[ctr1].item)
-                        temp.push(updatedItems[ctr1].event);
+					{
+                        temp = temp.concat(updatedItems[ctr1].events);
+					}
             eventItems = temp;
         }
 

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

            eventItems = [];
            for (i = 0; i < updatedItems.length; i++)
            {

                var j:int = 0;
                for (; j < updatedItems.length; j++)
                {
					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)
