 		return result
 	}
 	
+	func parentForHeaderFooter(view: FewListHeaderFooter) -> RealizedElement {
+		let ptr = Unmanaged<AnyObject>.passUnretained(view).toOpaque()
+		let key = "\(ptr)"
+		let result: RealizedElement
+		if let existing = parents[key] {
+			result = existing
+		} else {
+			result = RealizedElement(element: Element(), view: view.contentView, parent: nil)
+			parents[key] = result
+		}
+		return result
+	}
+	
 	// MARK: UITableViewDelegate
 	
 	@objc func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

		if section < footers.count {
			if let footer = footers[section] {
				let view = tableView.dequeueReusableHeaderFooterViewWithIdentifier(footerKey) as! FewListHeaderFooter
				view.updateWithElement(footer)
				return view
			}
		}

		if section < headers.count {
			if let header = headers[section] {
				let view = tableView.dequeueReusableHeaderFooterViewWithIdentifier(headerKey) as! FewListHeaderFooter
				view.updateWithElement(header, parent: parentForHeaderFooter(view))
				return view
			}
		}
