diff --git a/Device/Coord/CoordSystem1D.cpp b/Device/Coord/CoordSystem1D.cpp
index f29e48998bc72c1edcb84a343417fe15aa834b11..f2f21557b13299f95d06fc963a80d4b237cb0434 100644
--- a/Device/Coord/CoordSystem1D.cpp
+++ b/Device/Coord/CoordSystem1D.cpp
@@ -90,7 +90,7 @@ double CoordSystem1D::calculateMax(size_t i_axis, Coords units) const
     return translator(m_axes[0]->binCenter(m_axes[0]->size() - 1));
 }
 
-IAxis* CoordSystem1D::createConvertedAxis(size_t i_axis, Coords units) const
+IAxis* CoordSystem1D::convertedAxis(size_t i_axis, Coords units) const
 {
     ASSERT(i_axis == 0);
     units = substituteDefaultUnits(units);
diff --git a/Device/Coord/CoordSystem1D.h b/Device/Coord/CoordSystem1D.h
index cf2801ad565a06d6948bee8d7bb58f7802c8c7a2..07ef552b3a4d0f181215b9bb74dd1c36ec702e46 100644
--- a/Device/Coord/CoordSystem1D.h
+++ b/Device/Coord/CoordSystem1D.h
@@ -32,7 +32,7 @@ public:
     CoordSystem1D* clone() const override = 0;
 
     //! Creates axis in converted units.
-    IAxis* createConvertedAxis(size_t i_axis, Coords units) const override;
+    IAxis* convertedAxis(size_t i_axis, Coords units) const override;
 
     //! Calculates minimum on-axis value in given units.
     double calculateMin(size_t i_axis, Coords units) const override;
diff --git a/Device/Coord/CoordSystem2D.cpp b/Device/Coord/CoordSystem2D.cpp
index d1ceefe2fad37bf57f119209802355bef9969a96..35b84d9ced7adabe24f5de8a166d35ac7467a997 100644
--- a/Device/Coord/CoordSystem2D.cpp
+++ b/Device/Coord/CoordSystem2D.cpp
@@ -74,7 +74,7 @@ std::vector<Coords> CoordSystem2D::availableUnits() const
     return {Coords::NBINS, Coords::RADIANS, Coords::DEGREES};
 }
 
