diff --git a/GUI/Model/Instrument/InstrumentModel.cpp b/GUI/Model/Instrument/InstrumentModel.cpp
index bfe3027dc8d83a35d94a33b09fc6d6039b4a5ed1..3ccfd10f486e8a3c8ac8f7740df6807b118466fa 100644
--- a/GUI/Model/Instrument/InstrumentModel.cpp
+++ b/GUI/Model/Instrument/InstrumentModel.cpp
@@ -29,13 +29,6 @@ InstrumentModel::InstrumentModel(QObject* parent)
 
 InstrumentModel::~InstrumentModel() = default;
 
-InstrumentModel* InstrumentModel::createCopy(SessionItem* parent)
-{
-    auto* result = new InstrumentModel();
-    result->initFrom(this, parent);
-    return result;
-}
-
 QVector<SessionItem*> InstrumentModel::nonXMLItems() const
 {
     QVector<SessionItem*> result;
diff --git a/GUI/Model/Instrument/InstrumentModel.h b/GUI/Model/Instrument/InstrumentModel.h
index a39b9aeb76b116e18299eec0492565f3aae87d45..66e71cd7fdd91c6fa06d06154faec20ad7f15870 100644
--- a/GUI/Model/Instrument/InstrumentModel.h
+++ b/GUI/Model/Instrument/InstrumentModel.h
@@ -28,7 +28,6 @@ public:
     explicit InstrumentModel(QObject* parent = nullptr);
     ~InstrumentModel() override;
 
-    InstrumentModel* createCopy(SessionItem* parent = nullptr) override;
     QVector<SessionItem*> nonXMLItems() const override;
     void readFrom(QXmlStreamReader* reader, MessageService* messageService = nullptr) override;
 
diff --git a/GUI/Model/Sample/ParticleCoreShellItem.cpp b/GUI/Model/Sample/ParticleCoreShellItem.cpp
index 183d5c7955b231c69dbfbd2fbe8b1aa737aabaf4..ecbbe645565479ffd8ad08dc391b0ada167b8244 100644
--- a/GUI/Model/Sample/ParticleCoreShellItem.cpp
+++ b/GUI/Model/Sample/ParticleCoreShellItem.cpp
@@ -78,11 +78,6 @@ ParticleItem* ParticleCoreShellItem::createCore(MaterialModel* materials)
     return p;
 }
 
-bool ParticleCoreShellItem::isCoreTagName(const QString& name)
-{
-    return T_CORE == name;
-}
-
 ParticleItem* ParticleCoreShellItem::shell() const
 {
     return dynamic_cast<ParticleItem*>(getItem(T_SHELL));
@@ -106,8 +101,3 @@ ParticleItem* ParticleCoreShellItem::createShell(MaterialModel* materials)
 
     return p;
 }
-
-bool ParticleCoreShellItem::isShellTagName(const QString& name)
-{
-    return T_SHELL == name;
-}
diff --git a/GUI/Model/Sample/ParticleCoreShellItem.h b/GUI/Model/Sample/ParticleCoreShellItem.h
index 19fade676a362961cefcc11f65e7357097b14d4c..146ed37e3f7b67adbc58355ef3798ce508d52cec 100644
--- a/GUI/Model/Sample/ParticleCoreShellItem.h
+++ b/GUI/Model/Sample/ParticleCoreShellItem.h
@@ -37,12 +37,10 @@ public:
     ParticleItem* core() const;
     void clearCore();
     ParticleItem* createCore(MaterialModel* materials);
-    static bool isCoreTagName(const QString& name);
 
     ParticleItem* shell() const;
     void clearShell();
     ParticleItem* createShell(MaterialModel* materials);
-    static bool isShellTagName(const QString& name);
 };
 
 #endif // BORNAGAIN_GUI_MODEL_SAMPLE_PARTICLECORESHELLITEM_H
diff --git a/GUI/Model/Sample/SampleModel.cpp b/GUI/Model/Sample/SampleModel.cpp
index e8db59194790059c1f106133141924f63bd7dd21..001bc665d0f1705807ec4d67dc501effeab27508 100644
--- a/GUI/Model/Sample/SampleModel.cpp
+++ b/GUI/Model/Sample/SampleModel.cpp
@@ -28,36 +28,6 @@ SampleModel::SampleModel(QObject* parent) : SessionModel(GUI::Session::XML::Samp
     connect(this, &SampleModel::dataChanged, this, &SampleModel::onDataChanged);
 }
 
