diff --git a/GUI/Model/Mask/MasksQModel.cpp b/GUI/Model/Mask/MasksQModel.cpp
index aa54a5d196d92299698c5544f3fa049a49dae2f1..66568687961ae6cd4f60737a15190f0dc039fe60 100644
--- a/GUI/Model/Mask/MasksQModel.cpp
+++ b/GUI/Model/Mask/MasksQModel.cpp
@@ -22,7 +22,6 @@
 
 MasksQModel::MasksQModel(MasksSet* set)
     : m_masks(set)
-    , m_selection_model(std::make_unique<QItemSelectionModel>(this))
 {
 }
 
@@ -113,16 +112,19 @@ MaskItem* MasksQModel::itemForIndex(const QModelIndex& index) const
 
 void MasksQModel::moveUp()
 {
+    /*
     for (const QModelIndex& itemIndex : m_selection_model->selectedIndexes()) {
         int row = itemIndex.row();
         int new_row = row - 1;
         if (new_row >= 0 && new_row < rowCount({}))
             moveMask(row, new_row);
     }
+    */
 }
 
 void MasksQModel::moveDown()
 {
+    /*
     for (const QModelIndex& itemIndex : m_selection_model->selectedIndexes()) {
         int row = itemIndex.row();
         int new_row = row + 1;
@@ -131,4 +133,5 @@ void MasksQModel::moveDown()
             // The result should be the same, but rising doesn't work for an unknown reason
             moveMask(new_row, row);
     }
+    */
 }
diff --git a/GUI/Model/Mask/MasksQModel.h b/GUI/Model/Mask/MasksQModel.h
index 6c94c5b67842662cd2a4597d5b359560e133a250..6f1d6200b11ec1e9d1627fe107842e0dbbd17bc6 100644
--- a/GUI/Model/Mask/MasksQModel.h
+++ b/GUI/Model/Mask/MasksQModel.h
@@ -16,7 +16,6 @@
 #define BORNAGAIN_GUI_MODEL_MASK_MASKSQMODEL_H
 
 #include <QAbstractListModel>
-#include <QItemSelectionModel>
 #include <QModelIndex>
 #include <QVariant>
 
@@ -46,14 +45,11 @@ public:
     QModelIndex indexOfItem(const OverlayItem* item) const; // TODO: change this to MaskItem*
     MaskItem* itemForIndex(const QModelIndex& index) const;
 
-    QItemSelectionModel* maskSelectionModel() { return m_selection_model.get(); }
-
     MasksSet* set() { return m_masks; }
     const MasksSet* set() const { return m_masks; }
 
 private:
     MasksSet* m_masks;
-    std::unique_ptr<QItemSelectionModel> m_selection_model;
 };
 
 #endif // BORNAGAIN_GUI_MODEL_MASK_MASKSQMODEL_H
diff --git a/GUI/View/Scene/MaskGraphicsScene.cpp b/GUI/View/Scene/MaskGraphicsScene.cpp
index 2e270280f0f418b1e484e31a49957f4ef028a744..4ec1ff2213a95c46f8ad3f9bc04dd41f2a3ba040 100644
--- a/GUI/View/Scene/MaskGraphicsScene.cpp
+++ b/GUI/View/Scene/MaskGraphicsScene.cpp
@@ -49,7 +49,6 @@ MaskGraphicsScene::MaskGraphicsScene()
     , m_drawing_in_progress(false)
     , m_mask_value(true)
 {
-    connect(this, &QGraphicsScene::selectionChanged, [this] { onSceneSelectionChanged(); });
 }
 
 MaskGraphicsScene::~MaskGraphicsScene() = default;
