diff --git a/GUI/Model/Data/MaskItems.cpp b/GUI/Model/Data/MaskItems.cpp
index decbb48187cd6bbde81150563bd717285924cfe4..0842ba6f32ed427569f94631be09920dfe08db68 100644
--- a/GUI/Model/Data/MaskItems.cpp
+++ b/GUI/Model/Data/MaskItems.cpp
@@ -58,6 +58,16 @@ void MaskContainerItem::clear()
     model()->removeRows(0, numberOfChildren(), index());
 }
 
+QString MaskItem::maskName() const
+{
+    return itemName();
+}
+
+void MaskItem::setMaskName(const QString& name)
+{
+    setItemName(name);
+}
+
 /* ------------------------------------------------------------------------- */
 
 bool MaskItem::maskValue() const
@@ -237,6 +247,20 @@ void PolygonItem::setIsClosed(bool closed)
     setItemValue(P_ISCLOSED, closed);
 }
 
+
+QVector<PolygonPointItem*> PolygonItem::points() const
+{
+    return childrenOfType<PolygonPointItem>();
+}
+
+void PolygonItem::addPoint(double x, double y)
+{
+    auto* pointItem = new PolygonPointItem();
+    pointItem->setPosX(x);
+    pointItem->setPosY(y);
+    insertItem(-1, pointItem);
+}
+
 /* ------------------------------------------------------------------------- */
 
 VerticalLineItem::VerticalLineItem() : MaskItem(M_TYPE)
diff --git a/GUI/Model/Data/MaskItems.h b/GUI/Model/Data/MaskItems.h
index 54a2adf7513f5a2c914b61197d18463562954aac..158aaa782374f3b438a41953f12ead016c47b9f1 100644
--- a/GUI/Model/Data/MaskItems.h
+++ b/GUI/Model/Data/MaskItems.h
@@ -30,6 +30,9 @@ private:
 public:
     virtual std::unique_ptr<IShape2D> createShape(double scale) const = 0;
 
+    QString maskName() const;
+    void setMaskName(const QString& name);
+
     bool maskValue() const;
     void setMaskValue(bool mask_value);
     static bool isMaskValuePropertyName(const QString& name);
@@ -105,6 +108,9 @@ public:
 
     bool isClosed() const;
     void setIsClosed(bool closed);
