diff --git a/GUI/coregui/Models/DomainObjectBuilder.cpp b/GUI/coregui/Models/DomainObjectBuilder.cpp
index 0e3d99f27cb32097ac76f7e3b2b4743c3c7f7172..b2ef69b127072d79b81083b81560725d068b377a 100644
--- a/GUI/coregui/Models/DomainObjectBuilder.cpp
+++ b/GUI/coregui/Models/DomainObjectBuilder.cpp
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
 //! @file      GUI/coregui/Models/DomainObjectBuilder.cpp
-//! @brief     Implements class DomainObjectBuilder
+//! @brief     Implements DomainObjectBuilder namespace
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -15,25 +15,18 @@
 #include "DomainObjectBuilder.h"
 #include "BeamItem.h"
 #include "ComboProperty.h"
-#include "DetectorItems.h"
-#include "GISASSimulation.h"
 #include "GUIHelpers.h"
-#include "IInterferenceFunction.h"
-#include "Instrument.h"
 #include "InstrumentItems.h"
 #include "InterferenceFunctionItems.h"
 #include "LayerItem.h"
-#include "MultiLayer.h"
 #include "ParticleDistributionItem.h"
 #include "ParticleLayoutItem.h"
 #include "TransformToDomain.h"
 
-
-std::unique_ptr<MultiLayer> DomainObjectBuilder::buildMultiLayer(
-    const SessionItem& multilayer_item) const
+std::unique_ptr<MultiLayer> DomainObjectBuilder::buildMultiLayer(const SessionItem& multilayer_item)
 {
     auto P_multilayer = TransformToDomain::createMultiLayer(multilayer_item);
-    QVector<SessionItem *> children = multilayer_item.children();
+    QVector<SessionItem*> children = multilayer_item.children();
     for (int i = 0; i < children.size(); ++i) {
         if (children[i]->modelType() == Constants::LayerType) {
             auto P_layer = buildLayer(*children[i]);
@@ -52,10 +45,10 @@ std::unique_ptr<MultiLayer> DomainObjectBuilder::buildMultiLayer(
     return P_multilayer;
 }
 
-std::unique_ptr<Layer> DomainObjectBuilder::buildLayer(const SessionItem& item) const
+std::unique_ptr<Layer> DomainObjectBuilder::buildLayer(const SessionItem& item)
 {
     auto P_layer = TransformToDomain::createLayer(item);
-    QVector<SessionItem *> children = item.children();
+    QVector<SessionItem*> children = item.children();
     for (int i = 0; i < children.size(); ++i) {
         if (children[i]->modelType() == Constants::ParticleLayoutType) {
             auto P_layout = buildParticleLayout(*children[i]);
@@ -67,11 +60,10 @@ std::unique_ptr<Layer> DomainObjectBuilder::buildLayer(const SessionItem& item)
     return P_layer;
 }
 
-std::unique_ptr<ParticleLayout> DomainObjectBuilder::buildParticleLayout(
-        const SessionItem& item) const
+std::unique_ptr<ParticleLayout> DomainObjectBuilder::buildParticleLayout(const SessionItem& item)
 {
     auto P_layout = TransformToDomain::createParticleLayout(item);
-    QVector<SessionItem *> children = item.getItems();
+    QVector<SessionItem*> children = item.getItems();
     for (int i = 0; i < children.size(); ++i) {
         auto P_particle = TransformToDomain::createIParticle(*children[i]);
         if (P_particle) {
@@ -79,10 +71,9 @@ std::unique_ptr<ParticleLayout> DomainObjectBuilder::buildParticleLayout(
             continue;
         }
         if (children[i]->modelType() == Constants::ParticleDistributionType) {
-            auto prop
-                = children[i]
-                      ->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER)
-                      .value<ComboProperty>();
+            auto prop = children[i]
+                            ->getItemValue(ParticleDistributionItem::P_DISTRIBUTED_PARAMETER)
+                            .value<ComboProperty>();
             QString par_name = prop.getValue();
             if (par_name == ParticleDistributionItem::NO_SELECTION) {
                 auto grandchildren = children[i]->getItems();
@@ -120,14 +111,15 @@ std::unique_ptr<ParticleLayout> DomainObjectBuilder::buildParticleLayout(
 }
 
 std::unique_ptr<IInterferenceFunction>
-DomainObjectBuilder::buildInterferenceFunction(const SessionItem& item) const
+DomainObjectBuilder::buildInterferenceFunction(const SessionItem& item)
 {
     auto iffItem = dynamic_cast<const InterferenceFunctionItem*>(&item);
     Q_ASSERT(iffItem);
     return iffItem->createInterferenceFunction();
 }
 
-std::unique_ptr<Instrument> DomainObjectBuilder::buildInstrument(const InstrumentItem& instrumentItem) const
+std::unique_ptr<Instrument>
+DomainObjectBuilder::buildInstrument(const InstrumentItem& instrumentItem)
 {
     return instrumentItem.createInstrument();
 }
diff --git a/GUI/coregui/Models/DomainObjectBuilder.h b/GUI/coregui/Models/DomainObjectBuilder.h
index f0a636fa5a1113680806da26b0b7ee373cdeb5d2..80d66ea0cd77a0f0b8e43940907776e558b92ad0 100644
--- a/GUI/coregui/Models/DomainObjectBuilder.h
+++ b/GUI/coregui/Models/DomainObjectBuilder.h
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
 //! @file      GUI/coregui/Models/DomainObjectBuilder.h
-//! @brief     Defines class DomainObjectBuilder
+//! @brief     Defines DomainObjectBuilder namespace
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -18,24 +18,22 @@
 #include "WinDllMacros.h"
 #include <memory>
 
-class Instrument;
 class MultiLayer;
 class Layer;
+class Instrument;
 class ParticleLayout;
 class IInterferenceFunction;
-class Beam;
 class SessionItem;
 class InstrumentItem;
 
-class BA_CORE_API_ DomainObjectBuilder
+namespace DomainObjectBuilder
 {
-public:
-    std::unique_ptr<MultiLayer> buildMultiLayer(const SessionItem &multilayer_item) const;
-    std::unique_ptr<Layer> buildLayer(const SessionItem &item) const;
-    std::unique_ptr<ParticleLayout> buildParticleLayout(const SessionItem &item) const;
-    std::unique_ptr<IInterferenceFunction>
-    buildInterferenceFunction(const SessionItem &item) const;
-    std::unique_ptr<Instrument> buildInstrument(const InstrumentItem& instrumentItem) const;
+BA_CORE_API_ std::unique_ptr<MultiLayer> buildMultiLayer(const SessionItem& multilayer_item);
+BA_CORE_API_ std::unique_ptr<Layer> buildLayer(const SessionItem& item);
+BA_CORE_API_ std::unique_ptr<ParticleLayout> buildParticleLayout(const SessionItem& item);
+BA_CORE_API_ std::unique_ptr<IInterferenceFunction>
+buildInterferenceFunction(const SessionItem& item);
+BA_CORE_API_ std::unique_ptr<Instrument> buildInstrument(const InstrumentItem& instrumentItem);
 };
 
 #endif // DOMAINOBJECTBUILDER_H
diff --git a/GUI/coregui/Models/DomainSimulationBuilder.cpp b/GUI/coregui/Models/DomainSimulationBuilder.cpp
index 27005be6c0d95e69926938f871fd4b635f6b0274..ec8c0de55f3f53830943fb5aafec92332af8827d 100644
--- a/GUI/coregui/Models/DomainSimulationBuilder.cpp
+++ b/GUI/coregui/Models/DomainSimulationBuilder.cpp
@@ -36,12 +36,11 @@ std::unique_ptr<Simulation> DomainSimulationBuilder::createSimulation(const Mult
                         " or InstrumentItem is not defined.");
         throw GUIHelpers::Error(message);
     }
-    DomainObjectBuilder builder;
 
     if (auto gisasInstrument = dynamic_cast<const GISASInstrumentItem*>(instrumentItem)) {
         std::unique_ptr<GISASSimulation> result(new GISASSimulation);
-        auto P_multilayer = builder.buildMultiLayer(*sampleItem);
-        auto P_instrument = builder.buildInstrument(*gisasInstrument);
+        auto P_multilayer = DomainObjectBuilder::buildMultiLayer(*sampleItem);
+        auto P_instrument = DomainObjectBuilder::buildInstrument(*gisasInstrument);
         result->setSample(*P_multilayer);
         result->setInstrument(*P_instrument);
         TransformToDomain::addDistributionParametersToSimulation(*gisasInstrument->beamItem(), result.get());
diff --git a/GUI/coregui/Models/JobItemUtils.cpp b/GUI/coregui/Models/JobItemUtils.cpp
index 2a838d7e3edd0e4c56ebcda7e1cb82015cd30b0e..80d00e5a928a1da4dfef22d78e49a8e3b6c7976e 100644
--- a/GUI/coregui/Models/JobItemUtils.cpp
+++ b/GUI/coregui/Models/JobItemUtils.cpp
@@ -154,8 +154,7 @@ AxesUnits JobItemUtils::preferableGUIAxesUnits(AxesUnits default_units)
 void JobItemUtils::setIntensityItemAxesUnits(IntensityDataItem* intensityItem,
                                               const GISASInstrumentItem* instrumentItem)
 {
-    DomainObjectBuilder builder;
-    auto instrument = builder.buildInstrument(*instrumentItem);
+    auto instrument = DomainObjectBuilder::buildInstrument(*instrumentItem);
     instrument->initDetector();
     setIntensityItemAxesUnits(intensityItem, instrument->getDetector());
 }
@@ -201,8 +200,7 @@ void JobItemUtils::updateAxesTitle(IntensityDataItem* intensityItem)
 void JobItemUtils::createDefaultDetectorMap(IntensityDataItem* intensityItem,
                                             const GISASInstrumentItem* instrumentItem)
 {
-    DomainObjectBuilder builder;
-    auto instrument = builder.buildInstrument(*instrumentItem);
+    auto instrument = DomainObjectBuilder::buildInstrument(*instrumentItem);
     instrument->initDetector();
     AxesUnits units = instrument->getDetector()->defaultAxesUnits();
     auto detector = instrument->getDetector();
@@ -217,8 +215,7 @@ void JobItemUtils::createDefaultDetectorMap(IntensityDataItem* intensityItem,
 OutputData<double>* JobItemUtils::createDetectorMap(const GISASInstrumentItem* instrumentItem,
                                                      AxesUnits units)
 {
-    DomainObjectBuilder builder;
-    auto instrument = builder.buildInstrument(*instrumentItem);
+    auto instrument = DomainObjectBuilder::buildInstrument(*instrumentItem);
     instrument->initDetector();
 
     if (units == AxesUnits::DEFAULT)
diff --git a/GUI/coregui/Models/JobModelFunctions.cpp b/GUI/coregui/Models/JobModelFunctions.cpp
index fd05c995245c9e026cd229abec80c07c3c828cc1..bdf54a109eb05979445e0a4def6c81ac589f3dc5 100644
--- a/GUI/coregui/Models/JobModelFunctions.cpp
+++ b/GUI/coregui/Models/JobModelFunctions.cpp
@@ -107,8 +107,7 @@ void JobModelFunctions::cropRealData(JobItem *jobItem) {
     // adjusting real data to the size of region of interest
     IntensityDataItem *intensityItem = realData->intensityDataItem();
 
-    DomainObjectBuilder builder;
-    auto instrument = builder.buildInstrument(*jobItem->instrumentItem());
+    auto instrument = DomainObjectBuilder::buildInstrument(*jobItem->instrumentItem());
     instrument->initDetector();
 
     AxesUnits requested_units
diff --git a/GUI/coregui/Views/InfoWidgets/PySampleWidget.cpp b/GUI/coregui/Views/InfoWidgets/PySampleWidget.cpp
index ce6f4cfc195521a23404c57ee3f1c98513192005..d083af21877061669db562d69f4ae43955242b1c 100644
--- a/GUI/coregui/Views/InfoWidgets/PySampleWidget.cpp
+++ b/GUI/coregui/Views/InfoWidgets/PySampleWidget.cpp
@@ -162,9 +162,8 @@ QString PySampleWidget::generateCodeSnippet()
     QString result;
 
     for(const MultiLayerItem* sampleItem : m_sampleModel->topItems<MultiLayerItem>()) {
-        DomainObjectBuilder builder;
         try {
-            auto multilayer = builder.buildMultiLayer(*sampleItem);
+            auto multilayer = DomainObjectBuilder::buildMultiLayer(*sampleItem);
             if (!result.isEmpty())
                 result.append("\n");
             result.append(QString::fromStdString(