Wrote it last summer, when Sergey Ilyich taught us how to OOP