Implement an abstract product