diff --git a/GUI/Model/Item/ItemWithMaterial.cpp b/GUI/Model/Item/ItemWithMaterial.cpp
index cb1e1099033d1d06e17e4da00468b445c1a303ab..3d51a02f084eb8075127dd2e725ed72a24986194 100644
--- a/GUI/Model/Item/ItemWithMaterial.cpp
+++ b/GUI/Model/Item/ItemWithMaterial.cpp
@@ -15,6 +15,7 @@
 #include "GUI/Model/Item/ItemWithMaterial.h"
 #include "Base/Util/Assert.h"
 #include "GUI/Model/Item/MaterialItem.h"
+#include "GUI/Model/Model/MaterialModel.h"
 
 void ItemWithMaterial::setMaterial(const MaterialItem* materialItem)
 {
@@ -26,10 +27,11 @@ void ItemWithMaterial::setMaterial(const QString& materialIdentifier)
     m_materialIdentifier = materialIdentifier;
 }
 
-void ItemWithMaterial::setMaterialFinder(
-    const std::function<MaterialItem*(const QString&)> fnFindMaterialById)
+void ItemWithMaterial::setMaterialModel(const MaterialModel* materialModel)
 {
-    m_fnFindMaterialById = fnFindMaterialById;
+    m_fnFindMaterialById = [=](const QString& id) {
+        return materialModel->materialFromIdentifier(id);
+    };
 }
 
 void ItemWithMaterial::setMaterialUndefined()
diff --git a/GUI/Model/Item/ItemWithMaterial.h b/GUI/Model/Item/ItemWithMaterial.h
index b16f6cdbe5e6f18bdea8f494be3c4897615bff7c..d14d144f903174dcf2bd1b6c427e4e9737678887 100644
--- a/GUI/Model/Item/ItemWithMaterial.h
+++ b/GUI/Model/Item/ItemWithMaterial.h
@@ -20,12 +20,13 @@
 
 class Material;
 class MaterialItem;
+class MaterialModel;
 class QColor;
 
 class ItemWithMaterial {
 public:
-    //! Define the function that finds the linked material.
-    void setMaterialFinder(const std::function<MaterialItem*(const QString&)> fnFindMaterialById);
+    //! Define the material container where to find the linked material.
+    void setMaterialModel(const MaterialModel* materialModel);
 
     //! Set the material this item shall use.
     //! Stores the identifier, not the pointer!
diff --git a/GUI/Model/Item/JobFunctions.cpp b/GUI/Model/Item/JobFunctions.cpp
index 2f2d643f4d9a199b0c653ad24d8114d9d14acafb..065a95ea58ce9b26e3993d8e26ce838bf08400b6 100644
--- a/GUI/Model/Item/JobFunctions.cpp
+++ b/GUI/Model/Item/JobFunctions.cpp
@@ -122,8 +122,8 @@ void GUI::Model::JobFunctions::setupJobItemSampleData(JobItem* jobItem,
     // copy used materials into material container
     for (auto* itemWithMaterial : sampleItem->itemsWithMaterial()) {
         auto* material = itemWithMaterial->materialItem();
-        if (!jobItem->materialModel().findMaterialItem(material->identifier()))
-            jobItem->materialModel().addMaterial(new MaterialItem(*material));
+        if (!jobItem->materialItems().findMaterialItem(material->identifier()))
+            jobItem->materialItems().addMaterial(new MaterialItem(*material));
     }
 }
 
diff --git a/GUI/Model/Item/JobItem.cpp b/GUI/Model/Item/JobItem.cpp
index 18125315748a9890cbadac9c5c4a9dd14184d8de..5efecc384a38c9fd30684fbf849ea48121e55664 100644
--- a/GUI/Model/Item/JobItem.cpp
+++ b/GUI/Model/Item/JobItem.cpp
@@ -18,6 +18,7 @@
 #include "GUI/Model/Item/FitSuiteItem.h"
 #include "GUI/Model/Item/InstrumentItems.h"
 #include "GUI/Model/Item/IntensityDataItem.h"
+#include "GUI/Model/Item/ItemWithMaterial.h"
 #include "GUI/Model/Item/JobItemUtils.h"
 #include "GUI/Model/Item/RealDataItem.h"
 #include "GUI/Model/Item/SpecularDataItem.h"
@@ -248,7 +249,7 @@ MultiLayerItem* JobItem::copySampleIntoJob(const MultiLayerItem* sample)
 
     // initialize material container of items with material
     for (auto* itemWithMaterial : sampleItem()->itemsWithMaterial())
-        m_materialModel.setFinderForItem(*itemWithMaterial);
+        itemWithMaterial->setMaterialModel(&m_materials);
 
     return &m_multiLayerItem;
 }
