changes to calculatePrice, actually final this time