diff --git a/Base/Axis/Frame.cpp b/Base/Axis/Frame.cpp
index 891e9d749aa47525b0139350be86ec6261327371..f2fa78f48752f6db941be639326ecc1beafd0eb6 100644
--- a/Base/Axis/Frame.cpp
+++ b/Base/Axis/Frame.cpp
@@ -23,6 +23,12 @@ Frame::Frame(std::vector<const Scale*>&& axes)
 {
 }
 
+Frame::Frame(const Scale*&& ax0)
+    : m_axes(std::vector<const Scale*>{std::move(ax0)})
+    , m_size(FrameUtil::product_size(m_axes.reference()))
+{
+}
+
 Frame* Frame::clone() const
 {
     return new Frame(m_axes.cloned_vector());
diff --git a/Base/Axis/Frame.h b/Base/Axis/Frame.h
index d478bd1d5303e5d08d716be10ce55b7192995b0e..0be9095d6dd0ef0787c58817dac1f17ab72b2242 100644
--- a/Base/Axis/Frame.h
+++ b/Base/Axis/Frame.h
@@ -28,6 +28,7 @@ class Frame : public ICloneable {
 public:
     //! Constructor that takes ownership of supplied axes.
     Frame(std::vector<const Scale*>&& axes);
+    Frame(const Scale*&& ax0);
 
     virtual ~Frame();
 
diff --git a/Device/Histo/SimulationResult.cpp b/Device/Histo/SimulationResult.cpp
index 114814eb428587ab4cec11bc3813b41f26d89e09..93c1d0277929ad44870be96ab05f0582742d61df 100644
--- a/Device/Histo/SimulationResult.cpp
+++ b/Device/Histo/SimulationResult.cpp
@@ -13,13 +13,13 @@
 //  ************************************************************************************************
 
 #include "Device/Histo/SimulationResult.h"
+#include "Base/Axis/Frame.h"
 #include "Base/Axis/Scale.h"
 #include "Base/Util/Assert.h"
-#include "Device/Coord/ICoordSystem.h"
 
 SimulationResult::SimulationResult() = default;
 
-SimulationResult::SimulationResult(const Datafield& data, const ICoordSystem* coords)
+SimulationResult::SimulationResult(const Datafield& data, const Frame* coords)
     : Datafield(coords, data.flatVector(), data.errorSigmas())
 {
     ASSERT(coords);
@@ -53,9 +53,9 @@ std::string SimulationResult::name_of_axis(size_t i) const
     return converter().axis(i).axisName();
 }
 
-const ICoordSystem& SimulationResult::converter() const
+const Frame& SimulationResult::converter() const
 {
-    const auto* coordsys = dynamic_cast<const ICoordSystem*>(m_frame.get());
+    const auto* coordsys = dynamic_cast<const Frame*>(m_frame.get());
     ASSERT(coordsys);
     return *coordsys;
 }
diff --git a/Device/Histo/SimulationResult.h b/Device/Histo/SimulationResult.h
index 568c1a4663225f5ceaba29f9842574f61a002a73..d2170680c2f0ad2edb63edaa0ad6d32530c23efb 100644
--- a/Device/Histo/SimulationResult.h
+++ b/Device/Histo/SimulationResult.h
@@ -18,14 +18,14 @@
 #include "Device/Data/Datafield.h"
 #include <string>
 
-class ICoordSystem;
+class Frame;
 
 //! Wrapper around Datafield that also provides unit conversions.
 
 class SimulationResult : public Datafield {
 public:
     SimulationResult(); // required by Swig
-    SimulationResult(const Datafield& data, const ICoordSystem* coords);
+    SimulationResult(const Datafield& data, const Frame* coords);
 
     SimulationResult(const SimulationResult& other);
     SimulationResult(SimulationResult&& other) noexcept;
@@ -56,7 +56,7 @@ public:
 #ifndef SWIG
 
     //! Returns underlying unit converter
-    const ICoordSystem& converter() const;
+    const Frame& converter() const;
 
 private:
     std::string m_title;
diff --git a/GUI/Model/Data/DataItemUtil.cpp b/GUI/Model/Data/DataItemUtil.cpp
index 98a1ef25637e3a30f5c688116360bb5f187bc668..ce1ce5e7434e8a860ed7118c7cb7958ad8ed0184 100644
--- a/GUI/Model/Data/DataItemUtil.cpp
+++ b/GUI/Model/Data/DataItemUtil.cpp
@@ -13,15 +13,14 @@
 //  ************************************************************************************************
 
 #include "GUI/Model/Data/DataItemUtil.h"
+#include "Base/Axis/Frame.h"
 #include "Base/Axis/Scale.h"
 #include "Base/Util/Assert.h"
-#include "Device/Coord/ICoordSystem.h"
 #include "Device/Data/Datafield.h"
 #include "Device/Histo/SimulationResult.h"
 #include "GUI/Model/Data/DataItem.h"
 
-void GUI::Model::DataItemUtil::updateAxesTitle(DataItem* intensityItem,
-                                               const ICoordSystem& converter)
+void GUI::Model::DataItemUtil::updateAxesTitle(DataItem* intensityItem, const Frame& converter)
 {
     intensityItem->setXaxisTitle(QString::fromStdString(converter.axis(0).axisName()));
     if (converter.rank() > 1)
@@ -31,7 +30,7 @@ void GUI::Model::DataItemUtil::updateAxesTitle(DataItem* intensityItem,
 //! Updates axes of Datafield in IntensityData item to correspond with axes units selection.
 //! InstrumentItem is used to get domain's detector map for given units.
 
-void GUI::Model::DataItemUtil::updateDataAxes(DataItem* dataItem, const ICoordSystem& converter)
+void GUI::Model::DataItemUtil::updateDataAxes(DataItem* dataItem, const Frame& converter)
 {
     ASSERT(dataItem);
     const Datafield* oldData = dataItem->c_field();
@@ -46,8 +45,7 @@ void GUI::Model::DataItemUtil::updateDataAxes(DataItem* dataItem, const ICoordSy
     updateAxesTitle(dataItem, converter);
 }
 
-void GUI::Model::DataItemUtil::createDefaultDetectorMap(DataItem* dataItem,
-                                                        const ICoordSystem& converter)
+void GUI::Model::DataItemUtil::createDefaultDetectorMap(DataItem* dataItem, const Frame& converter)
 {
     auto output_data = std::make_unique<Datafield>(converter.clonedAxes());
     dataItem->setDatafield(output_data.release());
diff --git a/GUI/Model/Data/DataItemUtil.h b/GUI/Model/Data/DataItemUtil.h
index 8882ce2dc4d6a578c0ab258dc23f400560c251b8..45f018b360e6df2ea965795887ddb101c3fc2e33 100644
--- a/GUI/Model/Data/DataItemUtil.h
+++ b/GUI/Model/Data/DataItemUtil.h
@@ -19,7 +19,7 @@
 #include "GUI/Model/Data/ComboProperty.h"
 
 class DataItem;
-class ICoordSystem;
+class Frame;
 class SimulationResult;
 
 //! Contains convenience methods to trasfer data from domain simulation to IntensityDataItem.
@@ -28,13 +28,13 @@ class SimulationResult;
 namespace GUI::Model::DataItemUtil {
 
 //! Updates axes' titles
-void updateAxesTitle(DataItem* intensityItem, const ICoordSystem& converter);
+void updateAxesTitle(DataItem* intensityItem, const Frame& converter);
 
 //! Updates axes of Datafield in IntensityData item
-void updateDataAxes(DataItem* dataItem, const ICoordSystem& converter);
+void updateDataAxes(DataItem* dataItem, const Frame& converter);
 
 //! Creates zero-value intensity map with given coordinate system
-void createDefaultDetectorMap(DataItem* dataItem, const ICoordSystem& converter);
+void createDefaultDetectorMap(DataItem* dataItem, const Frame& converter);
 
 //! Sets simulation results into the DataItem
 void setResults(DataItem* dataItem, const SimulationResult& result);
diff --git a/Sim/Fitting/SimDataPair.cpp b/Sim/Fitting/SimDataPair.cpp
index b43bca5e78bb08f3c758c46e4be8dfda6310d73a..2dabee4ead3aa77798541bc7c2cb715a860f8b5d 100644
--- a/Sim/Fitting/SimDataPair.cpp
+++ b/Sim/Fitting/SimDataPair.cpp
@@ -52,7 +52,7 @@ bool haveSameSizes(const IDetector& detector, const Datafield& data)
 
 SimulationResult convertData(const ScatteringSimulation& simulation, const Datafield& data)
 {
-    const ICoordSystem* coordSystem = simulation.simCoordSystem();
+    const Frame* coordSystem = simulation.simCoordSystem();
     auto roi_data = std::make_unique<Datafield>(coordSystem->clonedAxes());
 
     if (roi_data->frame().hasSameSizes(data.frame())) {
@@ -123,7 +123,7 @@ void SimDataPair::execSimulation(const mumufit::Parameters& params)
         m_user_weights =
             std::make_unique<SimulationResult>(convertData(*sim2d, *m_raw_user_weights));
     } else {
-        const ICoordSystem& converter = m_sim_data->converter();
+        const Frame& converter = m_sim_data->converter();
         m_exp_data = std::make_unique<SimulationResult>(*m_raw_data, converter.clone());
         m_user_weights = std::make_unique<SimulationResult>(*m_raw_user_weights, converter.clone());
     }
@@ -132,7 +132,7 @@ void SimDataPair::execSimulation(const mumufit::Parameters& params)
         m_uncertainties =
             std::make_unique<SimulationResult>(convertData(*sim2d, *m_raw_uncertainties));
     else {
-        const ICoordSystem& converter = m_sim_data->converter();
+        const Frame& converter = m_sim_data->converter();
         auto dummy_array = std::make_unique<Datafield>(converter.clonedAxes());
         m_uncertainties = std::make_unique<SimulationResult>(*dummy_array, converter.clone());
     }
diff --git a/Sim/Scan/AlphaScan.cpp b/Sim/Scan/AlphaScan.cpp
index dedac186f017e75413a63d268a49e8ae6aed79c4..a70c5802d8fbf95adb5cc376b51a71de4de3a4aa 100644
--- a/Sim/Scan/AlphaScan.cpp
+++ b/Sim/Scan/AlphaScan.cpp
@@ -145,11 +145,6 @@ size_t AlphaScan::nDistributionSamples() const
     return nResolSamples(m_lambda_distrib.get()) * nResolSamples(m_alpha_distrib.get());
 }
 
-CoordSystem1D* AlphaScan::scanCoordSystem() const
-{
-    return new AngularReflectometryCoords(wavelength(), *coordinateAxis());
-}
-
 void AlphaScan::checkInitialization()
 {
     const std::vector<double> axis_values = m_axis->binCenters();
diff --git a/Sim/Scan/AlphaScan.h b/Sim/Scan/AlphaScan.h
index 4a196483537d9f0af151f7870900802107ff8781..c1e442b191977733fd6f737b1608f481af0c3b25 100644
--- a/Sim/Scan/AlphaScan.h
+++ b/Sim/Scan/AlphaScan.h
@@ -44,8 +44,6 @@ public:
 
     size_t nDistributionSamples() const override;
 
-    CoordSystem1D* scanCoordSystem() const override;
-
     // needed for export
     const IDistribution1D* wavelengthDistribution() const
     {
diff --git a/Sim/Scan/IBeamScan.cpp b/Sim/Scan/IBeamScan.cpp
index 1256cb5c46890571087881121b1f1ee91bac2e3a..d689f5c4aa019228d33736b01657c67b2275d861 100644
--- a/Sim/Scan/IBeamScan.cpp
+++ b/Sim/Scan/IBeamScan.cpp
@@ -13,6 +13,7 @@
 //  ************************************************************************************************
 
 #include "Sim/Scan/IBeamScan.h"
+#include "Base/Axis/Frame.h"
 #include "Base/Axis/Scale.h"
 #include "Base/Spin/SpinMatrix.h"
 #include "Device/Beam/IFootprint.h"
@@ -91,3 +92,8 @@ SpinMatrix IBeamScan::analyzerMatrix() const
 {
     return m_polAnalyzer ? m_polAnalyzer->matrix() : SpinMatrix::One();
 }
+
+Frame* IBeamScan::scanCoordSystem() const
+{
+    return new Frame(coordinateAxis()->clone());
+}
diff --git a/Sim/Scan/IBeamScan.h b/Sim/Scan/IBeamScan.h
index a2d11236d840fa693c550f0fa245cb929c152bef..ed93d787e46f44c6526085470f32f347c6b3667e 100644
--- a/Sim/Scan/IBeamScan.h
+++ b/Sim/Scan/IBeamScan.h
@@ -22,10 +22,10 @@
 #include <memory>
 #include <vector>
 
-class CoordSystem1D;
-class Scale;
+class Frame;
 class IFootprint;
 class PolFilter;
+class Scale;
 class SpecularElement;
 class SpinMatrix;
 
@@ -87,7 +87,7 @@ public:
     //! Returns the number of distribution samples
     virtual size_t nDistributionSamples() const = 0;
 
-    virtual CoordSystem1D* scanCoordSystem() const = 0;
+    Frame* scanCoordSystem() const;
 
     bool polarized() const;
 
diff --git a/Sim/Scan/QzScan.cpp b/Sim/Scan/QzScan.cpp
index ee9d5956b68c47e37a1b3c92874d0d579c4ff985..e024b3d7b45f33542cf3e3ff4bb9b2d1c2b83c37 100644
--- a/Sim/Scan/QzScan.cpp
+++ b/Sim/Scan/QzScan.cpp
@@ -117,11 +117,6 @@ size_t QzScan::nDistributionSamples() const
     return m_qz_distrib ? m_qz_distrib->nSamples() : 1;
 }
 
-CoordSystem1D* QzScan::scanCoordSystem() const
-{
-    return new WavenumberReflectometryCoords(coordinateAxis()->clone());
-}
-
 void QzScan::setRelativeQResolution(const IDistribution1D& distr, double rel_dev)
 {
     m_qz_distrib.reset(distr.clone());
diff --git a/Sim/Scan/QzScan.h b/Sim/Scan/QzScan.h
index 521110f2ff3a306af04e580dbe65858f0d0c6298..40d98387789cbc4d510f6a04dd3469d9a33a8872 100644
--- a/Sim/Scan/QzScan.h
+++ b/Sim/Scan/QzScan.h
@@ -61,8 +61,6 @@ public:
 
     size_t nDistributionSamples() const override;
 
-    CoordSystem1D* scanCoordSystem() const override;
-
     bool resolution_is_relative() const
     {
         return m_relative_resolution;
diff --git a/Sim/Simulation/DepthprobeSimulation.cpp b/Sim/Simulation/DepthprobeSimulation.cpp
index 9618c498402fc36e0fa6a97cf39b33b6e1a2610b..e6264c4a90130e2c3bda280a9e06f0ab97bde7de 100644
--- a/Sim/Simulation/DepthprobeSimulation.cpp
+++ b/Sim/Simulation/DepthprobeSimulation.cpp
@@ -52,7 +52,7 @@ DepthprobeSimulation::DepthprobeSimulation(const IBeamScan& scan, const MultiLay
 
 DepthprobeSimulation::~DepthprobeSimulation() = default;
 
-const ICoordSystem* DepthprobeSimulation::simCoordSystem() const
+const Frame* DepthprobeSimulation::simCoordSystem() const
 {
     std::vector<const Scale*> axes({m_scan->coordinateAxis()->clone(), m_z_axis->clone()});
     return new DepthprobeCoords(std::move(axes), (2 * pi) / m_scan->wavelength());
diff --git a/Sim/Simulation/DepthprobeSimulation.h b/Sim/Simulation/DepthprobeSimulation.h
index aa58a60bb0ea9fd8ad23a14cf08331911b5e798b..3364b610ed5c683831cf723b9698d38fdb05d33c 100644
--- a/Sim/Simulation/DepthprobeSimulation.h
+++ b/Sim/Simulation/DepthprobeSimulation.h
@@ -51,7 +51,7 @@ public:
         return m_scan.get();
     }
 
-    const ICoordSystem* simCoordSystem() const override;
+    const Frame* simCoordSystem() const override;
 
     std::vector<const INode*> nodeChildren() const override;
 
diff --git a/Sim/Simulation/ISimulation.h b/Sim/Simulation/ISimulation.h
index 567f0ccb608f14b613b0563be7d9bf339d3f0b3b..7ec3d2355d6913895111adab7d835041bc185287 100644
--- a/Sim/Simulation/ISimulation.h
+++ b/Sim/Simulation/ISimulation.h
@@ -21,9 +21,9 @@
 #include <heinz/Vectors3D.h>
 
 class DistributionHandler;
+class Frame;
 class IBackground;
 class IComputation;
-class ICoordSystem;
 class MultiLayer;
 class ProgressHandler;
 class ReSample;
@@ -71,7 +71,7 @@ public:
     const IBackground* background() const;
     const std::vector<ParameterDistribution>& paramDistributions() const;
 
-    virtual const ICoordSystem* simCoordSystem() const = 0;
+    virtual const Frame* simCoordSystem() const = 0;
 
     const SimulationOptions& options() const;
 
diff --git a/Sim/Simulation/OffspecSimulation.cpp b/Sim/Simulation/OffspecSimulation.cpp
index a744f7e8ba640bdb36f23a219f64a65f626be4d0..468f8e877ce41eb7eee6c7d6d1299eb42045fd37 100644
--- a/Sim/Simulation/OffspecSimulation.cpp
+++ b/Sim/Simulation/OffspecSimulation.cpp
@@ -55,7 +55,7 @@ void OffspecSimulation::prepareSimulation()
         m_pixels.emplace_back(m_detector->createPixel(i));
 }
 
-const ICoordSystem* OffspecSimulation::simCoordSystem() const
+const Frame* OffspecSimulation::simCoordSystem() const
 {
     return new OffspecCoords(
         std::vector<const Scale*>{m_scan->coordinateAxis()->clone(), m_detector->axis(1).clone()});
diff --git a/Sim/Simulation/OffspecSimulation.h b/Sim/Simulation/OffspecSimulation.h
index df59a22297d909f27a28a07887064920f5fdfd0f..3ae6b4693ee14f00261ebfcd164356d8c649c6d4 100644
--- a/Sim/Simulation/OffspecSimulation.h
+++ b/Sim/Simulation/OffspecSimulation.h
@@ -37,7 +37,7 @@ public:
     std::string className() const final { return "OffspecSimulation"; }
 
 #ifndef SWIG
-    const ICoordSystem* simCoordSystem() const override;
+    const Frame* simCoordSystem() const override;
 
     std::vector<const INode*> nodeChildren() const override;
 
diff --git a/Sim/Simulation/ScatteringSimulation.cpp b/Sim/Simulation/ScatteringSimulation.cpp
index a21698b814da81a5de53af75ae04920ac13df69f..87f1f99e631b76f8633af2bff4d4727d59db4052 100644
--- a/Sim/Simulation/ScatteringSimulation.cpp
+++ b/Sim/Simulation/ScatteringSimulation.cpp
@@ -40,7 +40,7 @@ ScatteringSimulation::ScatteringSimulation(const Beam& beam, const MultiLayer& s
 
 ScatteringSimulation::~ScatteringSimulation() = default;
 
-const ICoordSystem* ScatteringSimulation::simCoordSystem() const
+const Frame* ScatteringSimulation::simCoordSystem() const
 {
     return m_detector->scatteringCoords(beam());
 }
diff --git a/Sim/Simulation/ScatteringSimulation.h b/Sim/Simulation/ScatteringSimulation.h
index bb0a58280864569b3c26b0931eb33d58286cab3b..20e526764e8e969011ecbaa444f6748ae142130a 100644
--- a/Sim/Simulation/ScatteringSimulation.h
+++ b/Sim/Simulation/ScatteringSimulation.h
@@ -39,7 +39,7 @@ public:
     IDetector& detector() { return *m_detector; }
 
 #ifndef SWIG
-    const ICoordSystem* simCoordSystem() const override;
+    const Frame* simCoordSystem() const override;
 
     const Beam& beam() const
     {
diff --git a/Sim/Simulation/SpecularSimulation.cpp b/Sim/Simulation/SpecularSimulation.cpp
index 079781feb6ec98c8e00b2cf2a1cbb182a807e76c..765207c5332bcef0d0bc0deab2bfad5926a10636 100644
--- a/Sim/Simulation/SpecularSimulation.cpp
+++ b/Sim/Simulation/SpecularSimulation.cpp
@@ -68,7 +68,7 @@ SpecularSimulation::SpecularSimulation(const IBeamScan& scan, const MultiLayer&
 
 SpecularSimulation::~SpecularSimulation() = default;
 
-const ICoordSystem* SpecularSimulation::simCoordSystem() const
+const Frame* SpecularSimulation::simCoordSystem() const
 {
     return m_scan->scanCoordSystem();
 }
diff --git a/Sim/Simulation/SpecularSimulation.h b/Sim/Simulation/SpecularSimulation.h
index 9332e6849a7396cbfc63b4255c2a94ce26adacd3..2c2ab6b3cd9e5b845e8ea99f85b4003deb0894f3 100644
--- a/Sim/Simulation/SpecularSimulation.h
+++ b/Sim/Simulation/SpecularSimulation.h
@@ -33,7 +33,7 @@ public:
     std::string className() const final { return "SpecularSimulation"; }
 
 #ifndef SWIG
-    const ICoordSystem* simCoordSystem() const override;
+    const Frame* simCoordSystem() const override;
     //! Returns internal data handler
     const IBeamScan* scan() const
     {
diff --git a/auto/Wrap/libBornAgainBase.py b/auto/Wrap/libBornAgainBase.py
index 27d071da8f64052687d99a6dfe3daac16faab7f8..75d4f5987daf5e7670a74d035065157d028ddd98 100644
--- a/auto/Wrap/libBornAgainBase.py
+++ b/auto/Wrap/libBornAgainBase.py
@@ -1950,9 +1950,12 @@ class Frame(ICloneable):
     thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
     __repr__ = _swig_repr
 
-    def __init__(self, axes):
-        r"""__init__(Frame self, std::vector< Scale const *,std::allocator< Scale const * > > && axes) -> Frame"""
-        _libBornAgainBase.Frame_swiginit(self, _libBornAgainBase.new_Frame(axes))
+    def __init__(self, *args):
+        r"""
+        __init__(Frame self, std::vector< Scale const *,std::allocator< Scale const * > > && axes) -> Frame
+        __init__(Frame self, Scale const *&& ax0) -> Frame
+        """
+        _libBornAgainBase.Frame_swiginit(self, _libBornAgainBase.new_Frame(*args))
     __swig_destroy__ = _libBornAgainBase.delete_Frame
 
     def clone(self):
diff --git a/auto/Wrap/libBornAgainBase_wrap.cpp b/auto/Wrap/libBornAgainBase_wrap.cpp
index e9cdd8146ce1d480ab5865536e04b16918ee4952..abfa9936234c8ddfe00bf33fb43a83e0de005d93 100644
--- a/auto/Wrap/libBornAgainBase_wrap.cpp
+++ b/auto/Wrap/libBornAgainBase_wrap.cpp
@@ -3405,44 +3405,45 @@ namespace Swig {
 #define SWIGTYPE_p_long_long swig_types[16]
 #define SWIGTYPE_p_mapped_type swig_types[17]
 #define SWIGTYPE_p_p_PyObject swig_types[18]
-#define SWIGTYPE_p_second_type swig_types[19]
-#define SWIGTYPE_p_short swig_types[20]
-#define SWIGTYPE_p_signed_char swig_types[21]
-#define SWIGTYPE_p_size_type swig_types[22]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[23]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[24]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[25]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[26]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[27]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[28]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[29]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[30]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[31]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[32]
-#define SWIGTYPE_p_std__invalid_argument swig_types[33]
-#define SWIGTYPE_p_std__lessT_std__string_t swig_types[34]
-#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[35]
-#define SWIGTYPE_p_std__optionalT_Bin1D_t swig_types[36]
-#define SWIGTYPE_p_std__pairT_double_double_t swig_types[37]
-#define SWIGTYPE_p_std__vectorT_Bin1D_std__allocatorT_Bin1D_t_t swig_types[38]
-#define SWIGTYPE_p_std__vectorT_Scale_const_p_std__allocatorT_Scale_const_p_t_t swig_types[39]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[40]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[41]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[42]
-#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[43]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[44]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[45]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[46]
-#define SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t swig_types[47]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[48]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[49]
-#define SWIGTYPE_p_unsigned_char swig_types[50]
-#define SWIGTYPE_p_unsigned_int swig_types[51]
-#define SWIGTYPE_p_unsigned_long_long swig_types[52]
-#define SWIGTYPE_p_unsigned_short swig_types[53]
-#define SWIGTYPE_p_value_type swig_types[54]
-static swig_type_info *swig_types[56];
-static swig_module_info swig_module = {swig_types, 55, 0, 0, 0, 0};
+#define SWIGTYPE_p_p_Scale swig_types[19]
+#define SWIGTYPE_p_second_type swig_types[20]
+#define SWIGTYPE_p_short swig_types[21]
+#define SWIGTYPE_p_signed_char swig_types[22]
+#define SWIGTYPE_p_size_type swig_types[23]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[24]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[25]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[26]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[27]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[28]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[29]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[30]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[31]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[32]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[33]
+#define SWIGTYPE_p_std__invalid_argument swig_types[34]
+#define SWIGTYPE_p_std__lessT_std__string_t swig_types[35]
+#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[36]
+#define SWIGTYPE_p_std__optionalT_Bin1D_t swig_types[37]
+#define SWIGTYPE_p_std__pairT_double_double_t swig_types[38]
+#define SWIGTYPE_p_std__vectorT_Bin1D_std__allocatorT_Bin1D_t_t swig_types[39]
+#define SWIGTYPE_p_std__vectorT_Scale_const_p_std__allocatorT_Scale_const_p_t_t swig_types[40]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[41]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[42]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[43]
+#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[44]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[45]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[46]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[47]
+#define SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t swig_types[48]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[49]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[50]
+#define SWIGTYPE_p_unsigned_char swig_types[51]
+#define SWIGTYPE_p_unsigned_int swig_types[52]
+#define SWIGTYPE_p_unsigned_long_long swig_types[53]
+#define SWIGTYPE_p_unsigned_short swig_types[54]
+#define SWIGTYPE_p_value_type swig_types[55]
+static swig_type_info *swig_types[57];
+static swig_module_info swig_module = {swig_types, 56, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -26039,17 +26040,15 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_new_Frame(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_Frame__SWIG_0(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   std::vector< Scale const *,std::allocator< Scale const * > > *arg1 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   std::unique_ptr< std::vector< Scale const *,std::allocator< Scale const * > > > rvrdeleter1 ;
-  PyObject *swig_obj[1] ;
   Frame *result = 0 ;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_std__vectorT_Scale_const_p_std__allocatorT_Scale_const_p_t_t, SWIG_POINTER_RELEASE |  0 );
   if (!SWIG_IsOK(res1)) {
     if (res1 == SWIG_ERROR_RELEASE_NOT_OWNED) {
@@ -26071,6 +26070,72 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_new_Frame__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
+  PyObject *resultobj = 0;
+  Scale **arg1 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  std::unique_ptr< Scale * > rvrdeleter1 ;
+  Frame *result = 0 ;
+  
+  if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1, SWIGTYPE_p_p_Scale, SWIG_POINTER_RELEASE |  0 );
+  if (!SWIG_IsOK(res1)) {
+    if (res1 == SWIG_ERROR_RELEASE_NOT_OWNED) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Frame" "', cannot release ownership as memory is not owned for argument " "1"" of type '" "Scale const *&&""'");
+    } else {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Frame" "', argument " "1"" of type '" "Scale const *&&""'"); 
+    }
+  }
+  if (!argp1) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Frame" "', argument " "1"" of type '" "Scale const *&&""'"); 
+  }
+  arg1 = reinterpret_cast< Scale ** >(argp1);
+  rvrdeleter1.reset(arg1);
+  result = (Frame *)new Frame((Scale const *&&)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Frame, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_Frame(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[2] = {
+    0
+  };
+  
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_Frame", 0, 1, argv))) SWIG_fail;
+  --argc;
+  if (argc == 1) {
+    int _v = 0;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_std__vectorT_Scale_const_p_std__allocatorT_Scale_const_p_t_t, SWIG_POINTER_NO_NULL);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_Frame__SWIG_0(self, argc, argv);
+    }
+  }
+  if (argc == 1) {
+    int _v = 0;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_p_Scale, SWIG_POINTER_NO_NULL);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_new_Frame__SWIG_1(self, argc, argv);
+    }
+  }
+  
+fail:
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Frame'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Frame::Frame(std::vector< Scale const *,std::allocator< Scale const * > > &&)\n"
+    "    Frame::Frame(Scale const *&&)\n");
+  return 0;
+}
+
+
 SWIGINTERN PyObject *_wrap_delete_Frame(PyObject *self, PyObject *args) {
   PyObject *resultobj = 0;
   Frame *arg1 = (Frame *) 0 ;
@@ -28520,7 +28585,10 @@ static PyMethodDef SwigMethods[] = {
 	 { "Scale_swiginit", Scale_swiginit, METH_VARARGS, NULL},
 	 { "ListScan", _wrap_ListScan, METH_VARARGS, "ListScan(std::string const & name, vdouble1d_t points) -> Scale"},
 	 { "EquiDivision", _wrap_EquiDivision, METH_VARARGS, "EquiDivision(std::string const & name, size_t nbins, double start, double end) -> Scale"},
-	 { "new_Frame", _wrap_new_Frame, METH_O, "new_Frame(std::vector< Scale const *,std::allocator< Scale const * > > && axes) -> Frame"},
+	 { "new_Frame", _wrap_new_Frame, METH_VARARGS, "\n"
+		"Frame(std::vector< Scale const *,std::allocator< Scale const * > > && axes)\n"
+		"new_Frame(Scale const *&& ax0) -> Frame\n"
+		""},
 	 { "delete_Frame", _wrap_delete_Frame, METH_O, "delete_Frame(Frame self)"},
 	 { "Frame_clone", _wrap_Frame_clone, METH_O, "Frame_clone(Frame self) -> Frame"},
 	 { "Frame_rank", _wrap_Frame_rank, METH_O, "Frame_rank(Frame self) -> size_t"},
@@ -28621,6 +28689,7 @@ static swig_type_info _swigt__p_key_type = {"_p_key_type", "key_type *", 0, 0, (
 static swig_type_info _swigt__p_long_long = {"_p_long_long", "int64_t *|int_fast64_t *|int_least64_t *|intmax_t *|long long *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_mapped_type = {"_p_mapped_type", "mapped_type *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_p_PyObject = {"_p_p_PyObject", "PyObject **", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_p_Scale = {"_p_p_Scale", "Scale **", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_second_type = {"_p_second_type", "second_type *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_short = {"_p_short", "int16_t *|int_least16_t *|short *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_signed_char = {"_p_signed_char", "int8_t *|int_fast8_t *|int_least8_t *|signed char *", 0, 0, (void*)0, 0};
@@ -28678,6 +28747,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_long_long,
   &_swigt__p_mapped_type,
   &_swigt__p_p_PyObject,
+  &_swigt__p_p_Scale,
   &_swigt__p_second_type,
   &_swigt__p_short,
   &_swigt__p_signed_char,
@@ -28735,6 +28805,7 @@ static swig_cast_info _swigc__p_key_type[] = {  {&_swigt__p_key_type, 0, 0, 0},{
 static swig_cast_info _swigc__p_long_long[] = {  {&_swigt__p_long_long, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_mapped_type[] = {  {&_swigt__p_mapped_type, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_p_PyObject[] = {  {&_swigt__p_p_PyObject, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_p_Scale[] = {  {&_swigt__p_p_Scale, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_second_type[] = {  {&_swigt__p_second_type, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_short[] = {  {&_swigt__p_short, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_signed_char[] = {  {&_swigt__p_signed_char, 0, 0, 0},{0, 0, 0, 0}};
@@ -28792,6 +28863,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_long_long,
   _swigc__p_mapped_type,
   _swigc__p_p_PyObject,
+  _swigc__p_p_Scale,
   _swigc__p_second_type,
   _swigc__p_short,
   _swigc__p_signed_char,
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index 66d0da65a36e9881fd7940bc241eeb493a2563c0..ffa2ad3fd9c9182fdd74cf1425394b482057d610 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -3044,7 +3044,7 @@ class SimulationResult(Datafield):
     def __init__(self, *args):
         r"""
         __init__(SimulationResult self) -> SimulationResult
-        __init__(SimulationResult self, Datafield data, ICoordSystem const * coords) -> SimulationResult
+        __init__(SimulationResult self, Datafield data, Frame coords) -> 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 f4e230f482ac06eef36f9846d37fcc9b38b061f6..d367aba0d9c5e9729d32b6f8c9d942ba6a7948ef 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -3398,88 +3398,87 @@ namespace Swig {
 #define SWIGTYPE_p_Frame swig_types[9]
 #define SWIGTYPE_p_HorizontalLine swig_types[10]
 #define SWIGTYPE_p_ICloneable swig_types[11]
-#define SWIGTYPE_p_ICoordSystem swig_types[12]
-#define SWIGTYPE_p_IDetector swig_types[13]
-#define SWIGTYPE_p_IDetectorResolution swig_types[14]
-#define SWIGTYPE_p_IFootprint swig_types[15]
-#define SWIGTYPE_p_INode swig_types[16]
-#define SWIGTYPE_p_IPixel swig_types[17]
-#define SWIGTYPE_p_IResolutionFunction2D swig_types[18]
-#define SWIGTYPE_p_IShape2D swig_types[19]
-#define SWIGTYPE_p_ImportSettings1D swig_types[20]
-#define SWIGTYPE_p_Line swig_types[21]
-#define SWIGTYPE_p_MaskPattern swig_types[22]
-#define SWIGTYPE_p_OffspecDetector swig_types[23]
-#define SWIGTYPE_p_PolFilter swig_types[24]
-#define SWIGTYPE_p_Polygon swig_types[25]
-#define SWIGTYPE_p_PolygonPrivate swig_types[26]
-#define SWIGTYPE_p_Rectangle swig_types[27]
-#define SWIGTYPE_p_RectangularDetector swig_types[28]
-#define SWIGTYPE_p_RectangularPixel swig_types[29]
-#define SWIGTYPE_p_ResolutionFunction2DGaussian swig_types[30]
-#define SWIGTYPE_p_Rotation3DT_double_t swig_types[31]
-#define SWIGTYPE_p_Scale swig_types[32]
-#define SWIGTYPE_p_SimulationResult swig_types[33]
-#define SWIGTYPE_p_SphericalDetector swig_types[34]
-#define SWIGTYPE_p_Vec3T_double_t swig_types[35]
-#define SWIGTYPE_p_Vec3T_int_t swig_types[36]
-#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[37]
-#define SWIGTYPE_p_VerticalLine swig_types[38]
-#define SWIGTYPE_p_allocator_type swig_types[39]
-#define SWIGTYPE_p_char swig_types[40]
-#define SWIGTYPE_p_const_iterator swig_types[41]
-#define SWIGTYPE_p_corr_matrix_t swig_types[42]
-#define SWIGTYPE_p_difference_type swig_types[43]
-#define SWIGTYPE_p_first_type swig_types[44]
-#define SWIGTYPE_p_int swig_types[45]
-#define SWIGTYPE_p_iterator swig_types[46]
-#define SWIGTYPE_p_key_type swig_types[47]
-#define SWIGTYPE_p_long_long swig_types[48]
-#define SWIGTYPE_p_mapped_type swig_types[49]
-#define SWIGTYPE_p_p_PyObject swig_types[50]
-#define SWIGTYPE_p_parameters_t swig_types[51]
-#define SWIGTYPE_p_second_type swig_types[52]
-#define SWIGTYPE_p_short swig_types[53]
-#define SWIGTYPE_p_signed_char swig_types[54]
-#define SWIGTYPE_p_size_type swig_types[55]
-#define SWIGTYPE_p_std__allocatorT_Vec3T_double_t_t swig_types[56]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[57]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[58]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[59]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[60]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[61]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[62]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[63]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[64]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[65]
-#define SWIGTYPE_p_std__arrayT_std__shared_ptrT_Scale_t_2_t swig_types[66]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[67]
-#define SWIGTYPE_p_std__functionT_void_fSimulationAreaIterator_const_RF_t swig_types[68]
-#define SWIGTYPE_p_std__invalid_argument swig_types[69]
-#define SWIGTYPE_p_std__lessT_std__string_t swig_types[70]
-#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[71]
-#define SWIGTYPE_p_std__pairT_double_double_t swig_types[72]
-#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[73]
-#define SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t swig_types[74]
-#define SWIGTYPE_p_std__vectorT_Scale_const_p_std__allocatorT_Scale_const_p_t_t swig_types[75]
-#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t swig_types[76]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[77]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[78]
-#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[79]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[80]
-#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[81]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[82]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[83]
-#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[84]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[85]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[86]
-#define SWIGTYPE_p_unsigned_char swig_types[87]
-#define SWIGTYPE_p_unsigned_int swig_types[88]
-#define SWIGTYPE_p_unsigned_long_long swig_types[89]
-#define SWIGTYPE_p_unsigned_short swig_types[90]
-#define SWIGTYPE_p_value_type swig_types[91]
-static swig_type_info *swig_types[93];
-static swig_module_info swig_module = {swig_types, 92, 0, 0, 0, 0};
+#define SWIGTYPE_p_IDetector swig_types[12]
+#define SWIGTYPE_p_IDetectorResolution swig_types[13]
+#define SWIGTYPE_p_IFootprint swig_types[14]
+#define SWIGTYPE_p_INode swig_types[15]
+#define SWIGTYPE_p_IPixel swig_types[16]
+#define SWIGTYPE_p_IResolutionFunction2D swig_types[17]
+#define SWIGTYPE_p_IShape2D swig_types[18]
+#define SWIGTYPE_p_ImportSettings1D swig_types[19]
+#define SWIGTYPE_p_Line swig_types[20]
+#define SWIGTYPE_p_MaskPattern swig_types[21]
+#define SWIGTYPE_p_OffspecDetector swig_types[22]
+#define SWIGTYPE_p_PolFilter swig_types[23]
+#define SWIGTYPE_p_Polygon swig_types[24]
+#define SWIGTYPE_p_PolygonPrivate swig_types[25]
+#define SWIGTYPE_p_Rectangle swig_types[26]
+#define SWIGTYPE_p_RectangularDetector swig_types[27]
+#define SWIGTYPE_p_RectangularPixel swig_types[28]
+#define SWIGTYPE_p_ResolutionFunction2DGaussian swig_types[29]
+#define SWIGTYPE_p_Rotation3DT_double_t swig_types[30]
+#define SWIGTYPE_p_Scale swig_types[31]
+#define SWIGTYPE_p_SimulationResult swig_types[32]
+#define SWIGTYPE_p_SphericalDetector swig_types[33]
+#define SWIGTYPE_p_Vec3T_double_t swig_types[34]
+#define SWIGTYPE_p_Vec3T_int_t swig_types[35]
+#define SWIGTYPE_p_Vec3T_std__complexT_double_t_t swig_types[36]
+#define SWIGTYPE_p_VerticalLine swig_types[37]
+#define SWIGTYPE_p_allocator_type swig_types[38]
+#define SWIGTYPE_p_char swig_types[39]
+#define SWIGTYPE_p_const_iterator swig_types[40]
+#define SWIGTYPE_p_corr_matrix_t swig_types[41]
+#define SWIGTYPE_p_difference_type swig_types[42]
+#define SWIGTYPE_p_first_type swig_types[43]
+#define SWIGTYPE_p_int swig_types[44]
+#define SWIGTYPE_p_iterator swig_types[45]
+#define SWIGTYPE_p_key_type swig_types[46]
+#define SWIGTYPE_p_long_long swig_types[47]
+#define SWIGTYPE_p_mapped_type swig_types[48]
+#define SWIGTYPE_p_p_PyObject swig_types[49]
+#define SWIGTYPE_p_parameters_t swig_types[50]
+#define SWIGTYPE_p_second_type swig_types[51]
+#define SWIGTYPE_p_short swig_types[52]
+#define SWIGTYPE_p_signed_char swig_types[53]
+#define SWIGTYPE_p_size_type swig_types[54]
+#define SWIGTYPE_p_std__allocatorT_Vec3T_double_t_t swig_types[55]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[56]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[57]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[58]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[59]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[60]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[61]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[62]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[63]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[64]
+#define SWIGTYPE_p_std__arrayT_std__shared_ptrT_Scale_t_2_t swig_types[65]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[66]
+#define SWIGTYPE_p_std__functionT_void_fSimulationAreaIterator_const_RF_t swig_types[67]
+#define SWIGTYPE_p_std__invalid_argument swig_types[68]
+#define SWIGTYPE_p_std__lessT_std__string_t swig_types[69]
+#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[70]
+#define SWIGTYPE_p_std__pairT_double_double_t swig_types[71]
+#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[72]
+#define SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t swig_types[73]
+#define SWIGTYPE_p_std__vectorT_Scale_const_p_std__allocatorT_Scale_const_p_t_t swig_types[74]
+#define SWIGTYPE_p_std__vectorT_Vec3T_double_t_std__allocatorT_Vec3T_double_t_t_t swig_types[75]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[76]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[77]
+#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[78]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[79]
+#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[80]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[81]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[82]
+#define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[83]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[84]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[85]
+#define SWIGTYPE_p_unsigned_char swig_types[86]
+#define SWIGTYPE_p_unsigned_int swig_types[87]
+#define SWIGTYPE_p_unsigned_long_long swig_types[88]
+#define SWIGTYPE_p_unsigned_short swig_types[89]
+#define SWIGTYPE_p_value_type swig_types[90]
+static swig_type_info *swig_types[92];
+static swig_module_info swig_module = {swig_types, 91, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -36995,7 +36994,7 @@ fail:
 SWIGINTERN PyObject *_wrap_new_SimulationResult__SWIG_1(PyObject *self, Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   Datafield *arg1 = 0 ;
-  ICoordSystem *arg2 = (ICoordSystem *) 0 ;
+  Frame *arg2 = (Frame *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -37011,12 +37010,12 @@ SWIGINTERN PyObject *_wrap_new_SimulationResult__SWIG_1(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_ICoordSystem, 0 |  0 );
+  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 '" "ICoordSystem const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_SimulationResult" "', argument " "2"" of type '" "Frame const *""'"); 
   }
-  arg2 = reinterpret_cast< ICoordSystem * >(argp2);
-  result = (SimulationResult *)new SimulationResult((Datafield const &)*arg1,(ICoordSystem const *)arg2);
+  arg2 = reinterpret_cast< Frame * >(argp2);
+  result = (SimulationResult *)new SimulationResult((Datafield const &)*arg1,(Frame const *)arg2);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_SimulationResult, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -37112,7 +37111,7 @@ SWIGINTERN PyObject *_wrap_new_SimulationResult(PyObject *self, PyObject *args)
     _v = SWIG_CheckState(res);
     if (_v) {
       void *vptr = 0;
-      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_ICoordSystem, 0);
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_Frame, 0);
       _v = SWIG_CheckState(res);
       if (_v) {
         return _wrap_new_SimulationResult__SWIG_1(self, argc, argv);
@@ -37124,7 +37123,7 @@ fail:
   SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_SimulationResult'.\n"
     "  Possible C/C++ prototypes are:\n"
     "    SimulationResult::SimulationResult()\n"
-    "    SimulationResult::SimulationResult(Datafield const &,ICoordSystem const *)\n"
+    "    SimulationResult::SimulationResult(Datafield const &,Frame const *)\n"
     "    SimulationResult::SimulationResult(SimulationResult const &)\n"
     "    SimulationResult::SimulationResult(SimulationResult &&)\n");
   return 0;
@@ -38421,7 +38420,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "dataMatchesFile", _wrap_dataMatchesFile, METH_VARARGS, "dataMatchesFile(Datafield data, std::string const & refFileName, double tol) -> bool"},
 	 { "new_SimulationResult", _wrap_new_SimulationResult, METH_VARARGS, "\n"
 		"SimulationResult()\n"
-		"SimulationResult(Datafield data, ICoordSystem const * coords)\n"
+		"SimulationResult(Datafield data, Frame coords)\n"
 		"SimulationResult(SimulationResult other)\n"
 		"new_SimulationResult(SimulationResult other) -> SimulationResult\n"
 		""},
@@ -38576,7 +38575,6 @@ static swig_type_info _swigt__p_FootprintSquare = {"_p_FootprintSquare", "Footpr
 static swig_type_info _swigt__p_Frame = {"_p_Frame", "Frame *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_HorizontalLine = {"_p_HorizontalLine", "HorizontalLine *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ICloneable = {"_p_ICloneable", "ICloneable *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_ICoordSystem = {"_p_ICoordSystem", "ICoordSystem *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IDetector = {"_p_IDetector", "IDetector *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IDetectorResolution = {"_p_IDetectorResolution", "IDetectorResolution *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IFootprint = {"_p_IFootprint", "IFootprint *", 0, 0, (void*)0, 0};
@@ -38670,7 +38668,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_Frame,
   &_swigt__p_HorizontalLine,
   &_swigt__p_ICloneable,
-  &_swigt__p_ICoordSystem,
   &_swigt__p_IDetector,
   &_swigt__p_IDetectorResolution,
   &_swigt__p_IFootprint,
@@ -38764,7 +38761,6 @@ static swig_cast_info _swigc__p_FootprintSquare[] = {  {&_swigt__p_FootprintSqua
 static swig_cast_info _swigc__p_Frame[] = {  {&_swigt__p_Frame, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_HorizontalLine[] = {  {&_swigt__p_HorizontalLine, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_Ellipse, _p_EllipseTo_p_ICloneable, 0, 0},  {&_swigt__p_FootprintGauss, _p_FootprintGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FootprintSquare, _p_FootprintSquareTo_p_ICloneable, 0, 0},  {&_swigt__p_Frame, _p_FrameTo_p_ICloneable, 0, 0},  {&_swigt__p_HorizontalLine, _p_HorizontalLineTo_p_ICloneable, 0, 0},  {&_swigt__p_IDetector, _p_IDetectorTo_p_ICloneable, 0, 0},  {&_swigt__p_IDetectorResolution, _p_IDetectorResolutionTo_p_ICloneable, 0, 0},  {&_swigt__p_IFootprint, _p_IFootprintTo_p_ICloneable, 0, 0},  {&_swigt__p_IResolutionFunction2D, _p_IResolutionFunction2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IShape2D, _p_IShape2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Line, _p_LineTo_p_ICloneable, 0, 0},  {&_swigt__p_Polygon, _p_PolygonTo_p_ICloneable, 0, 0},  {&_swigt__p_Rectangle, _p_RectangleTo_p_ICloneable, 0, 0},  {&_swigt__p_RectangularDetector, _p_RectangularDetectorTo_p_ICloneable, 0, 0},  {&_swigt__p_ResolutionFunction2DGaussian, _p_ResolutionFunction2DGaussianTo_p_ICloneable, 0, 0},  {&_swigt__p_SphericalDetector, _p_SphericalDetectorTo_p_ICloneable, 0, 0},  {&_swigt__p_VerticalLine, _p_VerticalLineTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_ICoordSystem[] = {  {&_swigt__p_ICoordSystem, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IDetector[] = {  {&_swigt__p_IDetector, 0, 0, 0},  {&_swigt__p_RectangularDetector, _p_RectangularDetectorTo_p_IDetector, 0, 0},  {&_swigt__p_SphericalDetector, _p_SphericalDetectorTo_p_IDetector, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IDetectorResolution[] = {  {&_swigt__p_IDetectorResolution, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFootprint[] = {  {&_swigt__p_IFootprint, 0, 0, 0},  {&_swigt__p_FootprintGauss, _p_FootprintGaussTo_p_IFootprint, 0, 0},  {&_swigt__p_FootprintSquare, _p_FootprintSquareTo_p_IFootprint, 0, 0},{0, 0, 0, 0}};
@@ -38858,7 +38854,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_Frame,
   _swigc__p_HorizontalLine,
   _swigc__p_ICloneable,
-  _swigc__p_ICoordSystem,
   _swigc__p_IDetector,
   _swigc__p_IDetectorResolution,
   _swigc__p_IFootprint,