-IAxis* CoordSystem2D::createConvertedAxis(size_t i_axis, Coords units) const
+IAxis* CoordSystem2D::convertedAxis(size_t i_axis, Coords units) const
 {
     const double min = calculateMin(i_axis, units);
     const double max = calculateMax(i_axis, units);
diff --git a/Device/Coord/CoordSystem2D.h b/Device/Coord/CoordSystem2D.h
index 2efa41ebb96b88bb627b64a163f5a7bc2e5602bf..176371422148ec70fe0f78d7ebd420e65235b43c 100644
--- a/Device/Coord/CoordSystem2D.h
+++ b/Device/Coord/CoordSystem2D.h
@@ -38,7 +38,7 @@ public:
     //! Further units may be added by child classes.
     std::vector<Coords> availableUnits() const override;
 
-    IAxis* createConvertedAxis(size_t i_axis, Coords units) const override;
+    IAxis* convertedAxis(size_t i_axis, Coords units) const override;
 
 protected:
     CoordSystem2D(const CoordSystem2D& other);
diff --git a/Device/Coord/ICoordSystem.cpp b/Device/Coord/ICoordSystem.cpp
index b924ab5a07a06d852fccfaec19d5d639007f69a3..eccde4d24ed7fa7673d8befeeee77eeda1216503 100644
--- a/Device/Coord/ICoordSystem.cpp
+++ b/Device/Coord/ICoordSystem.cpp
@@ -27,7 +27,7 @@ std::vector<const IAxis*> ICoordSystem::convertedAxes(Coords units) const
 {
     std::vector<const IAxis*> result;
     for (size_t i = 0; i < rank(); ++i)
-        result.emplace_back(createConvertedAxis(i, units));
+        result.emplace_back(convertedAxis(i, units));
     return result;
 }
 
diff --git a/Device/Coord/ICoordSystem.h b/Device/Coord/ICoordSystem.h
index ab60b488088e2b8db7241c19ec24b7ec6155893a..080e515d68f5345fc207e1d0eb452ea872c93d1b 100644
--- a/Device/Coord/ICoordSystem.h
+++ b/Device/Coord/ICoordSystem.h
@@ -53,7 +53,7 @@ public:
     virtual std::vector<Coords> availableUnits() const = 0;
     virtual Coords defaultUnits() const = 0;
 
-    virtual IAxis* createConvertedAxis(size_t i_axis, Coords units) const = 0;
+    virtual IAxis* convertedAxis(size_t i_axis, Coords units) const = 0;
 
     std::vector<const IAxis*> defaultAxes() const;
     std::vector<const IAxis*> convertedAxes(Coords units) const;
diff --git a/Device/Histo/SimulationResult.cpp b/Device/Histo/SimulationResult.cpp
index 1b23dae31f659a483bdf2a5f9a0bf74e0244e109..c477d53d2d6eab62954695faf6ea9bd8cbef6413 100644
--- a/Device/Histo/SimulationResult.cpp
+++ b/Device/Histo/SimulationResult.cpp
@@ -24,7 +24,9 @@ SimulationResult::SimulationResult(const Datafield& data, const ICoordSystem* co
     : m_data(data.clone())
     , m_coordsys(coords)
 {
-    checkRank();
+    ASSERT(m_data);
+    ASSERT(m_coordsys);
+    ASSERT(m_data->rank() == m_coordsys->rank());
 }
 
 SimulationResult::~SimulationResult() = default;
@@ -55,7 +57,7 @@ const std::vector<double>& SimulationResult::flatVector() const
     return m_data->flatVector();
 }
 
-Datafield* SimulationResult::datafield() const
+Datafield* SimulationResult::converted_field() const
 {
     return new Datafield(m_coordsys->convertedAxes(Coords::UNDEFINED), m_data->flatVector());
 }
@@ -101,13 +103,6 @@ std::vector<double> SimulationResult::convertedBinCenters(Coords units) const
 std::vector<double> SimulationResult::convertedBinCenters(size_t i_axis, Coords units) const
 {
     ASSERT(i_axis < m_coordsys->rank());
-    auto* axis = m_coordsys->createConvertedAxis(i_axis, units); // TODO memory leak
+    auto* axis = m_coordsys->convertedAxis(i_axis, units); // TODO memory leak
     return axis->binCenters();
 }
-
-void SimulationResult::checkRank() const
-{
-    ASSERT(m_data);
-    ASSERT(m_coordsys);
-    ASSERT(m_data->rank() == m_coordsys->rank());
-}
diff --git a/Device/Histo/SimulationResult.h b/Device/Histo/SimulationResult.h
index 1636eed0f390536d38041afca88ee2d1b45520f9..b96786aff4e92c0875aa7c0236a11e19171deede 100644
--- a/Device/Histo/SimulationResult.h
+++ b/Device/Histo/SimulationResult.h
@@ -38,7 +38,9 @@ public:
     SimulationResult& operator=(SimulationResult&& other) noexcept;
 
     const std::vector<double>& flatVector() const;
-    Datafield* datafield() const;
+
+    Datafield* converted_field() const;
+    const Datafield& data_field() const { return *m_data; }
 
     std::pair<double, double> axisMinMax(size_t i, Coords units = Coords::UNDEFINED) const;
 
@@ -46,8 +48,6 @@ public:
 
     const double& operator[](size_t i) const;
 
-    const Datafield& data_field() const { return *m_data; } // TODO disambiguate from datafield()
-
     size_t rank() const;
     size_t size() const;
     bool empty() const { return size() == 0; }
@@ -79,8 +79,6 @@ public:
     double& operator[](size_t i);
 
 private:
-    void checkRank() const;
-
     std::unique_ptr<Datafield> m_data;
     std::unique_ptr<const ICoordSystem> m_coordsys;
 
diff --git a/Examples/fit/scatter2d/fit_along_slices.py b/Examples/fit/scatter2d/fit_along_slices.py
index 7fbc6b80ae1b242ea4f9b3261d8488cb083f5ef7..e51276756af93538ecea123845e41998df5c8639 100755
--- a/Examples/fit/scatter2d/fit_along_slices.py
+++ b/Examples/fit/scatter2d/fit_along_slices.py
@@ -121,8 +121,8 @@ class PlotObserver:
         """
         self.fig.clf()
 
-        real_data = fit_objective.experimentalData().datafield()
-        simul_data = fit_objective.simulationResult().datafield()
+        real_data = fit_objective.experimentalData().converted_field()
+        simul_data = fit_objective.simulationResult().converted_field()
 
         # plot real data
         plt.subplot(2, 2, 1)
diff --git a/Examples/scatter2d/FindPeaks.py b/Examples/scatter2d/FindPeaks.py
index e2ec553f7eca553765e88fc79083a172b6be35cd..a7567cb1636c5c35dcf8e250c46ea1ed743b18fc 100755
--- a/Examples/scatter2d/FindPeaks.py
+++ b/Examples/scatter2d/FindPeaks.py
@@ -68,7 +68,7 @@ if __name__ == '__main__':
         simulation.setTerminalProgressMonitor()
     result = simulation.simulate()
 
-    field = result.datafield()
+    field = result.converted_field()
     bp.plot_histogram(field, with_cb=False)
 
     peaks = ba.FindPeaks(field, 2, "nomarkov", 0.001)
diff --git a/Examples/scatter2d/GratingMC.py b/Examples/scatter2d/GratingMC.py
index 79bb97d79d6cb33b6270931e7cff12be385607af..670bb7f24be15d93226d5c07f6db2abebc8e8869 100755
--- a/Examples/scatter2d/GratingMC.py
+++ b/Examples/scatter2d/GratingMC.py
@@ -75,7 +75,7 @@ if __name__ == '__main__':
     result = simulation.simulate()
     if bp.datfile:
         ba.IOFactory.writeSimulationResult(result, bp.datfile + ".int.gz")
-    field = result.datafield()
+    field = result.converted_field()
     bp.plot_histogram(field)
 
     peaks = ba.FindPeaks(field, 2, "nomarkov", 0.001)
diff --git a/Examples/varia/AccessingSimulationResults.py b/Examples/varia/AccessingSimulationResults.py
index b9384771646d4b65dc6e34330c2b59782a42222a..420f227c3b03b8b8a694aae9c4c4a1d584a78061 100755
--- a/Examples/varia/AccessingSimulationResults.py
+++ b/Examples/varia/AccessingSimulationResults.py
@@ -125,7 +125,7 @@ if __name__ == '__main__':
         # Besides compression .gz, we support .bz2, and uncompressed.
 
     print("Get datafield")
-    field = result.datafield()
+    field = result.converted_field()
     print("Plot")
     plot(field)
     bp.show_or_export()
diff --git a/GUI/Model/Data/DataItem.cpp b/GUI/Model/Data/DataItem.cpp
index 07a7eb2e3360bb1ea254b506ceb22fe70041590a..526e1a6440daa8c4ad73b8e56f421cdda9600f96 100644
--- a/GUI/Model/Data/DataItem.cpp
+++ b/GUI/Model/Data/DataItem.cpp
@@ -121,25 +121,20 @@ void DataItem::saveDatafield(const QString& projectDir) const
     if (!m_datafield || !QFile::exists(projectDir))
         return;
 
-    const auto file = dataFullPath(projectDir);
+    const auto path = dataFullPath(projectDir);
 
-    if (QFile::exists(file) && !wasModifiedSinceLastSave())
+    if (QFile::exists(path) && !wasModifiedSinceLastSave())
         return;
 
-    std::unique_lock<std::mutex> lock(m_update_data_mutex);
-    auto* clone = datafield()->clone();
+    std::unique_lock<std::mutex> lock(m_update_data_mutex); // TODO why lock??
+    std::unique_ptr<const Datafield> field(c_field()->clone());
     lock.unlock();
 
-    auto saveLambda = [clone, file] {
-        std::unique_ptr<Datafield> field(clone); // for memory management
-        IOFactory::writeDatafield(*field, file.toStdString());
-    };
-
     if (m_saveInBackground) {
         std::string errorMessage;
-        auto* saveThread = new std::thread([&errorMessage, saveLambda]() {
+        auto* saveThread = new std::thread([&errorMessage, &field, path]() {
             try {
-                saveLambda();
+                IOFactory::writeDatafield(*field, path.toStdString());
             } catch (const std::exception& ex) {
                 errorMessage = ex.what();
             }
@@ -149,7 +144,7 @@ void DataItem::saveDatafield(const QString& projectDir) const
         if (!errorMessage.empty())
             throw std::runtime_error(errorMessage);
     } else
-        saveLambda();
+        IOFactory::writeDatafield(*field, path.toStdString());
 
     m_last_saved = QDateTime::currentDateTime();
 }
diff --git a/GUI/Model/Data/DataItem.h b/GUI/Model/Data/DataItem.h
index 0c7d3c13887713cc9cb84c22b42d71d72bce0674..41ee9af0828a918c17615a3f95e6811f92eece00 100644
--- a/GUI/Model/Data/DataItem.h
+++ b/GUI/Model/Data/DataItem.h
@@ -43,8 +43,8 @@ public:
     const QString TYPE{"uninitialized"};
 
     // Returns datafield, owned by this class
-    Datafield* datafield() { return m_datafield.get(); }
-    const Datafield* datafield() const { return m_datafield.get(); }
+    Datafield* p_field() { return m_datafield.get(); }
+    const Datafield* c_field() const { return m_datafield.get(); }
 
     //! The given pointer becomes owned by this class!!
     virtual void setDatafield(Datafield* data);
diff --git a/GUI/Model/Data/DataItemUtil.cpp b/GUI/Model/Data/DataItemUtil.cpp
index 739f6aa2b7eac44910199f97f7a41a512e0dec7e..661e65d152e0212906f382d278a2402d3d0d5a91 100644
--- a/GUI/Model/Data/DataItemUtil.cpp
+++ b/GUI/Model/Data/DataItemUtil.cpp
@@ -53,7 +53,7 @@ ComboProperty availableUnits(const ICoordSystem& converter)
 void GUI::Model::DataItemUtil::updateDataAxes(DataItem* dataItem, const ICoordSystem& converter)
 {
     ASSERT(dataItem);
-    Datafield* oldData = dataItem->datafield();
+    const Datafield* oldData = dataItem->c_field();
     if (!oldData)
         return;
 
@@ -84,7 +84,7 @@ void GUI::Model::DataItemUtil::createDefaultDetectorMap(DataItem* dataItem,
 
 void GUI::Model::DataItemUtil::setResults(DataItem* dataItem, const SimulationResult& result)
 {
-    if (dataItem->datafield() == nullptr) {
+    if (dataItem->c_field() == nullptr) {
         const auto& converter = result.converter();
         GUI::Model::DataItemUtil::setDataItemCoords(dataItem, converter);
         updateAxesTitle(dataItem, converter, converter.defaultUnits());
diff --git a/GUI/Model/Data/IntensityDataItem.cpp b/GUI/Model/Data/IntensityDataItem.cpp
index 3848bce213329aa20dbf49963ba830029710e29b..e2189d1e6b5d0cee5f00e83da266b80dd98c16e4 100644
--- a/GUI/Model/Data/IntensityDataItem.cpp
+++ b/GUI/Model/Data/IntensityDataItem.cpp
@@ -14,6 +14,7 @@
 
 #include "GUI/Model/Data/IntensityDataItem.h"
 #include "Base/Axis/IAxis.h"
+#include "Base/Util/Assert.h"
 #include "Device/Coord/ICoordSystem.h"
 #include "Device/Data/Datafield.h"
 #include "GUI/Model/Axis/AmplitudeAxisItem.h"
@@ -76,8 +77,7 @@ IntensityDataItem::~IntensityDataItem() = default;
 void IntensityDataItem::setDatafield(Datafield* data)
 {
     if (data != nullptr) {
-        if (data->rank() != 2)
-            throw Error("Error in IntensityDataItem::setDatafield: cannot handle non-2D data");
+        ASSERT(data->rank() == 2);
         DataItem::setDatafield(data);
         updateAxesZoomLevel();
         updateAxesLabels();
@@ -286,7 +286,7 @@ void IntensityDataItem::computeDataRange()
 //! Init zmin, zmax to match the intensity values range.
 QPair<double, double> IntensityDataItem::dataRange() const
 {
-    const Datafield* data = datafield();
+    const Datafield* data = c_field();
 
     const auto vec = data->flatVector();
     double min(*std::min_element(vec.cbegin(), vec.cend()));
diff --git a/GUI/Model/Data/MaskUnitsConverter.cpp b/GUI/Model/Data/MaskUnitsConverter.cpp
index fad84bfadb14f08a6eaf5d03281358d4b82dc7a2..5e0c2ce3a2afa90b3c46e34d4267ef861c2ef22e 100644
--- a/GUI/Model/Data/MaskUnitsConverter.cpp
+++ b/GUI/Model/Data/MaskUnitsConverter.cpp
@@ -44,10 +44,10 @@ void MaskUnitsConverter::convertFromNbins(IntensityDataItem* intensityData)
 
 void MaskUnitsConverter::convertIntensityDataItem(IntensityDataItem* intensityData)
 {
-    if (!intensityData || !intensityData->datafield())
+    if (!intensityData || !intensityData->c_field())
         return;
 
-    m_data = intensityData->datafield();
+    m_data = intensityData->c_field();
 
     if (intensityData->maskContainerItem())
         for (auto* maskItem : intensityData->maskContainerItem()->maskItems())
diff --git a/GUI/Model/Data/SpecularDataItem.cpp b/GUI/Model/Data/SpecularDataItem.cpp
index 1572d9401188203a6423fa22d6845df43a84caf4..2b490f74ec91cd844c2b57f1018f6f139e8b5e93 100644
--- a/GUI/Model/Data/SpecularDataItem.cpp
+++ b/GUI/Model/Data/SpecularDataItem.cpp
@@ -71,8 +71,7 @@ SpecularDataItem::SpecularDataItem()
 void SpecularDataItem::setDatafield(Datafield* data)
 {
     if (data != nullptr) {
-        if (data->rank() != 1)
-            throw Error("Error in SpecularDataItem::setDatafield: cannot handle non-1D data");
+        ASSERT(data->rank() == 1);
         DataItem::setDatafield(data);
         updateAxesZoomLevel();
     } else
@@ -310,7 +309,7 @@ QPair<double, double> SpecularDataItem::dataRange() const
 {
     const double default_min = 0.0;
     const double default_max = 1.0;
-    const Datafield* data = datafield();
+    const Datafield* data = c_field();
     if (!data)
         return QPair<double, double>(default_min, default_max);
 
diff --git a/GUI/Model/Device/InstrumentItems.cpp b/GUI/Model/Device/InstrumentItems.cpp
index c67027c7eea15a298d301b6f96d8c3b38beeb67a..7ccd41644d60464fe0b7e3c7850f86d13d663b67 100644
--- a/GUI/Model/Device/InstrumentItems.cpp
+++ b/GUI/Model/Device/InstrumentItems.cpp
@@ -435,7 +435,7 @@ ISimulation* SpecularInstrumentItem::createSimulation(const MultiLayer& sample)
     BasicAxisItem* const axis_item = scanItem()->inclinationAxisItem();
 
     const auto converter = createCoordSystem();
-    std::unique_ptr<IAxis> converted_axis(converter->createConvertedAxis(0, Coords::DEGREES));
+    std::unique_ptr<IAxis> converted_axis(converter->convertedAxis(0, Coords::DEGREES));
 
     std::unique_ptr<IAxis> axis = axis_item->itemToAxis(Units::deg, *converted_axis);
     std::unique_ptr<IBeamScan> scan = createScan(*axis);
diff --git a/GUI/Model/Device/RealItem.cpp b/GUI/Model/Device/RealItem.cpp
index 3bfd74ff905c72deb5b37876bf99b544f9d3e189..abe34125041ff0ef4df97c138142bcfae8badf14 100644
--- a/GUI/Model/Device/RealItem.cpp
+++ b/GUI/Model/Device/RealItem.cpp
@@ -120,7 +120,7 @@ bool RealItem::isSpecularData() const
 
 bool RealItem::hasNativeData() const
 {
-    return (nativeDataItem() != nullptr) && (nativeDataItem()->datafield() != nullptr);
+    return (nativeDataItem() != nullptr) && (nativeDataItem()->c_field() != nullptr);
 }
 
 DataItem* RealItem::nativeDataItem() const
@@ -161,7 +161,7 @@ bool RealItem::holdsDimensionalData() const
 
 const Datafield* RealItem::nativeDatafield() const
 {
-    return hasNativeData() ? nativeDataItem()->datafield() : nullptr;
+    return hasNativeData() ? nativeDataItem()->c_field() : nullptr;
 }
 
 //! takes ownership of data
@@ -293,7 +293,7 @@ void RealItem::rotateData()
     }
 
     // -- now rotate data
-    auto* const input = intensityDataItem()->datafield();
+    std::unique_ptr<const Datafield> input(intensityDataItem()->c_field());
     intensityDataItem()->setDatafield(
         DataUtils::Data::createRearrangedDataSet(*input, 1).release());
     intensityDataItem()->setAxesRangeToData();
@@ -521,10 +521,10 @@ void RealItem::copyTo(RealItem* const realdata_dst) const
     GUI::Util::copyContents(this, realdata_dst);
 
     if (m_dataItem)
-        realdata_dst->dataItem()->setDatafield(dataItem()->datafield()->clone());
+        realdata_dst->dataItem()->setDatafield(dataItem()->c_field()->clone());
 
     if (m_nativeDataItem)
-        realdata_dst->nativeDataItem()->setDatafield(nativeDataItem()->datafield()->clone());
+        realdata_dst->nativeDataItem()->setDatafield(nativeDataItem()->c_field()->clone());
 }
 
 std::vector<int> RealItem::shape() const
@@ -586,7 +586,7 @@ void RealItem::updateToInstrument(const InstrumentItem* instrument)
     // instrument == nullptr => unlinking => going back to native data
     if (isSpecularData()) {
         if (hasNativeData()) {
-            std::unique_ptr<Datafield> native_data(nativeDataItem()->datafield()->clone());
+            std::unique_ptr<Datafield> native_data(nativeDataItem()->c_field()->clone());
             const QString units_label = nativeDataUnits();
             data_item->reset(ImportDataInfo(std::move(native_data), units_label));
         } else {
@@ -596,7 +596,7 @@ void RealItem::updateToInstrument(const InstrumentItem* instrument)
         auto* native_data_item = nativeDataItem();
         auto* data_source = native_data_item ? native_data_item : data_item;
 
-        std::unique_ptr<Datafield> native_data(data_source->datafield()->clone());
+        std::unique_ptr<Datafield> native_data(data_source->c_field()->clone());
         const QString units_label = nativeDataUnits();
         data_item->reset(ImportDataInfo(std::move(native_data), units_label));
     }
diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp
index 3661d734ff6fd0dec760a89a94c9d96e376344da..5698ba554c78434c9859905ce33083591a6152fa 100644
--- a/GUI/Model/Job/JobItem.cpp
+++ b/GUI/Model/Job/JobItem.cpp
@@ -87,8 +87,8 @@ void JobItem::setStatus(JobStatus status)
     m_status = status;
     if (status == JobStatus::Failed) {
         if (DataItem* dataItem = simulatedDataItem()) {
-            if (dataItem->datafield())
-                dataItem->datafield()->setAllTo(0.0);
+            if (Datafield* df = dataItem->p_field())
+                df->setAllTo(0.0);
             emit dataItem->datafieldChanged();
         }
     }
@@ -384,14 +384,14 @@ void JobItem::cropRealData()
     // Adjust real data to the size of region of interest
     IntensityDataItem* intensityItem = realItem()->intensityDataItem();
 
-    std::unique_ptr<Datafield> origData(intensityItem->datafield()->clone());
+    const Datafield* origData = intensityItem->c_field();
 
     const auto converter = iiI->createCoordSystem();
     ASSERT(converter);
     GUI::Model::DataItemUtil::createDefaultDetectorMap(intensityItem, *converter);
 
     iiI->normalDetector()->iterateOverNonMaskedPoints([&](IDetector::const_iterator it) {
-        auto* cropped_data = intensityItem->datafield();
+        Datafield* cropped_data = intensityItem->p_field();
         (*cropped_data)[it.roiIndex()] = (*origData)[it.detectorIndex()];
     });
 
diff --git a/GUI/View/Fit/FitObjectiveBuilder.cpp b/GUI/View/Fit/FitObjectiveBuilder.cpp
index c8676156d6de2b1ca34a48b1f4baa2e47d1d7994..ef315902562e1fea3fc79243ed64621d36cbb725 100644
--- a/GUI/View/Fit/FitObjectiveBuilder.cpp
+++ b/GUI/View/Fit/FitObjectiveBuilder.cpp
@@ -81,9 +81,9 @@ std::unique_ptr<FitObjective> FitObjectiveBuilder::createFitObjective() const
 
     const DataItem* intensity_item = realItem->dataItem();
     ASSERT(intensity_item);
-    ASSERT(intensity_item->datafield());
+    ASSERT(intensity_item->c_field());
 
-    std::unique_ptr<Datafield> data(intensity_item->datafield()->clone());
+    std::unique_ptr<Datafield> data(intensity_item->c_field()->clone());
 
     result->execAddSimulationAndData(builder, *data, nullptr, 1.0);
 
diff --git a/GUI/View/Loaders/AutomaticDataLoader1DResultModel.cpp b/GUI/View/Loaders/AutomaticDataLoader1DResultModel.cpp
index 2f4f656fd64e20dfd133a1973b6ba107329ed430..8d7cfbe0e848eb26713e52bf90b30352a68b80ff 100644
--- a/GUI/View/Loaders/AutomaticDataLoader1DResultModel.cpp
+++ b/GUI/View/Loaders/AutomaticDataLoader1DResultModel.cpp
@@ -30,7 +30,7 @@ bool AutomaticDataLoader1DResultModel::rowHasError(int /*row*/) const
 
 int AutomaticDataLoader1DResultModel::rowCount() const
 {
-    auto* data = m_item->specularDataItem()->datafield();
+    const Datafield* data = m_item->specularDataItem()->c_field();
     if (!data)
         return 0;
 
@@ -64,7 +64,7 @@ QString AutomaticDataLoader1DResultModel::cellText(ColumnType type, int row, int
     if (col < 0 || row < 0 || row >= rowCount() || type != ColumnType::processed)
         return QString();
 
-    auto* data = m_item->specularDataItem()->datafield();
+    const Datafield* data = m_item->specularDataItem()->c_field();
 
     if (col == 0)
         return QString::number(data->frame().projectedCoord(row, 0));
diff --git a/GUI/View/Mask/MaskEditorCanvas.cpp b/GUI/View/Mask/MaskEditorCanvas.cpp
index 57873c6a48c76845dbee8ee15fc2ec916b51733a..151267621971f371effbaaadce9ba1eabb06cf91 100644
--- a/GUI/View/Mask/MaskEditorCanvas.cpp
+++ b/GUI/View/Mask/MaskEditorCanvas.cpp
@@ -94,8 +94,7 @@ void MaskEditorCanvas::onSavePlotRequest()
 {
     ASSERT(gProjectDocument.has_value());
     QString dirname = gProjectDocument.value()->userExportDir();
-    GUI::Plot::savePlot(dirname, m_scene->colorMap()->customPlot(),
-                        m_intensityDataItem->datafield());
+    GUI::Plot::savePlot(dirname, m_scene->colorMap()->customPlot(), m_intensityDataItem->c_field());
 }
 
 void MaskEditorCanvas::onResetViewRequest()
diff --git a/GUI/View/Mask/MaskResultsPresenter.cpp b/GUI/View/Mask/MaskResultsPresenter.cpp
index da92a2c25dab14f0b5f24bbfb3d53cf4e4cf9ef8..a465526706a9ebbeb547d280831211e29cffa0f7 100644
--- a/GUI/View/Mask/MaskResultsPresenter.cpp
+++ b/GUI/View/Mask/MaskResultsPresenter.cpp
@@ -76,7 +76,7 @@ void MaskResultsPresenter::setOriginalMode()
 void MaskResultsPresenter::backup_data()
 {
     m_interpolation_flag_backup = m_intensityDataItem->isInterpolated();
-    m_dataBackup.reset(m_intensityDataItem->datafield()->clone());
+    m_dataBackup.reset(m_intensityDataItem->c_field()->clone());
 }
 
 //! Constructs Datafield which contains original intensity data except masked areas,
@@ -86,7 +86,7 @@ Datafield* MaskResultsPresenter::createMaskPresentation() const
 {
     // Requesting mask information
     std::unique_ptr<IShape2D> roi;
-    Datafield* result = m_intensityDataItem->datafield()->clone();
+    Datafield* result = m_intensityDataItem->c_field()->clone();
     DetectorMask detectorMask(result->axis(0), result->axis(1));
     const double scale = 1.0;
     for (MaskItem* maskItem : m_intensityDataItem->maskContainerItem()->maskItems()) {
diff --git a/GUI/View/Plot2D/IntensityDataCanvas.cpp b/GUI/View/Plot2D/IntensityDataCanvas.cpp
index 61ec4f4cb1add5e89a07ea86d6d1dc807addacc9..0caa3b341f415bb10cf4e8ae8ca8a2ad520c36ed 100644
--- a/GUI/View/Plot2D/IntensityDataCanvas.cpp
+++ b/GUI/View/Plot2D/IntensityDataCanvas.cpp
@@ -106,7 +106,7 @@ void IntensityDataCanvas::onSavePlotAction()
     ASSERT(gProjectDocument.has_value());
     QString dirname = gProjectDocument.value()->userExportDir();
     GUI::Plot::savePlot(dirname, m_colorMapCanvas->customPlot(),
-                        currentIntensityDataItem()->datafield());
+                        currentIntensityDataItem()->c_field());
 }
 
 void IntensityDataCanvas::onMousePress(QMouseEvent* event)
diff --git a/GUI/View/Plot2D/IntensityDataFFTPresenter.cpp b/GUI/View/Plot2D/IntensityDataFFTPresenter.cpp
index bfb65271cbf6d72c2f623b5482af0a08a10b3991..9a82f8d67095a87e02aa03ff5305b204b7652046 100644
--- a/GUI/View/Plot2D/IntensityDataFFTPresenter.cpp
+++ b/GUI/View/Plot2D/IntensityDataFFTPresenter.cpp
@@ -44,7 +44,7 @@ IntensityDataItem* IntensityDataFFTPresenter::fftItem(IntensityDataItem* origIte
     ASSERT(origItem);
     QApplication::setOverrideCursor(Qt::WaitCursor);
 
-    m_fftItem->setDatafield(DataUtils::Data::createFFT(*origItem->datafield()).release());
+    m_fftItem->setDatafield(DataUtils::Data::createFFT(*origItem->c_field()).release());
 
     QApplication::restoreOverrideCursor();
 
diff --git a/GUI/View/Plot2D/IntensityDataWidget.cpp b/GUI/View/Plot2D/IntensityDataWidget.cpp
index 9da0daabfdbe6765d3a4b3dc0e60f1e6da107543..334d80830245dc1f3ff6053647c15c249bac031c 100644
--- a/GUI/View/Plot2D/IntensityDataWidget.cpp
+++ b/GUI/View/Plot2D/IntensityDataWidget.cpp
@@ -77,7 +77,7 @@ void IntensityDataWidget::onContextMenuRequest(const QPoint& point)
 
 void IntensityDataWidget::onFFTAction()
 {
-    if (!currentIntensityDataItem() || !currentIntensityDataItem()->datafield())
+    if (!currentIntensityDataItem() || !currentIntensityDataItem()->c_field())
         return;
 
     if (m_fftPresenter->inFFTMode()) {
diff --git a/GUI/View/PlotComparison/FitComparisonWidget.cpp b/GUI/View/PlotComparison/FitComparisonWidget.cpp
index 5c287ed475292f8f22f5f83a4049eb20582c8cfa..48c3e114927895e056b43c473448a77554a5a03e 100644
--- a/GUI/View/PlotComparison/FitComparisonWidget.cpp
+++ b/GUI/View/PlotComparison/FitComparisonWidget.cpp
@@ -149,11 +149,11 @@ void FitComparisonWidget::connectItems()
 void FitComparisonWidget::updateDiffData()
 {
     ASSERT(simuIntensityDataItem() && diffIntensityDataItem() && realIntensityDataItem());
-    if (!simuIntensityDataItem()->datafield() || !realIntensityDataItem()->datafield())
+    if (!simuIntensityDataItem()->c_field() || !realIntensityDataItem()->c_field())
         return;
 
     diffIntensityDataItem()->setDatafield(DiffUtil::relativeDifferenceField(
-        *simuIntensityDataItem()->datafield(), *realIntensityDataItem()->datafield()));
+        *simuIntensityDataItem()->c_field(), *realIntensityDataItem()->c_field()));
 
     // keep Z axis range up with data range
     diffIntensityDataItem()->computeDataRange();
diff --git a/GUI/View/PlotComparison/FitComparisonWidget1D.cpp b/GUI/View/PlotComparison/FitComparisonWidget1D.cpp
index 546dd0a6730ca7c3706212da948f8c574a1fd8c5..e9de953ecefb33e3c6aff9d8d0cef582ebff9f9e 100644
--- a/GUI/View/PlotComparison/FitComparisonWidget1D.cpp
+++ b/GUI/View/PlotComparison/FitComparisonWidget1D.cpp
@@ -133,11 +133,11 @@ void FitComparisonWidget1D::connectItems()
 void FitComparisonWidget1D::updateDiffData()
 {
     ASSERT(simuSpecularDataItem() && diffSpecularDataItem() && realSpecularDataItem());
-    if (!simuSpecularDataItem()->datafield() || !realSpecularDataItem()->datafield())
+    if (!simuSpecularDataItem()->c_field() || !realSpecularDataItem()->c_field())
         return;
 
     diffSpecularDataItem()->setDatafield(DiffUtil::relativeDifferenceField(
-        *simuSpecularDataItem()->datafield(), *realSpecularDataItem()->datafield()));
+        *simuSpecularDataItem()->c_field(), *realSpecularDataItem()->c_field()));
 
     // keep Y axis range up with data range
     double min = diffSpecularDataItem()->yMin();
diff --git a/GUI/View/PlotSpecular/SpecularDataCanvas.cpp b/GUI/View/PlotSpecular/SpecularDataCanvas.cpp
index b981067c42c9fae657b935249825f6db7b54439a..f378bace3e912a1c3f6a1fde100cf06052679ce0 100644
--- a/GUI/View/PlotSpecular/SpecularDataCanvas.cpp
+++ b/GUI/View/PlotSpecular/SpecularDataCanvas.cpp
@@ -88,8 +88,7 @@ void SpecularDataCanvas::onSavePlotAction()
 {
     ASSERT(gProjectDocument.has_value());
     QString dirname = gProjectDocument.value()->userExportDir();
-    GUI::Plot::savePlot(dirname, m_plot_canvas->customPlot(),
-                        currentSpecularDataItem()->datafield());
+    GUI::Plot::savePlot(dirname, m_plot_canvas->customPlot(), currentSpecularDataItem()->c_field());
 }
 
 void SpecularDataCanvas::onMousePress(QMouseEvent* event)
diff --git a/GUI/View/PlotSpecular/SpecularPlot.cpp b/GUI/View/PlotSpecular/SpecularPlot.cpp
index 990cfbea5e1f3668c29aac931b1e116601683434..a1603d6264c07a3d24069efb92f93687c27cd093 100644
--- a/GUI/View/PlotSpecular/SpecularPlot.cpp
+++ b/GUI/View/PlotSpecular/SpecularPlot.cpp
@@ -148,7 +148,7 @@ void SpecularPlot::initPlot()
             QCPScatterStyle(item->scatter(), item->scatterSize()));
 
         // create error bars
-        Datafield* data = item->datafield();
+        const Datafield* data = item->c_field();
         if (data && data->hasErrorSigmas()) {
             QCPErrorBars* errorBars = new QCPErrorBars(m_custom_plot->xAxis, m_custom_plot->yAxis);
             m_errorbar_map.insert(item, errorBars);
@@ -252,7 +252,7 @@ void SpecularPlot::setDataFromItem(SpecularDataItem* item)
     QCPGraph* graph = m_graph_map.value(item);
     graph->data()->clear();
 
-    auto* data = item->datafield();
+    const Datafield* data = item->c_field();
     if (!data)
         return;
 
diff --git a/GUI/View/PlotUtil/ColorMap.cpp b/GUI/View/PlotUtil/ColorMap.cpp
index 1e7adccdde468469cd7761bc5ed8d8b7393a5852..4b2b196eac61a48118e422f147c9bccdabef3523 100644
--- a/GUI/View/PlotUtil/ColorMap.cpp
+++ b/GUI/View/PlotUtil/ColorMap.cpp
@@ -357,7 +357,7 @@ void ColorMap::setDataFromItem()
 {
     if (!intensityItem())
         return;
-    Datafield* data = intensityItem()->datafield();
+    const Datafield* data = intensityItem()->c_field();
     if (!data) {
         m_colorMap->data()->clear();
         return;
diff --git a/GUI/View/PlotUtil/SavePlotAssistant.cpp b/GUI/View/PlotUtil/SavePlotAssistant.cpp
index 64b4691ccc1f24cbf234a51c624e82d03866ace1..1801dbfbf27861fad986a622afec4f795ab511e7 100644
--- a/GUI/View/PlotUtil/SavePlotAssistant.cpp
+++ b/GUI/View/PlotUtil/SavePlotAssistant.cpp
@@ -72,7 +72,7 @@ bool isPdfFile(const QString& fileName)
     return fileName.endsWith(pdf_extension, Qt::CaseInsensitive);
 }
 
-void saveToFile(const QString& fileName, QCustomPlot* plot, Datafield* output_data)
+void saveToFile(const QString& fileName, QCustomPlot* plot, const Datafield* output_data)
 {
     if (isPngFile(fileName))
         plot->savePng(fileName);
@@ -130,7 +130,7 @@ QString composeFileName(const QString& fileName, const QString& filterName)
 } // namespace
 
 
-void GUI::Plot::savePlot(const QString& dirname, QCustomPlot* plot, Datafield* output_data)
+void GUI::Plot::savePlot(const QString& dirname, QCustomPlot* plot, const Datafield* output_data)
 
 {
     QString selectedFilter("*.png");
diff --git a/GUI/View/PlotUtil/SavePlotAssistant.h b/GUI/View/PlotUtil/SavePlotAssistant.h
index ff25a49023934024a03343cd49e66019ec7031dc..109aa9173eaa7ba33e391290c3cb6a1cb102ba71 100644
--- a/GUI/View/PlotUtil/SavePlotAssistant.h
+++ b/GUI/View/PlotUtil/SavePlotAssistant.h
@@ -22,7 +22,8 @@ class Datafield;
 
 namespace GUI::Plot {
 
-void savePlot(const QString& dirname, QCustomPlot* plot, Datafield* output_data);
+void savePlot(const QString& dirname, QCustomPlot* plot, const Datafield* output_data);
+
 };
 
 #endif // BORNAGAIN_GUI_VIEW_PLOTUTIL_SAVEPLOTASSISTANT_H
diff --git a/GUI/View/Projection/ProjectionsPlot.cpp b/GUI/View/Projection/ProjectionsPlot.cpp
index e6e96b049c4d0d66a6702952f7a07261da88cf1c..d2e1e98aba5eaacb02a14da6b4f05158fc50876e 100644
--- a/GUI/View/Projection/ProjectionsPlot.cpp
+++ b/GUI/View/Projection/ProjectionsPlot.cpp
@@ -261,16 +261,16 @@ void ProjectionsPlot::clearAll()
 
 void ProjectionsPlot::setGraphFromItem(QCPGraph* graph, MaskItem* item)
 {
-    if (!intensityItem() || !intensityItem()->datafield())
+    if (!intensityItem() || !intensityItem()->c_field())
         return;
 
     std::unique_ptr<Datafield> field;
 
     // TODO: merge with very similar code in SaveProjectionsAssistant::projectionsData
     if (const auto* horLine = dynamic_cast<HorizontalLineItem*>(item))
-        field.reset(intensityItem()->datafield()->xProjection(horLine->posY()));
+        field.reset(intensityItem()->c_field()->xProjection(horLine->posY()));
     else if (const auto* verLine = dynamic_cast<VerticalLineItem*>(item))
-        field.reset(intensityItem()->datafield()->yProjection(verLine->posX()));
+        field.reset(intensityItem()->c_field()->yProjection(verLine->posX()));
     else
         ASSERT(false);
 
diff --git a/GUI/View/Projection/SaveProjectionsAssistant.cpp b/GUI/View/Projection/SaveProjectionsAssistant.cpp
index 1bf8996d637c3a1d6ad35eb36d3d2e04161c3e58..727b23745ab2b2302dbf6ec00e18318ab83f5d1d 100644
--- a/GUI/View/Projection/SaveProjectionsAssistant.cpp
+++ b/GUI/View/Projection/SaveProjectionsAssistant.cpp
@@ -82,7 +82,7 @@ void SaveProjectionsAssistant::saveProjections(QWidget* parent, IntensityDataIte
         throw Error("TestGUI::Project::Util::createTestFile -> Error. "
                     "Cannot create file");
 
-    m_field = intensityItem->datafield();
+    m_field = intensityItem->c_field();
 
     QTextStream out(&file);
 
diff --git a/GUI/View/Toplevel/SimulationView.cpp b/GUI/View/Toplevel/SimulationView.cpp
index b4521d346f6bda3217217ab8dabb480a65340ae0..18081698fa71d2430f1b47936a89212ab3474df4 100644
--- a/GUI/View/Toplevel/SimulationView.cpp
+++ b/GUI/View/Toplevel/SimulationView.cpp
@@ -243,7 +243,7 @@ QString SimulationView::validateSimulationSetup(bool validateRealData) const
                "them in Import Tab.");
 
     if (selectedRealItem()
-        && (!selectedRealItem()->dataItem() || !selectedRealItem()->dataItem()->datafield()))
+        && (!selectedRealItem()->dataItem() || !selectedRealItem()->dataItem()->c_field()))
         append("The experimental data does not contain values.");
     return messages;
 }
diff --git a/Sim/Fitting/SimDataPair.cpp b/Sim/Fitting/SimDataPair.cpp
index 37e4e7591e83174386e7a57b0e17c9abfa41de25..696fed55d125d05351340ae86d6d7b8b84b6a24f 100644
--- a/Sim/Fitting/SimDataPair.cpp
+++ b/Sim/Fitting/SimDataPair.cpp
@@ -211,28 +211,28 @@ std::vector<double> SimDataPair::experimental_array() const
 {
     if (m_exp_data.empty())
         throwInitializationException("experimental_array");
-    return m_exp_data.datafield()->flatVector();
+    return m_exp_data.flatVector();
 }
 
 std::vector<double> SimDataPair::simulation_array() const
 {
     if (m_sim_data.empty())
         throwInitializationException("simulation_array");
-    return m_sim_data.datafield()->flatVector();
+    return m_sim_data.flatVector();
 }
 
 std::vector<double> SimDataPair::uncertainties_array() const
 {
     if (m_uncertainties.empty())
         throwInitializationException("uncertainties_array");
-    return m_uncertainties.datafield()->flatVector();
+    return m_uncertainties.flatVector();
 }
 
 std::vector<double> SimDataPair::user_weights_array() const
 {
     if (m_user_weights.empty())
         throwInitializationException("user_weights_array");
-    return m_user_weights.datafield()->flatVector();
+    return m_user_weights.flatVector();
 }
 
 void SimDataPair::validate() const
diff --git a/Tests/Functional/Consistence/ConsistenceTests.cpp b/Tests/Functional/Consistence/ConsistenceTests.cpp
index 48e4d6e14f83b5b92d8a70f80e919b0f433a9129..ab011cbf6d2fa612784873de78e72f38acd9819b 100644
--- a/Tests/Functional/Consistence/ConsistenceTests.cpp
+++ b/Tests/Functional/Consistence/ConsistenceTests.cpp
@@ -56,8 +56,7 @@ TEST(Consistence, PolarizedScalarSpinFlip)
     auto* sample = ExemplarySamples::createPlainMultiLayerBySLD();
     auto simulation = test::makeSimulation::BasicYPolarizedSpecular(*sample, "PM", false);
     const SimulationResult result = simulation->simulate();
-    auto* data = result.datafield();
-    for (auto r : data->flatVector())
+    for (auto r : result.flatVector())
         EXPECT_EQ(r, 0);
 }
 
@@ -66,7 +65,6 @@ TEST(Consistence, PolarizedScalarSpinFlipParticles)
     auto* sample = ExemplarySamples::createCylindersAndPrisms();
     auto simulation = test::makeSimulation::MiniZPolarizedGISAS(*sample, "PM");
     const SimulationResult result = simulation->simulate();
-    auto* data = result.datafield();
-    for (auto r : data->flatVector())
+    for (auto r : result.flatVector())
         EXPECT_EQ(r, 0);
 }
diff --git a/Tests/Functional/Fitting/SimfitTestPlan.cpp b/Tests/Functional/Fitting/SimfitTestPlan.cpp
index 8d46c5b5ae4a2eb178d05073ef0396b9abe7210c..cad5691916c879237085acd9e37150203d764c7f 100644
--- a/Tests/Functional/Fitting/SimfitTestPlan.cpp
+++ b/Tests/Functional/Fitting/SimfitTestPlan.cpp
@@ -79,5 +79,5 @@ std::unique_ptr<Datafield> SimfitTestPlan::fakeData() const
     params.setValues(expectedValues());
     auto simulation = m_sim_builder(params);
     auto result = simulation->simulate();
-    return std::unique_ptr<Datafield>(result.datafield());
+    return std::unique_ptr<Datafield>(result.converted_field());
 }
diff --git a/Tests/Suite/GUI/Check.cpp b/Tests/Suite/GUI/Check.cpp
index d043d9bc97d0e94f41deffaa1f160b4ba18e1adb..e7e00eb48d2858eab71a0dcca0586d94d4fa076c 100644
--- a/Tests/Suite/GUI/Check.cpp
+++ b/Tests/Suite/GUI/Check.cpp
@@ -56,9 +56,9 @@ bool checkSimulation(const std::string& name, ISimulation& sim, const double lim
 
     std::unique_ptr<ISimulation> sim2(indirectSimulation(sim));
 
-    const std::unique_ptr<Datafield> data2(sim2->simulate().datafield());
+    const std::unique_ptr<Datafield> data2(sim2->simulate().converted_field());
 
-    const std::unique_ptr<Datafield> ref_data(sim.simulate().datafield());
+    const std::unique_ptr<Datafield> ref_data(sim.simulate().converted_field());
 
     bool ok = DiffUtil::checkRelativeDifference(data2->flatVector(), ref_data->flatVector(), limit);
 
diff --git a/Tests/Suite/Persist/Check.cpp b/Tests/Suite/Persist/Check.cpp
index 7bda386f180f779ab326789605f267a3e3ed5ba7..7a40ca9d0b236c0e701da55cd85a49235ade3491 100644
--- a/Tests/Suite/Persist/Check.cpp
+++ b/Tests/Suite/Persist/Check.cpp
@@ -28,7 +28,7 @@
 bool checkSimulation(const std::string& name, ISimulation& direct_simulation, const double limit)
 {
     // Run simulation directly.
-    std::unique_ptr<Datafield> result_data(direct_simulation.simulate().datafield());
+    std::unique_ptr<Datafield> result_data(direct_simulation.simulate().converted_field());
 
     std::unique_ptr<Datafield> reference;
 
diff --git a/Tests/Suite/Py/Check.cpp b/Tests/Suite/Py/Check.cpp
index c35c401e60419c16b045cbd24280ab371ed4d6dd..00b70587e0b5a45c136639f6e6c66269ed42ffef 100644
--- a/Tests/Suite/Py/Check.cpp
+++ b/Tests/Suite/Py/Check.cpp
@@ -77,7 +77,7 @@ bool checkSimulation(const std::string& name, ISimulation& direct_simulation, co
 
     const std::vector<double> domain_data = domainData(name, direct_simulation);
     std::cout << "- got domain data" << std::endl;
-    const std::vector<double> ref_data = direct_simulation.simulate().datafield()->flatVector();
+    const std::vector<double> ref_data = direct_simulation.simulate().flatVector();
     std::cout << "- ran simulation" << std::endl;
 
     return DiffUtil::checkRelativeDifference(domain_data, ref_data, limit);
diff --git a/Tests/Unit/Device/DepthprobeConverterTest.cpp b/Tests/Unit/Device/DepthprobeConverterTest.cpp
index 8c00d45a378a787d38cc07f9efb2b28cacda8ba4..e529b6df984f49d8645f915c2582a889e7cb3cce 100644
--- a/Tests/Unit/Device/DepthprobeConverterTest.cpp
+++ b/Tests/Unit/Device/DepthprobeConverterTest.cpp
@@ -63,7 +63,7 @@ void DepthprobeCoordsTest::checkMainFunctionality(const DepthprobeCoords& test_o
 
 void DepthprobeCoordsTest::checkAlphaAxis(Coords units, const DepthprobeCoords& test_object)
 {
-    std::unique_ptr<IAxis> axis(test_object.createConvertedAxis(0, units));
+    std::unique_ptr<IAxis> axis(test_object.convertedAxis(0, units));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->size(), m_nbins);
     EXPECT_EQ(axis->min(), test_object.calculateMin(0, units));
@@ -72,7 +72,7 @@ void DepthprobeCoordsTest::checkAlphaAxis(Coords units, const DepthprobeCoords&
 
 void DepthprobeCoordsTest::checkZAxis(Coords units, const DepthprobeCoords& test_object)
 {
-    std::unique_ptr<IAxis> axis(test_object.createConvertedAxis(1, units));
+    std::unique_ptr<IAxis> axis(test_object.convertedAxis(1, units));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->size(), m_nbins);
 
diff --git a/Tests/Unit/Device/OffspecConverterTest.cpp b/Tests/Unit/Device/OffspecConverterTest.cpp
index c1c62b977ac4c25df9e51a1c79ef3ed5a185fd81..c3d0a15697662595e8fef25fb47eeda1fbe3efbb 100644
--- a/Tests/Unit/Device/OffspecConverterTest.cpp
+++ b/Tests/Unit/Device/OffspecConverterTest.cpp
@@ -66,18 +66,18 @@ TEST_F(OffspecCoordsTest, OffspecCoords)
     EXPECT_FAILED_ASSERT(coords->calculateMin(2, Coords::UNDEFINED));
     EXPECT_FAILED_ASSERT(coords->calculateMax(2, Coords::UNDEFINED));
 
-    std::unique_ptr<IAxis> axis(coords->createConvertedAxis(0, Coords::UNDEFINED));
+    std::unique_ptr<IAxis> axis(coords->convertedAxis(0, Coords::UNDEFINED));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->min(), coords->calculateMin(0, Coords::UNDEFINED));
     EXPECT_EQ(axis->max(), coords->calculateMax(0, Coords::UNDEFINED));
 
-    std::unique_ptr<IAxis> axis2(coords->createConvertedAxis(1, Coords::RADIANS));
+    std::unique_ptr<IAxis> axis2(coords->convertedAxis(1, Coords::RADIANS));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis2.get()));
     EXPECT_EQ(axis2->min(), coords->calculateMin(1, Coords::RADIANS));
     EXPECT_EQ(axis2->max(), coords->calculateMax(1, Coords::RADIANS));
 
-    EXPECT_FAILED_ASSERT(coords->createConvertedAxis(2, Coords::UNDEFINED));
-    EXPECT_FAILED_ASSERT(coords->createConvertedAxis(1, Coords::QSPACE));
+    EXPECT_FAILED_ASSERT(coords->convertedAxis(2, Coords::UNDEFINED));
+    EXPECT_FAILED_ASSERT(coords->convertedAxis(1, Coords::QSPACE));
 }
 
 TEST_F(OffspecCoordsTest, OffspecCoordsClone)
diff --git a/Tests/Unit/Device/RectangularConverterTest.cpp b/Tests/Unit/Device/RectangularConverterTest.cpp
index ca1206b7e91fcaa50fcea8076347ca69d76aef02..52ca40780605310f9f3e9d50f34b65afbf22b41f 100644
--- a/Tests/Unit/Device/RectangularConverterTest.cpp
+++ b/Tests/Unit/Device/RectangularConverterTest.cpp
@@ -88,17 +88,17 @@ TEST_F(RectangularConverterTest, ImageCoords)
     EXPECT_FAILED_ASSERT(converter.calculateMin(2, Coords::UNDEFINED));
     EXPECT_FAILED_ASSERT(converter.calculateMax(2, Coords::UNDEFINED));
 
-    std::unique_ptr<IAxis> axis(converter.createConvertedAxis(0, Coords::UNDEFINED));
+    std::unique_ptr<IAxis> axis(converter.convertedAxis(0, Coords::UNDEFINED));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->min(), converter.calculateMin(0, Coords::UNDEFINED));
     EXPECT_EQ(axis->max(), converter.calculateMax(0, Coords::UNDEFINED));
 
-    std::unique_ptr<IAxis> axis2(converter.createConvertedAxis(1, Coords::QSPACE));
+    std::unique_ptr<IAxis> axis2(converter.convertedAxis(1, Coords::QSPACE));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis2.get()));
     EXPECT_EQ(axis2->min(), converter.calculateMin(1, Coords::QSPACE));
     EXPECT_EQ(axis2->max(), converter.calculateMax(1, Coords::QSPACE));
 
-    EXPECT_FAILED_ASSERT(converter.createConvertedAxis(2, Coords::UNDEFINED));
+    EXPECT_FAILED_ASSERT(converter.convertedAxis(2, Coords::UNDEFINED));
 }
 
 TEST_F(RectangularConverterTest, ImageCoordsClone)
diff --git a/Tests/Unit/Device/SphericalConverterTest.cpp b/Tests/Unit/Device/SphericalConverterTest.cpp
index 3562f8e164413791006aaa68b543b33c91c002e1..8d95bd6c268a9ce0aa0defc6e81593c302547a1f 100644
--- a/Tests/Unit/Device/SphericalConverterTest.cpp
+++ b/Tests/Unit/Device/SphericalConverterTest.cpp
@@ -63,17 +63,17 @@ TEST_F(SphericalConverterTest, SphericalCoords)
     EXPECT_FAILED_ASSERT(converter.calculateMin(2, Coords::UNDEFINED));
     EXPECT_FAILED_ASSERT(converter.calculateMax(2, Coords::UNDEFINED));
 
-    std::unique_ptr<IAxis> axis(converter.createConvertedAxis(0, Coords::UNDEFINED));
+    std::unique_ptr<IAxis> axis(converter.convertedAxis(0, Coords::UNDEFINED));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->min(), converter.calculateMin(0, Coords::UNDEFINED));
     EXPECT_EQ(axis->max(), converter.calculateMax(0, Coords::UNDEFINED));
 
-    std::unique_ptr<IAxis> axis2(converter.createConvertedAxis(1, Coords::QSPACE));
+    std::unique_ptr<IAxis> axis2(converter.convertedAxis(1, Coords::QSPACE));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis2.get()));
     EXPECT_EQ(axis2->min(), converter.calculateMin(1, Coords::QSPACE));
     EXPECT_EQ(axis2->max(), converter.calculateMax(1, Coords::QSPACE));
 
-    EXPECT_FAILED_ASSERT(converter.createConvertedAxis(2, Coords::UNDEFINED));
+    EXPECT_FAILED_ASSERT(converter.convertedAxis(2, Coords::UNDEFINED));
 }
 
 TEST_F(SphericalConverterTest, SphericalCoordsClone)
diff --git a/Tests/Unit/GUI/TestJobModel.cpp b/Tests/Unit/GUI/TestJobModel.cpp
index 4ef1d4868c9ff51a5347d336c90955b6f363a993..11b9194b55fc09de3889ee79f6e4a2416d0c1f71 100644
--- a/Tests/Unit/GUI/TestJobModel.cpp
+++ b/Tests/Unit/GUI/TestJobModel.cpp
@@ -90,8 +90,8 @@ TEST(TestJobModel, saveNonXMLData)
     // read data from disk, check it is the same
     std::unique_ptr<Datafield> dataOnDisk1(IOFactory::readDatafield(fname1.toStdString()));
     std::unique_ptr<Datafield> dataOnDisk2(IOFactory::readDatafield(fname2.toStdString()));
-    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk1, *jobItem->simulatedDataItem()->datafield()));
-    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk2, *jobItem->realItem()->dataItem()->datafield()));
+    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk1, *jobItem->simulatedDataItem()->c_field()));
+    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk2, *jobItem->realItem()->dataItem()->c_field()));
 
     // modify data and save the project.
     jobItem->simulatedDataItem()->setDatafield(UTest::GUI::createData(value3).release());
@@ -99,13 +99,12 @@ TEST(TestJobModel, saveNonXMLData)
     QTest::qSleep(10);
 
     // ensure that the simulated data has been changed
-    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk1, *jobItem->simulatedDataItem()->datafield())
-                == false);
-    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk2, *jobItem->realItem()->dataItem()->datafield()));
+    EXPECT_FALSE(UTest::GUI::isTheSame(*dataOnDisk1, *jobItem->simulatedDataItem()->c_field()));
+    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk2, *jobItem->realItem()->dataItem()->c_field()));
 
     // check that data on disk has changed
     dataOnDisk1.reset(IOFactory::readDatafield(fname1.toStdString()));
-    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk1, *jobItem->simulatedDataItem()->datafield()));
+    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk1, *jobItem->simulatedDataItem()->c_field()));
 
     // rename job and check that file on disk changed the name
     jobItem->setJobName("new_job");
diff --git a/Tests/Unit/GUI/TestRealModel.cpp b/Tests/Unit/GUI/TestRealModel.cpp
index 335bcbcf35d66761a94fbd08c15a25adc88deb65..728d730f39a145da541c3ea9e211ebcb7e8f6c29 100644
--- a/Tests/Unit/GUI/TestRealModel.cpp
+++ b/Tests/Unit/GUI/TestRealModel.cpp
@@ -72,26 +72,26 @@ TEST(TestRealModel, removeNativeData)
     item->initNativeData();
     EXPECT_NE(item->nativeDataItem(), nullptr);
     EXPECT_FALSE(item->hasNativeData());
-    EXPECT_EQ(item->nativeDataItem()->datafield(), nullptr);
+    EXPECT_EQ(item->nativeDataItem()->c_field(), nullptr);
 
     // call remove while no output data set yet
     item->removeNativeData();
     EXPECT_NE(item->nativeDataItem(), nullptr);
     EXPECT_FALSE(item->hasNativeData());
-    EXPECT_EQ(item->nativeDataItem()->datafield(), nullptr);
+    EXPECT_EQ(item->nativeDataItem()->c_field(), nullptr);
 
     // set datafield
     auto* oData = new Datafield{{new DiscreteAxis("qVector", std::vector<double>({1, 2}))}};
     oData->setVector(std::vector<double>({3, 4}));
     item->nativeDataItem()->setDatafield(oData); // takes ownership of odata
     EXPECT_TRUE(item->hasNativeData());
-    EXPECT_NE(item->nativeDataItem()->datafield(), nullptr);
+    EXPECT_NE(item->nativeDataItem()->c_field(), nullptr);
 
     // call remove with existing output data
     item->removeNativeData();
     EXPECT_NE(item->nativeDataItem(), nullptr);
     EXPECT_FALSE(item->hasNativeData());
-    EXPECT_EQ(item->nativeDataItem()->datafield(), nullptr);
+    EXPECT_EQ(item->nativeDataItem()->c_field(), nullptr);
 }
 
 TEST(TestRealModel, saveNonXMLData)
@@ -128,20 +128,20 @@ TEST(TestRealModel, saveNonXMLData)
     // read data from disk, checking it is the same
     std::unique_ptr<Datafield> dataOnDisk1(IOFactory::readDatafield(fname1.toStdString()));
     std::unique_ptr<Datafield> dataOnDisk2(IOFactory::readDatafield(fname2.toStdString()));
-    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk1, *item1->dataItem()->datafield()));
-    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk2, *item2->dataItem()->datafield()));
+    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk1, *item1->dataItem()->c_field()));
+    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk2, *item2->dataItem()->c_field()));
 
     // modify data and save the project
     item2->setDatafield(UTest::GUI::createData(value3).release());
     model.writeDataFiles(dir);
     QTest::qSleep(10);
 
-    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk1, *item1->dataItem()->datafield()));
-    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk2, *item2->dataItem()->datafield()) == false);
+    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk1, *item1->dataItem()->c_field()));
+    EXPECT_FALSE(UTest::GUI::isTheSame(*dataOnDisk2, *item2->dataItem()->c_field()));
 
     // check that data on disk has changed
     dataOnDisk2.reset(IOFactory::readDatafield(fname2.toStdString()));
-    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk2, *item2->dataItem()->datafield()));
+    EXPECT_TRUE(UTest::GUI::isTheSame(*dataOnDisk2, *item2->dataItem()->c_field()));
 
     // rename RealData and check that file on disk changed the name
     item2->setRealItemName("data2new");
@@ -151,7 +151,7 @@ TEST(TestRealModel, saveNonXMLData)
 
     QString fname2new = "./" + dir + "/realdata_data2new_0.int.gz";
     EXPECT_TRUE(QFile::exists(fname2new));
-    EXPECT_TRUE(UTest::GUI::isTheSame(fname2new, *item2->dataItem()->datafield()));
+    EXPECT_TRUE(UTest::GUI::isTheSame(fname2new, *item2->dataItem()->c_field()));
 
     // check that file with old name was removed
     EXPECT_FALSE(QFile::exists(fname2));
diff --git a/Tests/Unit/Sim/CoordSystem1DTest.cpp b/Tests/Unit/Sim/CoordSystem1DTest.cpp
index f65231ce14a323ae8abed3066894888072cab52f..a981572c83b4684b2eeab7e0a2d4a123d4aa57bb 100644
--- a/Tests/Unit/Sim/CoordSystem1DTest.cpp
+++ b/Tests/Unit/Sim/CoordSystem1DTest.cpp
@@ -49,26 +49,26 @@ void CoordSystem1DTest::checkConventionalConverter(const CoordSystem1D& test_obj
                 getQ(expected_max) * 1e-10);
 
     // DEFAULT
-    std::unique_ptr<IAxis> axis_default(test_object.createConvertedAxis(0, Coords::UNDEFINED));
+    std::unique_ptr<IAxis> axis_default(test_object.convertedAxis(0, Coords::UNDEFINED));
     const IAxis* tmp = axis_default.get();
     EXPECT_TRUE(dynamic_cast<const DiscreteAxis*>(tmp));
     EXPECT_EQ(axis_default->min(), test_object.calculateMin(0, Coords::UNDEFINED));
     EXPECT_EQ(axis_default->max(), test_object.calculateMax(0, Coords::UNDEFINED));
 
     // QSPACE
-    std::unique_ptr<const IAxis> axis_qspace(test_object.createConvertedAxis(0, Coords::QSPACE));
+    std::unique_ptr<const IAxis> axis_qspace(test_object.convertedAxis(0, Coords::QSPACE));
     EXPECT_TRUE(dynamic_cast<const DiscreteAxis*>(axis_qspace.get()));
     EXPECT_EQ(axis_qspace->min(), test_object.calculateMin(0, Coords::QSPACE));
     EXPECT_EQ(axis_qspace->max(), test_object.calculateMax(0, Coords::QSPACE));
 
     // NBINS
-    std::unique_ptr<IAxis> axis_nbins(test_object.createConvertedAxis(0, Coords::NBINS));
+    std::unique_ptr<IAxis> axis_nbins(test_object.convertedAxis(0, Coords::NBINS));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis_nbins.get()));
     EXPECT_EQ(axis_nbins->min(), test_object.calculateMin(0, Coords::NBINS));
     EXPECT_EQ(axis_nbins->max(), test_object.calculateMax(0, Coords::NBINS));
 
     // RQ4
-    std::unique_ptr<IAxis> axis_rq4(test_object.createConvertedAxis(0, Coords::RQ4));
+    std::unique_ptr<IAxis> axis_rq4(test_object.convertedAxis(0, Coords::RQ4));
     EXPECT_TRUE(dynamic_cast<const DiscreteAxis*>(axis_rq4.get()));
     EXPECT_EQ(axis_rq4->min(), test_object.calculateMin(0, Coords::RQ4));
     EXPECT_EQ(axis_rq4->max(), test_object.calculateMax(0, Coords::RQ4));
@@ -91,26 +91,26 @@ void CoordSystem1DTest::checkQSpecConverter(const CoordSystem1D& test_object)
     EXPECT_EQ(test_object.calculateMax(0, Coords::RQ4), expected_max);
 
     // DEFAULT
-    std::unique_ptr<IAxis> axis_default(test_object.createConvertedAxis(0, Coords::UNDEFINED));
+    std::unique_ptr<IAxis> axis_default(test_object.convertedAxis(0, Coords::UNDEFINED));
     EXPECT_TRUE(dynamic_cast<const DiscreteAxis*>(axis_default.get()));
     EXPECT_EQ(axis_default->min(), test_object.calculateMin(0, Coords::UNDEFINED));
     EXPECT_EQ(axis_default->max(), test_object.calculateMax(0, Coords::UNDEFINED));
 
     // QSPACE
-    std::unique_ptr<IAxis> axis_qspace(test_object.createConvertedAxis(0, Coords::QSPACE));
+    std::unique_ptr<IAxis> axis_qspace(test_object.convertedAxis(0, Coords::QSPACE));
     EXPECT_TRUE(dynamic_cast<const DiscreteAxis*>(axis_qspace.get()));
     EXPECT_EQ(axis_qspace->min(), test_object.calculateMin(0, Coords::QSPACE));
     EXPECT_EQ(axis_qspace->max(), test_object.calculateMax(0, Coords::QSPACE));
     EXPECT_EQ(*axis_default, *axis_qspace);
 
     // NBINS
-    std::unique_ptr<IAxis> axis_nbins(test_object.createConvertedAxis(0, Coords::NBINS));
+    std::unique_ptr<IAxis> axis_nbins(test_object.convertedAxis(0, Coords::NBINS));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis_nbins.get()));
     EXPECT_EQ(axis_nbins->min(), test_object.calculateMin(0, Coords::NBINS));
     EXPECT_EQ(axis_nbins->max(), test_object.calculateMax(0, Coords::NBINS));
 
     // RQ4
-    std::unique_ptr<IAxis> axis_rq4(test_object.createConvertedAxis(0, Coords::RQ4));
+    std::unique_ptr<IAxis> axis_rq4(test_object.convertedAxis(0, Coords::RQ4));
     EXPECT_TRUE(dynamic_cast<const DiscreteAxis*>(axis_rq4.get()));
     EXPECT_EQ(axis_rq4->min(), test_object.calculateMin(0, Coords::RQ4));
     EXPECT_EQ(axis_rq4->max(), test_object.calculateMax(0, Coords::RQ4));
@@ -133,8 +133,8 @@ TEST_F(CoordSystem1DTest, Exceptions)
     EXPECT_FAILED_ASSERT(converter.calculateMax(0, Coords::MM));
     EXPECT_FAILED_ASSERT(converter.calculateMax(1, Coords::RADIANS));
 
-    EXPECT_FAILED_ASSERT(converter.createConvertedAxis(0, Coords::MM));
-    EXPECT_FAILED_ASSERT(converter.createConvertedAxis(1, Coords::UNDEFINED));
+    EXPECT_FAILED_ASSERT(converter.convertedAxis(0, Coords::MM));
+    EXPECT_FAILED_ASSERT(converter.convertedAxis(1, Coords::UNDEFINED));
 
     FixedBinAxis axis("Angles", 100, 0.0, M_TWOPI);
     EXPECT_FAILED_ASSERT(AngularReflectometryCoords converter2(m_wavelength, axis));
@@ -147,12 +147,12 @@ TEST_F(CoordSystem1DTest, Exceptions)
     EXPECT_FAILED_ASSERT(converter2.calculateMax(0, Coords::MM));
     EXPECT_FAILED_ASSERT(converter2.calculateMax(0, Coords::RADIANS));
     EXPECT_FAILED_ASSERT(converter2.calculateMax(0, Coords::DEGREES));
-    EXPECT_FAILED_ASSERT(converter2.createConvertedAxis(0, Coords::MM));
+    EXPECT_FAILED_ASSERT(converter2.convertedAxis(0, Coords::MM));
 
     // wrong axis index
     EXPECT_FAILED_ASSERT(converter2.calculateMin(1, Coords::QSPACE));
     EXPECT_FAILED_ASSERT(converter2.calculateMax(1, Coords::RQ4));
-    EXPECT_FAILED_ASSERT(converter2.createConvertedAxis(1, Coords::UNDEFINED));
+    EXPECT_FAILED_ASSERT(converter2.convertedAxis(1, Coords::UNDEFINED));
 }
 
 TEST_F(CoordSystem1DTest, Clone)
@@ -172,7 +172,7 @@ TEST_F(CoordSystem1DTest, NonDefaultUnitsInInput)
 
     {
         AngularReflectometryCoords converter(m_wavelength, axis, Coords::DEGREES);
-        auto out = converter.createConvertedAxis(0, Coords::DEGREES);
+        auto out = converter.convertedAxis(0, Coords::DEGREES);
         EXPECT_TRUE(axis.size() == out->size());
         EXPECT_DOUBLE_EQ(axis.binCenter(0), out->binCenter(0));
         EXPECT_DOUBLE_EQ(axis.binCenter(1), out->binCenter(1));
@@ -184,7 +184,7 @@ TEST_F(CoordSystem1DTest, NonDefaultUnitsInInput)
     DiscreteAxis q_axis("q", values);
     {
         AngularReflectometryCoords converter(m_wavelength, q_axis, Coords::QSPACE);
-        auto out = converter.createConvertedAxis(0, Coords::RADIANS);
+        auto out = converter.convertedAxis(0, Coords::RADIANS);
         EXPECT_TRUE(axis.size() == out->size());
         EXPECT_DOUBLE_EQ(axis.binCenter(0), out->binCenter(0));
         EXPECT_DOUBLE_EQ(axis.binCenter(1), out->binCenter(1));
diff --git a/Tests/Unit/Sim/SpecularSimulationTest.cpp b/Tests/Unit/Sim/SpecularSimulationTest.cpp
index e6ea386a3d85d3f6b3183e8cd53a5d05a70b30b2..4471088d8396840b9c27f244da4c805268e47707 100644
--- a/Tests/Unit/Sim/SpecularSimulationTest.cpp
+++ b/Tests/Unit/Sim/SpecularSimulationTest.cpp
@@ -55,7 +55,7 @@ TEST_F(SpecularSimulationTest, ConstructSimulation)
     EXPECT_EQ(3u, sim->sample()->numberOfLayers());
 
     const SimulationResult sim_result = sim->simulate();
-    auto data = sim_result.datafield();
+    const Datafield* data = sim_result.converted_field();
 
     EXPECT_EQ(data->size(), 10u);
     EXPECT_EQ(data->rank(), 1u);
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index 8a0671632dbdbc0f889d339568d0b92d6bea4d69..053719cb070bf219ad8ce95663cd17348037781a 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -3090,9 +3090,13 @@ class SimulationResult(object):
         r"""flatVector(SimulationResult self) -> vdouble1d_t"""
         return _libBornAgainDevice.SimulationResult_flatVector(self)
 
-    def datafield(self):
-        r"""datafield(SimulationResult self) -> Datafield"""
-        return _libBornAgainDevice.SimulationResult_datafield(self)
+    def converted_field(self):
+        r"""converted_field(SimulationResult self) -> Datafield"""
+        return _libBornAgainDevice.SimulationResult_converted_field(self)
+
+    def data_field(self):
+        r"""data_field(SimulationResult self) -> Datafield"""
+        return _libBornAgainDevice.SimulationResult_data_field(self)
 
     def axisMinMax(self, *args):
         r"""axisMinMax(SimulationResult self, size_t i, Coords units=UNDEFINED) -> pvacuum_double_t"""
@@ -3102,10 +3106,6 @@ class SimulationResult(object):
         r"""nameOfAxis(SimulationResult self, size_t i, Coords units=UNDEFINED) -> std::string"""
         return _libBornAgainDevice.SimulationResult_nameOfAxis(self, *args)
 
-    def data_field(self):
-        r"""data_field(SimulationResult self) -> Datafield"""
-        return _libBornAgainDevice.SimulationResult_data_field(self)
-
     def rank(self):
         r"""rank(SimulationResult self) -> size_t"""
         return _libBornAgainDevice.SimulationResult_rank(self)
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index 7d8310e43ff3a20a6ff3439903dc885ef4f836b2..a5e51ba9cbe274f9c0c335f7cc73b5f42f0442a8 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -36768,7 +36768,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SimulationResult_datafield(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_SimulationResult_converted_field(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   SimulationResult *arg1 = (SimulationResult *) 0 ;
   void *argp1 = 0 ;
@@ -36780,11 +36780,34 @@ SWIGINTERN PyObject *_wrap_SimulationResult_datafield(PyObject *self, PyObject *
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SimulationResult, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationResult_datafield" "', argument " "1"" of type '" "SimulationResult const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationResult_converted_field" "', argument " "1"" of type '" "SimulationResult const *""'"); 
   }
   arg1 = reinterpret_cast< SimulationResult * >(argp1);
-  result = (Datafield *)((SimulationResult const *)arg1)->datafield();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Datafield, SWIG_POINTER_OWN |  0 );
+  result = (Datafield *)((SimulationResult const *)arg1)->converted_field();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Datafield, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_SimulationResult_data_field(PyObject *self, PyObject *args) {
+  PyObject *resultobj = 0;
+  SimulationResult *arg1 = (SimulationResult *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Datafield *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SimulationResult, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationResult_data_field" "', argument " "1"" of type '" "SimulationResult const *""'"); 
+  }
+  arg1 = reinterpret_cast< SimulationResult * >(argp1);
+  result = (Datafield *) &((SimulationResult const *)arg1)->data_field();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Datafield, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -37031,29 +37054,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_SimulationResult_data_field(PyObject *self, PyObject *args) {
-  PyObject *resultobj = 0;
-  SimulationResult *arg1 = (SimulationResult *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject *swig_obj[1] ;
-  Datafield *result = 0 ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_SimulationResult, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "SimulationResult_data_field" "', argument " "1"" of type '" "SimulationResult const *""'"); 
-  }
-  arg1 = reinterpret_cast< SimulationResult * >(argp1);
-  result = (Datafield *) &((SimulationResult const *)arg1)->data_field();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Datafield, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_SimulationResult_rank(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   SimulationResult *arg1 = (SimulationResult *) 0 ;
@@ -38494,10 +38494,10 @@ static PyMethodDef SwigMethods[] = {
 		"new_SimulationResult(SimulationResult other) -> SimulationResult\n"
 		""},
 	 { "SimulationResult_flatVector", _wrap_SimulationResult_flatVector, METH_O, "SimulationResult_flatVector(SimulationResult self) -> vdouble1d_t"},
-	 { "SimulationResult_datafield", _wrap_SimulationResult_datafield, METH_O, "SimulationResult_datafield(SimulationResult self) -> Datafield"},
+	 { "SimulationResult_converted_field", _wrap_SimulationResult_converted_field, METH_O, "SimulationResult_converted_field(SimulationResult self) -> Datafield"},
+	 { "SimulationResult_data_field", _wrap_SimulationResult_data_field, METH_O, "SimulationResult_data_field(SimulationResult self) -> Datafield"},
 	 { "SimulationResult_axisMinMax", _wrap_SimulationResult_axisMinMax, METH_VARARGS, "SimulationResult_axisMinMax(SimulationResult self, size_t i, Coords units=UNDEFINED) -> pvacuum_double_t"},
 	 { "SimulationResult_nameOfAxis", _wrap_SimulationResult_nameOfAxis, METH_VARARGS, "SimulationResult_nameOfAxis(SimulationResult self, size_t i, Coords units=UNDEFINED) -> std::string"},
-	 { "SimulationResult_data_field", _wrap_SimulationResult_data_field, METH_O, "SimulationResult_data_field(SimulationResult self) -> Datafield"},
 	 { "SimulationResult_rank", _wrap_SimulationResult_rank, METH_O, "SimulationResult_rank(SimulationResult self) -> size_t"},
 	 { "SimulationResult_size", _wrap_SimulationResult_size, METH_O, "SimulationResult_size(SimulationResult self) -> size_t"},
 	 { "SimulationResult_empty", _wrap_SimulationResult_empty, METH_O, "SimulationResult_empty(SimulationResult self) -> bool"},