diff --git a/GUI/coregui/Models/IntensityDataItem.h b/GUI/coregui/Models/IntensityDataItem.h
index 51d5df25f7ddacfd72b5b0d3dd76d93fd4816cb5..5a9077328ce0909b58b07bc71b0a5bb53c6a590f 100644
--- a/GUI/coregui/Models/IntensityDataItem.h
+++ b/GUI/coregui/Models/IntensityDataItem.h
@@ -42,6 +42,7 @@ public:
     explicit IntensityDataItem(ParameterizedItem *parent=0);
     virtual ~IntensityDataItem();
 
+    OutputData<double> *getOutputData() { return m_data.get(); }
     const OutputData<double> *getOutputData() const { return m_data.get(); }
     void setOutputData(OutputData<double> *data);
 
diff --git a/GUI/coregui/Models/JobItem.cpp b/GUI/coregui/Models/JobItem.cpp
index 9dca64b6d29cdf9d3835c528b5f47e324db25ab7..74a4528e97ab434df491b46662a0b37f189632ea 100644
--- a/GUI/coregui/Models/JobItem.cpp
+++ b/GUI/coregui/Models/JobItem.cpp
@@ -124,12 +124,11 @@ void JobItem::setStatus(const QString &status)
     combo_property.setValue(status);
     setRegisteredProperty(P_STATUS, combo_property.getVariant());
     if(status == Constants::STATUS_FAILED) {
-        Q_ASSERT(0);
-//        if(IntensityDataItem *intensityItem = getIntensityDataItem()) {
-//            if(intensityItem->getOutputData())
-//                intensityItem->getOutputData()->setAllTo(0.0);
-//                emit intensityItem->intensityModified();
-//        }
+        if(IntensityDataItem *intensityItem = getIntensityDataItem()) {
+            if(intensityItem->getOutputData())
+                intensityItem->getOutputData()->setAllTo(0.0);
+                emit intensityItem->intensityModified();
+        }
     }
 }
 
