 	///
 	/// The object graph argument can be omitted only when the viewpoint is passed to `run(...)`.
 	public init(_ collection: Observable<[T]>, objectGraph: ObjectGraph? = nil) {
-        let initialState = State(collection: [], changedIndexes: IndexSet(), selectionIndexes: IndexSet())
-        let state = collection.map {
-            State(collection: $0, changedIndexes: IndexSet($0.indices), selectionIndexes: IndexSet())
-        }
+        let state = collection.map { State.from($0) }
         let sourceUpdate = state.map { newState -> Operation<State>  in
             return { oldState in
                 // TODO: Constraint selection indexes to collection size

        public let collection: [T]
        public let changedIndexes: IndexSet
        public let selectionIndexes: IndexSet
    }

	public enum SelectionAdjustment {

        }

		self.objectGraph = objectGraph ?? ObjectGraph()
        self.state = Observable<Operation<State>>.merge(operation, sourceUpdate).scan(State.initial) { oldState, operation in
                let newState = operation(oldState)
                print("New state \(newState)")
                return newState
