rewrite using OOP