diff --git a/Core/Export/SimulationToPython.cpp b/Core/Export/SimulationToPython.cpp
index 5a37f9069122f645e8e1f874fac26904a7b7f2f8..4be30125996d8ce70545c8aeb2d2d58f0ed5a5a0 100644
--- a/Core/Export/SimulationToPython.cpp
+++ b/Core/Export/SimulationToPython.cpp
@@ -43,9 +43,9 @@ namespace {
 //! Returns a function that converts a coordinate to a Python code snippet with appropiate unit
 std::function<std::string(double)> printFunc(const IDetector* detector)
 {
-    if (detector->defaultAxesUnits() == Axes::Units::MM)
+    if (detector->defaultAxesUnits() == Axes::Coords::MM)
         return pyfmt::printDouble;
-    if (detector->defaultAxesUnits() == Axes::Units::RADIANS)
+    if (detector->defaultAxesUnits() == Axes::Coords::RADIANS)
         return pyfmt::printDegrees;
     throw std::runtime_error("SimulationToPython::defineMasks() -> Error. Unknown detector units.");
 }
diff --git a/Core/Fitting/ObjectiveMetric.cpp b/Core/Fitting/ObjectiveMetric.cpp
index 583ecc45d071a7db0cbd99ea0c15ee716126fb9e..83d95c71038952ce4cfe5b0aac02a926c3557752 100644
--- a/Core/Fitting/ObjectiveMetric.cpp
+++ b/Core/Fitting/ObjectiveMetric.cpp
@@ -232,8 +232,8 @@ double RQ4Metric::compute(const SimDataPair& data_pair, bool use_weights) const
         return Chi2Metric::compute(data_pair, use_weights);
 
     // fetching data in RQ4 form
-    auto sim_data = data_pair.simulationResult().data(Axes::Units::RQ4);
-    auto exp_data = data_pair.experimentalData().data(Axes::Units::RQ4);
+    auto sim_data = data_pair.simulationResult().data(Axes::Coords::RQ4);
+    auto exp_data = data_pair.experimentalData().data(Axes::Coords::RQ4);
 
     return computeFromArrays(sim_data->getRawDataVector(), exp_data->getRawDataVector(),
                              data_pair.user_weights_array());
diff --git a/Core/Scan/UnitConverter1D.cpp b/Core/Scan/CoordSystem1D.cpp
similarity index 83%
rename from Core/Scan/UnitConverter1D.cpp
rename to Core/Scan/CoordSystem1D.cpp
index 4ad367c62baf888fe18d3096cf2d5caccf1a8f69..dab4c5a8d479e0f519e58fbbddb0bf1440d3dccf 100644
--- a/Core/Scan/UnitConverter1D.cpp
+++ b/Core/Scan/CoordSystem1D.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Core/Scan/UnitConverter1D.cpp
+//! @file      Core/Scan/CoordSystem1D.cpp
 //! @brief     Implements CoordSystem1D class and derived classes.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -69,40 +69,40 @@ size_t CoordSystem1D::axisSize(size_t i_axis) const
     return coordinateAxis()->size();
 }
 
-double CoordSystem1D::calculateMin(size_t i_axis, Axes::Units units) const
+double CoordSystem1D::calculateMin(size_t i_axis, Axes::Coords units) const
 {
     ASSERT(i_axis == 0);
     units = substituteDefaultUnits(units);
-    if (units == Axes::Units::NBINS)
+    if (units == Axes::Coords::NBINS)
         return 0.0;
     auto translator = getTraslatorTo(units);
     return translator(coordinateAxis()->binCenter(0));
 }
 
-double CoordSystem1D::calculateMax(size_t i_axis, Axes::Units units) const
+double CoordSystem1D::calculateMax(size_t i_axis, Axes::Coords units) const
 {
     ASSERT(i_axis == 0);
     units = substituteDefaultUnits(units);
     const IAxis *const coordinate_axis = coordinateAxis();
-    if (units == Axes::Units::NBINS)
+    if (units == Axes::Coords::NBINS)
         return static_cast<double>(coordinate_axis->size());
     auto translator = getTraslatorTo(units);
     return translator(coordinate_axis->binCenter(coordinate_axis->size() - 1));
 }
 
 std::unique_ptr<const IAxis> CoordSystem1D::createConvertedAxis(size_t i_axis,
-                                                                  Axes::Units units) const
+                                                                  Axes::Coords units) const
 {
     ASSERT(i_axis == 0);
     units = substituteDefaultUnits(units);
-    if (units == Axes::Units::NBINS)
+    if (units == Axes::Coords::NBINS)
         return std::make_unique<FixedBinAxis>(axisName(0, units), coordinateAxis()->size(),
                                               calculateMin(0, units), calculateMax(0, units));
     return createTranslatedAxis(*coordinateAxis(), getTraslatorTo(units), axisName(0, units));
 }
 
 std::unique_ptr<OutputData<double>>
