DRYing up a lot of CRUD