Refactoring the code of the plugin to make it easier to extend it without the need to override a lot of code.
Merge branch 'feature/decouple-code' into develop