 		}
 		
 		/** @inheritDoc */
-		public function get numListeners():uint { return listeners.length; }
+		public function get numListeners():uint { return slots.length; }
 		
 		/** @inheritDoc */
 		//TODO: @throws

	public class Signal implements ISignalOwner, IDispatcher
	{
		protected var _valueClasses:Array;		// of Class
		protected var listeners:Array;			// of Function
		protected var onceListeners:Dictionary;	// of Function
		protected var listenersNeedCloning:Boolean = false;
		
		/**
		 * Creates a Signal instance to dispatch value objects.

					+ '> is not an instance of <' + valueClass + '>.');
			}

			//// Call listeners.
			if (slots.length)
			{
				// During a dispatch, add() and remove() should clone listeners array instead of modifying it.
				slotsNeedCloning = true;
				var slot:Slot;
				switch (valueObjects.length)
				{
					case 0:
						for each (slot in slots)
						{
							slot.execute0();
						}
						break;
						
					case 1:
						const singleValue:Object = valueObjects[0];
						for each (slot in slots)
						{
							slot.execute1(singleValue);
						}
						break;
						
					case 2:
						const value1:Object = valueObjects[0];
						const value2:Object = valueObjects[1];
						for each (slot in slots)
						{
							slot.execute2(value1, value2);
						}
						break;
						
					default:
						for each (slot in slots)
						{
							slot.execute(valueObjects);
						}
				}
				slotsNeedCloning = false;
			}
		}
		
		protected function indexOfListener(listener:Function):int
		{
			for (var i:int = slots.length; i--; )
			{
				if (Slot(slots[i]).listener == listener) return i;
			}
			return -1;
		}
		
		protected function registerListener(listener:Function, once:Boolean = false):void
