Switched to OOP, added reverse