diff --git a/GUI/Model/Data/Data2DItem.h b/GUI/Model/Data/Data2DItem.h
index 97e3fa9f564050465d20f4f8c119e6db945ea63b..51489bdfdcfc49da6935b39fac4d5fc8a4e63d44 100644
--- a/GUI/Model/Data/Data2DItem.h
+++ b/GUI/Model/Data/Data2DItem.h
@@ -19,7 +19,7 @@
 
 class AmplitudeAxisItem;
 class MaskContainerItem;
-class MaskItemObject;
+class MaskRoot;
 class ProjectionContainerItem;
 class QCPColorGradient;
 
@@ -103,8 +103,8 @@ signals:
     void gradientChanged();
     void interpolationChanged(bool isInterpol);
     void projectionCreated();
-    void projectionPositionChanged(MaskItemObject* projection);
-    void projectionGone(MaskItemObject* projection);
+    void projectionPositionChanged(MaskRoot* projection);
+    void projectionGone(MaskRoot* projection);
     void alignRanges();
 
 private:
diff --git a/GUI/Model/Mask/MaskContainerItem.cpp b/GUI/Model/Mask/MaskContainerItem.cpp
index 833d89bf5a4429a3e53ee7c1fe886fc75dce5d82..b7d08a9d30c5e4a1012e08df5e222718e9e6aef6 100644
--- a/GUI/Model/Mask/MaskContainerItem.cpp
+++ b/GUI/Model/Mask/MaskContainerItem.cpp
@@ -28,7 +28,7 @@ const QString Mask("Mask");
 } // namespace
 
 MaskContainerItem::MaskContainerItem()
