Before this was changed to VersionGenerator, it used ClusterIdGenerator, which wasn't configurable. When all the version management changes went in as part of the metadata work, it switched it to VersionGenerator and indirectly made it configurable. This was done because I wanted a single id generator to be used in core, rather than having both ClusterIdGenerator and NumericVersionGenerator.

As you rightly said, having VersionConfigurator plugged was creating CCEs, so reverted back to what we have before, which was a concrete class implementation (before it was CIG and now NVG).

Your idea to have a more covariant return makes total sense. TBH, all returns types should be covariant of the style:

`<T extends X> T booMoo()`

That gives you a nice typesafe instance :)

p.s. We should strive for contra variance in our method parameters :)