subject refactor