From bde9ac0eae8d6a3ee3f5dae9dbc02646d03d4f0d Mon Sep 17 00:00:00 2001
From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de>
Date: Tue, 3 Jan 2023 11:10:01 +0100
Subject: [PATCH] add "Item" in Device

---
 GUI/Model/Device/AxesItems.h                  | 10 -------
 GUI/Model/Device/BeamDistributionItem.h       |  6 ++---
 GUI/Model/Device/BeamItems.cpp                | 10 +++----
 GUI/Model/Device/BeamItems.h                  |  6 ++---
 GUI/Model/Device/DetectorItems.cpp            |  2 +-
 GUI/Model/Device/DetectorItems.h              |  2 +-
 GUI/Model/Device/InstrumentCollection.cpp     | 18 ++++++-------
 GUI/Model/Device/InstrumentCollection.h       | 11 ++++----
 GUI/Model/Device/InstrumentItems.cpp          | 18 ++++++-------
 GUI/Model/Device/InstrumentItems.h            | 16 ++++++------
 GUI/Model/Device/InstrumentLibrary.cpp        | 12 ++++-----
 GUI/Model/Device/InstrumentLibrary.h          |  6 ++---
 .../Device/InstrumentsEditController.cpp      |  6 ++---
 GUI/Model/Device/InstrumentsEditController.h  | 10 +++----
 .../Device/SpecularBeamInclinationItem.cpp    |  2 +-
 .../Device/SpecularBeamInclinationItem.h      |  2 +-
 GUI/Model/FromCore/ItemizeSimulation.cpp      | 22 ++++++++--------
 GUI/Model/Job/JobItem.cpp                     |  2 +-
 GUI/Model/Model/ParameterTreeUtils.cpp        |  2 +-
 GUI/Model/Project/LinkInstrumentManager.cpp   |  2 +-
 GUI/Model/ToCore/SimulationToCore.cpp         |  6 ++---
 GUI/View/Import/RealDataPropertiesWidget.cpp  |  4 +--
 GUI/View/Import/SpecularDataImportWidget.cpp  |  2 +-
 GUI/View/Instrument/DetectorEditor.cpp        |  2 +-
 GUI/View/Instrument/DistributionEditor.cpp    |  4 +--
 GUI/View/Instrument/EnvironmentEditor.cpp     |  2 +-
 .../Instrument/FootprintCorrectionEditor.cpp  |  4 +--
 .../Instrument/InclinationAnglesEditor.cpp    |  2 +-
 .../Instrument/InstrumentEditController.cpp   |  2 +-
 .../Instrument/InstrumentLibraryEditor.cpp    |  4 +--
 GUI/View/Instrument/InstrumentListModel.cpp   | 26 +++++++++----------
 GUI/View/Instrument/InstrumentListModel.h     |  2 +-
 GUI/View/Instrument/InstrumentListView.cpp    |  8 +++---
 GUI/View/Instrument/InstrumentListView.h      |  2 +-
 GUI/View/Instrument/InstrumentView.cpp        | 10 +++----
 .../Instrument/ResolutionFunctionEditor.cpp   |  4 +--
 GUI/View/PlotUtil/DataPropertyWidget.cpp      |  2 +-
 GUI/View/Toplevel/ProjectSettingsView.cpp     |  2 +-
 GUI/View/Toplevel/SimulationView.cpp          |  2 +-
 Tests/Suite/GUI/Check.cpp                     |  2 +-
 Tests/Unit/GUI/TestDetectorItems.cpp          |  6 ++---
 Tests/Unit/GUI/TestInstrumentItems.cpp        |  8 +++---
 Tests/Unit/GUI/TestLinkInstrument.cpp         |  4 +--
 Tests/Unit/GUI/TestProjectDocument.cpp        |  6 ++---
 Tests/Unit/GUI/TestSaveService.cpp            | 14 +++++-----
 Tests/Unit/GUI/TestSessionModel.cpp           |  2 +-
 Tests/Unit/GUI/TestSessionXML.cpp             |  2 +-
 47 files changed, 144 insertions(+), 155 deletions(-)

diff --git a/GUI/Model/Device/AxesItems.h b/GUI/Model/Device/AxesItems.h
index 909b4f66bf9..fbc3120eb02 100644
--- a/GUI/Model/Device/AxesItems.h
+++ b/GUI/Model/Device/AxesItems.h
@@ -33,28 +33,18 @@ public:
 public:
     virtual std::unique_ptr<IAxis> createAxis(double scale) const;
 
-    // bins
-
     int binCount() const;
     void setBinCount(size_t value);
 
-    // min
-
     double min() const;
     void setMin(double value);
 
-    // max
-
     double max() const;
     void setMax(double value);
 
-    // title
-
     QString title() const;
     void setTitle(const QString& title);
 
-    // visibility
-
     bool isVisible() const;
     void setVisible(bool b);
 
diff --git a/GUI/Model/Device/BeamDistributionItem.h b/GUI/Model/Device/BeamDistributionItem.h
index c4a8c7c5a65..6b55e9dba8b 100644
--- a/GUI/Model/Device/BeamDistributionItem.h
+++ b/GUI/Model/Device/BeamDistributionItem.h
@@ -39,9 +39,9 @@ public:
     virtual double scaleFactor() const;
 
     template <typename T>
-    T* setDistributionType();
+    T* setDistributionItemType();
     DistributionItem* distributionItem() const { return m_distribution.currentItem(); }
-    SelectionProperty<DistributionItemCatalog>& distribution() { return m_distribution; }
+    SelectionProperty<DistributionItemCatalog>& distributionSelection() { return m_distribution; }
 
 protected:
     virtual std::unique_ptr<IDistribution1D> createDistribution1D() const;
@@ -50,7 +50,7 @@ protected:
 };
 
 template <typename T>
-T* BeamDistributionItem::setDistributionType()
+T* BeamDistributionItem::setDistributionItemType()
 {
     m_distribution.setCurrentItem<T>();
     return dynamic_cast<T*>(m_distribution.currentItem());
diff --git a/GUI/Model/Device/BeamItems.cpp b/GUI/Model/Device/BeamItems.cpp
index 1f338401357..3885097b1cb 100644
--- a/GUI/Model/Device/BeamItems.cpp
+++ b/GUI/Model/Device/BeamItems.cpp
@@ -144,7 +144,7 @@ BeamDistributionItem* BeamItem::inclinationAngleItem() const
     return m_inclinationAngleItem.get();
 }
 
-double BeamItem::getAzimuthalAngle() const
+double BeamItem::azimuthalAngle() const
 {
     return m_azimuthalAngleItem->azimuthalAngle();
 }
@@ -163,7 +163,7 @@ std::shared_ptr<Beam> BeamItem::createBeam() const
 {
     double lambda = wavelength();
     double inclination_angle = Units::deg2rad(getInclinationAngle());
-    double azimuthal_angle = Units::deg2rad(getAzimuthalAngle());
+    double azimuthal_angle = Units::deg2rad(azimuthalAngle());
 
     auto result =
         std::make_shared<Beam>(intensity(), lambda, Direction(inclination_angle, azimuthal_angle));
@@ -249,9 +249,9 @@ SpecularBeamInclinationItem* SpecularBeamItem::inclinationAngleItem() const
     return dynamic_cast<SpecularBeamInclinationItem*>(BeamItem::inclinationAngleItem());
 }
 
-BasicAxisItem* SpecularBeamItem::inclinationAxis() const
+BasicAxisItem* SpecularBeamItem::inclinationAxisItem() const
 {
-    return inclinationAngleItem()->alphaAxis();
+    return inclinationAngleItem()->alphaAxisItem();
 }
 
 void SpecularBeamItem::setGaussianFootprint(double value)
