switch to boost::shared_ptr