     }
   }
 
-  private func registerInvoker<T, R>(for selector: Selector, block: @escaping (T) -> R) -> Disposable {
+  private func registerInvoker1<T, R>(for selector: Selector, block: @escaping (T) -> R) -> Disposable {
     invokers[selector] = { extractor, setReturnValue in
       var r = block(arg(extractor, 2))
       if let setReturnValue = setReturnValue { setReturnValue(&r) }

    }
  }

  private func registerInvoker<T, U, V, R>(for selector: Selector, block: @escaping (T, U, V) -> R) -> Disposable {
    invokers[selector] = { extractor, setReturnValue in
      var r = block(arg(extractor, 2), arg(extractor, 3), arg(extractor, 4))
      if let setReturnValue = setReturnValue { setReturnValue(&r) }

  public func signal<A, B, C, D, E, S, R>(for selector: Selector, dispatch: @escaping (PublishSubject<S, NoError>, A, B, C, D, E) -> R) -> SafeSignal<S> {
    return _signal(for: selector) { [weak self] subject in
      guard let me = self else { return NonDisposable.instance }
      return me.registerInvoker5(for: selector) { (a: A, b: B, c: C, d: D, e: E) -> R in
        return dispatch(subject, a, b, c, d, e)
      }
    }
