 				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)
 					}

			}
		}
		else {
			tableView?.reloadData()
		}
		

		set {
			let from = _children
			let to = newValue
			
			if from != nil, let treeController = treeController, let index = flatIndex {
				let size = self.size
