Updated with a more modular design.
Merge branch 'feature/update' into develop
Merge branch 'develop'