finished v1.1 with OOP