factorize even more agressively now writing new functions should be only about writing the business code