diff --git a/GUI/Model/Data/RealItem.cpp b/GUI/Model/Data/RealItem.cpp
index 64dff323bbfbc318b3aea5cf2374e194cb110811..260b7145ae6e1388318829d792f6956449663b9b 100644
--- a/GUI/Model/Data/RealItem.cpp
+++ b/GUI/Model/Data/RealItem.cpp
@@ -30,7 +30,6 @@
 #include "GUI/Util/Error.h"
 
 namespace {
-
 namespace Tag {
 
 const QString InstrumentId("InstrumentId");
@@ -41,14 +40,6 @@ const QString BinaryData("BinaryData");
 const QString NativeDataUnits("NativeDataUnits");
 
 } // namespace Tag
-
-namespace Attrib {
-
-const QString version("version");
-const QString value("value");
-
-} // namespace Attrib
-
 } // namespace
 
 
@@ -343,46 +334,48 @@ void RealItem::deserializeBinaryData(const QByteArray& data)
         throw DeserializationException::streamError();
 }
 
-void RealItem::writeTo(QXmlStreamWriter* writer) const
+void RealItem::writeTo(QXmlStreamWriter* w) const
 {
+    XML::writeAttribute(w, XML::Attrib::version, uint(1));
+
     // NOTE: The ordering of the XML elements is important in initialization
 
     // binary data
     QByteArray a = serializeBinaryData();
     if (!a.isEmpty()) {
-        writer->writeStartElement(Tag::BinaryData);
-        writer->writeAttribute(Attrib::version, "1");
-        writer->writeCharacters(a.toBase64());
-        writer->writeEndElement();
+        w->writeStartElement(Tag::BinaryData);
+        XML::writeAttribute(w, XML::Attrib::binary_version, uint(1));
+        w->writeCharacters(a.toBase64());
+        w->writeEndElement();
     }
 
     // instrument id
-    writer->writeStartElement(Tag::InstrumentId);
-    XML::writeAttribute(writer, Attrib::value, m_instrumentId);
-    writer->writeEndElement();
+    w->writeStartElement(Tag::InstrumentId);
+    XML::writeAttribute(w, XML::Attrib::value, m_instrumentId);
+    w->writeEndElement();
 
     // name
-    writer->writeStartElement(Tag::Name);
-    XML::writeAttribute(writer, Attrib::value, m_name);
-    writer->writeEndElement();
+    w->writeStartElement(Tag::Name);
+    XML::writeAttribute(w, XML::Attrib::value, m_name);
+    w->writeEndElement();
 
     // native data units
-    writer->writeStartElement(Tag::NativeDataUnits);
-    XML::writeAttribute(writer, Attrib::value, m_nativeDataUnits);
-    writer->writeEndElement();
+    w->writeStartElement(Tag::NativeDataUnits);
+    XML::writeAttribute(w, XML::Attrib::value, m_nativeDataUnits);
+    w->writeEndElement();
 
     // data
     if (m_dataItem) {
-        writer->writeStartElement(Tag::Data);
-        XML::writeItemAndChildItems(writer, m_dataItem.get());
-        writer->writeEndElement();
+        w->writeStartElement(Tag::Data);
+        XML::writeItemAndChildItems(w, m_dataItem.get());
+        w->writeEndElement();
     }
 
     // native data
     if (m_nativeDataItem) {
-        writer->writeStartElement(Tag::NativeData);
-        XML::writeItemAndChildItems(writer, m_nativeDataItem.get());
-        writer->writeEndElement();
+        w->writeStartElement(Tag::NativeData);
+        XML::writeItemAndChildItems(w, m_nativeDataItem.get());
+        w->writeEndElement();
     }
 }
 
@@ -394,46 +387,51 @@ inline T* readItemToEnd(QXmlStreamReader* reader, SessionItem* parent_item, cons
     return item;
 }
 
