 		public function DeluxeSignal(target:Object = null, ...valueClasses)
 		{
 			_target = target;
-			slots = [];
-			// Cannot use super.apply(null, valueClasses), so allow the subclass to call super(valueClasses).
-			if (valueClasses.length == 1 && valueClasses[0] is Array)
-				valueClasses = valueClasses[0];
-			this.valueClasses = valueClasses;
-		}
-		
-		/** @inheritDoc */
-		[ArrayElementType("Class")]
-		public function get valueClasses():Array { return _valueClasses; }
-
-		/** @inheritDoc */
-		public function set valueClasses(value:Array):void
-		{
-			// Clone so the Array cannot be affected from outside.
-			_valueClasses = value ? value.slice() : [];
-			for (var i:int = _valueClasses.length; i--; )
-			{
-				if (!(_valueClasses[i] is Class))
-				{
-					throw new ArgumentError('Invalid valueClasses argument: item at index ' + i
-						+ ' should be a Class but was:<' + _valueClasses[i] + '>.');
-				}
-			}
-		}
-		
-		/** @inheritDoc */
-		public function get numListeners():uint { return slots.length; }
-		
+			super(valueClasses);
+		}
+		
+		/** @inheritDoc */
 		/** @inheritDoc */
 		public function get target():Object { return _target; }
 		

			_target = value;
		}
		
		/** @inheritDoc */
		//TODO: @throws
		public function add(listener:Function):Function
		{
			return addWithPriority(listener)
		}
		
		public function addWithPriority(listener:Function, priority:int = 0):Function
		{
			registerListener(listener, false, priority);
			return listener;
		}
		
		public function addOnce(listener:Function):Function
		{
			return addOnceWithPriority(listener)
		}

		/** @inheritDoc */
		public function addOnceWithPriority(listener:Function, priority:int = 0):Function
		{
			registerListenerWithPriority(listener, true, priority);
			return listener;
		}
		
		/** @inheritDoc */
		override public function dispatch(...valueObjects):void
		{
			// Validate value objects against pre-defined value classes.
			var valueObject:Object;
