abstracting functionality and modularizing functionality