self refactor for clarity, iteration 2