final NodeRelativePath nodeRelativePath = new NodeRelativePath(oldParent, newParent);
final NodeModel commonAncestor = nodeRelativePath.commonAncestor();
for (NodeModel commonAncestorClone: commonAncestor.clones()){
NodeModel oldParentClone = nodeRelativePath.pathBegin(commonAncestorClone);
NodeModel newParentClone = nodeRelativePath.pathEnd(commonAncestorClone);
moveSingleNode(oldParentClone.getChildAt(oldIndex), newParentClone, newIndex, isLeft, changeSide);
oldParentClones.remove(oldParentClone);
newParentClones.remove(newParentClone);
}