extended with iterators and recursors