You're right. I was speaking off the top of my head, rather than trying it out!

It's ugly and generally bad to have return types being `<? extends Entity>` - see Effective Java's "avoid bounded wildcards in return types".

The "right" generics solution would be @grkvlt 's generics on the actual `Group<T extends Entity>` and `Cluster<T extends Entity>`, but that's a lot of changes.

So that leaves you with either writing a different method (e.g. `public Set<MongoDBServer> getReplicas()`) or your approach of extending `Iterable`. One thing I like about the new-method-approach is that we can mark it as `@Beta` and delete it if we change the `Group` generics. But it's also very ugly so your approach is certainly more elegant but harder to remove (e.g. even if you mark the `iterator()` method deprecated it probably won't show up in people's IDEs.

Anyway, I'm feeling indecisive just now. @grkvlt any stronger opinions?