diff --git a/GUI/coregui/Models/JobModel.cpp b/GUI/coregui/Models/JobModel.cpp
index 27680d9550a5a2fa26b7c80a74fe74441414ae0f..e36b9a3ce8359af9a3e07e61705035db7a900b78 100644
--- a/GUI/coregui/Models/JobModel.cpp
+++ b/GUI/coregui/Models/JobModel.cpp
@@ -24,6 +24,7 @@
 #include "MultiLayerItem.h"
 #include "InstrumentItem.h"
 #include "ParameterModelBuilder.h"
+#include "ParameterTreeItems.h"
 #include <QUuid>
 #include <QDebug>
 #include <QItemSelection>
@@ -168,15 +169,7 @@ void JobModel::backup(JobItem *jobItem)
 //! restore instrument and sample model from backup for given JobItem
 void JobModel::restore(JobItem *jobItem)
 {
-    MultiLayerItem *multilayer = jobItem->getMultiLayerItem(true);
-    Q_ASSERT(multilayer);
-
-    setSampleForJobItem(jobItem, multilayer);
-
-    InstrumentItem *instrument = jobItem->getInstrumentItem(true);
-    Q_ASSERT(instrument);
-
-    setInstrumentForJobItem(jobItem, instrument);
+    restoreItem(jobItem->getItem(JobItem::T_PARAMETER_TREE));
 }
 
 void JobModel::runJob(const QModelIndex &index)
@@ -251,3 +244,13 @@ QString JobModel::generateJobIdentifier()
     return QUuid::createUuid().toString();
 }
 
+void JobModel::restoreItem(SessionItem *item)
+{
+    if (ParameterItem *parameter = dynamic_cast<ParameterItem*>(item)) {
+        parameter->propagateValueLink(true);
+    }
+    for (auto child : item->childItems()) {
+        restoreItem(child);
+    }
+}
+
diff --git a/GUI/coregui/Models/JobModel.h b/GUI/coregui/Models/JobModel.h
index b7af9658d350314ddc4f5c0e82fb8078eeed341e..7dbee7609f9bbb1fcb0ef478aaa1a508b6df7daa 100644
--- a/GUI/coregui/Models/JobModel.h
+++ b/GUI/coregui/Models/JobModel.h
@@ -56,6 +56,7 @@ signals:
     void aboutToDeleteJobItem(JobItem *item);
     void focusRequest(JobItem *item);
     void globalProgress(int);
+    void modelLoaded();
 
 public slots:
     void runJob(const QModelIndex &index);
@@ -67,6 +68,7 @@ public slots:
 private:
     QString generateJobName();
     QString generateJobIdentifier();
+    void restoreItem(SessionItem *item);
 
     JobQueueData *m_queue_data;
 };
diff --git a/GUI/coregui/Models/ParameterModelBuilder.cpp b/GUI/coregui/Models/ParameterModelBuilder.cpp
index b044b1450d51674bc6d74c91d5f61e721f00f981..75d2e53a283f291df7a9925faaf3eb518a4e943a 100644
--- a/GUI/coregui/Models/ParameterModelBuilder.cpp
+++ b/GUI/coregui/Models/ParameterModelBuilder.cpp
@@ -192,9 +192,11 @@ void ParameterTreeBuilder::handleItem(SessionItem *tree, SessionItem *source)
     } else if (tree->modelType() == Constants::ParameterType) {
         tree->setDisplayName(source->itemName());
         tree->setValue(source->value());
-        tree->setDecimals(source->decimals());
-        tree->setLimits(source->limits());
-        tree->setItemValue(ParameterItem::P_LINK, ModelPath::getPathFromIndex(source->index()));
+        QString path = ModelPath::getPathFromIndex(source->index());
+        int firstSlash = path.indexOf('/');
+        path = path.mid(firstSlash + 1);
+        tree->setItemValue(ParameterItem::P_LINK, path);
+        tree->setItemValue(ParameterItem::P_BACKUP, source->value());
         return;
     } else {
         return;
diff --git a/GUI/coregui/Models/ParameterTreeItems.cpp b/GUI/coregui/Models/ParameterTreeItems.cpp
index 943c7b8c3ab974f5cc6a9e202fd6967781ef7877..40bc61260745474366a25d3bdf95083874108831 100644
--- a/GUI/coregui/Models/ParameterTreeItems.cpp
+++ b/GUI/coregui/Models/ParameterTreeItems.cpp
@@ -27,8 +27,30 @@ ParameterLabelItem::ParameterLabelItem()
 }
 
 const QString ParameterItem::P_LINK = "Link";
