add more tests and a new modular structure