One interface to rule them all...
In principle, the interface layers to the underlying event generators can be implemented in a more general manner. Using class templates we can generalize to any version of an underlying generator (and a bit of tag dispatch / SFINAE to handle small differences between versions...)