 			return "[SignalSlot listener: "+_listener+", once: "+_isOnce+", priority: "+_priority+"]";
 		}
 
+		/**
+		 * @inheritDoc
+		 */
+		public function get paused():Boolean
+		{
+			return _paused;
+		}
+
+		public function set paused(value:Boolean):void
+		{
+			_paused = value;
+		}
+
+		/**
+		 * @inheritDoc
+		 */
 		public function pause():void
 		{
+			_paused = true;
 		}
 
+		/**
+		 * @inheritDoc
+		 */
 		public function resume():void
 		{
+			_paused = false;
 		}
 
+		/**
+		 * @inheritDoc
+		 */
 		public function swap(newListener:Function):void
 		{
+			if (null == newListener) throw new ArgumentError(
+					'Given listener is null.\nDid you want to call pause() instead?');
+
+			_listener = newListener;
 		}
 	}
 }
     * The SignalSlot class represents a signal slot.
     *
     * @author Robert Penner
     */
	internal final class SignalSlot implements ISignalSlot
	{
		//
		// Note: We define all properties as internal here so we
		// can access them without the overhead of an implicit getter.
		//

		/**
		 * The pseudo-private next SignalSlot in the pool of SignalSlot objects.
		 * @private
		 */
		internal var _nextInPool: SignalSlot;

		/**
		 * The pseudo-private signal variable.
		 * @private
		 */
		internal var _signal:ISignal;

		/**
		 * The listener associated with this slot.
		 * @private
		 */
		internal var _listener:Function;

		/**
		 * Whether or not this listener is only executed
		 * @private
		 */
		internal var _isOnce:Boolean;

		/**
		 * The priority of this slot.
		 * @private
		 */
		internal var _priority:int;

		 */
		public function execute(valueObjects:Array):void
		{
			if (!_paused)
			{
				if (_isOnce) _signal.remove(_listener);
				_listener.apply(null, valueObjects);
			}
		}

		/**
