diff --git a/GUI/Model/Job/FitSuiteItem.cpp b/GUI/Model/Job/FitSuiteItem.cpp
index f1df138e0ff43174167ab6a1700e1d0cf1bb0d53..d785664538bc5d28880015f4f4bec1c0fb5efeb8 100644
--- a/GUI/Model/Job/FitSuiteItem.cpp
+++ b/GUI/Model/Job/FitSuiteItem.cpp
@@ -41,8 +41,7 @@ const QString value("value");
 } // namespace
 
 FitSuiteItem::FitSuiteItem()
-    : SessionItem(M_TYPE)
-    , m_updateInterval(10)
+    : m_updateInterval(10)
     , m_iterCount(0)
     , m_chi2(0.0)
 {
@@ -111,7 +110,7 @@ void FitSuiteItem::setChi2(const double chi2)
     m_chi2 = chi2;
 }
 
-void FitSuiteItem::writeNonSessionItems(QXmlStreamWriter* writer) const
+void FitSuiteItem::writeTo(QXmlStreamWriter* writer) const
 {
     // update interval
     writer->writeStartElement(Tag::UpdateInterval);
@@ -143,7 +142,7 @@ void FitSuiteItem::writeNonSessionItems(QXmlStreamWriter* writer) const
     }
 }
 
-void FitSuiteItem::readNonSessionItems(QXmlStreamReader* reader)
+void FitSuiteItem::readFrom(QXmlStreamReader* reader)
 {
     while (reader->readNextStartElement()) {
 
diff --git a/GUI/Model/Job/FitSuiteItem.h b/GUI/Model/Job/FitSuiteItem.h
index a0be3e4e3d67d1165874f706d90625aa2844f854..de56d512bdedf8b1fc114da9d1d07bed1f05dee7 100644
--- a/GUI/Model/Job/FitSuiteItem.h
+++ b/GUI/Model/Job/FitSuiteItem.h
@@ -15,17 +15,14 @@
 #ifndef BORNAGAIN_GUI_MODEL_JOB_FITSUITEITEM_H
 #define BORNAGAIN_GUI_MODEL_JOB_FITSUITEITEM_H
 
-#include "GUI/Model/BaseItem/SessionItem.h"
-#include "GUI/Model/Job/FitParameterContainerItem.h"
+#include <QXmlStreamReader>
 
 class FitParameterContainerItem;
 class MinimizerContainerItem;
 
-class BA_CORE_API_ FitSuiteItem : public QObject, public SessionItem {
+class FitSuiteItem : public QObject {
     Q_OBJECT
 public:
-    static constexpr auto M_TYPE{"FitSuite"};
-
     explicit FitSuiteItem();
 
     FitParameterContainerItem* createFitParametersContainer();
@@ -43,8 +40,8 @@ public:
     double chi2() const;
     void setChi2(double chi2);
 
-    void writeNonSessionItems(QXmlStreamWriter* writer) const override;
-    void readNonSessionItems(QXmlStreamReader* reader) override;
+    void writeTo(QXmlStreamWriter* writer) const;
+    void readFrom(QXmlStreamReader* reader);
 
 signals:
     void iterationCountChanged(int count);
diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp
index 31e4365aa5d906946cd3dd6cff83dac0e381dcdb..02bba403e3ecd4f615cbab0e7a0f57f7c245fbd1 100644
--- a/GUI/Model/Job/JobItem.cpp
+++ b/GUI/Model/Job/JobItem.cpp
@@ -310,7 +310,6 @@ FitSuiteItem* JobItem::createFitSuiteItem()
                     "a second FitSuiteItem.");
 
     m_fitSuiteItem = std::make_unique<FitSuiteItem>();
-    m_fitSuiteItem->setParentAndModel(this, model());
     return m_fitSuiteItem.get();
 }
 
@@ -538,7 +537,7 @@ void JobItem::writeTo(QXmlStreamWriter* writer) const
     // fit suite
     if (m_fitSuiteItem) {
         writer->writeStartElement(Tag::FitSuite);
-        GUI::Session::XML::writeItemAndChildItems(writer, m_fitSuiteItem.get());
+        m_fitSuiteItem->writeTo(writer);
         writer->writeEndElement();
     }
 }
@@ -643,7 +642,10 @@ void JobItem::readFrom(QXmlStreamReader* reader)
 
             // fit suite
         } else if (reader->name() == Tag::FitSuite) {
-            m_fitSuiteItem.reset(readItemToEnd<FitSuiteItem>(reader, this, Tag::FitSuite));
+            if(!m_fitSuiteItem)
+                createFitSuiteItem();
+            m_fitSuiteItem->readFrom(reader);
+            GUI::Session::XML::gotoEndElementOfTag(reader, Tag::FitSuite);
 
         } else {
             reader->skipCurrentElement();
diff --git a/GUI/Model/Job/MinimizerItem.cpp b/GUI/Model/Job/MinimizerItem.cpp
index bd07440dd45508786c62ba957da19d37905ab86d..8614f565e93b18c6b0f067f9f75391e0d81d2401 100644
--- a/GUI/Model/Job/MinimizerItem.cpp
+++ b/GUI/Model/Job/MinimizerItem.cpp
@@ -12,13 +12,14 @@
 //
 //  ************************************************************************************************
 
-#include "GUI/Model/Job/MinimizerItem.h"
+#include "Base/Util/Assert.h"
 #include "Fit/Adapter/GSLLevenbergMarquardtMinimizer.h"
 #include "Fit/Adapter/GSLMultiMinimizer.h"
 #include "Fit/Adapter/GeneticMinimizer.h"
 #include "Fit/Adapter/Minuit2Minimizer.h"
 #include "Fit/Adapter/SimAnMinimizer.h"
 #include "GUI/Model/CatJob/MinimizerItemCatalog.h"
+#include "GUI/Model/Job/MinimizerItem.h"
 #include "GUI/Support/XML/UtilXML.h"
 #include "Sim/Fitting/ObjectiveMetric.h"
 #include "Sim/Fitting/ObjectiveMetricUtils.h"
@@ -141,8 +142,7 @@ void create_algorithm_list_and_map(QString& default_common_algorithm, QStringLis
 } // namespace
 
 MinimizerContainerItem::MinimizerContainerItem()
-    : SessionItem(M_TYPE)
-    , m_MinuitMinimizer(std::make_unique<MinuitMinimizerItem>())
+    : m_MinuitMinimizer(std::make_unique<MinuitMinimizerItem>())
     , m_GSLMultiMinimizer(std::make_unique<GSLMultiMinimizerItem>())
     , m_GeneticMinimizer(std::make_unique<GeneticMinimizerItem>())
     , m_SimAnMinimizer(std::make_unique<SimAnMinimizerItem>())
@@ -407,16 +407,6 @@ void MinimizerContainerItem::readFrom(QXmlStreamReader* reader)
     }
 }
 
