 			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);					
-	
+			
+        var tx:Number = layout.transformX;
+        var ty:Number = layout.transformY;
+        var sx:Number = layout.scaleX;
+        var sy:Number = layout.scaleY;
+        var rz:Number = layout.rotationZ;
+        var x:Number = layout.x;
+        var y:Number = layout.y;
+        
+        if (mirror)
+        {
+            sx *= -1;
+            x += layoutWidth;
+        }
+        
+        if (offsets)
+        {
+            sx *= offsets.scaleX;
+            sy *= offsets.scaleY;
+            rz += offsets.rotationZ;
+            x += offsets.x;
+            y += offsets.y;
+        }
+        
+        build2DMatrix(m, tx, ty, sx, sy, rz, x, y);
+        
 		_flags |= COMPUTED_MATRIX_VALID;
 		return m;
 	}

		if(_flags & COMPUTED_MATRIX_VALID)
			return _computedMatrix;
	
		if(offsets == null)
		{
			return layout.matrix;
		}			

			return _computedMatrix3D;
	
	
		if(!offsets && !mirror)
		{
			return layout.matrix3D;
		}
