The following changes would make your classes compatible with all archive types and might well fix your problem. class C : public Serializer { typedef Serializer Parent; public: std::string text; A* m_owner; int32 dasse; Vector<float> vector_test; C():m_owner(0) { text = "Ola sua puta rabeta!"; dasse = 69; vector_test.push_back(1); vector_test.push_back(1.2f); vector_test.push_back(1.3f); vector_test.push_back(1.4f); } // standard way of specifying serialization for a class template<class Archive> serialize(Archive & ar, const unsigned int version){ ar.template register_type<C>(); ar.Serialize(dasse); ar.Serialize(text); //ar.Serialize(m_owner); //ar.Serialize(vector_test); } void Serialize(IArchive& ar, const unsigned int version) { // forward to correct function from virtual call serialize(ar, version); } }; BTW - if you want a virtual function interface to the serialization system you might want to check out "polymorphic archives" in the documentation. Robert Ramey