diff --git a/GUI/View/SampleDesigner/LayerOrientedSampleEditor.cpp b/GUI/View/SampleDesigner/LayerOrientedSampleEditor.cpp
index 0cb348c5e0ae2956d9bb7f8975663bf7483e57b3..485f3bfb6dfd80f31ada4398a8cb28e6baf7f52d 100644
--- a/GUI/View/SampleDesigner/LayerOrientedSampleEditor.cpp
+++ b/GUI/View/SampleDesigner/LayerOrientedSampleEditor.cpp
@@ -110,9 +110,8 @@ void LayerOrientedSampleEditor::setCurrentSample(MultiLayerItem* multiLayerItem)
     }
 
     if (!m_editControllers.contains(m_currentMultiLayerItem))
-        m_editControllers.insert(
-            m_currentMultiLayerItem,
-            new SampleEditorController(m_document->materialModel(), m_currentMultiLayerItem));
+        m_editControllers.insert(m_currentMultiLayerItem,
+                                 new SampleEditorController(m_document, m_currentMultiLayerItem));
     auto* ec = m_editControllers[m_currentMultiLayerItem];
     connect(ec, &SampleEditorController::requestViewInRealSpace, this,
             &LayerOrientedSampleEditor::requestViewInRealSpace);
diff --git a/GUI/View/SampleDesigner/MaterialInplaceForm.cpp b/GUI/View/SampleDesigner/MaterialInplaceForm.cpp
index 5b7635d223371c2c0ba2cb416f3d7e4db59ba687..20d18d4951907f23235c8539004db1d63155dcc3 100644
--- a/GUI/View/SampleDesigner/MaterialInplaceForm.cpp
+++ b/GUI/View/SampleDesigner/MaterialInplaceForm.cpp
@@ -17,7 +17,6 @@
 #include "GUI/Model/Material/MaterialModel.h"
 #include "GUI/Model/Sample/ItemWithMaterial.h"
 #include "GUI/Model/Session/ModelPath.h"
-#include "GUI/Model/State/SessionData.h"
 #include "GUI/Model/Types/DoubleDescriptor.h"
 #include "GUI/Model/Types/VectorDescriptor.h"
 #include "GUI/View/Edit/DoubleLineEdit.h"
