         styleChangedFlag = false;
         invalidateDisplayListFlag = false;
     }
-
+    /**
+     *  @private
+     *  Update the transform.matrix based on the mirror flag.  This method must be 
+     *  called when x, width, or layoutDirection changes.
+     */
+    private function validateTransformMatrix():void
+    {
+        if (mirror)
+        {
+            const mirrorMatrix:Matrix = this.transform.matrix;
+            mirrorMatrix.a = -1;
+            mirrorMatrix.tx = _x + width;
+            transform.matrix = mirrorMatrix;
+        }
+        else // layoutDirection changed, mirror=false, reset transform.matrix to its default
+        {
+            const defaultMatrix:Matrix = new Matrix();
+            defaultMatrix.tx = _x;
+            defaultMatrix.ty = y;
+            transform.matrix = defaultMatrix;
+        }
+    }
+    
     /**
      *  Returns the TextFormat object that represents 
      *  character formatting information for this UITextField object.

 *  invalidation/measurement/layout, enabling/disabling, tooltips, and IME
 *  (Input Method Editor) support for entering Chinese, Japanese, and
 *  Korean text.</p>
 *
 *  @see flash.text.TextField
 *  @see mx.core.UITextFormat

     *  @private
     */
    private var untruncatedText:String;
    
    /**
     *  @private
     *  True if we've inherited layoutDirection="rtl".  
     */
    private var mirror:Boolean = false;

    //--------------------------------------------------------------------------
    //
    //  Overridden properties
    //
    //--------------------------------------------------------------------------
    
    //----------------------------------
    //  x
    //----------------------------------
    
    private var _x:Number = 0;
    
    /**
     *  @private
     */
    override public function set x(value:Number):void
    {
        _x = value;
        super.x = value;
        if (mirror)
            validateTransformMatrix();
    }
    
    /**
     *  @private
     */
    override public function get x():Number
    {
        // FIXME(hmuller): by default get x returns transform.matrix.tx rounded to the nearest 20th.
        // should do the same here, if we're returning _x.
        return (mirror) ? _x : super.x;
    }
    
    //----------------------------------
    //  width
    //----------------------------------
    
    /**
     *  @private
     */
    override public function set width(value:Number):void  
    {
        super.width = value;
        if (mirror)
            validateTransformMatrix();
    }
    
    //----------------------------------
    //  htmlText
