   }
 
   public override func reloadSections(_ sections: IndexSet, with animation: UITableViewRowAnimation) {
-    let indexPaths: [IndexPath] = sections.reduce([]) { previous, section in
-      return previous + self.indexPaths(forSection: section)
-    }
-
-    precacheNodes(at: indexPaths)
+    precacheNodes(in: sections)
     operationQueue.enqueueOperation { done in
       DispatchQueue.main.async {
         super.reloadSections(sections, with: animation)

  }

  public override func deleteSections(_ sections: IndexSet, with animation: UITableViewRowAnimation) {
    let indexPaths = sections.reduce([]) { previous, section in
      return previous + self.indexPaths(forSection: section)
    }

    purgeNodes(at: indexPaths)
    operationQueue.enqueueOperation { done in
      DispatchQueue.main.async {
        super.deleteSections(sections, with: animation)

  }

  public override func deleteRows(at indexPaths: [IndexPath], with animation: UITableViewRowAnimation) {
    purgeNodes(at: indexPaths)
    operationQueue.enqueueOperation { done in
      DispatchQueue.main.async {
