new setup, major refactoring