-CoordSystem1D::createConvertedData(const OutputData<double>& data, Axes::Units units) const
+CoordSystem1D::createConvertedData(const OutputData<double>& data, Axes::Coords units) const
 {
     ASSERT(data.rank() == 1);
 
@@ -110,7 +110,7 @@ CoordSystem1D::createConvertedData(const OutputData<double>& data, Axes::Units u
     auto q_axis = createConvertedAxis(0, units);
     result->addAxis(*q_axis);
 
-    if (units != Axes::Units::RQ4) {
+    if (units != Axes::Coords::RQ4) {
         result->setRawDataVector(data.getRawDataVector());
         return result;
     }
@@ -126,7 +126,7 @@ CoordSystem1D::createConvertedData(const OutputData<double>& data, Axes::Units u
 //  ************************************************************************************************
 
 AngularReflectometryConverter::AngularReflectometryConverter(const Beam& beam, const IAxis& axis,
-                                                             Axes::Units axis_units)
+                                                             Axes::Coords axis_units)
     : m_wavelength(beam.wavelength())
     , m_axis(createTranslatedAxis(axis, getTraslatorFrom(axis_units), axisName(0, axis_units)))
 
@@ -147,10 +147,10 @@ AngularReflectometryConverter* AngularReflectometryConverter::clone() const
     return new AngularReflectometryConverter(*this);
 }
 
-std::vector<Axes::Units> AngularReflectometryConverter::availableUnits() const
+std::vector<Axes::Coords> AngularReflectometryConverter::availableUnits() const
 {
-    return {Axes::Units::NBINS, Axes::Units::RADIANS, Axes::Units::DEGREES, Axes::Units::QSPACE,
-            Axes::Units::RQ4};
+    return {Axes::Coords::NBINS, Axes::Coords::RADIANS, Axes::Coords::DEGREES, Axes::Coords::QSPACE,
+            Axes::Coords::RQ4};
 }
 
 AngularReflectometryConverter::AngularReflectometryConverter(
@@ -159,38 +159,38 @@ AngularReflectometryConverter::AngularReflectometryConverter(
 {
 }
 
-std::vector<std::map<Axes::Units, std::string>>
+std::vector<std::map<Axes::Coords, std::string>>
 AngularReflectometryConverter::createNameMaps() const
 {
     return {AxisNames::specAxis};
 }
 
 std::function<double(double)>
-AngularReflectometryConverter::getTraslatorFrom(Axes::Units units) const
+AngularReflectometryConverter::getTraslatorFrom(Axes::Coords units) const
 {
     switch (units) {
-    case Axes::Units::RADIANS:
+    case Axes::Coords::RADIANS:
         return [](double value) { return value; };
-    case Axes::Units::DEGREES:
+    case Axes::Coords::DEGREES:
         return [](double value) { return Units::deg2rad(value); };
-    case Axes::Units::QSPACE:
+    case Axes::Coords::QSPACE:
         return [this](double value) { return getInvQ(m_wavelength, value); };
     default:
         throwUnitsError("AngularReflectometryConverter::getTraslatorFrom",
-                        {Axes::Units::RADIANS, Axes::Units::DEGREES, Axes::Units::QSPACE});
+                        {Axes::Coords::RADIANS, Axes::Coords::DEGREES, Axes::Coords::QSPACE});
     }
 }
 
-std::function<double(double)> AngularReflectometryConverter::getTraslatorTo(Axes::Units units) const
+std::function<double(double)> AngularReflectometryConverter::getTraslatorTo(Axes::Coords units) const
 {
     switch (units) {
-    case Axes::Units::RADIANS:
+    case Axes::Coords::RADIANS:
         return [](double value) { return value; };
-    case Axes::Units::DEGREES:
+    case Axes::Coords::DEGREES:
         return [](double value) { return Units::rad2deg(value); };
-    case Axes::Units::QSPACE:
+    case Axes::Coords::QSPACE:
         return [wl = m_wavelength](double value) { return getQ(wl, value); };
-    case Axes::Units::RQ4:
+    case Axes::Coords::RQ4:
         return [wl = m_wavelength](double value) { return getQ(wl, value); };
     default:
         throwUnitsError("AngularReflectometryConverter::getTraslatorTo", availableUnits());
@@ -215,9 +215,9 @@ WavenumberReflectometryConverter* WavenumberReflectometryConverter::clone() cons
 }
 
 //! Returns the list of all available units
-std::vector<Axes::Units> WavenumberReflectometryConverter::availableUnits() const
+std::vector<Axes::Coords> WavenumberReflectometryConverter::availableUnits() const
 {
-    return {Axes::Units::NBINS, Axes::Units::QSPACE, Axes::Units::RQ4};
+    return {Axes::Coords::NBINS, Axes::Coords::QSPACE, Axes::Coords::RQ4};
 }
 
 WavenumberReflectometryConverter::WavenumberReflectometryConverter(
@@ -227,7 +227,7 @@ WavenumberReflectometryConverter::WavenumberReflectometryConverter(
 }
 
 //! Creates name map for axis in various units
-std::vector<std::map<Axes::Units, std::string>>
+std::vector<std::map<Axes::Coords, std::string>>
 WavenumberReflectometryConverter::createNameMaps() const
 {
     return {AxisNames::specAxisQ};
@@ -235,12 +235,12 @@ WavenumberReflectometryConverter::createNameMaps() const
 
 //! Returns translating functional (inv. nm --> desired units)
 std::function<double(double)>
-WavenumberReflectometryConverter::getTraslatorTo(Axes::Units units) const
+WavenumberReflectometryConverter::getTraslatorTo(Axes::Coords units) const
 {
     switch (units) {
-    case Axes::Units::QSPACE:
+    case Axes::Coords::QSPACE:
         return [](double value) { return value; };
-    case Axes::Units::RQ4:
+    case Axes::Coords::RQ4:
         return [](double value) { return value; };
     default:
         throwUnitsError("WavenumberReflectometryConverter::getTraslatorTo", availableUnits());
diff --git a/Core/Scan/UnitConverter1D.h b/Core/Scan/CoordSystem1D.h
similarity index 74%
rename from Core/Scan/UnitConverter1D.h
rename to Core/Scan/CoordSystem1D.h
index d4c6ca96778093a4be6197aba4f3c80c7a5271cd..c32570c8163245b3f2862d6fe7e17adbebbef38e 100644
--- a/Core/Scan/UnitConverter1D.h
+++ b/Core/Scan/CoordSystem1D.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Core/Scan/UnitConverter1D.h
+//! @file      Core/Scan/CoordSystem1D.h
 //! @brief     Defines CoordSystem1D class and derived classes.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -17,8 +17,8 @@
 #endif
 
 #ifndef USER_API
-#ifndef BORNAGAIN_CORE_SCAN_UNITCONVERTER1D_H
-#define BORNAGAIN_CORE_SCAN_UNITCONVERTER1D_H
+#ifndef BORNAGAIN_CORE_SCAN_COORDSYSTEM1D_H
+#define BORNAGAIN_CORE_SCAN_COORDSYSTEM1D_H
 
 #include "Device/Unit/ICoordSystem.h"
 
@@ -49,22 +49,22 @@ public:
     size_t axisSize(size_t i_axis) const override;
 
     //! Calculates minimum on-axis value in given units.
-    double calculateMin(size_t i_axis, Axes::Units units) const override;
+    double calculateMin(size_t i_axis, Axes::Coords units) const override;
 
     //! Calculates maximum on-axis value in given units.
-    double calculateMax(size_t i_axis, Axes::Units units) const override;
+    double calculateMax(size_t i_axis, Axes::Coords units) const override;
 
     //! Creates axis in converted units.
     std::unique_ptr<const IAxis> createConvertedAxis(size_t i_axis,
-                                                     Axes::Units units) const override;
+                                                     Axes::Coords units) const override;
 
     //! Creates OutputData array in converter units.
     std::unique_ptr<OutputData<double>> createConvertedData(const OutputData<double>& data,
-                                                            Axes::Units units) const override;
+                                                            Axes::Coords units) const override;
 
 protected:
     //! Returns translating functional (rads --> output units)
-    virtual std::function<double(double)> getTraslatorTo(Axes::Units units) const = 0;
+    virtual std::function<double(double)> getTraslatorTo(Axes::Coords units) const = 0;
 
     virtual const IAxis* coordinateAxis() const = 0;
 };
@@ -75,30 +75,30 @@ class AngularReflectometryConverter : public CoordSystem1D {
 public:
     //! Constructs the object for unit conversion.
     AngularReflectometryConverter(const Beam& beam, const IAxis& axis,
-                                  Axes::Units axis_units = Axes::Units::RADIANS);
+                                  Axes::Coords axis_units = Axes::Coords::RADIANS);
     AngularReflectometryConverter(const AngularSpecScan& handler);
     ~AngularReflectometryConverter() override;
 
     AngularReflectometryConverter* clone() const override;
 
     //! Returns the list of all available units
-    std::vector<Axes::Units> availableUnits() const override;
+    std::vector<Axes::Coords> availableUnits() const override;
 
     //! Returns default units to convert to.
-    Axes::Units defaultUnits() const override { return Axes::Units::DEGREES; }
+    Axes::Coords defaultUnits() const override { return Axes::Coords::DEGREES; }
 
 
 private:
     AngularReflectometryConverter(const AngularReflectometryConverter& other);
 
     //! Creates name map for axis in various units
-    std::vector<std::map<Axes::Units, std::string>> createNameMaps() const override;
+    std::vector<std::map<Axes::Coords, std::string>> createNameMaps() const override;
 
     //! Returns translating functional (input units --> rads)
-    std::function<double(double)> getTraslatorFrom(Axes::Units units) const;
+    std::function<double(double)> getTraslatorFrom(Axes::Coords units) const;
 
     //! Returns translating functional (rads --> desired units)
-    std::function<double(double)> getTraslatorTo(Axes::Units units) const override;
+    std::function<double(double)> getTraslatorTo(Axes::Coords units) const override;
 
     const IAxis* coordinateAxis() const override { return m_axis.get(); }
 
@@ -116,24 +116,24 @@ public:
     WavenumberReflectometryConverter* clone() const override;
 
     //! Returns the list of all available units
-    std::vector<Axes::Units> availableUnits() const override;
+    std::vector<Axes::Coords> availableUnits() const override;
 
     //! Returns default units to convert to.
-    Axes::Units defaultUnits() const override { return Axes::Units::QSPACE; }
+    Axes::Coords defaultUnits() const override { return Axes::Coords::QSPACE; }
 
 private:
     WavenumberReflectometryConverter(const WavenumberReflectometryConverter& other);
 
     //! Creates name map for axis in various units
-    std::vector<std::map<Axes::Units, std::string>> createNameMaps() const override;
+    std::vector<std::map<Axes::Coords, std::string>> createNameMaps() const override;
 
     //! Returns translating functional (inv. nm --> desired units)
-    std::function<double(double)> getTraslatorTo(Axes::Units units) const override;
+    std::function<double(double)> getTraslatorTo(Axes::Coords units) const override;
 
     const IAxis* coordinateAxis() const override { return m_axis.get(); }
 
     std::unique_ptr<const IAxis> m_axis; //!< qz values (in inv. nm).
 };
 
-#endif // BORNAGAIN_CORE_SCAN_UNITCONVERTER1D_H
+#endif // BORNAGAIN_CORE_SCAN_COORDSYSTEM1D_H
 #endif // USER_API
diff --git a/Device/Detector/IDetector.h b/Device/Detector/IDetector.h
index c6b71924ae2200af10a404b68e88a35b436c5a85..d383f4536f2159447968d66d305f0d89fb508565 100644
--- a/Device/Detector/IDetector.h
+++ b/Device/Detector/IDetector.h
@@ -95,7 +95,7 @@ public:
     createDetectorIntensity(const std::vector<SimulationElement>& elements) const;
 
     //! Return default axes units
-    virtual Axes::Units defaultAxesUnits() const = 0;
+    virtual Axes::Coords defaultAxesUnits() const = 0;
 
     //! Returns number of simulation elements.
     size_t numberOfSimulationElements() const;
diff --git a/Device/Detector/RectangularDetector.h b/Device/Detector/RectangularDetector.h
index f0207732788d306efc8f1d0ff342eba42d633a45..51b684dbf7a48e4ff428e187016363246086630e 100644
--- a/Device/Detector/RectangularDetector.h
+++ b/Device/Detector/RectangularDetector.h
@@ -73,7 +73,7 @@ public:
     EDetectorArrangement getDetectorArrangment() const;
 
     //! return default axes units
-    virtual Axes::Units defaultAxesUnits() const override { return Axes::Units::MM; }
+    virtual Axes::Coords defaultAxesUnits() const override { return Axes::Coords::MM; }
 
     RectangularPixel* regionOfInterestPixel() const;
 
diff --git a/Device/Detector/SpecularDetector1D.h b/Device/Detector/SpecularDetector1D.h
index 90fecfb6cdeb7911ae5cdee8b336b62b0acb8114..ee03814f36b92836f7d6f4e0a27eee848e3b214d 100644
--- a/Device/Detector/SpecularDetector1D.h
+++ b/Device/Detector/SpecularDetector1D.h
@@ -49,7 +49,7 @@ public:
     void setAxis(const IAxis& axis);
 
     //! Return default axes units
-    virtual Axes::Units defaultAxesUnits() const override { return Axes::Units::RADIANS; }
+    virtual Axes::Coords defaultAxesUnits() const override { return Axes::Coords::RADIANS; }
 
 
 protected:
diff --git a/Device/Detector/SphericalDetector.h b/Device/Detector/SphericalDetector.h
index 6d0fab8bdd2a19eb1fb4da6ca49998599512469b..926f1153660f962dc3ad4bffa560f34c545d5f0d 100644
--- a/Device/Detector/SphericalDetector.h
+++ b/Device/Detector/SphericalDetector.h
@@ -53,7 +53,7 @@ public:
     ~SphericalDetector() override {}
 
     //! return default axes units
-    virtual Axes::Units defaultAxesUnits() const override { return Axes::Units::RADIANS; }
+    virtual Axes::Coords defaultAxesUnits() const override { return Axes::Coords::RADIANS; }
 
 protected:
     //! Creates an IPixel for the given OutputData object and index
diff --git a/Device/Histo/SimulationResult.cpp b/Device/Histo/SimulationResult.cpp
index 680d89eaa604a7791457c008b93974347933c634..8ae2c27f5ff011cab2f0d9b4737e3fb3cb9e3deb 100644
--- a/Device/Histo/SimulationResult.cpp
+++ b/Device/Histo/SimulationResult.cpp
@@ -54,7 +54,7 @@ SimulationResult& SimulationResult::operator=(SimulationResult&& other)
     return *this;
 }
 
-std::unique_ptr<OutputData<double>> SimulationResult::data(Axes::Units units) const
+std::unique_ptr<OutputData<double>> SimulationResult::data(Axes::Coords units) const
 {
     if (!m_data)
         throw std::runtime_error(
@@ -62,7 +62,7 @@ std::unique_ptr<OutputData<double>> SimulationResult::data(Axes::Units units) co
     return m_unit_converter->createConvertedData(*m_data, units);
 }
 
-Histogram2D* SimulationResult::histogram2d(Axes::Units units) const
+Histogram2D* SimulationResult::histogram2d(Axes::Coords units) const
 {
     if (m_data->rank() != 2 || m_unit_converter->dimension() != 2)
         throw std::runtime_error("Error in SimulationResult::histogram2d: "
@@ -72,7 +72,7 @@ Histogram2D* SimulationResult::histogram2d(Axes::Units units) const
     return new Histogram2D(*P_data);
 }
 
-std::vector<AxisInfo> SimulationResult::axisInfo(Axes::Units units) const
+std::vector<AxisInfo> SimulationResult::axisInfo(Axes::Coords units) const
 {
     if (!m_unit_converter)
         return {};
@@ -121,7 +121,7 @@ double SimulationResult::max() const
 }
 
 #ifdef BORNAGAIN_PYTHON
-PyObject* SimulationResult::array(Axes::Units units) const
+PyObject* SimulationResult::array(Axes::Coords units) const
 {
     if (!m_data || !m_unit_converter)
         throw std::runtime_error(
@@ -130,12 +130,12 @@ PyObject* SimulationResult::array(Axes::Units units) const
 }
 #endif
 
-std::vector<double> SimulationResult::convertedBinCenters(Axes::Units units) const
+std::vector<double> SimulationResult::convertedBinCenters(Axes::Coords units) const
 {
     return convertedBinCenters(0, units);
 }
 
-std::vector<double> SimulationResult::convertedBinCenters(size_t i_axis, Axes::Units units) const
+std::vector<double> SimulationResult::convertedBinCenters(size_t i_axis, Axes::Coords units) const
 {
     if (i_axis >= m_unit_converter->dimension())
         throw std::runtime_error(
diff --git a/Device/Histo/SimulationResult.h b/Device/Histo/SimulationResult.h
index 71791a457963424d287729bd383d33020abef244..cb95d59a250c51b188f3af7f6cc0fcd4efdfedf7 100644
--- a/Device/Histo/SimulationResult.h
+++ b/Device/Histo/SimulationResult.h
@@ -49,13 +49,13 @@ public:
     SimulationResult& operator=(SimulationResult&& other);
 
 #ifndef SWIG
-    std::unique_ptr<OutputData<double>> data(Axes::Units units = Axes::Units::UNDEFINED) const;
+    std::unique_ptr<OutputData<double>> data(Axes::Coords units = Axes::Coords::UNDEFINED) const;
 #endif
 
-    Histogram2D* histogram2d(Axes::Units units = Axes::Units::UNDEFINED) const;
+    Histogram2D* histogram2d(Axes::Coords units = Axes::Coords::UNDEFINED) const;
 
     //! Provide AxisInfo for each axis and the given units
-    std::vector<AxisInfo> axisInfo(Axes::Units units = Axes::Units::UNDEFINED) const;
+    std::vector<AxisInfo> axisInfo(Axes::Coords units = Axes::Coords::UNDEFINED) const;
 
     //! Returns underlying unit converter
     const ICoordSystem& converter() const;
@@ -69,15 +69,15 @@ public:
 
     //! returns intensity data as Python numpy array
 #ifdef BORNAGAIN_PYTHON
-    PyObject* array(Axes::Units units = Axes::Units::UNDEFINED) const;
+    PyObject* array(Axes::Coords units = Axes::Coords::UNDEFINED) const;
 #endif
 
-    std::vector<double> convertedBinCenters(Axes::Units units = Axes::Units::UNDEFINED) const;
+    std::vector<double> convertedBinCenters(Axes::Coords units = Axes::Coords::UNDEFINED) const;
 
     //! Returns axis coordinates as a numpy array. With no parameters given
     //! returns coordinates of x-axis in default units.
     std::vector<double> convertedBinCenters(size_t i_axis,
-                                            Axes::Units units = Axes::Units::UNDEFINED) const;
+                                            Axes::Coords units = Axes::Coords::UNDEFINED) const;
 
 private:
     void checkDimensions() const;
diff --git a/Device/Instrument/UnitConverter2D.cpp b/Device/Instrument/CoordSystem2D.cpp
similarity index 86%
rename from Device/Instrument/UnitConverter2D.cpp
rename to Device/Instrument/CoordSystem2D.cpp
index 0df50fa6b15fde82a135d26b4d4fccae9eb0b5cc..19c25ccee374c98f6efaaaa1b4fb4705e85e255f 100644
--- a/Device/Instrument/UnitConverter2D.cpp
+++ b/Device/Instrument/CoordSystem2D.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Device/Instrument/UnitConverter2D.cpp
+//! @file      Device/Instrument/CoordSystem2D.cpp
 //! @brief     Implements ICoordSystem classes.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -64,27 +64,27 @@ CoordSystem2D::CoordSystem2D(const CoordSystem2D& other)
 }
 
 void CoordSystem2D::addAxisData(std::string name, double min, double max,
-                                  Axes::Units default_units, size_t nbins)
+                                  Axes::Coords default_units, size_t nbins)
 {
     m_axis_data_table.emplace_back(AxisData{name, min, max, default_units, nbins});
 }
 
-double CoordSystem2D::calculateMin(size_t i_axis, Axes::Units units) const
+double CoordSystem2D::calculateMin(size_t i_axis, Axes::Coords units) const
 {
     ASSERT(i_axis < dimension());
     units = substituteDefaultUnits(units);
     const auto& axis_data = m_axis_data_table[i_axis];
-    if (units == Axes::Units::NBINS)
+    if (units == Axes::Coords::NBINS)
         return 0.0;
     return calculateValue(i_axis, units, axis_data.min);
 }
 
-double CoordSystem2D::calculateMax(size_t i_axis, Axes::Units units) const
+double CoordSystem2D::calculateMax(size_t i_axis, Axes::Coords units) const
 {
     ASSERT(i_axis < dimension());
     units = substituteDefaultUnits(units);
     const auto& axis_data = m_axis_data_table[i_axis];
-    if (units == Axes::Units::NBINS)
+    if (units == Axes::Coords::NBINS)
         return static_cast<double>(axis_data.nbins);
     return calculateValue(i_axis, units, axis_data.max);
 }
@@ -95,13 +95,13 @@ size_t CoordSystem2D::axisSize(size_t i_axis) const
     return m_axis_data_table[i_axis].nbins;
 }
 
-std::vector<Axes::Units> CoordSystem2D::availableUnits() const
+std::vector<Axes::Coords> CoordSystem2D::availableUnits() const
 {
-    return {Axes::Units::NBINS, Axes::Units::RADIANS, Axes::Units::DEGREES};
+    return {Axes::Coords::NBINS, Axes::Coords::RADIANS, Axes::Coords::DEGREES};
 }
 
 std::unique_ptr<const IAxis> CoordSystem2D::createConvertedAxis(size_t i_axis,
-                                                                  Axes::Units units) const
+                                                                  Axes::Coords units) const
 {
     const double min = calculateMin(i_axis, units);
     const double max = calculateMax(i_axis, units);
@@ -160,21 +160,21 @@ SphericalConverter* SphericalConverter::clone() const
     return new SphericalConverter(*this);
 }
 
-std::vector<Axes::Units> SphericalConverter::availableUnits() const
+std::vector<Axes::Coords> SphericalConverter::availableUnits() const
 {
     auto result = CoordSystem2D::availableUnits();
-    result.push_back(Axes::Units::QSPACE);
+    result.push_back(Axes::Coords::QSPACE);
     return result;
 }
 
-double SphericalConverter::calculateValue(size_t i_axis, Axes::Units units, double value) const
+double SphericalConverter::calculateValue(size_t i_axis, Axes::Coords units, double value) const
 {
     switch (units) {
-    case Axes::Units::RADIANS:
+    case Axes::Coords::RADIANS:
         return value;
-    case Axes::Units::DEGREES:
+    case Axes::Coords::DEGREES:
         return Units::rad2deg(value);
-    case Axes::Units::QSPACE: {
+    case Axes::Coords::QSPACE: {
         const auto k_i = vecOfLambdaAlphaPhi(m_wavelength, m_alpha_i, m_phi_i);
         if (i_axis == 0) {
             const auto k_f = vecOfLambdaAlphaPhi(m_wavelength, 0.0, value);
@@ -187,7 +187,7 @@ double SphericalConverter::calculateValue(size_t i_axis, Axes::Units units, doub
                                  "incorrect axis index: "
                                  + std::to_string(static_cast<int>(i_axis)));
     }
-    case Axes::Units::QXQY: {
+    case Axes::Coords::QXQY: {
         const auto k_i = vecOfLambdaAlphaPhi(m_wavelength, m_alpha_i, m_phi_i);
         if (i_axis == 0) {
             const auto k_f = vecOfLambdaAlphaPhi(m_wavelength, 0.0, value);
@@ -205,7 +205,7 @@ double SphericalConverter::calculateValue(size_t i_axis, Axes::Units units, doub
     }
 }
 
-std::vector<std::map<Axes::Units, std::string>> SphericalConverter::createNameMaps() const
+std::vector<std::map<Axes::Coords, std::string>> SphericalConverter::createNameMaps() const
 {
     return {AxisNames::sphericalAxis0, AxisNames::sphericalAxis1};
 }
@@ -236,18 +236,18 @@ RectangularConverter* RectangularConverter::clone() const
     return new RectangularConverter(*this);
 }
 
-std::vector<Axes::Units> RectangularConverter::availableUnits() const
+std::vector<Axes::Coords> RectangularConverter::availableUnits() const
 {
     auto result = CoordSystem2D::availableUnits();
-    result.push_back(Axes::Units::QSPACE);
-    result.push_back(Axes::Units::MM);
+    result.push_back(Axes::Coords::QSPACE);
+    result.push_back(Axes::Coords::MM);
     return result;
 }
 
-double RectangularConverter::calculateValue(size_t i_axis, Axes::Units units, double value) const
+double RectangularConverter::calculateValue(size_t i_axis, Axes::Coords units, double value) const
 {
     ASSERT(m_wavelength>0);
-    if (units == Axes::Units::MM)
+    if (units == Axes::Coords::MM)
         return value;
     const auto k00 = m_detector_pixel->getPosition(0.0, 0.0);
     const auto k01 = m_detector_pixel->getPosition(0.0, 1.0);
@@ -258,18 +258,18 @@ double RectangularConverter::calculateValue(size_t i_axis, Axes::Units units, do
     const kvector_t k_f = out_dir.unit() * M_TWOPI / m_wavelength;
 
     switch (units) {
-    case Axes::Units::RADIANS:
+    case Axes::Coords::RADIANS:
         return axisAngle(i_axis, k_f);
-    case Axes::Units::DEGREES:
+    case Axes::Coords::DEGREES:
         return Units::rad2deg(axisAngle(i_axis, k_f));
-    case Axes::Units::QSPACE: {
+    case Axes::Coords::QSPACE: {
         const auto k_i = vecOfLambdaAlphaPhi(m_wavelength, m_alpha_i, m_phi_i);
         if (i_axis == 0)
             return (k_i - k_f).y();
         if (i_axis == 1)
             return (k_f - k_i).z();
     }
-    case Axes::Units::QXQY: {
+    case Axes::Coords::QXQY: {
         const auto k_i = vecOfLambdaAlphaPhi(m_wavelength, m_alpha_i, m_phi_i);
         if (i_axis == 0)
             return (k_i - k_f).y();
@@ -282,7 +282,7 @@ double RectangularConverter::calculateValue(size_t i_axis, Axes::Units units, do
     ASSERT(0);
 }
 
-std::vector<std::map<Axes::Units, std::string>> RectangularConverter::createNameMaps() const
+std::vector<std::map<Axes::Coords, std::string>> RectangularConverter::createNameMaps() const
 {
     return {AxisNames::rectangularAxis0, AxisNames::rectangularAxis1};
 }
@@ -314,24 +314,24 @@ OffSpecularConverter* OffSpecularConverter::clone() const
     return new OffSpecularConverter(*this);
 }
 
-Axes::Units OffSpecularConverter::defaultUnits() const
+Axes::Coords OffSpecularConverter::defaultUnits() const
 {
-    return Axes::Units::DEGREES;
+    return Axes::Coords::DEGREES;
 }
 
-double OffSpecularConverter::calculateValue(size_t, Axes::Units units, double value) const
+double OffSpecularConverter::calculateValue(size_t, Axes::Coords units, double value) const
 {
     switch (units) {
-    case Axes::Units::RADIANS:
+    case Axes::Coords::RADIANS:
         return value;
-    case Axes::Units::DEGREES:
+    case Axes::Coords::DEGREES:
         return Units::rad2deg(value);
     default:
         throwUnitsError("OffSpecularConverter::calculateValue", availableUnits());
     }
 }
 
-std::vector<std::map<Axes::Units, std::string>> OffSpecularConverter::createNameMaps() const
+std::vector<std::map<Axes::Coords, std::string>> OffSpecularConverter::createNameMaps() const
 {
     return {AxisNames::offSpecularAxis0, AxisNames::offSpecularAxis1};
 }
@@ -393,14 +393,14 @@ DepthProbeConverter* DepthProbeConverter::clone() const
     return new DepthProbeConverter(*this);
 }
 
-std::vector<Axes::Units> DepthProbeConverter::availableUnits() const
+std::vector<Axes::Coords> DepthProbeConverter::availableUnits() const
 {
     auto result = CoordSystem2D::availableUnits();
-    result.push_back(Axes::Units::QSPACE);
+    result.push_back(Axes::Coords::QSPACE);
     return result;
 }
 
-double DepthProbeConverter::calculateValue(size_t i_axis, Axes::Units units, double value) const
+double DepthProbeConverter::calculateValue(size_t i_axis, Axes::Coords units, double value) const
 {
     const auto& available_units = availableUnits();
     if (std::find(available_units.begin(), available_units.end(), units) == available_units.cend())
@@ -409,16 +409,16 @@ double DepthProbeConverter::calculateValue(size_t i_axis, Axes::Units units, dou
     if (i_axis == 1)
         return value; // unit conversions are not applied to sample position axis
     switch (units) {
-    case Axes::Units::DEGREES:
+    case Axes::Coords::DEGREES:
         return Units::rad2deg(value);
-    case Axes::Units::QSPACE:
+    case Axes::Coords::QSPACE:
         return getQ(m_wavelength, value);
     default:
         return value;
     }
 }
 
-std::vector<std::map<Axes::Units, std::string>> DepthProbeConverter::createNameMaps() const
+std::vector<std::map<Axes::Coords, std::string>> DepthProbeConverter::createNameMaps() const
 {
     return {AxisNames::specAxis, AxisNames::sampleDepthAxis};
 }
diff --git a/Device/Instrument/UnitConverter2D.h b/Device/Instrument/CoordSystem2D.h
similarity index 71%
rename from Device/Instrument/UnitConverter2D.h
rename to Device/Instrument/CoordSystem2D.h
index ccdb250cc54e3b4ccdc46f3e71b531af16fb5da9..0e4caa5ab25560546042805d1fb8d71c775493e6 100644
--- a/Device/Instrument/UnitConverter2D.h
+++ b/Device/Instrument/CoordSystem2D.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Device/Instrument/UnitConverter2D.h
+//! @file      Device/Instrument/CoordSystem2D.h
 //! @brief     Defines interface CoordSystem2D and its subclasses.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -17,8 +17,8 @@
 #endif
 
 #ifndef USER_API
-#ifndef BORNAGAIN_DEVICE_INSTRUMENT_UNITCONVERTER2D_H
-#define BORNAGAIN_DEVICE_INSTRUMENT_UNITCONVERTER2D_H
+#ifndef BORNAGAIN_DEVICE_INSTRUMENT_COORDSYSTEM2D_H
+#define BORNAGAIN_DEVICE_INSTRUMENT_COORDSYSTEM2D_H
 
 #include "Base/Vector/Vectors3D.h"
 #include "Device/Unit/ICoordSystem.h"
@@ -41,16 +41,16 @@ public:
 
     virtual size_t dimension() const override { return m_axis_data_table.size(); }
 
-    double calculateMin(size_t i_axis, Axes::Units units) const override;
-    double calculateMax(size_t i_axis, Axes::Units units) const override;
+    double calculateMin(size_t i_axis, Axes::Coords units) const override;
+    double calculateMax(size_t i_axis, Axes::Coords units) const override;
     size_t axisSize(size_t i_axis) const override;
 
     //! Returns list of units that are available for all 2D detectors.
     //! Further units may be added by child classes.
-    std::vector<Axes::Units> availableUnits() const override;
+    std::vector<Axes::Coords> availableUnits() const override;
 
     std::unique_ptr<const IAxis> createConvertedAxis(size_t i_axis,
-                                                     Axes::Units units) const override;
+                                                     Axes::Coords units) const override;
 
     //! Helper factory function to use in GISASSimulation. Depending on the type of detector,
     //! returns either RectangularConverter or SphericalConverter.
@@ -60,14 +60,14 @@ protected:
     CoordSystem2D(const CoordSystem2D& other);
     void addDetectorAxis(const IDetector& detector, size_t i_axis);
 
-    void addAxisData(std::string name, double min, double max, Axes::Units default_units,
+    void addAxisData(std::string name, double min, double max, Axes::Coords default_units,
                      size_t nbins);
 
 #ifndef SWIG
     struct AxisData {
         std::string name;
         double min, max;
-        Axes::Units default_units;
+        Axes::Coords default_units;
         size_t nbins;
     };
     std::vector<AxisData> m_axis_data_table;
@@ -77,7 +77,7 @@ protected:
     double m_phi_i;
 
 private:
-    virtual double calculateValue(size_t i_axis, Axes::Units units, double value) const = 0;
+    virtual double calculateValue(size_t i_axis, Axes::Coords units, double value) const = 0;
 };
 
 
@@ -94,14 +94,14 @@ public:
     SphericalConverter* clone() const override;
 
     //! Returns the list of all available units
-    std::vector<Axes::Units> availableUnits() const override;
+    std::vector<Axes::Coords> availableUnits() const override;
 
-    Axes::Units defaultUnits() const override { return Axes::Units::DEGREES; }
+    Axes::Coords defaultUnits() const override { return Axes::Coords::DEGREES; }
 
 private:
     SphericalConverter(const SphericalConverter& other); //!< used by clone()
-    double calculateValue(size_t i_axis, Axes::Units units, double value) const override;
-    std::vector<std::map<Axes::Units, std::string>> createNameMaps() const override;
+    double calculateValue(size_t i_axis, Axes::Coords units, double value) const override;
+    std::vector<std::map<Axes::Coords, std::string>> createNameMaps() const override;
 };
 
 
@@ -118,14 +118,14 @@ public:
     RectangularConverter* clone() const override;
 
     //! Returns the list of all available units
-    std::vector<Axes::Units> availableUnits() const override;
+    std::vector<Axes::Coords> availableUnits() const override;
 
-    Axes::Units defaultUnits() const override { return Axes::Units::MM; }
+    Axes::Coords defaultUnits() const override { return Axes::Coords::MM; }
 
 private:
     RectangularConverter(const RectangularConverter& other); //!< used by clone()
-    double calculateValue(size_t i_axis, Axes::Units units, double value) const override;
-    std::vector<std::map<Axes::Units, std::string>> createNameMaps() const override;
+    double calculateValue(size_t i_axis, Axes::Coords units, double value) const override;
+    std::vector<std::map<Axes::Coords, std::string>> createNameMaps() const override;
 
     std::unique_ptr<RectangularPixel> m_detector_pixel;
 };
@@ -144,12 +144,12 @@ public:
 
     OffSpecularConverter* clone() const override;
 
-    Axes::Units defaultUnits() const override;
+    Axes::Coords defaultUnits() const override;
 
 private:
     OffSpecularConverter(const OffSpecularConverter& other); //!< used by clone()
-    double calculateValue(size_t i_axis, Axes::Units units, double value) const override;
-    std::vector<std::map<Axes::Units, std::string>> createNameMaps() const override;
+    double calculateValue(size_t i_axis, Axes::Coords units, double value) const override;
+    std::vector<std::map<Axes::Coords, std::string>> createNameMaps() const override;
 
     void addDetectorYAxis(const IDetector2D& detector);
 };
@@ -168,15 +168,15 @@ public:
     DepthProbeConverter* clone() const override;
 
     //! Returns the list of all available units
-    std::vector<Axes::Units> availableUnits() const override;
+    std::vector<Axes::Coords> availableUnits() const override;
 
-    Axes::Units defaultUnits() const override { return Axes::Units::DEGREES; }
+    Axes::Coords defaultUnits() const override { return Axes::Coords::DEGREES; }
 
 private:
     DepthProbeConverter(const DepthProbeConverter& other); //!< used by clone()
-    double calculateValue(size_t, Axes::Units units, double value) const override;
-    std::vector<std::map<Axes::Units, std::string>> createNameMaps() const override;
+    double calculateValue(size_t, Axes::Coords units, double value) const override;
+    std::vector<std::map<Axes::Coords, std::string>> createNameMaps() const override;
 };
 
-#endif // BORNAGAIN_DEVICE_INSTRUMENT_UNITCONVERTER2D_H
+#endif // BORNAGAIN_DEVICE_INSTRUMENT_COORDSYSTEM2D_H
 #endif // USER_API
diff --git a/Device/Unit/AxisNames.cpp b/Device/Unit/AxisNames.cpp
index 17a0c53eecb04061012193e593aeddd12316e2d5..fdcb9ac747bddd2a42418d5cfb87f9d82e21a7e2 100644
--- a/Device/Unit/AxisNames.cpp
+++ b/Device/Unit/AxisNames.cpp
@@ -18,51 +18,51 @@
 namespace AxisNames {
 
 // For spherical detectors in GISAS simulations
-BA_DEVICE_API_ const std::map<Axes::Units, std::string> sphericalAxis0 = {
-    {Axes::Units::NBINS, "X [nbins]"},
-    {Axes::Units::RADIANS, "phi_f [rad]"},
-    {Axes::Units::DEGREES, "phi_f [deg]"},
-    {Axes::Units::QSPACE, "Qy [1/nm]"},
-    {Axes::Units::QXQY, "Qx [1/nm]"}};
-BA_DEVICE_API_ const std::map<Axes::Units, std::string> sphericalAxis1 = {
-    {Axes::Units::NBINS, "Y [nbins]"},
-    {Axes::Units::RADIANS, "alpha_f [rad]"},
-    {Axes::Units::DEGREES, "alpha_f [deg]"},
-    {Axes::Units::QSPACE, "Qz [1/nm]"},
-    {Axes::Units::QXQY, "Qy [1/nm]"}};
+BA_DEVICE_API_ const std::map<Axes::Coords, std::string> sphericalAxis0 = {
+    {Axes::Coords::NBINS, "X [nbins]"},
+    {Axes::Coords::RADIANS, "phi_f [rad]"},
+    {Axes::Coords::DEGREES, "phi_f [deg]"},
+    {Axes::Coords::QSPACE, "Qy [1/nm]"},
+    {Axes::Coords::QXQY, "Qx [1/nm]"}};
+BA_DEVICE_API_ const std::map<Axes::Coords, std::string> sphericalAxis1 = {
+    {Axes::Coords::NBINS, "Y [nbins]"},
+    {Axes::Coords::RADIANS, "alpha_f [rad]"},
+    {Axes::Coords::DEGREES, "alpha_f [deg]"},
+    {Axes::Coords::QSPACE, "Qz [1/nm]"},
+    {Axes::Coords::QXQY, "Qy [1/nm]"}};
 
 // For rectangular detectors in GISAS simulations
-BA_DEVICE_API_ const std::map<Axes::Units, std::string> rectangularAxis0 = {
-    {Axes::Units::NBINS, "X [nbins]"},     {Axes::Units::RADIANS, "phi_f [rad]"},
-    {Axes::Units::DEGREES, "phi_f [deg]"}, {Axes::Units::MM, "X [mm]"},
-    {Axes::Units::QSPACE, "Qy [1/nm]"},    {Axes::Units::QXQY, "Qx [1/nm]"}};
-BA_DEVICE_API_ const std::map<Axes::Units, std::string> rectangularAxis1 = {
-    {Axes::Units::NBINS, "Y [nbins]"},       {Axes::Units::RADIANS, "alpha_f [rad]"},
-    {Axes::Units::DEGREES, "alpha_f [deg]"}, {Axes::Units::MM, "Y [mm]"},
-    {Axes::Units::QSPACE, "Qz [1/nm]"},      {Axes::Units::QXQY, "Qy [1/nm]"}};
+BA_DEVICE_API_ const std::map<Axes::Coords, std::string> rectangularAxis0 = {
+    {Axes::Coords::NBINS, "X [nbins]"},     {Axes::Coords::RADIANS, "phi_f [rad]"},
+    {Axes::Coords::DEGREES, "phi_f [deg]"}, {Axes::Coords::MM, "X [mm]"},
+    {Axes::Coords::QSPACE, "Qy [1/nm]"},    {Axes::Coords::QXQY, "Qx [1/nm]"}};
+BA_DEVICE_API_ const std::map<Axes::Coords, std::string> rectangularAxis1 = {
+    {Axes::Coords::NBINS, "Y [nbins]"},       {Axes::Coords::RADIANS, "alpha_f [rad]"},
+    {Axes::Coords::DEGREES, "alpha_f [deg]"}, {Axes::Coords::MM, "Y [mm]"},
+    {Axes::Coords::QSPACE, "Qz [1/nm]"},      {Axes::Coords::QXQY, "Qy [1/nm]"}};
 
 // For off-specular simulations (both spherical and rectangular detectors)
 // Currently 'mm' is not supported for the y-axis
-BA_DEVICE_API_ const std::map<Axes::Units, std::string> offSpecularAxis0 = {
-    {Axes::Units::NBINS, "X [nbins]"},
-    {Axes::Units::RADIANS, "alpha_i [rad]"},
-    {Axes::Units::DEGREES, "alpha_i [deg]"}};
-BA_DEVICE_API_ const std::map<Axes::Units, std::string> offSpecularAxis1 = {
-    {Axes::Units::NBINS, "Y [nbins]"},
-    {Axes::Units::RADIANS, "alpha_f [rad]"},
-    {Axes::Units::DEGREES, "alpha_f [deg]"}};
+BA_DEVICE_API_ const std::map<Axes::Coords, std::string> offSpecularAxis0 = {
+    {Axes::Coords::NBINS, "X [nbins]"},
+    {Axes::Coords::RADIANS, "alpha_i [rad]"},
+    {Axes::Coords::DEGREES, "alpha_i [deg]"}};
+BA_DEVICE_API_ const std::map<Axes::Coords, std::string> offSpecularAxis1 = {
+    {Axes::Coords::NBINS, "Y [nbins]"},
+    {Axes::Coords::RADIANS, "alpha_f [rad]"},
+    {Axes::Coords::DEGREES, "alpha_f [deg]"}};
 
-BA_DEVICE_API_ const std::map<Axes::Units, std::string> specAxis = {
-    {Axes::Units::NBINS, "X [nbins]"},
-    {Axes::Units::RADIANS, "alpha_i [rad]"},
-    {Axes::Units::DEGREES, "alpha_i [deg]"},
-    {Axes::Units::QSPACE, "Q [1/nm]"},
-    {Axes::Units::RQ4, "Q [1/nm]"}};
+BA_DEVICE_API_ const std::map<Axes::Coords, std::string> specAxis = {
+    {Axes::Coords::NBINS, "X [nbins]"},
+    {Axes::Coords::RADIANS, "alpha_i [rad]"},
+    {Axes::Coords::DEGREES, "alpha_i [deg]"},
+    {Axes::Coords::QSPACE, "Q [1/nm]"},
+    {Axes::Coords::RQ4, "Q [1/nm]"}};
 
-BA_DEVICE_API_ const std::map<Axes::Units, std::string> specAxisQ = {
-    {Axes::Units::NBINS, "X [nbins]"},
-    {Axes::Units::QSPACE, "Q [1/nm]"},
-    {Axes::Units::RQ4, "Q [1/nm]"}};
+BA_DEVICE_API_ const std::map<Axes::Coords, std::string> specAxisQ = {
+    {Axes::Coords::NBINS, "X [nbins]"},
+    {Axes::Coords::QSPACE, "Q [1/nm]"},
+    {Axes::Coords::RQ4, "Q [1/nm]"}};
 
 // corner case: axis corresponding to the position
 // across sample is accepts only bins and nanometers,
@@ -71,10 +71,10 @@ BA_DEVICE_API_ const std::map<Axes::Units, std::string> specAxisQ = {
 // For this reason depth axis map returns always
 // nanometers except for bins.
 
-BA_DEVICE_API_ const std::map<Axes::Units, std::string> sampleDepthAxis = {
-    {Axes::Units::NBINS, "Y [nbins]"},
-    {Axes::Units::RADIANS, "Position [nm]"},
-    {Axes::Units::DEGREES, "Position [nm]"},
-    {Axes::Units::QSPACE, "Position [nm]"}};
+BA_DEVICE_API_ const std::map<Axes::Coords, std::string> sampleDepthAxis = {
+    {Axes::Coords::NBINS, "Y [nbins]"},
+    {Axes::Coords::RADIANS, "Position [nm]"},
+    {Axes::Coords::DEGREES, "Position [nm]"},
+    {Axes::Coords::QSPACE, "Position [nm]"}};
 
 } // namespace AxisNames
diff --git a/Device/Unit/AxisNames.h b/Device/Unit/AxisNames.h
index 06f0f370277eb1287cde757aab630803042d2e24..65ffc939af151c9ea25ee9f352320c79150f22db 100644
--- a/Device/Unit/AxisNames.h
+++ b/Device/Unit/AxisNames.h
@@ -25,28 +25,28 @@
 #include <map>
 #include <string>
 
-const std::map<Axes::Units, const char*> axisUnitLabel = {{Axes::Units::UNDEFINED, "undefined"},
-                                                          {Axes::Units::NBINS, "bin"},
-                                                          {Axes::Units::RADIANS, "rad"},
-                                                          {Axes::Units::DEGREES, "deg"},
-                                                          {Axes::Units::MM, "mm"},
-                                                          {Axes::Units::QSPACE, "1/nm"},
-                                                          {Axes::Units::QXQY, "1/nm"},
-                                                          {Axes::Units::RQ4, "nm^-4?"}};
+const std::map<Axes::Coords, const char*> axisUnitLabel = {{Axes::Coords::UNDEFINED, "undefined"},
+                                                          {Axes::Coords::NBINS, "bin"},
+                                                          {Axes::Coords::RADIANS, "rad"},
+                                                          {Axes::Coords::DEGREES, "deg"},
+                                                          {Axes::Coords::MM, "mm"},
+                                                          {Axes::Coords::QSPACE, "1/nm"},
+                                                          {Axes::Coords::QXQY, "1/nm"},
+                                                          {Axes::Coords::RQ4, "nm^-4?"}};
 
 //! Contains const maps that give the right axis names for different detector types and units
 //! @ingroup detector
 
 namespace AxisNames {
-extern BA_DEVICE_API_ const std::map<Axes::Units, std::string> sphericalAxis0;
-extern BA_DEVICE_API_ const std::map<Axes::Units, std::string> sphericalAxis1;
-extern BA_DEVICE_API_ const std::map<Axes::Units, std::string> rectangularAxis0;
-extern BA_DEVICE_API_ const std::map<Axes::Units, std::string> rectangularAxis1;
-extern BA_DEVICE_API_ const std::map<Axes::Units, std::string> offSpecularAxis0;
-extern BA_DEVICE_API_ const std::map<Axes::Units, std::string> offSpecularAxis1;
-extern BA_DEVICE_API_ const std::map<Axes::Units, std::string> specAxis;
-extern BA_DEVICE_API_ const std::map<Axes::Units, std::string> specAxisQ;
-extern BA_DEVICE_API_ const std::map<Axes::Units, std::string> sampleDepthAxis;
+extern BA_DEVICE_API_ const std::map<Axes::Coords, std::string> sphericalAxis0;
+extern BA_DEVICE_API_ const std::map<Axes::Coords, std::string> sphericalAxis1;
+extern BA_DEVICE_API_ const std::map<Axes::Coords, std::string> rectangularAxis0;
+extern BA_DEVICE_API_ const std::map<Axes::Coords, std::string> rectangularAxis1;
+extern BA_DEVICE_API_ const std::map<Axes::Coords, std::string> offSpecularAxis0;
+extern BA_DEVICE_API_ const std::map<Axes::Coords, std::string> offSpecularAxis1;
+extern BA_DEVICE_API_ const std::map<Axes::Coords, std::string> specAxis;
+extern BA_DEVICE_API_ const std::map<Axes::Coords, std::string> specAxisQ;
+extern BA_DEVICE_API_ const std::map<Axes::Coords, std::string> sampleDepthAxis;
 } // namespace AxisNames
 
 #endif // BORNAGAIN_DEVICE_UNIT_AXISNAMES_H
diff --git a/Device/Unit/IUnitConverter.cpp b/Device/Unit/ICoordSystem.cpp
similarity index 80%
rename from Device/Unit/IUnitConverter.cpp
rename to Device/Unit/ICoordSystem.cpp
index 9f5eaf63c8c72d532942900aabed2e86df5da78c..732025f220d3086d68695c817a8147fbcffa08f8 100644
--- a/Device/Unit/IUnitConverter.cpp
+++ b/Device/Unit/ICoordSystem.cpp
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Device/Unit/IUnitConverter.cpp
+//! @file      Device/Unit/ICoordSystem.cpp
 //! @brief     Implements ICoordSystem class.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -19,7 +19,7 @@
 
 ICoordSystem::~ICoordSystem() = default;
 
-std::unique_ptr<OutputData<double>> ICoordSystem::createOutputData(Axes::Units units) const
+std::unique_ptr<OutputData<double>> ICoordSystem::createOutputData(Axes::Coords units) const
 {
     std::unique_ptr<OutputData<double>> result = std::make_unique<OutputData<double>>();
     for (size_t i = 0; i < dimension(); ++i)
@@ -28,18 +28,18 @@ std::unique_ptr<OutputData<double>> ICoordSystem::createOutputData(Axes::Units u
     return result;
 }
 
-std::string ICoordSystem::axisName(size_t i_axis, const Axes::Units units) const
+std::string ICoordSystem::axisName(size_t i_axis, const Axes::Coords units) const
 {
     const auto& name_maps = createNameMaps();
     ASSERT(i_axis < name_maps.size());
     const auto& name_map = name_maps[i_axis];
-    const auto& it = name_map.find(units == Axes::Units::UNDEFINED ? defaultUnits() : units);
+    const auto& it = name_map.find(units == Axes::Coords::UNDEFINED ? defaultUnits() : units);
     ASSERT(it != name_map.cend());
     return it->second;
 }
 
 std::unique_ptr<OutputData<double>>
-ICoordSystem::createConvertedData(const OutputData<double>& data, Axes::Units units) const
+ICoordSystem::createConvertedData(const OutputData<double>& data, Axes::Coords units) const
 {
     std::unique_ptr<OutputData<double>> result(new OutputData<double>);
     for (size_t i = 0; i < data.rank(); ++i)
@@ -48,7 +48,7 @@ ICoordSystem::createConvertedData(const OutputData<double>& data, Axes::Units un
     return result;
 }
 
-void ICoordSystem::throwUnitsError(std::string method, std::vector<Axes::Units> available) const
+void ICoordSystem::throwUnitsError(std::string method, std::vector<Axes::Coords> available) const
 {
     std::stringstream ss;
     ss << "Unit type error in " << method
@@ -59,7 +59,7 @@ void ICoordSystem::throwUnitsError(std::string method, std::vector<Axes::Units>
     throw std::runtime_error(ss.str());
 }
 
-Axes::Units ICoordSystem::substituteDefaultUnits(Axes::Units units) const
+Axes::Coords ICoordSystem::substituteDefaultUnits(Axes::Coords units) const
 {
-    return units == Axes::Units::UNDEFINED ? defaultUnits() : units;
+    return units == Axes::Coords::UNDEFINED ? defaultUnits() : units;
 }
diff --git a/Device/Unit/IUnitConverter.h b/Device/Unit/ICoordSystem.h
similarity index 68%
rename from Device/Unit/IUnitConverter.h
rename to Device/Unit/ICoordSystem.h
index 528deef5ec03be6f3b4fbc62d8ca608edc5783f4..19d695596c83cbff5d12e7e4e00a5cf9dc5798c1 100644
--- a/Device/Unit/IUnitConverter.h
+++ b/Device/Unit/ICoordSystem.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Device/Unit/IUnitConverter.h
+//! @file      Device/Unit/ICoordSystem.h
 //! @brief     Defines interface ICoordSystem and possible axis units.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -17,8 +17,8 @@
 #endif
 
 #ifndef USER_API
-#ifndef BORNAGAIN_DEVICE_UNIT_IUNITCONVERTER_H
-#define BORNAGAIN_DEVICE_UNIT_IUNITCONVERTER_H
+#ifndef BORNAGAIN_DEVICE_UNIT_ICOORDSYSTEM_H
+#define BORNAGAIN_DEVICE_UNIT_ICOORDSYSTEM_H
 
 #include "Base/Types/ICloneable.h"
 #include "Device/Unit/Axes.h"
@@ -46,37 +46,37 @@ public:
     virtual ICoordSystem* clone() const = 0;
 
     //! Returns zero-valued output data array in specified units
-    std::unique_ptr<OutputData<double>> createOutputData(Axes::Units units) const;
+    std::unique_ptr<OutputData<double>> createOutputData(Axes::Coords units) const;
 
     virtual size_t dimension() const = 0;
 
-    virtual double calculateMin(size_t i_axis, Axes::Units units) const = 0;
-    virtual double calculateMax(size_t i_axis, Axes::Units units) const = 0;
+    virtual double calculateMin(size_t i_axis, Axes::Coords units) const = 0;
+    virtual double calculateMax(size_t i_axis, Axes::Coords units) const = 0;
     virtual size_t axisSize(size_t i_axis) const = 0;
 
-    std::string axisName(size_t i_axis, const Axes::Units units = Axes::Units::UNDEFINED) const;
+    std::string axisName(size_t i_axis, const Axes::Coords units = Axes::Coords::UNDEFINED) const;
 
-    virtual std::vector<Axes::Units> availableUnits() const = 0;
-    virtual Axes::Units defaultUnits() const = 0;
+    virtual std::vector<Axes::Coords> availableUnits() const = 0;
+    virtual Axes::Coords defaultUnits() const = 0;
 
 #ifndef SWIG
     virtual std::unique_ptr<const IAxis> createConvertedAxis(size_t i_axis,
-                                                             Axes::Units units) const = 0;
+                                                             Axes::Coords units) const = 0;
 
     //! Creates OutputData array in converter units.
     virtual std::unique_ptr<OutputData<double>> createConvertedData(const OutputData<double>& data,
-                                                                    Axes::Units units) const;
+                                                                    Axes::Coords units) const;
 #endif // SWIG
 
 protected:
-    Axes::Units substituteDefaultUnits(Axes::Units units) const;
+    Axes::Coords substituteDefaultUnits(Axes::Coords units) const;
 #ifndef SWIG
-    [[noreturn]] void throwUnitsError(std::string method, std::vector<Axes::Units> available) const;
+    [[noreturn]] void throwUnitsError(std::string method, std::vector<Axes::Coords> available) const;
 #endif // SWIG
 
 private:
-    virtual std::vector<std::map<Axes::Units, std::string>> createNameMaps() const = 0;
+    virtual std::vector<std::map<Axes::Coords, std::string>> createNameMaps() const = 0;
 };
 
-#endif // BORNAGAIN_DEVICE_UNIT_IUNITCONVERTER_H
+#endif // BORNAGAIN_DEVICE_UNIT_ICOORDSYSTEM_H
 #endif // USER_API
diff --git a/GUI/coregui/DataLoaders/AutomaticDataLoader1D.cpp b/GUI/coregui/DataLoaders/AutomaticDataLoader1D.cpp
index 30351dc77abb03b4ad017407167d9492ac764302..fa894cc5ab8ffaabe75e716927b001aebf4f4f23 100644
--- a/GUI/coregui/DataLoaders/AutomaticDataLoader1D.cpp
+++ b/GUI/coregui/DataLoaders/AutomaticDataLoader1D.cpp
@@ -92,7 +92,7 @@ void AutomaticDataLoader1D::processContents()
         std::stringstream str(m_fileContent.constData());
         auto oData = OutputDataReadReflectometry().readOutputData(str);
 
-        ImportDataInfo importInfo(std::move(*oData), Axes::Units::QSPACE);
+        ImportDataInfo importInfo(std::move(*oData), Axes::Coords::QSPACE);
         m_item->setImportData(std::move(importInfo));
         m_error.clear();
     } catch (std::runtime_error& ex) {
diff --git a/GUI/coregui/DataLoaders/QREDataLoader.cpp b/GUI/coregui/DataLoaders/QREDataLoader.cpp
index 6a6ed28972c9cc84a0338dc6844c0599ff6dd4e6..e36ac3c3e53ec7eeb8adc29add5afe11d4c006c5 100644
--- a/GUI/coregui/DataLoaders/QREDataLoader.cpp
+++ b/GUI/coregui/DataLoaders/QREDataLoader.cpp
@@ -551,7 +551,7 @@ void QREDataLoader::createOutputDataFromParsingResult(RealDataItem* item) const
     // -- Replacement of item->setImportData(std::move(data));
     item->initNativeData();
 
-    QString units_name = JobItemUtils::nameFromAxesUnits(Axes::Units::QSPACE);
+    QString units_name = JobItemUtils::nameFromAxesUnits(Axes::Coords::QSPACE);
 
     // -- Replacement of specularItem->reset(std::move(data));
     SpecularDataItem* specularItem = item->specularDataItem();
@@ -561,7 +561,7 @@ void QREDataLoader::createOutputDataFromParsingResult(RealDataItem* item) const
     specularItem->getItem(SpecularDataItem::P_AXES_UNITS)->setVisible(true);
 
     auto label_map = AxisNames::specAxis;
-    const auto xAxisTitle = QString::fromStdString(label_map[Axes::Units::QSPACE]);
+    const auto xAxisTitle = QString::fromStdString(label_map[Axes::Coords::QSPACE]);
     const auto yAxisTitle = "Signal [a.u.]"; // taken from ImportDataInfo::axisLabel
 
     specularItem->setXaxisTitle(xAxisTitle);
diff --git a/GUI/coregui/Models/DataViewUtils.cpp b/GUI/coregui/Models/DataViewUtils.cpp
index ddbbd3c1d5bd03cd1fa0643474ba7ab072c77610..ce55c8732147d4df610cc5f1dd050c2ef143b348 100644
--- a/GUI/coregui/Models/DataViewUtils.cpp
+++ b/GUI/coregui/Models/DataViewUtils.cpp
@@ -32,7 +32,7 @@ std::unique_ptr<ICoordSystem> getConverter(Data1DViewItem* view_item)
     return job_item->instrumentItem()->createCoordSystem();
 }
 
-Axes::Units selectedUnits(Data1DViewItem* view_item)
+Axes::Coords selectedUnits(Data1DViewItem* view_item)
 {
     auto current_unit_name =
         view_item->getItemValue(Data1DViewItem::P_AXES_UNITS).value<ComboProperty>().getValue();
diff --git a/GUI/coregui/Models/InstrumentItems.cpp b/GUI/coregui/Models/InstrumentItems.cpp
index a1ef4d0340ef058e39cf0020520e50deb3ebbd1e..8491d1697dff476c6387d3cada0cc8451519ceaf 100644
--- a/GUI/coregui/Models/InstrumentItems.cpp
+++ b/GUI/coregui/Models/InstrumentItems.cpp
@@ -209,12 +209,12 @@ std::unique_ptr<ICoordSystem> SpecularInstrumentItem::createCoordSystem() const
     if (auto pointwise_axis = dynamic_cast<PointwiseAxisItem*>(axis_item)) {
         if (!pointwise_axis->containsNonXMLData()) // workaround for loading project
             return nullptr;
-        Axes::Units native_units = JobItemUtils::axesUnitsFromName(pointwise_axis->getUnitsLabel());
+        Axes::Coords native_units = JobItemUtils::axesUnitsFromName(pointwise_axis->getUnitsLabel());
         return std::make_unique<AngularReflectometryConverter>(
             instrument->beam(), *pointwise_axis->axis(), native_units);
     } else
         return std::make_unique<AngularReflectometryConverter>(
-            instrument->beam(), *axis_item->createAxis(1.0), Axes::Units::DEGREES);
+            instrument->beam(), *axis_item->createAxis(1.0), Axes::Coords::DEGREES);
 }
 
 QString SpecularInstrumentItem::defaultName() const
diff --git a/GUI/coregui/Models/JobItemUtils.cpp b/GUI/coregui/Models/JobItemUtils.cpp
index c6f3282c926385501c5ae2e0622e5e2b1fe2b5dc..420d1fcfc093f8b37dab8f4ad65b69301d0d6f37 100644
--- a/GUI/coregui/Models/JobItemUtils.cpp
+++ b/GUI/coregui/Models/JobItemUtils.cpp
@@ -25,20 +25,20 @@
 
 namespace {
 
-const std::map<QString, Axes::Units> units_from_names{{"nbins", Axes::Units::NBINS},
-                                                      {"Radians", Axes::Units::RADIANS},
-                                                      {"Degrees", Axes::Units::DEGREES},
-                                                      {"mm", Axes::Units::MM},
-                                                      {"q-space", Axes::Units::QSPACE}};
-
-const std::map<Axes::Units, QString> names_from_units{{Axes::Units::NBINS, "nbins"},
-                                                      {Axes::Units::RADIANS, "Radians"},
-                                                      {Axes::Units::MM, "mm"},
-                                                      {Axes::Units::QSPACE, "q-space"},
-                                                      {Axes::Units::DEGREES, "Degrees"}};
+const std::map<QString, Axes::Coords> units_from_names{{"nbins", Axes::Coords::NBINS},
+                                                      {"Radians", Axes::Coords::RADIANS},
+                                                      {"Degrees", Axes::Coords::DEGREES},
+                                                      {"mm", Axes::Coords::MM},
+                                                      {"q-space", Axes::Coords::QSPACE}};
+
+const std::map<Axes::Coords, QString> names_from_units{{Axes::Coords::NBINS, "nbins"},
+                                                      {Axes::Coords::RADIANS, "Radians"},
+                                                      {Axes::Coords::MM, "mm"},
+                                                      {Axes::Coords::QSPACE, "q-space"},
+                                                      {Axes::Coords::DEGREES, "Degrees"}};
 
 //! Updates axes' titles
-void updateAxesTitle(DataItem* intensityItem, const ICoordSystem& converter, Axes::Units units)
+void updateAxesTitle(DataItem* intensityItem, const ICoordSystem& converter, Axes::Coords units)
 {
     intensityItem->setXaxisTitle(QString::fromStdString(converter.axisName(0, units)));
     if (converter.dimension() > 1)
@@ -65,7 +65,7 @@ void JobItemUtils::updateDataAxes(DataItem* intensityItem, const InstrumentItem*
     if (!intensityItem->getOutputData())
         return;
 
-    Axes::Units requested_units = axesUnitsFromName(intensityItem->selectedAxesUnits());
+    Axes::Coords requested_units = axesUnitsFromName(intensityItem->selectedAxesUnits());
 
     const auto converter = instrumentItem->createCoordSystem();
     auto newData = converter->createOutputData(requested_units);
@@ -78,7 +78,7 @@ void JobItemUtils::updateDataAxes(DataItem* intensityItem, const InstrumentItem*
 
 //! Correspondence of domain detector axes types to their GUI counterpart.
 
-QString JobItemUtils::nameFromAxesUnits(Axes::Units units)
+QString JobItemUtils::nameFromAxesUnits(Axes::Coords units)
 {
     const auto it = names_from_units.find(units);
     if (it == names_from_units.end())
@@ -88,7 +88,7 @@ QString JobItemUtils::nameFromAxesUnits(Axes::Units units)
 
 //! Correspondence of GUI axes units names to their domain counterpart.
 
-Axes::Units JobItemUtils::axesUnitsFromName(const QString& name)
+Axes::Coords JobItemUtils::axesUnitsFromName(const QString& name)
 {
     return units_from_names.at(name);
 }
diff --git a/GUI/coregui/Models/JobItemUtils.h b/GUI/coregui/Models/JobItemUtils.h
index 949c7be21b7f920accbf837de78b31c5b82dc7ac..6eb6f060bd7a6e366bf34089aecbb5a608234a5b 100644
--- a/GUI/coregui/Models/JobItemUtils.h
+++ b/GUI/coregui/Models/JobItemUtils.h
@@ -34,10 +34,10 @@ namespace JobItemUtils {
 void updateDataAxes(DataItem* intensityItem, const InstrumentItem* instrumentItem);
 
 //! returns axes units names from their domain counterpart
-QString nameFromAxesUnits(Axes::Units units);
+QString nameFromAxesUnits(Axes::Coords units);
 
 //! returns domain axes units type from their GUI name
-Axes::Units axesUnitsFromName(const QString& name);
+Axes::Coords axesUnitsFromName(const QString& name);
 
 void setIntensityItemAxesUnits(DataItem* intensityItem, const InstrumentItem* instrumentItem);
 
diff --git a/GUI/coregui/Models/PointwiseAxisItem.cpp b/GUI/coregui/Models/PointwiseAxisItem.cpp
index 27f02d6a780df5f120de639ad434f19d91c4dac0..646d707fb93924481eea01482a11d93d355d4c82 100644
--- a/GUI/coregui/Models/PointwiseAxisItem.cpp
+++ b/GUI/coregui/Models/PointwiseAxisItem.cpp
@@ -76,7 +76,7 @@ std::unique_ptr<IAxis> PointwiseAxisItem::createAxis(double scale) const
         return nullptr;
 
     const auto converter = m_instrument->createCoordSystem();
-    const auto converted_axis = converter->createConvertedAxis(0, Axes::Units::DEGREES);
+    const auto converted_axis = converter->createConvertedAxis(0, Axes::Coords::DEGREES);
 
     // applying scaling
     std::vector<double> centers = converted_axis->binCenters();
@@ -147,8 +147,8 @@ void PointwiseAxisItem::updateIndicators()
         return;
 
     const auto converter = m_instrument->createCoordSystem();
-    setLowerBound(converter->calculateMin(0, Axes::Units::DEGREES));
-    setUpperBound(converter->calculateMax(0, Axes::Units::DEGREES));
+    setLowerBound(converter->calculateMin(0, Axes::Coords::DEGREES));
+    setUpperBound(converter->calculateMax(0, Axes::Coords::DEGREES));
     setBinCount(static_cast<int>(m_axis->size()));
 
     emitDataChanged();
diff --git a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvDataColumn.cpp b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvDataColumn.cpp
index 2f68a9a26ff9cab897291f70288056019a3c98b2..bf652ba20a58f46d450cd372f2f47472d97567de 100644
--- a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvDataColumn.cpp
+++ b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvDataColumn.cpp
@@ -66,7 +66,7 @@ void CsvIntensityColumn::resetColumn(int colNum, double multiplier, csv::DataCol
 /*Csv Coordinate Column*/
 
 // Constructors:
-CsvCoordinateColumn::CsvCoordinateColumn() : CsvIntensityColumn(), m_units(Axes::Units::NBINS) {}
+CsvCoordinateColumn::CsvCoordinateColumn() : CsvIntensityColumn(), m_units(Axes::Coords::NBINS) {}
 
 CsvCoordinateColumn::CsvCoordinateColumn(const CsvCoordinateColumn& toCopy)
     : CsvIntensityColumn(toCopy), m_units(toCopy.units())
@@ -74,13 +74,13 @@ CsvCoordinateColumn::CsvCoordinateColumn(const CsvCoordinateColumn& toCopy)
 }
 
 CsvCoordinateColumn::CsvCoordinateColumn(int colNum, double multiplier, csv::DataColumn values,
-                                         Axes::Units units)
+                                         Axes::Coords units)
 
     : CsvIntensityColumn(colNum, multiplier, values), m_units(units)
 {
 }
 
-Axes::Units CsvCoordinateColumn::units() const
+Axes::Coords CsvCoordinateColumn::units() const
 {
     return m_units;
 }
@@ -90,7 +90,7 @@ void CsvCoordinateColumn::setName(csv::ColumnType const name)
     m_name = name;
 }
 void CsvCoordinateColumn::resetColumn(int colNum, double multiplier, csv::DataColumn values,
-                                      Axes::Units units, csv::ColumnType name)
+                                      Axes::Coords units, csv::ColumnType name)
 {
     CsvIntensityColumn::resetColumn(colNum, multiplier, values);
     m_units = units;
diff --git a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvDataColumn.h b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvDataColumn.h
index 4b610e9478733f0fe9ea9fd23635ddf668020be7..e651115820897aefe36c72da0b8976e3307772bf 100644
--- a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvDataColumn.h
+++ b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvDataColumn.h
@@ -47,20 +47,20 @@ public:
     // Constructors:
     CsvCoordinateColumn();
     CsvCoordinateColumn(const CsvCoordinateColumn& toCopy);
-    CsvCoordinateColumn(int colNum, double multiplier, csv::DataColumn values, Axes::Units units);
+    CsvCoordinateColumn(int colNum, double multiplier, csv::DataColumn values, Axes::Coords units);
 
     // Getters:
-    Axes::Units units() const;
+    Axes::Coords units() const;
     csv::ColumnType name() const { return m_name; }
 
     // Setters:
     void setName(csv::ColumnType const name);
     void resetColumn(int colNum = -1, double multiplier = 1., csv::DataColumn values = {},
-                     Axes::Units units = Axes::Units::NBINS,
+                     Axes::Coords units = Axes::Coords::NBINS,
                      csv::ColumnType name = csv::_intensity_);
 
 private:
-    Axes::Units m_units;
+    Axes::Coords m_units;
     csv::ColumnType m_name;
 };
 
diff --git a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportAssistant.cpp b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportAssistant.cpp
index 25f6fe5b98f51d588f65ed93f18f638a006a6f99..a72c6ba34edabbf84d31974b0faa4be6508b61a7 100644
--- a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportAssistant.cpp
+++ b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportAssistant.cpp
@@ -39,7 +39,7 @@ CsvImportAssistant::CsvImportAssistant(const QString& file, const bool useGUI, Q
     , m_coordinateMultiplier(1.0)
     , m_firstRow(-1)
     , m_lastRow(-1)
-    , m_units(Axes::Units::NBINS)
+    , m_units(Axes::Coords::NBINS)
     , m_dataAvailable(false)
 {
     if (!loadCsvFile()) {
@@ -51,7 +51,7 @@ CsvImportAssistant::CsvImportAssistant(const QString& file, const bool useGUI, Q
     } else {
         m_intensityColNum = 0;
         m_coordinateColNum = -1;
-        m_units = Axes::Units::NBINS;
+        m_units = Axes::Coords::NBINS;
         m_firstRow = 0;
         m_lastRow = int(m_csvFile->NumberOfRows() - 1);
         m_dataAvailable = true;
@@ -95,7 +95,7 @@ void CsvImportAssistant::setIntensityColumn(int iCol, double multiplier)
     m_intensityColNum = iCol - 1;
     m_intensityMultiplier = multiplier;
 }
-void CsvImportAssistant::setCoordinateColumn(int iCol, Axes::Units units, double multiplier)
+void CsvImportAssistant::setCoordinateColumn(int iCol, Axes::Coords units, double multiplier)
 {
     m_coordinateColNum = iCol - 1;
     m_units = units;
@@ -384,6 +384,6 @@ void CsvImportAssistant::resetSelection()
     m_coordinateColNum = -1;
     m_firstRow = -1;
     m_lastRow = -1;
-    m_units = Axes::Units::NBINS;
+    m_units = Axes::Coords::NBINS;
     m_dataAvailable = false;
 }
diff --git a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportAssistant.h b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportAssistant.h
index ccdc78149060768f3f7a7c52570887e0b578f620..231069f14057b8f5f73bce7a211472ee56eb6f9a 100644
--- a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportAssistant.h
+++ b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportAssistant.h
@@ -33,7 +33,7 @@ public:
         , m_coordinateMultiplier(1.)
         , m_firstRow(-1)
         , m_lastRow(-1)
-        , m_units(Axes::Units::NBINS)
+        , m_units(Axes::Coords::NBINS)
     {
     }
 
@@ -43,7 +43,7 @@ public:
     double m_coordinateMultiplier;
     int m_firstRow;
     int m_lastRow;
-    Axes::Units m_units;
+    Axes::Coords m_units;
 
     bool availableData() { return m_intensityColNum > -1; }
 };
@@ -55,7 +55,7 @@ public:
     CsvImportAssistant(const QString& file, const bool useGUI = false, QWidget* parent = nullptr);
     static void showErrorMessage(std::string message);
     void setIntensityColumn(int iCol, double multiplier = 1.0);
-    void setCoordinateColumn(int iCol, Axes::Units units, double multiplier = 1.0);
+    void setCoordinateColumn(int iCol, Axes::Coords units, double multiplier = 1.0);
     void setFirstRow(int iRow);
     void setLastRow(int iRow);
     size_t columnCount() { return m_csvArray[0].size(); }
@@ -84,7 +84,7 @@ private:
     int m_firstRow;
     int m_lastRow;
     std::set<int> m_rowsToDiscard;
-    Axes::Units m_units;
+    Axes::Coords m_units;
     bool m_dataAvailable;
 };
 #endif // BORNAGAIN_GUI_COREGUI_VIEWS_IMPORTDATAWIDGETS_CSVIMPORTASSISTANT_CSVIMPORTASSISTANT_H
diff --git a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportTable.cpp b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportTable.cpp
index ad1e1bf7b6a7e665c0f196b5d2f893c822b9c79d..a28be408a6e46f1390389d25a998e76853989a89 100644
--- a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportTable.cpp
+++ b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/CsvImportTable.cpp
@@ -168,14 +168,14 @@ QString CsvImportData::columnLabel(CsvImportData::DATA_TYPE type) const
 QList<QString> CsvImportData::availableCoordinateUnits() const
 {
     if (column(Coordinate) < 0)
-        return {axisUnitLabel.at(Axes::Units::NBINS)};
+        return {axisUnitLabel.at(Axes::Coords::NBINS)};
 
     auto coordinate_type = m_selected_cols.at(Coordinate).name();
     if (coordinate_type == csv::_q_)
-        return {axisUnitLabel.at(Axes::Units::QSPACE)};
+        return {axisUnitLabel.at(Axes::Coords::QSPACE)};
     else if (coordinate_type == csv::_theta_)
-        return {{axisUnitLabel.at(Axes::Units::DEGREES)}, {axisUnitLabel.at(Axes::Units::RADIANS)}};
-    return {axisUnitLabel.at(Axes::Units::NBINS)};
+        return {{axisUnitLabel.at(Axes::Coords::DEGREES)}, {axisUnitLabel.at(Axes::Coords::RADIANS)}};
+    return {axisUnitLabel.at(Axes::Coords::NBINS)};
 }
 
 size_t CsvImportData::nCols() const
diff --git a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/DataSelector.cpp b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/DataSelector.cpp
index 9f77e942b7c64ecb0e64a4238f22652ce0581c96..d7fb7ad8292abdb615d0730cef529a8867cc54b3 100644
--- a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/DataSelector.cpp
+++ b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/DataSelector.cpp
@@ -143,7 +143,7 @@ void DataSelector::updateSelection()
         m_coordinateUnitsComboBox->setEnabled(true);
     } else {
         m_coordinateUnitsComboBox->clear();
-        m_coordinateUnitsComboBox->addItem(axisUnitLabel.at(Axes::Units::NBINS));
+        m_coordinateUnitsComboBox->addItem(axisUnitLabel.at(Axes::Coords::NBINS));
     }
 }
 
@@ -227,14 +227,14 @@ size_t DataSelector::maxLines() const
     return size_t(m_lastDataRowSpinBox->maximum());
 }
 
-Axes::Units DataSelector::units() const
+Axes::Coords DataSelector::units() const
 {
     for (int i = 0; i < csv::UnitsLabels.size(); i++) {
-        const Axes::Units u = static_cast<Axes::Units>(i);
+        const Axes::Coords u = static_cast<Axes::Coords>(i);
         if (m_coordinateUnitsComboBox->currentText() == QString(axisUnitLabel.at(u)))
             return u;
     }
-    return Axes::Units::NBINS; // default
+    return Axes::Coords::NBINS; // default
 }
 
 char DataSelector::separator() const
@@ -327,7 +327,7 @@ QBoxLayout* DataSelector::createLayout()
     m_coordinateUnitsComboBox = new QComboBox();
     m_coordinateUnitsComboBox->setMaximumWidth(70);
     m_coordinateUnitsComboBox->setMinimumWidth(70);
-    m_coordinateUnitsComboBox->addItem(axisUnitLabel.at(Axes::Units::NBINS));
+    m_coordinateUnitsComboBox->addItem(axisUnitLabel.at(Axes::Coords::NBINS));
 
     auto layout = new QVBoxLayout;
     layout->setContentsMargins(0, 0, 0, 0);
diff --git a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/DataSelector.h b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/DataSelector.h
index 49fcbcd3682d40a2f6506cdf1a3c3996596bc3d6..2cefcad940fb9506858d84adb11dd71d6ba9880f 100644
--- a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/DataSelector.h
+++ b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant/DataSelector.h
@@ -40,7 +40,7 @@ public:
     double intensityMultiplier() const { return m_tableWidget->intensityMultiplier(); }
     double coordinateMultiplier() const { return m_tableWidget->coordinateMultiplier(); }
     std::set<int> rowsToDiscard() const { return m_tableWidget->rowsToDiscard(); }
-    Axes::Units units() const;
+    Axes::Coords units() const;
     void setDataArray(csv::DataArray csvArray)
     {
         m_data = std::move(csvArray);
diff --git a/GUI/coregui/Views/ImportDataWidgets/ImportDataUtils.cpp b/GUI/coregui/Views/ImportDataWidgets/ImportDataUtils.cpp
index 09233b697186fcccbf235b7ad8e75957d8f034a9..719e849113e3c1be3df29eeed89fb766834d1da3 100644
--- a/GUI/coregui/Views/ImportDataWidgets/ImportDataUtils.cpp
+++ b/GUI/coregui/Views/ImportDataWidgets/ImportDataUtils.cpp
@@ -93,7 +93,7 @@ QString ImportDataUtils::Import1dData(RealDataItem* realDataItem,
             || DataFormatUtils::isIntFile(fileNameStdString)
             || DataFormatUtils::isTiffFile(fileNameStdString)) {
             try {
-                ImportDataInfo info(ImportKnownData(fileName), Axes::Units::QSPACE);
+                ImportDataInfo info(ImportKnownData(fileName), Axes::Coords::QSPACE);
                 if (info) {
                     realDataItem->setImportData(std::move(info));
                     return QString();
diff --git a/GUI/coregui/utils/ImportDataInfo.cpp b/GUI/coregui/utils/ImportDataInfo.cpp
index 11e0f748dd529df76e739a6669dd368144814bcf..979e2eb62ae6b49e109db391dc6e0b37ceee9953 100644
--- a/GUI/coregui/utils/ImportDataInfo.cpp
+++ b/GUI/coregui/utils/ImportDataInfo.cpp
@@ -19,17 +19,17 @@
 #include "GUI/coregui/utils/GUIHelpers.h"
 
 namespace {
-std::vector<Axes::Units> specularUnits()
+std::vector<Axes::Coords> specularUnits()
 {
-    std::vector<Axes::Units> result;
+    std::vector<Axes::Coords> result;
     for (auto& pair : AxisNames::specAxis)
         result.push_back(pair.first);
     return result;
 }
 
 // map: data rank --> available units
-std::map<size_t, std::vector<Axes::Units>> available_units = {{1u, specularUnits()},
-                                                              {2u, {Axes::Units::NBINS}}};
+std::map<size_t, std::vector<Axes::Coords>> available_units = {{1u, specularUnits()},
+                                                              {2u, {Axes::Coords::NBINS}}};
 } // namespace
 
 ImportDataInfo::ImportDataInfo(ImportDataInfo&& other)
@@ -37,8 +37,8 @@ ImportDataInfo::ImportDataInfo(ImportDataInfo&& other)
 {
 }
 
-ImportDataInfo::ImportDataInfo(std::unique_ptr<OutputData<double>> data, Axes::Units units)
-    : m_data(units == Axes::Units::NBINS && data ? ImportDataUtils::binifyAxes(*data)
+ImportDataInfo::ImportDataInfo(std::unique_ptr<OutputData<double>> data, Axes::Coords units)
+    : m_data(units == Axes::Coords::NBINS && data ? ImportDataUtils::binifyAxes(*data)
                                                  : std::move(data))
     , m_units(units)
 {
@@ -51,7 +51,7 @@ ImportDataInfo::ImportDataInfo(std::unique_ptr<OutputData<double>> data, const Q
     checkValidity();
 }
 
-ImportDataInfo::ImportDataInfo(OutputData<double>&& data, Axes::Units units)
+ImportDataInfo::ImportDataInfo(OutputData<double>&& data, Axes::Coords units)
     : ImportDataInfo(std::unique_ptr<OutputData<double>>(new OutputData<double>(std::move(data))),
                      units)
 {
diff --git a/GUI/coregui/utils/ImportDataInfo.h b/GUI/coregui/utils/ImportDataInfo.h
index c7cf58952b07be3ffee4c33c2e6a72b06f798701..6649eb07f8cff06cd920f74b81d3e300178b73bc 100644
--- a/GUI/coregui/utils/ImportDataInfo.h
+++ b/GUI/coregui/utils/ImportDataInfo.h
@@ -27,8 +27,8 @@ class ImportDataInfo {
 public:
     ImportDataInfo() = delete;
     ImportDataInfo(ImportDataInfo&& other);
-    ImportDataInfo(std::unique_ptr<OutputData<double>> data, Axes::Units units);
-    ImportDataInfo(OutputData<double>&& data, Axes::Units units);
+    ImportDataInfo(std::unique_ptr<OutputData<double>> data, Axes::Coords units);
+    ImportDataInfo(OutputData<double>&& data, Axes::Coords units);
     ImportDataInfo(std::unique_ptr<OutputData<double>> data, const QString& units);
     ~ImportDataInfo();
 
@@ -49,7 +49,7 @@ private:
 
 private:
     std::unique_ptr<OutputData<double>> m_data;
-    Axes::Units m_units;
+    Axes::Coords m_units;
 };
 
 #endif // BORNAGAIN_GUI_COREGUI_UTILS_IMPORTDATAINFO_H
diff --git a/Tests/UnitTests/Core/Axes/UnitConverter1DTest.cpp b/Tests/UnitTests/Core/Axes/CoordSystem1DTest.cpp
similarity index 68%
rename from Tests/UnitTests/Core/Axes/UnitConverter1DTest.cpp
rename to Tests/UnitTests/Core/Axes/CoordSystem1DTest.cpp
index ec66f3fb1cc7d61686525d7725f98df1e4132b42..405598d0a93dd37cc478eb4cea45357ea215a884 100644
--- a/Tests/UnitTests/Core/Axes/UnitConverter1DTest.cpp
+++ b/Tests/UnitTests/Core/Axes/CoordSystem1DTest.cpp
@@ -34,59 +34,59 @@ CoordSystem1DTest::CoordSystem1DTest()
 void CoordSystem1DTest::checkConventionalConverter(const CoordSystem1D& test_object)
 {
     double expected_min = m_axis.binCenter(0);
-    EXPECT_NEAR(test_object.calculateMin(0, Axes::Units::UNDEFINED), Units::rad2deg(expected_min),
+    EXPECT_NEAR(test_object.calculateMin(0, Axes::Coords::UNDEFINED), Units::rad2deg(expected_min),
                 Units::rad2deg(expected_min) * 1e-10);
-    EXPECT_NEAR(test_object.calculateMin(0, Axes::Units::NBINS), 0.0, 1e-10);
-    EXPECT_NEAR(test_object.calculateMin(0, Axes::Units::RADIANS), expected_min,
+    EXPECT_NEAR(test_object.calculateMin(0, Axes::Coords::NBINS), 0.0, 1e-10);
+    EXPECT_NEAR(test_object.calculateMin(0, Axes::Coords::RADIANS), expected_min,
                 expected_min * 1e-10);
-    EXPECT_NEAR(test_object.calculateMin(0, Axes::Units::DEGREES), Units::rad2deg(expected_min),
+    EXPECT_NEAR(test_object.calculateMin(0, Axes::Coords::DEGREES), Units::rad2deg(expected_min),
                 Units::rad2deg(expected_min) * 1e-10);
-    EXPECT_NEAR(test_object.calculateMin(0, Axes::Units::QSPACE), getQ(expected_min),
+    EXPECT_NEAR(test_object.calculateMin(0, Axes::Coords::QSPACE), getQ(expected_min),
                 getQ(expected_min) * 1e-10);
-    EXPECT_NEAR(test_object.calculateMin(0, Axes::Units::RQ4), getQ(expected_min),
+    EXPECT_NEAR(test_object.calculateMin(0, Axes::Coords::RQ4), getQ(expected_min),
                 getQ(expected_min) * 1e-10);
 
     double expected_max = m_axis.binCenters().back();
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::UNDEFINED), Units::rad2deg(expected_max),
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::UNDEFINED), Units::rad2deg(expected_max),
                 Units::rad2deg(expected_max) * 1e-10);
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::NBINS), static_cast<double>(m_axis.size()),
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::NBINS), static_cast<double>(m_axis.size()),
                 1e-10);
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::RADIANS), expected_max,
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::RADIANS), expected_max,
                 expected_max * 1e-10);
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::DEGREES), Units::rad2deg(expected_max),
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::DEGREES), Units::rad2deg(expected_max),
                 Units::rad2deg(expected_max) * 1e-10);
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::QSPACE), getQ(expected_max),
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::QSPACE), getQ(expected_max),
                 getQ(expected_max) * 1e-10);
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::RQ4), getQ(expected_max),
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::RQ4), getQ(expected_max),
                 getQ(expected_max) * 1e-10);
 
     // DEFAULT
-    auto axis_default = test_object.createConvertedAxis(0, Axes::Units::UNDEFINED);
+    auto axis_default = test_object.createConvertedAxis(0, Axes::Coords::UNDEFINED);
     EXPECT_TRUE(dynamic_cast<const PointwiseAxis*>(axis_default.get()));
     EXPECT_EQ(axis_default->size(), test_object.axisSize(0));
-    EXPECT_EQ(axis_default->lowerBound(), test_object.calculateMin(0, Axes::Units::UNDEFINED));
-    EXPECT_EQ(axis_default->upperBound(), test_object.calculateMax(0, Axes::Units::UNDEFINED));
+    EXPECT_EQ(axis_default->lowerBound(), test_object.calculateMin(0, Axes::Coords::UNDEFINED));
+    EXPECT_EQ(axis_default->upperBound(), test_object.calculateMax(0, Axes::Coords::UNDEFINED));
 
     // QSPACE
-    auto axis_qspace = test_object.createConvertedAxis(0, Axes::Units::QSPACE);
+    auto axis_qspace = test_object.createConvertedAxis(0, Axes::Coords::QSPACE);
     EXPECT_TRUE(dynamic_cast<const PointwiseAxis*>(axis_qspace.get()));
     EXPECT_EQ(axis_qspace->size(), test_object.axisSize(0));
-    EXPECT_EQ(axis_qspace->lowerBound(), test_object.calculateMin(0, Axes::Units::QSPACE));
-    EXPECT_EQ(axis_qspace->upperBound(), test_object.calculateMax(0, Axes::Units::QSPACE));
+    EXPECT_EQ(axis_qspace->lowerBound(), test_object.calculateMin(0, Axes::Coords::QSPACE));
+    EXPECT_EQ(axis_qspace->upperBound(), test_object.calculateMax(0, Axes::Coords::QSPACE));
 
     // NBINS
-    auto axis_nbins = test_object.createConvertedAxis(0, Axes::Units::NBINS);
+    auto axis_nbins = test_object.createConvertedAxis(0, Axes::Coords::NBINS);
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis_nbins.get()));
     EXPECT_EQ(axis_nbins->size(), test_object.axisSize(0));
-    EXPECT_EQ(axis_nbins->lowerBound(), test_object.calculateMin(0, Axes::Units::NBINS));
-    EXPECT_EQ(axis_nbins->upperBound(), test_object.calculateMax(0, Axes::Units::NBINS));
+    EXPECT_EQ(axis_nbins->lowerBound(), test_object.calculateMin(0, Axes::Coords::NBINS));
+    EXPECT_EQ(axis_nbins->upperBound(), test_object.calculateMax(0, Axes::Coords::NBINS));
 
     // RQ4
-    auto axis_rq4 = test_object.createConvertedAxis(0, Axes::Units::RQ4);
+    auto axis_rq4 = test_object.createConvertedAxis(0, Axes::Coords::RQ4);
     EXPECT_TRUE(dynamic_cast<const PointwiseAxis*>(axis_rq4.get()));
     EXPECT_EQ(axis_rq4->size(), test_object.axisSize(0));
-    EXPECT_EQ(axis_rq4->lowerBound(), test_object.calculateMin(0, Axes::Units::RQ4));
-    EXPECT_EQ(axis_rq4->upperBound(), test_object.calculateMax(0, Axes::Units::RQ4));
+    EXPECT_EQ(axis_rq4->lowerBound(), test_object.calculateMin(0, Axes::Coords::RQ4));
+    EXPECT_EQ(axis_rq4->upperBound(), test_object.calculateMax(0, Axes::Coords::RQ4));
     EXPECT_TRUE(*axis_rq4 == *axis_qspace);
 
     OutputData<double> fake_data;
@@ -95,13 +95,13 @@ void CoordSystem1DTest::checkConventionalConverter(const CoordSystem1D& test_obj
     fake_data.setRawDataVector(raw_fake);
 
     // NBINS
-    auto data_nbins = test_object.createConvertedData(fake_data, Axes::Units::NBINS);
+    auto data_nbins = test_object.createConvertedData(fake_data, Axes::Coords::NBINS);
     EXPECT_EQ(data_nbins->axis(0), *axis_nbins);
     EXPECT_EQ(data_nbins->getAllocatedSize(), axis_nbins->size());
     EXPECT_EQ(raw_fake, data_nbins->getRawDataVector());
 
     // RQ4
-    auto data_rq4 = test_object.createConvertedData(fake_data, Axes::Units::RQ4);
+    auto data_rq4 = test_object.createConvertedData(fake_data, Axes::Coords::RQ4);
     EXPECT_EQ(data_rq4->axis(0), *axis_rq4);
     auto raw_data_rq4 = data_rq4->getRawDataVector();
     EXPECT_EQ(raw_data_rq4.size(), raw_fake.size());
@@ -115,46 +115,46 @@ void CoordSystem1DTest::checkConventionalConverter(const CoordSystem1D& test_obj
 void CoordSystem1DTest::checkQSpecConverter(const CoordSystem1D& test_object)
 {
     double expected_min = m_q_axis.binCenter(0);
-    EXPECT_EQ(test_object.calculateMin(0, Axes::Units::UNDEFINED), expected_min);
-    EXPECT_NEAR(test_object.calculateMin(0, Axes::Units::NBINS), 0.0, 1e-10);
-    EXPECT_EQ(test_object.calculateMin(0, Axes::Units::QSPACE), expected_min);
-    EXPECT_EQ(test_object.calculateMin(0, Axes::Units::RQ4), expected_min);
+    EXPECT_EQ(test_object.calculateMin(0, Axes::Coords::UNDEFINED), expected_min);
+    EXPECT_NEAR(test_object.calculateMin(0, Axes::Coords::NBINS), 0.0, 1e-10);
+    EXPECT_EQ(test_object.calculateMin(0, Axes::Coords::QSPACE), expected_min);
+    EXPECT_EQ(test_object.calculateMin(0, Axes::Coords::RQ4), expected_min);
 
     double expected_max = m_q_axis.binCenters().back();
-    EXPECT_EQ(test_object.calculateMax(0, Axes::Units::UNDEFINED), expected_max);
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::NBINS),
+    EXPECT_EQ(test_object.calculateMax(0, Axes::Coords::UNDEFINED), expected_max);
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::NBINS),
                 static_cast<double>(m_q_axis.size()), 1e-10);
-    EXPECT_EQ(test_object.calculateMax(0, Axes::Units::QSPACE), expected_max);
-    EXPECT_EQ(test_object.calculateMax(0, Axes::Units::RQ4), expected_max);
+    EXPECT_EQ(test_object.calculateMax(0, Axes::Coords::QSPACE), expected_max);
+    EXPECT_EQ(test_object.calculateMax(0, Axes::Coords::RQ4), expected_max);
 
     // DEFAULT
-    auto axis_default = test_object.createConvertedAxis(0, Axes::Units::UNDEFINED);
+    auto axis_default = test_object.createConvertedAxis(0, Axes::Coords::UNDEFINED);
     EXPECT_TRUE(dynamic_cast<const PointwiseAxis*>(axis_default.get()));
     EXPECT_EQ(axis_default->size(), test_object.axisSize(0));
-    EXPECT_EQ(axis_default->lowerBound(), test_object.calculateMin(0, Axes::Units::UNDEFINED));
-    EXPECT_EQ(axis_default->upperBound(), test_object.calculateMax(0, Axes::Units::UNDEFINED));
+    EXPECT_EQ(axis_default->lowerBound(), test_object.calculateMin(0, Axes::Coords::UNDEFINED));
+    EXPECT_EQ(axis_default->upperBound(), test_object.calculateMax(0, Axes::Coords::UNDEFINED));
 
     // QSPACE
-    auto axis_qspace = test_object.createConvertedAxis(0, Axes::Units::QSPACE);
+    auto axis_qspace = test_object.createConvertedAxis(0, Axes::Coords::QSPACE);
     EXPECT_TRUE(dynamic_cast<const PointwiseAxis*>(axis_qspace.get()));
     EXPECT_EQ(axis_qspace->size(), test_object.axisSize(0));
-    EXPECT_EQ(axis_qspace->lowerBound(), test_object.calculateMin(0, Axes::Units::QSPACE));
-    EXPECT_EQ(axis_qspace->upperBound(), test_object.calculateMax(0, Axes::Units::QSPACE));
+    EXPECT_EQ(axis_qspace->lowerBound(), test_object.calculateMin(0, Axes::Coords::QSPACE));
+    EXPECT_EQ(axis_qspace->upperBound(), test_object.calculateMax(0, Axes::Coords::QSPACE));
     EXPECT_EQ(*axis_default, *axis_qspace);
 
     // NBINS
-    auto axis_nbins = test_object.createConvertedAxis(0, Axes::Units::NBINS);
+    auto axis_nbins = test_object.createConvertedAxis(0, Axes::Coords::NBINS);
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis_nbins.get()));
     EXPECT_EQ(axis_nbins->size(), test_object.axisSize(0));
