      */
     public function setLayoutMatrix(value:Matrix, invalidateLayout:Boolean):void
     {
+        var previousMatrix:Matrix = _layoutFeatures ? 
+            _layoutFeatures.layoutMatrix : super.transform.matrix;
+                            
         // validateMatrix when switching between 2D/3D, works around player bug
         // see sdk-23421 
         var was3D:Boolean = is3D;
-
         _hasComplexLayoutMatrix = true;
+        
         if (_layoutFeatures == null)
         {
             // flash will make a copy of this on assignment.

     */
    public function setLayoutMatrix3D(value:Matrix3D, invalidateLayout:Boolean):void
    {
        // validateMatrix when switching between 2D/3D, works around player bug
        // see sdk-23421 
        var was3D:Boolean = is3D;

            invalidateTransform();
        }
        
        // Early exit if possible. We don't want to invalidate unnecessarily.
        // We need to do the check here, after our new value has been applied
        // because our matrix components are rounded upon being applied to a
        // DisplayObject.
        if (MatrixUtil.isEqual(previousMatrix, _layoutFeatures ? 
            _layoutFeatures.layoutMatrix : super.transform.matrix))
        {    
            return;
        } 
        
        invalidateProperties();

        if (invalidateLayout)