-    : MaskItemObject()
+    : MaskRoot()
     , m_model(new MaskContainerModel(this))
     , m_selectionModel(new QItemSelectionModel(m_model.get()))
 {
diff --git a/GUI/Model/Mask/MaskContainerItem.h b/GUI/Model/Mask/MaskContainerItem.h
index 1e7b598a00cb44e581faabfd34c838121fd001e0..fad8f4b2a2c52a2683210fe7e8e1f2a94a86cea8 100644
--- a/GUI/Model/Mask/MaskContainerItem.h
+++ b/GUI/Model/Mask/MaskContainerItem.h
@@ -28,7 +28,7 @@ class RegionOfInterestItem;
 
 //! Container holding various masks as children
 
-class MaskContainerItem : public MaskItemObject {
+class MaskContainerItem : public MaskRoot {
 public:
     MaskContainerItem();
     ~MaskContainerItem();
diff --git a/GUI/Model/Mask/MaskContainerModel.cpp b/GUI/Model/Mask/MaskContainerModel.cpp
index be809f5e15d313f399639fa232a7622a650d8bcc..b6af3eae004038ebe2061ad30be2ae82d928e2ca 100644
--- a/GUI/Model/Mask/MaskContainerModel.cpp
+++ b/GUI/Model/Mask/MaskContainerModel.cpp
@@ -13,9 +13,9 @@
 //  ************************************************************************************************
 
 #include "GUI/Model/Mask/MaskContainerModel.h"
+#include "Base/Util/Assert.h"
 #include "GUI/Model/Mask/MaskContainerItem.h"
 #include "GUI/Model/Mask/MaskItems.h"
-#include "Base/Util/Assert.h"
 
 // Implementation of MaskContainerModel is based on the Qt source code for QStringListModel
 
@@ -98,7 +98,7 @@ RegionOfInterestItem* MaskContainerModel::regionOfInterestItem() const
     return nullptr;
 }
 
-QModelIndex MaskContainerModel::indexOfItem(MaskItemObject* item) const
+QModelIndex MaskContainerModel::indexOfItem(MaskRoot* item) const
 {
     const int row = maskContainer->indexOfItem(dynamic_cast<MaskItem*>(item));
     return QAbstractListModel::index(row, 0, {});
diff --git a/GUI/Model/Mask/MaskContainerModel.h b/GUI/Model/Mask/MaskContainerModel.h
index 50c5b14d2f6b10865102d7399a8225802c4287c0..3fd3742be37267a985371133d9a3ba6996aff173 100644
--- a/GUI/Model/Mask/MaskContainerModel.h
+++ b/GUI/Model/Mask/MaskContainerModel.h
@@ -19,7 +19,7 @@
 
 class MaskContainerItem;
 class MaskItem;
-class MaskItemObject;
+class MaskRoot;
 class QModelIndex;
 class QVariant;
 class RegionOfInterestItem;
@@ -55,7 +55,7 @@ public:
     void moveMask(int from_row, int to_row);
     void removeMaskAt(int row);
 
-    QModelIndex indexOfItem(MaskItemObject* item) const; // TODO: change this to MaskItem*
+    QModelIndex indexOfItem(MaskRoot* item) const; // TODO: change this to MaskItem*
     MaskItem* itemForIndex(const QModelIndex& index) const;
 
     RegionOfInterestItem* regionOfInterestItem() const;
diff --git a/GUI/Model/Mask/MaskItems.cpp b/GUI/Model/Mask/MaskItems.cpp
index 7c4f05793a3fd6dd859a23eac2a46874c0b27ad6..bcb8a4eceecee6b9874580e5164cd356108ad7b6 100644
--- a/GUI/Model/Mask/MaskItems.cpp
+++ b/GUI/Model/Mask/MaskItems.cpp
@@ -279,7 +279,7 @@ std::unique_ptr<IShape2D> RegionOfInterestItem::createShape(double scale) const
 /* ------------------------------------------------------------------------- */
 
 PolygonPointItem::PolygonPointItem()
-    : MaskItemObject()
+    : MaskRoot()
 {
 }
 
diff --git a/GUI/Model/Mask/MaskItems.h b/GUI/Model/Mask/MaskItems.h
index d1b53a75ed639d0787c368baec11b3a6ffec85d4..9accce16e6e170a1fbd0022860bc24ef26ac78e5 100644
--- a/GUI/Model/Mask/MaskItems.h
+++ b/GUI/Model/Mask/MaskItems.h
@@ -15,15 +15,15 @@
 #ifndef BORNAGAIN_GUI_MODEL_MASK_MASKITEMS_H
 #define BORNAGAIN_GUI_MODEL_MASK_MASKITEMS_H
 
-#include "GUI/Model/Mask/MaskRoot.h"
 #include "Base/Types/OwningVector.h"
 #include "GUI/Model/Descriptor/SelectionProperty.h"
+#include "GUI/Model/Mask/MaskRoot.h"
 
 class IShape2D;
 
 //! A base class for all mask items
 
-class MaskItem : public MaskItemObject {
+class MaskItem : public MaskRoot {
 public:
     virtual ~MaskItem();
 
@@ -85,7 +85,7 @@ public:
     std::unique_ptr<IShape2D> createShape(double scale) const override;
 };
 
-class PolygonPointItem : public MaskItemObject {
+class PolygonPointItem : public MaskRoot {
 public:
     static constexpr auto M_TYPE{"PolygonPoint"};
 
diff --git a/GUI/Model/Mask/MaskRoot.cpp b/GUI/Model/Mask/MaskRoot.cpp
index 7de7153fdde12cee357206df9cc9fb167dce3a13..02b3fe9e836ac3d1ba5227495c82f388c55685bc 100644
--- a/GUI/Model/Mask/MaskRoot.cpp
+++ b/GUI/Model/Mask/MaskRoot.cpp
@@ -14,9 +14,9 @@
 
 #include "GUI/Model/Mask/MaskRoot.h"
 
-MaskItemObject::MaskItemObject() = default;
+MaskRoot::MaskRoot() = default;
 
-MaskItemObject::~MaskItemObject()
+MaskRoot::~MaskRoot()
 {
     emit maskToBeDestroyed(this);
 }
diff --git a/GUI/Model/Mask/MaskRoot.h b/GUI/Model/Mask/MaskRoot.h
index 8be9f6e3a5f09af958e70dfc948c3caa3264eb23..2889ffae5e485c7f1903d73474e1b0b1478cbc94 100644
--- a/GUI/Model/Mask/MaskRoot.h
+++ b/GUI/Model/Mask/MaskRoot.h
@@ -19,16 +19,16 @@
 
 //! QObject with signals used in masks
 
-class MaskItemObject : public QObject {
+class MaskRoot : public QObject {
     Q_OBJECT
 public:
-    explicit MaskItemObject();
-    virtual ~MaskItemObject();
+    explicit MaskRoot();
+    virtual ~MaskRoot();
 
 signals:
-    void maskGeometryChanged(MaskItemObject* sender = nullptr);
+    void maskGeometryChanged(MaskRoot* sender = nullptr);
     void maskVisibilityChanged();
-    void maskToBeDestroyed(MaskItemObject* sender = nullptr);
+    void maskToBeDestroyed(MaskRoot* sender = nullptr);
 };
 
 #endif // BORNAGAIN_GUI_MODEL_MASK_MASKROOT_H
diff --git a/GUI/View/Mask/MaskGraphicsScene.cpp b/GUI/View/Mask/MaskGraphicsScene.cpp
index 7bc79523bca5ece41782dda46d69db9a73d7a856..984eccc6ed01c16e214d9b8936d6061d3a993f80 100644
--- a/GUI/View/Mask/MaskGraphicsScene.cpp
+++ b/GUI/View/Mask/MaskGraphicsScene.cpp
@@ -404,7 +404,7 @@ void MaskGraphicsScene::updateViews()
 
 //! Creates a view for given item.
 
-IMaskElementDisplay* MaskGraphicsScene::addViewForItem(MaskItemObject* item)
+IMaskElementDisplay* MaskGraphicsScene::addViewForItem(MaskRoot* item)
 {
     ASSERT(item);
     subscribeMaskItem(item);
@@ -427,7 +427,7 @@ void MaskGraphicsScene::onMaskMove()
 
 //! Removes single view from scene.
 
-void MaskGraphicsScene::removeItemViewFromScene(MaskItemObject* item)
+void MaskGraphicsScene::removeItemViewFromScene(MaskRoot* item)
 {
     for (auto it = m_ItemToView.begin(); it != m_ItemToView.end(); ++it) {
         if (it.key() == item) {
@@ -472,7 +472,7 @@ bool MaskGraphicsScene::isValidForRectangleShapeDrawing(QGraphicsSceneMouseEvent
         return false;
     if (m_context.isROIMode()) {
         // only one ROI is allowed
-        for (MaskItemObject* item : m_ItemToView.keys())
+        for (MaskRoot* item : m_ItemToView.keys())
             if (dynamic_cast<RegionOfInterestItem*>(item))
                 return false;
     }
@@ -523,7 +523,7 @@ bool MaskGraphicsScene::isValidForMaskAllDrawing(QGraphicsSceneMouseEvent* event
     if (!m_context.isMaskAllMode())
         return false;
 
-    for (MaskItemObject* item : m_ItemToView.keys())
+    for (MaskRoot* item : m_ItemToView.keys())
         if (dynamic_cast<MaskAllItem*>(item))
             return false;
     return true;
@@ -616,8 +616,8 @@ void MaskGraphicsScene::processRectangleOrEllipseItem(QGraphicsSceneMouseEvent*
         // TODO: What to do for the case when `m_context.isROIMode() = true`?
         m_maskContainerModel->insertMask(0, newMaskItem);
 
-        // new item should be MaskItemObject-based
-        m_currentItem = dynamic_cast<MaskItemObject*>(newMaskItem);
+        // new item should be MaskRoot-based
+        m_currentItem = dynamic_cast<MaskRoot*>(newMaskItem);
         ASSERT(m_currentItem);
 
         if (!m_context.isROIMode())
@@ -715,7 +715,7 @@ void MaskGraphicsScene::processHorizontalLineItem(const QPointF& pos)
 {
     HorizontalLineItem* item = new HorizontalLineItem;
     m_maskContainerModel->insertMask(0, item);
-    m_currentItem = dynamic_cast<MaskItemObject*>(item);
+    m_currentItem = dynamic_cast<MaskRoot*>(item);
     item->setPosY(m_adaptor->fromSceneY(pos.y()));
 }
 
@@ -731,16 +731,16 @@ void MaskGraphicsScene::processMaskAllItem(QGraphicsSceneMouseEvent* event)
     setDrawingInProgress(false);
 }
 
-void MaskGraphicsScene::subscribeMaskItem(MaskItemObject* item)
+void MaskGraphicsScene::subscribeMaskItem(MaskRoot* item)
 {
     if (!item)
         return;
 
-    connect(item, &MaskItemObject::maskGeometryChanged, this, &MaskGraphicsScene::lineItemMoved,
+    connect(item, &MaskRoot::maskGeometryChanged, this, &MaskGraphicsScene::lineItemMoved,
             Qt::UniqueConnection);
-    connect(item, &MaskItemObject::maskGeometryChanged, this, &MaskGraphicsScene::onMaskMove,
+    connect(item, &MaskRoot::maskGeometryChanged, this, &MaskGraphicsScene::onMaskMove,
             Qt::UniqueConnection);
-    connect(item, &MaskItemObject::maskToBeDestroyed, this, &MaskGraphicsScene::lineItemDeleted,
+    connect(item, &MaskRoot::maskToBeDestroyed, this, &MaskGraphicsScene::lineItemDeleted,
             Qt::UniqueConnection);
 }
 
diff --git a/GUI/View/Mask/MaskGraphicsScene.h b/GUI/View/Mask/MaskGraphicsScene.h
index 495c9caccdf3476e3d523baa1bc6e6d98b2137ad..6f7ffffb47bbf08ed2b93ed7442a1edf59ee7102 100644
--- a/GUI/View/Mask/MaskGraphicsScene.h
+++ b/GUI/View/Mask/MaskGraphicsScene.h
@@ -30,7 +30,7 @@ class MaskContainerModel;
 class MaskEditorAction;
 class MaskGraphicsProxy;
 class MaskItem;
-class MaskItemObject;
+class MaskRoot;
 class PolygonDisplay;
 class SceneAdaptor;
 
@@ -55,8 +55,8 @@ public:
 signals:
     void itemContextMenuRequest(const QPoint& point);
     void lineItemProcessed();
-    void lineItemMoved(MaskItemObject* sender);
-    void lineItemDeleted(MaskItemObject* sender);
+    void lineItemMoved(MaskRoot* sender);
+    void lineItemDeleted(MaskRoot* sender);
 
 public slots:
     void onActivityModeChanged(MaskEditorFlags::Activity value);
@@ -82,8 +82,8 @@ private:
 
     void updateProxyWidget();
     void updateViews();
-    IMaskElementDisplay* addViewForItem(MaskItemObject* item);
-    void removeItemViewFromScene(MaskItemObject* item);
+    IMaskElementDisplay* addViewForItem(MaskRoot* item);
+    void removeItemViewFromScene(MaskRoot* item);
 
     void connectMaskContainer(MaskContainerModel* maskContainerModel);
     void disconnectMaskContainer(MaskContainerModel* maskContainerModel);
@@ -108,7 +108,7 @@ private:
     void processVerticalLineItem(const QPointF& pos);
     void processHorizontalLineItem(const QPointF& pos);
     void processMaskAllItem(QGraphicsSceneMouseEvent* event);
-    void subscribeMaskItem(MaskItemObject* item);
+    void subscribeMaskItem(MaskRoot* item);
 
     void setZValues();
     PolygonDisplay* currentPolygon() const;
@@ -117,13 +117,13 @@ private:
     MaskContainerModel* m_maskContainerModel = nullptr;
     MaskContainerItem* m_maskContainerItem = nullptr;
     QItemSelectionModel* m_selectionModel = nullptr;
-    QMap<MaskItemObject*, IMaskElementDisplay*> m_ItemToView;
+    QMap<MaskRoot*, IMaskElementDisplay*> m_ItemToView;
     MaskGraphicsProxy* m_proxy = nullptr;
     std::shared_ptr<SceneAdaptor> m_adaptor;
     bool m_block_selection = false;
     bool m_mouse_is_pressed = false;
     Data2DItem* m_data2DItem = nullptr;
-    MaskItemObject* m_currentItem = nullptr;
+    MaskRoot* m_currentItem = nullptr;
     QPointF m_currentMousePosition;
     MaskDrawingContext m_context;
 };
diff --git a/GUI/View/Mask/MaskViewFactory.cpp b/GUI/View/Mask/MaskViewFactory.cpp
index 722c17c88d386c2614e1cca4084e9d7984ae27c0..ba428375dff0692e222ccf6cd4ab627df16ec498 100644
--- a/GUI/View/Mask/MaskViewFactory.cpp
+++ b/GUI/View/Mask/MaskViewFactory.cpp
@@ -23,7 +23,7 @@
 #include "GUI/View/Shape/PolygonDisplay.h"
 #include "GUI/View/Shape/PolygonPointDisplay.h"
 
-IMaskElementDisplay* MaskViewFactory::createMaskView(MaskItemObject* item)
+IMaskElementDisplay* MaskViewFactory::createMaskView(MaskRoot* item)
 {
     if (auto* mask = dynamic_cast<MaskContainerItem*>(item))
         return new MaskContainerDisplay(mask);
diff --git a/GUI/View/Mask/MaskViewFactory.h b/GUI/View/Mask/MaskViewFactory.h
index 74de7daa3f7052a0f3db645ccba608bbbc80b6d4..23627b7227b026e144cc0c3a0f2f89e0d44199eb 100644
--- a/GUI/View/Mask/MaskViewFactory.h
+++ b/GUI/View/Mask/MaskViewFactory.h
@@ -16,12 +16,12 @@
 #define BORNAGAIN_GUI_VIEW_MASK_MASKVIEWFACTORY_H
 
 class IMaskElementDisplay;
-class MaskItemObject;
+class MaskRoot;
 
 namespace MaskViewFactory {
 
 //! Factory to construct views out of MaskItems for MaskGraphicsScene
-IMaskElementDisplay* createMaskView(MaskItemObject* item);
+IMaskElementDisplay* createMaskView(MaskRoot* item);
 
 } // namespace MaskViewFactory
 
diff --git a/GUI/View/Projection/ProjectionsEditorCanvas.cpp b/GUI/View/Projection/ProjectionsEditorCanvas.cpp
index da2f4bf3f10fd3e794f54aba922eb95e882a1ffa..b9a630264c0e11fbe8e5c54d07146e82b003dee0 100644
--- a/GUI/View/Projection/ProjectionsEditorCanvas.cpp
+++ b/GUI/View/Projection/ProjectionsEditorCanvas.cpp
@@ -158,7 +158,7 @@ void ProjectionsEditorCanvas::onActivityModeChanged(MaskEditorFlags::Activity va
     onLeavingColorMap();
 }
 
-void ProjectionsEditorCanvas::onLineItemMoved(MaskItemObject* sender)
+void ProjectionsEditorCanvas::onLineItemMoved(MaskRoot* sender)
 {
     if (dynamic_cast<HorizontalLineItem*>(sender)
         && (m_currentActivity != MaskEditorFlags::VERTICAL_LINE_MODE))
diff --git a/GUI/View/Projection/ProjectionsEditorCanvas.h b/GUI/View/Projection/ProjectionsEditorCanvas.h
index 28a8b8f43b65cbe6c087d3a7ebecfbb6036d5d2e..bc42fac431ce1037d3c713cc170ae54a3ca3e435 100644
--- a/GUI/View/Projection/ProjectionsEditorCanvas.h
+++ b/GUI/View/Projection/ProjectionsEditorCanvas.h
@@ -24,7 +24,7 @@ class Data2DItem;
 class MaskGraphicsScene;
 class MaskGraphicsView;
 class MaskItem;
-class MaskItemObject;
+class MaskRoot;
 class PlotStatusLabel;
 
 //! Holds a graphics scene to draw projections on top of ColorMap. Being a part
@@ -56,7 +56,7 @@ public slots:
     void onActivityModeChanged(MaskEditorFlags::Activity value);
 
 private:
-    void onLineItemMoved(MaskItemObject* sender);
+    void onLineItemMoved(MaskRoot* sender);
     void setColorMap(ColorMap* colorMap);
     void setConnected(bool isConnected);
 
diff --git a/GUI/View/Projection/ProjectionsPlot.cpp b/GUI/View/Projection/ProjectionsPlot.cpp
index e62bfc682759d23689e5d7cfbfb5d84bce741da2..d6e3f3703713c7853cedc14db684861b2ec4a7f3 100644
--- a/GUI/View/Projection/ProjectionsPlot.cpp
+++ b/GUI/View/Projection/ProjectionsPlot.cpp
@@ -165,7 +165,7 @@ bool ProjectionsPlot::isCorrectProjectionType(MaskItem* item)
     return false;
 }
 
-QCPGraph* ProjectionsPlot::graphForItem(MaskItemObject* item)
+QCPGraph* ProjectionsPlot::graphForItem(MaskRoot* item)
 {
     if (!data2DItem())
         return nullptr;
@@ -208,7 +208,7 @@ void ProjectionsPlot::updateProjections()
     replot();
 }
 
-void ProjectionsPlot::onProjectionPropertyChanged(MaskItemObject* item)
+void ProjectionsPlot::onProjectionPropertyChanged(MaskRoot* item)
 {
     auto* projection = dynamic_cast<MaskItem*>(item);
     ASSERT(projection);
@@ -249,7 +249,7 @@ void ProjectionsPlot::updateAxesTitle()
 
 //! Removes plot corresponding to given projection item.
 
-void ProjectionsPlot::clearProjection(MaskItemObject* item)
+void ProjectionsPlot::clearProjection(MaskRoot* item)
 {
     if (auto* graph = graphForItem(item)) {
         m_plot->removePlottable(graph);
diff --git a/GUI/View/Projection/ProjectionsPlot.h b/GUI/View/Projection/ProjectionsPlot.h
index d8285bc237d3bea049d22812add23e09943e5cc1..721bdd3cc65da8421ea0a0b79dc2594593f47ba6 100644
--- a/GUI/View/Projection/ProjectionsPlot.h
+++ b/GUI/View/Projection/ProjectionsPlot.h
@@ -22,7 +22,7 @@
 class Datafield;
 class Data2DItem;
 class MaskItem;
-class MaskItemObject;
+class MaskRoot;
 class ProjectionContainerItem;
 class QCPGraph;
 class QCustomPlot;
@@ -47,14 +47,14 @@ private:
     QVector<MaskItem*> projectionItems();
     bool isCorrectProjectionType(MaskItem* item);
     ProjectionContainerItem* projectionContainerItem();
-    QCPGraph* graphForItem(MaskItemObject* item);
+    QCPGraph* graphForItem(MaskRoot* item);
 
     void updateProjectionsData();
     void updateProjections();
-    void onProjectionPropertyChanged(MaskItemObject* item);
+    void onProjectionPropertyChanged(MaskRoot* item);
     void updateAxesRange();
     void updateAxesTitle();
-    void clearProjection(MaskItemObject* item);
+    void clearProjection(MaskRoot* item);
     void clearAll();
 
     void setGraphFromItem(QCPGraph* graph, MaskItem* item);
@@ -69,7 +69,7 @@ private:
     Data2DItem* m_data2DItem = nullptr;
     GUI::ID::ProjectionType m_projectionType = GUI::ID::ProjectionType::Invalid;
     QCustomPlot* m_plot;
-    QMap<MaskItemObject*, QCPGraph*> m_item_to_graph;
+    QMap<MaskRoot*, QCPGraph*> m_item_to_graph;
 };
 
 #endif // BORNAGAIN_GUI_VIEW_PROJECTION_PROJECTIONSPLOT_H
diff --git a/GUI/View/Projection/SaveProjectionsAssistant.cpp b/GUI/View/Projection/SaveProjectionsAssistant.cpp
index d8d0ec006f2a8622f5ada389415fbd7d1f604186..a1173498dfb3d201c27307afa1baa36c8c23bc85 100644
--- a/GUI/View/Projection/SaveProjectionsAssistant.cpp
+++ b/GUI/View/Projection/SaveProjectionsAssistant.cpp
@@ -43,13 +43,13 @@ QString to_double_str(double value)
     return QString("%1").arg(QString::fromStdString(str), -bin_centers_colwidth);
 }
 
-bool vert_less_posx(MaskItemObject* item1, MaskItemObject* item2)
+bool vert_less_posx(MaskRoot* item1, MaskRoot* item2)
 {
     return polymorphic_downcast<VerticalLineItem*>(item1)->posX()
            < polymorphic_downcast<VerticalLineItem*>(item2)->posX();
 }
 
-bool horiz_less_posy(MaskItemObject* item1, MaskItemObject* item2)
+bool horiz_less_posy(MaskRoot* item1, MaskRoot* item2)
 {
     return polymorphic_downcast<HorizontalLineItem*>(item1)->posY()
            < polymorphic_downcast<HorizontalLineItem*>(item2)->posY();
diff --git a/GUI/View/Shape/AllMasksDisplay.cpp b/GUI/View/Shape/AllMasksDisplay.cpp
index 783df9d6b0c6771603a694ea8b61073dedaa7e49..4575cdefd9349925d77302103bf0933298182aab 100644
--- a/GUI/View/Shape/AllMasksDisplay.cpp
+++ b/GUI/View/Shape/AllMasksDisplay.cpp
@@ -26,7 +26,7 @@ AllMasksDisplay::AllMasksDisplay(MaskAllItem* item)
     setFlag(QGraphicsItem::ItemIsSelectable);
 }
 
-MaskItemObject* AllMasksDisplay::parameterizedItem() const
+MaskRoot* AllMasksDisplay::parameterizedItem() const
 {
     return m_item;
 }
diff --git a/GUI/View/Shape/AllMasksDisplay.h b/GUI/View/Shape/AllMasksDisplay.h
index 83b6896a9cd82dd0e5a74f2f7473fb83f34f368e..279d79f5e789605641a4c6f2fbf7ca431c1c4371 100644
--- a/GUI/View/Shape/AllMasksDisplay.h
+++ b/GUI/View/Shape/AllMasksDisplay.h
@@ -28,7 +28,7 @@ public:
 
     explicit AllMasksDisplay(MaskAllItem* item);
 
-    MaskItemObject* parameterizedItem() const override;
+    MaskRoot* parameterizedItem() const override;
 
 protected slots:
     void update_view() override;
diff --git a/GUI/View/Shape/EllipseDisplay.cpp b/GUI/View/Shape/EllipseDisplay.cpp
index fb36d9692e7093639a3f3f6a7237dec92af328a5..cbf197f47c8475779bfa924c85d2ccf185c63c22 100644
--- a/GUI/View/Shape/EllipseDisplay.cpp
+++ b/GUI/View/Shape/EllipseDisplay.cpp
@@ -96,7 +96,7 @@ QPainterPath EllipseDisplay::shape() const
     return path;
 }
 
-MaskItemObject* EllipseDisplay::parameterizedItem() const
+MaskRoot* EllipseDisplay::parameterizedItem() const
 {
     return m_item;
 }
diff --git a/GUI/View/Shape/EllipseDisplay.h b/GUI/View/Shape/EllipseDisplay.h
index cedf223a631b16575346f12d8f2e57a6bad23a32..9f5c7a120d1bbc09136ab9732e89d9ab86ec7cec 100644
--- a/GUI/View/Shape/EllipseDisplay.h
+++ b/GUI/View/Shape/EllipseDisplay.h
@@ -29,7 +29,7 @@ public:
 
     explicit EllipseDisplay(EllipseItem* item);
 
-    MaskItemObject* parameterizedItem() const override;
+    MaskRoot* parameterizedItem() const override;
 
 private slots:
     void onChangedX() override;
diff --git a/GUI/View/Shape/IMaskElementDisplay.cpp b/GUI/View/Shape/IMaskElementDisplay.cpp
index 044572d84769c6b6a39fc8582b3112fef5061522..5a95861eb810afeab6198ef8999618f853ab4c51 100644
--- a/GUI/View/Shape/IMaskElementDisplay.cpp
+++ b/GUI/View/Shape/IMaskElementDisplay.cpp
@@ -23,7 +23,7 @@
 
 namespace {
 
-bool itemMaskValue(const MaskItemObject* item)
+bool itemMaskValue(const MaskRoot* item)
 {
     if (const auto* maskItem = dynamic_cast<const MaskItem*>(item))
         return maskItem->maskValue();
@@ -32,7 +32,7 @@ bool itemMaskValue(const MaskItemObject* item)
 
 } // namespace
 
-IMaskElementDisplay::IMaskElementDisplay(MaskItemObject* item)
+IMaskElementDisplay::IMaskElementDisplay(MaskRoot* item)
     : m_adaptor(nullptr)
     , m_block_on_property_change(false)
 {
@@ -43,10 +43,10 @@ IMaskElementDisplay::IMaskElementDisplay(MaskItemObject* item)
     connect(this, &IMaskElementDisplay::yChanged, this, &IMaskElementDisplay::onChangedY,
             Qt::UniqueConnection);
 
-    connect(item, &MaskItemObject::maskGeometryChanged, this,
-            &IMaskElementDisplay::onGeometryChange, Qt::UniqueConnection);
-    connect(item, &MaskItemObject::maskVisibilityChanged, this,
-            &IMaskElementDisplay::onVisibilityChange, Qt::UniqueConnection);
+    connect(item, &MaskRoot::maskGeometryChanged, this, &IMaskElementDisplay::onGeometryChange,
+            Qt::UniqueConnection);
+    connect(item, &MaskRoot::maskVisibilityChanged, this, &IMaskElementDisplay::onVisibilityChange,
+            Qt::UniqueConnection);
 }
 
 QRectF IMaskElementDisplay::boundingRect() const
diff --git a/GUI/View/Shape/IMaskElementDisplay.h b/GUI/View/Shape/IMaskElementDisplay.h
index 5b15852bc0dc507b575455cd175a2194c942d588..b28225a47e510d326d56c9abba2c853a96e3c287 100644
--- a/GUI/View/Shape/IMaskElementDisplay.h
+++ b/GUI/View/Shape/IMaskElementDisplay.h
@@ -19,7 +19,7 @@
 #include <QGraphicsObject>
 #include <QPainter>
 
-class MaskItemObject;
+class MaskRoot;
 class SceneAdaptor;
 
 //! Main interface class for views representing MaskItems, Projections on graphics scene.
@@ -31,7 +31,7 @@ public:
 
     QRectF boundingRect() const override;
 
-    virtual MaskItemObject* parameterizedItem() const = 0;
+    virtual MaskRoot* parameterizedItem() const = 0;
 
     void setViewSceneAdaptor(const SceneAdaptor* adaptor);
 
@@ -45,7 +45,7 @@ protected slots:
     virtual void onPropertyChange() {}
 
 protected:
-    explicit IMaskElementDisplay(MaskItemObject* item);
+    explicit IMaskElementDisplay(MaskRoot* item);
 
     void paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*) override;
 
diff --git a/GUI/View/Shape/LineViews.cpp b/GUI/View/Shape/LineViews.cpp
index 451acd290a1e8b01e498343d2c780b7469ba7c30..2107e78dd4ff3146c7482f8ac3330cda2e01c128 100644
--- a/GUI/View/Shape/LineViews.cpp
+++ b/GUI/View/Shape/LineViews.cpp
@@ -44,7 +44,7 @@ QPainterPath VerticalLineView::shape() const
     return p;
 }
 
-MaskItemObject* VerticalLineView::parameterizedItem() const
+MaskRoot* VerticalLineView::parameterizedItem() const
 {
     return m_item;
 }
@@ -122,7 +122,7 @@ QPainterPath HorizontalLineView::shape() const
     return path;
 }
 
-MaskItemObject* HorizontalLineView::parameterizedItem() const
+MaskRoot* HorizontalLineView::parameterizedItem() const
 {
     return m_item;
 }
diff --git a/GUI/View/Shape/LineViews.h b/GUI/View/Shape/LineViews.h
index 5256318b583a38b84c2dfab9589e0d0c332dff94..ac781f479c1ed5cd95e7a1b248378885e380e36a 100644
--- a/GUI/View/Shape/LineViews.h
+++ b/GUI/View/Shape/LineViews.h
@@ -30,7 +30,7 @@ public:
     explicit VerticalLineView(VerticalLineItem* item);
 
     QPainterPath shape() const override;
-    MaskItemObject* parameterizedItem() const override;
+    MaskRoot* parameterizedItem() const override;
 
 protected slots:
     void update_view() override;
@@ -56,7 +56,7 @@ public:
     explicit HorizontalLineView(HorizontalLineItem* item);
 
     QPainterPath shape() const override;
-    MaskItemObject* parameterizedItem() const override;
+    MaskRoot* parameterizedItem() const override;
 
 protected slots:
     void update_view() override;
diff --git a/GUI/View/Shape/MaskContainerDisplay.cpp b/GUI/View/Shape/MaskContainerDisplay.cpp
index 57e71f91a70d03b7586bd64cfd19e24c3a195617..38a3f23344411864a6f367f1c4da868b20ccaa89 100644
--- a/GUI/View/Shape/MaskContainerDisplay.cpp
+++ b/GUI/View/Shape/MaskContainerDisplay.cpp
@@ -35,7 +35,7 @@ MaskContainerDisplay::MaskContainerDisplay(ProjectionContainerItem* item)
     setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
 }
 
-MaskItemObject* MaskContainerDisplay::parameterizedItem() const
+MaskRoot* MaskContainerDisplay::parameterizedItem() const
 {
     return m_item;
 }
diff --git a/GUI/View/Shape/MaskContainerDisplay.h b/GUI/View/Shape/MaskContainerDisplay.h
index e80dcab86728142d6e26d6982965e2d59f6b4bcd..9328c400aa741d6b9b0be0dfecd4a9aa030c6da4 100644
--- a/GUI/View/Shape/MaskContainerDisplay.h
+++ b/GUI/View/Shape/MaskContainerDisplay.h
@@ -37,7 +37,7 @@ public:
     explicit MaskContainerDisplay(MaskContainerItem* item);
     explicit MaskContainerDisplay(ProjectionContainerItem* item);
 
-    MaskItemObject* parameterizedItem() const override;
+    MaskRoot* parameterizedItem() const override;
 
 protected slots:
     void update_view() override;
diff --git a/GUI/View/Shape/PolygonDisplay.cpp b/GUI/View/Shape/PolygonDisplay.cpp
index 1c2bd4e68c123670964f2789e7fb08517096ddf4..0c1c66f54bd2180e9b98cd2e69e5b1e8638f4b67 100644
--- a/GUI/View/Shape/PolygonDisplay.cpp
+++ b/GUI/View/Shape/PolygonDisplay.cpp
@@ -36,7 +36,7 @@ PolygonDisplay::PolygonDisplay(PolygonItem* item)
     m_item->maskVisibilityChanged();
 }
 
-MaskItemObject* PolygonDisplay::parameterizedItem() const
+MaskRoot* PolygonDisplay::parameterizedItem() const
 {
     return m_item;
 }
diff --git a/GUI/View/Shape/PolygonDisplay.h b/GUI/View/Shape/PolygonDisplay.h
index bd5de42cf7c82ec0e5a9c5a8b7eda9092f1134ca..b4297a3e2aa0e66a47fad4a20f47a13272a5a148 100644
--- a/GUI/View/Shape/PolygonDisplay.h
+++ b/GUI/View/Shape/PolygonDisplay.h
@@ -30,7 +30,7 @@ public:
 
     explicit PolygonDisplay(PolygonItem* item);
 
-    MaskItemObject* parameterizedItem() const override;
+    MaskRoot* parameterizedItem() const override;
 
     void addView(IMaskElementDisplay* childView) override;
     bool isClosedPolygon();
diff --git a/GUI/View/Shape/PolygonPointDisplay.cpp b/GUI/View/Shape/PolygonPointDisplay.cpp
index 09090c2281757b91cfdc7ad297dc8003358d58ff..e9cdce3f8dcd74a50661d88ca1217c3fa6130266 100644
--- a/GUI/View/Shape/PolygonPointDisplay.cpp
+++ b/GUI/View/Shape/PolygonPointDisplay.cpp
@@ -32,7 +32,7 @@ QRectF PolygonPointDisplay::boundingRect() const
     return QRectF(-4, -4, 8, 8);
 }
 
-MaskItemObject* PolygonPointDisplay::parameterizedItem() const
+MaskRoot* PolygonPointDisplay::parameterizedItem() const
 {
     return m_item;
 }
diff --git a/GUI/View/Shape/PolygonPointDisplay.h b/GUI/View/Shape/PolygonPointDisplay.h
index a9032e3d0d3371c927222d02997095c6fa56e43a..a831f3e0b6186c64d46db995cc538ddb9fecaebe 100644
--- a/GUI/View/Shape/PolygonPointDisplay.h
+++ b/GUI/View/Shape/PolygonPointDisplay.h
@@ -30,7 +30,7 @@ public:
 
     QRectF boundingRect() const override;
 
-    MaskItemObject* parameterizedItem() const override;
+    MaskRoot* parameterizedItem() const override;
 
     void updateParameterizedItem(const QPointF& pos);
 
diff --git a/GUI/View/Shape/RectangleBaseDisplay.cpp b/GUI/View/Shape/RectangleBaseDisplay.cpp
index f3d41312a88a5b97d8f5aaf7cec255afaaf3b886..e9656c97829e651635174b35efea9500384e5c82 100644
--- a/GUI/View/Shape/RectangleBaseDisplay.cpp
+++ b/GUI/View/Shape/RectangleBaseDisplay.cpp
@@ -20,7 +20,7 @@ namespace {
 const double bbox_margins = 5; // additional margins around rectangle to form bounding box
 }
 
-RectangleBaseDisplay::RectangleBaseDisplay(MaskItemObject* item)
+RectangleBaseDisplay::RectangleBaseDisplay(MaskRoot* item)
     : IMaskElementDisplay(item)
     , m_activeHandleElement(nullptr)
 {
diff --git a/GUI/View/Shape/RectangleBaseDisplay.h b/GUI/View/Shape/RectangleBaseDisplay.h
index 89dcfe94de29b5f74a0af3686cfa5397212acf15..11764cd612213f569979d7591e02bcb43dc3a366 100644
--- a/GUI/View/Shape/RectangleBaseDisplay.h
+++ b/GUI/View/Shape/RectangleBaseDisplay.h
@@ -26,7 +26,7 @@ class RectangleBaseDisplay : public IMaskElementDisplay {
 public:
     int type() const override { return MaskType::RECTANGLEBASE; }
 
-    explicit RectangleBaseDisplay(MaskItemObject* item);
+    explicit RectangleBaseDisplay(MaskRoot* item);
 
 private slots:
     void onSizeHandleElementRequest(bool going_to_resize);
diff --git a/GUI/View/Shape/RectangleDisplay.cpp b/GUI/View/Shape/RectangleDisplay.cpp
index 4639018beac82dfc4565e30ab81961255e504526..4d472a3982dc524bf2b2340172150eae5362efb9 100644
--- a/GUI/View/Shape/RectangleDisplay.cpp
+++ b/GUI/View/Shape/RectangleDisplay.cpp
@@ -31,7 +31,7 @@ QPainterPath RectangleDisplay::shape() const
     return path;
 }
 
-MaskItemObject* RectangleDisplay::parameterizedItem() const
+MaskRoot* RectangleDisplay::parameterizedItem() const
 {
     return m_item;
 }
diff --git a/GUI/View/Shape/RectangleDisplay.h b/GUI/View/Shape/RectangleDisplay.h
index 18845fcbf4a8d1875e101f0b25d7ad07751323f3..3578a6ae5e225555a40f88cfdbc45022c626967e 100644
--- a/GUI/View/Shape/RectangleDisplay.h
+++ b/GUI/View/Shape/RectangleDisplay.h
@@ -30,7 +30,7 @@ public:
     explicit RectangleDisplay(RectangleItem* item);
 
     QPainterPath shape() const override;
-    MaskItemObject* parameterizedItem() const override;
+    MaskRoot* parameterizedItem() const override;
 
 private slots:
     void onChangedX() override;