@@ -381,7 +382,7 @@ void JobItem::writeNonSessionItems(QXmlStreamWriter* writer) const
     Serializer(writer).write<InstrumentItemCatalog>(Tags::Instrument, m_instrument.get());
 
     writer->writeStartElement(Tags::Materials);
-    m_materialModel.writeContentTo(writer);
+    m_materials.writeContentTo(writer);
     writer->writeEndElement();
 
     writer->writeStartElement(Tags::Sample);
@@ -412,7 +413,7 @@ void JobItem::readNonSessionItems(QXmlStreamReader* reader)
             Serializer(reader).read<InstrumentItemCatalog>(Tags::Instrument, p);
             m_instrument.reset(p);
         } else if (reader->name() == Tags::Materials) {
-            m_materialModel.readContentFrom(reader);
+            m_materials.readContentFrom(reader);
             GUI::Session::XML::gotoEndElementOfTag(reader, Tags::Materials);
         } else if (reader->name() == Tags::ParameterContainer) {
             m_parameterContainer.readContentFrom(reader);
@@ -424,14 +425,14 @@ void JobItem::readNonSessionItems(QXmlStreamReader* reader)
     }
 }
 
-const MaterialModel& JobItem::materialModel() const
+const MaterialModel& JobItem::materialItems() const
 {
-    return m_materialModel;
+    return m_materials;
 }
 
-MaterialModel& JobItem::materialModel()
+MaterialModel& JobItem::materialItems()
 {
-    return m_materialModel;
+    return m_materials;
 }
 
 bool JobItem::isSpecularJob() const
diff --git a/GUI/Model/Item/JobItem.h b/GUI/Model/Item/JobItem.h
index 407fef4b79469881449154301d708ef966b8b8d7..7d99adfc6129bc0072ceadd04d97eae853df85cc 100644
--- a/GUI/Model/Item/JobItem.h
+++ b/GUI/Model/Item/JobItem.h
@@ -142,15 +142,17 @@ public:
     void writeNonSessionItems(QXmlStreamWriter* writer) const override;
     void readNonSessionItems(QXmlStreamReader* reader) override;
 
-    const MaterialModel& materialModel() const;
-    MaterialModel& materialModel();
+    const MaterialModel& materialItems() const;
+    MaterialModel& materialItems();
     bool isSpecularJob() const;
 
+    friend class JobModel;
+
 private:
     void updateIntensityDataFileName();
 
     SimulationOptionsItem m_simulationOptionsItem;
-    MaterialModel m_materialModel;
+    MaterialModel m_materials;
     ParameterContainerItem m_parameterContainer;
     MultiLayerItem m_multiLayerItem;
     std::unique_ptr<InstrumentItem> m_instrument;
diff --git a/GUI/Model/Item/ParameterTreeItems.cpp b/GUI/Model/Item/ParameterTreeItems.cpp
index ab6c3ad208d22a61f1ce83d94fc9aa6d9034fcf0..2127bb2a96ddd1630dc52491146f417094723995 100644
--- a/GUI/Model/Item/ParameterTreeItems.cpp
+++ b/GUI/Model/Item/ParameterTreeItems.cpp
@@ -15,6 +15,7 @@
 #include "GUI/Model/Item/ParameterTreeItems.h"
 #include "GUI/Model/Item/JobItem.h"
 #include "GUI/Model/Item/MaterialItem.h"
+#include "GUI/Model/Model/MaterialModel.h"
 #include "GUI/Model/Types/VectorDescriptor.h"
 #include "GUI/Support/Data/XML.h"
 #include "GUI/Util/DeserializationException.h"
