 //
 ////////////////////////////////////////////////////////////////////////////////
 
-package reprise.tweens { 
+package reprise.tweens
+{
+	import reprise.commands.AbstractAsynchronousCommand;
+	import reprise.events.TweenEvent;
+	
+	import flash.display.Shape;
 	import flash.events.Event;
 	import flash.events.EventDispatcher;
-	import flash.utils.getTimer;
-	
-	import reprise.commands.IAsynchronousCommand;
-	import reprise.core.GlobalMCManager;
-	import reprise.events.CommandEvent;
-	import reprise.events.TweenEvent;
-	public class SimpleTween extends EventDispatcher
-		implements IAsynchronousCommand
+	import flash.utils.getTimer;	
+
+	public class SimpleTween extends AbstractAsynchronousCommand
 	{
 		/***************************************************************************
 		*							public properties							   *
 		***************************************************************************/
-		public static const DIRECTION_FORWARD : Number = 1;
-		public static const DIRECTION_BACKWARD : Number = -1;
+		public static const DIRECTION_FORWARD : int = 1;
+		public static const DIRECTION_BACKWARD : int = -1;
 		
 		
 		/***************************************************************************
 		*							protected properties							   *
 		***************************************************************************/
-		protected var m_direction:Number;
-		protected var m_isRunning:Boolean;
-		protected var m_isCancelled:Boolean;
-		
-		protected var m_startTime : Number;
-		protected var m_currentTime:Number;
-		protected var m_duration:Number;
-		protected var m_delay : uint;
+		protected static const g_frameEventDispatcher : Shape = new Shape();
+		
+		protected var m_direction : int;
+		protected var m_startTime : int;
+		protected var m_currentTime:int;
+		protected var m_duration : int;
+		protected var m_delay : int;
 	
 		protected var m_tweenedProperties:Array;
-		
-		protected var m_priority : Number;
-		protected var m_id : Number;
 		
 		
 		/***************************************************************************

			{
				m_currentTime = m_duration;
			}
	//		trace([m_currentTime, m_duration]);
			tweenProperties();
			dispatchEvent(new TweenEvent(TweenEvent.TICK, true));
			if (m_currentTime == m_duration)

		/**
		 * sets the tween's direction
		 */
		public function setDirection(direction : int) : void
		{
			m_direction = direction;
		}
		
		/**
		 * returns true if tweens is running
		 */
		public function isRunning() : Boolean
		{
			return m_isExecuting;
		}

		/**
		 * starts the tween
		 */
		public function startTween(executeFirstTickImmediately:Boolean = false) : void
		{
			m_isCancelled = false;
			if (!m_isExecuting && m_currentTime < m_duration)
			{
				g_frameEventDispatcher.addEventListener(
					Event.ENTER_FRAME, executeTick);
				m_isExecuting = true;
				m_startTime = getTimer() + m_currentTime;
				dispatchEvent(new TweenEvent(TweenEvent.START, true));
				if (executeFirstTickImmediately)
