fun login(): Completable { return apiService.login(user, password) } fun sessionIsValid(): Observable { //... return true if session cookie is < 30 min old } fun getAuth(): Observable { return sessionIsValid() .flatMap { sessionIsValid -> if (!sessionIsValid) { login().subscribe() Observable.just(Unit) } else { Observable.just(Unit) } } } fun getMessages() { userRepository .getAuth() .subscribeOn(Schedulers.io()) .flatMap { messageRepository.messages() } .observeOn(AndroidSchedulers.mainThread()) .subscribe({ messages: List -> messages.forEach { Timber.d("\n${it.messageTitle}") } }, { errors: Throwable -> Timber.e(errors) }) }