@@ -259,6 +258,8 @@ InstrumentItem *JobItem::getInstrumentItem(bool from_backup)
 void JobItem::setResults(const GISASSimulation *simulation)
 {
     IntensityDataItem *intensityItem = getIntensityDataItem();
+    Q_ASSERT(intensityItem);
+
     JobResultsPresenter::setResults(intensityItem, simulation);
 
 
diff --git a/GUI/coregui/Models/JobQueueData.cpp b/GUI/coregui/Models/JobQueueData.cpp
index 8da5bd77d90561147905ed1ea90f91b645c0d90b..18d817988a66b6b33fc40ae6f00928325c1ea573 100644
--- a/GUI/coregui/Models/JobQueueData.cpp
+++ b/GUI/coregui/Models/JobQueueData.cpp
@@ -212,11 +212,9 @@ void JobQueueData::onFinishedJob()
     jobItem->setStatus(runner->getStatus());
     if(jobItem->isFailed()) {
         jobItem->setComments(runner->getFailureMessage());
-        delete getSimulation(runner->getIdentifier());
     } else {
         // propagating simulation results
         GISASSimulation *simulation = getSimulation(runner->getIdentifier());
-//        setResults(jobItem, simulation);
         jobItem->setResults(simulation);
     }
 
@@ -317,7 +315,7 @@ void JobQueueData::assignForDeletion(JobRunner *runner)
 
 void JobQueueData::clearSimulation(const QString &identifier)
 {
-//    GISASSimulation *simulation = getSimulation(identifier);
+    GISASSimulation *simulation = getSimulation(identifier);
     m_simulations.remove(identifier);
-    // delete simulation; now owned by IntensityDataItem
+    delete simulation;
 }
diff --git a/GUI/coregui/Models/JobResultsPresenter.cpp b/GUI/coregui/Models/JobResultsPresenter.cpp
index 0d03a676a290bf85b8360cbd3fbd42d4d62b0300..8c7eba4291fc3464c03325d397db2b295eb9b041 100644
--- a/GUI/coregui/Models/JobResultsPresenter.cpp
+++ b/GUI/coregui/Models/JobResultsPresenter.cpp
@@ -25,10 +25,13 @@
 #include "GUIHelpers.h"
 #include "JobItem.h"
 #include "IntensityDataIOFactory.h"
+#include <QFileInfo>
 #include <QDebug>
 
-namespace {
-QMap<QString, IDetector2D::EAxesUnits> init_units_to_description_map() {
+namespace
+{
+QMap<QString, IDetector2D::EAxesUnits> init_units_to_description_map()
+{
     QMap<QString, IDetector2D::EAxesUnits> result;
     result[Constants::UnitsNbins] = IDetector2D::NBINS;
     result[Constants::UnitsRadians] = IDetector2D::RADIANS;
@@ -38,7 +41,8 @@ QMap<QString, IDetector2D::EAxesUnits> init_units_to_description_map() {
     return result;
 }
 
-QMap<IDetector2D::EAxesUnits, QString> init_description_to_units_map() {
+QMap<IDetector2D::EAxesUnits, QString> init_description_to_units_map()
+{
     QMap<IDetector2D::EAxesUnits, QString> result;
     result[IDetector2D::NBINS] = Constants::UnitsNbins;
     result[IDetector2D::RADIANS] = Constants::UnitsRadians;
@@ -47,27 +51,27 @@ QMap<IDetector2D::EAxesUnits, QString> init_description_to_units_map() {
     result[IDetector2D::QYQZ] = Constants::UnitsQyQz;
     return result;
 }
-
-
 }
 
-
 // -------------------------------------------------------------------------------------------------
 
 QMap<QString, IDetector2D::EAxesUnits> JobResultsPresenter::m_name_to_units
-= init_units_to_description_map();
+    = init_units_to_description_map();
 
 QMap<IDetector2D::EAxesUnits, QString> JobResultsPresenter::m_units_to_name
-= init_description_to_units_map();
+    = init_description_to_units_map();
 
-void JobResultsPresenter::setResults(IntensityDataItem *intensityItem, const GISASSimulation *simulation)
+void JobResultsPresenter::setResults(IntensityDataItem *intensityItem,
+                                     const GISASSimulation *simulation)
 {
     const IDetector2D *detector = simulation->getInstrument().getDetector();
 
     initIntensityItemProperties(intensityItem, detector);
 
-    IDetector2D::EAxesUnits selected_units = getAxesUnitsFromName(intensityItem->getSelectedAxesUnits());
+    IDetector2D::EAxesUnits selected_units
+        = getAxesUnitsFromName(intensityItem->getSelectedAxesUnits());
     intensityItem->setOutputData(simulation->getDetectorIntensity(selected_units));
+    updateAxesTitle(intensityItem);
 }
 
 //! Updates axes of OutputData in IntensityData item to correspond
@@ -79,9 +83,11 @@ void JobResultsPresenter::updateDataAxes(IntensityDataItem *intensityItem,
     Q_ASSERT(intensityItem);
     Q_ASSERT(instrumentItem);
 
-    if(!intensityItem->getOutputData()) return;
+    if (!intensityItem->getOutputData())
+        return;
 
-    IDetector2D::EAxesUnits requested_units = getAxesUnitsFromName(intensityItem->getSelectedAxesUnits());
+    IDetector2D::EAxesUnits requested_units
+        = getAxesUnitsFromName(intensityItem->getSelectedAxesUnits());
 
     OutputData<double> *newData = createDetectorMap(instrumentItem, requested_units);
     newData->setRawDataVector(intensityItem->getOutputData()->getRawDataVector());
@@ -100,12 +106,51 @@ void JobResultsPresenter::saveIntensityData(JobItem *jobItem, const QString &pro
         QString filename = projectDir + QStringLiteral("/") + dataItem->itemName();
 
         std::unique_ptr<OutputData<double>> dataToSave(
-            createDetectorMap(jobItem->getInstrumentItem()));
+            createDetectorMap(jobItem->getInstrumentItem(), IDetector2D::DEFAULT));
         dataToSave->setRawDataVector(dataItem->getOutputData()->getRawDataVector());
         IntensityDataIOFactory::writeOutputData(*dataToSave, filename.toStdString());
     }
 }
 
+//! Loads intensityData from project directory
+//! IntensityDataItem will be initialized to match last selected axes
+void JobResultsPresenter::loadIntensityData(JobItem *jobItem, const QString &projectDir)
+{
+    IntensityDataItem *intensityItem = jobItem->getIntensityDataItem();
+    if (intensityItem) {
+        QString filename = projectDir + "/" + intensityItem->itemName();
+        QFileInfo info(filename);
+        if (info.exists()) {
+            IntensityDataItem *intensityItem = jobItem->getIntensityDataItem();
+
+            if (intensityItem) {
+                DomainObjectBuilder builder;
+                auto instrument = builder.buildInstrument(*jobItem->getInstrumentItem());
+                instrument->initDetector();
+                initIntensityItemProperties(intensityItem, instrument->getDetector());
+
+                std::unique_ptr<OutputData<double>> rawData(
+                    IntensityDataIOFactory::readOutputData(filename.toStdString()));
+
+                IDetector2D::EAxesUnits requested_units
+                    = getAxesUnitsFromName(intensityItem->getSelectedAxesUnits());
+
+                OutputData<double> *result = instrument->getDetector()->createDetectorMap(
+                    instrument->getBeam(), requested_units);
+
+                result->setRawDataVector(rawData->getRawDataVector());
+                intensityItem->setOutputData(result);
+            }
+        } else {
+            jobItem->setStatus(Constants::STATUS_FAILED);
+            QString warning("Error while loading job from file, intensity data file '");
+            warning.append(filename);
+            warning.append("' was not found");
+            jobItem->setComments(warning);
+        }
+    }
+}
+
 QString JobResultsPresenter::getNameFromAxesUnits(IDetector2D::EAxesUnits units)
 {
     return m_units_to_name[units];
@@ -116,7 +161,6 @@ IDetector2D::EAxesUnits JobResultsPresenter::getAxesUnitsFromName(const QString
     return m_name_to_units[name];
 }
 
-
 // Converts detector default axes units into units most suitable for GUI
 // SphericalDetector's default units (RADIANS) will be converted to DEGREES
 // RectangularDetector's default units (MM) will remain the same
@@ -132,49 +176,47 @@ JobResultsPresenter::preferableGUIAxesUnits(IDetector2D::EAxesUnits default_unit
 }
 
 //! inits properties of IntensityDataItem for the case of selectable axes units
-//! If P_AXES_UNITS is empty, it will be initialized to match the detector
 void JobResultsPresenter::initIntensityItemProperties(IntensityDataItem *intensityItem,
                                                       const IDetector2D *detector)
 {
-    // selectable units
     ComboProperty combo = intensityItem->getRegisteredProperty(IntensityDataItem::P_AXES_UNITS)
-            .value<ComboProperty>();
+                              .value<ComboProperty>();
 
-    if(combo.getValues().isEmpty()) {
-        intensityItem->getPropertyAttribute(IntensityDataItem::P_AXES_UNITS).setVisible();
+    QString cachedUnits = combo.getCachedValue();
 
-        foreach (auto units, detector->getValidAxesUnits()) {
-            combo << getNameFromAxesUnits(units);
-        }
+    intensityItem->getPropertyAttribute(IntensityDataItem::P_AXES_UNITS).setVisible();
+
+    foreach (auto units, detector->getValidAxesUnits()) {
+        combo << getNameFromAxesUnits(units);
+    }
+
+    if (cachedUnits.isEmpty()) {
         IDetector2D::EAxesUnits preferrable_units
             = preferableGUIAxesUnits(detector->getDefaultAxesUnits());
-
         combo.setValue(getNameFromAxesUnits(preferrable_units));
-        intensityItem->setRegisteredProperty(IntensityDataItem::P_AXES_UNITS, combo.getVariant());
+    } else {
+        combo.setValue(cachedUnits);
     }
 
+    intensityItem->setRegisteredProperty(IntensityDataItem::P_AXES_UNITS, combo.getVariant());
 }
 
 void JobResultsPresenter::updateAxesTitle(IntensityDataItem *intensityItem)
 {
     // axes labels
-    if(intensityItem->getSelectedAxesUnits() == Constants::UnitsRadians) {
+    if (intensityItem->getSelectedAxesUnits() == Constants::UnitsRadians) {
         intensityItem->setXaxisTitle("phi_f [rad]");
         intensityItem->setYaxisTitle("alpha_f [rad]");
-    }
-    else if(intensityItem->getSelectedAxesUnits() == Constants::UnitsDegrees) {
+    } else if (intensityItem->getSelectedAxesUnits() == Constants::UnitsDegrees) {
         intensityItem->setXaxisTitle("phi_f [deg]");
         intensityItem->setYaxisTitle("alpha_f [deg]");
-    }
-    else if(intensityItem->getSelectedAxesUnits() == Constants::UnitsQyQz) {
+    } else if (intensityItem->getSelectedAxesUnits() == Constants::UnitsQyQz) {
         intensityItem->setXaxisTitle("Qy");
         intensityItem->setYaxisTitle("Qz");
-    }
-    else if(intensityItem->getSelectedAxesUnits() == Constants::UnitsMm) {
+    } else if (intensityItem->getSelectedAxesUnits() == Constants::UnitsMm) {
         intensityItem->setXaxisTitle("X [mm]");
         intensityItem->setYaxisTitle("Y [mm]");
-    }
-    else if(intensityItem->getSelectedAxesUnits() == Constants::UnitsNbins) {
+    } else if (intensityItem->getSelectedAxesUnits() == Constants::UnitsNbins) {
         intensityItem->setXaxisTitle("X [nbins]");
         intensityItem->setYaxisTitle("Y [nbins]");
     }
@@ -188,17 +230,16 @@ OutputData<double> *JobResultsPresenter::createDetectorMap(const InstrumentItem
     auto instrument = builder.buildInstrument(*instrumentItem);
     instrument->initDetector();
 
-    if(units == IDetector2D::DEFAULT)
+    if (units == IDetector2D::DEFAULT)
         units = instrument->getDetector()->getDefaultAxesUnits();
 
-    OutputData<double> *result = instrument->getDetector()
-            ->createDetectorMap(instrument->getBeam(), units);
+    OutputData<double> *result
+        = instrument->getDetector()->createDetectorMap(instrument->getBeam(), units);
 
-    if(!result) {
+    if (!result) {
         throw GUIHelpers::Error("JobResultsPresenter::createDetectorMap -> Error. "
                                 "Can't create detector map.");
     }
 
     return result;
 }
-
diff --git a/GUI/coregui/Models/JobResultsPresenter.h b/GUI/coregui/Models/JobResultsPresenter.h
index 5f3098e0be1a26367509cb9bd172f291d3c8f250..20e1852ec38782518f1646b00ca45115fc1e9be4 100644
--- a/GUI/coregui/Models/JobResultsPresenter.h
+++ b/GUI/coregui/Models/JobResultsPresenter.h
@@ -42,6 +42,9 @@ public:
     //! saves intensity data into project directory
     static void saveIntensityData(JobItem *jobItem, const QString &projectDir);
 
+    //! load intensity data from project directory
+    static void loadIntensityData(JobItem *jobItem, const QString &projectDir);
+
 private:
     //! returns axes units names from their domain counterpart
     static QString getNameFromAxesUnits(IDetector2D::EAxesUnits units);
@@ -57,7 +60,7 @@ private:
     static void updateAxesTitle(IntensityDataItem *intensityItem);
 
     static OutputData<double> *createDetectorMap(const InstrumentItem *instrumentItem,
-                                                 IDetector2D::EAxesUnits units = IDetector2D::DEFAULT);
+                                                 IDetector2D::EAxesUnits units);
 
     //!< correspondance of GUI axes units names to their domain counterpart
     static QMap<QString, IDetector2D::EAxesUnits> m_name_to_units;
diff --git a/GUI/coregui/mainwindow/projectdocument.cpp b/GUI/coregui/mainwindow/projectdocument.cpp
index 1552c45de35e9e050b6f9996215c1717d7a0e8fa..861683781388b08f2349470aed709f8964d648b3 100644
--- a/GUI/coregui/mainwindow/projectdocument.cpp
+++ b/GUI/coregui/mainwindow/projectdocument.cpp
@@ -353,18 +353,7 @@ void ProjectDocument::saveOutputData()
     Q_ASSERT(m_jobModel);
     for (int i = 0; i < m_jobModel->rowCount(QModelIndex()); ++i) {
         JobItem *jobItem = m_jobModel->getJobItemForIndex(m_jobModel->index(i, 0, QModelIndex()));
-
         JobResultsPresenter::saveIntensityData(jobItem, getProjectDir());
-
-//        IntensityDataItem *dataItem = jobItem->getIntensityDataItem();
-//        if (dataItem) {
-//            QString filename = getProjectDir() + "/" + dataItem->itemName();
-//            const OutputData<double> *data = dataItem->getOutputData();
-//            if (data) {
-//                IntensityDataIOFactory::writeOutputData(*data, filename.toStdString());
-//            }
-//        }
-
     }
 }
 
@@ -373,24 +362,7 @@ void ProjectDocument::loadOutputData()
 {
     for (int i = 0; i < m_jobModel->rowCount(QModelIndex()); ++i) {
         JobItem *jobItem = m_jobModel->getJobItemForIndex(m_jobModel->index(i, 0, QModelIndex()));
-        IntensityDataItem *dataItem = jobItem->getIntensityDataItem();
-        if (dataItem) {
-            QString filename = getProjectDir() + "/" + dataItem->itemName();
-            QFileInfo info(filename);
-            if (info.exists()) {
-                IntensityDataItem *intensityItem = jobItem->getIntensityDataItem();
-                if(intensityItem) {
-                    intensityItem->setOutputData(
-                        IntensityDataIOFactory::readOutputData(filename.toStdString()));
-                }
-            } else {
-                jobItem->setStatus(Constants::STATUS_FAILED);
-                QString warning("Error while loading job from file, intensity data file '");
-                warning.append(filename);
-                warning.append("' was not found");
-                jobItem->setComments(warning);
-            }
-        }
+        JobResultsPresenter::loadIntensityData(jobItem, getProjectDir());
     }
 }