full restructure into resusable object