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