iterator-pattern add