product refactor