-    EXPECT_EQ(axis_nbins->lowerBound(), test_object.calculateMin(0, Axes::Units::NBINS));
-    EXPECT_EQ(axis_nbins->upperBound(), test_object.calculateMax(0, Axes::Units::NBINS));
+    EXPECT_EQ(axis_nbins->lowerBound(), test_object.calculateMin(0, Axes::Coords::NBINS));
+    EXPECT_EQ(axis_nbins->upperBound(), test_object.calculateMax(0, Axes::Coords::NBINS));
 
     // RQ4
-    auto axis_rq4 = test_object.createConvertedAxis(0, Axes::Units::RQ4);
+    auto axis_rq4 = test_object.createConvertedAxis(0, Axes::Coords::RQ4);
     EXPECT_TRUE(dynamic_cast<const PointwiseAxis*>(axis_rq4.get()));
     EXPECT_EQ(axis_rq4->size(), test_object.axisSize(0));
-    EXPECT_EQ(axis_rq4->lowerBound(), test_object.calculateMin(0, Axes::Units::RQ4));
-    EXPECT_EQ(axis_rq4->upperBound(), test_object.calculateMax(0, Axes::Units::RQ4));
+    EXPECT_EQ(axis_rq4->lowerBound(), test_object.calculateMin(0, Axes::Coords::RQ4));
+    EXPECT_EQ(axis_rq4->upperBound(), test_object.calculateMax(0, Axes::Coords::RQ4));
     EXPECT_TRUE(*axis_rq4 == *axis_qspace);
 
     OutputData<double> fake_data;
