 			
 			while (tmpNodeId >= 0)
 			{
-				if ((_transforms[tmpNodeId] as Matrix4x4)._hasChanged
+				if ((_transforms[tmpNodeId] as Matrix4x4)._hasChanged 
+					|| (tmpNodeId != nodeId && _localToWorldTransforms[tmpNodeId]._hasChanged)
 					|| !(_flags[nodeId] & FLAG_INIT_LOCAL_TO_WORLD))
 					dirtyRoot = tmpNodeId;
 				

				
				var localToWorldTransformChanged : Signal = child.localToWorldTransformChanged;
				
				if (localToWorldTransformChanged.enabled)
					localToWorldTransformChanged.execute(child, childLocalToWorld);
				
				localToWorld = childLocalToWorld;

				var childFlags          : uint          = _flags[childId];
				var child	            : ISceneNode	= _idToNode[childId];
				
				prevChildLocalToWorld.copyFrom(childLocalToWorld);
				
				if (childFlags & FLAG_LOCK_TRANSFORMS)
					childLocalToWorld.lock();
				
				childLocalToWorld
					.copyFrom(childTransform)
					.append(localToWorld);
				
				
				if (childFlags & FLAG_LOCK_TRANSFORMS)
					childLocalToWorld.unlock();
