 				case .move:
 					let oldIndexPath = IndexPath(row: start + old!, section: 0)
 					let newIndexPath = IndexPath(row: start + new!, section: 0)
+					
 					let node = nodes[new!]
+					let oldNode = from[old!]
+					node.isExpanded = oldNode.isExpanded
+					node.isSelected = oldNode.isSelected
+					node.estimatedHeight = oldNode.estimatedHeight
+					node.update(from: oldNode)
+
 					if node.isSelected {
 						selections.append(newIndexPath)
 					}

					let newIndexPath = IndexPath(row: start + new!, section: 0)
					let node = nodes[new!]
					let oldNode = from[old!]
					node.update(from: oldNode)
					
					if node.isSelected {

			}
		}
		else {
			var set = Set(from)
			
			for a in nodes {
				if let b = set.remove(a) {
					a.isExpanded = b.isExpanded
					a.isSelected = b.isSelected
					a.estimatedHeight = b.estimatedHeight
					a.update(from: b)
				}
			}

			tableView?.reloadData()
		}
		
