 	/**
 	 *  @private
 	 *  We must override height as well because setting
-	 *  height will reset scaleX in the transform
+	 *  height will force scaleX to be positive in the transform
 	 *  matrix.
-	 * 
 	 */
 	override public function set height(value:Number):void  
 	{
 		super.height = value;
+        // Set _scaleX because scaleX may change when height is set.
+        _scaleX = scaleX;
 		if (mirror)
 			validateTransformMatrix();
 	}
+    
+    //----------------------------------
+    //  scaleX
+    //----------------------------------
+    
+    private var _scaleX:Number;
+    
+    /**
+     *  @private
+     */
+    override public function set scaleX(value:Number):void
+    {
+        _scaleX = value;
+        super.scaleX = value;
+        if (mirror)
+            validateTransformMatrix();
+    }
 
 	//--------------------------------------------------------------------------
 	//

	override public function set width(value:Number):void  
	{
		super.width = value;
		if (mirror)
			validateTransformMatrix();
	}

	 *  @private
	 *  We check the closest parent's layoutDirection property
	 *  whenever we change parents and set our mirror property
	 *  and update our transform matrix accordingly.
	 */
	private function addedHandler(event:Event):void
	{
		var p:DisplayObjectContainer = this.parent;
		
		while (p)
		{
			if (p is IVisualElement)
			{
                const oldMirror:Boolean = mirror;
                mirror = IVisualElement(p).layoutDirection == "rtl";
                if (mirror != oldMirror)
                    validateTransformMatrix();
				break;
			}
			
