diff --git a/Device/Mask/MaskStack.cpp b/Device/Mask/MaskStack.cpp
index 8fe30f58d0243941eee430b0663a2691f515ebc8..e8358f72ddfba8f873cd3c9a54ecb76fe0524e21 100644
--- a/Device/Mask/MaskStack.cpp
+++ b/Device/Mask/MaskStack.cpp
@@ -31,10 +31,10 @@ MaskPattern* MaskPattern::clone() const
     return new MaskPattern(shape->clone(), doMask);
 }
 
+
 MaskStack::MaskStack(const Scale& xAxis, const Scale& yAxis)
     : m_xAxis(xAxis.clone())
     , m_yAxis(yAxis.clone())
-    , m_masked(xAxis.size() * yAxis.size(), false)
 {
 }
 
@@ -44,19 +44,25 @@ MaskStack::MaskStack(const MaskStack& other)
     : m_xAxis(other.m_xAxis->clone())
     , m_yAxis(other.m_yAxis->clone())
     , m_stack(other.m_stack)
-    , m_masked(other.m_masked)
 {
 }
 
 void MaskStack::addMask(const IShape2D& shape, bool mask_value)
 {
     m_stack.emplace_back(new MaskPattern(shape.clone(), mask_value));
-    process_masks();
 }
 
 bool MaskStack::isMasked(size_t i_flat) const
 {
-    return m_masked[i_flat];
+    Bin1D binx = m_xAxis->bin(i_flat % m_xAxis->size());
+    Bin1D biny = m_yAxis->bin(i_flat / m_xAxis->size());
+
+    for (int k = m_stack.size() - 1; k >= 0; --k) {
+        const MaskPattern* const pat = m_stack[k];
+        if (pat->shape->contains(binx, biny))
+            return pat->doMask;
+    }
+    return false;
 }
 
 bool MaskStack::hasMasks() const
@@ -73,25 +79,3 @@ const MaskPattern* MaskStack::patternAt(size_t iMask) const
 {
     return m_stack.at(iMask);
 }
-
-void MaskStack::process_masks()
-{
-    m_masked.clear();
-    m_masked.resize(m_xAxis->size() * m_yAxis->size(), false);
-
-    if (m_stack.empty())
-        return;
-
-    for (size_t i_flat = 0; i_flat < m_masked.size(); ++i_flat) {
-        Bin1D binx = m_xAxis->bin(i_flat % m_xAxis->size());
-        Bin1D biny = m_yAxis->bin(i_flat / m_xAxis->size());
-        // setting mask to the data starting from last shape added
-        for (int k = m_stack.size() - 1; k >= 0; --k) {
-            const MaskPattern* const pat = m_stack[k];
-            if (pat->shape->contains(binx, biny)) {
-                m_masked[i_flat] = pat->doMask;
-                break; // i_flat is covered by the shape, stop looking further
-            }
-        }
-    }
-}
diff --git a/Device/Mask/MaskStack.h b/Device/Mask/MaskStack.h
index ada95acc5d4a0ee87de2a74962af4b7d37665cd3..276b5ce4316511f6a1013aea8b642a78e8347e5d 100644
--- a/Device/Mask/MaskStack.h
+++ b/Device/Mask/MaskStack.h
@@ -56,15 +56,10 @@ public:
     const MaskPattern* patternAt(size_t iMask) const;
 
 private:
-    void process_masks();
-
     //... primary data:
     const Scale* m_xAxis;
     const Scale* m_yAxis;
     CloneableVector<MaskPattern> m_stack;
-
-    //... cached secondary data:
-    std::vector<bool> m_masked;
 };
 
 #endif // BORNAGAIN_DEVICE_MASK_MASKSTACK_H