+ // Check for overlapping additions and deletions, prevent deleting objects that are also added.
+ Deque<E> stack = new ArrayDeque<E>();
+ for (Pair<E, String> n : added) {
+ stack.add(n.first);
+ }
+ while (!stack.isEmpty()) {
+ E n = stack.pop();
+ for (int i = removed.size()-1; i >= 0; i--) {
+ if (removed.get(i).first == n) {
+ removed.remove(i);
+ break;
+ }
+ }
+ if (n instanceof ParentNode) {
+ ParentNode<INode> pn = (ParentNode<INode>)n;
+ for (INode cn : pn.getNodes()) {
+ stack.push((E)cn);
+ }
+ }
+ }
+