refactored, MORE SOLID