Major refactoring to reduce the complexity of the Drivers and move common code to internal implementation. WIP