Added more documentation
Various changes to drivers.
Some stuff was divided into drivers to manage the complexity