Modeling discounts, and using abstract types.