-SampleModel* SampleModel::createCopy(SessionItem* parent)
-{
-    auto* result = new SampleModel();
-    result->initFrom(this, parent);
-    return result;
-}
-
-QVariant SampleModel::data(const QModelIndex& index, int role) const
-{
-    if (!index.isValid())
-        return QVariant();
-
-    if (SessionItem* item = itemForIndex(index)) {
-        if (role == Qt::DecorationRole && index.column() == SessionFlags::ITEM_VALUE) {
-            const auto propertyName = item->itemName();
-            const auto* itemWithMaterial = dynamic_cast<ItemWithMaterial*>(item->parent());
-
-            if (ItemWithMaterial::isMaterialPropertyName(propertyName)
-                && itemWithMaterial != nullptr) {
-                const int size = qApp->fontMetrics().height();
-                QPixmap pixmap(size, size);
-                pixmap.fill(itemWithMaterial->materialColor());
-                return pixmap;
-            }
-        }
-    }
-
-    return SessionModel::data(index, role);
-}
-
 MultiLayerItem* SampleModel::multiLayerItem()
 {
     return topItem<MultiLayerItem>();
diff --git a/GUI/Model/Sample/SampleModel.h b/GUI/Model/Sample/SampleModel.h
index bc6426cd49c5aefb36aee9ca5bc87f3287a86595..d310ed74fcfa3dbb0330535acdd6e28cfe0dbb79 100644
--- a/GUI/Model/Sample/SampleModel.h
+++ b/GUI/Model/Sample/SampleModel.h
@@ -28,10 +28,6 @@ class SampleModel : public SessionModel {
 public:
     explicit SampleModel(QObject* parent = nullptr);
 
-    SampleModel* createCopy(SessionItem* parent = nullptr) override;
-
-    QVariant data(const QModelIndex& index, int role) const override;
-
     MultiLayerItem* multiLayerItem();
     QVector<MultiLayerItem*> multiLayerItems() const;
 
diff --git a/GUI/Model/Session/SessionModel.cpp b/GUI/Model/Session/SessionModel.cpp
index c29320d3300d23163a4b9dbc3105da9626ef8c3d..bc033d1577228a9e76692998805d11c40d956e6d 100644
--- a/GUI/Model/Session/SessionModel.cpp
+++ b/GUI/Model/Session/SessionModel.cpp
@@ -408,12 +408,6 @@ SessionItem* SessionModel::copy(const SessionItem* item_to_copy, SessionItem* ne
     return new_parent->getItems(tagName).back();
 }
 
-SessionModel* SessionModel::createCopy(SessionItem* parent)
-{
-    Q_UNUSED(parent);
-    throw Error("SessionModel::createCopy() -> Error. Not implemented.");
-}
-
 void SessionModel::initFrom(SessionModel* model, SessionItem*)
 {
     QByteArray byte_array;
@@ -429,7 +423,6 @@ void SessionModel::initFrom(SessionModel* model, SessionItem*)
         if (reader.isStartElement())
             readFrom(&reader);
     }
-    modelLoaded();
 }
 
 SessionItem* SessionModel::rootItem() const
diff --git a/GUI/Model/Session/SessionModel.h b/GUI/Model/Session/SessionModel.h
index 579de599edab1f3d98d6012e565872b33e48ad93..7690acdc4056f644cdacb6781389b00c3c450c49 100644
--- a/GUI/Model/Session/SessionModel.h
+++ b/GUI/Model/Session/SessionModel.h
@@ -53,7 +53,6 @@ public:
     QModelIndex index(int row, int column, const QModelIndex& parent) const override;
     QModelIndex parent(const QModelIndex& child) const override;
 
-    bool setHeaderData(int, Qt::Orientation, const QVariant&, int = Qt::EditRole) override;
     bool setData(const QModelIndex& index, const QVariant& value, int role) override;
     bool removeRows(int row, int count, const QModelIndex& parent) override;
 
@@ -107,8 +106,6 @@ public:
     SessionItem* copy(const SessionItem* item_to_copy, SessionItem* new_parent = nullptr,
                       const QString& tag = "");
 
-    virtual SessionModel* createCopy(SessionItem* parent = nullptr);
-
     //! Returns first item in list of topItems
     template <typename T = SessionItem> T* topItem() const;
     template <typename T = SessionItem> QVector<T*> topItems() const;
@@ -120,9 +117,6 @@ public:
 
     virtual QVector<SessionItem*> nonXMLItems() const;
 
-signals:
-    void modelLoaded();
-
 protected:
     void setRootItem(SessionItem* root) { m_root_item = root; }
 
@@ -183,11 +177,6 @@ template <typename T> QVector<T*> SessionModel::topItems(std::function<bool(cons
     return result;
 }
 
-inline bool SessionModel::setHeaderData(int, Qt::Orientation, const QVariant&, int)
-{
-    return false;
-}
-
 inline Qt::DropActions SessionModel::supportedDragActions() const
 {
     return Qt::MoveAction;
diff --git a/Tests/Unit/GUI/TestSessionModel.cpp b/Tests/Unit/GUI/TestSessionModel.cpp
index 537e1a1851a262c3c787e324b66a8abeff365f2b..ecad662058e5b464d129413aeb7b44c82b7ab39f 100644
--- a/Tests/Unit/GUI/TestSessionModel.cpp
+++ b/Tests/Unit/GUI/TestSessionModel.cpp
@@ -45,83 +45,6 @@ TEST_F(TestSessionModel, setData)
     EXPECT_EQ(spy.count(), 1);
 }
 
-TEST_F(TestSessionModel, SampleModelCopy)
-{
-    std::unique_ptr<MaterialModel> P_materialModel(new MaterialModel());
-
-    SampleModel model1;
-    auto* multilayer = model1.insertItem<MultiLayerItem>();
-    multilayer->setSampleName("multilayer");
-    multilayer->addLayer();
-    auto* multilayer2 = model1.insertItem<MultiLayerItem>();
-    multilayer2->setSampleName("multilayer2");
-
-    QString buffer1;
-    QXmlStreamWriter writer1(&buffer1);
-    model1.writeTo(&writer1);
-
-    std::unique_ptr<SampleModel> model2(model1.createCopy());
-    QString buffer2;
-    QXmlStreamWriter writer2(&buffer2);
-    model2->writeTo(&writer2);
-
-    EXPECT_EQ(buffer1, buffer2);
-}
-
-TEST_F(TestSessionModel, SampleModelPartialCopy)
-{
-    std::unique_ptr<MaterialModel> P_materialModel(new MaterialModel());
-
-    SampleModel model1;
-    auto* multilayer1 = model1.insertItem<MultiLayerItem>();
-    multilayer1->setSampleName("multilayer1");
-    model1.insertItem<LayerItem>(multilayer1);
-
-    auto* multilayer2 = model1.insertItem<MultiLayerItem>();
-    multilayer2->setSampleName("multilayer2");
-
-    std::unique_ptr<SampleModel> model2(model1.createCopy(multilayer1));
-    SessionItem* result = model2->itemForIndex(model2->index(0, 0, QModelIndex()));
-
-    EXPECT_EQ(result->itemName(), multilayer1->sampleName());
-    EXPECT_EQ(result->modelType(), multilayer1->modelType());
-}
-
-TEST_F(TestSessionModel, InstrumentModelCopy)
-{
-    InstrumentModel model1;
-    auto* instrument1 = model1.insertItem<GISASInstrumentItem>();
-    instrument1->setItemName("instrument1");
-
-    auto* instrument2 = model1.insertItem<GISASInstrumentItem>();
-    instrument2->setItemName("instrument2");
-
-    QString buffer1;
-    QXmlStreamWriter writer1(&buffer1);
-    model1.writeTo(&writer1);
-
-    std::unique_ptr<InstrumentModel> model2(model1.createCopy());
-    QString buffer2;
-    QXmlStreamWriter writer2(&buffer2);
-    model2->writeTo(&writer2);
-
-    EXPECT_EQ(buffer1, buffer2);
-}
-
-TEST_F(TestSessionModel, InstrumentModelPartialCopy)
-{
-    InstrumentModel model1;
-    auto* instrument1 = model1.insertItem<GISASInstrumentItem>();
-    instrument1->setItemName("instrument1");
-
-    auto* instrument2 = model1.insertItem<GISASInstrumentItem>();
-    instrument2->setItemName("instrument2");
-
-    std::unique_ptr<InstrumentModel> model2(model1.createCopy(instrument2));
-    SessionItem* result = model2->itemForIndex(model2->index(0, 0, QModelIndex()));
-    EXPECT_EQ(result->modelType(), instrument2->modelType());
-}
-
 //! Test if SessionItem can be copied from one model to another. Particularly, we test
 //! here if a MultiLayerItem can be copied from SampleModel to the JobItem of JobModel