diff --git a/Core/Simulation/Simulation2D.cpp b/Core/Simulation/Simulation2D.cpp
index ed39765f20834c4c3030501cb6ef9b620ae3504b..4441df9ea0cd9c014bf7ee525f1b5583e4063866 100644
--- a/Core/Simulation/Simulation2D.cpp
+++ b/Core/Simulation/Simulation2D.cpp
@@ -34,7 +34,7 @@ Simulation2D::~Simulation2D() = default;
 void Simulation2D::prepareSimulation()
 {
     Simulation::prepareSimulation();
-    detector_context = m_instrument.detector2D().createContext();
+    m_detector_context = m_instrument.detector2D().createContext();
 }
 
 void Simulation2D::removeMasks()
@@ -64,9 +64,9 @@ Simulation2D::Simulation2D(const Simulation2D& other)
 
 size_t Simulation2D::numberOfSimulationElements() const
 {
-    if (!detector_context)
+    if (!m_detector_context)
         throw std::runtime_error("Error in numberOfSimulationElements(): no detector context");
-    return detector_context->numberOfSimulationElements();
+    return m_detector_context->numberOfSimulationElements();
 }
 
 void Simulation2D::setDetectorParameters(size_t n_x, double x_min, double x_max, size_t n_y,
@@ -102,15 +102,16 @@ std::vector<SimulationElement> Simulation2D::generateSimulationElements(const Be
     const Eigen::Matrix2cd analyzer_operator = detector.detectionProperties().analyzerOperator();
     const size_t spec_index = detector.getIndexOfSpecular(beam);
 
+    const size_t N = m_detector_context->numberOfSimulationElements();
+
     std::vector<SimulationElement> result;
-    result.reserve(detector_context->numberOfSimulationElements());
-    for (size_t element_index = 0; element_index < detector_context->numberOfSimulationElements();
-         ++element_index) {
+    result.reserve(N);
+    for (size_t element_index = 0; element_index < N; ++element_index) {
         SimulationElement element(wavelength, alpha_i, phi_i,
-                                  detector_context->createPixel(element_index));
+                                  m_detector_context->createPixel(element_index));
         element.setPolarization(beam_polarization);
         element.setAnalyzerOperator(analyzer_operator);
-        if (detector_context->detectorIndex(element_index) == spec_index)
+        if (m_detector_context->detectorIndex(element_index) == spec_index)
             element.setSpecular(true);
         result.emplace_back(std::move(element));
     }
diff --git a/Core/Simulation/Simulation2D.h b/Core/Simulation/Simulation2D.h
index a8c500fea76a6cf764f955d41601cf09de277d33..e760049af1b2ce9bf8d9f7f7ec0b6f1f1dbc584a 100644
--- a/Core/Simulation/Simulation2D.h
+++ b/Core/Simulation/Simulation2D.h
@@ -96,11 +96,11 @@ protected:
 
     std::vector<SimulationElement> m_sim_elements;
     std::vector<double> m_cache;
-    std::unique_ptr<DetectorContext> detector_context;
 
 private:
     std::vector<double> rawResults() const override;
     void setRawResults(const std::vector<double>& raw_data) override;
+    std::unique_ptr<DetectorContext> m_detector_context;
 };
 
 #endif // BORNAGAIN_CORE_SIMULATION_SIMULATION2D_H