re-organize project into OOP style