diff --git a/Sim/Simulation/OffspecSimulation.cpp b/Sim/Simulation/OffspecSimulation.cpp
index c6456c95e3c0248418fa9e15f3dd034d1a0ed679..6a284af36bb4a11ed47a83868a6a55ef23b45587 100644
--- a/Sim/Simulation/OffspecSimulation.cpp
+++ b/Sim/Simulation/OffspecSimulation.cpp
@@ -132,27 +132,23 @@ size_t OffspecSimulation::nElements() const
 
 Datafield OffspecSimulation::packResult()
 {
-    // update intensity map
-    Datafield intensity_map({m_scan->coordinateAxis()->clone(), m_detector->axis(1).clone()});
-    intensity_map.setAllTo(0.);
-
     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;
+    std::vector<double> out(ns * ny, 0.);
 
     // Apply detector resolution and transfer detector image
     for (size_t j = 0; j < ns; ++j) {
 
         // TODO restore resolution m_detector->applyDetectorResolution(&detector_image);
 
-        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 < Ndet; ++i)
-                intensity_map[j * ny + i % ny] =
-                    background()->addBackground(intensity_map[j * ny + i % ny]);
+        for (size_t i = 0; i < Ndet; ++i) {
+            double& val = out[j * ny + i % ny];
+            val += m_cache[j * Ndet + i];
+            if (background())
+                val = background()->addBackground(val);
+        }
     }
 
-    return {intensity_map};
+    return {{m_scan->coordinateAxis()->clone(), m_detector->axis(1).clone()}, out};
 }