implementing product type