@@ -163,13 +163,13 @@ void CoordSystem1DTest::checkQSpecConverter(const CoordSystem1D& test_object)
     fake_data.setRawDataVector(raw_fake);
 
     // NBINS
-    auto data_nbins = test_object.createConvertedData(fake_data, Axes::Units::NBINS);
+    auto data_nbins = test_object.createConvertedData(fake_data, Axes::Coords::NBINS);
     EXPECT_EQ(data_nbins->axis(0), *axis_nbins);
     EXPECT_EQ(data_nbins->getAllocatedSize(), axis_nbins->size());
     EXPECT_EQ(raw_fake, data_nbins->getRawDataVector());
 
     // RQ4
-    auto data_rq4 = test_object.createConvertedData(fake_data, Axes::Units::RQ4);
+    auto data_rq4 = test_object.createConvertedData(fake_data, Axes::Coords::RQ4);
     EXPECT_EQ(data_rq4->axis(0), *axis_rq4);
     auto raw_data_rq4 = data_rq4->getRawDataVector();
     EXPECT_EQ(raw_data_rq4.size(), raw_fake.size());
@@ -190,32 +190,32 @@ TEST_F(CoordSystem1DTest, Exceptions)
 {
     AngularReflectometryConverter converter(m_beam, m_axis);
 
-    EXPECT_THROW(converter.calculateMin(0, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.calculateMin(1, Axes::Units::RADIANS), std::runtime_error);
+    EXPECT_THROW(converter.calculateMin(0, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.calculateMin(1, Axes::Coords::RADIANS), std::runtime_error);
 
-    EXPECT_THROW(converter.calculateMax(0, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.calculateMax(1, Axes::Units::RADIANS), std::runtime_error);
+    EXPECT_THROW(converter.calculateMax(0, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.calculateMax(1, Axes::Coords::RADIANS), std::runtime_error);
 
-    EXPECT_THROW(converter.createConvertedAxis(0, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.createConvertedAxis(1, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.createConvertedAxis(0, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.createConvertedAxis(1, Axes::Coords::UNDEFINED), std::runtime_error);
 
     FixedBinAxis axis("Angles", 100, 0.0, 2.0 * M_PI);
     EXPECT_THROW(AngularReflectometryConverter converter2(m_beam, axis), std::runtime_error);
 
     WavenumberReflectometryConverter converter2(m_qscan);
     // wrong units
-    EXPECT_THROW(converter2.calculateMin(0, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter2.calculateMin(0, Axes::Units::RADIANS), std::runtime_error);
-    EXPECT_THROW(converter2.calculateMin(0, Axes::Units::DEGREES), std::runtime_error);
-    EXPECT_THROW(converter2.calculateMax(0, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter2.calculateMax(0, Axes::Units::RADIANS), std::runtime_error);
-    EXPECT_THROW(converter2.calculateMax(0, Axes::Units::DEGREES), std::runtime_error);
-    EXPECT_THROW(converter2.createConvertedAxis(0, Axes::Units::MM), std::runtime_error);
+    EXPECT_THROW(converter2.calculateMin(0, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter2.calculateMin(0, Axes::Coords::RADIANS), std::runtime_error);
+    EXPECT_THROW(converter2.calculateMin(0, Axes::Coords::DEGREES), std::runtime_error);
+    EXPECT_THROW(converter2.calculateMax(0, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter2.calculateMax(0, Axes::Coords::RADIANS), std::runtime_error);
+    EXPECT_THROW(converter2.calculateMax(0, Axes::Coords::DEGREES), std::runtime_error);
+    EXPECT_THROW(converter2.createConvertedAxis(0, Axes::Coords::MM), std::runtime_error);
 
     // wrong axis index
-    EXPECT_THROW(converter2.calculateMin(1, Axes::Units::QSPACE), std::runtime_error);
-    EXPECT_THROW(converter2.calculateMax(1, Axes::Units::RQ4), std::runtime_error);
-    EXPECT_THROW(converter2.createConvertedAxis(1, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter2.calculateMin(1, Axes::Coords::QSPACE), std::runtime_error);
+    EXPECT_THROW(converter2.calculateMax(1, Axes::Coords::RQ4), std::runtime_error);
+    EXPECT_THROW(converter2.createConvertedAxis(1, Axes::Coords::UNDEFINED), std::runtime_error);
 }
 
 TEST_F(CoordSystem1DTest, Clone)
@@ -233,11 +233,11 @@ TEST_F(CoordSystem1DTest, NonDefaultUnitsInInput)
 {
     PointwiseAxis axis("x", std::vector<double>{0.0, 0.5, 1.0});
 
-    EXPECT_THROW(AngularReflectometryConverter(m_beam, axis, Axes::Units::NBINS),
+    EXPECT_THROW(AngularReflectometryConverter(m_beam, axis, Axes::Coords::NBINS),
                  std::runtime_error);
 
-    AngularReflectometryConverter converter(m_beam, axis, Axes::Units::DEGREES);
-    auto axis_deg_output = converter.createConvertedAxis(0, Axes::Units::DEGREES);
+    AngularReflectometryConverter converter(m_beam, axis, Axes::Coords::DEGREES);
+    auto axis_deg_output = converter.createConvertedAxis(0, Axes::Coords::DEGREES);
     EXPECT_TRUE(axis.size() == axis_deg_output->size());
     EXPECT_DOUBLE_EQ(axis[0], (*axis_deg_output)[0]);
     EXPECT_DOUBLE_EQ(axis[1], (*axis_deg_output)[1]);
@@ -246,13 +246,13 @@ TEST_F(CoordSystem1DTest, NonDefaultUnitsInInput)
     auto values = axis.binCenters();
     std::for_each(values.begin(), values.end(), [this](double& value) { value = getQ(value); });
     PointwiseAxis q_axis("q", values);
-    AngularReflectometryConverter converter2(m_beam, q_axis, Axes::Units::QSPACE);
-    auto axis_rad_output = converter2.createConvertedAxis(0, Axes::Units::RADIANS);
+    AngularReflectometryConverter converter2(m_beam, q_axis, Axes::Coords::QSPACE);
+    auto axis_rad_output = converter2.createConvertedAxis(0, Axes::Coords::RADIANS);
     EXPECT_TRUE(axis.size() == axis_rad_output->size());
     EXPECT_DOUBLE_EQ(axis[0], (*axis_rad_output)[0]);
     EXPECT_DOUBLE_EQ(axis[1], (*axis_rad_output)[1]);
     EXPECT_DOUBLE_EQ(axis[2], (*axis_rad_output)[2]);
 
-    EXPECT_THROW(AngularReflectometryConverter(m_beam, q_axis, Axes::Units::RQ4),
+    EXPECT_THROW(AngularReflectometryConverter(m_beam, q_axis, Axes::Coords::RQ4),
                  std::runtime_error);
 }
diff --git a/Tests/UnitTests/Core/Core/DepthProbeConverterTest.cpp b/Tests/UnitTests/Core/Core/DepthProbeConverterTest.cpp
index d047688e677d83e4ab88e589761b2114adddffa9..cf92a8018d1a563ccc2424e87795c7f49378b0d7 100644
--- a/Tests/UnitTests/Core/Core/DepthProbeConverterTest.cpp
+++ b/Tests/UnitTests/Core/Core/DepthProbeConverterTest.cpp
@@ -10,8 +10,8 @@ protected:
     DepthProbeConverterTest();
 
     void checkMainFunctionality(const DepthProbeConverter& test_object);
-    void checkAlphaAxis(Axes::Units units, const DepthProbeConverter& test_object);
-    void checkZAxis(Axes::Units units, const DepthProbeConverter& test_object);
+    void checkAlphaAxis(Axes::Coords units, const DepthProbeConverter& test_object);
+    void checkZAxis(Axes::Coords units, const DepthProbeConverter& test_object);
     const double m_alpha_start = 0.5; // first axis value in rads
     const double m_alpha_end = 1.0;   // last axis value in rads
     const double m_z_start = -30.0;
@@ -33,39 +33,39 @@ void DepthProbeConverterTest::checkMainFunctionality(const DepthProbeConverter&
 {
     EXPECT_EQ(test_object.dimension(), 2u);
 
-    EXPECT_NEAR(test_object.calculateMin(0, Axes::Units::UNDEFINED), 2.8647889757e+1,
+    EXPECT_NEAR(test_object.calculateMin(0, Axes::Coords::UNDEFINED), 2.8647889757e+1,
                 2.8647889757e+1 * 1e-10);
-    EXPECT_NEAR(test_object.calculateMin(0, Axes::Units::DEGREES), 2.8647889757e+1,
+    EXPECT_NEAR(test_object.calculateMin(0, Axes::Coords::DEGREES), 2.8647889757e+1,
                 2.8647889757e+1 * 1e-10);
-    EXPECT_NEAR(test_object.calculateMin(0, Axes::Units::QSPACE), 6.0246390001,
+    EXPECT_NEAR(test_object.calculateMin(0, Axes::Coords::QSPACE), 6.0246390001,
                 6.0246390001 * 1e-10);
-    EXPECT_EQ(test_object.calculateMin(0, Axes::Units::RADIANS), m_alpha_start);
-    EXPECT_EQ(test_object.calculateMin(0, Axes::Units::NBINS), 0.0);
+    EXPECT_EQ(test_object.calculateMin(0, Axes::Coords::RADIANS), m_alpha_start);
+    EXPECT_EQ(test_object.calculateMin(0, Axes::Coords::NBINS), 0.0);
 
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::UNDEFINED), 5.7295779513e+1,
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::UNDEFINED), 5.7295779513e+1,
                 5.7295779513e+1 * 1e-10);
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::DEGREES), 5.7295779513e+1,
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::DEGREES), 5.7295779513e+1,
                 5.7295779513e+1 * 1e-10);
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::QSPACE), 1.0574236256e+1,
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::QSPACE), 1.0574236256e+1,
                 1.0574236256e+1 * 1e-10);
-    EXPECT_EQ(test_object.calculateMax(0, Axes::Units::RADIANS), m_alpha_end);
+    EXPECT_EQ(test_object.calculateMax(0, Axes::Coords::RADIANS), m_alpha_end);
     const double n_bins = static_cast<double>(m_nbins);
-    EXPECT_NEAR(test_object.calculateMax(0, Axes::Units::NBINS), n_bins, n_bins * 1e-10);
-
-    checkAlphaAxis(Axes::Units::UNDEFINED, test_object);
-    checkAlphaAxis(Axes::Units::DEGREES, test_object);
-    checkAlphaAxis(Axes::Units::RADIANS, test_object);
-    checkAlphaAxis(Axes::Units::QSPACE, test_object);
-    checkAlphaAxis(Axes::Units::NBINS, test_object);
-
-    checkZAxis(Axes::Units::UNDEFINED, test_object);
-    checkZAxis(Axes::Units::DEGREES, test_object);
-    checkZAxis(Axes::Units::RADIANS, test_object);
-    checkZAxis(Axes::Units::QSPACE, test_object);
-    checkZAxis(Axes::Units::NBINS, test_object);
+    EXPECT_NEAR(test_object.calculateMax(0, Axes::Coords::NBINS), n_bins, n_bins * 1e-10);
+
+    checkAlphaAxis(Axes::Coords::UNDEFINED, test_object);
+    checkAlphaAxis(Axes::Coords::DEGREES, test_object);
+    checkAlphaAxis(Axes::Coords::RADIANS, test_object);
+    checkAlphaAxis(Axes::Coords::QSPACE, test_object);
+    checkAlphaAxis(Axes::Coords::NBINS, test_object);
+
+    checkZAxis(Axes::Coords::UNDEFINED, test_object);
+    checkZAxis(Axes::Coords::DEGREES, test_object);
+    checkZAxis(Axes::Coords::RADIANS, test_object);
+    checkZAxis(Axes::Coords::QSPACE, test_object);
+    checkZAxis(Axes::Coords::NBINS, test_object);
 }
 
-void DepthProbeConverterTest::checkAlphaAxis(Axes::Units units,
+void DepthProbeConverterTest::checkAlphaAxis(Axes::Coords units,
                                              const DepthProbeConverter& test_object)
 {
     auto axis = test_object.createConvertedAxis(0, units);
@@ -76,7 +76,7 @@ void DepthProbeConverterTest::checkAlphaAxis(Axes::Units units,
     EXPECT_EQ(axis->upperBound(), test_object.calculateMax(0, units));
 }
 
-void DepthProbeConverterTest::checkZAxis(Axes::Units units, const DepthProbeConverter& test_object)
+void DepthProbeConverterTest::checkZAxis(Axes::Coords units, const DepthProbeConverter& test_object)
 {
     auto axis = test_object.createConvertedAxis(1, units);
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
@@ -84,11 +84,11 @@ void DepthProbeConverterTest::checkZAxis(Axes::Units units, const DepthProbeConv
     EXPECT_EQ(axis->size(), m_nbins);
 
     EXPECT_EQ(axis->lowerBound(), test_object.calculateMin(1, units));
-    const double test_min = units == Axes::Units::NBINS ? 0 : m_z_start;
+    const double test_min = units == Axes::Coords::NBINS ? 0 : m_z_start;
     EXPECT_NEAR(axis->lowerBound(), test_min, std::abs(test_min) * 1e-10);
 
     EXPECT_EQ(axis->upperBound(), test_object.calculateMax(1, units));
-    const double test_max = units == Axes::Units::NBINS ? m_nbins : m_z_end;
+    const double test_max = units == Axes::Coords::NBINS ? m_nbins : m_z_end;
     EXPECT_NEAR(axis->upperBound(), test_max, std::abs(test_max) * 1e-10);
 }
 
@@ -102,21 +102,21 @@ TEST_F(DepthProbeConverterTest, DepthProbeConverterExceptions)
 {
     DepthProbeConverter converter(m_beam, m_inclination_axis, m_z_axis);
 
-    EXPECT_THROW(converter.axisName(0, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.axisName(1, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.axisName(2, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.axisName(0, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.axisName(1, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.axisName(2, Axes::Coords::UNDEFINED), std::runtime_error);
 
-    EXPECT_THROW(converter.calculateMin(0, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.calculateMin(1, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.calculateMin(2, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.calculateMin(0, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.calculateMin(1, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.calculateMin(2, Axes::Coords::UNDEFINED), std::runtime_error);
 
-    EXPECT_THROW(converter.calculateMax(0, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.calculateMax(1, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.calculateMax(2, Axes::Units::RADIANS), std::runtime_error);
+    EXPECT_THROW(converter.calculateMax(0, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.calculateMax(1, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.calculateMax(2, Axes::Coords::RADIANS), std::runtime_error);
 
-    EXPECT_THROW(converter.createConvertedAxis(0, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.createConvertedAxis(1, Axes::Units::MM), std::runtime_error);
-    EXPECT_THROW(converter.createConvertedAxis(2, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.createConvertedAxis(0, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.createConvertedAxis(1, Axes::Coords::MM), std::runtime_error);
+    EXPECT_THROW(converter.createConvertedAxis(2, Axes::Coords::UNDEFINED), std::runtime_error);
 }
 
 TEST_F(DepthProbeConverterTest, DepthProbeConverterClone)
diff --git a/Tests/UnitTests/Core/Fresnel/DepthProbeSimulationTest.cpp b/Tests/UnitTests/Core/Fresnel/DepthProbeSimulationTest.cpp
index 98b651d38d0de0da604bf34ae377e6b3c810251b..48eb00b72d5d913525097cc9a7d34dc7f6b1cc6e 100644
--- a/Tests/UnitTests/Core/Fresnel/DepthProbeSimulationTest.cpp
+++ b/Tests/UnitTests/Core/Fresnel/DepthProbeSimulationTest.cpp
@@ -146,7 +146,7 @@ TEST_F(DepthProbeSimulationTest, ResultAquisition)
     sim->runSimulation();
     SimulationResult sim_result = sim->result();
 
-    EXPECT_THROW(sim_result.histogram2d(Axes::Units::MM), std::runtime_error);
+    EXPECT_THROW(sim_result.histogram2d(Axes::Coords::MM), std::runtime_error);
 
     const std::unique_ptr<Histogram2D> depth_map(sim_result.histogram2d());
     EXPECT_EQ(10u * 12u, depth_map->getTotalNumberOfBins());
@@ -156,7 +156,7 @@ TEST_F(DepthProbeSimulationTest, ResultAquisition)
     EXPECT_EQ(-30.0, depth_map->yAxis().lowerBound());
     EXPECT_EQ(10.0, depth_map->yAxis().upperBound());
 
-    EXPECT_THROW(sim_result.data(Axes::Units::MM), std::runtime_error);
+    EXPECT_THROW(sim_result.data(Axes::Coords::MM), std::runtime_error);
 
     const auto output = sim_result.data();
     EXPECT_EQ(depth_map->getTotalNumberOfBins(), output->getAllocatedSize());
diff --git a/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.cpp b/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.cpp
index d7edb3ac569f3bc32e8e6666b7438a188c077b31..bcbc8696880c4a7c792ef65d7fbac83883769d96 100644
--- a/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.cpp
+++ b/Tests/UnitTests/Core/Fresnel/SpecularSimulationTest.cpp
@@ -208,9 +208,9 @@ TEST_F(SpecularSimulationTest, ConstructSimulation)
     EXPECT_EQ(data->getAllocatedSize(), 10u);
     EXPECT_EQ(data->rank(), 1u);
 
-    EXPECT_NEAR(0.1 * Units::deg, sim_result.convertedBinCenters(Axes::Units::RADIANS).front(),
+    EXPECT_NEAR(0.1 * Units::deg, sim_result.convertedBinCenters(Axes::Coords::RADIANS).front(),
                 Units::deg * 1e-11);
-    EXPECT_NEAR(1.9 * Units::deg, sim_result.convertedBinCenters(Axes::Units::RADIANS).back(),
+    EXPECT_NEAR(1.9 * Units::deg, sim_result.convertedBinCenters(Axes::Coords::RADIANS).back(),
                 Units::deg * 1e-10);
 }
 
diff --git a/Tests/UnitTests/Core/Instrument/OffSpecularConverterTest.cpp b/Tests/UnitTests/Core/Instrument/OffSpecularConverterTest.cpp
index d48c0d5cf4692508bc8bb37117be01ef83ecc5fa..6f768aa41e98d64afa964c1d7be8b4592619473b 100644
--- a/Tests/UnitTests/Core/Instrument/OffSpecularConverterTest.cpp
+++ b/Tests/UnitTests/Core/Instrument/OffSpecularConverterTest.cpp
@@ -27,51 +27,51 @@ TEST_F(OffSpecularConverterTest, OffSpecularConverter)
 
     EXPECT_EQ(converter.dimension(), 2u);
 
-    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Units::UNDEFINED), 0.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Units::NBINS), 0.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Units::RADIANS), 0.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Units::DEGREES), 0.0);
-    EXPECT_THROW(converter.calculateMin(0, Axes::Units::QSPACE), std::runtime_error);
-    EXPECT_THROW(converter.calculateMin(0, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Units::UNDEFINED), 7.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Units::NBINS), 51.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Units::RADIANS), Units::deg2rad(7.0));
-    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Units::DEGREES), 7.0);
-    EXPECT_THROW(converter.calculateMax(0, Axes::Units::QSPACE), std::runtime_error);
-    EXPECT_THROW(converter.calculateMax(0, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Units::UNDEFINED), -2.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Units::NBINS), 0.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Units::RADIANS), Units::deg2rad(-2.0));
-    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Units::DEGREES), -2.0);
-    EXPECT_THROW(converter.calculateMin(1, Axes::Units::QSPACE), std::runtime_error);
-    EXPECT_THROW(converter.calculateMin(1, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Units::UNDEFINED), Units::rad2deg(1.5));
-    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Units::NBINS), 70.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Units::RADIANS), 1.5);
-    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Units::DEGREES), Units::rad2deg(1.5));
-    EXPECT_THROW(converter.calculateMax(1, Axes::Units::QSPACE), std::runtime_error);
-    EXPECT_THROW(converter.calculateMax(1, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_THROW(converter.calculateMin(2, Axes::Units::UNDEFINED), std::runtime_error);
-    EXPECT_THROW(converter.calculateMax(2, Axes::Units::UNDEFINED), std::runtime_error);
-
-    auto axis = converter.createConvertedAxis(0, Axes::Units::UNDEFINED);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Coords::UNDEFINED), 0.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Coords::NBINS), 0.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Coords::RADIANS), 0.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Coords::DEGREES), 0.0);
+    EXPECT_THROW(converter.calculateMin(0, Axes::Coords::QSPACE), std::runtime_error);
+    EXPECT_THROW(converter.calculateMin(0, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Coords::UNDEFINED), 7.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Coords::NBINS), 51.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Coords::RADIANS), Units::deg2rad(7.0));
+    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Coords::DEGREES), 7.0);
+    EXPECT_THROW(converter.calculateMax(0, Axes::Coords::QSPACE), std::runtime_error);
+    EXPECT_THROW(converter.calculateMax(0, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Coords::UNDEFINED), -2.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Coords::NBINS), 0.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Coords::RADIANS), Units::deg2rad(-2.0));
+    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Coords::DEGREES), -2.0);
+    EXPECT_THROW(converter.calculateMin(1, Axes::Coords::QSPACE), std::runtime_error);
+    EXPECT_THROW(converter.calculateMin(1, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Coords::UNDEFINED), Units::rad2deg(1.5));
+    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Coords::NBINS), 70.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Coords::RADIANS), 1.5);
+    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Coords::DEGREES), Units::rad2deg(1.5));
+    EXPECT_THROW(converter.calculateMax(1, Axes::Coords::QSPACE), std::runtime_error);
+    EXPECT_THROW(converter.calculateMax(1, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_THROW(converter.calculateMin(2, Axes::Coords::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.calculateMax(2, Axes::Coords::UNDEFINED), std::runtime_error);
+
+    auto axis = converter.createConvertedAxis(0, Axes::Coords::UNDEFINED);
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->size(), converter.axisSize(0));
-    EXPECT_EQ(axis->lowerBound(), converter.calculateMin(0, Axes::Units::UNDEFINED));
-    EXPECT_EQ(axis->upperBound(), converter.calculateMax(0, Axes::Units::UNDEFINED));
+    EXPECT_EQ(axis->lowerBound(), converter.calculateMin(0, Axes::Coords::UNDEFINED));
+    EXPECT_EQ(axis->upperBound(), converter.calculateMax(0, Axes::Coords::UNDEFINED));
 
-    auto axis2 = converter.createConvertedAxis(1, Axes::Units::RADIANS);
+    auto axis2 = converter.createConvertedAxis(1, Axes::Coords::RADIANS);
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis2.get()));
     EXPECT_EQ(axis2->size(), converter.axisSize(1));
