added more classes and boilerplate