At first I would question why this was changed, but it looks like whenever recovery was enabled it would cause a ClassCastException when clustering was enabled :(

Do people implement their own version factory though?  Cause if they do they can no longer use it for recovery.

Also if we do go this route I wonder if we want to go the whole way and change NumericVersionGenerator.generateNew method declaration to return a NumericVersion instead through covariant typing.  This way you don't need to have a cast any longer as well since we know the type is always NumericVersionGenerator.