I split my test program up from 1 .cpp file into proper headers and implementation files.... (we'll fight the fight with dlls next) I now get a unregisted_class exception when I do this: (MSVC 11.0, windows7, win32 compile) int main(int argc, char* argv[]) { const ABase* a = new ABase("I'm cool"); const ABase* c = new C(*a,54.2f); cout <<*a<<"\n"<<*((C*)c)<<endl; ofstream ofs("dump.bin"); try { boost::archive::text_oarchive oa(ofs); //boost::archive::binary_oarchive oa(ofs); oa<<a; oa<<c; //THIS TRIGGERS THE EXCEPTION } catch(boost::archive::archive_exception& ae) { cout<<ae.what(); } Where C inherets from ABase. C.h: #ifndef C_HPP #define C_HPP #include "A.h" class C : public ABase { friend class boost::serialization::access; friend std::ostream& operator << (std::ostream&,const C&); public: C(); C(const ABase&); C(const ABase&,float); virtual ~C(); private: template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & boost::serialization::base_object<ABase>(*this); ar & m_blah; } float m_blah; }; BOOST_CLASS_EXPORT_KEY( C ) #endif c.cpp: #include "C.h" using namespace std; BOOST_CLASS_EXPORT_IMPLEMENT( C ) C::C() { } C::C(const ABase&a,float b): ABase(a), m_blah(b) { } C::~C() { } ostream& operator << ( ostream& out, const C& rhs) { out << dynamic_cast<const ABase&>(rhs) <<" " <<rhs.m_blah <<endl; return out; } I do not for the life of me understand. I am registering the classes like the documentation says.... Larry E. Ramey