restructure oop