-void MinimizerContainerItem::writeNonSessionItems(QXmlStreamWriter* writer) const
-{
-    writeTo(writer);
-}
-
-void MinimizerContainerItem::readNonSessionItems(QXmlStreamReader* reader)
-{
-    readFrom(reader);
-}
-
 // ----------------------------------------------------------------------------
 
 MinuitMinimizerItem::MinuitMinimizerItem()
diff --git a/GUI/Model/Job/MinimizerItem.h b/GUI/Model/Job/MinimizerItem.h
index 1047c2b69884a85c145acc8629cfec40116e9126..d06d3b718276477aa28771c9e380156b205c3954 100644
--- a/GUI/Model/Job/MinimizerItem.h
+++ b/GUI/Model/Job/MinimizerItem.h
@@ -15,7 +15,6 @@
 #ifndef BORNAGAIN_GUI_MODEL_JOB_MINIMIZERITEM_H
 #define BORNAGAIN_GUI_MODEL_JOB_MINIMIZERITEM_H
 
-#include "GUI/Model/BaseItem/SessionItem.h"
 #include "GUI/Util/ComboProperty.h"
 
 class IMinimizer;
@@ -28,7 +27,7 @@ QString minimizerTypeToName(MinimizerType type);
 
 //! Base class to store minimizer settings.
 
