introducing shared pointers to each "value" class