@@ -40,7 +39,7 @@ MaterialInplaceForm::MaterialInplaceForm(QWidget* parent, ItemWithMaterial* item
     m_layout->setContentsMargins(0, 0, 0, 0);
     createWidgets();
 
-    connect(gSessionData->projectDocument->materialModel(), &MaterialModel::materialChanged, this,
+    connect(ec->materialModel(), &MaterialModel::materialChanged, this,
             &MaterialInplaceForm::onMaterialChanged);
 }
 
@@ -64,7 +63,7 @@ void MaterialInplaceForm::updateValues()
 void MaterialInplaceForm::selectMaterial()
 {
     const QString newMaterialIdentifier = MaterialEditorDialog::chooseMaterial(
-        baWin, gSessionData->projectDocument, m_item->materialIdentifier());
+        baWin, m_ec->projectDocument(), m_item->materialIdentifier());
 
     if (!newMaterialIdentifier.isEmpty() && newMaterialIdentifier != m_item->materialIdentifier()) {
         GUI::Util::Layout::clearLayout(m_layout, true);
diff --git a/GUI/View/SampleDesigner/SampleEditorController.cpp b/GUI/View/SampleDesigner/SampleEditorController.cpp
index 6f9cabb02146b474e9a134cbfa16bf66fea24a75..b7a2376ecc31a46f87aa4543060636127a879cfb 100644
--- a/GUI/View/SampleDesigner/SampleEditorController.cpp
+++ b/GUI/View/SampleDesigner/SampleEditorController.cpp
@@ -14,6 +14,7 @@
 
 #include "GUI/View/SampleDesigner/SampleEditorController.h"
 #include "GUI/Model/Material/MaterialModel.h"
+#include "GUI/Model/Project/ProjectDocument.h"
 #include "GUI/Model/Sample/InterferenceItems.h"
 #include "GUI/Model/Sample/LayerItem.h"
 #include "GUI/Model/Sample/MesoCrystalItem.h"
@@ -35,8 +36,8 @@
 #include "GUI/View/SampleDesigner/ParticleLayoutForm.h"
 #include "GUI/View/SampleDesigner/SampleEditorCommands.h"
 
-SampleEditorController::SampleEditorController(MaterialModel* materialModel, MultiLayerItem* multi)
-    : m_multiLayerItem(multi), m_multiLayerForm(nullptr), m_materialModel(materialModel)
+SampleEditorController::SampleEditorController(ProjectDocument* document, MultiLayerItem* multi)
+    : m_multiLayerItem(multi), m_multiLayerForm(nullptr), m_document(document)
 {
 }
 
@@ -96,8 +97,8 @@ void SampleEditorController::addLayer(LayerItem* before)
 
     // - create new layer
     LayerItem* layer = m_multiLayerItem->addLayer(rowInMultiLayer);
-    layer->setMaterialModel(m_materialModel);
-    layer->setMaterial(m_materialModel->defaultMaterial());
+    layer->setMaterialModel(materialModel());
+    layer->setMaterial(materialModel()->defaultMaterial());
     layer->setColor(color);
 
     ASSERT(m_multiLayerForm);
@@ -129,9 +130,9 @@ void SampleEditorController::addParticle(ParticleLayoutItem* layoutItem, const Q
     SessionItem* newItem = nullptr;
     if (ItemCatalog::isFormFactorModelType(classname)) {
         auto* new_particle = layoutItem->model()->insertItem<ParticleItem>(layoutItem);
-        new_particle->setMaterialModel(m_materialModel);
+        new_particle->setMaterialModel(materialModel());
         new_particle->setFormFactor(classname);
-        new_particle->setMaterial(m_materialModel->defaultMaterial());
+        new_particle->setMaterial(materialModel()->defaultMaterial());
         newItem = new_particle;
     } else
         newItem = layoutItem->model()->insertNewItem(classname, layoutItem);
@@ -155,9 +156,9 @@ void SampleEditorController::addParticle(ParticleCompositionItem* compositionIte
     SessionItem* newItem = nullptr;
     if (ItemCatalog::isFormFactorModelType(classname)) {
         auto* new_particle = compositionItem->model()->insertItem<ParticleItem>(compositionItem);
-        new_particle->setMaterialModel(m_materialModel);
+        new_particle->setMaterialModel(materialModel());
         new_particle->setFormFactor(classname);
-        new_particle->setMaterial(m_materialModel->defaultMaterial());
+        new_particle->setMaterial(materialModel()->defaultMaterial());
         newItem = new_particle;
     } else
         newItem = compositionItem->model()->insertNewItem(classname, compositionItem);
@@ -293,7 +294,12 @@ QUndoStack* SampleEditorController::undoStack()
 
 MaterialModel* SampleEditorController::materialModel() const
 {
-    return m_materialModel;
+    return m_document->materialModel();
+}
+
+ProjectDocument* SampleEditorController::projectDocument() const
+{
+    return m_document;
 }
 
 void SampleEditorController::selectMaterial(ItemWithMaterial* item,
diff --git a/GUI/View/SampleDesigner/SampleEditorController.h b/GUI/View/SampleDesigner/SampleEditorController.h
index 0988bb028797766227e736f05cb864a4e51cbcf0..d8884055c0e092df7e715a20d0ab0c72262d187a 100644
--- a/GUI/View/SampleDesigner/SampleEditorController.h
+++ b/GUI/View/SampleDesigner/SampleEditorController.h
@@ -37,6 +37,7 @@ class InterferenceItem;
 class AbstractSelectionContainerForm;
 class LatticeTypeSelectionForm;
 class MaterialModel;
+class ProjectDocument;
 
 //! Class to modify a sample from the layer oriented sample editor.
 //!
@@ -46,7 +47,7 @@ class MaterialModel;
 class SampleEditorController : public QObject {
     Q_OBJECT
 public:
-    SampleEditorController(MaterialModel* materialModel, MultiLayerItem* multi);
+    SampleEditorController(ProjectDocument* document, MultiLayerItem* multi);
 
     //! Set the current form.
     //!
@@ -66,6 +67,9 @@ public:
     //! The materials of the current document
     MaterialModel* materialModel() const;
 
+    //! The current document
+    ProjectDocument* projectDocument() const;
+
     void addLayer(LayerItem* before);
     void removeLayer(LayerItem* layerItem);
     void addLayout(LayerForm* layerItem);
@@ -109,7 +113,7 @@ private:
     QUndoStack m_undoStack;
     MultiLayerItem* m_multiLayerItem;
     MultiLayerForm* m_multiLayerForm;
-    MaterialModel* m_materialModel;
+    ProjectDocument* m_document;
 };
 
 
diff --git a/GUI/View/SampleDesigner/SampleListView.cpp b/GUI/View/SampleDesigner/SampleListView.cpp
index 1b322e941459a6cd00caa67ac0358167fe9b57e5..7021d7b8d8b968d15baba0dcad14b452a80592db 100644
--- a/GUI/View/SampleDesigner/SampleListView.cpp
+++ b/GUI/View/SampleDesigner/SampleListView.cpp
@@ -15,9 +15,9 @@
 #include "GUI/View/SampleDesigner/SampleListView.h"
 #include "GUI/Application/ApplicationSettings.h"
 #include "GUI/Model/From/GUIExamplesFactory.h"
-#include "GUI/Model/Sample/MultiLayerItem.h"
 #include "GUI/Model/From/SampleListModel.h"
-#include "GUI/Model/State/SessionData.h"
+#include "GUI/Model/Project/ProjectDocument.h"
+#include "GUI/Model/Sample/MultiLayerItem.h"
 #include "GUI/View/Common/ItemViewOverlayButtons.h"
 #include "GUI/View/Tool/ItemDelegateForHTML.h"
 #include <QAction>
@@ -63,9 +63,10 @@ protected:
 
 } // namespace
 
-SampleListView::SampleListView(QWidget* parent, SampleModel* sampleModel) : QListView(parent)
+SampleListView::SampleListView(QWidget* parent, ProjectDocument* document)
+    : QListView(parent), m_document(document)
 {
-    m_model = new SampleListModel(this, sampleModel);
+    m_model = new SampleListModel(this, document->sampleModel());
 
     setContextMenuPolicy(Qt::CustomContextMenu);
     setModel(m_model);
@@ -143,8 +144,8 @@ void SampleListView::createNewSample()
 void SampleListView::createSampleFromLibrary(const QString& classname, const QString& title,
                                              const QString& description)
 {
-    const QModelIndex newIndex = m_model->createSampleFromExamples(
-        classname, title, description, gSessionData->projectDocument->materialModel());
+    const QModelIndex newIndex = m_model->createSampleFromExamples(classname, title, description,
+                                                                   m_document->materialModel());
     setCurrentIndex(newIndex);
 }
 
diff --git a/GUI/View/SampleDesigner/SampleListView.h b/GUI/View/SampleDesigner/SampleListView.h
index 1a39f4c031a731624e00ca1c0ced1627ff2f2345..1c5ce889ef1fb0c25431632c387ef10e862c4a8c 100644
--- a/GUI/View/SampleDesigner/SampleListView.h
+++ b/GUI/View/SampleDesigner/SampleListView.h
@@ -17,15 +17,15 @@
 
 #include <QListView>
 
-class SampleModel;
 class SampleListModel;
 class MultiLayerItem;
+class ProjectDocument;
 
 //! List view to select one sample (left side of layer-oriented sample editor)
 class SampleListView : public QListView {
     Q_OBJECT
 public:
-    SampleListView(QWidget* parent, SampleModel* sampleModel);
+    SampleListView(QWidget* parent, ProjectDocument* document);
 
     void setCurrentSample(MultiLayerItem* multiLayer);
     MultiLayerItem* currentSample();
@@ -53,6 +53,7 @@ private:
 
 private:
     SampleListModel* m_model;
+    ProjectDocument* m_document;
     QAction* m_newSampleAction;
     QAction* m_chooseFromLibraryAction;
 };
diff --git a/GUI/View/SampleDesigner/SampleView.cpp b/GUI/View/SampleDesigner/SampleView.cpp
index 8b86b36743956e90ee40a6e76d370f535b3ec39c..6ccb40759cc433f9df350d0ff066051279b9f4bd 100644
--- a/GUI/View/SampleDesigner/SampleView.cpp
+++ b/GUI/View/SampleDesigner/SampleView.cpp
@@ -47,7 +47,7 @@ SampleView::SampleView(QWidget* parent, ProjectDocument* document)
     sampleSelectionLayout->setSpacing(0);
 
     auto* sampleSelectionToolbar = new StyledToolBar(sampleSelectionPane);
-    auto* sampleSelectionView = new SampleListView(this, m_document->sampleModel());
+    auto* sampleSelectionView = new SampleListView(this, m_document);
     sampleSelectionToolbar->addAction(sampleSelectionView->newSampleAction());
     sampleSelectionToolbar->addAction(sampleSelectionView->chooseFromLibraryAction());
     if (auto* btn = dynamic_cast<QToolButton*>(sampleSelectionToolbar->widgetForAction(