working on refactoring. Users only need to provider UserInfoProvider.