diff --git a/Sim/Scan/AlphaScan.cpp b/Sim/Scan/AlphaScan.cpp
index 3740ac3d6eb167cab52a0e52130c53051388eb33..4315ee33d5af2bb38271fc194211b520a6507a89 100644
--- a/Sim/Scan/AlphaScan.cpp
+++ b/Sim/Scan/AlphaScan.cpp
@@ -61,18 +61,16 @@ std::vector<SpecularElement> AlphaScan::generateElements() const
     std::vector<SpecularElement> result;
     result.reserve(nSteps());
 
-    const DistrOutput lambdaDistrib =
-        m_lambda_distrib->generateResolutionSamples(wavelength(), m_axis->size());
-    const DistrOutput alphaDistrib =
-        m_alpha_distrib->generateResolutionSamples(m_axis->binCenters());
-
     for (size_t i = 0; i < m_axis->size(); ++i) {
-        for (size_t j = 0; j < alphaDistrib[i].size(); ++j) {
-            const double alpha = alphaDistrib[i][j].value;
-            for (size_t k = 0; k < lambdaDistrib[i].size(); ++k) {
-                const double wavelength = lambdaDistrib[i][k].value;
+        const auto lambdaDistrib = m_lambda_distrib->generateResolutionSamples(wavelength(), 1)[0];
+        const auto alphaDistrib =
+            m_alpha_distrib->generateResolutionSamples(m_axis->binCenters()[i], 1)[0];
+        for (size_t j = 0; j < alphaDistrib.size(); ++j) {
+            const double alpha = alphaDistrib[j].value;
+            for (size_t k = 0; k < lambdaDistrib.size(); ++k) {
+                const double wavelength = lambdaDistrib[k].value;
                 const bool computable = wavelength >= 0 && alpha >= 0 && alpha <= M_PI_2;
-                const double weight = alphaDistrib[i][j].weight * lambdaDistrib[i][k].weight;
+                const double weight = alphaDistrib[j].weight * lambdaDistrib[k].weight;
                 const double footprint = m_footprint ? m_footprint->calculate(alpha) : 1;
                 result.emplace_back(SpecularElement::FromAlphaScan(i, weight, wavelength, -alpha,
                                                                    footprint, polarizerMatrix(),