-    EXPECT_EQ(axis2->lowerBound(), converter.calculateMin(1, Axes::Units::RADIANS));
-    EXPECT_EQ(axis2->upperBound(), converter.calculateMax(1, Axes::Units::RADIANS));
+    EXPECT_EQ(axis2->lowerBound(), converter.calculateMin(1, Axes::Coords::RADIANS));
+    EXPECT_EQ(axis2->upperBound(), converter.calculateMax(1, Axes::Coords::RADIANS));
 
-    EXPECT_THROW(converter.createConvertedAxis(2, Axes::Units::UNDEFINED), std::runtime_error);
-    EXPECT_THROW(converter.createConvertedAxis(1, Axes::Units::QSPACE), std::runtime_error);
+    EXPECT_THROW(converter.createConvertedAxis(2, Axes::Coords::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.createConvertedAxis(1, Axes::Coords::QSPACE), std::runtime_error);
 }
 
 TEST_F(OffSpecularConverterTest, OffSpecularConverterClone)
@@ -81,34 +81,34 @@ TEST_F(OffSpecularConverterTest, OffSpecularConverterClone)
 
     EXPECT_EQ(P_clone->dimension(), 2u);
 
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Units::UNDEFINED), 0.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Units::NBINS), 0.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Units::RADIANS), 0.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Units::DEGREES), 0.0);
-    EXPECT_THROW(P_clone->calculateMin(0, Axes::Units::QSPACE), std::runtime_error);
-    EXPECT_THROW(P_clone->calculateMin(0, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Units::UNDEFINED), 7.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Units::NBINS), 51.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Units::RADIANS), Units::deg2rad(7.0));
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Units::DEGREES), 7.0);
-    EXPECT_THROW(P_clone->calculateMax(0, Axes::Units::QSPACE), std::runtime_error);
-    EXPECT_THROW(P_clone->calculateMax(0, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Units::UNDEFINED), -2.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Units::NBINS), 0.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Units::RADIANS), Units::deg2rad(-2.0));
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Units::DEGREES), -2.0);
-    EXPECT_THROW(P_clone->calculateMin(1, Axes::Units::QSPACE), std::runtime_error);
-    EXPECT_THROW(P_clone->calculateMin(1, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Units::UNDEFINED), Units::rad2deg(1.5));
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Units::NBINS), 70.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Units::RADIANS), 1.5);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Units::DEGREES), Units::rad2deg(1.5));
-    EXPECT_THROW(P_clone->calculateMax(1, Axes::Units::QSPACE), std::runtime_error);
-    EXPECT_THROW(P_clone->calculateMax(1, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_THROW(P_clone->calculateMin(2, Axes::Units::UNDEFINED), std::runtime_error);
-    EXPECT_THROW(P_clone->calculateMax(2, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Coords::UNDEFINED), 0.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Coords::NBINS), 0.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Coords::RADIANS), 0.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Coords::DEGREES), 0.0);
+    EXPECT_THROW(P_clone->calculateMin(0, Axes::Coords::QSPACE), std::runtime_error);
+    EXPECT_THROW(P_clone->calculateMin(0, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Coords::UNDEFINED), 7.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Coords::NBINS), 51.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Coords::RADIANS), Units::deg2rad(7.0));
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Coords::DEGREES), 7.0);
+    EXPECT_THROW(P_clone->calculateMax(0, Axes::Coords::QSPACE), std::runtime_error);
+    EXPECT_THROW(P_clone->calculateMax(0, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Coords::UNDEFINED), -2.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Coords::NBINS), 0.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Coords::RADIANS), Units::deg2rad(-2.0));
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Coords::DEGREES), -2.0);
+    EXPECT_THROW(P_clone->calculateMin(1, Axes::Coords::QSPACE), std::runtime_error);
+    EXPECT_THROW(P_clone->calculateMin(1, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Coords::UNDEFINED), Units::rad2deg(1.5));
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Coords::NBINS), 70.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Coords::RADIANS), 1.5);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Coords::DEGREES), Units::rad2deg(1.5));
+    EXPECT_THROW(P_clone->calculateMax(1, Axes::Coords::QSPACE), std::runtime_error);
+    EXPECT_THROW(P_clone->calculateMax(1, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_THROW(P_clone->calculateMin(2, Axes::Coords::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(P_clone->calculateMax(2, Axes::Coords::UNDEFINED), std::runtime_error);
 }
diff --git a/Tests/UnitTests/Core/Instrument/RectangularConverterTest.cpp b/Tests/UnitTests/Core/Instrument/RectangularConverterTest.cpp
index 3de23032278c38b1a0d1db5c28e26be70268f97e..4028d89d8e4de2f47eb07468118021ff95f0b09a 100644
--- a/Tests/UnitTests/Core/Instrument/RectangularConverterTest.cpp
+++ b/Tests/UnitTests/Core/Instrument/RectangularConverterTest.cpp
@@ -44,56 +44,56 @@ TEST_F(RectangularConverterTest, RectangularConverter)
 
     EXPECT_EQ(converter.dimension(), 2u);
 
-    EXPECT_NEAR(converter.calculateMin(0, Axes::Units::UNDEFINED), 0.0, 1e-12);
-    EXPECT_NEAR(converter.calculateMin(0, Axes::Units::NBINS), 0.0, 1e-12);
-    EXPECT_NEAR(converter.calculateMin(0, Axes::Units::MM), 0.0, 1e-12);
-    EXPECT_NEAR(converter.calculateMin(0, Axes::Units::RADIANS), -m_phi, m_phi * 1e-10);
-    EXPECT_NEAR(converter.calculateMin(0, Axes::Units::DEGREES), Units::rad2deg(-m_phi),
+    EXPECT_NEAR(converter.calculateMin(0, Axes::Coords::UNDEFINED), 0.0, 1e-12);
+    EXPECT_NEAR(converter.calculateMin(0, Axes::Coords::NBINS), 0.0, 1e-12);
+    EXPECT_NEAR(converter.calculateMin(0, Axes::Coords::MM), 0.0, 1e-12);
+    EXPECT_NEAR(converter.calculateMin(0, Axes::Coords::RADIANS), -m_phi, m_phi * 1e-10);
+    EXPECT_NEAR(converter.calculateMin(0, Axes::Coords::DEGREES), Units::rad2deg(-m_phi),
                 Units::rad2deg(m_phi) * 1e-10);
-    EXPECT_NEAR(converter.calculateMin(0, Axes::Units::QSPACE), -m_kfy, m_kfy * 1e-10);
+    EXPECT_NEAR(converter.calculateMin(0, Axes::Coords::QSPACE), -m_kfy, m_kfy * 1e-10);
 
-    EXPECT_NEAR(converter.calculateMax(0, Axes::Units::UNDEFINED), det_width, det_width * 1e-10);
-    EXPECT_NEAR(converter.calculateMax(0, Axes::Units::NBINS), static_cast<double>(det_nx),
+    EXPECT_NEAR(converter.calculateMax(0, Axes::Coords::UNDEFINED), det_width, det_width * 1e-10);
+    EXPECT_NEAR(converter.calculateMax(0, Axes::Coords::NBINS), static_cast<double>(det_nx),
                 det_nx * 1e-10);
-    EXPECT_NEAR(converter.calculateMax(0, Axes::Units::MM), det_width, det_width * 1e-10);
-    EXPECT_NEAR(converter.calculateMax(0, Axes::Units::RADIANS), m_phi, m_phi * 1e-10);
-    EXPECT_NEAR(converter.calculateMax(0, Axes::Units::DEGREES), Units::rad2deg(m_phi),
+    EXPECT_NEAR(converter.calculateMax(0, Axes::Coords::MM), det_width, det_width * 1e-10);
+    EXPECT_NEAR(converter.calculateMax(0, Axes::Coords::RADIANS), m_phi, m_phi * 1e-10);
+    EXPECT_NEAR(converter.calculateMax(0, Axes::Coords::DEGREES), Units::rad2deg(m_phi),
                 Units::rad2deg(m_phi) * 1e-10);
-    EXPECT_NEAR(converter.calculateMax(0, Axes::Units::QSPACE), m_kfy, m_kfy * 1e-10);
+    EXPECT_NEAR(converter.calculateMax(0, Axes::Coords::QSPACE), m_kfy, m_kfy * 1e-10);
 
-    EXPECT_NEAR(converter.calculateMin(1, Axes::Units::UNDEFINED), 0.0, 1e-12);
-    EXPECT_NEAR(converter.calculateMin(1, Axes::Units::NBINS), 0.0, 1e-12);
-    EXPECT_NEAR(converter.calculateMin(1, Axes::Units::MM), 0.0, 1e-12);
-    EXPECT_NEAR(converter.calculateMin(1, Axes::Units::RADIANS), 0.0, 1e-12);
-    EXPECT_NEAR(converter.calculateMin(1, Axes::Units::DEGREES), 0.0, 1e-12);
-    EXPECT_NEAR(converter.calculateMin(1, Axes::Units::QSPACE), -m_kiz, std::abs(m_kiz) * 1e-10);
+    EXPECT_NEAR(converter.calculateMin(1, Axes::Coords::UNDEFINED), 0.0, 1e-12);
+    EXPECT_NEAR(converter.calculateMin(1, Axes::Coords::NBINS), 0.0, 1e-12);
+    EXPECT_NEAR(converter.calculateMin(1, Axes::Coords::MM), 0.0, 1e-12);
+    EXPECT_NEAR(converter.calculateMin(1, Axes::Coords::RADIANS), 0.0, 1e-12);
+    EXPECT_NEAR(converter.calculateMin(1, Axes::Coords::DEGREES), 0.0, 1e-12);
+    EXPECT_NEAR(converter.calculateMin(1, Axes::Coords::QSPACE), -m_kiz, std::abs(m_kiz) * 1e-10);
 
-    EXPECT_NEAR(converter.calculateMax(1, Axes::Units::UNDEFINED), det_height, det_height * 1e-10);
-    EXPECT_NEAR(converter.calculateMax(1, Axes::Units::NBINS), static_cast<double>(det_ny),
+    EXPECT_NEAR(converter.calculateMax(1, Axes::Coords::UNDEFINED), det_height, det_height * 1e-10);
+    EXPECT_NEAR(converter.calculateMax(1, Axes::Coords::NBINS), static_cast<double>(det_ny),
                 det_ny * 1e-10);
-    EXPECT_NEAR(converter.calculateMax(1, Axes::Units::MM), det_height, det_height * 1e-10);
-    EXPECT_NEAR(converter.calculateMax(1, Axes::Units::RADIANS), m_alpha, m_alpha * 1e-10);
-    EXPECT_NEAR(converter.calculateMax(1, Axes::Units::DEGREES), Units::rad2deg(m_alpha),
+    EXPECT_NEAR(converter.calculateMax(1, Axes::Coords::MM), det_height, det_height * 1e-10);
+    EXPECT_NEAR(converter.calculateMax(1, Axes::Coords::RADIANS), m_alpha, m_alpha * 1e-10);
+    EXPECT_NEAR(converter.calculateMax(1, Axes::Coords::DEGREES), Units::rad2deg(m_alpha),
                 Units::rad2deg(m_alpha) * 1e-10);
-    EXPECT_NEAR(converter.calculateMax(1, Axes::Units::QSPACE), m_kfz - m_kiz,
+    EXPECT_NEAR(converter.calculateMax(1, Axes::Coords::QSPACE), m_kfz - m_kiz,
                 std::abs(m_kfz - m_kiz) * 1e-10);
 
-    EXPECT_THROW(converter.calculateMin(2, Axes::Units::UNDEFINED), std::runtime_error);
-    EXPECT_THROW(converter.calculateMax(2, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.calculateMin(2, Axes::Coords::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.calculateMax(2, Axes::Coords::UNDEFINED), std::runtime_error);
 
-    auto axis = converter.createConvertedAxis(0, Axes::Units::UNDEFINED);
+    auto axis = converter.createConvertedAxis(0, Axes::Coords::UNDEFINED);
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->size(), converter.axisSize(0));
-    EXPECT_EQ(axis->lowerBound(), converter.calculateMin(0, Axes::Units::UNDEFINED));
-    EXPECT_EQ(axis->upperBound(), converter.calculateMax(0, Axes::Units::UNDEFINED));
+    EXPECT_EQ(axis->lowerBound(), converter.calculateMin(0, Axes::Coords::UNDEFINED));
+    EXPECT_EQ(axis->upperBound(), converter.calculateMax(0, Axes::Coords::UNDEFINED));
 
-    auto axis2 = converter.createConvertedAxis(1, Axes::Units::QSPACE);
+    auto axis2 = converter.createConvertedAxis(1, Axes::Coords::QSPACE);
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis2.get()));
     EXPECT_EQ(axis2->size(), converter.axisSize(1));
-    EXPECT_EQ(axis2->lowerBound(), converter.calculateMin(1, Axes::Units::QSPACE));
-    EXPECT_EQ(axis2->upperBound(), converter.calculateMax(1, Axes::Units::QSPACE));
+    EXPECT_EQ(axis2->lowerBound(), converter.calculateMin(1, Axes::Coords::QSPACE));
+    EXPECT_EQ(axis2->upperBound(), converter.calculateMax(1, Axes::Coords::QSPACE));
 
-    EXPECT_THROW(converter.createConvertedAxis(2, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.createConvertedAxis(2, Axes::Coords::UNDEFINED), std::runtime_error);
 }
 
 TEST_F(RectangularConverterTest, RectangularConverterClone)
@@ -103,42 +103,42 @@ TEST_F(RectangularConverterTest, RectangularConverterClone)
 
     EXPECT_EQ(P_clone->dimension(), 2u);
 
-    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Units::UNDEFINED), 0.0, 1e-12);
-    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Units::NBINS), 0.0, 1e-12);
-    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Units::MM), 0.0, 1e-12);
-    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Units::RADIANS), -m_phi, m_phi * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Units::DEGREES), Units::rad2deg(-m_phi),
+    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Coords::UNDEFINED), 0.0, 1e-12);
+    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Coords::NBINS), 0.0, 1e-12);
+    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Coords::MM), 0.0, 1e-12);
+    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Coords::RADIANS), -m_phi, m_phi * 1e-10);
+    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Coords::DEGREES), Units::rad2deg(-m_phi),
                 Units::rad2deg(m_phi) * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Units::QSPACE), -m_kfy, m_kfy * 1e-10);
