clean up code to use abstraction