diff --git a/GUI/Model/Item/ParticleCoreShellItem.cpp b/GUI/Model/Item/ParticleCoreShellItem.cpp
index 7f55f80e8418f5bae07c7b65828788b579c62538..9f2a7a81aae955807c499eb4e894aa319f31d4d7 100644
--- a/GUI/Model/Item/ParticleCoreShellItem.cpp
+++ b/GUI/Model/Item/ParticleCoreShellItem.cpp
@@ -79,7 +79,7 @@ void ParticleCoreShellItem::clearCore()
 ParticleItem* ParticleCoreShellItem::createCore(MaterialModel* materials)
 {
     m_core.reset(new ParticleItem());
-    materials->setFinderForItem(*m_core);
+    m_core->setMaterialModel(materials);
     m_core->setMaterial(materials->defaultMaterial());
     return m_core.get();
 }
@@ -97,7 +97,7 @@ void ParticleCoreShellItem::clearShell()
 ParticleItem* ParticleCoreShellItem::createShell(MaterialModel* materials)
 {
     m_shell.reset(new ParticleItem());
-    materials->setFinderForItem(*m_shell);
+    m_shell->setMaterialModel(materials);
     m_shell->setMaterial(materials->defaultMaterial());
 
     // position is not used for shell item
diff --git a/GUI/Model/Model/JobModel.cpp b/GUI/Model/Model/JobModel.cpp
index a5b23b1f9e7f0cc6f40d664ffbeb14e693904e41..0020e0d8be4db230c8864faa95dddbf11fb80414 100644
--- a/GUI/Model/Model/JobModel.cpp
+++ b/GUI/Model/Model/JobModel.cpp
@@ -141,7 +141,7 @@ void JobModel::readFrom(QXmlStreamReader* reader, MessageService* messageService
         // initialize the material finder functions
         // #baSerialize this should be moved into jobItem's serialization method
         for (auto* itemWithMaterial : jobItem->sampleItem()->itemsWithMaterial())
-            jobItem->materialModel().setFinderForItem(*itemWithMaterial);
+            itemWithMaterial->setMaterialModel(&jobItem->m_materials);
 
         // Create the not stored parameter tuning tree
         ParameterTreeBuilder(jobItem, false).build();
diff --git a/GUI/Model/Model/MaterialModel.cpp b/GUI/Model/Model/MaterialModel.cpp
index e8c01df1e420f9d30ad34b8be2c44868e4cb3ef1..e1297626aee177e832d5dd493d38dd680b521f56 100644
--- a/GUI/Model/Model/MaterialModel.cpp
+++ b/GUI/Model/Model/MaterialModel.cpp
@@ -15,7 +15,6 @@
 #include "GUI/Model/Model/MaterialModel.h"
 #include "Base/Util/Assert.h"
 #include "GUI/Model/Item/MaterialItem.h"
-#include "GUI/Model/Item/ItemWithMaterial.h"
 #include "GUI/Support/Data/XML.h"
 #include "GUI/Util/DeserializationException.h"
 #include <QColor>
@@ -153,13 +152,6 @@ MaterialItem* MaterialModel::findMaterialItem(const QString& identifier) const
     return nullptr;
 }
 
-void MaterialModel::setFinderForItem(ItemWithMaterial& item)
-{
-    item.setMaterialFinder([=](const QString& id) {
-        return this->materialFromIdentifier(id);
-    });
-}
-
 MaterialItem* MaterialModel::defaultMaterial() const
 {
     ASSERT(!materialItems().isEmpty());
diff --git a/GUI/Model/Model/MaterialModel.h b/GUI/Model/Model/MaterialModel.h
index dc627605beebcd2cfd86950630807b916c3ede86..491efd791f556ec00285dacf8148f3eedc61178c 100644
--- a/GUI/Model/Model/MaterialModel.h
+++ b/GUI/Model/Model/MaterialModel.h
@@ -18,7 +18,6 @@
 #include <QObject>
 #include <QVector>
 
-class ItemWithMaterial;
 class MaterialItem;
 class QXmlStreamReader;
 class QXmlStreamWriter;
@@ -51,8 +50,6 @@ public:
     const QVector<MaterialItem*>& materialItems() const;
     MaterialItem* findMaterialItem(const QString& identifier) const;
 
-    void setFinderForItem(ItemWithMaterial& item);
-
     MaterialItem* defaultMaterial() const;
 
     void removeMaterial(const QString& identifier);
diff --git a/GUI/Model/OfItem/ParameterTreeUtils.cpp b/GUI/Model/OfItem/ParameterTreeUtils.cpp
index 1cd553b4c1a3472171834bcb5fe7353d0aafd928..646747da04cc9d29bf58367fd526c63894d1d2d4 100644
--- a/GUI/Model/OfItem/ParameterTreeUtils.cpp
+++ b/GUI/Model/OfItem/ParameterTreeUtils.cpp
@@ -89,7 +89,7 @@ void ParameterTreeBuilder::addMaterials()
 {
     auto* materialTopLabel =
         new ParameterLabelItem("Materials", parameterContainer()->parameterTreeRoot());
-    for (auto* material : m_jobItem->materialModel().materialItems()) {
+    for (auto* material : m_jobItem->materialItems().materialItems()) {
         auto* materialLabel = new ParameterLabelItem(material->materialName(), materialTopLabel);
         if (material->hasRefractiveIndex()) {
             addParameterItem(materialLabel, material->delta());
diff --git a/GUI/Model/Project/ProjectDocument.cpp b/GUI/Model/Project/ProjectDocument.cpp
index f53a19acd2791667b0f8c6ea4cc0e181a525d8c8..cac814cb11299c5773e778b44fb1df2b06620274 100644
--- a/GUI/Model/Project/ProjectDocument.cpp
+++ b/GUI/Model/Project/ProjectDocument.cpp
@@ -401,7 +401,7 @@ ProjectDocument::ReadResult ProjectDocument::readProject(QIODevice* device,
         // initialize all items with materials to find the materials
         for (auto* multiLayerItem : m_samples.multiLayerItems())
             for (auto* itemWithMaterial : multiLayerItem->itemsWithMaterial())
-                materialModel()->setFinderForItem(*itemWithMaterial);
+                itemWithMaterial->setMaterialModel(materialModel());
 
         // make a sanity check whether all materials are present
         for (const auto* multiLayerItem : m_samples.multiLayerItems())
diff --git a/GUI/View/FromDomain/GUISampleBuilder.cpp b/GUI/View/FromDomain/GUISampleBuilder.cpp
index 2f0da9341a78022f1218f4b93c0aaebd8818310b..171f90512be27f225d8cb245dd063e729d932a03 100644
--- a/GUI/View/FromDomain/GUISampleBuilder.cpp
+++ b/GUI/View/FromDomain/GUISampleBuilder.cpp
@@ -80,7 +80,7 @@ MultiLayerItem* GUISampleBuilder::createMultiLayerItem(MaterialModel* materialMo
 
     // initialize all items with materials to find the materials
     for (auto* itemWithMaterial : multilayerItem->itemsWithMaterial())
-        materialModel->setFinderForItem(*itemWithMaterial);
+        itemWithMaterial->setMaterialModel(materialModel);
 
     return multilayerItem;
 }
diff --git a/GUI/View/SampleDesigner/SampleEditorCommands.cpp b/GUI/View/SampleDesigner/SampleEditorCommands.cpp
index db135020cd307d1a2bcf33964f9399167c535059..e457a8d293f7cccba0c244d1ea246e32c548335f 100644
--- a/GUI/View/SampleDesigner/SampleEditorCommands.cpp
+++ b/GUI/View/SampleDesigner/SampleEditorCommands.cpp
@@ -16,7 +16,6 @@
 
 #include "GUI/Model/Item/LayerItem.h"
 #include "GUI/Model/Item/MultiLayerItem.h"
-#include "GUI/Model/Model/MaterialModel.h"
 #include "GUI/Model/XML/Serializer.h"
 #include "GUI/View/SampleDesigner/MultiLayerForm.h"
 #include "GUI/View/SampleDesigner/SampleEditorController.h"
@@ -74,7 +73,7 @@ void CommandRemoveLayer::undo()
 {
     LayerItem* restoredLayer = m_ec->multiLayerItem()->addLayer(m_indexOfLayer);
     deserialize(restoredLayer, m_layerItemBackup);
-    m_ec->materialModel()->setFinderForItem(*restoredLayer);
+    restoredLayer->setMaterialModel(m_ec->materialModel());
     m_ec->multiLayerForm()->onLayerAdded(restoredLayer);
     emit m_ec->modified();
 }
diff --git a/GUI/View/SampleDesigner/SampleEditorController.cpp b/GUI/View/SampleDesigner/SampleEditorController.cpp
index 52e34c90f0f38fad6d7d0672f67a191589177a5e..b10490892346c93719e59b98f2f6da87326083d2 100644
--- a/GUI/View/SampleDesigner/SampleEditorController.cpp
+++ b/GUI/View/SampleDesigner/SampleEditorController.cpp
@@ -101,7 +101,7 @@ void SampleEditorController::addLayer(LayerItem* before)
 
     // - create new layer
     LayerItem* layer = m_multiLayerItem->addLayer(rowInMultiLayer);
-    materialModel()->setFinderForItem(*layer);
+    layer->setMaterialModel(materialModel());
     layer->setMaterial(materialModel()->defaultMaterial());
     layer->setColor(color);
 
@@ -214,7 +214,7 @@ ItemWithParticles*
 SampleEditorController::createAndInitParticle(FormFactorItemCatalog::Type formFactorType) const
 {
     auto* newParticle = new ParticleItem();
-    materialModel()->setFinderForItem(*newParticle);
+    newParticle->setMaterialModel(materialModel());
     newParticle->setFormFactor(FormFactorItemCatalog::create(formFactorType));
     newParticle->setMaterial(materialModel()->defaultMaterial());
     return newParticle;
@@ -226,7 +226,7 @@ SampleEditorController::createAndInitParticle(ItemWithParticlesCatalog::Type ite
     auto* newItem = ItemWithParticlesCatalog::create(itemType);
 
     if (auto* p = dynamic_cast<ItemWithMaterial*>(newItem)) {
-        materialModel()->setFinderForItem(*p);
+        p->setMaterialModel(materialModel());
         p->setMaterial(materialModel()->defaultMaterial());
     }
 
@@ -239,7 +239,7 @@ SampleEditorController::createAndInitParticle(ItemWithParticlesCatalog::Type ite
 
     if (auto* meso = dynamic_cast<MesoCrystalItem*>(newItem); meso && meso->basisParticle())
         if (auto* p = dynamic_cast<ItemWithMaterial*>(meso->basisParticle())) {
-            materialModel()->setFinderForItem(*p);
+            p->setMaterialModel(materialModel());
             p->setMaterial(materialModel()->defaultMaterial());
         }
 
diff --git a/Tests/Unit/GUI/TestRealSpaceBuilderUtils.cpp b/Tests/Unit/GUI/TestRealSpaceBuilderUtils.cpp
index 3fe924cb2ca70c02fbd924c21f0c4bdfb8d1b5f7..0b8c202be6f56fdbf3b852846c00bf777b4f7b23 100644
--- a/Tests/Unit/GUI/TestRealSpaceBuilderUtils.cpp
+++ b/Tests/Unit/GUI/TestRealSpaceBuilderUtils.cpp
@@ -153,7 +153,7 @@ TEST_F(TestRealSpaceBuilderUtils, singleParticle3DContainer)
 
     auto particleItem = std::make_unique<ParticleItem>();
     particleItem->setMaterial(materialModel.defaultMaterial());
-    materialModel.setFinderForItem(*particleItem);
+    particleItem->setMaterialModel(&materialModel);
     EXPECT_EQ(particleItem->abundance(), 1.0);
     EXPECT_TRUE(dynamic_cast<CylinderItem*>(particleItem->formfactor_at_bottom()));
 
@@ -186,9 +186,9 @@ TEST_F(TestRealSpaceBuilderUtils, particle3DContainerVector)
     particle1->setMaterial(materialModel.defaultMaterial());
     particle2->setMaterial(materialModel.defaultMaterial());
     particle3->setMaterial(materialModel.defaultMaterial());
-    materialModel.setFinderForItem(*particle1);
-    materialModel.setFinderForItem(*particle2);
-    materialModel.setFinderForItem(*particle3);
+    particle1->setMaterialModel(&materialModel);
+    particle2->setMaterialModel(&materialModel);
+    particle3->setMaterialModel(&materialModel);
 
     layout->addParticle(particle1);
     layout->addParticle(particle2);