+    EXPECT_NEAR(P_clone->calculateMin(0, Axes::Coords::QSPACE), -m_kfy, m_kfy * 1e-10);
 
-    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Units::UNDEFINED), det_width, det_width * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Units::NBINS), static_cast<double>(det_nx),
+    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Coords::UNDEFINED), det_width, det_width * 1e-10);
+    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Coords::NBINS), static_cast<double>(det_nx),
                 det_nx * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Units::MM), det_width, det_width * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Units::RADIANS), m_phi, m_phi * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Units::DEGREES), Units::rad2deg(m_phi),
+    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Coords::MM), det_width, det_width * 1e-10);
+    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Coords::RADIANS), m_phi, m_phi * 1e-10);
+    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Coords::DEGREES), Units::rad2deg(m_phi),
                 Units::rad2deg(m_phi) * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Units::QSPACE), m_kfy, m_kfy * 1e-10);
+    EXPECT_NEAR(P_clone->calculateMax(0, Axes::Coords::QSPACE), m_kfy, m_kfy * 1e-10);
 
-    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Units::UNDEFINED), 0.0, 1e-12);
-    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Units::NBINS), 0.0, 1e-12);
-    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Units::MM), 0.0, 1e-12);
-    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Units::RADIANS), 0.0, 1e-12);
-    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Units::DEGREES), 0.0, 1e-12);
-    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Units::QSPACE), -m_kiz, std::abs(m_kiz) * 1e-10);
+    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Coords::UNDEFINED), 0.0, 1e-12);
+    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Coords::NBINS), 0.0, 1e-12);
+    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Coords::MM), 0.0, 1e-12);
+    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Coords::RADIANS), 0.0, 1e-12);
+    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Coords::DEGREES), 0.0, 1e-12);
+    EXPECT_NEAR(P_clone->calculateMin(1, Axes::Coords::QSPACE), -m_kiz, std::abs(m_kiz) * 1e-10);
 
