Added mocking. Added unit tests. Improved the providers.