reuse method from input loop abstraction