-    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Units::UNDEFINED), det_height, det_height * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Units::NBINS), static_cast<double>(det_ny),
+    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Coords::UNDEFINED), det_height, det_height * 1e-10);
+    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Coords::NBINS), static_cast<double>(det_ny),
                 det_ny * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Units::MM), det_height, det_height * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Units::RADIANS), m_alpha, m_alpha * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Units::DEGREES), Units::rad2deg(m_alpha),
+    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Coords::MM), det_height, det_height * 1e-10);
+    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Coords::RADIANS), m_alpha, m_alpha * 1e-10);
+    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Coords::DEGREES), Units::rad2deg(m_alpha),
                 Units::rad2deg(m_alpha) * 1e-10);
-    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Units::QSPACE), m_kfz - m_kiz,
+    EXPECT_NEAR(P_clone->calculateMax(1, Axes::Coords::QSPACE), m_kfz - m_kiz,
                 std::abs(m_kfz - m_kiz) * 1e-10);
 
-    EXPECT_THROW(P_clone->calculateMin(2, Axes::Units::UNDEFINED), std::runtime_error);
-    EXPECT_THROW(P_clone->calculateMax(2, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(P_clone->calculateMin(2, Axes::Coords::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(P_clone->calculateMax(2, Axes::Coords::UNDEFINED), std::runtime_error);
 }
 
 TEST_F(RectangularConverterTest, RectangularConverterWithROI)
@@ -151,13 +151,13 @@ TEST_F(RectangularConverterTest, RectangularConverterWithROI)
     m_detector.setRegionOfInterest(roi_xmin, roi_ymin, roi_xmax, roi_ymax);
     RectangularConverter converter(m_detector, m_beam);
 
-    EXPECT_EQ(converter.calculateMin(0, Axes::Units::UNDEFINED), 100);
-    EXPECT_EQ(converter.calculateMax(0, Axes::Units::UNDEFINED), 152);
-    EXPECT_EQ(converter.calculateMin(1, Axes::Units::UNDEFINED), 50);
-    EXPECT_EQ(converter.calculateMax(1, Axes::Units::UNDEFINED), 102);
+    EXPECT_EQ(converter.calculateMin(0, Axes::Coords::UNDEFINED), 100);
+    EXPECT_EQ(converter.calculateMax(0, Axes::Coords::UNDEFINED), 152);
+    EXPECT_EQ(converter.calculateMin(1, Axes::Coords::UNDEFINED), 50);
+    EXPECT_EQ(converter.calculateMax(1, Axes::Coords::UNDEFINED), 102);
 
-    EXPECT_NEAR(converter.calculateMin(0, Axes::Units::DEGREES), 0.0, 1e-10);
-    EXPECT_NEAR(converter.calculateMax(0, Axes::Units::DEGREES), 2.97669946811, 1e-10);
-    EXPECT_NEAR(converter.calculateMin(1, Axes::Units::DEGREES), 2.86240522611, 1e-10);
-    EXPECT_NEAR(converter.calculateMax(1, Axes::Units::DEGREES), 5.82402751615, 1e-10);
+    EXPECT_NEAR(converter.calculateMin(0, Axes::Coords::DEGREES), 0.0, 1e-10);
+    EXPECT_NEAR(converter.calculateMax(0, Axes::Coords::DEGREES), 2.97669946811, 1e-10);
+    EXPECT_NEAR(converter.calculateMin(1, Axes::Coords::DEGREES), 2.86240522611, 1e-10);
+    EXPECT_NEAR(converter.calculateMax(1, Axes::Coords::DEGREES), 5.82402751615, 1e-10);
 }
diff --git a/Tests/UnitTests/Core/Instrument/SphericalConverterTest.cpp b/Tests/UnitTests/Core/Instrument/SphericalConverterTest.cpp
index 790e925b28f6227d2ad784989351a414aff8906c..6986971be51e63b3abbd3a2dd39e4e06206b4b69 100644
--- a/Tests/UnitTests/Core/Instrument/SphericalConverterTest.cpp
+++ b/Tests/UnitTests/Core/Instrument/SphericalConverterTest.cpp
@@ -32,50 +32,50 @@ TEST_F(SphericalConverterTest, SphericalConverter)
 
     EXPECT_EQ(converter.dimension(), 2u);
 
-    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Units::UNDEFINED), 0.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Units::NBINS), 0.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Units::RADIANS), 0.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Units::DEGREES), 0.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Units::QSPACE), 0.0);
-    EXPECT_THROW(converter.calculateMin(0, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Units::UNDEFINED), 5.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Units::NBINS), 100.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Units::RADIANS), Units::deg2rad(5.0));
-    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Units::DEGREES), 5.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Units::QSPACE), m_kfy);
-    EXPECT_THROW(converter.calculateMax(0, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Units::UNDEFINED), -2.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Units::NBINS), 0.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Units::RADIANS), Units::deg2rad(-2.0));
-    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Units::DEGREES), -2.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Units::QSPACE), m_kfz1 - m_kiz);
-    EXPECT_THROW(converter.calculateMin(1, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Units::UNDEFINED), Units::rad2deg(1.5));
-    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Units::NBINS), 70.0);
-    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Units::RADIANS), 1.5);
-    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Units::DEGREES), Units::rad2deg(1.5));
-    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Units::QSPACE), m_kfz2 - m_kiz);
-    EXPECT_THROW(converter.calculateMax(1, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_THROW(converter.calculateMin(2, Axes::Units::UNDEFINED), std::runtime_error);
-    EXPECT_THROW(converter.calculateMax(2, Axes::Units::UNDEFINED), std::runtime_error);
-
-    auto axis = converter.createConvertedAxis(0, Axes::Units::UNDEFINED);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Coords::UNDEFINED), 0.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Coords::NBINS), 0.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Coords::RADIANS), 0.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Coords::DEGREES), 0.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(0, Axes::Coords::QSPACE), 0.0);
+    EXPECT_THROW(converter.calculateMin(0, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Coords::UNDEFINED), 5.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Coords::NBINS), 100.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Coords::RADIANS), Units::deg2rad(5.0));
+    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Coords::DEGREES), 5.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMax(0, Axes::Coords::QSPACE), m_kfy);
+    EXPECT_THROW(converter.calculateMax(0, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Coords::UNDEFINED), -2.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Coords::NBINS), 0.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Coords::RADIANS), Units::deg2rad(-2.0));
+    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Coords::DEGREES), -2.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMin(1, Axes::Coords::QSPACE), m_kfz1 - m_kiz);
+    EXPECT_THROW(converter.calculateMin(1, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Coords::UNDEFINED), Units::rad2deg(1.5));
+    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Coords::NBINS), 70.0);
+    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Coords::RADIANS), 1.5);
+    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Coords::DEGREES), Units::rad2deg(1.5));
+    EXPECT_DOUBLE_EQ(converter.calculateMax(1, Axes::Coords::QSPACE), m_kfz2 - m_kiz);
+    EXPECT_THROW(converter.calculateMax(1, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_THROW(converter.calculateMin(2, Axes::Coords::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.calculateMax(2, Axes::Coords::UNDEFINED), std::runtime_error);
+
+    auto axis = converter.createConvertedAxis(0, Axes::Coords::UNDEFINED);
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->size(), converter.axisSize(0));
-    EXPECT_EQ(axis->lowerBound(), converter.calculateMin(0, Axes::Units::UNDEFINED));
-    EXPECT_EQ(axis->upperBound(), converter.calculateMax(0, Axes::Units::UNDEFINED));
+    EXPECT_EQ(axis->lowerBound(), converter.calculateMin(0, Axes::Coords::UNDEFINED));
+    EXPECT_EQ(axis->upperBound(), converter.calculateMax(0, Axes::Coords::UNDEFINED));
 
-    auto axis2 = converter.createConvertedAxis(1, Axes::Units::QSPACE);
+    auto axis2 = converter.createConvertedAxis(1, Axes::Coords::QSPACE);
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis2.get()));
     EXPECT_EQ(axis2->size(), converter.axisSize(1));
