DRYing up voting