diff --git a/GUI/View/Mask/MaskGraphicsScene.cpp b/GUI/View/Mask/MaskGraphicsScene.cpp
index f732881e94d338da81bf975fd07d4c20395ab2d3..e34396bbac6a93f4b07c82c919c47b7babf384fe 100644
--- a/GUI/View/Mask/MaskGraphicsScene.cpp
+++ b/GUI/View/Mask/MaskGraphicsScene.cpp
@@ -153,7 +153,7 @@ void MaskGraphicsScene::cancelCurrentDrawing()
 {
     if (m_drawing_in_progress) {
         ASSERT(m_currentItem);
-        m_maskContainerModel->removeMask(dynamic_cast<MaskItem*>(m_currentItem));
+        m_maskContainerModel->removeMask(m_currentItem.get());
         m_drawing_in_progress = false;
     }
 }
@@ -297,7 +297,7 @@ void MaskGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
             clearSelection();
             if (m_currentItem) {
                 // drawing ended up with item drawn, let's make it selected
-                if (IShapeDisplay* view = m_ItemToView[m_currentItem])
+                if (IShapeDisplay* view = m_ItemToView[m_currentItem.get()])
                     view->setSelected(true);
             } else {
                 // drawing ended without item to be draw (too short mouse move)
@@ -565,7 +565,7 @@ void MaskGraphicsScene::setDrawingInProgress(bool value)
     if (value)
         gProjectDocument.value()->setModified(); // manual mask creation
     else
-        m_currentItem = nullptr;
+        m_currentItem.release();
 }
 
 //! Sets the state of all views in pan&zoom mode.
@@ -631,10 +631,10 @@ void MaskGraphicsScene::processRectangleOrEllipseItem(QGraphicsSceneMouseEvent*
             ASSERT_NEVER;
 
         m_maskContainerModel->insertMask(0, newMaskItem);
-        m_currentItem = newMaskItem; // downcast MaskItem* -> MaskRoot*
+        m_currentItem.reset(newMaskItem);
 
         if (m_activity != MaskEditorFlags::ROI_MODE)
-            dynamic_cast<MaskItem*>(m_currentItem)->setMaskValue(m_mask_value);
+            dynamic_cast<MaskItem*>(m_currentItem.get())->setMaskValue(m_mask_value);
 
         m_maskContainerModel->maskContItem()->updateMaskNames();
     }
