                 if (!forceUpdate)
                 {
                     worldToLocalTransform.copyFrom(_localToWorldTransforms[nodeId]).invert();
-                    _initialized[nodeId] |= INIT_WORLD_TO_LOCAL;
+                    _flags[nodeId] |= FLAG_INIT_WORLD_TO_LOCAL;
                 }
             }
             
             if (forceUpdate)
                 updateAncestorsAndSelfLocalToWorld(nodeId);
-            
-            if (!(_initialized[nodeId] & INIT_WORLD_TO_LOCAL))
-            {
-                _initialized[nodeId] |= INIT_WORLD_TO_LOCAL;
+
+            var flags : uint = _flags[nodeId];
+            
+            if (!(flags & FLAG_INIT_WORLD_TO_LOCAL))
+            {
+                _flags[nodeId] |= FLAG_INIT_WORLD_TO_LOCAL;
+                
+                if (flags & FLAG_LOCK_TRANSFORMS)
+                    worldToLocalTransform.lock();
                 
                 worldToLocalTransform
                     .copyFrom(_localToWorldTransforms[nodeId])
                     .invert();
+                    
+                if (flags & FLAG_LOCK_TRANSFORMS)
+                    worldToLocalTransform.unlock();
             }
             
             return worldToLocalTransform;
+        }
+        
+        public function setSharedLocalToWorldTransformReference(node      : ISceneNode,
+                                                                matrix    : Matrix4x4) : void
+        {
+            var nodeId : uint = getNodeId(node);
+            
+            if (_flags[nodeId] & FLAG_INIT_LOCAL_TO_WORLD)
+                matrix.copyFrom(_localToWorldTransforms[nodeId]);
+            _localToWorldTransforms[nodeId] = matrix;
+        }
+        
+        public function setSharedWorldToLocalTransformReference(node      : ISceneNode,
+                                                                matrix    : Matrix4x4) : void
+        {
+            var nodeId : uint = getNodeId(node);
+            
+            if (_flags[nodeId] & FLAG_INIT_WORLD_TO_LOCAL)
+                matrix.copyFrom(_worldToLocalTransforms[nodeId]);
+            _worldToLocalTransforms[nodeId] = matrix;
+        }
+        
+        public function synchronizeTransforms(node : ISceneNode, enabled : Boolean) : void
+        {
+            var nodeId : uint = getNodeId(node);
+            
+            _flags[nodeId] = enabled
+                ? _flags[nodeId] | FLAG_SYNCHRONIZE_TRANSFORMS
+                : _flags[nodeId] & ~FLAG_SYNCHRONIZE_TRANSFORMS;
+        }
+        
+        public function lockTransformsBeforeUpdate(node : ISceneNode, enabled : Boolean) : void
+        {
+            var nodeId : uint = getNodeId(node);
+            
+            _flags[nodeId] = enabled
+                ? _flags[nodeId] | FLAG_LOCK_TRANSFORMS
+                : _flags[nodeId] & ~FLAG_LOCK_TRANSFORMS;
         }
     }
 }
        public function getWorldToLocalTransform(node           : ISceneNode,
                                                 forceUpdate    : Boolean   = false) : Matrix4x4
        {
            if (_invalidList || _nodeToId[node] == undefined)
                updateTransformsList();
            
            var nodeId                  : uint      = _nodeToId[node];
            var worldToLocalTransform   : Matrix4x4 = _worldToLocalTransforms[nodeId];
            
            if (!worldToLocalTransform)

            
            _nodeToId = null;
            _transforms = null;
            _flags = null;
            _localToWorldTransforms = null;
            _worldToLocalTransforms = null;
            _numChildren = null;
