      */
     public function getLayoutMatrix3D():Matrix3D
     {
-        return layoutMatrix3D;
-    }
-
-    /**
-     *  @inheritDoc
-     */
-    public function setLayoutMatrix3D(value:Matrix3D):void
+        // esg: _layoutFeatures keeps a single internal copy of the layoutMatrix.
+        // since this is an internal class, we don't need to worry about developers
+        // accidentally messing with this matrix, _unless_ we hand it out. Instead,
+        // we hand out a clone.
+        if(layoutFeatures != null)
+            return layoutFeatures.layoutMatrix3D.clone();
+        var m:Matrix3D = new Matrix3D();
+        m.appendTranslation(_x,_y,0);
+        return m;           
+    }
+
+    /**
+     *  @inheritDoc
+     */
+    public function setLayoutMatrix3D(value:Matrix3D, triggerLayout:Boolean):void
     {
         allocateLayoutFeatures();
         var previous:Boolean = needsDisplayObject;
         layoutFeatures.layoutMatrix3D = value;
-        invalidateTransform(previous != needsDisplayObject,
-                            false /*triggerLayout*/);
-		invalidateDisplayList();
+        invalidateTransform(previous != needsDisplayObject, triggerLayout);
     }
 
     /**

     */
    public function getLayoutMatrix():Matrix
    {
        return layoutMatrix;
    }

    /**
     *  @inheritDoc
     */
    public function setLayoutMatrix(value:Matrix):void
    {
        allocateLayoutFeatures();
        var previous:Boolean = needsDisplayObject;
        layoutFeatures.layoutMatrix = value;
        invalidateTransform(previous != needsDisplayObject,
                            false /*triggerLayout*/);
    }

    /**

        }

        _transform = value;
    }
    
	/**
