rename methods that ensure a product has all expected values
re-organize public and protected methods