added internal/external iterators
changed T to Self in phantom types