Hi The logic I want to implement is: * b contains a * when saving b, save a, followed by other data * when loading b, load a into a temporary, if it matches b.m_a, load other data Would you expect the following code to work? class b { a m_a; // a is serializable vector<int> m_v; // other data template<class Archive> void save(Archive& ar, const unsigned version) const { ar & m_a; ar & m_v; } template<class Archive> void load(Archive& ar, const unsigned version) { a tmp; ar & tmp; if(tmp == m_a) ar & m_v; } // ... }; Now, what if b is derived from a instead of containing it? Would this work? class b : public a { vector<int> m_v; // other data template<class Archive> void save(Archive& ar, const unsigned version) const { ar & boost::serialization::base_object<a>(*this); ar & m_v; } template<class Archive> void load(Archive& ar, const unsigned version) { a tmp; ar & tmp; if(tmp == static_cast< const a& >(*this)) ar & m_v; } // ... }; Thanks!