@@ -278,7 +278,7 @@ void SpecularBeamItem::updateToData(const IAxis& axis, QString units)
 
 void SpecularBeamItem::updateWavelength()
 {
-    auto* item = inclinationAngleItem()->alphaAxis();
+    auto* item = inclinationAngleItem()->alphaAxisItem();
     auto* wavelength = dynamic_cast<SpecularBeamWavelengthItem*>(wavelengthItem());
     if (auto* pointwiseAxis = dynamic_cast<PointwiseAxisItem*>(item)) {
         const auto* axis = pointwiseAxis->axis();
diff --git a/GUI/Model/Device/BeamItems.h b/GUI/Model/Device/BeamItems.h
index 87c576bce2c..a8f941b5eed 100644
--- a/GUI/Model/Device/BeamItems.h
+++ b/GUI/Model/Device/BeamItems.h
@@ -49,7 +49,7 @@ public:
     virtual void setInclinationAngle(double value);
     virtual BeamDistributionItem* inclinationAngleItem() const;
 
-    double getAzimuthalAngle() const;
+    double azimuthalAngle() const;
     void setAzimuthalAngle(double value);
     BeamAzimuthalAngleItem* azimuthalAngleItem() const;
 
@@ -80,9 +80,9 @@ public:
     double getInclinationAngle() const override;
     void setInclinationAngle(double value) override;
     SpecularBeamInclinationItem* inclinationAngleItem() const override;
-    BasicAxisItem* inclinationAxis() const;
+    BasicAxisItem* inclinationAxisItem() const;
 
-    SelectionProperty<FootprintItemCatalog>& footprint() { return m_footprint; }
+    SelectionProperty<FootprintItemCatalog>& footprintSelection() { return m_footprint; }
 
     void setGaussianFootprint(double value);
     void setSquareFootprint(double value);
diff --git a/GUI/Model/Device/DetectorItems.cpp b/GUI/Model/Device/DetectorItems.cpp
index fdf6dc0ad86..b82d8fb43b1 100644
--- a/GUI/Model/Device/DetectorItems.cpp
+++ b/GUI/Model/Device/DetectorItems.cpp
@@ -90,7 +90,7 @@ MaskItems& DetectorItem::maskItems()
     return m_maskItems;
 }
 
-SelectionProperty<ResolutionFunctionItemCatalog>& DetectorItem::resolutionFunction()
+SelectionProperty<ResolutionFunctionItemCatalog>& DetectorItem::resolutionFunctionSelection()
 {
     return m_resolutionFunction;
 }
diff --git a/GUI/Model/Device/DetectorItems.h b/GUI/Model/Device/DetectorItems.h
index 57b07c52a35..8a21eaec417 100644
--- a/GUI/Model/Device/DetectorItems.h
+++ b/GUI/Model/Device/DetectorItems.h
@@ -51,7 +51,7 @@ public:
     void importMasks(const MaskContainerItem* maskContainer);
     MaskItems& maskItems();
 
-    SelectionProperty<ResolutionFunctionItemCatalog>& resolutionFunction();
+    SelectionProperty<ResolutionFunctionItemCatalog>& resolutionFunctionSelection();
 
     template <typename T>
     T* setResolutionFunctionType();
diff --git a/GUI/Model/Device/InstrumentCollection.cpp b/GUI/Model/Device/InstrumentCollection.cpp
index 4ee4cf022e4..7e7c9d030fc 100644
--- a/GUI/Model/Device/InstrumentCollection.cpp
+++ b/GUI/Model/Device/InstrumentCollection.cpp
@@ -69,15 +69,15 @@ void InstrumentCollection::emplace_back(InstrumentItem* item)
     addEmptyInstrumentSelection().setCurrentItem(item);
 }
 
-InstrumentItem* InstrumentCollection::insertCopy(const InstrumentItem& source)
+InstrumentItem* InstrumentCollection::insertItemCopy(const InstrumentItem& source)
 {
-    auto* copy = source.createCopy();
+    auto* copy = source.createItemCopy();
     copy->setId(QUuid::createUuid().toString());
     emplace_back(copy);
     return copy;
 }
 
