 			}
 		}
 		
-		protected function registerListener(listener:Function, priority:int):void
+		protected function registerListener(listener:Function, once:Boolean = false, priority:int = 0):void
 		{
 			// function.length is the number of arguments.
 			if (listener.length < _valueClasses.length)

			if (!listenerBoxes.length)
			{
				listenerBoxes[0] = listenerBox;
				return;
			}
			
			// Don't add the same listener twice.
			if (indexOfListener(listener) >= 0)
				return;
			
			// Assume the listeners are already sorted by priority
			// and insert in the right spot. For listeners with the same priority,

		//TODO: @throws
		public function add(listener:Function, priority:int = 0):void
		{
			registerListener(listener, false, priority);
		}
		
		/** @inheritDoc */
		public function addOnce(listener:Function, priority:int = 0):void
		{
			registerListener(listener, true, priority);
		}
		
		/** @inheritDoc */
