There is a redundant pattern for generating all three (as expected). I'll use it to define a general way of doing this sort of behavior.