Refactoring

Turn the monolithic provider into platform-specific ones.