abstract item collection refactor