Thanks for the response. Under closer inspection, the serialize calls are never made for either the derived classes or the base class when using a base class pointer. This is the xml output after save_derived is called: <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <!DOCTYPE boost_serialization> <boost_serialization signature="serialization::archive" version="5"> <rd1 class_id="0" tracking_level="1" version="0" object_id="_0"> <polymorphic_base class_id="1" tracking_level="0" version="0"></polymorphic_base> </rd1> <rd2 class_id="2" tracking_level="1" version="0" object_id="_1"> <polymorphic_base></polymorphic_base> </rd2> <rb1 class_id_reference="0" object_id_reference="_0"></rb1> <rb2 class_id_reference="2" object_id_reference="_1"></rb2> </boost_serialization> I am not sure where rb1 and rb2 tags come from since the serialize functions never get called. load_derived also does not call the serialize functions when using the base class pointers. I have attached the code I am using. It's identical to test_no_rtti.cpp except for two items. I do not have test_tools.hpp so I commented corresponding functions out and switched to std::ofstream/std::ifstream and xml_oarchive/xml_iarchive. Also, my target is a win32 console application. Please let me know if you have any ideas. Thanks, Daniel Roberts