This is related to #1174
Indeed, ISetIterator are reusable, to prevent from creating iterators anytime an iteration is needed.
But it may happen that the same iterator is used inside an iteration (ex: iteration to filter and iteration when instantiated). In that case, the top iteration may not loop over all the values.
A possible fix would be to make ISetIterator extends AutoCloseable too, to catch end of usage in combination of PoolManager. That way, it could be possible to state if an iterator is still in used (with AutoCloseable); if so, a new one would be created or an old one would be recycled; if not, it would be push as recyclable.