-class BA_CORE_API_ MinimizerItem {
+class MinimizerItem {
 public:
     virtual ~MinimizerItem() = default;
 
@@ -46,10 +45,8 @@ class GeneticMinimizerItem;
 class MinuitMinimizerItem;
 class SimAnMinimizerItem;
 
-class MinimizerContainerItem : public MinimizerItem, public SessionItem {
+class MinimizerContainerItem : public MinimizerItem {
 public:
-    static constexpr auto M_TYPE{"MinimizerContainer"};
-
     MinimizerContainerItem();
     ~MinimizerContainerItem() override;
 
@@ -85,9 +82,6 @@ public:
     void writeTo(QXmlStreamWriter* writer) const override;
     void readFrom(QXmlStreamReader* reader) override;
 
-    void writeNonSessionItems(QXmlStreamWriter* writer) const override;
-    void readNonSessionItems(QXmlStreamReader* reader) override;
-
 private:
     // hold them all for storing their internal settings.
     std::unique_ptr<MinuitMinimizerItem> m_MinuitMinimizer;
diff --git a/GUI/Model/MakeItem/ItemCatalog.cpp b/GUI/Model/MakeItem/ItemCatalog.cpp
index c50f7163d3303c28f0ef04559db16654e63b5e80..4cd328789c94804e11a4111fd96a978e3df19d76 100644
--- a/GUI/Model/MakeItem/ItemCatalog.cpp
+++ b/GUI/Model/MakeItem/ItemCatalog.cpp
@@ -48,12 +48,8 @@ ItemCatalog::ItemCatalog()
 
     addItem<RegionOfInterestItem>();
 
-    addItem<FitSuiteItem>();
-
     addItem<RealItem>();
 
-    addItem<MinimizerContainerItem>();
-
     addItem<ProjectionContainerItem>();
 }
 
diff --git a/Tests/Unit/GUI/TestFitParameterModel.cpp b/Tests/Unit/GUI/TestFitParameterModel.cpp
index bdeec6dc656d9e7ec3aedf88349a4fa83085d7ce..8899e93926a665346e1f22fa0cd85598fae8cad9 100644
--- a/Tests/Unit/GUI/TestFitParameterModel.cpp
+++ b/Tests/Unit/GUI/TestFitParameterModel.cpp
@@ -4,18 +4,17 @@
 #include "GUI/Model/Job/FitSuiteItem.h"
 #include "GUI/Model/Job/MinimizerItem.h"
 #include "GUI/Model/Model/FitParameterModel.h"
-#include "GUI/Model/Model/JobModel.h"
+#include "GUI/Model/Job/FitSuiteItem.h"
 #include "Tests/GTestWrapper/google_test.h"
 
 class TestFitParameterModel : public ::testing::Test {};
 
 TEST_F(TestFitParameterModel, InitialState)
 {
-    JobModel source;
     JobItem* jobItem = nullptr;
+    FitSuiteItem fitSuiteItem;
 
-    auto* fitSuiteItem = source.insertItem<FitSuiteItem>();
-    auto* container = fitSuiteItem->createFitParametersContainer();
+    auto* container = fitSuiteItem.createFitParametersContainer();
     FitParameterModel proxy(dynamic_cast<FitParameterContainerItem*>(container), jobItem);
 
     EXPECT_EQ(0, proxy.rowCount(QModelIndex()));
@@ -25,10 +24,9 @@ TEST_F(TestFitParameterModel, InitialState)
 
 TEST_F(TestFitParameterModel, addFitParameter)
 {
-    JobModel source;
     JobItem* jobItem = nullptr;
-    auto* fitSuiteItem = source.insertItem<FitSuiteItem>();
-    auto* container = fitSuiteItem->createFitParametersContainer();
+    FitSuiteItem fitSuiteItem;
+    auto* container = fitSuiteItem.createFitParametersContainer();
     FitParameterModel proxy(dynamic_cast<FitParameterContainerItem*>(container), jobItem);
 
     // adding fit parameter
@@ -122,10 +120,9 @@ TEST_F(TestFitParameterModel, addFitParameter)
 
 TEST_F(TestFitParameterModel, addFitParameterAndLink)
 {
-    JobModel source;
     JobItem* jobItem = nullptr;
-    auto* fitSuiteItem = source.insertItem<FitSuiteItem>();
-    auto* container = fitSuiteItem->createFitParametersContainer();
+    FitSuiteItem fitSuiteItem;
+    auto* container = fitSuiteItem.createFitParametersContainer();
     FitParameterModel proxy(dynamic_cast<FitParameterContainerItem*>(container), jobItem);
 
     // adding fit parameter
@@ -183,10 +180,9 @@ TEST_F(TestFitParameterModel, addFitParameterAndLink)
 
 TEST_F(TestFitParameterModel, addTwoFitParameterAndLinks)
 {
-    JobModel source;
     JobItem* jobItem = nullptr;
-    auto* fitSuiteItem = source.insertItem<FitSuiteItem>();
-    auto* container = fitSuiteItem->createFitParametersContainer();
+    FitSuiteItem fitSuiteItem;
+    auto* container = fitSuiteItem.createFitParametersContainer();
     FitParameterModel proxy(dynamic_cast<FitParameterContainerItem*>(container), jobItem);
 
     // adding fit parameters