Refactored for better inheritance and used properties