             return bindings(state)
         }, observableFactory: { (bindings: Bindings<Event>) -> Observable<Event> in
             return Observable<Event>.merge(bindings.events)
-        }).asSignal(onErrorSignalWith: .empty())
-            .enqueue()
+        })
+            .enqueue(Signal<Event>.SharingStrategy.scheduler)
+            .asSignal(onErrorSignalWith: .empty())
+
     }
 }
 

    query: @escaping (State) -> Set<Control>,
    effects: @escaping (Control) -> Signal<Event>
    ) -> (Driver<State>) -> Signal<Event> {
    return { state in
        let query = state.map(query)

        let newQueries = Driver.zip(query, query.startWith(Set())) { $0.subtracting($1) }

        return newQueries.flatMap { controls in
            return Signal.merge(controls.map { control -> Signal<Event> in
                return query.filter { !$0.contains(control) }
                    .map { _ in Signal<Event>.empty() }
                    .startWith(effects(control).enqueue())
                    .switchLatest()
            })
        }
    }
}


    effects: @escaping (Control) -> Signal<Event>
) -> (Driver<State>) -> Signal<Event> {
    return { state in
        let observableSchedulerContext = ObservableSchedulerContext<State>(
            source: state.asObservable(),
            scheduler: Signal<Event>.SharingStrategy.scheduler.async
        )
        return react(query: query, effects: { effects($0).asObservable() })(observableSchedulerContext)
            .asSignal(onErrorSignalWith: .empty())
    }
}

