Rewritten in OOP style