diff --git a/GUI/Model/Sample/Lattice2DItems.cpp b/GUI/Model/Sample/Lattice2DItems.cpp
index 2f7c4b5f59003a7d34b619c0ef102b809a29b6a2..6526d6717b5294cd31446edc8f4ad285a4d7cddc 100644
--- a/GUI/Model/Sample/Lattice2DItems.cpp
+++ b/GUI/Model/Sample/Lattice2DItems.cpp
@@ -15,6 +15,7 @@
 #include "GUI/Model/Sample/Lattice2DItems.h"
 #include "Base/Const/Units.h"
 #include "Base/Util/Assert.h"
+#include "GUI/Model/Session/Serializer.h"
 #include "Sample/Lattice/Lattice2D.h"
 
 Lattice2DItem::Lattice2DItem()
@@ -56,6 +57,15 @@ std::unique_ptr<Lattice2D> BasicLattice2DItem::createLattice() const
                                             Units::deg2rad(latticeRotationAngle()));
 }
 
+void BasicLattice2DItem::serialize(Serializer& s)
+{
+    s.assertVersion(0);
+    s.rw(m_latticeRotationAngle);
+    s.rw(m_length1);
+    s.rw(m_length2);
+    s.rw(m_angle);
+}
+
 DoubleDescriptor BasicLattice2DItem::latticeLength1() const
 {
     return m_length1;
@@ -99,6 +109,13 @@ std::unique_ptr<Lattice2D> SquareLattice2DItem::createLattice() const
     return std::make_unique<SquareLattice2D>(m_length, Units::deg2rad(latticeRotationAngle()));
 }
 
+void SquareLattice2DItem::serialize(Serializer& s)
+{
+    s.assertVersion(0);
+    s.rw(m_latticeRotationAngle);
+    s.rw(m_length);
+}
+
 DoubleDescriptor SquareLattice2DItem::latticeLength() const
 {
     return m_length;
@@ -122,6 +139,13 @@ std::unique_ptr<Lattice2D> HexagonalLattice2DItem::createLattice() const
     return std::make_unique<HexagonalLattice2D>(m_length, Units::deg2rad(latticeRotationAngle()));
 }
 
+void HexagonalLattice2DItem::serialize(Serializer& s)
+{
+    s.assertVersion(0);
+    s.rw(m_latticeRotationAngle);
+    s.rw(m_length);
+}
+
 DoubleDescriptor HexagonalLattice2DItem::latticeLength() const
 {
     return m_length;
diff --git a/GUI/Model/Sample/Lattice2DItems.h b/GUI/Model/Sample/Lattice2DItems.h
index bd18d691e13b12e356a82c620f89e76e4f03eb6e..c11f0ecab67acb94f6e4569e7dbd163f3e283a85 100644
--- a/GUI/Model/Sample/Lattice2DItems.h
+++ b/GUI/Model/Sample/Lattice2DItems.h
@@ -21,6 +21,7 @@
 
 class Lattice2D;
 class DoubleDescriptor;
+class Serializer;
 
 class Lattice2DItem {
 protected:
@@ -29,19 +30,23 @@ protected:
 public:
     virtual ~Lattice2DItem() = default;
     virtual std::unique_ptr<Lattice2D> createLattice() const = 0;
+    virtual void serialize(Serializer& s) = 0;
     double unitCellArea() const;
 
     DoubleDescriptor latticeRotationAngle() const;
     void setLatticeRotationAngle(double angle);
 
-private:
+protected:
     DoubleProperty m_latticeRotationAngle;
 };
 
+// -------------------------------------------------------------------------------------
+
 class BasicLattice2DItem : public Lattice2DItem {
 public:
     BasicLattice2DItem();
     std::unique_ptr<Lattice2D> createLattice() const override;
+    void serialize(Serializer& s) override;
 
     DoubleDescriptor latticeLength1() const;
     void setLatticeLength1(double length1);
@@ -58,10 +63,13 @@ private:
     DoubleProperty m_angle;
 };
 
+// -------------------------------------------------------------------------------------
+
 class SquareLattice2DItem : public Lattice2DItem {
 public:
     SquareLattice2DItem();
     std::unique_ptr<Lattice2D> createLattice() const override;
+    void serialize(Serializer& s) override;
 
     DoubleDescriptor latticeLength() const;
     void setLatticeLength(double length);
@@ -70,10 +78,13 @@ private:
     DoubleProperty m_length;
 };
 
+// -------------------------------------------------------------------------------------
+
 class HexagonalLattice2DItem : public Lattice2DItem {
 public:
     HexagonalLattice2DItem();
     std::unique_ptr<Lattice2D> createLattice() const override;
+    void serialize(Serializer& s) override;
 
     DoubleDescriptor latticeLength() const;
     void setLatticeLength(double length);