 
 	@objc func numberOfRowsInTableView(tableView: NSTableView) -> Int {
 		return elements.count
+	}
+
+	func updateCachedHeights() {
+		cachedHeights.removeAll(keepCapacity: true)
+		for element in elements {
+			let node = element.assembleLayoutNode()
+			let layout = node.layout(maxWidth: tableView.frame.size.width)
+			cachedHeights[memoryAddress(element)] = layout.frame.size.height
+		}
 	}
 }
 


	var elements: [Element] {
		didSet {
			let selectedRows = tableView.selectedRowIndexes
			tableView.reloadData()
			supressChangeNotification = true

	}

	func parentKeyForCell(cell: FewListCell) -> String {
		return memoryAddress(cell)
	}

	@objc func tableView(tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
		let element = elements[row]
		return cachedHeights[memoryAddress(element)] ?? defaultRowHeight
	}

	@objc func tableViewSelectionIsChanging(notification: NSNotification) {
