big chunk of onNext refactoring