this is an internal class but we can prevent 'remove' by returning an iterator.