refactor son