configurable product refactoring