implement product functionality