An EmbeddedIterator is a single ExternalIterator embedded in the aggregate it iterates over. ''What do you mean by embedded?'' The aggregate has both aggregate and iterator semantics. The aggregate is an iterator over itself. For example, the Microsoft C++ wrappers for WMI include a class IWbemClassObject. This represents either a WMI class or an instance of a WMI class (ugh!). You iterate over the properties of an instance by first calling IWbemClassObject::B''''''eginEnumeration, then calling IWbemClassObject::Next until the non-error error-code WBEM_S_NO_MORE_DATA is returned. From Java: ResultSet is both a collection of rows and an iterator over those rows. I think this is crappy. -- JbRainsberger If during iteration a subroutine were to try to iterate over the same aggregate, it would cause great confusion. EmbeddedIterator could be considered an AntiPattern. They are just as hard to use as any other ExternalIterator, and introduce additional sources of bugs.