+
+    QVector<PolygonPointItem*> points() const;
+    void addPoint(double x, double y);
 };
 
 class VerticalLineItem : public MaskItem {
diff --git a/GUI/Model/From/FromDomain.cpp b/GUI/Model/From/FromDomain.cpp
index 18d532778f6496b431bb505f0e7f555ed231c2ca..f05d89afff2ec29551693784fc36da590e529df2 100644
--- a/GUI/Model/From/FromDomain.cpp
+++ b/GUI/Model/From/FromDomain.cpp
@@ -658,12 +658,8 @@ void GUI::Transform::FromDomain::setMaskContainer(MaskContainerItem* container_i
             auto* polygonItem = new PolygonItem();
             std::vector<double> xpos, ypos;
             polygon->getPoints(xpos, ypos);
-            for (size_t i_point = 0; i_point < xpos.size(); ++i_point) {
-                auto* pointItem = new PolygonPointItem();
-                pointItem->setPosX(scale * xpos[i_point]);
-                pointItem->setPosY(scale * ypos[i_point]);
-                polygonItem->insertItem(-1, pointItem);
-            }
+            for (size_t i_point = 0; i_point < xpos.size(); ++i_point)
+                polygonItem->addPoint(scale * xpos[i_point], scale * ypos[i_point]);
 
             polygonItem->setMaskValue(mask_value);
             polygonItem->setIsClosed(true);
diff --git a/GUI/Model/Instrument/DetectorItems.cpp b/GUI/Model/Instrument/DetectorItems.cpp
index 240af9477bd98439106675912a9c2c1c72f9ebff..e41ba3a6ddd568339e85d2f6295daee67e58b5e0 100644
--- a/GUI/Model/Instrument/DetectorItems.cpp
+++ b/GUI/Model/Instrument/DetectorItems.cpp
@@ -125,27 +125,21 @@ std::unique_ptr<IResolutionFunction2D> DetectorItem::createResolutionFunction()
 void DetectorItem::addMasksToDomain(IDetector2D* detector) const
 {
     auto* maskContainer = maskContainerItem();
-
     if (!maskContainer)
         return;
 
     const double scale = axesToDomainUnitsFactor();
-
     const auto maskItems = maskContainer->maskItems();
-    for (auto m = maskItems.rbegin(); m != maskItems.rend(); m++) {
-        MaskItem* maskItem = *m;
-
-        if (maskItem->modelType() == RegionOfInterestItem::M_TYPE) {
-            auto* rectItem = dynamic_cast<RectangleItem*>(maskItem);
-            double xlow = scale * rectItem->xLow();
-            double ylow = scale * rectItem->yLow();
-            double xup = scale * rectItem->xUp();
-            double yup = scale * rectItem->yUp();
+    for (auto maskIter = maskItems.rbegin(); maskIter != maskItems.rend(); maskIter++) {
+        if (auto* roiItem = dynamic_cast<RegionOfInterestItem*>(*maskIter)) {
+            const double xlow = scale * roiItem->xLow();
+            const double ylow = scale * roiItem->yLow();
+            const double xup = scale * roiItem->xUp();
+            const double yup = scale * roiItem->yUp();
             detector->setRegionOfInterest(xlow, ylow, xup, yup);
         } else {
-            std::unique_ptr<IShape2D> shape(maskItem->createShape(scale));
-            bool mask_value = maskItem->maskValue();
-            detector->addMask(*shape, mask_value);
+            std::unique_ptr<IShape2D> shape((*maskIter)->createShape(scale));
+            detector->addMask(*shape, (*maskIter)->maskValue());
         }
     }
 }
diff --git a/GUI/View/Mask/MaskEditorPropertyPanel.cpp b/GUI/View/Mask/MaskEditorPropertyPanel.cpp
index a7cb3812fbde67031793b418dc2dc61efa059bf6..d68bc81989caf39da51204116e603f19d5bf152d 100644
--- a/GUI/View/Mask/MaskEditorPropertyPanel.cpp
+++ b/GUI/View/Mask/MaskEditorPropertyPanel.cpp
@@ -198,8 +198,8 @@ void MaskEditorPropertyPanel::createMaskEditorUI()
 
     // -- name (only if not RoI)
     if (!dynamic_cast<RegionOfInterestItem*>(maskItem)) {
-        auto* edit = new QLineEdit(maskItem->itemName(), m_maskPropertiesLayout->parentWidget());
-        connect(edit, &QLineEdit::textEdited, [=](const QString& t) { maskItem->setItemName(t); });
+        auto* edit = new QLineEdit(maskItem->maskName(), m_maskPropertiesLayout->parentWidget());
+        connect(edit, &QLineEdit::textEdited, [=](const QString& t) { maskItem->setMaskName(t); });
         m_maskPropertiesLayout->addRow("Name:", edit);
     }
 
diff --git a/GUI/View/Mask/MaskResultsPresenter.cpp b/GUI/View/Mask/MaskResultsPresenter.cpp
index 95443f3d3eea0771f673a938487fecf25ff0749b..85f8fb0aad9284b09ac8c44566f5576e3cbb9880 100644
--- a/GUI/View/Mask/MaskResultsPresenter.cpp
+++ b/GUI/View/Mask/MaskResultsPresenter.cpp
@@ -91,12 +91,11 @@ OutputData<double>* MaskResultsPresenter::createMaskPresentation() const
     for (int i_row = m_maskModel->rowCount(m_maskContainerIndex); i_row > 0; --i_row) {
         QModelIndex itemIndex = m_maskModel->index(i_row - 1, 0, m_maskContainerIndex);
         if (auto* maskItem = dynamic_cast<MaskItem*>(m_maskModel->itemForIndex(itemIndex))) {
-            if (maskItem->modelType() == RegionOfInterestItem::M_TYPE) {
-                roi = maskItem->createShape(scale);
-            } else {
+            if (auto* roiItem = dynamic_cast<RegionOfInterestItem*>(maskItem))
+                roi = roiItem->createShape(scale);
+            else {
                 std::unique_ptr<IShape2D> shape(maskItem->createShape(scale));
-                bool mask_value = maskItem->maskValue();
-                detectorMask.addMask(*shape, mask_value);
+                detectorMask.addMask(*shape, maskItem->maskValue());
             }
         }
     }
diff --git a/GUI/View/Mask/PolygonView.cpp b/GUI/View/Mask/PolygonView.cpp
index 8edab36cbefed66f924ed026dbebc4b8becd9a9b..4d7e5a25630e7e7eada8f2b2981775d3fa032034 100644
--- a/GUI/View/Mask/PolygonView.cpp
+++ b/GUI/View/Mask/PolygonView.cpp
@@ -151,16 +151,14 @@ void PolygonView::update_polygon()
 
     m_block_on_point_update = true;
 
-    if (m_item->numberOfChildren()) {
+    if (!m_item->points().isEmpty()) {
 
         m_polygon.clear();
 
-        for (PolygonPointItem* item : m_item->childrenOfType<PolygonPointItem>()) {
-            qreal px = toSceneX(item->posX());
-            qreal py = toSceneY(item->posY());
-            m_polygon << QPointF(px, py);
-        }
-        QRectF scene_rect = m_polygon.boundingRect().marginsAdded(
+        for (auto* point : m_item->points())
+            m_polygon << QPointF(toSceneX(point->posX()), toSceneY(point->posY()));
+
+        const QRectF scene_rect = m_polygon.boundingRect().marginsAdded(
             QMarginsF(bbox_margins, bbox_margins, bbox_margins, bbox_margins));
 
         m_bounding_rect = QRectF(0.0, 0.0, scene_rect.width(), scene_rect.height());
@@ -170,10 +168,6 @@ void PolygonView::update_polygon()
 
         m_polygon = mapFromScene(m_polygon);
 
-        //        for (int i = 0; i < childItems().size(); ++i) {
-        //            QGraphicsItem* childView = childItems()[i];
-        //            childView->setPos(m_polygon[i]);
-        //        }
         int index(0);
         for (auto* childView : childItems())
             childView->setPos(m_polygon[index++]);