ModuleProvider (needs refactoring)