refactored ProductUtil