-QVector<InstrumentItem*> InstrumentCollection::collectedItems() const
+QVector<InstrumentItem*> InstrumentCollection::instrumentItems() const
 {
     QVector<InstrumentItem*> output;
     for (const auto& sel : m_instruments)
@@ -88,7 +88,7 @@ QVector<InstrumentItem*> InstrumentCollection::collectedItems() const
 QStringList InstrumentCollection::instrumentNames() const
 {
     QStringList existingNames;
-    for (const auto* item : collectedItems())
+    for (const auto* item : instrumentItems())
         existingNames << item->instrumentName();
     return existingNames;
 }
@@ -109,7 +109,7 @@ QVector<InstrumentItem*> InstrumentCollection::instrumentItems(
     const std::function<bool(const InstrumentItem*)>& accept) const
 {
     QVector<InstrumentItem*> result;
-    for (auto* p : collectedItems())
+    for (auto* p : instrumentItems())
         if (accept(p))
             result << p;
 
@@ -119,16 +119,16 @@ QVector<InstrumentItem*> InstrumentCollection::instrumentItems(
 QVector<Instrument2DItem*> InstrumentCollection::instrument2DItems() const
 {
     QVector<Instrument2DItem*> result;
-    for (auto* p : collectedItems())
+    for (auto* p : instrumentItems())
         if (auto* p2D = dynamic_cast<Instrument2DItem*>(p))
             result << p2D;
 
     return result;
 }
 
-InstrumentItem* InstrumentCollection::findInstrumentById(const QString& instrumentId) const
+InstrumentItem* InstrumentCollection::findInstrumentItemById(const QString& instrumentId) const
 {
-    for (auto* instrument : collectedItems())
+    for (auto* instrument : instrumentItems())
         if (instrument->id() == instrumentId)
             return instrument;
 
@@ -137,7 +137,7 @@ InstrumentItem* InstrumentCollection::findInstrumentById(const QString& instrume
 
 bool InstrumentCollection::instrumentExists(const QString& instrumentId) const
 {
-    return findInstrumentById(instrumentId) != nullptr;
+    return findInstrumentItemById(instrumentId) != nullptr;
 }
 
 void InstrumentCollection::removeInstrument(InstrumentItem* instrument)
diff --git a/GUI/Model/Device/InstrumentCollection.h b/GUI/Model/Device/InstrumentCollection.h
index 69a866cbe5b..ab0467a104c 100644
--- a/GUI/Model/Device/InstrumentCollection.h
+++ b/GUI/Model/Device/InstrumentCollection.h
@@ -31,7 +31,7 @@ public:
     ~InstrumentCollection();
 
     template <typename T>
-    T* addInstrument()
+    T* addInstrumentItem()
     {
         auto* t = new T();
         emplace_back(t);
@@ -49,14 +49,13 @@ public:
     //! Inserts a deep copy (also of any non xml data in a pointwise axis)
     //! The id will not be copied, but a new unique one will be created
     //! Returns the newly created instrument.
-    InstrumentItem* insertCopy(const InstrumentItem& source);
+    InstrumentItem* insertItemCopy(const InstrumentItem& source);
 
-    QVector<InstrumentItem*> collectedItems() const;
+    QVector<InstrumentItem*> instrumentItems() const;
     QVector<Instrument2DItem*> instrument2DItems() const;
-    QVector<InstrumentItem*>
-    instrumentItems(const std::function<bool(const InstrumentItem*)>& accept) const;
+    QVector<InstrumentItem*> instrumentItems(const std::function<bool(const InstrumentItem*)>& accept) const;
 
-    InstrumentItem* findInstrumentById(const QString& instrumentId) const;
+    InstrumentItem* findInstrumentItemById(const QString& instrumentId) const;
     bool instrumentExists(const QString& instrumentId) const;
 
     QString suggestInstrumentName(const QString& baseName) const;
diff --git a/GUI/Model/Device/InstrumentItems.cpp b/GUI/Model/Device/InstrumentItems.cpp
index c12e32cdf35..6cf1eb3a113 100644
--- a/GUI/Model/Device/InstrumentItems.cpp
+++ b/GUI/Model/Device/InstrumentItems.cpp
@@ -89,7 +89,7 @@ InstrumentItem::InstrumentItem()
     m_background.init("Background", "");
 }
 
-InstrumentItem* InstrumentItem::createCopy() const
+InstrumentItem* InstrumentItem::createItemCopy() const
 {
     const auto type = InstrumentItemCatalog::type(this);
     auto* copy = InstrumentItemCatalog::create(type);
@@ -118,7 +118,7 @@ void InstrumentItem::setWithPolarizerAnalyzer(bool with)
 }
 
 template <typename T>
-T* InstrumentItem::beam() const
+T* InstrumentItem::beamItemCast() const
 {
     return dynamic_cast<T*>(m_beamItem.get());
 }
@@ -256,12 +256,12 @@ SpecularInstrumentItem::SpecularInstrumentItem()
 
 SpecularBeamItem* SpecularInstrumentItem::beamItem() const
 {
-    return beam<SpecularBeamItem>();
+    return beamItemCast<SpecularBeamItem>();
 }
 
 std::vector<int> SpecularInstrumentItem::shape() const
 {
-    auto* const axis_item = beamItem()->inclinationAxis();
+    auto* const axis_item = beamItem()->inclinationAxisItem();
     return {axis_item->binCount()};
 }
 
@@ -286,7 +286,7 @@ bool SpecularInstrumentItem::alignedWith(const RealItem* item) const
         return false;
 
     const auto* axisItem =
-        dynamic_cast<const PointwiseAxisItem*>(beamItem()->inclinationAngleItem()->alphaAxis());
+        dynamic_cast<const PointwiseAxisItem*>(beamItem()->inclinationAngleItem()->alphaAxisItem());
     ASSERT(axisItem);
 
     if (axisItem->nativeAxisUnits() != native_units)
@@ -311,7 +311,7 @@ bool SpecularInstrumentItem::alignedWith(const RealItem* item) const
 const ICoordSystem* SpecularInstrumentItem::createCoordSystem() const
 {
     std::shared_ptr<Beam> beam = beamItem()->createBeam();
-    auto* axis_item = beamItem()->inclinationAxis();
+    auto* axis_item = beamItem()->inclinationAxisItem();
     if (auto* pointwise_axis = dynamic_cast<PointwiseAxisItem*>(axis_item)) {
         if (!pointwise_axis->axis()) // workaround for loading project
             return nullptr;
@@ -343,7 +343,7 @@ DepthProbeInstrumentItem::DepthProbeInstrumentItem()
 {
     m_beamItem.reset(new SpecularBeamItem(this));
 
-    auto* axisItem = beamItem()->inclinationAxis();
+    auto* axisItem = beamItem()->inclinationAxisItem();
     axisItem->setMin(0.0);
     axisItem->setMax(1.0);
     axisItem->setBinCount(500);
@@ -394,7 +394,7 @@ void DepthProbeInstrumentItem::readFrom(QXmlStreamReader* r)
 
 SpecularBeamItem* DepthProbeInstrumentItem::beamItem() const
 {
-    return beam<SpecularBeamItem>();
+    return beamItemCast<SpecularBeamItem>();
 }
 
 std::vector<int> DepthProbeInstrumentItem::shape() const
@@ -421,7 +421,7 @@ DepthProbeSimulation* DepthProbeInstrumentItem::createSimulation(const MultiLaye
 {
     auto* simulation = new DepthProbeSimulation(sample);
 
-    auto* const axis_item = beamItem()->inclinationAxis();
+    auto* const axis_item = beamItem()->inclinationAxisItem();
     auto axis = axis_item->createAxis(Units::deg);
 
     simulation->setBeamParameters(beamItem()->wavelength(), static_cast<int>(axis->size()),
diff --git a/GUI/Model/Device/InstrumentItems.h b/GUI/Model/Device/InstrumentItems.h
index 8c626208170..d6408ca6c5d 100644
--- a/GUI/Model/Device/InstrumentItems.h
+++ b/GUI/Model/Device/InstrumentItems.h
@@ -45,7 +45,7 @@ public:
     virtual ~InstrumentItem() = default;
 
     //! Creates an exact copy; also ID is the same!
-    InstrumentItem* createCopy() const;
+    InstrumentItem* createItemCopy() const;
 
     virtual void writeTo(QXmlStreamWriter* w) const;
     virtual void readFrom(QXmlStreamReader* r);
@@ -71,8 +71,8 @@ public:
     virtual BeamItem* beamItem() const;
 
     template <typename T>
-    T* setBackgroundType();
-    SelectionProperty<BackgroundItemCatalog>& background() { return m_background; }
+    T* setBackgroundItemType();
+    SelectionProperty<BackgroundItemCatalog>& backgroundSelection() { return m_background; }
     BackgroundItem* backgroundItem() const { return m_background.currentItem(); }
 
     virtual std::vector<int> shape() const = 0;
@@ -110,7 +110,7 @@ protected:
     explicit InstrumentItem(const QString& modelType);
 
     template <typename T>
-    T* beam() const;
+    T* beamItemCast() const;
 
     QString m_id;
     QString m_name;
@@ -179,9 +179,9 @@ public:
     void readFrom(QXmlStreamReader* r) override;
 
     template <typename T>
-    T* setDetectorType();
+    T* setDetectorItemType();
     DetectorItem* detectorItem() const { return m_detector.currentItem(); }
-    SelectionProperty<DetectorItemCatalog>& detector() { return m_detector; }
+    SelectionProperty<DetectorItemCatalog>& detectorSelection() { return m_detector; }
 
     void importMasks(const MaskContainerItem* maskContainer) override;
 
@@ -236,14 +236,14 @@ protected:
 //  ************************************************************************************************
 
 template <typename T>
-T* InstrumentItem::setBackgroundType()
+T* InstrumentItem::setBackgroundItemType()
 {
     m_background.setCurrentItem<T>();
     return dynamic_cast<T*>(m_background.currentItem());
 }
 
 template <typename T>
-T* Instrument2DItem::setDetectorType()
+T* Instrument2DItem::setDetectorItemType()
 {
     m_detector.setCurrentItem<T>();
     return dynamic_cast<T*>(m_detector.currentItem());
diff --git a/GUI/Model/Device/InstrumentLibrary.cpp b/GUI/Model/Device/InstrumentLibrary.cpp
index 8b80cd676c7..e39689dc75f 100644
--- a/GUI/Model/Device/InstrumentLibrary.cpp
+++ b/GUI/Model/Device/InstrumentLibrary.cpp
@@ -48,19 +48,19 @@ QString InstrumentLibrary::suggestName(const QString& name) const
     return m_instrumentItems.suggestInstrumentName(name);
 }
 
-InstrumentItem* InstrumentLibrary::add(const QString& name, const InstrumentItem& itemToCopy)
+InstrumentItem* InstrumentLibrary::addItemCopy(const QString& name, const InstrumentItem& itemToCopy)
 {
-    return m_ec.addCopy(&itemToCopy, name);
+    return m_ec.addInstrumentItemCopy(&itemToCopy, name);
 }
 
 bool InstrumentLibrary::isEmpty() const
 {
-    return m_instrumentItems.collectedItems().isEmpty();
+    return m_instrumentItems.instrumentItems().isEmpty();
 }
 
-QList<InstrumentItem*> InstrumentLibrary::collectedItems() const
+QList<InstrumentItem*> InstrumentLibrary::instrumentItems() const
 {
-    return m_instrumentItems.collectedItems().toList();
+    return m_instrumentItems.instrumentItems().toList();
 }
 
 InstrumentsEditController* InstrumentLibrary::editController()
@@ -141,7 +141,7 @@ bool InstrumentLibrary::load()
     }
 }
 
-InstrumentCollection* InstrumentLibrary::collectedItems()
+InstrumentCollection* InstrumentLibrary::instrumentCollection()
 {
     return &m_instrumentItems;
 }
diff --git a/GUI/Model/Device/InstrumentLibrary.h b/GUI/Model/Device/InstrumentLibrary.h
index ab18678354e..cdc3fdff7dd 100644
--- a/GUI/Model/Device/InstrumentLibrary.h
+++ b/GUI/Model/Device/InstrumentLibrary.h
@@ -25,14 +25,14 @@ public:
     QString suggestName(const QString& name) const;
 
     //! Returns the new element
-    InstrumentItem* add(const QString& name, const InstrumentItem& itemToCopy);
+    InstrumentItem* addItemCopy(const QString& name, const InstrumentItem& itemToCopy);
     bool isEmpty() const;
-    QList<InstrumentItem*> collectedItems() const;
+    QList<InstrumentItem*> instrumentItems() const;
 
     bool saveIfModified();
     bool load();
 
-    InstrumentCollection* collectedItems();
+    InstrumentCollection* instrumentCollection();
 
     InstrumentsEditController* editController();
 
diff --git a/GUI/Model/Device/InstrumentsEditController.cpp b/GUI/Model/Device/InstrumentsEditController.cpp
index c6be4943922..6da33cdd553 100644
--- a/GUI/Model/Device/InstrumentsEditController.cpp
+++ b/GUI/Model/Device/InstrumentsEditController.cpp
@@ -20,7 +20,7 @@ InstrumentsEditController::InstrumentsEditController(InstrumentCollection* instr
 {
 }
 
-InstrumentCollection* InstrumentsEditController::collectedItems()
+InstrumentCollection* InstrumentsEditController::instrumentCollection()
 {
     return m_instruments;
 }
@@ -31,10 +31,10 @@ void InstrumentsEditController::removeInstrument(InstrumentItem* instrument)
     emit instrumentAddedOrRemoved();
 }
 
-InstrumentItem* InstrumentsEditController::addCopy(const InstrumentItem* instrument,
+InstrumentItem* InstrumentsEditController::addInstrumentItemCopy(const InstrumentItem* instrument,
                                                    const QString& name)
 {
-    InstrumentItem* copy = m_instruments->insertCopy(*instrument);
+    InstrumentItem* copy = m_instruments->insertItemCopy(*instrument);
     copy->setInstrumentName(name);
     emit instrumentAddedOrRemoved();
     return copy;
diff --git a/GUI/Model/Device/InstrumentsEditController.h b/GUI/Model/Device/InstrumentsEditController.h
index 88fb7f8db3e..ebd9db7137f 100644
--- a/GUI/Model/Device/InstrumentsEditController.h
+++ b/GUI/Model/Device/InstrumentsEditController.h
@@ -44,17 +44,17 @@ public:
     InstrumentsEditController(InstrumentCollection* instruments);
 
     //! The list of existing instruments.
-    InstrumentCollection* collectedItems();
+    InstrumentCollection* instrumentCollection();
 
     //! Add an instrument and emit the respective signal.
     template <typename T>
-    T* addInstrument();
+    T* addInstrumentItem();
 
     //! Add an instrument and emit the respective signal.
     void removeInstrument(InstrumentItem* instrument);
 
     //! Copy an instrument, set its name and emit the respective signal.
-    InstrumentItem* addCopy(const InstrumentItem* instrument, const QString& name);
+    InstrumentItem* addInstrumentItemCopy(const InstrumentItem* instrument, const QString& name);
 
     //! Set an instrument's name and emit the respective signal.
     void setInstrumentName(InstrumentItem* instrument, const QString& name);
@@ -87,9 +87,9 @@ private:
 };
 
 template <typename T>
-T* InstrumentsEditController::addInstrument()
+T* InstrumentsEditController::addInstrumentItem()
 {
-    auto* t = m_instruments->addInstrument<T>();
+    auto* t = m_instruments->addInstrumentItem<T>();
     emit instrumentAddedOrRemoved();
     return t;
 }
diff --git a/GUI/Model/Device/SpecularBeamInclinationItem.cpp b/GUI/Model/Device/SpecularBeamInclinationItem.cpp
index 4309bf47d14..cdfd84571ff 100644
--- a/GUI/Model/Device/SpecularBeamInclinationItem.cpp
+++ b/GUI/Model/Device/SpecularBeamInclinationItem.cpp
@@ -149,7 +149,7 @@ double SpecularBeamInclinationItem::scaleFactor() const
     return Units::deg;
 }
 
-BasicAxisItem* SpecularBeamInclinationItem::alphaAxis() const
+BasicAxisItem* SpecularBeamInclinationItem::alphaAxisItem() const
 {
     return m_currentAxisIsUniformAxis ? m_uniformAlphaAxis.get() : m_pointwiseAlphaAxis.get();
 }
diff --git a/GUI/Model/Device/SpecularBeamInclinationItem.h b/GUI/Model/Device/SpecularBeamInclinationItem.h
index 0febf457af5..fa9b4b024b5 100644
--- a/GUI/Model/Device/SpecularBeamInclinationItem.h
+++ b/GUI/Model/Device/SpecularBeamInclinationItem.h
@@ -33,7 +33,7 @@ public:
     double scaleFactor() const override;
 
     //! The currently selected axis
-    BasicAxisItem* alphaAxis() const;
+    BasicAxisItem* alphaAxisItem() const;
 
     //! True if a pointwise axis was defined.
     //!
diff --git a/GUI/Model/FromCore/ItemizeSimulation.cpp b/GUI/Model/FromCore/ItemizeSimulation.cpp
index 8d77ba169b1..af8e49a069b 100644
--- a/GUI/Model/FromCore/ItemizeSimulation.cpp
+++ b/GUI/Model/FromCore/ItemizeSimulation.cpp
@@ -164,32 +164,32 @@ void setDistribution(BeamDistributionItem* part_distr_item, ParameterDistributio
 
     DistributionItem* distItem = nullptr;
     if (const auto* distr = dynamic_cast<const DistributionGate*>(distribution)) {
-        auto* distr_gate_item = part_distr_item->setDistributionType<DistributionGateItem>();
+        auto* distr_gate_item = part_distr_item->setDistributionItemType<DistributionGateItem>();
         distr_gate_item->setRange(factor * distr->min(), factor * distr->max());
         distItem = distr_gate_item;
     } else if (const auto* distr = dynamic_cast<const DistributionLorentz*>(distribution)) {
-        auto* distr_lorentz_item = part_distr_item->setDistributionType<DistributionLorentzItem>();
+        auto* distr_lorentz_item = part_distr_item->setDistributionItemType<DistributionLorentzItem>();
         distr_lorentz_item->setMean(factor * distr->mean());
         distr_lorentz_item->setHwhm(factor * distr->hwhm());
         distItem = distr_lorentz_item;
     } else if (const auto* distr = dynamic_cast<const DistributionGaussian*>(distribution)) {
-        auto* distr_gauss_item = part_distr_item->setDistributionType<DistributionGaussianItem>();
+        auto* distr_gauss_item = part_distr_item->setDistributionItemType<DistributionGaussianItem>();
         distr_gauss_item->setMean(factor * distr->mean());
         distr_gauss_item->setStandardDeviation(factor * distr->getStdDev());
         distItem = distr_gauss_item;
     } else if (const auto* distr = dynamic_cast<const DistributionLogNormal*>(distribution)) {
         auto* distr_lognorm_item =
-            part_distr_item->setDistributionType<DistributionLogNormalItem>();
+            part_distr_item->setDistributionItemType<DistributionLogNormalItem>();
         distr_lognorm_item->setMedian(factor * distr->getMedian());
         distr_lognorm_item->setScaleParameter(distr->getScalePar());
         distItem = distr_lognorm_item;
     } else if (const auto* distr = dynamic_cast<const DistributionCosine*>(distribution)) {
-        auto* distr_cos_item = part_distr_item->setDistributionType<DistributionCosineItem>();
+        auto* distr_cos_item = part_distr_item->setDistributionItemType<DistributionCosineItem>();
         distr_cos_item->setMean(factor * distr->mean());
         distr_cos_item->setSigma(factor * distr->sigma());
         distItem = distr_cos_item;
     } else if (const auto* distr = dynamic_cast<const DistributionTrapezoid*>(distribution)) {
-        auto* distr_trapez_item = part_distr_item->setDistributionType<DistributionTrapezoidItem>();
+        auto* distr_trapez_item = part_distr_item->setDistributionItemType<DistributionTrapezoidItem>();
         distr_trapez_item->setCenter(factor * distr->mean());
         distr_trapez_item->setLeftWidth(factor * distr->getLeftWidth());
         distr_trapez_item->setMiddleWidth(factor * distr->getMiddleWidth());
@@ -358,10 +358,10 @@ void setRectangularDetector(RectangularDetectorItem* detectorItem,
 void setDetectorGeometry(Instrument2DItem* instrument_item, const IDetector& detector)
 {
     if (const auto* det = dynamic_cast<const SphericalDetector*>(&detector)) {
-        auto* item = instrument_item->setDetectorType<SphericalDetectorItem>();
+        auto* item = instrument_item->setDetectorItemType<SphericalDetectorItem>();
         setSphericalDetector(item, *det);
     } else if (const auto* det = dynamic_cast<const RectangularDetector*>(&detector)) {
-        auto* item = instrument_item->setDetectorType<RectangularDetectorItem>();
+        auto* item = instrument_item->setDetectorItemType<RectangularDetectorItem>();
         setRectangularDetector(item, *det);
     } else {
         throw Error("setDetectorGeometry() -> Unknown detector type.");
@@ -425,11 +425,11 @@ void setBackground(InstrumentItem* instrument_item, const ISimulation& simulatio
 {
     const auto* bg = simulation.background();
     if (const auto* constant_bg = dynamic_cast<const ConstantBackground*>(bg)) {
-        auto* constant_bg_item = instrument_item->setBackgroundType<ConstantBackgroundItem>();
+        auto* constant_bg_item = instrument_item->setBackgroundItemType<ConstantBackgroundItem>();
         double value = constant_bg->backgroundValue();
         constant_bg_item->setBackgroundValue(value);
     } else if (dynamic_cast<const PoissonBackground*>(bg))
-        instrument_item->setBackgroundType<PoissonBackgroundItem>();
+        instrument_item->setBackgroundItemType<PoissonBackgroundItem>();
 }
 
 GISASInstrumentItem* createGISASInstrumentItem(const ScatteringSimulation& simulation)
@@ -467,7 +467,7 @@ SpecularInstrumentItem* createSpecularInstrumentItem(const SpecularSimulation& s
     beam_item->setInclinationAngle(0.0); // inclination angle is hardcoded
     beam_item->setAzimuthalAngle(0.0);   // azimuthal angle is hardcoded
 
-    auto* axis_item = beam_item->inclinationAxis();
+    auto* axis_item = beam_item->inclinationAxisItem();
     setAxisItem(axis_item, *scan->coordinateAxis(), 1. / Units::deg);
 
     setFootprintFactor(scan->footprintFactor(), beam_item);
diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp
index e1929f5f842..0cd4a12255e 100644
--- a/GUI/Model/Job/JobItem.cpp
+++ b/GUI/Model/Job/JobItem.cpp
@@ -267,7 +267,7 @@ Instrument2DItem* JobItem::instrument2DItem()
 
 void JobItem::copyInstrumentIntoJob(const InstrumentItem* instrument)
 {
-    m_instrument.setCurrentItem(instrument->createCopy());
+    m_instrument.setCurrentItem(instrument->createItemCopy());
     m_instrument.currentItem()->setId(QUuid::createUuid().toString());
 }
 
diff --git a/GUI/Model/Model/ParameterTreeUtils.cpp b/GUI/Model/Model/ParameterTreeUtils.cpp
index 2f70aebd5ad..a59ceb46c0d 100644
--- a/GUI/Model/Model/ParameterTreeUtils.cpp
+++ b/GUI/Model/Model/ParameterTreeUtils.cpp
@@ -369,7 +369,7 @@ void ParameterTreeBuilder::addDetector(ParameterLabelItem* parentLabel, Detector
 {
     const auto addResolutionFunction = [=](ParameterLabelItem* detLabel) {
         if (auto* r = dynamic_cast<ResolutionFunction2DGaussianItem*>(
-                detector->resolutionFunction().currentItem())) {
+                detector->resolutionFunctionSelection().currentItem())) {
             auto* label = new ParameterLabelItem("Resolution (Gaussian)", detLabel);
             addParameterItem(label, r->sigmaX());
             addParameterItem(label, r->sigmaY());
diff --git a/GUI/Model/Project/LinkInstrumentManager.cpp b/GUI/Model/Project/LinkInstrumentManager.cpp
index 8e976842283..a9f7c17985b 100644
--- a/GUI/Model/Project/LinkInstrumentManager.cpp
+++ b/GUI/Model/Project/LinkInstrumentManager.cpp
@@ -79,7 +79,7 @@ LinkInstrumentManager::LinkInstrumentManager(ProjectDocument* document)
 bool LinkInstrumentManager::canLinkDataToInstrument(const RealItem* realItem,
                                                     const QString& identifier, QWidget* parent)
 {
-    auto* instrumentItem = m_document->collectedItems()->findInstrumentById(identifier);
+    auto* instrumentItem = m_document->collectedItems()->findInstrumentItemById(identifier);
 
     // linking to null instrument is possible, it means unlinking from currently linked
     if (!instrumentItem)
diff --git a/GUI/Model/ToCore/SimulationToCore.cpp b/GUI/Model/ToCore/SimulationToCore.cpp
index ebf2500a1b4..1cca80d3277 100644
--- a/GUI/Model/ToCore/SimulationToCore.cpp
+++ b/GUI/Model/ToCore/SimulationToCore.cpp
@@ -118,7 +118,7 @@ OffspecSimulation* createOffspecSimulation(std::unique_ptr<MultiLayer> sample,
 
     auto* beamItem = item->beamItem();
     const auto axis = item->alphaAxis().createAxis(Units::deg);
-    result->setBeamParameters(beamItem->wavelength(), *axis, beamItem->getAzimuthalAngle());
+    result->setBeamParameters(beamItem->wavelength(), *axis, beamItem->azimuthalAngle());
 
     addBackgroundToSimulation(*item, *result);
 
@@ -129,8 +129,8 @@ SpecularSimulation* createSpecularSimulation(std::unique_ptr<MultiLayer> sample,
                                              const SpecularInstrumentItem* item)
 {
     auto* beam_item = item->beamItem();
-    auto* const axis_item = beam_item->inclinationAxis();
-    auto* const footprint_item = beam_item->footprint().currentItem();
+    auto* const axis_item = beam_item->inclinationAxisItem();
+    auto* const footprint_item = beam_item->footprintSelection().currentItem();
 
     AlphaScan scan(beam_item->wavelength(), *axis_item->createAxis(Units::deg));
     scan.setFootprintFactor(footprint_item->createFootprint().get());
diff --git a/GUI/View/Import/RealDataPropertiesWidget.cpp b/GUI/View/Import/RealDataPropertiesWidget.cpp
index 65a9078e51e..a256efca28f 100644
--- a/GUI/View/Import/RealDataPropertiesWidget.cpp
+++ b/GUI/View/Import/RealDataPropertiesWidget.cpp
@@ -83,7 +83,7 @@ void RealDataPropertiesWidget::onInstrumentComboIndexChanged(int /*index*/)
     if (m_document->linkInstrumentManager()->canLinkDataToInstrument(
             m_currentRealItem, newSelectedInstrumentId, GUI::Global::mainWindow)) {
         const auto* newSelectedInstrument =
-            m_document->collectedItems()->findInstrumentById(newSelectedInstrumentId);
+            m_document->collectedItems()->findInstrumentItemById(newSelectedInstrumentId);
         m_currentRealItem->linkToInstrument(newSelectedInstrument);
     } else
         // Linking was impossible or denied. Set combo to previous state
@@ -103,7 +103,7 @@ void RealDataPropertiesWidget::updateInstrumentComboEntries()
 
     // fill the combo. Userdata contains instrument's uid
     m_instrumentCombo->addItem("Undefined", ""); // undefined instrument
-    for (auto* instrumentItem : m_document->collectedItems()->collectedItems())
+    for (auto* instrumentItem : m_document->collectedItems()->instrumentItems())
         m_instrumentCombo->addItem(instrumentItem->instrumentName(), instrumentItem->id());
 
     updateInstrumentComboIndex();
diff --git a/GUI/View/Import/SpecularDataImportWidget.cpp b/GUI/View/Import/SpecularDataImportWidget.cpp
index 95cc510c935..7ce182e2187 100644
--- a/GUI/View/Import/SpecularDataImportWidget.cpp
+++ b/GUI/View/Import/SpecularDataImportWidget.cpp
@@ -335,7 +335,7 @@ void SpecularDataImportWidget::onPropertiesChanged()
 
     ProjectDocument* projectDocument = gSessionData->projectDocument.value();
     const auto* linkedInstrument =
-        projectDocument->collectedItems()->findInstrumentById(realItem()->instrumentId());
+        projectDocument->collectedItems()->findInstrumentItemById(realItem()->instrumentId());
 
     if (linkedInstrument)
         if (!linkedInstrument->alignedWith(realItem()))
diff --git a/GUI/View/Instrument/DetectorEditor.cpp b/GUI/View/Instrument/DetectorEditor.cpp
index 1b3eec2bdc3..e86b16722dd 100644
--- a/GUI/View/Instrument/DetectorEditor.cpp
+++ b/GUI/View/Instrument/DetectorEditor.cpp
@@ -31,7 +31,7 @@ DetectorEditor::DetectorEditor(QWidget* parent, Instrument2DItem* instrument)
     m_formLayout = new QFormLayout(this);
 
     auto* detectorTypeCombo =
-        GUI::Util::createComboBoxFromProperty(instrument->detector(), [=](int) {
+        GUI::Util::createComboBoxFromProperty(instrument->detectorSelection(), [=](int) {
             createDetectorWidgets();
             emit dataChanged();
         });
diff --git a/GUI/View/Instrument/DistributionEditor.cpp b/GUI/View/Instrument/DistributionEditor.cpp
index 9b5973cd6a6..a27eadeb61b 100644
--- a/GUI/View/Instrument/DistributionEditor.cpp
+++ b/GUI/View/Instrument/DistributionEditor.cpp
@@ -44,7 +44,7 @@ DistributionSelector::DistributionSelector(std::optional<MeanConfig> mean_config
     m_formLayout = new QFormLayout(this);
     m_formLayout->setContentsMargins(0, 0, 0, 0);
 
-    m_distributionCombo = GUI::Util::createComboBoxFromProperty(item->distribution(), [=](int) {
+    m_distributionCombo = GUI::Util::createComboBoxFromProperty(item->distributionSelection(), [=](int) {
         createDistributionWidgets();
         emit distributionChanged();
     });
@@ -156,7 +156,7 @@ GUI::ID::Distributions DistributionSelector::distributions() const
 void DistributionSelector::refresh()
 {
     QSignalBlocker b(m_distributionCombo);
-    m_distributionCombo->setCurrentIndex(m_item->distribution().currentIndex());
+    m_distributionCombo->setCurrentIndex(m_item->distributionSelection().currentIndex());
     createDistributionWidgets();
 }
 
diff --git a/GUI/View/Instrument/EnvironmentEditor.cpp b/GUI/View/Instrument/EnvironmentEditor.cpp
index a17f986e49b..7cc3b4650da 100644
--- a/GUI/View/Instrument/EnvironmentEditor.cpp
+++ b/GUI/View/Instrument/EnvironmentEditor.cpp
@@ -29,7 +29,7 @@ EnvironmentEditor::EnvironmentEditor(QWidget* parent, InstrumentItem* instrument
     m_formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
 
     auto* backgroundTypeCombo =
-        GUI::Util::createComboBoxFromProperty(instrument->background(), [=](int) {
+        GUI::Util::createComboBoxFromProperty(instrument->backgroundSelection(), [=](int) {
             createBackgroundWidgets();
             emit dataChanged();
         });
diff --git a/GUI/View/Instrument/FootprintCorrectionEditor.cpp b/GUI/View/Instrument/FootprintCorrectionEditor.cpp
index 859d2210a37..37bd7b272fd 100644
--- a/GUI/View/Instrument/FootprintCorrectionEditor.cpp
+++ b/GUI/View/Instrument/FootprintCorrectionEditor.cpp
@@ -28,7 +28,7 @@ FootprintCorrectionEditor::FootprintCorrectionEditor(QWidget* parent, SpecularBe
     setProperty("subgroup", true); // for stylesheet addressing
     m_formLayout = new QFormLayout(this);
     m_formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
-    auto* typeCombo = GUI::Util::createComboBoxFromProperty(item->footprint(), [=](int) {
+    auto* typeCombo = GUI::Util::createComboBoxFromProperty(item->footprintSelection(), [=](int) {
         createFootprintWidgets();
         emit dataChanged();
     });
@@ -44,7 +44,7 @@ void FootprintCorrectionEditor::createFootprintWidgets()
     while (m_formLayout->rowCount() > 1)
         m_formLayout->removeRow(1);
 
-    auto* footprintItem = m_item->footprint().currentItem();
+    auto* footprintItem = m_item->footprintSelection().currentItem();
     if (auto* square = dynamic_cast<FootprintSquareItem*>(footprintItem)) {
         auto* spinbox = new DoubleSpinBox(square->squareFootprintValue());
         spinbox->setSingleStep(0.01);
diff --git a/GUI/View/Instrument/InclinationAnglesEditor.cpp b/GUI/View/Instrument/InclinationAnglesEditor.cpp
index 172b512d847..891009b14f7 100644
--- a/GUI/View/Instrument/InclinationAnglesEditor.cpp
+++ b/GUI/View/Instrument/InclinationAnglesEditor.cpp
@@ -90,7 +90,7 @@ void InclinationAnglesEditor::onAxisTypeSelected(int index)
             emit dataChanged();
         }
 
-        m_form->setAxisItem(m_item->alphaAxis());
+        m_form->setAxisItem(m_item->alphaAxisItem());
         m_form->setEnabled(index == 0);
     }
 }
diff --git a/GUI/View/Instrument/InstrumentEditController.cpp b/GUI/View/Instrument/InstrumentEditController.cpp
index 0bcbc281f8a..72044f0267b 100644
--- a/GUI/View/Instrument/InstrumentEditController.cpp
+++ b/GUI/View/Instrument/InstrumentEditController.cpp
@@ -47,7 +47,7 @@ void InstrumentEditController::notifyWavelengthDistributionChanged()
     // update values in pointwise axis. This is necessary after a change of the mean value of the
     // wavelength.
     if (auto* specularBeam = dynamic_cast<SpecularBeamItem*>(m_instrumentItem->beamItem())) {
-        if (auto* pw = dynamic_cast<PointwiseAxisItem*>(specularBeam->inclinationAxis()))
+        if (auto* pw = dynamic_cast<PointwiseAxisItem*>(specularBeam->inclinationAxisItem()))
             pw->updateIndicators();
     }
 
diff --git a/GUI/View/Instrument/InstrumentLibraryEditor.cpp b/GUI/View/Instrument/InstrumentLibraryEditor.cpp
index 9b472ed41be..2e2d4e286b9 100644
--- a/GUI/View/Instrument/InstrumentLibraryEditor.cpp
+++ b/GUI/View/Instrument/InstrumentLibraryEditor.cpp
@@ -36,7 +36,7 @@
 InstrumentLibraryEditor::InstrumentLibraryEditor(QWidget* parent)
     : QDialog(parent)
     , m_ui(new Ui::InstrumentLibraryEditor)
-    , m_treeModel(new TreeModel(this, gSessionData->instrumentLibrary.collectedItems()))
+    , m_treeModel(new TreeModel(this, gSessionData->instrumentLibrary.instrumentCollection()))
     , m_chosenItem(nullptr)
 {
     m_ui->setupUi(this);
@@ -117,7 +117,7 @@ void InstrumentLibraryEditor::execAdd(const InstrumentItem& instrumentToAdd)
 {
     const QString& newName =
         gSessionData->instrumentLibrary.suggestName(instrumentToAdd.instrumentName());
-    auto* addedInstrument = gSessionData->instrumentLibrary.add(newName, instrumentToAdd);
+    auto* addedInstrument = gSessionData->instrumentLibrary.addItemCopy(newName, instrumentToAdd);
 
     setWindowTitle("Instrument Library - Add instrument");
 
diff --git a/GUI/View/Instrument/InstrumentListModel.cpp b/GUI/View/Instrument/InstrumentListModel.cpp
index e056e062354..4ef68812bf6 100644
--- a/GUI/View/Instrument/InstrumentListModel.cpp
+++ b/GUI/View/Instrument/InstrumentListModel.cpp
@@ -71,12 +71,12 @@ InstrumentListModel::InstrumentListModel(QObject* parent, InstrumentsEditControl
 
 int InstrumentListModel::rowCount(const QModelIndex&) const
 {
-    return m_ec->collectedItems()->collectedItems().size();
+    return m_ec->instrumentCollection()->instrumentItems().size();
 }
 
 QVariant InstrumentListModel::data(const QModelIndex& index, int role) const
 {
-    QVector<InstrumentItem*> instruments = m_ec->collectedItems()->collectedItems();
+    QVector<InstrumentItem*> instruments = m_ec->instrumentCollection()->instrumentItems();
     if (!index.isValid() || index.row() >= instruments.size() || index.row() < 0)
         return {};
 
@@ -99,12 +99,12 @@ QVariant InstrumentListModel::data(const QModelIndex& index, int role) const
     return {};
 }
 
-InstrumentItem* InstrumentListModel::instrumentForIndex(const QModelIndex& index) const
+InstrumentItem* InstrumentListModel::instrumentItemForIndex(const QModelIndex& index) const
 {
     if (!index.isValid())
         return nullptr;
 
-    QVector<InstrumentItem*> instruments = m_ec->collectedItems()->collectedItems();
+    QVector<InstrumentItem*> instruments = m_ec->instrumentCollection()->instrumentItems();
     if (index.row() >= 0 && index.row() < instruments.size())
         return instruments[index.row()];
     return nullptr;
@@ -133,14 +133,14 @@ QModelIndex InstrumentListModel::addNewDepthProbeInstrument()
 void InstrumentListModel::removeInstrument(const QModelIndex& index)
 {
     beginRemoveRows(QModelIndex(), index.row(), index.row());
-    InstrumentItem* instrument = instrumentForIndex(index);
+    InstrumentItem* instrument = instrumentItemForIndex(index);
     m_ec->removeInstrument(instrument);
     endRemoveRows();
 }
 
 QModelIndex InstrumentListModel::copyInstrument(const QModelIndex& source)
 {
-    const InstrumentItem* srcInstr = instrumentForIndex(source);
+    const InstrumentItem* srcInstr = instrumentItemForIndex(source);
     ASSERT(srcInstr);
 
     return copyInstrument(srcInstr);
@@ -149,11 +149,11 @@ QModelIndex InstrumentListModel::copyInstrument(const QModelIndex& source)
 QModelIndex InstrumentListModel::copyInstrument(const InstrumentItem* source)
 {
     const QString copyName =
-        m_ec->collectedItems()->suggestInstrumentName(source->instrumentName());
-    const int row = m_ec->collectedItems()->collectedItems().size();
+        m_ec->instrumentCollection()->suggestInstrumentName(source->instrumentName());
+    const int row = m_ec->instrumentCollection()->instrumentItems().size();
 
     beginInsertRows(QModelIndex(), row, row);
-    m_ec->addCopy(source, copyName);
+    m_ec->addInstrumentItemCopy(source, copyName);
     endInsertRows();
 
     return createIndex(row, 0);
@@ -163,11 +163,11 @@ template <class Instrument>
 QModelIndex InstrumentListModel::addNewInstrument()
 {
     const QString name =
-        m_ec->collectedItems()->suggestInstrumentName(defaultInstrumentName<Instrument>());
-    const int row = m_ec->collectedItems()->collectedItems().size();
+        m_ec->instrumentCollection()->suggestInstrumentName(defaultInstrumentName<Instrument>());
+    const int row = m_ec->instrumentCollection()->instrumentItems().size();
 
     beginInsertRows(QModelIndex(), row, row);
-    auto* instrument = m_ec->addInstrument<Instrument>();
+    auto* instrument = m_ec->addInstrumentItem<Instrument>();
     m_ec->setInstrumentName(instrument, name);
     endInsertRows();
 
@@ -176,7 +176,7 @@ QModelIndex InstrumentListModel::addNewInstrument()
 
 void InstrumentListModel::onInstrumentNameChanged(const InstrumentItem* instrument)
 {
-    const auto instruments = m_ec->collectedItems()->collectedItems();
+    const auto instruments = m_ec->instrumentCollection()->instrumentItems();
     if (const auto row = instruments.indexOf(const_cast<InstrumentItem*>(instrument)); row != -1)
         emit dataChanged(index(row, 0), index(row, 0));
 }
diff --git a/GUI/View/Instrument/InstrumentListModel.h b/GUI/View/Instrument/InstrumentListModel.h
index 118d7af3a05..54d227d3394 100644
--- a/GUI/View/Instrument/InstrumentListModel.h
+++ b/GUI/View/Instrument/InstrumentListModel.h
@@ -35,7 +35,7 @@ public:
 
     QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
 
-    InstrumentItem* instrumentForIndex(const QModelIndex& index) const;
+    InstrumentItem* instrumentItemForIndex(const QModelIndex& index) const;
 
     QModelIndex addNewGISASInstrument();
     QModelIndex addNewOffspecInstrument();
diff --git a/GUI/View/Instrument/InstrumentListView.cpp b/GUI/View/Instrument/InstrumentListView.cpp
index 5436f87d045..60265d72e2a 100644
--- a/GUI/View/Instrument/InstrumentListView.cpp
+++ b/GUI/View/Instrument/InstrumentListView.cpp
@@ -145,11 +145,11 @@ QList<QAction*> InstrumentListView::toolbarActions() const
             m_loadFromLibraryAction};
 }
 
-InstrumentItem* InstrumentListView::currentInstrument() const
+InstrumentItem* InstrumentListView::currentInstrumentItem() const
 {
     const QModelIndexList indexes = m_listView->selectionModel()->selectedIndexes();
     if (!indexes.empty())
-        return m_model->instrumentForIndex(indexes.front());
+        return m_model->instrumentItemForIndex(indexes.front());
     return nullptr;
 }
 
@@ -159,7 +159,7 @@ void InstrumentListView::onItemSelectionChanged()
 
     QModelIndexList indexes = m_listView->selectionModel()->selectedIndexes();
     if (!indexes.empty())
-        emit instrumentSelected(m_model->instrumentForIndex(indexes.front()));
+        emit instrumentSelected(m_model->instrumentItemForIndex(indexes.front()));
     else
         emit instrumentSelected(nullptr);
 }
@@ -215,7 +215,7 @@ void InstrumentListView::onStoreInLibrary()
         return;
 
     QModelIndex idx = m_listView->selectionModel()->selectedIndexes().front();
-    InstrumentItem* instrument = m_model->instrumentForIndex(idx);
+    InstrumentItem* instrument = m_model->instrumentItemForIndex(idx);
 
     InstrumentLibraryEditor dlg(GUI::Global::mainWindow);
     dlg.setGisasEnabled(m_document->functionalities().testFlag(ProjectDocument::Gisas));
diff --git a/GUI/View/Instrument/InstrumentListView.h b/GUI/View/Instrument/InstrumentListView.h
index 3de21c5284c..fe7e9988409 100644
--- a/GUI/View/Instrument/InstrumentListView.h
+++ b/GUI/View/Instrument/InstrumentListView.h
@@ -38,7 +38,7 @@ public:
 
     QList<QAction*> toolbarActions() const;
 
-    InstrumentItem* currentInstrument() const;
+    InstrumentItem* currentInstrumentItem() const;
 
 signals:
     void instrumentSelected(InstrumentItem* instrument);
diff --git a/GUI/View/Instrument/InstrumentView.cpp b/GUI/View/Instrument/InstrumentView.cpp
index 3e53f7a0c73..f9372514539 100644
--- a/GUI/View/Instrument/InstrumentView.cpp
+++ b/GUI/View/Instrument/InstrumentView.cpp
@@ -86,7 +86,7 @@ void InstrumentView::hideEvent(QHideEvent*)
 
 void InstrumentView::createWidgetsForCurrentInstrument()
 {
-    auto* currentInstrument = m_instrumentListView->currentInstrument();
+    auto* currentInstrument = m_instrumentListView->currentInstrumentItem();
     if (!currentInstrument) {
         m_scrollArea->setWidget(new QWidget(m_scrollArea)); // blank widget
         return;
@@ -152,14 +152,14 @@ void InstrumentView::createWidgetsForCurrentInstrument()
 
 void InstrumentView::onInstrumentNameEdited(const QString& newName)
 {
-    auto* currentInstrument = m_instrumentListView->currentInstrument();
+    auto* currentInstrument = m_instrumentListView->currentInstrumentItem();
     if (currentInstrument && currentInstrument->instrumentName() != newName)
         m_document->instrumentsEditController()->setInstrumentName(currentInstrument, newName);
 }
 
 void InstrumentView::onInstrumentdescriptionEdited(const QString& t)
 {
-    auto* currentInstrument = m_instrumentListView->currentInstrument();
+    auto* currentInstrument = m_instrumentListView->currentInstrumentItem();
     if (currentInstrument && currentInstrument->description() != t) {
         currentInstrument->setDescription(t);
         onInstrumentChangedByEditor();
@@ -169,12 +169,12 @@ void InstrumentView::onInstrumentdescriptionEdited(const QString& t)
 void InstrumentView::onInstrumentChangedByEditor()
 {
     m_document->instrumentsEditController()->notifyInstrumentChanged(
-        m_instrumentListView->currentInstrument());
+        m_instrumentListView->currentInstrumentItem());
 }
 
 void InstrumentView::onInstrumentChangedFromExternal(const InstrumentItem* instrument)
 {
-    if (instrument == m_instrumentListView->currentInstrument())
+    if (instrument == m_instrumentListView->currentInstrumentItem())
         createWidgetsForCurrentInstrument();
 }
 
diff --git a/GUI/View/Instrument/ResolutionFunctionEditor.cpp b/GUI/View/Instrument/ResolutionFunctionEditor.cpp
index 4518aac1a54..e23d706e927 100644
--- a/GUI/View/Instrument/ResolutionFunctionEditor.cpp
+++ b/GUI/View/Instrument/ResolutionFunctionEditor.cpp
@@ -31,7 +31,7 @@ ResolutionFunctionEditor::ResolutionFunctionEditor(Unit unit, QWidget* parent, D
     m_formLayout = new QFormLayout(this);
     m_formLayout->setFieldGrowthPolicy(QFormLayout::FieldsStayAtSizeHint);
 
-    auto* typeCombo = GUI::Util::createComboBoxFromProperty(item->resolutionFunction(), [=](int) {
+    auto* typeCombo = GUI::Util::createComboBoxFromProperty(item->resolutionFunctionSelection(), [=](int) {
         createResolutionWidgets();
         emit dataChanged();
     });
@@ -47,7 +47,7 @@ void ResolutionFunctionEditor::createResolutionWidgets()
     while (m_formLayout->rowCount() > 1)
         m_formLayout->removeRow(1);
 
-    auto* resFunction = m_item->resolutionFunction().currentItem();
+    auto* resFunction = m_item->resolutionFunctionSelection().currentItem();
     if (auto* p = dynamic_cast<ResolutionFunction2DGaussianItem*>(resFunction)) {
         auto* sigmaXSpinBox = GUI::Util::createDoubleSpinBoxRow(m_formLayout, p->sigmaX());
         auto* sigmaYSpinBox = GUI::Util::createDoubleSpinBoxRow(m_formLayout, p->sigmaY());
diff --git a/GUI/View/PlotUtil/DataPropertyWidget.cpp b/GUI/View/PlotUtil/DataPropertyWidget.cpp
index 3030dec8ce0..0c1286dcc45 100644
--- a/GUI/View/PlotUtil/DataPropertyWidget.cpp
+++ b/GUI/View/PlotUtil/DataPropertyWidget.cpp
@@ -45,7 +45,7 @@ void DataPropertyWidget::updateItemCoords(DataItem* item)
     if (jobItem())
         instrument = jobItem()->instrumentItem();
     else if (realItem()) {
-        instrument = gSessionData->projectDocument.value()->collectedItems()->findInstrumentById(
+        instrument = gSessionData->projectDocument.value()->collectedItems()->findInstrumentItemById(
             realItem()->instrumentId());
     } else
         ASSERT(0);
diff --git a/GUI/View/Toplevel/ProjectSettingsView.cpp b/GUI/View/Toplevel/ProjectSettingsView.cpp
index b28555617f0..5763ba0cd25 100644
--- a/GUI/View/Toplevel/ProjectSettingsView.cpp
+++ b/GUI/View/Toplevel/ProjectSettingsView.cpp
@@ -117,7 +117,7 @@ void ProjectSettingsView::storeAsDefaults()
 void ProjectSettingsView::onSingleInstrumentRadioToggled(bool newState)
 {
     if (newState) {
-        if (m_document->collectedItems()->collectedItems().size() > 1) {
+        if (m_document->collectedItems()->instrumentItems().size() > 1) {
             QMessageBox::warning(this, "Select single instrument mode",
                                  "This project already contains more than one instrument. Changing "
                                  "this setting is not possible.");
diff --git a/GUI/View/Toplevel/SimulationView.cpp b/GUI/View/Toplevel/SimulationView.cpp
index da697ef8790..77d9655ef58 100644
--- a/GUI/View/Toplevel/SimulationView.cpp
+++ b/GUI/View/Toplevel/SimulationView.cpp
@@ -244,7 +244,7 @@ QVector<SampleItem*> SimulationView::sampleItems() const
 
 QVector<InstrumentItem*> SimulationView::collectedItems() const
 {
-    return m_document->collectedItems()->collectedItems();
+    return m_document->collectedItems()->instrumentItems();
 }
 
 QVector<RealItem*> SimulationView::realItems() const
diff --git a/Tests/Suite/GUI/Check.cpp b/Tests/Suite/GUI/Check.cpp
index 5df977acc0b..f6bc995bf13 100644
--- a/Tests/Suite/GUI/Check.cpp
+++ b/Tests/Suite/GUI/Check.cpp
@@ -42,7 +42,7 @@ std::unique_ptr<ISimulation> indirectSimulation(const ISimulation& sim)
         GUI::Transform::FromCore::itemizeOptions(sim));
 
     return GUI::Transform::ToCore::itemsToSimulation(
-        sampleItem.get(), instrumentItems->collectedItems().front(), *optionsItem);
+        sampleItem.get(), instrumentItems->instrumentItems().front(), *optionsItem);
 }
 
 } // namespace
diff --git a/Tests/Unit/GUI/TestDetectorItems.cpp b/Tests/Unit/GUI/TestDetectorItems.cpp
index d863d658c0a..3abd3d7ba78 100644
--- a/Tests/Unit/GUI/TestDetectorItems.cpp
+++ b/Tests/Unit/GUI/TestDetectorItems.cpp
@@ -13,7 +13,7 @@
 TEST(TestDetectorItems, resolutionFunction)
 {
     InstrumentCollection model;
-    auto* instrument = model.addInstrument<GISASInstrumentItem>();
+    auto* instrument = model.addInstrumentItem<GISASInstrumentItem>();
 
     DetectorItem* detectorItem = instrument->detectorItem();
 
@@ -39,7 +39,7 @@ TEST(TestDetectorItems, resolutionFunctionUnit)
     detector.setResolutionFunctionType<ResolutionFunctionNoneItem>();
     detector.setResolutionFunctionType<ResolutionFunction2DGaussianItem>();
     auto* p = dynamic_cast<ResolutionFunction2DGaussianItem*>(
-        detector.resolutionFunction().currentItem());
+        detector.resolutionFunctionSelection().currentItem());
     EXPECT_NE(p, nullptr);
     EXPECT_EQ(asString(p->sigmaX().unit()), "mm");
     EXPECT_EQ(asString(p->sigmaY().unit()), "mm");
@@ -48,7 +48,7 @@ TEST(TestDetectorItems, resolutionFunctionUnit)
     sphericalDetector.setResolutionFunctionType<ResolutionFunctionNoneItem>();
     sphericalDetector.setResolutionFunctionType<ResolutionFunction2DGaussianItem>();
     p = dynamic_cast<ResolutionFunction2DGaussianItem*>(
-        sphericalDetector.resolutionFunction().currentItem());
+        sphericalDetector.resolutionFunctionSelection().currentItem());
     EXPECT_NE(p, nullptr);
     EXPECT_EQ(asString(p->sigmaX().unit()), unitAsString(Unit::degree));
     EXPECT_EQ(asString(p->sigmaY().unit()), unitAsString(Unit::degree));
diff --git a/Tests/Unit/GUI/TestInstrumentItems.cpp b/Tests/Unit/GUI/TestInstrumentItems.cpp
index 2ce22fb5ac9..54ba5802c12 100644
--- a/Tests/Unit/GUI/TestInstrumentItems.cpp
+++ b/Tests/Unit/GUI/TestInstrumentItems.cpp
@@ -15,7 +15,7 @@ TEST(TestInstrumentCollection, instrumentAddedRemoved)
     EXPECT_TRUE(spy.isValid());
 
     // populating instrument model
-    auto* p = document.instrumentsEditController()->addInstrument<GISASInstrumentItem>();
+    auto* p = document.instrumentsEditController()->addInstrumentItem<GISASInstrumentItem>();
 
     // checking that a signal was emitted about the new instrument
     EXPECT_EQ(spy.count(), 1);
@@ -32,9 +32,9 @@ TEST(TestInstrumentCollection, instrumentChanged)
     ProjectDocument document;
 
     // populating instrument model
-    auto* instrument1 = document.instrumentsEditController()->addInstrument<GISASInstrumentItem>();
+    auto* instrument1 = document.instrumentsEditController()->addInstrumentItem<GISASInstrumentItem>();
     auto* instrument2 =
-        document.instrumentsEditController()->addInstrument<SpecularInstrumentItem>();
+        document.instrumentsEditController()->addInstrumentItem<SpecularInstrumentItem>();
 
     QSignalSpy spy(document.instrumentsEditController(),
                    SIGNAL(instrumentChanged(const InstrumentItem*)));
@@ -59,7 +59,7 @@ TEST(TestInstrumentCollection, instrumentChanged)
 
     // Add another instrument
     auto* instrument3 =
-        document.instrumentsEditController()->addInstrument<OffspecInstrumentItem>();
+        document.instrumentsEditController()->addInstrumentItem<OffspecInstrumentItem>();
 
     // Change instrument2
     document.instrumentsEditController()->setInstrumentName(instrument2, "BB");
diff --git a/Tests/Unit/GUI/TestLinkInstrument.cpp b/Tests/Unit/GUI/TestLinkInstrument.cpp
index 33e7b4c2d1b..70ae9614749 100644
--- a/Tests/Unit/GUI/TestLinkInstrument.cpp
+++ b/Tests/Unit/GUI/TestLinkInstrument.cpp
@@ -31,7 +31,7 @@ TEST(TestLinkInstrument, canLinkToInstrument)
     ProjectDocument document;
 
     // populating instrument model
-    auto* instrument = document.collectedItems()->addInstrument<GISASInstrumentItem>();
+    auto* instrument = document.collectedItems()->addInstrumentItem<GISASInstrumentItem>();
     const QString identifier = instrument->id();
     ASSERT_TRUE(!identifier.isEmpty());
 
@@ -48,7 +48,7 @@ TEST(TestLinkInstrument, canLinkToInstrument)
                                                                           << realData);
 
     // changing detector type and checking that link remain
-    instrument->setDetectorType<RectangularDetectorItem>();
+    instrument->setDetectorItemType<RectangularDetectorItem>();
     EXPECT_EQ(linkedRealDataItems(*document.realModel(), instrument), QList<RealItem*>()
                                                                           << realData);
 
diff --git a/Tests/Unit/GUI/TestProjectDocument.cpp b/Tests/Unit/GUI/TestProjectDocument.cpp
index 0359588cc25..052eff5318c 100644
--- a/Tests/Unit/GUI/TestProjectDocument.cpp
+++ b/Tests/Unit/GUI/TestProjectDocument.cpp
@@ -16,7 +16,7 @@ protected:
     //! helper method to modify something in a model
     void modify_models(ProjectDocument& doc)
     {
-        auto* instrument = doc.collectedItems()->collectedItems().front();
+        auto* instrument = doc.collectedItems()->instrumentItems().front();
         doc.instrumentsEditController()->setInstrumentName(instrument,
                                                            QUuid::createUuid().toString());
     }
@@ -36,7 +36,7 @@ TEST_F(TestProjectDocument, projectDocument)
     EXPECT_EQ(document.projectName(), QString());
     EXPECT_EQ(document.projectFileName(), QString());
 
-    auto* instrument = document.collectedItems()->addInstrument<GISASInstrumentItem>();
+    auto* instrument = document.collectedItems()->addInstrumentItem<GISASInstrumentItem>();
     instrument->setInstrumentName("GISAS");
 
     // Checking document name and isModified status after project save
@@ -70,7 +70,7 @@ TEST_F(TestProjectDocument, projectDocumentWithData)
     UTest::GUI::create_dir(projectDir);
 
     ProjectDocument document;
-    auto* instrument = document.collectedItems()->addInstrument<GISASInstrumentItem>();
+    auto* instrument = document.collectedItems()->addInstrumentItem<GISASInstrumentItem>();
     instrument->setInstrumentName("GISAS");
     RealItem* realData = UTest::GUI::createRealData("TestData", *document.realModel());
     ASSERT(realData);
diff --git a/Tests/Unit/GUI/TestSaveService.cpp b/Tests/Unit/GUI/TestSaveService.cpp
index 48445429732..a2792a00fda 100644
--- a/Tests/Unit/GUI/TestSaveService.cpp
+++ b/Tests/Unit/GUI/TestSaveService.cpp
@@ -18,7 +18,7 @@ protected:
     // helper method to modify something in a model
     void modify_models(ProjectDocument& doc)
     {
-        auto* instrument = doc.collectedItems()->collectedItems().front();
+        auto* instrument = doc.collectedItems()->instrumentItems().front();
         doc.instrumentsEditController()->setInstrumentName(instrument,
                                                            QUuid::createUuid().toString());
     }
@@ -38,7 +38,7 @@ TEST_F(TestSaveService, autoSaveController)
     const int autosave_time(100);
 
     std::unique_ptr<ProjectDocument> document(new ProjectDocument);
-    auto* instrument = document->collectedItems()->addInstrument<GISASInstrumentItem>();
+    auto* instrument = document->collectedItems()->addInstrumentItem<GISASInstrumentItem>();
     instrument->setInstrumentName("GISAS");
     document->save(projectFileName);
 
@@ -82,7 +82,7 @@ TEST_F(TestSaveService, autoSaveController)
 TEST_F(TestSaveService, autoSaveControllerNewDocument)
 {
     std::unique_ptr<ProjectDocument> document(new ProjectDocument);
-    auto* instrument = document->collectedItems()->addInstrument<GISASInstrumentItem>();
+    auto* instrument = document->collectedItems()->addInstrumentItem<GISASInstrumentItem>();
     instrument->setInstrumentName("GISAS");
 
     const int autosave_time(100);
@@ -109,7 +109,7 @@ TEST_F(TestSaveService, saveService)
 
 
     std::unique_ptr<ProjectDocument> document(new ProjectDocument);
-    auto* instrument = document->collectedItems()->addInstrument<GISASInstrumentItem>();
+    auto* instrument = document->collectedItems()->addInstrumentItem<GISASInstrumentItem>();
     instrument->setInstrumentName("GISAS");
     modify_models(*document);
 
@@ -142,7 +142,7 @@ TEST_F(TestSaveService, failingSaveService)
     const QString projectFileName(projectDir + "/document.pro");
 
     std::unique_ptr<ProjectDocument> document(new ProjectDocument);
-    auto* instrument = document->collectedItems()->addInstrument<GISASInstrumentItem>();
+    auto* instrument = document->collectedItems()->addInstrumentItem<GISASInstrumentItem>();
     instrument->setInstrumentName("GISAS");
     modify_models(*document);
 
@@ -173,7 +173,7 @@ TEST_F(TestSaveService, saveServiceWithData)
     const QString projectFileName(projectDir + "/document.pro");
 
     std::unique_ptr<ProjectDocument> document(new ProjectDocument);
-    auto* instrument = document->collectedItems()->addInstrument<GISASInstrumentItem>();
+    auto* instrument = document->collectedItems()->addInstrumentItem<GISASInstrumentItem>();
     instrument->setInstrumentName("GISAS");
 
     RealItem* realData = UTest::GUI::createRealData("TestData", *document->realModel());
@@ -208,7 +208,7 @@ TEST_F(TestSaveService, autosaveEnabled)
 
     std::unique_ptr<ProjectDocument> document(new ProjectDocument());
     document->setProjectFileName(projectFileName);
-    auto* instrument = document->collectedItems()->addInstrument<GISASInstrumentItem>();
+    auto* instrument = document->collectedItems()->addInstrumentItem<GISASInstrumentItem>();
     instrument->setInstrumentName("GISAS");
 
     RealItem* realData = UTest::GUI::createRealData("TestData", *document->realModel());
diff --git a/Tests/Unit/GUI/TestSessionModel.cpp b/Tests/Unit/GUI/TestSessionModel.cpp
index 966c6dd19ec..e01e2261c66 100644
--- a/Tests/Unit/GUI/TestSessionModel.cpp
+++ b/Tests/Unit/GUI/TestSessionModel.cpp
@@ -51,7 +51,7 @@ TEST(TestSessionModel, copyItem)
     sample1->addStandardMaterials();
 
     InstrumentCollection instrumentItems;
-    auto* instrument1 = instrumentItems.addInstrument<GISASInstrumentItem>();
+    auto* instrument1 = instrumentItems.addInstrumentItem<GISASInstrumentItem>();
     instrument1->setInstrumentName("instrument1");
 
     JobModel jobModel;
diff --git a/Tests/Unit/GUI/TestSessionXML.cpp b/Tests/Unit/GUI/TestSessionXML.cpp
index 93f380b8b9f..e0a5b927d77 100644
--- a/Tests/Unit/GUI/TestSessionXML.cpp
+++ b/Tests/Unit/GUI/TestSessionXML.cpp
@@ -75,7 +75,7 @@ TEST(TestSessionXML, sessionItem)
 TEST(TestSessionXML, InstrumentItem)
 {
     SpecularInstrumentItem instrument;
-    instrument.setBackgroundType<ConstantBackgroundItem>();
+    instrument.setBackgroundItemType<ConstantBackgroundItem>();
     const auto a1 = serialize(instrument);
 
     // target model, from xml
-- 
GitLab