             } else if oldChildNode == nil { // New Node Added
                 if let retChildNode = retChildNode,
                     let parenView = self.engine?.renderer.nodeIdViewMap[newNode.uniqueIdentifier] {
-                    log("💉 Adding node \(type(of: retChildNode)) (id:\(retChildNode.uniqueIdentifier) )")
+                    log("💉 Adding node \(type(of: retChildNode)) (id:\(retChildNode.uniqueIdentifier))")
                     updates.append {
                         self.engine?.renderer.render(tree: retChildNode, in: parenView)
                     }
-                    iNew -= 1
                 }
             } else if let retChildNode = retChildNode,
             let oldChildNode = oldChildNode, !areTreesEqual(retChildNode, oldChildNode) {
                 // Replacement by non patchable node (different node type.)
-                if let parenView = self.engine?.renderer.nodeIdViewMap[oldNode.uniqueIdentifier],
+                if let parenView = self.engine?.renderer.nodeIdViewMap[newNode.uniqueIdentifier],
                     let removedView = self.engine?.renderer.nodeIdViewMap[oldChildNode.uniqueIdentifier] {
                     log("💉 Replacing node")
                     updates.append {

    var updates = [()->Void]()
    
    func mainUpdateChildren(_ oldNode: Tree, _ newNode: Tree) {
        updateChildren(oldNode, newNode)
        DispatchQueue.main.async {
            for u in self.updates {

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