return reference instead of std::shared_ptr