diff --git a/Sim/Simulation/OffspecSimulation.cpp b/Sim/Simulation/OffspecSimulation.cpp
index 4fd25375439ec185907dc1b17b57927c6a1a4b80..c6456c95e3c0248418fa9e15f3dd034d1a0ed679 100644
--- a/Sim/Simulation/OffspecSimulation.cpp
+++ b/Sim/Simulation/OffspecSimulation.cpp
@@ -136,20 +136,20 @@ Datafield OffspecSimulation::packResult()
     Datafield intensity_map({m_scan->coordinateAxis()->clone(), m_detector->axis(1).clone()});
     intensity_map.setAllTo(0.);
 
-    size_t ny = m_detector->axis(1).size();
+    const size_t ns = m_scan->nScan();
+    const size_t ny = m_detector->axis(1).size();
+    const size_t Ndet = m_detector->axis(0).size() * ny;
 
     // Apply detector resolution and transfer detector image
-    for (size_t j = 0; j < m_scan->nScan(); ++j) {
-        Datafield detector_image({m_detector->axis(0).clone(), m_detector->axis(1).clone()});
-        size_t N = detector_image.size();
-        for (size_t i = 0; i < N; ++i)
-            detector_image[i] = m_cache[j * N + i];
+    for (size_t j = 0; j < ns; ++j) {
+
         // TODO restore resolution m_detector->applyDetectorResolution(&detector_image);
-        for (size_t i = 0; i < N; ++i)
-            intensity_map[j * ny + i % ny] += detector_image[i];
+
+        for (size_t i = 0; i < Ndet; ++i)
+            intensity_map[j * ny + i % ny] += m_cache[j * Ndet + i];
 
         if (background())
-            for (size_t i = 0; i < N; ++i)
+            for (size_t i = 0; i < Ndet; ++i)
                 intensity_map[j * ny + i % ny] =
                     background()->addBackground(intensity_map[j * ny + i % ny]);
     }