-    EXPECT_EQ(axis2->lowerBound(), converter.calculateMin(1, Axes::Units::QSPACE));
-    EXPECT_EQ(axis2->upperBound(), converter.calculateMax(1, Axes::Units::QSPACE));
+    EXPECT_EQ(axis2->lowerBound(), converter.calculateMin(1, Axes::Coords::QSPACE));
+    EXPECT_EQ(axis2->upperBound(), converter.calculateMax(1, Axes::Coords::QSPACE));
 
-    EXPECT_THROW(converter.createConvertedAxis(2, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(converter.createConvertedAxis(2, Axes::Coords::UNDEFINED), std::runtime_error);
 }
 
 TEST_F(SphericalConverterTest, SphericalConverterClone)
@@ -85,34 +85,34 @@ TEST_F(SphericalConverterTest, SphericalConverterClone)
 
     EXPECT_EQ(P_clone->dimension(), 2u);
 
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Units::UNDEFINED), 0.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Units::NBINS), 0.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Units::RADIANS), 0.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Units::DEGREES), 0.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Units::QSPACE), 0.0);
-    EXPECT_THROW(P_clone->calculateMin(0, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Units::UNDEFINED), 5.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Units::NBINS), 100.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Units::RADIANS), Units::deg2rad(5.0));
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Units::DEGREES), 5.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Units::QSPACE), m_kfy);
-    EXPECT_THROW(P_clone->calculateMax(0, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Units::UNDEFINED), -2.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Units::NBINS), 0.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Units::RADIANS), Units::deg2rad(-2.0));
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Units::DEGREES), -2.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Units::QSPACE), m_kfz1 - m_kiz);
-    EXPECT_THROW(P_clone->calculateMin(1, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Units::UNDEFINED), Units::rad2deg(1.5));
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Units::NBINS), 70.0);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Units::RADIANS), 1.5);
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Units::DEGREES), Units::rad2deg(1.5));
-    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Units::QSPACE), m_kfz2 - m_kiz);
-    EXPECT_THROW(P_clone->calculateMax(1, Axes::Units::MM), std::runtime_error);
-
-    EXPECT_THROW(P_clone->calculateMin(2, Axes::Units::UNDEFINED), std::runtime_error);
-    EXPECT_THROW(P_clone->calculateMax(2, Axes::Units::UNDEFINED), std::runtime_error);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Coords::UNDEFINED), 0.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Coords::NBINS), 0.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Coords::RADIANS), 0.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Coords::DEGREES), 0.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(0, Axes::Coords::QSPACE), 0.0);
+    EXPECT_THROW(P_clone->calculateMin(0, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Coords::UNDEFINED), 5.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Coords::NBINS), 100.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Coords::RADIANS), Units::deg2rad(5.0));
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Coords::DEGREES), 5.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(0, Axes::Coords::QSPACE), m_kfy);
+    EXPECT_THROW(P_clone->calculateMax(0, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Coords::UNDEFINED), -2.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Coords::NBINS), 0.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Coords::RADIANS), Units::deg2rad(-2.0));
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Coords::DEGREES), -2.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMin(1, Axes::Coords::QSPACE), m_kfz1 - m_kiz);
+    EXPECT_THROW(P_clone->calculateMin(1, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Coords::UNDEFINED), Units::rad2deg(1.5));
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Coords::NBINS), 70.0);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Coords::RADIANS), 1.5);
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Coords::DEGREES), Units::rad2deg(1.5));
+    EXPECT_DOUBLE_EQ(P_clone->calculateMax(1, Axes::Coords::QSPACE), m_kfz2 - m_kiz);
+    EXPECT_THROW(P_clone->calculateMax(1, Axes::Coords::MM), std::runtime_error);
+
+    EXPECT_THROW(P_clone->calculateMin(2, Axes::Coords::UNDEFINED), std::runtime_error);
+    EXPECT_THROW(P_clone->calculateMax(2, Axes::Coords::UNDEFINED), std::runtime_error);
 }
diff --git a/Tests/UnitTests/Core/Instrument/SphericalDetectorTest.cpp b/Tests/UnitTests/Core/Instrument/SphericalDetectorTest.cpp
index c2e885652cb06277e13211545b08d43940602b65..72b5b90a593046c85e92ca7b2159b72780c854d2 100644
--- a/Tests/UnitTests/Core/Instrument/SphericalDetectorTest.cpp
+++ b/Tests/UnitTests/Core/Instrument/SphericalDetectorTest.cpp
@@ -20,7 +20,7 @@ TEST_F(SphericalDetectorTest, initialState)
 
     // checking size
     EXPECT_EQ(0u, detector.dimension());
-    EXPECT_EQ(Axes::Units::RADIANS, detector.defaultAxesUnits());
+    EXPECT_EQ(Axes::Coords::RADIANS, detector.defaultAxesUnits());
 
     // masks
     EXPECT_FALSE(detector.detectorMask()->hasMasks());
diff --git a/Wrap/Swig/libBornAgainDevice.i b/Wrap/Swig/libBornAgainDevice.i
index 6e1beacd20bad1f20f75111ed35b7ea39bcd3129..245a312a5bb2d91bf2777f10487117d3fea1b520 100644
--- a/Wrap/Swig/libBornAgainDevice.i
+++ b/Wrap/Swig/libBornAgainDevice.i
@@ -69,7 +69,7 @@
 %newobject ScanResolution::scanRelativeResolution;
 %newobject ScanResolution::scanAbsoluteResolution;
 
-%newobject SimulationResult::histogram2d(Axes::Units units_type = Axes::Units::UNDEFINED) const;
+%newobject SimulationResult::histogram2d(Axes::Coords units_type = Axes::Coords::UNDEFINED) const;
 
 %newobject IntensityDataIOFactory::readOutputData(const std::string& file_name);
 %newobject IntensityDataIOFactory::readIntensityData(const std::string& file_name);