diff --git a/GUI/Views/MaskWidgets/IShape2DView.cpp b/GUI/Views/MaskWidgets/IShape2DView.cpp
index 93911cea17f79630ccad01b42249c78cae09f4e5..b1fde367dba23486f31162ba0eced83651970c81 100644
--- a/GUI/Views/MaskWidgets/IShape2DView.cpp
+++ b/GUI/Views/MaskWidgets/IShape2DView.cpp
@@ -21,6 +21,15 @@
 #include <QMenu>
 #include <QPainter>
 
+namespace {
+bool itemMaskValue(const SessionItem* item)
+{
+    if (const MaskItem* maskItem = dynamic_cast<const MaskItem*>(item))
+        return maskItem->maskValue();
+    return false;
+}
+} // namespace
+
 IShape2DView::IShape2DView(SessionItem* item)
     : m_adaptor(nullptr), m_block_on_property_change(false)
 {
@@ -57,7 +66,7 @@ void IShape2DView::setSceneAdaptor(const ISceneAdaptor* adaptor)
 
 void IShape2DView::paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*)
 {
-    const bool isMasked = itemMaskValue();
+    const bool isMasked = itemMaskValue(parameterizedItem());
     painter->setBrush(MaskEditorHelper::getMaskBrush(isMasked));
     painter->setPen(MaskEditorHelper::getMaskPen(isMasked));
     painter->setRenderHints(QPainter::Antialiasing);
@@ -77,7 +86,7 @@ QPainterPath IShape2DView::maskedShape() const
             || !relevantMaskTypes.contains((MaskEditorHelper::EViewTypes)maskItem->type()))
             continue;
 
-        const bool isMaskingItem = itemMaskValue();
+        const bool isMaskingItem = itemMaskValue(maskItem->parameterizedItem());
         const bool isOnTop = maskItem->zValue() > zValue();
         if (isMaskingItem || !isOnTop)
             continue;
@@ -94,14 +103,6 @@ QPainterPath IShape2DView::maskedShape() const
     return mapFromScene(resultingShape);
 }
 
