switched to boost::intrusive_ptr