item domain now return smartpointers to items instead of raw pointers