         public function getWorldToLocalTransform(node           : ISceneNode,
                                                  forceUpdate    : Boolean   = false) : Matrix4x4
         {
-            if (_invalidList || _nodeToId[node] == undefined)
-                updateTransformsList();
-            
-            var nodeId                  : uint      = _nodeToId[node];
+            var nodeId                  : uint      = getNodeId(node);
             var worldToLocalTransform   : Matrix4x4 = _worldToLocalTransforms[nodeId];
             
             if (!worldToLocalTransform)

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

                updateLocalToWorld();
        }
        
        private function updateRootLocalToWorld(nodeId : uint = 0) : void
        {
            var rootLocalToWorld	: Matrix4x4		= _localToWorldTransforms[nodeId];
            var rootTransform		: Matrix4x4		= _transforms[nodeId];
            var root				: ISceneNode	= _idToNode[nodeId];
            var rootFlags           : uint          = _flags[nodeId];
            
            if (rootTransform._hasChanged || !(rootFlags & FLAG_INIT_LOCAL_TO_WORLD))
            {
                if (rootFlags & FLAG_LOCK_TRANSFORMS)
                    rootLocalToWorld.lock();
                
                rootLocalToWorld.copyFrom(rootTransform);
                
                if (nodeId != 0)
                    rootLocalToWorld.append(_localToWorldTransforms[_parentId[nodeId]]);
                
                if (rootFlags & FLAG_LOCK_TRANSFORMS)
                    rootLocalToWorld.unlock();
                
                rootTransform._hasChanged = false;
                _flags[nodeId] |= FLAG_INIT_LOCAL_TO_WORLD;
                root.localToWorldTransformChanged.execute(root, rootLocalToWorld);
                
                if (rootFlags & FLAG_SYNCHRONIZE_TRANSFORMS)
                {
                    var rootWorldToLocal : Matrix4x4 = _worldToLocalTransforms[nodeId]
                        || (_worldToLocalTransforms[nodeId] = new Matrix4x4());
                    
                    if (rootFlags & FLAG_LOCK_TRANSFORMS)
                        rootWorldToLocal.lock();
                    
                    rootWorldToLocal.copyFrom(rootLocalToWorld).invert();
                    
                    if (rootFlags & FLAG_LOCK_TRANSFORMS)
                        rootWorldToLocal.unlock();
                }
            }
        }
        
        private function updateLocalToWorld(nodeId : uint = 0, subtreeOnly : Boolean = false) : void
        {
            var numNodes 			: uint 			= _transforms.length;
            var subtreeMax          : uint          = nodeId;
            
            updateRootLocalToWorld(nodeId);

            while (nodeId < numNodes)
            {
                var localToWorld 	: Matrix4x4	= _localToWorldTransforms[nodeId];
