adds OOP and caching