 			if (eventClass && !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 (indexOfListener(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;

		}
		
		
		private function createListenerRelationship(listener:Function, priority:int):void
		{
			var listenerBox:Object = { listener:listener, priority:priority };
			// Process the first listener as quickly as possible.

			if (eventClass && !listener.length)
				throw new ArgumentError('Listener must declare at least 1 argument when eventClass is specified.');
			
			if (onceListeners[listener])
				throw new AmbiguousRelationshipError('You cannot addOnce() then add() the same listener without removing the relationship first.');
		
			createListenerRelationship(listener, priority);
		}
