diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp
index 7796b3ab1c06a18e36a9f4d455bca8f5d09766c3..90df6955523c3e83b4307d5ce0f27930e556ec9f 100644
--- a/GUI/Model/Job/JobItem.cpp
+++ b/GUI/Model/Job/JobItem.cpp
@@ -26,9 +26,13 @@
 #include "GUI/Model/Material/MaterialItemContainer.h"
 #include "GUI/Model/Sample/ItemWithMaterial.h"
 #include "GUI/Model/Sample/MultiLayerItem.h"
+#include "GUI/Model/Session/SessionXML.h"
 #include "GUI/Model/Session/SimulationOptionsItem.h"
+#include "GUI/Util/DeserializationException.h"
 #include "GUI/Util/Error.h"
 
+using namespace GUI::Session::XML;
+
 namespace {
 const QString SimulationOptionsTag("SimulationOptions");
 } // namespace
@@ -392,6 +396,8 @@ void JobItem::setPresentationType(const QString& type)
 
 void JobItem::writeNonSessionItems(QXmlStreamWriter* writer) const
 {
+    writeAttribute(writer, GUI::Session::XML::Version, int(1));
+
     writer->writeStartElement(SimulationOptionsTag);
     m_simulationOptionsItem.writeContentTo(writer);
     writer->writeEndElement();
@@ -399,10 +405,19 @@ void JobItem::writeNonSessionItems(QXmlStreamWriter* writer) const
 
 void JobItem::readNonSessionItems(QXmlStreamReader* reader)
 {
-    reader->readNextStartElement();
-    if (reader->name() == SimulationOptionsTag) {
-        m_simulationOptionsItem.readContentFrom(reader);
-        reader->skipCurrentElement();
+    const int version = reader->attributes().value(GUI::Session::XML::Version).toInt();
+
+    if (version < 1)
+        throw DeserializationException::tooOld();
+
+    if (version > 1)
+        throw DeserializationException::tooNew();
+
+    while (reader->readNextStartElement()) {
+        if (reader->name() == SimulationOptionsTag) {
+            m_simulationOptionsItem.readContentFrom(reader);
+            reader->skipCurrentElement();
+        }
     }
 }