 	/**
 	 *  Request to add an event listener.
 	 */
-	public static const ADD:String = "mx.managers.SystemManager.addEventListener";
+	public static const ADD:String =
+        "mx.managers.SystemManager.addEventListener";
 
 	/**
 	 *  Request to remove an event listener.
 	 */
-	public static const REMOVE:String = "mx.managers.SystemManager.removeEventListener";
+	public static const REMOVE:String =
+        "mx.managers.SystemManager.removeEventListener";
+
+
+	//--------------------------------------------------------------------------
+	//
+	//  Class methods
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  Marshals an event by copying the relevant parameters
+     *  from the event into a new event
+	 */
+	public static function marshal(event:Event):Event
+	{
+		var eventObj:Object = event;
+
+		return new EventListenerRequest(eventObj.type, eventObj.userType,
+                                        eventObj.useCapture, eventObj.priority,
+                                        eventObj.useWeakReference); 
+	}
 
 	//--------------------------------------------------------------------------
 	//

	//--------------------------------------------------------------------------

	/**
	 *  Create a new request to add or remove an event listener.
	 * 
	 *  @param userType type of message your would normally pass to
	 * 		  addEventListener.

	//--------------------------------------------------------------------------

	//----------------------------------
	//  priority
	//----------------------------------

	/**
     *  @private
     */
	private var _priority:int;
	
	/**
	 *  The <code>priority</code> parameter
     *  to <code>addEventListener()</code>.
     *
	 *  @see flash.events.IEventDispatcher#addEventListener
	 */
	public function get priority():int
	{
		return _priority;
	}
	
	//----------------------------------
	//  useCapture
	//----------------------------------

	/**
     *  @private
     */
	private var _useCapture:Boolean;

	/**
	 *  The <code>useCapture</code> parameter
     *  to <code>addEventListener()</code>.
     *
	 *  @see flash.events.IEventDispatcher#addEventListener
	 */
	public function get useCapture():Boolean
	{
		return _useCapture;
	}

	//----------------------------------
	//  userType
	//----------------------------------

	/**
     *  @private
     */
    private var _userType:String;
	
	/**
	 *  The type of the event to listen to.
     *
	 *  @see flash.events.Event#type
	 */
	public function get userType():String
	{
		return _userType;
	}
	
	//----------------------------------
	//  useWeakReference
	//----------------------------------

	/**
     *  @private
     */
	private var _useWeakReference:Boolean;

	/**
	 *  The <code>useWeakReference</code> parameter
     *  to <code>addEventListener()</code>.
     *
	 *  @see flash.events.IEventDispatcher#addEventListener
	 */
	public function get useWeakReference():Boolean
	{
		return _useWeakReference;
