I feel like it should be possible to abstract some of these so that they're not copied out for each model, but not sure how to go about it...