-void RealItem::readFrom(QXmlStreamReader* reader)
+void RealItem::readFrom(QXmlStreamReader* r)
 {
-    while (reader->readNextStartElement()) {
+    const uint version = XML::readUIntAttribute(r, XML::Attrib::version);
+    Q_UNUSED(version)
+
+    while (r->readNextStartElement()) {
+        QString tag = r->name().toString();
 
         // binary data
-        if (reader->name() == Tag::BinaryData) {
-            if (reader->attributes().value(Attrib::version).toInt() == 1) {
+        if (tag == Tag::BinaryData) {
+            const uint binary_version = XML::readUIntAttribute(r, XML::Attrib::binary_version);
+            if (binary_version == 1) {
                 QString valueAsBase64 =
-                    reader->readElementText(QXmlStreamReader::SkipChildElements);
+                    r->readElementText(QXmlStreamReader::SkipChildElements);
                 const auto data = QByteArray::fromBase64(
                     valueAsBase64.toLatin1()); // #baimport add a unit test for this!
                 deserializeBinaryData(data);
             }
-            XML::gotoEndElementOfTag(reader, Tag::BinaryData);
+            XML::gotoEndElementOfTag(r, tag);
 
             // instrument id
-        } else if (reader->name() == Tag::InstrumentId) {
-            XML::readAttribute(reader, Attrib::value, &m_instrumentId);
-            XML::gotoEndElementOfTag(reader, Tag::InstrumentId);
+        } else if (tag == Tag::InstrumentId) {
+            XML::readAttribute(r, XML::Attrib::value, &m_instrumentId);
+            XML::gotoEndElementOfTag(r, Tag::InstrumentId);
 
             // name
-        } else if (reader->name() == Tag::Name) {
-            XML::readAttribute(reader, Attrib::value, &m_name);
-            XML::gotoEndElementOfTag(reader, Tag::Name);
+        } else if (tag == Tag::Name) {
+            XML::readAttribute(r, XML::Attrib::value, &m_name);
+            XML::gotoEndElementOfTag(r, tag);
 
             // data
-        } else if (reader->name() == Tag::Data) {
-            m_dataItem.reset(readItemToEnd<DataItem>(reader, this, Tag::Data));
+        } else if (tag == Tag::Data) {
+            m_dataItem.reset(readItemToEnd<DataItem>(r, this, tag));
 
             // native data
-        } else if (reader->name() == Tag::NativeData) {
-            m_nativeDataItem.reset(readItemToEnd<DataItem>(reader, this, Tag::NativeData));
+        } else if (tag == Tag::NativeData) {
+            m_nativeDataItem.reset(readItemToEnd<DataItem>(r, this, tag));
 
             // native data
-        } else if (reader->name() == Tag::NativeDataUnits) {
-            XML::readAttribute(reader, Attrib::value, &m_nativeDataUnits);
-            XML::gotoEndElementOfTag(reader, Tag::NativeDataUnits);
+        } else if (tag == Tag::NativeDataUnits) {
+            XML::readAttribute(r, XML::Attrib::value, &m_nativeDataUnits);
+            XML::gotoEndElementOfTag(r, tag);
 
         } else
-            reader->skipCurrentElement();
+            r->skipCurrentElement();
     }
 }
 
diff --git a/GUI/Model/Data/RealItem.h b/GUI/Model/Data/RealItem.h
index d679503f17a53d75c6e567be55c348edbfd8fc86..50f20abca92cdf2556baf8f0ca2caed6b3eaf5a3 100644
--- a/GUI/Model/Data/RealItem.h
+++ b/GUI/Model/Data/RealItem.h
@@ -101,8 +101,8 @@ public:
     QByteArray serializeBinaryData() const override;
     void deserializeBinaryData(const QByteArray& data) override;
 
-    void writeTo(QXmlStreamWriter* writer) const;
-    void readFrom(QXmlStreamReader* reader);
+    void writeTo(QXmlStreamWriter* w) const;
+    void readFrom(QXmlStreamReader* r);
 
     // other
 
diff --git a/GUI/Support/XML/UtilXML.h b/GUI/Support/XML/UtilXML.h
index fcfde631516cc1722aec989c27331c6690e654bf..2b131fd4b7486d1c9495ac76aeca8cb9f736a212 100644
--- a/GUI/Support/XML/UtilXML.h
+++ b/GUI/Support/XML/UtilXML.h
@@ -25,6 +25,7 @@ namespace Attrib {
 
 const QString version("version");
 const QString selection_version("selection_version");
+const QString binary_version("binary_version");
 const QString value("value");
 const QString BA_Version("BA_Version");
 const QString projectName("projectName");