-bool IShape2DView::itemMaskValue() const
-{
-    bool maskValue = false;
-    if (MaskItem* maskItem = dynamic_cast<MaskItem*>(parameterizedItem()))
-        maskValue = maskItem->maskValue();
-    return maskValue;
-}
-
 qreal IShape2DView::toSceneX(qreal value) const
 {
     return m_adaptor ? m_adaptor->toSceneX(value) : value;
diff --git a/GUI/Views/MaskWidgets/IShape2DView.h b/GUI/Views/MaskWidgets/IShape2DView.h
index 47a7fdd91df87057c4971258947fdcb1ac7b957a..7902371381f3aac67240b9bf31b584bd97b1880b 100644
--- a/GUI/Views/MaskWidgets/IShape2DView.h
+++ b/GUI/Views/MaskWidgets/IShape2DView.h
@@ -53,8 +53,6 @@ protected:
     //! Returns the shape with all masking already applied.
     QPainterPath maskedShape() const;
 
-    bool itemMaskValue() const;
-
     qreal toSceneX(qreal value) const;
     qreal toSceneY(qreal value) const;
 
diff --git a/GUI/Views/MaskWidgets/LineViews.cpp b/GUI/Views/MaskWidgets/LineViews.cpp
index 7d3c253160c901f98bf5dc10cad55e49467b638e..799929420da1b1be2ae6c07dc61e49864a01964f 100644
--- a/GUI/Views/MaskWidgets/LineViews.cpp
+++ b/GUI/Views/MaskWidgets/LineViews.cpp
@@ -75,7 +75,7 @@ void VerticalLineView::update_view()
 
 void VerticalLineView::paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*)
 {
-    bool mask_value = itemMaskValue();
+    bool mask_value = static_cast<VerticalLineItem*>(m_item)->maskValue();
     painter->setBrush(MaskEditorHelper::getMaskBrush(mask_value));
     painter->setPen(MaskEditorHelper::getMaskPen(mask_value));
     painter->drawRect(
@@ -162,7 +162,7 @@ void HorizontalLineView::update_view()
 
 void HorizontalLineView::paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*)
 {
-    bool mask_value = itemMaskValue();
+    bool mask_value = static_cast<HorizontalLineItem*>(m_item)->maskValue();
     painter->setBrush(MaskEditorHelper::getMaskBrush(mask_value));
     painter->setPen(MaskEditorHelper::getMaskPen(mask_value));
     painter->drawRect(
diff --git a/GUI/Views/MaskWidgets/MaskEditorActions.cpp b/GUI/Views/MaskWidgets/MaskEditorActions.cpp
index c72927f2b3ab01cd5493c20770733e566f07407e..8bc56cef50781313c4e4b89f55812f349fea4371 100644
--- a/GUI/Views/MaskWidgets/MaskEditorActions.cpp
+++ b/GUI/Views/MaskWidgets/MaskEditorActions.cpp
@@ -124,8 +124,7 @@ void MaskEditorActions::onToggleMaskValueAction()
     ASSERT(m_selectionModel);
     for (auto itemIndex : m_selectionModel->selectedIndexes()) {
         if (MaskItem* item = dynamic_cast<MaskItem*>(m_maskModel->itemForIndex(itemIndex))) {
-            bool old_value = item->maskValue();
-            item->setMaskValue(!old_value);
+            item->setMaskValue(!item->maskValue());
         }
     }
 }
diff --git a/GUI/Views/MaskWidgets/MaskGraphicsScene.cpp b/GUI/Views/MaskWidgets/MaskGraphicsScene.cpp
index 918043196a8606ea6975c10f65762890b1841f94..ce79f7977a3dc83e93baf6bfd92d9c44df0ac6d8 100644
--- a/GUI/Views/MaskWidgets/MaskGraphicsScene.cpp
+++ b/GUI/Views/MaskWidgets/MaskGraphicsScene.cpp
@@ -640,8 +640,9 @@ void MaskGraphicsScene::processPolygonItem(QGraphicsSceneMouseEvent* event)
 
     if (!m_currentItem) {
         setDrawingInProgress(true);
-        m_currentItem = m_maskModel->insertItem<PolygonItem>(m_maskContainerIndex, 0);
-        static_cast<MaskItem*>(m_currentItem)->setMaskValue(m_context.getMaskValue());
+        PolygonItem* new_poly = m_maskModel->insertItem<PolygonItem>(m_maskContainerIndex, 0);
+        new_poly->setMaskValue(m_context.getMaskValue());
+        m_currentItem = new_poly;
         m_selectionModel->clearSelection();
         m_selectionModel->select(m_maskModel->indexOfItem(m_currentItem),
                                  QItemSelectionModel::Select);
diff --git a/GUI/Views/MaskWidgets/PolygonView.cpp b/GUI/Views/MaskWidgets/PolygonView.cpp
index 1cef22c58861dc39f384c79e8811f1fbbb0c9f7d..b7ee2109524df3727b510df469006ab91f561082 100644
--- a/GUI/Views/MaskWidgets/PolygonView.cpp
+++ b/GUI/Views/MaskWidgets/PolygonView.cpp
@@ -114,7 +114,7 @@ void PolygonView::paint(QPainter* painter, const QStyleOptionGraphicsItem* o, QW
         IShape2DView::paint(painter, o, w);
     else {
         ASSERT(m_item);
-        const bool mask_value = itemMaskValue();
+        const bool mask_value = static_cast<PolygonItem*>(m_item)->maskValue();
         painter->setRenderHints(QPainter::Antialiasing);
         painter->setPen(MaskEditorHelper::getMaskPen(mask_value));
         painter->drawPolyline(m_polygon.toPolygon());