1st stage
2nd stage
3rd stage
4th stage
5th stage
Finished refactoring.
Code cleanup, final coverage tests