Improve documentation and logic in the providers
Improve documentation
Move all selectitem generating code to a single class

This solves some duplication.