 		public function dispatch(... args):void
 		{
 			if(!callbacks) return;
-			const snapshot:Vector.<Function> = callbacks.concat();
+			
+			if(callbacksInUse)
+			{
+				callbacks = callbacks.slice();
+			}
+			else
+			{
+				callbacksInUse = true;
+			}
+			
+			const snapshot:Vector.<Function> = callbacks;
 			const numCallbacks:int = snapshot.length;
 			
 			var i:int;

	{
		private var callbacks:Vector.<Function>;
		
		
		
		/**

			if(!callbacks) return false;
			const index:int = callbacks.indexOf(callback);
			if(index < 0) return false; 

			if(callbacksInUse)
			{
				callbacks = callbacks.slice();
				callbacksInUse = false;
			}
				
			callbacks.splice(index, 1);
			return true;
		}
