refactor as package with sub-modules