+const QString ParameterItem::P_BACKUP = "Backup";
 ParameterItem::ParameterItem()
     : SessionItem(Constants::ParameterType)
 {
     addProperty(P_LINK, "");
+    addProperty(P_BACKUP, 0.0);
+}
+
+void ParameterItem::propagateValueLink(bool backup)
+{
+    if (backup)
+        setValue(getItemValue(P_BACKUP));
+    SessionItem *item = getLinkedItem();
+    if (item)
+        item->setValue(value());
+}
+
+SessionItem *ParameterItem::getLinkedItem()
+{
+    QString link = getItemValue(P_LINK).toString();
+    SessionItem *cur = this;
+    while (cur && cur->modelType() != Constants::JobItemType) {
+        cur = cur->parent();
+    }
+    link = cur->itemName() + "/" + link;
+    return model()->itemForIndex(ModelPath::getIndexFromPath(model(), link));
 }
diff --git a/GUI/coregui/Models/ParameterTreeItems.h b/GUI/coregui/Models/ParameterTreeItems.h
index 833c3f718e566402d7793bb2c1bd9b7522ba8bee..d3340d4e70bc8c26f4ffd8763fb0159660a4785c 100644
--- a/GUI/coregui/Models/ParameterTreeItems.h
+++ b/GUI/coregui/Models/ParameterTreeItems.h
@@ -29,7 +29,10 @@ class BA_CORE_API_ ParameterItem : public SessionItem
 {
 public:
     static const QString P_LINK;
+    static const QString P_BACKUP;
     ParameterItem();
+    void propagateValueLink(bool backup = false);
+    SessionItem *getLinkedItem();
 };
 
 #endif
