even better abstraction
abstraction refactoring!