@@ -646,13 +646,13 @@ void MaskGraphicsScene::processRectangleOrEllipseItem(QGraphicsSceneMouseEvent*
     const qreal ymin = m_adaptor->fromSceneY(std::min(click_pos.y(), mouse_pos.y()));
     const qreal ymax = m_adaptor->fromSceneY(std::max(click_pos.y(), mouse_pos.y()));
 
-    if (auto* rectItem = dynamic_cast<RectangleItem*>(m_currentItem)) {
+    if (auto* rectItem = dynamic_cast<RectangleItem*>(m_currentItem.get())) {
         // RectangleItem or RegionOfInterestItem
         rectItem->setXLow(xmin);
         rectItem->setYLow(ymax);
         rectItem->setXUp(xmax);
         rectItem->setYUp(ymin);
-    } else if (auto* ellItem = dynamic_cast<EllipseItem*>(m_currentItem)) {
+    } else if (auto* ellItem = dynamic_cast<EllipseItem*>(m_currentItem.get())) {
         ellItem->setXCenter((xmax + xmin) / 2);
         ellItem->setYCenter((ymax + ymin) / 2);
         ellItem->setXRadius((xmax - xmin) / 2);
@@ -672,13 +672,13 @@ void MaskGraphicsScene::processPolygonItem(QGraphicsSceneMouseEvent* event)
         PolygonItem* new_poly = new PolygonItem;
         m_maskContainerModel->insertMask(0, new_poly);
         new_poly->setMaskValue(m_mask_value);
-        m_currentItem = new_poly;
+        m_currentItem.reset(new_poly);
         m_selectionModel->clearSelection();
-        m_selectionModel->select(m_maskContainerModel->indexOfItem(m_currentItem),
+        m_selectionModel->select(m_maskContainerModel->indexOfItem(m_currentItem.get()),
                                  QItemSelectionModel::Select);
         m_maskContainerModel->maskContItem()->updateMaskNames();
     }
-    ASSERT(dynamic_cast<PolygonItem*>(m_currentItem));
+    ASSERT(dynamic_cast<PolygonItem*>(m_currentItem.get()));
 
     if (PolygonDisplay* polygon = currentPolygon()) {
         if (polygon->closePolygonIfNecessary()) {
@@ -691,7 +691,7 @@ void MaskGraphicsScene::processPolygonItem(QGraphicsSceneMouseEvent* event)
     const QPointF click_pos = event->buttonDownScenePos(Qt::LeftButton);
     const double x = m_adaptor->fromSceneX(click_pos.x());
     const double y = m_adaptor->fromSceneY(click_pos.y());
-    dynamic_cast<PolygonItem*>(m_currentItem)->addPoint(x, y);
+    dynamic_cast<PolygonItem*>(m_currentItem.get())->addPoint(x, y);
     updateScene();
 }
 
@@ -707,10 +707,10 @@ void MaskGraphicsScene::processLineItem(QGraphicsSceneMouseEvent* event)
         processHorizontalLineItem(click_pos);
 
     m_selectionModel->clearSelection();
-    m_selectionModel->select(m_maskContainerModel->indexOfItem(m_currentItem),
+    m_selectionModel->select(m_maskContainerModel->indexOfItem(m_currentItem.get()),
                              QItemSelectionModel::Select);
     m_maskContainerModel->maskContItem()->updateMaskNames();
-    dynamic_cast<MaskItem*>(m_currentItem)->setMaskValue(m_mask_value);
+    dynamic_cast<MaskItem*>(m_currentItem.get())->setMaskValue(m_mask_value);
 
     emit lineItemProcessed();
 
@@ -721,7 +721,7 @@ void MaskGraphicsScene::processVerticalLineItem(const QPointF& pos)
 {
     VerticalLineItem* item = new VerticalLineItem;
     m_maskContainerModel->insertMask(0, item);
-    m_currentItem = item;
+    m_currentItem.reset(item);
     item->setPosX(m_adaptor->fromSceneX(pos.x()));
 }
 
@@ -729,7 +729,7 @@ void MaskGraphicsScene::processHorizontalLineItem(const QPointF& pos)
 {
     HorizontalLineItem* item = new HorizontalLineItem;
     m_maskContainerModel->insertMask(0, item);
-    m_currentItem = dynamic_cast<MaskRoot*>(item);
+    m_currentItem.reset(item);
     item->setPosY(m_adaptor->fromSceneY(pos.y()));
 }
 
@@ -740,7 +740,7 @@ void MaskGraphicsScene::processMaskAllItem(QGraphicsSceneMouseEvent* event)
     setDrawingInProgress(true);
     MaskAllItem* item = new MaskAllItem;
     m_maskContainerModel->insertMask(0, item);
-    m_currentItem = item;
+    m_currentItem.reset(item);
     m_selectionModel->clearSelection();
     setDrawingInProgress(false);
 }
@@ -778,6 +778,6 @@ void MaskGraphicsScene::setZValues()
 PolygonDisplay* MaskGraphicsScene::currentPolygon() const
 {
     if (m_drawing_in_progress && m_activity == MaskEditorFlags::POLYGON_MODE && m_currentItem)
-        return dynamic_cast<PolygonDisplay*>(m_ItemToView[m_currentItem]);
+        return dynamic_cast<PolygonDisplay*>(m_ItemToView[m_currentItem.get()]);
     return nullptr;
 }
diff --git a/GUI/View/Mask/MaskGraphicsScene.h b/GUI/View/Mask/MaskGraphicsScene.h
index 6fc929e6f4f0dee0e0cf1dd42feb7e5d60cb7876..7279ec8b18041105a4e1c0e35064ae726cbd9a84 100644
--- a/GUI/View/Mask/MaskGraphicsScene.h
+++ b/GUI/View/Mask/MaskGraphicsScene.h
@@ -119,7 +119,7 @@ private:
     bool m_block_selection = false;
     bool m_mouse_is_pressed = false;
     Data2DItem* m_data2DItem = nullptr;
-    MaskRoot* m_currentItem = nullptr;
+    std::unique_ptr<MaskItem> m_currentItem;
     QPointF m_mouse_position;
     bool m_drawing_in_progress;
     MaskEditorFlags::MaskValue m_mask_value;