 			return _computedMatrix3D;
 	
 	
-		if(offsets == null)
+		if(!offsets && !mirror)
 		{
 			return layout.matrix3D;
 		}

			m = _computedMatrix = new Matrix();
		else
			m.identity();

			build2DMatrix(m,layout.transformX,layout.transformY,
						  layout.scaleX * offsets.scaleX,layout.scaleY * offsets.scaleY,
						  layout.rotationZ + offsets.rotationZ,
						  layout.x + offsets.x,layout.y + offsets.y);					
	
		_flags |= COMPUTED_MATRIX_VALID;
		return m;
	}

		invalidate();		
	}
	
    //----------------------------------
    //  layoutWidth
    //----------------------------------

    private var _layoutWidth:Number;
    
    /**
     *  @default 0
     */
    public function get layoutWidth():Number
    {
        return _layoutWidth;
    }

    /**
     *  @private
     */
    public function set layoutWidth(value:Number):void
    {
        if (value == _layoutWidth)
            return;
        _layoutWidth = value;
        invalidate();
    }
    
    //----------------------------------
    //  mirror
    //----------------------------------

    private var _mirror:Boolean;
    
    /**
     *  If true the X axis is scaled by -1 and the x coordinate of the origin
     *  is translated by the component's width.  
     * 
     *  The net effect of this "mirror" transform is to flip the direction 
     *  that the X axis increases in without changing the layout element's 
     *  location relative to the parent's origin.
     * 
     *  @default false
     */
    public function get mirror():Boolean
    {
        return _mirror;
    }
    
    /**
     *  @private
     */
    public function set mirror(value:Boolean):void
    {
        if (value == _mirror)
            return;         
        _mirror = value;
        invalidate();
    }
	
	//------------------------------------------------------------------------------
	
	/**
