Not only that, but I think this function (as an instance method) could be a nice generalization of a lot of stuff that's already happening in the model right now.

However, we could do this later, this is not a blocker for the merge.