Update with more OOP structure