it works, but not very OOP