             });
         }
 
-        public function broadcastMessage():void {
+        public function broadcastMessage(recallCount:int=0):void {
             if (_messageQueue.length == 0) { return; }
 
             var processingMsgs:Vector.<Object> = _messageQueue.slice(); // copy vector

                publisher.publish(eventArgs);
            }

            // ToDo: for の中で Message 投げられてたら再帰
        }
    }
}

    //------------------------------------------------------------
    public class NotificationService {

        public static var MAX_LOOP_COUNT:int = 8;

        private var _publishers:Dictionary = new Dictionary();
        private var _listenerCount:int = 0;
        private var _messageQueue:Vector.<Object> = new Vector.<Object>();

        //------------------------------------------------------------
        public function NotificationService() {}

        public function addListener(listener:KrewGameObject,
                                    eventType:String, callback:Function):void {
