Refactored code to make it more OOP