split stuff into multiple classes and update