refactor and reflect