@Override
  public Observable<T> call(final Observable<T> o) {
    return Observable.create(
        new OnSubscribe<T>() {
          @Override
          public void call(Subscriber<? super T> t) {
            OnTerminateResumeSubscriber<T> parent =
                new OnTerminateResumeSubscriber<T>(t, onError, onCompleted);

            t.add(parent);
            t.setProducer(parent.arbiter);

            o.unsafeSubscribe(parent);
          }
        });
  }