diff --git a/GUI/View/Canvas/MaskEditorCanvas.cpp b/GUI/View/Canvas/MaskEditorCanvas.cpp
index 040d801ae53343c23eed917de3534789b314db16..4350548774be6d113f3c8614e4ff295244305dbc 100644
--- a/GUI/View/Canvas/MaskEditorCanvas.cpp
+++ b/GUI/View/Canvas/MaskEditorCanvas.cpp
@@ -69,7 +69,7 @@ MaskEditorCanvas::MaskEditorCanvas()
     , m_status_label(new PlotStatusLabel({m_scene->colorMap()}))
     , m_data_item(nullptr)
 {
-    setCanvasMode(Canvas2DMode::PAN_ZOOM);
+    setCanvasMode(Canvas2DMode::SELECTION);
 
     setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
     setMinimumSize(400, 400);
diff --git a/GUI/View/Scene/MaskGraphicsScene.cpp b/GUI/View/Scene/MaskGraphicsScene.cpp
index c5af5ab8c0a433c5d267ab2a29c76bd61d3dad5b..2e75c59aeab40886344a54561f004d536e643bab 100644
--- a/GUI/View/Scene/MaskGraphicsScene.cpp
+++ b/GUI/View/Scene/MaskGraphicsScene.cpp
@@ -86,6 +86,9 @@ MaskGraphicsScene::MaskGraphicsScene()
 
     m_viewport = new Viewport(m_plot.get());
     addItem(m_viewport); // takes ownership
+
+    connect(this, &MaskGraphicsScene::selectionChanged, this,
+            &MaskGraphicsScene::onSceneSelectionChanged);
 }
 
 MaskGraphicsScene::~MaskGraphicsScene() = default;
@@ -117,6 +120,11 @@ void MaskGraphicsScene::associateItems(Data2DItem* data_item)
     m_prjns = data_item->prjnsRW();
     ASSERT(m_masks);
     ASSERT(m_prjns);
+
+    connect(m_masks, &MasksSet::setChanged, this, &MaskGraphicsScene::onSetChanged,
+            Qt::UniqueConnection);
+    connect(m_prjns, &MasksSet::setChanged, this, &MaskGraphicsScene::onSetChanged,
+            Qt::UniqueConnection);
 }
 
 void MaskGraphicsScene::updateSize(const QSize& newSize)
@@ -190,6 +198,9 @@ void MaskGraphicsScene::onActivityChanged(Canvas2DMode::Flag mode)
 
 void MaskGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent* event)
 {
+    // forbid multiple visual selection
+    event->setModifiers(Qt::NoModifier);
+
     if (event->buttons() & Qt::LeftButton)
         m_mouse_is_pressed = true;
 
@@ -197,7 +208,7 @@ void MaskGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent* event)
         if (m_drawing_in_progress)
             cancelCurrentDrawing();
         else
-            makeViewAtMousePosSelected(event);
+            selectOnlyItemAtMousePos(event);
         return;
     }
 
@@ -235,6 +246,8 @@ void MaskGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
 
 void MaskGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
 {
+    event->setModifiers(Qt::NoModifier);
+
     m_mouse_is_pressed = false;
 
     if (!m_drawing_in_progress)
@@ -242,12 +255,13 @@ void MaskGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
     else if (Canvas2DMode::basedOnRectangle(m_mode)) {
         if (m_active_mask) {
             // drawing ended up with item drawn, let's make it selected
-            if (IOverlay* overlay = m_mask2overlay[m_active_mask])
-                overlay->setSelected(true);
+            selectOnlyItemAtMousePos(event);
+            ASSERT(selectedItems().size() == 1);
+            ASSERT(selectedItems().first() == m_mask2overlay[m_active_mask]);
         } else {
             // drawing ended without item to be draw (too short mouse move)
             // making item beneath of mouse release position to be selected
-            makeViewAtMousePosSelected(event);
+            selectOnlyItemAtMousePos(event);
         }
         setDrawingInProgress(false);
     }
@@ -396,6 +410,16 @@ void MaskGraphicsScene::removeOverlay(const OverlayItem* item)
     }
 }
 
