diff --git a/GUI/Model/Data/MaskItems.cpp b/GUI/Model/Data/MaskItems.cpp
index f777c129dbe0ef8ed6e4d2e87d764be84d7dbf08..b912d248ab83463ba30859a89f21f501af88a8c9 100644
--- a/GUI/Model/Data/MaskItems.cpp
+++ b/GUI/Model/Data/MaskItems.cpp
@@ -265,6 +265,7 @@ void MaskItem::readFrom(QXmlStreamReader* r)
             // is visible?
         } else if (tag == Tag::IsVisible) {
             XML::readAttribute(r, XML::Attrib::value, &m_isVisible);
+            m_wasVisible = m_isVisible;
             XML::gotoEndElementOfTag(r, tag);
 
         } else
diff --git a/GUI/Model/Data/MaskItems.h b/GUI/Model/Data/MaskItems.h
index 9ab8aab319a44d411b36f3873c7ad481126f9de1..fcad5d77eaa171e509008d5ac263176142b08a5f 100644
--- a/GUI/Model/Data/MaskItems.h
+++ b/GUI/Model/Data/MaskItems.h
@@ -54,6 +54,9 @@ public:
     bool isVisibleValue() const;
     void setIsVisibleValue(bool visible);
 
+    bool wasVisible() const { return m_wasVisible; }
+    void setWasVisible(bool v) { m_wasVisible = v; }
+
     virtual void writeTo(QXmlStreamWriter* w) const;
     virtual void readFrom(QXmlStreamReader* r);
 
@@ -62,6 +65,7 @@ protected:
     QString m_maskName = "nameless by default";
     bool m_maskValue = true;
     bool m_isVisible = true;
+    bool m_wasVisible = m_isVisible; // do not serialize
 };
 
 class RectangleItem : public MaskItem {
diff --git a/GUI/View/Mask/MaskEditorCanvas.cpp b/GUI/View/Mask/MaskEditorCanvas.cpp
index 151267621971f371effbaaadce9ba1eabb06cf91..75d2035b5401bae9bf0c415f24d54d0b79676c43 100644
--- a/GUI/View/Mask/MaskEditorCanvas.cpp
+++ b/GUI/View/Mask/MaskEditorCanvas.cpp
@@ -82,9 +82,9 @@ void MaskEditorCanvas::onPresentationTypeRequest(MaskEditorFlags::PresentationTy
     m_resultsPresenter->updatePresenter(presentationType);
 
     if (auto* container = m_intensityDataItem->maskContainerItem()) {
-        bool isVisible = presentationType.testFlag(MaskEditorFlags::MASK_EDITOR);
+        bool tempVisible = presentationType.testFlag(MaskEditorFlags::MASK_EDITOR);
         for (MaskItem* mask : container->maskItems())
-            mask->setIsVisibleValue(isVisible);
+            mask->setIsVisibleValue(tempVisible && mask->wasVisible());
     }
 }
 
diff --git a/GUI/View/Mask/MaskEditorPropertyPanel.cpp b/GUI/View/Mask/MaskEditorPropertyPanel.cpp
index 0a64e94a01926325cf04255a6b561d63d4f208a1..c0a33c212897f7c481286f550765f7dc10ae4254 100644
--- a/GUI/View/Mask/MaskEditorPropertyPanel.cpp
+++ b/GUI/View/Mask/MaskEditorPropertyPanel.cpp
@@ -181,6 +181,7 @@ void MaskEditorPropertyPanel::createMaskEditorUI()
     const auto visibilityValueSetter = [this, maskItem](bool b) {
         m_inhibitSelectionChange = true;
         maskItem->setIsVisibleValue(b);
+        maskItem->setWasVisible(b);
         m_inhibitSelectionChange = false;
     };
     addMaskCheckBox("Show", visibilityValueGetter, visibilityValueSetter);