This version is one big step of refactoring the whole module, adding functionnalities, and refactoring the components into classes to better handling them.