refactor ProductCollection