Index: LinearAlgebra/configure.ac
===================================================================
--- LinearAlgebra/configure.ac	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/configure.ac	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -107,8 +107,13 @@
 AM_PATH_CODEPATTERNS([1.0.13], $have_debug,,[AC_MSG_ERROR([Missing CodePatterns library, please specify PKG_CONFIG_PATH or use --with-codepatterns...])])
 
+# boost
+BOOST_REQUIRE([1.40])
+
 # boost headers
-BOOST_REQUIRE([1.40])
 BOOST_BIND
 BOOST_EXCEPTION
+
+# boost libraries
+BOOST_SERIALIZATION
 
 # Checks for header files.
Index: LinearAlgebra/src/LinearAlgebra/Makefile.am
===================================================================
--- LinearAlgebra/src/LinearAlgebra/Makefile.am	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/src/LinearAlgebra/Makefile.am	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -49,4 +49,5 @@
 libLinearAlgebra_la_includedir = $(includedir)/MoleCuilder/LinearAlgebra/
 libLinearAlgebra_la_LIBADD = \
+	$(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_SERIALIZATION_LIBS) \
 	$(GSL_LIBS)
 nobase_libLinearAlgebra_la_include_HEADERS = ${LINALGHEADER}
Index: LinearAlgebra/src/LinearAlgebra/MatrixContent.cpp
===================================================================
--- LinearAlgebra/src/LinearAlgebra/MatrixContent.cpp	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/src/LinearAlgebra/MatrixContent.cpp	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -33,4 +33,16 @@
 #include <set>
 
