split into modules. working om setup.