again refactor