+void MaskGraphicsScene::onSetChanged()
+{
+    qInfo() << "onSetChanged";
+}
+
+void MaskGraphicsScene::onSceneSelectionChanged()
+{
+    qInfo() << "onSceneSelectionChanged";
+}
+
 void MaskGraphicsScene::setDrawingInProgress(bool value)
 {
     m_drawing_in_progress = value;
@@ -405,10 +429,22 @@ void MaskGraphicsScene::setDrawingInProgress(bool value)
         m_active_mask = nullptr;
 }
 
-void MaskGraphicsScene::makeViewAtMousePosSelected(QGraphicsSceneMouseEvent* event)
+void MaskGraphicsScene::selectOnlyItemAtMousePos(QGraphicsSceneMouseEvent* event)
 {
-    if (QGraphicsItem* graphicsItem = itemAt(event->scenePos(), QTransform()))
-        graphicsItem->setSelected(true);
+    blockSignals(true);
+
+    auto old_selection = selectedItems();
+    for (QGraphicsItem* otherItem : old_selection)
+        otherItem->setSelected(false);
+
+    if (QGraphicsItem* clickedItem = itemAt(event->scenePos(), QTransform()))
+        if (clickedItem != m_viewport)
+            clickedItem->setSelected(true);
+
+    blockSignals(false);
+
+    if (old_selection != selectedItems())
+        emit selectionChanged();
 }
 
 //! Processes RectangleItem and EllipseItem drawing.
diff --git a/GUI/View/Scene/MaskGraphicsScene.h b/GUI/View/Scene/MaskGraphicsScene.h
index ccd03de8b5134c9757b255b0e40231df115b900a..be8669055df08a23d98c34c2db26b0a03fe0ce57 100644
--- a/GUI/View/Scene/MaskGraphicsScene.h
+++ b/GUI/View/Scene/MaskGraphicsScene.h
@@ -47,6 +47,7 @@ public:
     ColorMap* colorMap() { return m_plot.get(); }
 
 signals:
+    void mouseSelectionChanged();
     void itemContextMenuRequest(const QPoint& point);
     void lineItemProcessed();
     void lineItemMoved(LineItem* sender);
@@ -68,9 +69,12 @@ private:
     IOverlay* registerOverlay(OverlayItem* item);
     void removeOverlay(const OverlayItem* item);
 
+    void onSetChanged();
+    void onSceneSelectionChanged();
+
     void setDrawingInProgress(bool value);
 
-    void makeViewAtMousePosSelected(QGraphicsSceneMouseEvent* event);
+    void selectOnlyItemAtMousePos(QGraphicsSceneMouseEvent* event);
 
     void processRectangleOrEllipseItem(QGraphicsSceneMouseEvent* event);
     void processPolygonItem(QGraphicsSceneMouseEvent* event);
diff --git a/GUI/View/Setup/Data2DToolbar.cpp b/GUI/View/Setup/Data2DToolbar.cpp
index 3ddbc53a42d664987b653c5b572db4a1095ad558..9bf18730a9abb1e9b2de6abb5d4161df652e2a98 100644
--- a/GUI/View/Setup/Data2DToolbar.cpp
+++ b/GUI/View/Setup/Data2DToolbar.cpp
@@ -35,6 +35,7 @@ Data2DToolbar::Data2DToolbar(bool mask_tools)
     selection_button->setIcon(QIcon(":/images/mask/arrow.svg"));
     selection_button->setToolTip("Select/modify mask");
     selection_button->setCheckable(true);
+    selection_button->setChecked(true);
     addWidget(selection_button);
     m_activity_button_group->addButton(selection_button, Canvas2DMode::SELECTION);
 
@@ -43,7 +44,6 @@ Data2DToolbar::Data2DToolbar(bool mask_tools)
     pan_button->setToolTip("Pan/zoom mode (space)\n"
                            "Drag axes with the mouse, use mouse wheel to zoom in/out");
     pan_button->setCheckable(true);
-    pan_button->setChecked(true);
     addWidget(pan_button);
     m_activity_button_group->addButton(pan_button, Canvas2DMode::PAN_ZOOM);