+
+/** Constructor for class MatrixContent.
+ *
+ * This cstor is only present for serialization purposes.
+ *
+ */
+MatrixContent::MatrixContent() :
+    MatrixDimension(0,0),
+    content(NULL),
+    free_content_on_exit(true)
+{
+}
 
 /** Constructor for class MatrixContent.
Index: LinearAlgebra/src/LinearAlgebra/MatrixContent.hpp
===================================================================
--- LinearAlgebra/src/LinearAlgebra/MatrixContent.hpp	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/src/LinearAlgebra/MatrixContent.hpp	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -15,4 +15,7 @@
 
 #include "CodePatterns/Assert.hpp"
+
+#include <boost/serialization/array.hpp>
+#include <boost/serialization/split_member.hpp>
 
 /** MatrixContent is a wrapper for gsl_matrix.
@@ -165,4 +168,45 @@
   void write(std::ostream &ost) const;
 
+  bool operator!=(const MatrixContent &other) const {
+    return !(*this == other);
+  }
+
+private:
+  MatrixContent();
+  friend class boost::serialization::access;
+  // serialization (due to gsl_vector separate versions needed)
+  template<class Archive>
+  void save(Archive & ar, const unsigned int version) const
+  {
+    ar & boost::serialization::base_object<MatrixDimension>(*this);
+    ar & content->size1;
+    ar & content->size2;
+    ar & content->tda;
+    ar & boost::serialization::make_array<double>(content->data, content->size1*content->tda);
+  }
+  template<class Archive>
+  void load(Archive & ar, const unsigned int version)
+  {
+    ar & boost::serialization::base_object<MatrixDimension>(*this);
+    content = gsl_matrix_calloc(getRows(), getColumns());
+    ar & content->size1;
+    ASSERT(getRows() == content->size1,
+        "MatrixContent::load() - rows dimension mismatch: "
+        +toString(getRows())+" != "+toString(content->size1)+".");
+    ar & content->size2;
+    ASSERT(getColumns() == content->size2,
+        "MatrixContent::load() - columns dimension mismatch: "
+        +toString(getColumns())+" != "+toString(content->size2)+".");
+    size_t tda = 0;
+    ar & tda;
+    ASSERT(tda == content->tda,
+        "MatrixContent::load() - trailing dimension mismatch: "
+        +toString(tda)+" != "+toString(content->tda)+".");
+    ar & boost::serialization::make_array<double>(content->data, content->size1*tda);
+    // this is always a copy, hence always free
+    free_content_on_exit = true;
+  }
+  BOOST_SERIALIZATION_SPLIT_MEMBER()
+
 protected:
   double *Pointer(size_t m, size_t n);
@@ -174,4 +218,5 @@
   bool free_content_on_exit;
 };
+//BOOST_CLASS_EXPORT_GUID(MatrixContent, "MatrixContent")
 
 std::ostream & operator<<(std::ostream &ost, const MatrixContent &mat);
Index: LinearAlgebra/src/LinearAlgebra/VectorContent.cpp
===================================================================
--- LinearAlgebra/src/LinearAlgebra/VectorContent.cpp	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/src/LinearAlgebra/VectorContent.cpp	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -31,4 +31,15 @@
 #include "Vector.hpp"
 #include "VectorContent.hpp"
+
+/** Constructor of class VectorContent.
+ *
+ * This cstor is only present for serialization purposes.
+ *
+ */
+VectorContent::VectorContent() :
+  VectorDimension(0),
+  content(NULL),
+  free_content_on_exit(true)
+{}
 
 /** Constructor of class VectorContent.
Index: LinearAlgebra/src/LinearAlgebra/VectorContent.hpp
===================================================================
--- LinearAlgebra/src/LinearAlgebra/VectorContent.hpp	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/src/LinearAlgebra/VectorContent.hpp	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -15,4 +15,7 @@
 
 #include "CodePatterns/Assert.hpp"
+
+#include <boost/serialization/array.hpp>
+#include <boost/serialization/split_member.hpp>
 
 /**
@@ -145,8 +148,43 @@
   const double operator*(const VectorContent& b) const;
 
+  bool operator!=(const VectorContent &other) const {
+    return !(*this == other);
+  }
+
+private:
+  VectorContent();
+  friend class boost::serialization::access;
+  // serialization (due to gsl_vector separate versions needed)
+  template<class Archive>
+  void save(Archive & ar, const unsigned int version) const
+  {
+    ar & boost::serialization::base_object<VectorDimension>(*this);
+    ar & content->size;
+    ar & content->stride;
+    ar & boost::serialization::make_array<double>(content->data, content->size);
+  }
+  template<class Archive>
+  void load(Archive & ar, const unsigned int version)
+  {
+    ar & boost::serialization::base_object<VectorDimension>(*this);
+    content = gsl_vector_calloc(getDimension());
+    ar & content->size;
+    ASSERT(getDimension() == content->size,
+        "MatrixContent::load() - dimension mismatch: "
+        +toString(getDimension())+" != "+toString(content->size)+".");
+    ar & content->stride;
+    ar & boost::serialization::make_array<double>(content->data, content->size);
+    // this is always a copy, hence always free
+    free_content_on_exit = true;
+  }
+  BOOST_SERIALIZATION_SPLIT_MEMBER()
+
+public:
   gsl_vector *content;
 private:
   bool free_content_on_exit;
 };
+//BOOST_CLASS_EXPORT_GUID(VectorContent, "VectorContent")
+
 
 std::ostream & operator << (std::ostream& ost, const VectorContent &m);
Index: LinearAlgebra/src/unittests/Makefile.am
===================================================================
--- LinearAlgebra/src/unittests/Makefile.am	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/src/unittests/Makefile.am	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -5,5 +5,5 @@
 
 AM_LDFLAGS = ${CodePatterns_LIBS} $(CPPUNIT_LIBS) -ldl
-AM_CPPFLAGS = $(CPPUNIT_CFLAGS) ${CodePatterns_CFLAGS}
+AM_CPPFLAGS = $(CPPUNIT_CFLAGS) $(BOOST_CPPFLAGS) ${CodePatterns_CFLAGS}
 
 TESTS = \
@@ -63,5 +63,6 @@
 	MatrixContentUnitTest.cpp \
 	MatrixContentUnitTest.hpp
-MatrixContentUnitTest_LDADD = ${GSLLIBS}
+MatrixContentUnitTest_LDADD = ${GSLLIBS} \
+	$(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_SERIALIZATION_LIBS)
 
 PlaneUnitTest_SOURCES = UnitTestMain.cpp \
@@ -78,5 +79,6 @@
 	VectorContentUnitTest.cpp \
 	VectorContentUnitTest.hpp
-VectorContentUnitTest_LDADD = ${GSLLIBS}
+VectorContentUnitTest_LDADD = ${GSLLIBS} \
+	$(BOOST_SERIALIZATION_LDFLAGS) $(BOOST_SERIALIZATION_LIBS)
 
 VectorUnitTest_SOURCES = UnitTestMain.cpp \
Index: LinearAlgebra/src/unittests/MatrixContentUnitTest.cpp
===================================================================
--- LinearAlgebra/src/unittests/MatrixContentUnitTest.cpp	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/src/unittests/MatrixContentUnitTest.cpp	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -26,4 +26,8 @@
 #include <cmath>
 #include <limits>
+
+// include headers that implement a archive in simple text format
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
 
 #include "MatrixContentUnitTest.hpp"
@@ -348,2 +352,29 @@
   }
 }
+
+/** Unit test for serialization
+ *
+ */
+void MatrixContentTest::SerializationTest()
+{
+  m->setZero();
+  int count=0;
+  for (size_t x = 0; x < 4 ; ++x)
+    for (size_t y = 0; y < 3 ; ++y)
+      m->at(x,y) = count++;
+  // write element to stream
+  std::stringstream stream;
+  boost::archive::text_oarchive oa(stream);
+  oa << m;
+
+  //std::cout << "Contents of archive is " << stream.str() << std::endl;
+
+  // create and open an archive for input
+  boost::archive::text_iarchive ia(stream);
+  // read class state from archive
+  MatrixContent *newm;
+
+  ia >> newm;
+
+  CPPUNIT_ASSERT (*m == *newm);
+}
Index: LinearAlgebra/src/unittests/MatrixContentUnitTest.hpp
===================================================================
--- LinearAlgebra/src/unittests/MatrixContentUnitTest.hpp	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/src/unittests/MatrixContentUnitTest.hpp	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -31,4 +31,5 @@
     CPPUNIT_TEST (ReadWriteTest );
     CPPUNIT_TEST (SVDTest );
