Changes:
- Large refactor, aimed at separating code depending on its function
Tests:
- Added testing