diff --git a/Device/Data/Datafield.cpp b/Device/Data/Datafield.cpp
index 126e2c7c3b1ef35c29ebcb12ae152cd53a082f51..46b50179ca0ff40600d50fff52b523323e04324d 100644
--- a/Device/Data/Datafield.cpp
+++ b/Device/Data/Datafield.cpp
@@ -40,9 +40,19 @@ Datafield::Datafield(const Frame* frame, std::vector<double> values, std::vector
 {
 }
 
+Datafield::Datafield(const Frame* frame)
+    : Datafield("", frame)
+{
+}
+
 Datafield::Datafield(std::vector<const Scale*> axes, std::vector<double> values,
                      std::vector<double> errSigmas)
-    : Datafield("", new Frame(std::move(axes)), values, errSigmas)
+    : Datafield(new Frame(axes), values, errSigmas)
+{
+}
+
+Datafield::Datafield(std::vector<const Scale*> axes)
+    : Datafield(new Frame(axes))
 {
 }
 
diff --git a/Device/Data/Datafield.h b/Device/Data/Datafield.h
index 49b3cf98cc9a1df123104222dd70ea89de2c502f..d33f0d129808902f826551205c695020f7ca3924 100644
--- a/Device/Data/Datafield.h
+++ b/Device/Data/Datafield.h
@@ -35,13 +35,18 @@ public:
     Datafield(std::string title, const Frame* frame);
 
     //! Constructor that takes ownership of supplied frame and initializes values and errorbars
-    Datafield(const Frame* frame, std::vector<double> values = {},
-              std::vector<double> errSigmas = {});
+    Datafield(const Frame* frame, std::vector<double> values, std::vector<double> errSigmas = {});
+
+    //! Constructor that takes ownership of supplied frame
+    Datafield(const Frame* frame);
 
     //! Constructor that takes ownership of supplied axes and initializes values and errorbars
-    Datafield(std::vector<const Scale*> axes, std::vector<double> values = {},
+    Datafield(std::vector<const Scale*> axes, std::vector<double> values,
               std::vector<double> errSigmas = {});
 
+    //! Constructor that takes ownership of supplied axes
+    Datafield(std::vector<const Scale*> axes);
+
     Datafield(const Datafield&);
     Datafield(Datafield&&) noexcept;
     virtual ~Datafield();
diff --git a/Sim/Simulation/ScatteringSimulation.cpp b/Sim/Simulation/ScatteringSimulation.cpp
index 76466c87a08afbc6f1e741e503b74a38f45d280f..b5a98df0994b89eb4ed18148bf3d00ca9d7d4316 100644
--- a/Sim/Simulation/ScatteringSimulation.cpp
+++ b/Sim/Simulation/ScatteringSimulation.cpp
@@ -123,11 +123,11 @@ size_t ScatteringSimulation::nElements() const
 
 Datafield ScatteringSimulation::packResult()
 {
-    Datafield detectorMap(m_detector->createDetectorMap());
+    Datafield result(m_detector->createDetectorMap());
     size_t elementIndex = 0;
     m_detector->iterateOverNonMaskedPoints(
-        [&](const auto it) { detectorMap[it.roiIndex()] = m_cache[elementIndex++]; });
-    m_detector->applyDetectorResolution(&detectorMap);
+        [&](const auto it) { result[it.roiIndex()] = m_cache[elementIndex++]; });
+    m_detector->applyDetectorResolution(&result);
 
-    return {detectorMap};
+    return result;
 }
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index f377f83041b1f85b7dffd20f43ec79adb2653d6b..3703418cccb74f77111307d55cc521729ecdeaae 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -2066,8 +2066,10 @@ class Datafield(object):
         r"""
         __init__(Datafield self, std::string title, Frame frame, vdouble1d_t values, vdouble1d_t errSigmas={}) -> Datafield
         __init__(Datafield self, std::string title, Frame frame) -> Datafield
-        __init__(Datafield self, Frame frame, vdouble1d_t values={}, vdouble1d_t errSigmas={}) -> Datafield
-        __init__(Datafield self, std::vector< Scale const *,std::allocator< Scale const * > > axes, vdouble1d_t values={}, vdouble1d_t errSigmas={}) -> Datafield
+        __init__(Datafield self, Frame frame, vdouble1d_t values, vdouble1d_t errSigmas={}) -> Datafield
+        __init__(Datafield self, Frame frame) -> Datafield
+        __init__(Datafield self, std::vector< Scale const *,std::allocator< Scale const * > > axes, vdouble1d_t values, vdouble1d_t errSigmas={}) -> Datafield
+        __init__(Datafield self, std::vector< Scale const *,std::allocator< Scale const * > > axes) -> Datafield
         __init__(Datafield self, Datafield arg2) -> Datafield
         __init__(Datafield self, Datafield arg2) -> Datafield
         """
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index c41b0f18c179aab0e48b168d95b3486b0d4613cc..9f3c7e9a8d28e1b343c2d65a0c96c8cf0a5c7314 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -40924,8 +40924,10 @@ static PyMethodDef SwigMethods[] = {
 	 { "new_Datafield", _wrap_new_Datafield, METH_VARARGS, "\n"
 		"Datafield(std::string title, Frame frame, vdouble1d_t values, vdouble1d_t errSigmas={})\n"
 		"Datafield(std::string title, Frame frame)\n"
-		"Datafield(Frame frame, vdouble1d_t values={}, vdouble1d_t errSigmas={})\n"
-		"Datafield(std::vector< Scale const *,std::allocator< Scale const * > > axes, vdouble1d_t values={}, vdouble1d_t errSigmas={})\n"
+		"Datafield(Frame frame, vdouble1d_t values, vdouble1d_t errSigmas={})\n"
+		"Datafield(Frame frame)\n"
+		"Datafield(std::vector< Scale const *,std::allocator< Scale const * > > axes, vdouble1d_t values, vdouble1d_t errSigmas={})\n"
+		"Datafield(std::vector< Scale const *,std::allocator< Scale const * > > axes)\n"
 		"Datafield(Datafield arg1)\n"
 		"new_Datafield(Datafield arg1) -> Datafield\n"
 		""},