+    CPPUNIT_TEST (SerializationTest );
     CPPUNIT_TEST_SUITE_END();
 
@@ -44,4 +45,5 @@
     void ReadWriteTest();
     void SVDTest();
+    void SerializationTest();
 
 private:
Index: LinearAlgebra/src/unittests/VectorContentUnitTest.cpp
===================================================================
--- LinearAlgebra/src/unittests/VectorContentUnitTest.cpp	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/src/unittests/VectorContentUnitTest.cpp	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -23,4 +23,8 @@
 #include <cppunit/extensions/TestFactoryRegistry.h>
 #include <cppunit/ui/text/TestRunner.h>
+
+// include headers that implement a archive in simple text format
+#include <boost/archive/text_oarchive.hpp>
+#include <boost/archive/text_iarchive.hpp>
 
 #include "VectorContentUnitTest.hpp"
@@ -197,2 +201,27 @@
   CPPUNIT_ASSERT_EQUAL( v, w );
 }
+
+/** UnitTest for serialization.
+ */
+void VectorContentTest::SerializationTest()
+{
+  v->setZero();
+  (*v)[0] = 0.;
+  (*v)[1] = 1.;
+  (*v)[2] = 2.;
+  // write element to stream
+  std::stringstream stream;
+  boost::archive::text_oarchive oa(stream);
+  oa << v;
+
+  //std::cout << "Contents of archive is " << stream.str() << std::endl;
+
+  // create and open an archive for input
+  boost::archive::text_iarchive ia(stream);
+  // read class state from archive
+  VectorContent *newv;
+
+  ia >> newv;
+
+  CPPUNIT_ASSERT (*v == *newv);
+}
Index: LinearAlgebra/src/unittests/VectorContentUnitTest.hpp
===================================================================
--- LinearAlgebra/src/unittests/VectorContentUnitTest.hpp	(revision c5038eb29dd533dd1cd33dee2c21d56fbd61fcd0)
+++ LinearAlgebra/src/unittests/VectorContentUnitTest.hpp	(revision 29cbe9eb5045c2dc5460417786abf8dd54510240)
@@ -31,4 +31,5 @@
     CPPUNIT_TEST (OperatorIsTest );
     CPPUNIT_TEST (ReadWriteTest );
+    CPPUNIT_TEST (SerializationTest );
     CPPUNIT_TEST_SUITE_END();
 
@@ -44,4 +45,5 @@
     void OperatorAlgebraTest();
     void ReadWriteTest();
+    void SerializationTest();
 
 private:
