some work on impl of iterator