To complete this truly interesting overhaul of the use of Iterator – I rightly guessed that Guava already has some of these common classes and more. Indeed. I can see easily another 1,000 lines of code of savings by adapting to use their iterator primitives. I'm in progress now and have removed 600 lines so far. I think this will go a long way to avoiding subtle and various bugs in the iterator implementations to date. I can definitley get it in before 0.5.