             }
         }
         
-        private function updateLocalToWorld(nodeId : uint = 0, subtreeOnly : Boolean = false) : void
-        {
-            var numNodes 			: uint 			= _transforms.length;
-            var subtreeMax          : uint          = nodeId;
+        private function updateLocalToWorld(nodeId : uint = 0, targetNodeId : int = -1) : void
+        {
+            var numNodes 	: uint 	= _transforms.length;
+            var subtreeMax  : uint  = nodeId;
             
             updateRootLocalToWorld(nodeId);
+            
+            if (nodeId == targetNodeId)
+                return;
 
             while (nodeId < numNodes)
             {

                            if (childFlags & FLAG_LOCK_TRANSFORMS)
                                childWorldToLocal.unlock();
                        }
                    }
                }
                
                if (subtreeOnly && nodeId && nodeId >= subtreeMax)
                {
                    // jump to the first brother who has children
                    var parentId : uint = _parentId[nodeId];

            }
        }
        
        private function updateAncestorsAndSelfLocalToWorld(nodeId : uint) : void
        {
            var dirtyRoot : int = -1;
            var tmpNodeId : int = nodeId;
            
            while (tmpNodeId >= 0)
            {
                if ((_transforms[tmpNodeId] as Matrix4x4)._hasChanged
                    || !(_flags[nodeId] & FLAG_INIT_LOCAL_TO_WORLD))
                    dirtyRoot = tmpNodeId;
                
                tmpNodeId = _parentId[tmpNodeId];
            }
            
            if (dirtyRoot >= 0)
                updateLocalToWorld(dirtyRoot, nodeId);
        }
        
        private function targetAddedHandler(ctrl	: TransformController,
