 	}
 	
 	public func subscribe<O: Observer>(observer: O) where O.State == State {
-		let id = uniqueId
-		uniqueId += 1
-		subscribers[id] = AnyObserver(observer)
+		subscribers.append(AnyObserver(observer))
 		observer.handle(state: state)
 	}
 	
 	public func unsubscribe<O: Observer>(observer: O) where O.State == State {
-		for subscriber in subscribers.filter({ $0.value === observer }) {
-			subscribers.removeValue(forKey: subscriber.key)
+		while let index = subscribers.index(where: { $0 === observer }) {
+			subscribers.remove(at: index)
 		}
 	}
 	
 	private func _dispatch(action: Action) {
 		state = reduce(state, action)
-		for subscriber in subscribers.values {
+		for subscriber in subscribers {
 			subscriber.handle(state: state)
 		}
 	}

	public init(initial state: State, reducer: @escaping Reducer, middleware: [Middleware] = []) {
		self.state = state
		reduce = reducer
		dispatcher = middleware.reversed().reduce(self._dispatch) { (dispatcher: @escaping Dispatcher, middleware: Middleware) -> Dispatcher in
			middleware(dispatcher, { self.state })
		}
	}

	
	private let _handle: (State) -> Void
}
