refactor add sub module ability