Refactoring to support different product types