product base class