diff --git a/GUI/coregui/Models/SessionXML.cpp b/GUI/coregui/Models/SessionXML.cpp
index 3a018cc27bb1f91de71f8108c3b4e299cb9fb361..a7056e12bc90ebf51ae06df252f271ee97e323dd 100644
--- a/GUI/coregui/Models/SessionXML.cpp
+++ b/GUI/coregui/Models/SessionXML.cpp
@@ -52,6 +52,7 @@ void SessionWriter::writeItemAndChildItems(QXmlStreamWriter *writer, const Sessi
         if (tag == item->parent()->defaultTag())
             tag = "";
         writer->writeAttribute(SessionXML::TagAttribute, tag);
+        writer->writeAttribute(SessionXML::DisplayNameAttribute, item->data(SessionModel::DisplayNameRole).toString());
         QVector<int> roles = item->getRoles();
         foreach(int role, roles) {
             if (role == Qt::DisplayRole || role == Qt::EditRole)
@@ -153,6 +154,9 @@ void SessionReader::readItems(QXmlStreamReader *reader, SessionItem *item, const
                     }
                 } else {
                     SessionItem *new_item = ItemFactory::createItem(model_type);
+                    if (reader->attributes().hasAttribute(SessionXML::DisplayNameAttribute)) {
+                        new_item->setDisplayName(reader->attributes().value(SessionXML::DisplayNameAttribute).toString());
+                    }
                     if (tag == "")
                         tag = item->defaultTag();
                     if (!item->insertItem(-1, new_item, tag)) {
diff --git a/GUI/coregui/Models/SessionXML.h b/GUI/coregui/Models/SessionXML.h
index a5c2f9482dea5069fc348ed4284eee7894f6de46..eabc3a3e6f701c3e89a8d92ca01ba0cae5a8dcd0 100644
--- a/GUI/coregui/Models/SessionXML.h
+++ b/GUI/coregui/Models/SessionXML.h
@@ -40,7 +40,7 @@ const QString TagAttribute("Tag");
 const QString ModelNameAttribute("Name");
 const QString ItemTag("Item");
 const QString ModelTypeAttribute("ModelType");
-const QString ItemNameAttribute("ItemName");
+const QString DisplayNameAttribute("DisplayName");
 const QString ParameterTag("Parameter");
 const QString ParameterNameAttribute("ParName");
 const QString ParameterTypeAttribute("ParType");
diff --git a/GUI/coregui/Views/JobWidgets/JobRealTimeWidget.cpp b/GUI/coregui/Views/JobWidgets/JobRealTimeWidget.cpp
index 28baf157c0ed4728a686aa8e992341595d3b7f26..fa059eff4b06d7796365819f223bc06c666f8fec 100644
--- a/GUI/coregui/Views/JobWidgets/JobRealTimeWidget.cpp
+++ b/GUI/coregui/Views/JobWidgets/JobRealTimeWidget.cpp
@@ -56,6 +56,7 @@ JobRealTimeWidget::JobRealTimeWidget(JobModel *jobModel, QWidget *parent)
     setLayout(mainLayout);
 
     connect(m_toolBar, SIGNAL(resetParameters()), this, SLOT(onResetParameters()));
+    connect(m_jobModel, SIGNAL(modelLoaded()), this, SLOT(onModelLoaded()));
 }
 
 void JobRealTimeWidget::setJobModel(JobModel *jobModel)
@@ -151,6 +152,16 @@ void JobRealTimeWidget::updateCurrentItem()
     setItem(m_currentJobItem);
 }
 
+void JobRealTimeWidget::onModelLoaded()
+{
+    JobItem *item = dynamic_cast<JobItem*>(m_jobModel->rootItem()->getItem());
+    if (item) {
+        setItem(item);
+    } else {
+        onJobItemDelete(m_currentJobItem);
+    }
+}
+
 ModelTuningWidget *JobRealTimeWidget::getCurrentModelTuningWidget()
 {
     ModelTuningWidget *result = dynamic_cast<ModelTuningWidget *>(m_stack->currentWidget());
diff --git a/GUI/coregui/Views/JobWidgets/JobRealTimeWidget.h b/GUI/coregui/Views/JobWidgets/JobRealTimeWidget.h
index 5fe4fe500f620abfa37bb3d35f75cd6a0d643f0d..bd34019cc6c0b77446dd8dbfdc7239ca1dbb1081 100644
--- a/GUI/coregui/Views/JobWidgets/JobRealTimeWidget.h
+++ b/GUI/coregui/Views/JobWidgets/JobRealTimeWidget.h
@@ -43,6 +43,7 @@ public slots:
     void onJobItemFinished(const QString &identifier);
     void onResetParameters();
     void updateCurrentItem();
+    void onModelLoaded();
 
 private:
     ModelTuningWidget *getCurrentModelTuningWidget();
diff --git a/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.cpp b/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.cpp
index 219439cf0df0ab7a14c7ae0ea84359249be5feea..32576218f217dd03e5679f66dc59274da7229de5 100644
--- a/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.cpp
+++ b/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.cpp
@@ -142,16 +142,18 @@ QWidget *ModelTuningDelegate::createEditor(QWidget *parent,
 
         auto proxy = dynamic_cast<FilterPropertyProxy*>(const_cast<QAbstractItemModel*>(index.model()));
 
-        SessionItem *item = static_cast<SessionItem*>(proxy->mapToSource(index).internalPointer());//m_current_link.getItem();
-        AttLimits limits = item->limits();//item->getItem(m_current_link.getPropertyName())->limits();
-        m_currentItem = item;
+        m_currentItem = static_cast<ParameterItem*>(proxy->mapToSource(index).internalPointer());//m_current_link.getItem();
+
+
+
+        AttLimits limits = m_currentItem->getLinkedItem()->limits();//item->getItem(m_current_link.getPropertyName())->limits();
 
         // initializing value box
         m_valueBox = new QDoubleSpinBox();
         m_valueBox->setKeyboardTracking(false);
         m_valueBox->setFixedWidth(80);
-        m_valueBox->setDecimals(item->decimals());
-        m_valueBox->setSingleStep(1./std::pow(10.,item->decimals()-1));
+        m_valueBox->setDecimals(m_currentItem->getLinkedItem()->decimals());
+        m_valueBox->setSingleStep(1./std::pow(10.,m_currentItem->getLinkedItem()->decimals()-1));
 
         if(limits.hasLowerLimit()) {
             m_valueBox->setMinimum(limits.getLowerLimit());
@@ -186,6 +188,13 @@ QWidget *ModelTuningDelegate::createEditor(QWidget *parent,
         m_contentLayout->addWidget(m_valueBox);
         m_contentLayout->addWidget(m_slider);
 
+        ModelMapper *mapper = new ModelMapper(m_contentWidget);
+        mapper->setItem(m_currentItem);
+        mapper->setOnValueChange(
+                    [this](){
+            m_valueBox->setValue(m_currentItem->value().toDouble());
+        });
+
         m_contentWidget->setLayout(m_contentLayout);
 
         return m_contentWidget;
@@ -270,10 +279,7 @@ void ModelTuningDelegate::emitSignals(double value)
 {
     if(m_currentItem) {
         m_currentItem->setValue(value);
-        QString link = m_currentItem->getItemValue(ParameterItem::P_LINK).toString();
-        SessionItem *item = m_currentItem->model()->itemForIndex(ModelPath::getIndexFromPath(m_currentItem->model(), link));
-        if (item)
-            item->setValue(m_currentItem->value());
+        m_currentItem->propagateValueLink();
         //qDebug() << "SampleTuningDelegate::editorValueChanged() -> Working on item " << m_current_link.getItem()->modelType() << m_current_link.getPropertyName();
         //m_current_link.getItem()->setRegisteredProperty(m_current_link.getPropertyName(), m_valueBox->value());
         emit currentLinkChanged(m_currentItem);
diff --git a/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.h b/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.h
index 6c172b782d4441247f0bc4fcb7a3204174d62239..d219396301e659f36172816338baa1ff945b1f9e 100644
--- a/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.h
+++ b/GUI/coregui/Views/JobWidgets/ModelTuningDelegate.h
@@ -23,6 +23,7 @@
 
 class QDoubleSpinBox;
 class QHBoxLayout;
+class ParameterItem;
 
 class BA_CORE_API_ ModelTuningDelegate : public QItemDelegate
 {
@@ -81,7 +82,7 @@ private:
     mutable QWidget *m_contentWidget;
     mutable QHBoxLayout * m_contentLayout;
     mutable ItemLink m_current_link;
-    mutable SessionItem *m_currentItem;
+    mutable ParameterItem *m_currentItem;
     mutable SliderData m_slider_data;
 };
 
diff --git a/GUI/coregui/Views/JobWidgets/ModelTuningWidget.cpp b/GUI/coregui/Views/JobWidgets/ModelTuningWidget.cpp
index 7b500d8dfe28ec838edecaf6da375b8277ab769c..e5ffeb23bac322abdf751384e63c528070d9f2ea 100644
--- a/GUI/coregui/Views/JobWidgets/ModelTuningWidget.cpp
+++ b/GUI/coregui/Views/JobWidgets/ModelTuningWidget.cpp
@@ -35,6 +35,8 @@
 #include <QToolButton>
 #include <QDebug>
 #include <QScrollBar>
+#include <QApplication>
+#include <QKeyEvent>
 
 namespace {
 const int warning_sign_xpos = 38;
@@ -168,7 +170,8 @@ void ModelTuningWidget::updateParameterModel()
     proxy->setSourceModel(m_jobModel);
     m_treeView->setModel(proxy);
     m_treeView->setRootIndex(proxy->mapFromSource(m_currentJobItem->getItem(JobItem::T_PARAMETER_TREE)->index()));
-    m_treeView->setColumnWidth(0, 240);
+    if (m_treeView->columnWidth(0) < 170)
+        m_treeView->setColumnWidth(0, 170);
     m_treeView->expandAll();
 }
 
@@ -191,7 +194,7 @@ void ModelTuningWidget::restoreModelsOfCurrentJobItem()
 
     m_jobModel->restore(m_currentJobItem);
 
-    updateParameterModel();
+//    updateParameterModel();
 
     m_jobModel->getJobQueueData()->runJob(m_currentJobItem);
 }
diff --git a/GUI/coregui/Views/JobWidgets/ModelTuningWidget.h b/GUI/coregui/Views/JobWidgets/ModelTuningWidget.h
index 554e4df127cb86a24f3b0f90efb5e61de9cd40b8..40d1f2457c398b30a290bcad8fcdc420da916c3d 100644
--- a/GUI/coregui/Views/JobWidgets/ModelTuningWidget.h
+++ b/GUI/coregui/Views/JobWidgets/ModelTuningWidget.h
@@ -52,9 +52,9 @@ protected:
 
 private slots:
     void onPropertyChanged(const QString &property_name);
+    void updateParameterModel();
 
 private:
-    void updateParameterModel();
     void backupModels();
     QPoint getPositionForWarningSign();
 
diff --git a/GUI/coregui/mainwindow/mainwindow.cpp b/GUI/coregui/mainwindow/mainwindow.cpp
index 40d987b73198db8ea9f22874966f8f2c74417eb2..e3d80dca7d560c999347433466848a021f45f4cb 100644
--- a/GUI/coregui/mainwindow/mainwindow.cpp
+++ b/GUI/coregui/mainwindow/mainwindow.cpp
@@ -311,7 +311,7 @@ void MainWindow::resetModels()
     m_materialModel->addMaterial("Substrate", 6e-6, 2e-8);
 
     m_sampleModel->clear();
-    //testGUIObjectBuilder();
+    testGUIObjectBuilder();
 
     m_jobModel->clear();
 
diff --git a/GUI/coregui/mainwindow/projectdocument.cpp b/GUI/coregui/mainwindow/projectdocument.cpp
index 7aa32593a838e872b82aabda9fc1a53ea92829e4..88406c26dffddb58d836a59cb6cee28a8a257bce 100644
--- a/GUI/coregui/mainwindow/projectdocument.cpp
+++ b/GUI/coregui/mainwindow/projectdocument.cpp
@@ -302,6 +302,7 @@ void ProjectDocument::readFrom(QIODevice *device)
     connectModel(m_instrumentModel);
     connectModel(m_sampleModel);
     connectModel(m_jobModel);
+    m_jobModel->modelLoaded();
     //connectModel(m_fitModel);
 }