added iterators, definitions and smartpointers