 		/** @inheritDoc */
 		public function addOnce(listener:Function, priority:int = 0):void
 		{
-			// function.length is the number of arguments.
-			if (!listener.length)
-				throw new ArgumentError('Listener must declare at least 1 argument when eventClass is specified.');
-			
-			if (permanentListenerRelationshipExists(listener))
-				throw new AmbiguousRelationshipError('You cannot addOnce a listener then adds the same listener without removing the relationship first.');
+			if (listeners.indexOf(listener) >= 0 && !onceListeners[listener])
+				throw new AmbiguousRelationshipError('You cannot add() then addOnce() the same listener without removing the relationship first.');
 			
 			createListenerRelationship(listener, priority);
 			onceListeners[listener] = true;

				remove(onceListener as Function);
			}
		}
		
		private function permanentListenerRelationshipExists(listener:Function):Boolean
		{
			if (listeners.indexOf(listener) == -1)
				return false;
			
			return !onceListeners[listener];
		}

		
		private function onetimeListenerRelationshipExists(listener:Function):Boolean
		{
			if (listeners.indexOf(listener) == -1)
				return false;
			
			return onceListeners[listener];
		}
	}
}

		//TODO: @throws
		public function add(listener:Function, priority:int = 0):void
		{
			if (onceListeners[listener])
				throw new AmbiguousRelationshipError('You cannot addOnce() then add() the same listener without removing the relationship first.');
		
			createListenerRelationship(listener, priority);
		}
