product object and it's subclasses