refactor for maintainability