         appContext.eventsSignal
             .map { event -> Result<[TodoViewModel], NSError>? in if case let .ResponseTodoViewModels(result) = event { return result }; return nil }
             .ignoreNil()
-            .map { $0.value }
-            .ignoreNil()
+            .promoteErrors(NSError)
+            .attemptMap { $0 }
             .observeOn(UIScheduler())
+            .flatMapError { [unowned self] error -> SignalProducer<[TodoViewModel], NoError> in
+                self.presentError(error)
+                return .empty
+            }
             .observeNext { [unowned self] todoViewModels in
                 if (self.viewModels == todoViewModels) { return }
                 self.viewModels = todoViewModels

    
    func doAdd() {
        appContext.eventsObserver.sendNext(Event.RequestAddRandomTodoViewModel)
    }
    
    // MARK: - UITableViewDataSource

        appContext.eventsSignal
            .map { event -> Result<TodoViewModel, NSError>? in if case let .ResponseTodoViewModel(result) = event { return result }; return nil }
            .ignoreNil()
            .promoteErrors(NSError)
            .attemptMap { $0 }
            .observeOn(UIScheduler())
            .flatMapError { [unowned self] error -> SignalProducer<TodoViewModel, NoError> in
                self.presentError(error)
                return .empty
            }
            .observeNext { [unowned self] todoViewModel in
                if let index = self.viewModels.indexOf(todoViewModel) {
                    if (todoViewModel.deleted) {
