diff --git a/Device/Histo/SimulationResult.cpp b/Device/Histo/SimulationResult.cpp
index ff51893f389e0809ab4e98dcad88ce6ad673184c..2ee7cfa70cbdc88e4f12bc08af36c548b7cd1284 100644
--- a/Device/Histo/SimulationResult.cpp
+++ b/Device/Histo/SimulationResult.cpp
@@ -17,11 +17,9 @@
 #include "Base/Axis/Scale.h"
 #include "Base/Util/Assert.h"
 
-SimulationResult::SimulationResult(const Datafield& data, const Frame* coords)
-    : Datafield(coords, data.flatVector(), data.errorSigmas())
+SimulationResult::SimulationResult(const Datafield& data)
+    : Datafield(data)
 {
-    ASSERT(coords);
-    ASSERT(data.rank() == coords->rank());
 }
 
 SimulationResult::SimulationResult(const SimulationResult& other)
diff --git a/Device/Histo/SimulationResult.h b/Device/Histo/SimulationResult.h
index 7099760b4b9e7f2fe78e0c2e68eb54df854ec609..782a2d21a0b0aa22df6a50e71d1bc43b386792a9 100644
--- a/Device/Histo/SimulationResult.h
+++ b/Device/Histo/SimulationResult.h
@@ -24,7 +24,7 @@ class Frame;
 
 class SimulationResult : public Datafield {
 public:
-    SimulationResult(const Datafield& data, const Frame* coords);
+    SimulationResult(const Datafield& data);
 
     SimulationResult(const SimulationResult& other);
     SimulationResult(SimulationResult&& other) noexcept;
diff --git a/Sim/Fitting/SimDataPair.cpp b/Sim/Fitting/SimDataPair.cpp
index a7f941b6f01e4f9c87c9507c102591efd6897bcd..781f82a10f8b81f7c00f554f179583b850d37d76 100644
--- a/Sim/Fitting/SimDataPair.cpp
+++ b/Sim/Fitting/SimDataPair.cpp
@@ -69,7 +69,7 @@ SimulationResult convertData(const ScatteringSimulation& simulation, const Dataf
         throw std::runtime_error(
             "FitObject::init_dataset: Detector and experimental data have different shape");
 
-    return SimulationResult(*roi_data, coordSystem);
+    return SimulationResult(*roi_data);
 }
 
 } // namespace
@@ -122,9 +122,8 @@ void SimDataPair::execSimulation(const mumufit::Parameters& params)
         m_user_weights =
             std::make_unique<SimulationResult>(convertData(*sim2d, *m_raw_user_weights));
     } else {
-        const Frame& frame = m_sim_data->frame();
-        m_exp_data = std::make_unique<SimulationResult>(*m_raw_data, frame.clone());
-        m_user_weights = std::make_unique<SimulationResult>(*m_raw_user_weights, frame.clone());
+        m_exp_data = std::make_unique<SimulationResult>(*m_raw_data);
+        m_user_weights = std::make_unique<SimulationResult>(*m_raw_user_weights);
     }
 
     if (sim2d && containsUncertainties())
@@ -133,7 +132,7 @@ void SimDataPair::execSimulation(const mumufit::Parameters& params)
     else {
         const Frame& frame = m_sim_data->frame();
         auto dummy_array = std::make_unique<Datafield>(frame.clonedAxes());
-        m_uncertainties = std::make_unique<SimulationResult>(*dummy_array, frame.clone());
+        m_uncertainties = std::make_unique<SimulationResult>(*dummy_array);
     }
 }
 
@@ -205,9 +204,7 @@ SimulationResult SimDataPair::relativeDifference() const
     for (size_t i = 0; i < N; ++i)
         data[i] = Numeric::relativeDifference((*m_sim_data)[i], (*m_exp_data)[i]);
 
-    const Frame* f = m_sim_data->frame().clone();
-    Datafield df(f, data);
-    return {df, f};
+    return {Datafield(m_sim_data->frame().clone(), data)};
 }
 
 SimulationResult SimDataPair::absoluteDifference() const
@@ -222,9 +219,7 @@ SimulationResult SimDataPair::absoluteDifference() const
     for (size_t i = 0; i < N; ++i)
         data[i] = std::abs((*m_sim_data)[i] - (*m_exp_data)[i]);
 
-    const Frame* f = m_sim_data->frame().clone();
-    Datafield df(f, data);
-    return {df, f};
+    return {Datafield(m_sim_data->frame().clone(), data)};
 }
 
 void SimDataPair::validate() const
diff --git a/Sim/Simulation/DepthprobeSimulation.cpp b/Sim/Simulation/DepthprobeSimulation.cpp
index c392812e34696a9ed36262c2d6a34f1e31ee9943..3cc8bcc5479cf22ec2df09565143427ff35c1471 100644
--- a/Sim/Simulation/DepthprobeSimulation.cpp
+++ b/Sim/Simulation/DepthprobeSimulation.cpp
@@ -178,5 +178,5 @@ SimulationResult DepthprobeSimulation::packResult()
     std::vector<const Scale*> axes{m_scan->coordinateAxis()->clone(), m_z_axis->clone()};
     auto data = std::make_unique<Datafield>(std::move(axes), m_cache);
 
-    return {*data, simCoordSystem()};
+    return {*data};
 }
diff --git a/Sim/Simulation/OffspecSimulation.cpp b/Sim/Simulation/OffspecSimulation.cpp
index db5e5e2830edd93e6197ca6f3a23958ee923df11..781d25c2e5f93baaa12d855e0858c47721110b34 100644
--- a/Sim/Simulation/OffspecSimulation.cpp
+++ b/Sim/Simulation/OffspecSimulation.cpp
@@ -149,5 +149,5 @@ SimulationResult OffspecSimulation::packResult()
             intensity_map[j * ny + i % ny] += detector_image[i];
     }
 
