Refactoring: first stage
Refectoring: second stage.
Refactoring: third stage.
Refactoring: fourth stage.
Refactoring: fifth stage.
Refactoring: final stage.