 	}
 
 	private func flattenedIndex(fromSectioned index: IndexPath, for ranges: [Range<Int>]) -> Int {
-		return ranges[index.section].lowerBound + index.row + offset
+		return ranges[index.section].lowerBound + index.row + offset + numberOfPrependedRows
 	}
 
 	public func hasGroupRow(at index: Int) -> Bool {
+		let index = index - numberOfPrependedRows
 		return !config.hidesSectionHeader && flattenedRanges.contains { $0.lowerBound == index }
 	}
 
 	public func numberOfRows(in tableView: NSTableView) -> Int {
 		return (config.hidesSectionHeader ? 0 : set.sectionCount)
 			+ (0 ..< set.sectionCount).reduce(0) { $0 + set.rowCount(for: $1) }
+		  + numberOfPrependedRows
 	}
 
 	public func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {


		super.init()
		computeFlattenedRanges()
	}

	@discardableResult

		config: NSTableViewAdapterConfig
	) -> NSTableViewAdapter<ViewModel, Provider> {
		let disposable = CompositeDisposable()
		let adapter = NSTableViewAdapter(set: set, provider: provider, tableView: tableView, config: config, disposable: disposable)
		tableView.dataSource = adapter

		disposable += set.events
