   fileprivate func handleAdditions(for fileBrowserItem: FileBrowserItem, new newChildren: [FileBrowserItem]) {
     let curChildren = fileBrowserItem.children.sorted()
 
+    // We don't just take newChildren because NSOutlineView look at the pointer equality for preserving the expanded
+    // states...
+    fileBrowserItem.children = newChildren.substituting(elements: curChildren)
+
     let curPreparedChildren = self.prepare(curChildren)
     let newPreparedChildren = self.prepare(newChildren)
 
-
-
-
-
-
+    let indicesToInsert = newPreparedChildren
+        .enumerated()
+        .filter { curPreparedChildren.contains($0.1) == false }
+        .map { $0.0 }
+
+    let parent = fileBrowserItem == self.root ? nil : fileBrowserItem
+    self.insertItems(at: IndexSet(indicesToInsert), inParent: parent)
   }
 
   fileprivate func handleChildren(for fileBrowserItem: FileBrowserItem, new newChildren: [FileBrowserItem]) {

      return
    }

    Swift.print("got \(fileBrowserItem) to update")
    self.update(fileBrowserItem)
  }

  fileprivate func handleRemovals(for fileBrowserItem: FileBrowserItem, new newChildren: [FileBrowserItem]) {

    let newPreparedChildren = self.prepare(newChildren)

    let keptChildren = curPreparedChildren.filter { newPreparedChildren.contains($0) }
    let childrenToRecurse = keptChildren.filter { self.isItemExpanded($0) }

    childrenToRecurse.forEach(self.update)
  }

  fileprivate func update(_ fileBrowserItem: FileBrowserItem) {