@@ -57,9 +56,6 @@ MaskGraphicsScene::~MaskGraphicsScene() = default;
 void MaskGraphicsScene::associateItems(Data2DItem* data_item, MasksQModel* masks_qmodel)
 {
     ASSERT(masks_qmodel);
-    m_selection_model = masks_qmodel->maskSelectionModel();
-    connect(m_selection_model, &QItemSelectionModel::selectionChanged, this,
-            &MaskGraphicsScene::onSessionSelectionChanged, Qt::UniqueConnection);
 
     if (!data_item)
         return;
@@ -73,8 +69,6 @@ void MaskGraphicsScene::associateItems(Data2DItem* data_item, MasksQModel* masks
     connect(masks_qmodel, &QAbstractListModel::modelAboutToBeReset, this,
             &MaskGraphicsScene::resetScene);
     connect(masks_qmodel, &QAbstractListModel::rowsInserted, this, &MaskGraphicsScene::updateScene);
-    connect(masks_qmodel, &QAbstractListModel::rowsAboutToBeRemoved, this,
-            &MaskGraphicsScene::onRowsAboutToBeRemoved);
     connect(masks_qmodel, &QAbstractListModel::rowsRemoved, this, &MaskGraphicsScene::updateScene);
     connect(masks_qmodel, &QAbstractListModel::modelReset, this, &MaskGraphicsScene::updateScene);
     connect(masks_qmodel, &QAbstractListModel::rowsMoved, this, &MaskGraphicsScene::updateScene);
@@ -108,11 +102,6 @@ void MaskGraphicsScene::onActivityChanged(Canvas2DMode::Flag mode)
 
     const bool zoomMode = m_mode == Canvas2DMode::PAN_ZOOM;
 
-    // Sets the state of all views in pan&zoom mode.
-    // In pan&zoom mode, the selection is removed, all items cannot receive mouse clicks, and all
-    // events are propagated down to ColorMap plot.
-    if (zoomMode)
-        m_selection_model->clearSelection();
     for (IOverlay* overlay : m_mask2overlay.values())
         overlay->setAcceptedMouseButtons(zoomMode ? Qt::NoButton : Qt::LeftButton);
     m_proxy->setZooming(zoomMode);
@@ -126,15 +115,6 @@ void MaskGraphicsScene::onActivityChanged(Canvas2DMode::Flag mode)
     }
 }
 
