using boost::shared_ptr