Yeah the bottom half could be a trait, the top half would be declared in each association type. I don't think the duplication is terrible. It keeps the code simpler :-)