diff --git a/GUI/Model/Device/BeamItems.cpp b/GUI/Model/Device/BeamItems.cpp
index 0c4d289f38709c5b59e2b0d15e8b4cd31e5f394b..33268beba4d656fe8972212b28f3e442000af4af 100644
--- a/GUI/Model/Device/BeamItems.cpp
+++ b/GUI/Model/Device/BeamItems.cpp
@@ -194,6 +194,34 @@ BeamItem::BeamItem()
     m_inclinationAngleItem.reset(new BeamInclinationAngleItem);
 }
 
+void BeamItem::writeTo(QXmlStreamWriter* w) const
+{
+    XML::writeAttribute(w, XML::Attrib::version, uint(1));
+
+    // parameters from base class
+    w->writeStartElement(Tag::BaseData);
+    SourceItem::writeTo(w);
+    w->writeEndElement();
+}
+
+void BeamItem::readFrom(QXmlStreamReader* r)
+{
+    const uint version = XML::readUIntAttribute(r, XML::Attrib::version);
+    Q_UNUSED(version)
+
+    while (r->readNextStartElement()) {
+        QString tag = r->name().toString();
+
+        // parameters from base class
+        if (tag == Tag::BaseData) {
+            SourceItem::readFrom(r);
+            XML::gotoEndElementOfTag(r, tag);
+
+        } else
+            r->skipCurrentElement();
+    }
+}
+
 double BeamItem::getInclinationAngle() const
 {
     return dynamic_cast<BeamInclinationAngleItem*>(beamDistributionItem())->inclinationAngle();
diff --git a/GUI/Model/Device/BeamItems.h b/GUI/Model/Device/BeamItems.h
index 7fc9f328292727df7d52f2775216f2f6bb03e6f5..fd42c9952973bb48e93524380bfd3c0c67b52abb 100644
--- a/GUI/Model/Device/BeamItems.h
+++ b/GUI/Model/Device/BeamItems.h
@@ -34,9 +34,6 @@ class InstrumentItem;
 //! Base class for BeamItem and ScanItem. Name refers to radiation source.
 class SourceItem {
 public:
-    virtual void writeTo(QXmlStreamWriter* w) const;
-    virtual void readFrom(QXmlStreamReader* r);
-
     DoubleProperty& intensity() { return m_intensity; }
     const DoubleProperty& intensity() const { return m_intensity; }
     void setIntensity(double v) { m_intensity.setValue(v); }
@@ -61,6 +58,8 @@ public:
 
 protected:
     SourceItem();
+    void writeTo(QXmlStreamWriter* w) const;
+    void readFrom(QXmlStreamReader* r);
 
     std::unique_ptr<BeamWavelengthItem> m_wavelengthItem;
     std::unique_ptr<BeamAzimuthalAngleItem> m_azimuthalAngleItem;
@@ -73,6 +72,10 @@ protected:
 class BeamItem : public SourceItem {
 public:
     BeamItem();
+
+    void writeTo(QXmlStreamWriter* w) const;
+    void readFrom(QXmlStreamReader* r);
+
     double getInclinationAngle() const override;
 };
 
@@ -80,8 +83,8 @@ class ScanItem : public SourceItem {
 public:
     explicit ScanItem(const InstrumentItem* owningInstrument);
 
-    void writeTo(QXmlStreamWriter* w) const override;
-    void readFrom(QXmlStreamReader* r) override;
+    void writeTo(QXmlStreamWriter* w) const;
+    void readFrom(QXmlStreamReader* r);
 
     double getInclinationAngle() const override;
     void setInclinationAngle(double value) override;