rewrote products in OOP