separation refactor