 		//TODO: @throws
 		public function add(listener:Function, priority:int = 0):void
 		{
-			if (listener.length != 1)
-				throw new ArgumentError('Listener for native event must declare exactly 1 argument.');
-				
-			if (onetimeListenerRelationshipExists(listener))
-				throw new AmbiguousRelationshipError('You cannot add a listener then addOnce the same listener without removing the relationship first.');
+			if (onceListeners[listener])
+				throw new AmbiguousRelationshipError('You cannot addOnce() then add() the same listener without removing the relationship first.');
 		
 			createListenerRelationship(listener, priority);
 		}

				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];
		}
	}
}

		}
		
		
		protected function createListenerRelationship(listener:Function, priority:int):void
		{
			// function.length is the number of arguments.
			if (listener.length != 1)
				throw new ArgumentError('Listener for native event must declare exactly 1 argument.');
				
			// Don't add same listener twice.
			if (listeners.indexOf(listener) >= 0)
				return;