-    return {intensity_map, simCoordSystem()};
+    return {intensity_map};
 }
diff --git a/Sim/Simulation/ScatteringSimulation.cpp b/Sim/Simulation/ScatteringSimulation.cpp
index 200ea1fd1b5177fe8f804e26a1bdc048ec72a816..28c5d931c32c78cabceecb702edec2aa7d575dd1 100644
--- a/Sim/Simulation/ScatteringSimulation.cpp
+++ b/Sim/Simulation/ScatteringSimulation.cpp
@@ -129,5 +129,5 @@ SimulationResult ScatteringSimulation::packResult()
         [&](const auto it) { detectorMap[it.roiIndex()] = m_cache[elementIndex++]; });
     m_detector->applyDetectorResolution(&detectorMap);
 
-    return {detectorMap, simCoordSystem()};
+    return {detectorMap};
 }
diff --git a/Sim/Simulation/SpecularSimulation.cpp b/Sim/Simulation/SpecularSimulation.cpp
index 253803885efe8aec30718d3323cb05538971a19d..dbab73e1ad520fc70f0f18336758f0d06cd4476d 100644
--- a/Sim/Simulation/SpecularSimulation.cpp
+++ b/Sim/Simulation/SpecularSimulation.cpp
@@ -106,5 +106,5 @@ SimulationResult SpecularSimulation::packResult()
     }
 
     Datafield data({m_scan->coordinateAxis()->clone()}, vec);
-    return {data, simCoordSystem()};
+    return {data};
 }
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index 23cbf40f1fc41502f2ad8ef7d69611144ef5028b..faefe2cbfd7f42a928a4d293266f51ab839321a9 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -3042,7 +3042,7 @@ class SimulationResult(Datafield):
 
     def __init__(self, *args):
         r"""
-        __init__(SimulationResult self, Datafield data, Frame coords) -> SimulationResult
+        __init__(SimulationResult self, Datafield data) -> SimulationResult
         __init__(SimulationResult self, SimulationResult other) -> SimulationResult
         __init__(SimulationResult self, SimulationResult other) -> SimulationResult
         """
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index 361809357ce673582da91723fe56f958bd3863b4..6ec966e32b282fac9795a281cab2d15553fda37b 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -36933,14 +36933,11 @@ fail:
 SWIGINTERN PyObject *_wrap_new_SimulationResult__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   Datafield *arg1 = 0 ;
-  Frame *arg2 = (Frame *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
   SimulationResult *result = 0 ;
   
-  if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_Datafield,  0  | 0);
   if (!SWIG_IsOK(res1)) {
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_SimulationResult" "', argument " "1"" of type '" "Datafield const &""'"); 
@@ -36949,12 +36946,7 @@ SWIGINTERN PyObject *_wrap_new_SimulationResult__SWIG_0(PyObject *self, Py_ssize
     SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_SimulationResult" "', argument " "1"" of type '" "Datafield const &""'"); 
   }
   arg1 = reinterpret_cast< Datafield * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_Frame, 0 |  0 );
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_SimulationResult" "', argument " "2"" of type '" "Frame const *""'"); 
-  }
-  arg2 = reinterpret_cast< Frame * >(argp2);
-  result = (SimulationResult *)new SimulationResult((Datafield const &)*arg1,(Frame const *)arg2);
+  result = (SimulationResult *)new SimulationResult((Datafield const &)*arg1);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SimulationResult, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -37018,11 +37010,11 @@ fail:
 
 SWIGINTERN PyObject *_wrap_new_SimulationResult(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
-  PyObject *argv[3] = {
+  PyObject *argv[2] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SimulationResult", 0, 2, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_SimulationResult", 0, 1, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v = 0;
@@ -37041,24 +37033,19 @@ SWIGINTERN PyObject *_wrap_new_SimulationResult(PyObject *self, PyObject *args)
       return _wrap_new_SimulationResult__SWIG_2(self, argc, argv);
     }
   }
-  if (argc == 2) {
+  if (argc == 1) {
     int _v = 0;
     int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Datafield, SWIG_POINTER_NO_NULL | 0);
     _v = SWIG_CheckState(res);
     if (_v) {
-      void *vptr = 0;
-      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_Frame, 0);
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        return _wrap_new_SimulationResult__SWIG_0(self, argc, argv);
-      }
+      return _wrap_new_SimulationResult__SWIG_0(self, argc, argv);
     }
   }
   
 fail:
   SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SimulationResult'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    SimulationResult::SimulationResult(Datafield const &,Frame const *)\n"
+    "    SimulationResult::SimulationResult(Datafield const &)\n"
     "    SimulationResult::SimulationResult(SimulationResult const &)\n"
     "    SimulationResult::SimulationResult(SimulationResult &&)\n");
   return 0;
@@ -38353,7 +38340,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "writeDatafield", _wrap_writeDatafield, METH_VARARGS, "writeDatafield(Datafield data, std::string const & file_name)"},
 	 { "dataMatchesFile", _wrap_dataMatchesFile, METH_VARARGS, "dataMatchesFile(Datafield data, std::string const & refFileName, double tol) -> bool"},
 	 { "new_SimulationResult", _wrap_new_SimulationResult, METH_VARARGS, "\n"
-		"SimulationResult(Datafield data, Frame coords)\n"
+		"SimulationResult(Datafield data)\n"
 		"SimulationResult(SimulationResult other)\n"
 		"new_SimulationResult(SimulationResult other) -> SimulationResult\n"
 		""},