added collection abstraction