     var updates = [()->Void]()
     
     func mainUpdateChildren(_ oldNode: Tree, _ newNode: Tree) {
+        
+        // Update root IDs
+        if type(of: oldNode) == type(of: newNode) { // Same type nodes
+            if var map = self.engine?.renderer.nodeIdViewMap {
+                map[newNode.uniqueIdentifier] = map[oldNode.uniqueIdentifier]
+                map.removeValue(forKey: oldNode.uniqueIdentifier)
+                self.engine?.renderer.nodeIdViewMap = map
+            }
+        }
+        
         updateChildren(oldNode, newNode)
         DispatchQueue.main.async {
             for u in self.updates {

    }
    
    private func updateChildren(_ oldNode: IsNode, _ newNode: IsNode) {
        let newLength = newNode.children.count
        let oldLength = oldNode.children.count
        let length = max(oldLength, newLength)

                        // remove old node
                        removedView.removeFromSuperview()
                    }
                }
            } else if let newChildNode = newChildNode, let oldChildNode = oldChildNode {
                // Recurse on Children
