   public func signal<A, S, R>(for selector: Selector, dispatch: @escaping (PublishSubject<S, NoError>, A) -> R) -> SafeSignal<S> {
     return _signal(for: selector) { [weak self] subject in
       guard let me = self else { return NonDisposable.instance }
-      return me.registerInvoker(for: selector) { (a: A) -> R in
+      return me.registerInvoker1(for: selector) { (a: A) -> R in
         return dispatch(subject, a)
       }
     }

  public func signal<S, R>(for selector: Selector, dispatch: @escaping (PublishSubject<S, NoError>) -> R) -> SafeSignal<S> {
    return _signal(for: selector) { [weak self] subject in
      guard let me = self else { return NonDisposable.instance }
      return me.registerInvoker(for: selector) { () -> R in
        return dispatch(subject)
      }
    }

    invoker(argumentExtractor, setReturnValue)
  }

  private func registerInvoker0<R>(for selector: Selector, block: @escaping () -> R) -> Disposable {
    invokers[selector] = { _, setReturnValue in
      var r = block()
      if let setReturnValue = setReturnValue { setReturnValue(&r) }
