 			return IndexPath(row: index, section: i.section)
 		}
 
-		if let next = sections.index(i.section, offsetBy: 1, limitedBy: sections.index(before: sections.endIndex)) {
-			return IndexPath(row: sections[next].startIndex, section: next)
-		}
-
-		return IndexPath(row: 0, section: i.section + 1)
+		let next = sections.index(i.section, offsetBy: 1)
+		if next == endIndex.section {
+			return endIndex
+		}
+
+		return IndexPath(row: sections[next].startIndex, section: next)
 	}
 	
 	public subscript(position: IndexPath) -> E {

	}

	var startIndex: Int {
		return storage.startIndex
	}

	var endIndex: Int {
		return storage.endIndex
	}

	subscript(position: Int) -> E {

			return IndexPath(row: index, section: i.section)
		}

		if i.section == startIndex.section {
			preconditionFailure("Cannot advance beyond `startIndex`.")
		}

		let next = sections.index(i.section, offsetBy: -1)
		return IndexPath(row: sections[next].startIndex, section: next)
	}

	public func index(after i: IndexPath) -> IndexPath {
		precondition(i < endIndex)

		let section = sections[i.section]

		if let index = section.index(i.row,