-void MaskGraphicsScene::onRowsAboutToBeRemoved(const QModelIndex&, int first, int last)
-{
-    m_block_selection = true;
-    for (int irow = first; irow <= last; ++irow)
-        if (MaskItem* maskItem = m_masks_qmodel->set()->at(irow))
-            removeOverlay(maskItem);
-    m_block_selection = false;
-}
-
 void MaskGraphicsScene::cancelCurrentDrawing()
 {
     if (m_drawing_in_progress) {
@@ -148,25 +128,6 @@ void MaskGraphicsScene::cancelCurrentDrawing()
 //  private slots
 //  ************************************************************************************************
 
-//! Propagates selection from model to scene.
-
-void MaskGraphicsScene::onSessionSelectionChanged(const QItemSelection&, const QItemSelection&)
-{
-    if (m_block_selection)
-        return;
-
-    if (!m_selection_model)
-        return;
-
-    m_block_selection = true;
-
-    for (auto it = m_mask2overlay.begin(); it != m_mask2overlay.end(); ++it) {
-        QModelIndex index = m_masks_qmodel->indexOfItem(it.key());
-        if (index.isValid())
-            it.value()->setSelected(m_selection_model->isSelected(index));
-    }
-    m_block_selection = false;
-}
 
 //  ************************************************************************************************
 //  private (override QGraphicsScene)
@@ -224,7 +185,6 @@ void MaskGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
     if (!m_drawing_in_progress)
         QGraphicsScene::mouseReleaseEvent(event);
     else if (Canvas2DMode::isRectangleShapeMode(m_mode)) {
-        clearSelection();
         if (m_active_mask) {
             // drawing ended up with item drawn, let's make it selected
             if (IOverlay* overlay = m_mask2overlay[m_active_mask])
@@ -289,8 +249,6 @@ void MaskGraphicsScene::resetScene()
 {
     m_block_selection = true;
 
-    clearSelection();
-
     clear();
     m_mask2overlay.clear();
     m_proxy.release();
@@ -317,31 +275,6 @@ void MaskGraphicsScene::updateScene()
     }
 }
 
-//! Propagates selection from scene to model.
-
-void MaskGraphicsScene::onSceneSelectionChanged()
-{
-    if (m_block_selection)
-        return;
-
-    if (!m_selection_model)
-        return;
-
-    m_block_selection = true;
-
-    m_selection_model->clearSelection();
-
-    for (QGraphicsItem* graphicsItem : selectedItems()) {
-        if (auto* overlay = dynamic_cast<IOverlay*>(graphicsItem)) {
-            QModelIndex itemIndex = m_masks_qmodel->indexOfItem(overlay->parameterizedItem());
-            ASSERT(itemIndex.isValid());
-            if (!m_selection_model->isSelected(itemIndex))
-                m_selection_model->select(itemIndex, QItemSelectionModel::Select);
-        }
-    }
-    m_block_selection = false;
-}
-
 //! Updates proxy widget for intensity data item.
 
 void MaskGraphicsScene::updateProxyWidget()
@@ -515,9 +448,6 @@ void MaskGraphicsScene::processPolygonItem(QGraphicsSceneMouseEvent* event)
         m_masks_qmodel->pushItem(new_poly);
         new_poly->setMaskValue(m_mask_value);
         m_active_mask = new_poly;
-        m_selection_model->clearSelection();
-        m_selection_model->select(m_masks_qmodel->indexOfItem(m_active_mask),
-                                  QItemSelectionModel::Select);
         m_masks_qmodel->set()->updateMaskNames();
     }
     ASSERT(dynamic_cast<PolygonItem*>(m_active_mask));
@@ -549,9 +479,6 @@ void MaskGraphicsScene::processLineItem(QGraphicsSceneMouseEvent* event)
     ASSERT(m_active_mask);
     emit m_active_mask->maskGeometryChanged();
 
-    m_selection_model->clearSelection();
-    m_selection_model->select(m_masks_qmodel->indexOfItem(m_active_mask),
-                              QItemSelectionModel::Select);
     m_masks_qmodel->set()->updateMaskNames();
     m_active_mask->setMaskValue(m_mask_value);
 
@@ -584,7 +511,6 @@ void MaskGraphicsScene::processFullframeItem(QGraphicsSceneMouseEvent* event)
     auto* item = new FullframeItem;
     m_masks_qmodel->pushItem(item);
     m_active_mask = item;
-    m_selection_model->clearSelection();
     setDrawingInProgress(false);
 }
 
diff --git a/GUI/View/Scene/MaskGraphicsScene.h b/GUI/View/Scene/MaskGraphicsScene.h
index 81e444b7779c458405b045cc7ae31cffbe0d677d..87914e86c6d2d0822c36e812169d2873fb72d720 100644
--- a/GUI/View/Scene/MaskGraphicsScene.h
+++ b/GUI/View/Scene/MaskGraphicsScene.h
@@ -17,8 +17,7 @@
 
 #include "GUI/View/Setup/Canvas2DMode.h"
 #include <QGraphicsScene>
-#include <QItemSelection>
-#include <QItemSelectionModel>
+#include <QMap>
 #include <memory>
 
 class ColorMap;
@@ -54,11 +53,6 @@ signals:
 
 public slots:
     void onActivityChanged(Canvas2DMode::Flag mode);
-    void onRowsAboutToBeRemoved(const QModelIndex&, int first, int last);
-
-private slots:
-    void onSessionSelectionChanged(const QItemSelection& /* selected */,
-                                   const QItemSelection& /* deselected */);
 
 private:
     void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
@@ -69,7 +63,6 @@ private:
 
     void resetScene();
     void updateScene();
-    void onSceneSelectionChanged();
     void updateProxyWidget();
     void updateOverlays();
     IOverlay* registerOverlay(OverlayItem* item);
@@ -97,7 +90,6 @@ private:
     std::unique_ptr<ColorMap> m_plot;
     std::unique_ptr<MaskGraphicsProxy> m_proxy;
     MasksQModel* m_masks_qmodel = nullptr;
-    QItemSelectionModel* m_selection_model = nullptr;
     QMap<const OverlayItem*, IOverlay*> m_mask2overlay;
     bool m_block_selection = false;
     bool m_mouse_is_pressed = false;