Second attempt

I think it's actual OOP? Should work.