refactoring: split modules