refactor
refactor complete
another iteration