diff --git a/Core/Simulation/SpecularSimulation.cpp b/Core/Simulation/SpecularSimulation.cpp
index 0622c97fe73bca06acc19f5679e89984bbe4fea9..54f814adec28b9e34aa9c2ed5bbde97cb711f143 100644
--- a/Core/Simulation/SpecularSimulation.cpp
+++ b/Core/Simulation/SpecularSimulation.cpp
@@ -77,11 +77,8 @@ SimulationResult SpecularSimulation::result() const
 {
     const size_t i_layer = 0; // detector intensity is proportional to reflectivity from top layer
     validityCheck(i_layer);
-    const auto detector = SpecDetector(m_instrument);
-    auto data = std::unique_ptr<OutputData<double>>(
-                    detector->createDetectorIntensity(m_sim_elements, m_instrument.getBeam()));
-    auto& axis = detector->getAxis(0);
-    SpecularConverter converter(m_instrument.getBeam(), axis);
+    auto data = createIntensityData();
+    SpecularConverter converter(m_instrument.getBeam(), *m_coordinate_axis);
     return SimulationResult(*data, converter);
 }
 
@@ -119,7 +116,7 @@ void SpecularSimulation::setBeamParameters(double lambda, const IAxis& alpha_axi
 void SpecularSimulation::setBeamParameters(double lambda, int nbins, double alpha_i_min,
                                            double alpha_i_max, const IFootprintFactor* beam_shape)
 {
-    FixedBinAxis axis("alpha_i", nbins, alpha_i_min, alpha_i_max);
+    FixedBinAxis axis("alpha_i", static_cast<size_t>(nbins), alpha_i_min, alpha_i_max);
     setBeamParameters(lambda, axis, beam_shape);
 }
 
@@ -133,7 +130,7 @@ const IAxis* SpecularSimulation::getAlphaAxis() const
 
 void SpecularSimulation::initSimulationElementVector()
 {
-    auto beam = m_instrument.getBeam();
+    const auto& beam = m_instrument.getBeam();
     m_sim_elements = generateSimulationElements(beam);
 
     if (!m_cache.empty())
@@ -302,6 +299,18 @@ double SpecularSimulation::alpha_i(size_t index) const
     return m_coordinate_axis->getBin(index).getMidPoint();
 }
 
+std::unique_ptr<OutputData<double>> SpecularSimulation::createIntensityData() const
+{
+    std::unique_ptr<OutputData<double>> result(new OutputData<double>);
+    result->addAxis(*m_coordinate_axis);
+
+    size_t i = 0;
+    for (auto iter = m_sim_elements.begin(); iter != m_sim_elements.end(); ++iter, ++i)
+        result->operator[](i) = iter->getIntensity();
+
+    return result;
+}
+
 namespace
 {
 const SpecularDetector1D* SpecDetector(const Instrument& instrument)
diff --git a/Core/Simulation/SpecularSimulation.h b/Core/Simulation/SpecularSimulation.h
index 231ecf0d2787ba125e9428001ae830ce507c1ed7..fcc4fc1d5438c435a06ee13b8cdd65e724f1a86e 100644
--- a/Core/Simulation/SpecularSimulation.h
+++ b/Core/Simulation/SpecularSimulation.h
@@ -103,6 +103,8 @@ private:
 
     double alpha_i(size_t index) const;
 
+    std::unique_ptr<OutputData<double>> createIntensityData() const;
+
     //! Returns vector of reflection coefficients (\f$R\f$) for all alpha_i angles for given layer index.
     //! Deprecated and will be removed.
     std::vector<complex_t> getScalarR(size_t i_layer) const;