extended with recursors and iterators