diff --git a/Base/Axis/ConstKBinAxis.cpp b/Base/Axis/ConstKBinAxis.cpp
index f414d58af4f399c818f6fd11522325f8b6280fe0..e611fac2f9719d2258aba8e95b42fb5164c51c27 100644
--- a/Base/Axis/ConstKBinAxis.cpp
+++ b/Base/Axis/ConstKBinAxis.cpp
@@ -56,9 +56,9 @@ void ConstKBinAxis::clip(double lower, double upper)
         throw std::runtime_error(
             "ConstKBinAxis::clip() -> Error. 'lower' should be smaller than 'upper'");
 
-    if (lower < lowerBound())
+    if (lower < min())
         lower = bin(0).center();
-    if (upper >= upperBound())
+    if (upper >= max())
         upper = bin(size() - 1).center();
 
     size_t nbin1 = findClosestIndex(lower);
diff --git a/Base/Axis/FixedBinAxis.cpp b/Base/Axis/FixedBinAxis.cpp
index f03febbe22f1305a26dfcb142121635458b7aae2..03e66721fff7e71bb42c2530d17d5b5c44b619ac 100644
--- a/Base/Axis/FixedBinAxis.cpp
+++ b/Base/Axis/FixedBinAxis.cpp
@@ -53,9 +53,9 @@ Bin1D FixedBinAxis::bin(size_t index) const
 
 size_t FixedBinAxis::findClosestIndex(double value) const
 {
-    if (value < lowerBound())
+    if (value < min())
         return 0;
-    if (value >= upperBound())
+    if (value >= max())
         return m_nbins - 1;
 
     double step = (m_end - m_start) / m_nbins;
@@ -87,9 +87,9 @@ void FixedBinAxis::clip(double lower, double upper)
         throw std::runtime_error(
             "FixedBinAxis::clip() -> Error. 'lower' should be smaller than 'upper'");
 
-    if (lower < lowerBound())
+    if (lower < min())
         lower = bin(0).center();
-    if (upper >= upperBound())
+    if (upper >= max())
         upper = bin(size() - 1).center();
 
     const size_t nbin1 = findClosestIndex(lower);
@@ -108,8 +108,8 @@ void FixedBinAxis::clip(double lower, double upper)
 void FixedBinAxis::print(std::ostream& ostr) const
 {
     ostr << "FixedBinAxis(\"" << axisName() << "\", " << size() << ", "
-         << std::setprecision(std::numeric_limits<double>::digits10 + 2) << lowerBound() << ", "
-         << upperBound() << ")";
+         << std::setprecision(std::numeric_limits<double>::digits10 + 2) << min() << ", " << max()
+         << ")";
 }
 
 bool FixedBinAxis::equals(const IAxis& other) const
diff --git a/Base/Axis/FixedBinAxis.h b/Base/Axis/FixedBinAxis.h
index c2e10049070cfe5f441e7bac51784595156d3865..fee2450d8ddb1feb3a816b90c1f4babd0ca119f3 100644
--- a/Base/Axis/FixedBinAxis.h
+++ b/Base/Axis/FixedBinAxis.h
@@ -38,8 +38,8 @@ public:
 
     Bin1D bin(size_t index) const override;
 
-    double lowerBound() const override { return m_start; }
-    double upperBound() const override { return m_end; }
+    double min() const override { return m_start; }
+    double max() const override { return m_end; }
 
     double binCenter(size_t index) const override { return (*this)[index]; }
 
diff --git a/Base/Axis/IAxis.cpp b/Base/Axis/IAxis.cpp
index 0a401e830b7b1c0d4651abd46d2246aff5c68b10..2b59ece9cca2e046b96714c6d0ee8cee255fc0f1 100644
--- a/Base/Axis/IAxis.cpp
+++ b/Base/Axis/IAxis.cpp
@@ -44,20 +44,20 @@ void IAxis::clip(const std::pair<double, double> bounds)
 
 bool IAxis::contains(double value) const
 {
-    return value >= lowerBound() && value < upperBound();
+    return value >= min() && value < max();
 }
 
 std::pair<double, double> IAxis::bounds() const
 {
-    return {lowerBound(), upperBound()};
+    return {min(), max()};
 }
 
 double IAxis::span() const
 {
-    return upperBound() - lowerBound();
+    return max() - min();
 }
 
 double IAxis::center() const
 {
-    return (upperBound() + lowerBound()) / 2;
+    return (max() + min()) / 2;
 }
diff --git a/Base/Axis/IAxis.h b/Base/Axis/IAxis.h
index fc658d2a9e53389b9eeaefe4887cdc41e4298792..58c16d58d79dd0c48d5f498088ffcc80aba5afe0 100644
--- a/Base/Axis/IAxis.h
+++ b/Base/Axis/IAxis.h
@@ -42,10 +42,10 @@ public:
     virtual size_t size() const = 0;
 
     //! Returns value of first point of axis
-    virtual double lowerBound() const = 0;
+    virtual double min() const = 0;
 
     //! Returns value of last point of axis
-    virtual double upperBound() const = 0;
+    virtual double max() const = 0;
 
     //! Returns lower and upper bound in a pair.
     //! first is lower, second is upper.
diff --git a/Base/Axis/PointwiseAxis.cpp b/Base/Axis/PointwiseAxis.cpp
index 062b3e73ea838a1c46dbc03bc5cfa1e931087e65..41a6af82d298f7975f65e20d64db06f43500e8d9 100644
--- a/Base/Axis/PointwiseAxis.cpp
+++ b/Base/Axis/PointwiseAxis.cpp
@@ -30,17 +30,17 @@ PointwiseAxis* PointwiseAxis::clone() const
 Bin1D PointwiseAxis::bin(size_t index) const
 {
     checkIndex(index);
-    return Bin1D(lowerBoundary(index), upperBoundary(index));
+    return Bin1D(minary(index), maxary(index));
 }
 
-double PointwiseAxis::lowerBound() const
+double PointwiseAxis::min() const
 {
-    return lowerBoundary(0);
+    return minary(0);
 }
 
-double PointwiseAxis::upperBound() const
+double PointwiseAxis::max() const
 {
-    return upperBoundary(m_coordinates.size() - 1);
+    return maxary(m_coordinates.size() - 1);
 }
 
 double PointwiseAxis::binCenter(size_t index) const
@@ -59,7 +59,7 @@ size_t PointwiseAxis::findClosestIndex(double value) const
     const auto begin = m_coordinates.begin();
     auto result = std::lower_bound(begin, m_coordinates.end(), value);
     auto index = static_cast<size_t>(std::distance(begin, result));
-    return value < lowerBoundary(index) ? index - 1 : index;
+    return value < minary(index) ? index - 1 : index;
 }
 
 std::vector<double> PointwiseAxis::binBoundaries() const
@@ -68,8 +68,8 @@ std::vector<double> PointwiseAxis::binBoundaries() const
     const size_t v_size = m_coordinates.size();
     result.reserve(v_size + 1);
     for (size_t i = 0; i < v_size; ++i)
-        result.push_back(lowerBoundary(i));
-    result.push_back(upperBoundary(v_size - 1));
+        result.push_back(minary(i));
+    result.push_back(maxary(v_size - 1));
     return result;
 }
 
@@ -106,14 +106,14 @@ bool PointwiseAxis::equals(const IAxis& other) const
     return false;
 }
 
-double PointwiseAxis::lowerBoundary(size_t index) const
+double PointwiseAxis::minary(size_t index) const
 {
     if (index == 0)
         return m_coordinates.front();
     return 0.5 * (m_coordinates[index] + m_coordinates[index - 1]);
 }
 
-double PointwiseAxis::upperBoundary(size_t index) const
+double PointwiseAxis::maxary(size_t index) const
 {
     if (index + 1 == m_coordinates.size())
         return m_coordinates.back();
diff --git a/Base/Axis/PointwiseAxis.h b/Base/Axis/PointwiseAxis.h
index f0341f23e845fb565bf7ffaf4cea83042377a4b9..42b235a144355f340db7c133d70052488cea538d 100644
--- a/Base/Axis/PointwiseAxis.h
+++ b/Base/Axis/PointwiseAxis.h
@@ -55,10 +55,10 @@ public:
     Bin1D bin(size_t index) const override;
 
     //! Returns value of first on-axis point
-    double lowerBound() const override;
+    double min() const override;
 
     //! Returns value of last on-axis point
-    double upperBound() const override;
+    double max() const override;
 
     //! Returns the coordinate corresponding to the
     //! given index. For this type of axis ("pointwise")
@@ -78,8 +78,8 @@ private:
     void print(std::ostream& ostr) const override;
     bool equals(const IAxis& other) const override;
 
-    double lowerBoundary(size_t index) const;
-    double upperBoundary(size_t index) const;
+    double minary(size_t index) const;
+    double maxary(size_t index) const;
     void checkIndex(size_t index) const;
     void sanityCheck() const;
 
diff --git a/Base/Axis/VariableBinAxis.cpp b/Base/Axis/VariableBinAxis.cpp
index 8f7b584dacdcaf9af8b0328a504a437fa83387d6..a46685dfd22b1a49fddf40418e02f3efaeb5deb3 100644
--- a/Base/Axis/VariableBinAxis.cpp
+++ b/Base/Axis/VariableBinAxis.cpp
@@ -56,12 +56,12 @@ Bin1D VariableBinAxis::bin(size_t index) const
     return result;
 }
 
-double VariableBinAxis::lowerBound() const
+double VariableBinAxis::min() const
 {
     return m_bin_boundaries.front();
 }
 
-double VariableBinAxis::upperBound() const
+double VariableBinAxis::max() const
 {
     return m_bin_boundaries.back();
 }
@@ -76,9 +76,9 @@ size_t VariableBinAxis::findClosestIndex(double value) const
     if (m_bin_boundaries.size() < 2)
         throw std::runtime_error("VariableBinAxis::findClosestIndex() -> Error! "
                                  "VariableBinAxis not  correctly initialized");
-    if (value < lowerBound())
+    if (value < min())
         return 0;
-    if (value >= upperBound())
+    if (value >= max())
         return m_nbins - 1;
 
     auto top_limit = std::lower_bound(m_bin_boundaries.begin(), m_bin_boundaries.end(), value);
@@ -103,9 +103,9 @@ void VariableBinAxis::clip(double lower, double upper)
         throw std::runtime_error("VariableBinAxis::clip() -> Error. "
                                  "'lower' should be smaller than 'upper'");
 
-    if (lower < lowerBound())
+    if (lower < min())
         lower = bin(0).center();
-    if (upper >= upperBound())
+    if (upper >= max())
         upper = bin(size() - 1).center();
 
     const size_t nbin1 = findClosestIndex(lower);
diff --git a/Base/Axis/VariableBinAxis.h b/Base/Axis/VariableBinAxis.h
index e3190f37464677d42da5cd49bb4fd6e145ebc545..69fa844f211ee9185f2ffaf407b988650a3913d8 100644
--- a/Base/Axis/VariableBinAxis.h
+++ b/Base/Axis/VariableBinAxis.h
@@ -39,8 +39,8 @@ public:
 
     Bin1D bin(size_t index) const override;
 
-    double lowerBound() const override;
-    double upperBound() const override;
+    double min() const override;
+    double max() const override;
 
     double binCenter(size_t index) const override;
 
diff --git a/Device/Coord/CoordSystem1D.cpp b/Device/Coord/CoordSystem1D.cpp
index 79493314f2a0f87a5ffe6a41a219d41dab7edb37..510110d0d57de594640f4cb85e88d483bfaa2487 100644
--- a/Device/Coord/CoordSystem1D.cpp
+++ b/Device/Coord/CoordSystem1D.cpp
@@ -150,7 +150,7 @@ AngularReflectometryCoordinates::AngularReflectometryCoordinates(double waveleng
     : CoordSystem1D(createAxisFrom(axis, axis_units, angularAxisName(axis_units), wavelength))
     , m_wavelength(wavelength)
 {
-    if (m_axis->lowerBound() < 0 || m_axis->upperBound() > M_PI_2)
+    if (m_axis->min() < 0 || m_axis->max() > M_PI_2)
         throw std::runtime_error("Error in CoordSystem1D: input axis range is out of bounds");
 }
 
diff --git a/Device/Coord/CoordSystem2D.cpp b/Device/Coord/CoordSystem2D.cpp
index 54d20fb92c95e1784846d5eec9c0376c0b8cd28c..87bc3d83382b75847a49bc48755f829144b87bad 100644
--- a/Device/Coord/CoordSystem2D.cpp
+++ b/Device/Coord/CoordSystem2D.cpp
@@ -18,6 +18,7 @@
 #include "Base/Math/Constants.h"
 #include "Base/Pixel/RectangularPixel.h"
 #include "Base/Util/Assert.h"
+#include "Base/Vector/Direction.h"
 #include "Device/Coord/AxisNames.h"
 #include <algorithm>
 #include <cmath>
@@ -45,7 +46,14 @@ double axisAngle(size_t i_axis, R3 k_f)
 //  ************************************************************************************************
 
 CoordSystem2D::CoordSystem2D(const Direction& direction, double wavelength)
-    : m_wavelength(wavelength)
+    : CoordSystem2D({}, direction, wavelength)
+{
+}
+
+CoordSystem2D::CoordSystem2D(const OwningVector<IAxis>& axes, const Direction& direction,
+                             double wavelength)
+    : m_axes(axes)
+    , m_wavelength(wavelength)
     , m_alpha_i(-direction.alpha())
     , m_phi_i(direction.phi())
 {
@@ -59,36 +67,33 @@ CoordSystem2D::CoordSystem2D(const CoordSystem2D& other)
 {
 }
 
-void CoordSystem2D::addAxisData(std::string name, double min, double max, Coords default_units,
-                                size_t nbins)
+void CoordSystem2D::addAxisData(std::string name, double min, double max, size_t nbins)
 {
-    m_axes.emplace_back(AxisData{name, min, max, default_units, nbins});
+    m_axes.emplace_back(new FixedBinAxis(name, min, max, nbins));
 }
 
 double CoordSystem2D::calculateMin(size_t i_axis, Coords units) const
 {
     ASSERT(i_axis < rank());
     units = substituteDefaultUnits(units);
-    const auto& axis_data = m_axes[i_axis];
     if (units == Coords::NBINS)
         return 0.0;
-    return calculateValue(i_axis, units, axis_data.min);
+    return calculateValue(i_axis, units, m_axes[i_axis]->min());
 }
 
 double CoordSystem2D::calculateMax(size_t i_axis, Coords units) const
 {
     ASSERT(i_axis < rank());
     units = substituteDefaultUnits(units);
-    const auto& axis_data = m_axes[i_axis];
     if (units == Coords::NBINS)
-        return static_cast<double>(axis_data.nbins);
-    return calculateValue(i_axis, units, axis_data.max);
+        return m_axes[i_axis]->size();
+    return calculateValue(i_axis, units, m_axes[i_axis]->max());
 }
 
 size_t CoordSystem2D::axisSize(size_t i_axis) const
 {
     ASSERT(i_axis < rank());
-    return m_axes[i_axis].nbins;
+    return m_axes[i_axis]->size();
 }
 
 std::vector<Coords> CoordSystem2D::availableUnits() const
@@ -105,25 +110,15 @@ IAxis* CoordSystem2D::createConvertedAxis(size_t i_axis, Coords units) const
     return new FixedBinAxis(axis_name, axis_size, min, max);
 }
 
-void CoordSystem2D::addCoordAxis(const IAxis& axis)
-{
-    const size_t iNewAxis = m_axes.size();
-    addAxisData(axisName(iNewAxis), axis.lowerBound(), axis.upperBound(), defaultUnits(),
-                axis.size());
-}
-
 //  ************************************************************************************************
 //  class SphericalCoords
 //  ************************************************************************************************
 
 SphericalCoords::SphericalCoords(const OwningVector<IAxis>& axes, const Direction& direction,
                                  double wavelength)
-    : CoordSystem2D(direction, wavelength)
+    : CoordSystem2D(axes, direction, wavelength)
 {
     ASSERT(axes.size() == 2);
-
-    addCoordAxis(*axes[0]);
-    addCoordAxis(*axes[1]);
 }
 
 SphericalCoords::SphericalCoords(const SphericalCoords& other)
@@ -193,12 +188,9 @@ std::vector<std::map<Coords, std::string>> SphericalCoords::createNameMaps() con
 ImageCoords::ImageCoords(const OwningVector<IAxis>& axes,
                          const RectangularPixel& regionOfInterestPixel, const Direction& direction,
                          double wavelength)
-    : CoordSystem2D(direction, wavelength)
+    : CoordSystem2D(axes, direction, wavelength)
 {
     ASSERT(axes.size() == 2);
-
-    addCoordAxis(*axes[0]);
-    addCoordAxis(*axes[1]);
     m_detector_pixel.reset(regionOfInterestPixel.clone());
 }
 
@@ -232,7 +224,7 @@ double ImageCoords::calculateValue(size_t i_axis, Coords units, double value) co
     const auto k01 = m_detector_pixel->getPosition(0.0, 1.0);
     const auto k10 = m_detector_pixel->getPosition(1.0, 0.0);
     const auto& max_pos = i_axis == 0 ? k10 : k01; // position of max along given axis
-    const double shift = value - m_axes[i_axis].min;
+    const double shift = value - m_axes[i_axis]->min();
     const R3 out_dir = k00 + shift * (max_pos - k00).unit();
     const R3 k_f = out_dir.unit() * M_TWOPI / m_wavelength;
 
@@ -270,14 +262,10 @@ std::vector<std::map<Coords, std::string>> ImageCoords::createNameMaps() const
 //  class OffSpecularCoordinates
 //  ************************************************************************************************
 
-OffSpecularCoordinates::OffSpecularCoordinates(const Direction& direction, const IAxis& alpha_axis,
-                                               double alpha_f_min, double alpha_f_max, size_t nbins)
-    : CoordSystem2D(direction)
+OffSpecularCoordinates::OffSpecularCoordinates(const OwningVector<IAxis>& axes,
+                                               const Direction& direction)
+    : CoordSystem2D(axes, direction)
 {
-    addAxisData(axisName(0), alpha_axis.lowerBound(), alpha_axis.upperBound(), m_defaultUnits,
-                alpha_axis.size());
-
-    addAxisData(axisName(1), alpha_f_min, alpha_f_max, m_defaultUnits, nbins);
 }
 
 OffSpecularCoordinates::OffSpecularCoordinates(const OffSpecularCoordinates& other)
@@ -294,17 +282,17 @@ OffSpecularCoordinates* OffSpecularCoordinates::createForRectangularDetector(
     const double alpha_f_min = M_PI_2 - R3Util::theta(k00);
     const double alpha_f_max = M_PI_2 - R3Util::theta(k01);
 
-    return new OffSpecularCoordinates(direction, alphaAxis, alpha_f_min, alpha_f_max, yAxis.size());
+    IAxis* alpha_f = new FixedBinAxis("alpha_f", alpha_f_min, alpha_f_max, yAxis.size());
+    OwningVector<IAxis> axes({alphaAxis.clone(), alpha_f});
+    return new OffSpecularCoordinates(axes, direction);
 }
 
 OffSpecularCoordinates*
 OffSpecularCoordinates::createForSphericalDetector(const Direction& direction,
                                                    const IAxis& alphaAxis, const IAxis& yAxis)
 {
-    const double alpha_f_min = yAxis.lowerBound();
-    const double alpha_f_max = yAxis.upperBound();
-
-    return new OffSpecularCoordinates(direction, alphaAxis, alpha_f_min, alpha_f_max, yAxis.size());
+    OwningVector<IAxis> axes({alphaAxis.clone(), yAxis.clone()});
+    return new OffSpecularCoordinates(axes, direction);
 }
 
 OffSpecularCoordinates* OffSpecularCoordinates::clone() const
@@ -335,16 +323,17 @@ std::vector<std::map<Coords, std::string>> OffSpecularCoordinates::createNameMap
 
 const std::string z_axis_name = "Position [nm]";
 
+DepthProbeCoordinates::DepthProbeCoordinates(const OwningVector<IAxis>& axes,
+                                             const Direction& direction, double wavelength)
+    : CoordSystem2D(axes, direction, wavelength)
+{
+}
+
 DepthProbeCoordinates::DepthProbeCoordinates(const Direction& direction, double wavelength,
                                              const IAxis& alpha_axis, const IAxis& z_axis)
-    : CoordSystem2D(direction, wavelength)
-{
-    const auto& alpha_axis_name = axisName(0);
-    const auto& z_axis_name = axisName(1);
-    addAxisData(alpha_axis_name, alpha_axis.lowerBound(), alpha_axis.upperBound(), m_defaultUnits,
-                alpha_axis.size());
-    addAxisData(z_axis_name, z_axis.lowerBound(), z_axis.upperBound(), m_defaultUnits,
-                z_axis.size());
+    : DepthProbeCoordinates(OwningVector<IAxis>({alpha_axis.clone(), z_axis.clone()}), direction,
+                            wavelength)
+{
 }
 
 DepthProbeCoordinates::DepthProbeCoordinates(const DepthProbeCoordinates& other)
diff --git a/Device/Coord/CoordSystem2D.h b/Device/Coord/CoordSystem2D.h
index 6b54922a3a4940396dea2a4c97427cbdad84f7c8..407b58672ef2b0c28382dfb0be27dfe961b4111f 100644
--- a/Device/Coord/CoordSystem2D.h
+++ b/Device/Coord/CoordSystem2D.h
@@ -21,10 +21,10 @@
 #define BORNAGAIN_DEVICE_COORD_COORDSYSTEM2D_H
 
 #include "Base/Types/OwningVector.h"
-#include "Base/Vector/Direction.h"
 #include "Device/Coord/ICoordSystem.h"
 
 class Beam;
+class Direction;
 class RectangularPixel;
 
 //! Interface for objects that provide axis translations to different units for IDetector objects
@@ -32,6 +32,8 @@ class RectangularPixel;
 class CoordSystem2D : public ICoordSystem {
 public:
     CoordSystem2D(const Direction& direction, double wavelength = 0);
+    CoordSystem2D(const OwningVector<IAxis>& axes, const Direction& direction,
+                  double wavelength = 0);
     ~CoordSystem2D() override = default;
 
     size_t rank() const override { return m_axes.size(); }
@@ -46,24 +48,12 @@ public:
 
     IAxis* createConvertedAxis(size_t i_axis, Coords units) const override;
 
-    //! Adds a copy of the given axis to the axis system.
-    //! Order of adding defines position of axis (x-axis, y-axis, ...)
-    void addCoordAxis(const IAxis& axis);
-
 protected:
     CoordSystem2D(const CoordSystem2D& other);
 
-    void addAxisData(std::string name, double min, double max, Coords default_units, size_t nbins);
+    void addAxisData(std::string name, double min, double max, size_t nbins);
 
-#ifndef SWIG
-    struct AxisData {
-        std::string name;
-        double min, max;
-        Coords default_units;
-        size_t nbins;
-    };
-    std::vector<AxisData> m_axes;
-#endif
+    OwningVector<IAxis> m_axes;
     double m_wavelength;
     double m_alpha_i;
     double m_phi_i;
@@ -83,13 +73,11 @@ public:
 
     SphericalCoords* clone() const override;
 
-    //! Returns the list of all available units
     std::vector<Coords> availableUnits() const override;
 
-    Coords defaultUnits() const override { return m_defaultUnits; }
+    Coords defaultUnits() const override { return Coords::DEGREES; }
 
 private:
-    const Coords m_defaultUnits{Coords::DEGREES};
     SphericalCoords(const SphericalCoords& other); //!< used by clone()
     double calculateValue(size_t i_axis, Coords units, double value) const override;
     std::vector<std::map<Coords, std::string>> createNameMaps() const override;
@@ -107,13 +95,11 @@ public:
 
     ImageCoords* clone() const override;
 
-    //! Returns the list of all available units
     std::vector<Coords> availableUnits() const override;
 
-    Coords defaultUnits() const override { return m_defaultUnits; }
+    Coords defaultUnits() const override { return Coords::MM; }
 
 private:
-    const Coords m_defaultUnits{Coords::MM};
     ImageCoords(const ImageCoords& other); //!< used by clone()
     double calculateValue(size_t i_axis, Coords units, double value) const override;
     std::vector<std::map<Coords, std::string>> createNameMaps() const override;
@@ -138,12 +124,10 @@ public:
 
     OffSpecularCoordinates* clone() const override;
 
-    Coords defaultUnits() const override { return m_defaultUnits; }
+    Coords defaultUnits() const override { return Coords::DEGREES; }
 
 private:
-    const Coords m_defaultUnits{Coords::DEGREES};
-    OffSpecularCoordinates(const Direction& direction, const IAxis& alpha_axis, double alpha_f_min,
-                           double alpha_f_max, size_t nbins);
+    OffSpecularCoordinates(const OwningVector<IAxis>& axes, const Direction& direction);
     OffSpecularCoordinates(const OffSpecularCoordinates& other); //!< used by clone()
     double calculateValue(size_t i_axis, Coords units, double value) const override;
     std::vector<std::map<Coords, std::string>> createNameMaps() const override;
@@ -157,17 +141,17 @@ class DepthProbeCoordinates : public CoordSystem2D {
 public:
     DepthProbeCoordinates(const Direction& direction, double wavelength, const IAxis& alpha_axis,
                           const IAxis& z_axis);
+    DepthProbeCoordinates(const OwningVector<IAxis>& axes, const Direction& direction,
+                          double wavelength);
     ~DepthProbeCoordinates() override;
 
     DepthProbeCoordinates* clone() const override;
 
-    //! Returns the list of all available units
     std::vector<Coords> availableUnits() const override;
 
-    Coords defaultUnits() const override { return m_defaultUnits; }
+    Coords defaultUnits() const override { return Coords::DEGREES; }
 
 private:
-    const Coords m_defaultUnits{Coords::DEGREES};
     DepthProbeCoordinates(const DepthProbeCoordinates& other); //!< used by clone()
     double calculateValue(size_t, Coords units, double value) const override;
     std::vector<std::map<Coords, std::string>> createNameMaps() const override;
diff --git a/Device/Histo/IHistogram.cpp b/Device/Histo/IHistogram.cpp
index 19cbb3d0f47cfd2d1685fc0dc625686537eb75c2..708044ff77a2151babcf8af9f403cfb3e04257ea 100644
--- a/Device/Histo/IHistogram.cpp
+++ b/Device/Histo/IHistogram.cpp
@@ -55,12 +55,12 @@ const IAxis& IHistogram::yAxis() const
 
 double IHistogram::xMin() const
 {
-    return xAxis().lowerBound();
+    return xAxis().min();
 }
 
 double IHistogram::xMax() const
 {
-    return xAxis().upperBound();
+    return xAxis().max();
 }
 
 size_t IHistogram::getNbinsX() const
@@ -70,12 +70,12 @@ size_t IHistogram::getNbinsX() const
 
 double IHistogram::yMin() const
 {
-    return yAxis().lowerBound();
+    return yAxis().min();
 }
 
 double IHistogram::yMax() const
 {
-    return yAxis().upperBound();
+    return yAxis().max();
 }
 
 size_t IHistogram::getNbinsY() const
diff --git a/GUI/Model/Data/Data1DViewItem.cpp b/GUI/Model/Data/Data1DViewItem.cpp
index d24fb1a31aca14f7dede2c6cc721da15ae38198b..00df0745b34a6112d4b271b64de407490a0d46cd 100644
--- a/GUI/Model/Data/Data1DViewItem.cpp
+++ b/GUI/Model/Data/Data1DViewItem.cpp
@@ -74,22 +74,22 @@ int Data1DViewItem::getNbins() const
 
 double Data1DViewItem::getLowerX() const
 {
-    return xAxisItem()->lowerBound();
+    return xAxisItem()->min();
 }
 
 double Data1DViewItem::getUpperX() const
 {
-    return xAxisItem()->upperBound();
+    return xAxisItem()->max();
 }
 
 double Data1DViewItem::getLowerY() const
 {
-    return yAxisItem()->lowerBound();
+    return yAxisItem()->min();
 }
 
 double Data1DViewItem::getUpperY() const
 {
-    return yAxisItem()->upperBound();
+    return yAxisItem()->max();
 }
 
 bool Data1DViewItem::isLog() const
@@ -128,8 +128,8 @@ void Data1DViewItem::setAxesRangeToData()
     if (!data)
         return;
 
-    setLowerX(data->axis(0).lowerBound());
-    setUpperX(data->axis(0).upperBound());
+    setLowerX(data->axis(0).min());
+    setUpperX(data->axis(0).max());
 
     auto data_range = dataRange(data.get());
     setLowerY(data_range.first);
diff --git a/GUI/Model/Data/IntensityDataItem.cpp b/GUI/Model/Data/IntensityDataItem.cpp
index d1a6f1869186e7bc831d8fdea3453b457251b059..ebc0c6facc03bb6d636aea1e600bc100974ca694 100644
--- a/GUI/Model/Data/IntensityDataItem.cpp
+++ b/GUI/Model/Data/IntensityDataItem.cpp
@@ -94,56 +94,56 @@ int IntensityDataItem::getNbinsY() const
 
 double IntensityDataItem::getLowerX() const
 {
-    return xAxisItem()->lowerBound();
+    return xAxisItem()->min();
 }
 
 double IntensityDataItem::getUpperX() const
 {
-    return xAxisItem()->upperBound();
+    return xAxisItem()->max();
 }
 
 double IntensityDataItem::xMin() const
 {
     const double defaultXmin(0.0);
-    return m_data ? m_data->axis(0).lowerBound() : defaultXmin;
+    return m_data ? m_data->axis(0).min() : defaultXmin;
 }
 
 double IntensityDataItem::xMax() const
 {
     const double defaultXmax(1.0);
-    return m_data ? m_data->axis(0).upperBound() : defaultXmax;
+    return m_data ? m_data->axis(0).max() : defaultXmax;
 }
 
 double IntensityDataItem::getLowerY() const
 {
-    return yAxisItem()->lowerBound();
+    return yAxisItem()->min();
 }
 
 double IntensityDataItem::getUpperY() const
 {
-    return yAxisItem()->upperBound();
+    return yAxisItem()->max();
 }
 
 double IntensityDataItem::yMin() const
 {
     const double defaultYmin(0.0);
-    return m_data ? m_data->axis(1).lowerBound() : defaultYmin;
+    return m_data ? m_data->axis(1).min() : defaultYmin;
 }
 
 double IntensityDataItem::yMax() const
 {
     const double defaultYmax(1.0);
-    return m_data ? m_data->axis(1).upperBound() : defaultYmax;
+    return m_data ? m_data->axis(1).max() : defaultYmax;
 }
 
 double IntensityDataItem::getLowerZ() const
 {
-    return zAxisItem()->lowerBound();
+    return zAxisItem()->min();
 }
 
 double IntensityDataItem::getUpperZ() const
 {
-    return zAxisItem()->upperBound();
+    return zAxisItem()->max();
 }
 
 QString IntensityDataItem::getGradientValue() const
diff --git a/GUI/Model/Data/SpecularDataItem.cpp b/GUI/Model/Data/SpecularDataItem.cpp
index 08b2a5dd5932300d9dfb1afd833874a34255f3e5..5c8949cf9e5dfe354aec5d1fdd546c30c7e8e10b 100644
--- a/GUI/Model/Data/SpecularDataItem.cpp
+++ b/GUI/Model/Data/SpecularDataItem.cpp
@@ -60,34 +60,34 @@ int SpecularDataItem::getNbins() const
 
 double SpecularDataItem::getLowerX() const
 {
-    return xAxisItem()->lowerBound();
+    return xAxisItem()->min();
 }
 
 double SpecularDataItem::getUpperX() const
 {
-    return xAxisItem()->upperBound();
+    return xAxisItem()->max();
 }
 
 double SpecularDataItem::xMin() const
 {
     const double defaultXmin(0.0);
-    return m_data ? m_data->axis(0).lowerBound() : defaultXmin;
+    return m_data ? m_data->axis(0).min() : defaultXmin;
 }
 
 double SpecularDataItem::xMax() const
 {
     const double defaultXmax(1.0);
-    return m_data ? m_data->axis(0).upperBound() : defaultXmax;
+    return m_data ? m_data->axis(0).max() : defaultXmax;
 }
 
 double SpecularDataItem::getLowerY() const
 {
-    return yAxisItem()->lowerBound();
+    return yAxisItem()->min();
 }
 
 double SpecularDataItem::getUpperY() const
 {
-    return yAxisItem()->upperBound();
+    return yAxisItem()->max();
 }
 
 double SpecularDataItem::yMin() const
diff --git a/GUI/Model/Device/AxesItems.cpp b/GUI/Model/Device/AxesItems.cpp
index 1a44a919c41cabbe014e5d7bc485de40f215d491..b140efa157a99d2ba77e30bfc785b95ebf9178a7 100644
--- a/GUI/Model/Device/AxesItems.cpp
+++ b/GUI/Model/Device/AxesItems.cpp
@@ -38,7 +38,7 @@ SessionItem* BasicAxisItem::binsItem() const
     return getItem(P_NBINS);
 }
 
-DoubleDescriptor BasicAxisItem::lowerBound(const QString& unit) const
+DoubleDescriptor BasicAxisItem::min(const QString& unit) const
 {
     DoubleDescriptor d(getItem(P_MIN_DEG), unit);
     d.label = "Min";
@@ -50,12 +50,12 @@ void BasicAxisItem::setLowerBound(double value)
     setItemValue(P_MIN_DEG, value);
 }
 
-SessionItem* BasicAxisItem::lowerBoundItem() const
+SessionItem* BasicAxisItem::minItem() const
 {
     return getItem(P_MIN_DEG);
 }
 
-DoubleDescriptor BasicAxisItem::upperBound(const QString& unit) const
+DoubleDescriptor BasicAxisItem::max(const QString& unit) const
 {
     DoubleDescriptor d(getItem(P_MAX_DEG), unit);
     d.label = "Max";
@@ -67,7 +67,7 @@ void BasicAxisItem::setUpperBound(double value)
     setItemValue(P_MAX_DEG, value);
 }
 
-SessionItem* BasicAxisItem::upperBoundItem() const
+SessionItem* BasicAxisItem::maxItem() const
 {
     return getItem(P_MAX_DEG);
 }
@@ -109,8 +109,8 @@ bool BasicAxisItem::isTitleVisiblePropertyName(const QString& name)
 
 std::unique_ptr<IAxis> BasicAxisItem::createAxis(double scale) const
 {
-    return std::make_unique<FixedBinAxis>(title().toStdString(), binCount(), lowerBound() * scale,
-                                          upperBound() * scale);
+    return std::make_unique<FixedBinAxis>(title().toStdString(), binCount(), min() * scale,
+                                          max() * scale);
 }
 
 SessionItem* BasicAxisItem::visibilityItem() const
diff --git a/GUI/Model/Device/AxesItems.h b/GUI/Model/Device/AxesItems.h
index e7bdd6f9f59eae9517b44873eb9548270c985cab..8d4d6f19d7e5c558e3417db41df6a095f047d97d 100644
--- a/GUI/Model/Device/AxesItems.h
+++ b/GUI/Model/Device/AxesItems.h
@@ -43,13 +43,13 @@ public:
     void setBinCount(size_t value);
     SessionItem* binsItem() const;
 
-    DoubleDescriptor lowerBound(const QString& unit = QString()) const;
+    DoubleDescriptor min(const QString& unit = QString()) const;
     void setLowerBound(double value);
-    SessionItem* lowerBoundItem() const;
+    SessionItem* minItem() const;
 
-    DoubleDescriptor upperBound(const QString& unit = QString()) const;
+    DoubleDescriptor max(const QString& unit = QString()) const;
     void setUpperBound(double value);
-    SessionItem* upperBoundItem() const;
+    SessionItem* maxItem() const;
 
     /// either lower bound or upper bound property name
     static bool isBoundsPropertiesName(const QString& name);
diff --git a/GUI/Model/Device/BeamItems.cpp b/GUI/Model/Device/BeamItems.cpp
index 406d137a881c54db509fca178be06bd33d1a0ae3..337e120362e078c97a6d99e43ca7b037ecd73e77 100644
--- a/GUI/Model/Device/BeamItems.cpp
+++ b/GUI/Model/Device/BeamItems.cpp
@@ -197,7 +197,7 @@ void SpecularBeamItem::updateWavelength()
     if (auto* pointwiseAxis = dynamic_cast<PointwiseAxisItem*>(item)) {
         const auto* axis = pointwiseAxis->axis();
         if (axis && pointwiseAxis->getUnitsLabel() == "q-space")
-            wavelength->setToRange(getLimits(axis->upperBound()));
+            wavelength->setToRange(getLimits(axis->max()));
     } else
         wavelength->setToRange(RealLimits::positive());
 }
diff --git a/GUI/Model/Device/InstrumentItems.cpp b/GUI/Model/Device/InstrumentItems.cpp
index da9ff421b03e389fc1ab20513376e82a226c992e..3ad10a8922b8a82c885c9408b04a9b9064523a19 100644
--- a/GUI/Model/Device/InstrumentItems.cpp
+++ b/GUI/Model/Device/InstrumentItems.cpp
@@ -306,7 +306,7 @@ std::unique_ptr<DepthProbeSimulation> DepthProbeInstrumentItem::createSimulation
     auto axis = axis_item->createAxis(Units::deg);
 
     simulation->setBeamParameters(beamItem()->wavelength(), static_cast<int>(axis->size()),
-                                  axis->lowerBound(), axis->upperBound());
+                                  axis->min(), axis->max());
 
     simulation->setZSpan(m_zAxis.nbins(), m_zAxis.min(), m_zAxis.max());
 
diff --git a/GUI/Model/Device/PointwiseAxisItem.cpp b/GUI/Model/Device/PointwiseAxisItem.cpp
index 1e1bfec0094de7c72f435af349a7f58fda3cd063..d7eb051860f690789a6b08490213de2edc9784e3 100644
--- a/GUI/Model/Device/PointwiseAxisItem.cpp
+++ b/GUI/Model/Device/PointwiseAxisItem.cpp
@@ -25,9 +25,9 @@ PointwiseAxisItem::PointwiseAxisItem()
     : BasicAxisItem(M_TYPE)
     , m_instrument(nullptr)
 {
-    lowerBoundItem()->setEnabled(false);
+    minItem()->setEnabled(false);
     binsItem()->setEnabled(false);
-    upperBoundItem()->setEnabled(false);
+    maxItem()->setEnabled(false);
     addProperty(P_NATIVE_AXIS_UNITS, "nbins");
 }
 
diff --git a/GUI/Model/Device/SpecularBeamInclinationItem.cpp b/GUI/Model/Device/SpecularBeamInclinationItem.cpp
index 8833dc7d18515237bf86e02466bea7f073ed001d..a16bea1ed4f03d2b758c5f071db5651adada52aa 100644
--- a/GUI/Model/Device/SpecularBeamInclinationItem.cpp
+++ b/GUI/Model/Device/SpecularBeamInclinationItem.cpp
@@ -27,10 +27,10 @@ void setAxisPresentationDefaults(BasicAxisItem* axisItem)
 
     axisItem->setTitle("alpha_i");
     axisItem->binsItem()->setToolTip("Number of points in scan");
-    axisItem->lowerBoundItem()->setToolTip("Starting value [deg]");
-    axisItem->upperBoundItem()->setToolTip("Ending value [deg]");
-    axisItem->lowerBoundItem()->setLimits(RealLimits::limited(0., 90.));
-    axisItem->upperBoundItem()->setLimits(RealLimits::limited(0., 90.));
+    axisItem->minItem()->setToolTip("Starting value [deg]");
+    axisItem->maxItem()->setToolTip("Ending value [deg]");
+    axisItem->minItem()->setLimits(RealLimits::limited(0., 90.));
+    axisItem->maxItem()->setLimits(RealLimits::limited(0., 90.));
 
     if (!dynamic_cast<PointwiseAxisItem*>(axisItem)) {
         axisItem->setLowerBound(0.0);
diff --git a/GUI/View/FromDomain/FromDomain.cpp b/GUI/View/FromDomain/FromDomain.cpp
index e569f7599ea2426822bd1f80c582548b163f8908..33b3fc17b4c9a8e0022090b370816723800d9df7 100644
--- a/GUI/View/FromDomain/FromDomain.cpp
+++ b/GUI/View/FromDomain/FromDomain.cpp
@@ -230,7 +230,7 @@ void setDistribution(BeamDistributionItem* part_distr_item, ParameterDistributio
     DistributionItem* distItem = nullptr;
     if (const auto* distr = dynamic_cast<const DistributionGate*>(p_distribution)) {
         auto* distr_gate_item = part_distr_item->setDistributionType<DistributionGateItem>();
-        distr_gate_item->setRange(factor * distr->lowerBound(), factor * distr->upperBound());
+        distr_gate_item->setRange(factor * distr->min(), factor * distr->max());
         distItem = distr_gate_item;
     } else if (const auto* distr = dynamic_cast<const DistributionLorentz*>(p_distribution)) {
         auto* distr_lorentz_item = part_distr_item->setDistributionType<DistributionLorentzItem>();
@@ -570,13 +570,13 @@ void GUI::Transform::FromDomain::setSphericalDetector(SphericalDetectorItem* det
 
     auto& phiAxis = detectorItem->phiAxis();
     phiAxis.setNbins(phi_axis.size());
-    phiAxis.setMin(Units::rad2deg(phi_axis.lowerBound()));
-    phiAxis.setMax(Units::rad2deg(phi_axis.upperBound()));
+    phiAxis.setMin(Units::rad2deg(phi_axis.min()));
+    phiAxis.setMax(Units::rad2deg(phi_axis.max()));
 
     auto& alphaAxis = detectorItem->alphaAxis();
     alphaAxis.setNbins(alpha_axis.size());
-    alphaAxis.setMin(Units::rad2deg(alpha_axis.lowerBound()));
-    alphaAxis.setMax(Units::rad2deg(alpha_axis.upperBound()));
+    alphaAxis.setMin(Units::rad2deg(alpha_axis.min()));
+    alphaAxis.setMax(Units::rad2deg(alpha_axis.max()));
 }
 
 void GUI::Transform::FromDomain::setRectangularDetector(RectangularDetectorItem* detectorItem,
@@ -768,8 +768,8 @@ void GUI::Transform::FromDomain::setAxisItem(BasicAxisItem* item, const IAxis& a
         throw Error("GUI::Transform::FromDomain::setAxisItem() -> Error. Unexpected axis");
 
     item->setBinCount(static_cast<int>(axis.size()));
-    item->setLowerBound(factor * axis.lowerBound());
-    item->setUpperBound(factor * axis.upperBound());
+    item->setLowerBound(factor * axis.min());
+    item->setUpperBound(factor * axis.max());
     item->setTitle(QString::fromStdString(axis.axisName()));
 }
 
diff --git a/GUI/View/FromDomain/GUIObjectBuilder.cpp b/GUI/View/FromDomain/GUIObjectBuilder.cpp
index 0ecd40f67e1783e31ae1b9bcaa883490dd269245..2f714a04a4afa3082781c2039c5985a9d3e24531 100644
--- a/GUI/View/FromDomain/GUIObjectBuilder.cpp
+++ b/GUI/View/FromDomain/GUIObjectBuilder.cpp
@@ -49,8 +49,8 @@ OffSpecularInstrumentItem* createOffSpecularInstrumentItem(InstrumentItems* mode
 
     const double factor = 1. / Units::deg;
     result->alphaAxis().setNbins(simulation.beamAxis()->size());
-    result->alphaAxis().setMin(factor * simulation.beamAxis()->lowerBound());
-    result->alphaAxis().setMax(factor * simulation.beamAxis()->upperBound());
+    result->alphaAxis().setMin(factor * simulation.beamAxis()->min());
+    result->alphaAxis().setMax(factor * simulation.beamAxis()->max());
 
     return result;
 }
diff --git a/GUI/View/Instrument/SphericalAxisEditor.cpp b/GUI/View/Instrument/SphericalAxisEditor.cpp
index f955d79ba856d8dad4db1779975f9d80fa1bb064..87429e22469ab74f9882d33e3d57c63c48d3ec60 100644
--- a/GUI/View/Instrument/SphericalAxisEditor.cpp
+++ b/GUI/View/Instrument/SphericalAxisEditor.cpp
@@ -67,8 +67,8 @@ void SphericalAxisForm::updateData()
     QSignalBlocker b3(m_maximumSpinBox);
     if (m_item) {
         m_nbinsSpinBox->setValue(m_item->binCount());
-        m_minimumSpinBox->setValue(m_item->lowerBound());
-        m_maximumSpinBox->setValue(m_item->upperBound());
+        m_minimumSpinBox->setValue(m_item->min());
+        m_maximumSpinBox->setValue(m_item->max());
     } else {
         m_nbinsSpinBox->setValue(1);
         m_minimumSpinBox->setValue(0.0);
@@ -86,20 +86,20 @@ void SphericalAxisForm::onNbinsValueChanged(int value)
 
 void SphericalAxisForm::onMinimumValueChanged(double value)
 {
-    if (m_item && m_item->lowerBound() != value) {
+    if (m_item && m_item->min() != value) {
         m_item->setLowerBound(value);
         emit dataChanged();
-        if (m_item->upperBound() < value)
+        if (m_item->max() < value)
             m_maximumSpinBox->setValue(value);
     }
 }
 
 void SphericalAxisForm::onMaximumValueChanged(double value)
 {
-    if (m_item && m_item->upperBound() != value) {
+    if (m_item && m_item->max() != value) {
         m_item->setUpperBound(value);
         emit dataChanged();
-        if (m_item->lowerBound() > value)
+        if (m_item->min() > value)
             m_minimumSpinBox->setValue(value);
     }
 }
diff --git a/GUI/View/PlotUtil/IntensityDataPropertyWidget.cpp b/GUI/View/PlotUtil/IntensityDataPropertyWidget.cpp
index 8a24f193cfa14c5b94fa7b68156ed8926e70c7cc..0cbcbd88ba7f18fe1cd5e8f14358ef0cb157a246 100644
--- a/GUI/View/PlotUtil/IntensityDataPropertyWidget.cpp
+++ b/GUI/View/PlotUtil/IntensityDataPropertyWidget.cpp
@@ -69,8 +69,8 @@ void IntensityDataPropertyWidget::setItem(IntensityDataItem* item)
     xFormLayout->setContentsMargins(0, 0, 0, 0);
     xFormLayout->setSpacing(5);
 
-    xFormLayout->addRow("Min:", createDoubleSpinbox(item->xAxisItem()->lowerBound()));
-    xFormLayout->addRow("Max:", createDoubleSpinbox(item->xAxisItem()->upperBound()));
+    xFormLayout->addRow("Min:", createDoubleSpinbox(item->xAxisItem()->min()));
+    xFormLayout->addRow("Max:", createDoubleSpinbox(item->xAxisItem()->max()));
     xFormLayout->addRow("Title:", createTextEdit(item->xAxisItem()->titleItem()));
 
     m_mainLayout->addRow(xGroup);
@@ -81,8 +81,8 @@ void IntensityDataPropertyWidget::setItem(IntensityDataItem* item)
     yFormLayout->setContentsMargins(0, 0, 0, 0);
     yFormLayout->setSpacing(5);
 
-    yFormLayout->addRow("Min:", createDoubleSpinbox(item->yAxisItem()->lowerBound()));
-    yFormLayout->addRow("Max:", createDoubleSpinbox(item->yAxisItem()->upperBound()));
+    yFormLayout->addRow("Min:", createDoubleSpinbox(item->yAxisItem()->min()));
+    yFormLayout->addRow("Max:", createDoubleSpinbox(item->yAxisItem()->max()));
     yFormLayout->addRow("Title:", createTextEdit(item->yAxisItem()->titleItem()));
 
     m_mainLayout->addRow(yGroup);
@@ -93,8 +93,8 @@ void IntensityDataPropertyWidget::setItem(IntensityDataItem* item)
     zFormLayout->setContentsMargins(0, 0, 0, 0);
     zFormLayout->setSpacing(5);
 
-    zFormLayout->addRow("Min:", createDoubleSpinbox(item->zAxisItem()->lowerBound()));
-    zFormLayout->addRow("Max:", createDoubleSpinbox(item->zAxisItem()->upperBound()));
+    zFormLayout->addRow("Min:", createDoubleSpinbox(item->zAxisItem()->min()));
+    zFormLayout->addRow("Max:", createDoubleSpinbox(item->zAxisItem()->max()));
     zFormLayout->addRow(createCheckBox("log10", item->zAxisItem()->logScaleItem()));
     zFormLayout->addRow(createCheckBox("Visible", item->zAxisItem()->visibilityItem()));
 
diff --git a/GUI/View/PropertyEditor/SpecularDataPropertyWidget.cpp b/GUI/View/PropertyEditor/SpecularDataPropertyWidget.cpp
index eb91624b0692dea976c6c68a81c98fdae71fbc54..f39236e28949d83f22cefb71b59f90dabea3fd03 100644
--- a/GUI/View/PropertyEditor/SpecularDataPropertyWidget.cpp
+++ b/GUI/View/PropertyEditor/SpecularDataPropertyWidget.cpp
@@ -83,8 +83,8 @@ void SpecularDataPropertyWidget::setCurrentItem(SessionItem* item)
     xFormLayout->setContentsMargins(0, 0, 0, 0);
     xFormLayout->setSpacing(5);
 
-    xFormLayout->addRow("Min:", createDoubleSpinbox(xAxisItem->lowerBound()));
-    xFormLayout->addRow("Max:", createDoubleSpinbox(xAxisItem->upperBound()));
+    xFormLayout->addRow("Min:", createDoubleSpinbox(xAxisItem->min()));
+    xFormLayout->addRow("Max:", createDoubleSpinbox(xAxisItem->max()));
     xFormLayout->addRow("Title:", createTextEdit(xAxisItem->titleItem()));
 
     m_mainLayout->addRow(xGroup);
@@ -95,8 +95,8 @@ void SpecularDataPropertyWidget::setCurrentItem(SessionItem* item)
     yFormLayout->setContentsMargins(0, 0, 0, 0);
     yFormLayout->setSpacing(5);
 
-    yFormLayout->addRow("Min:", createDoubleSpinbox(yAxisItem->lowerBound()));
-    yFormLayout->addRow("Max:", createDoubleSpinbox(yAxisItem->upperBound()));
+    yFormLayout->addRow("Min:", createDoubleSpinbox(yAxisItem->min()));
+    yFormLayout->addRow("Max:", createDoubleSpinbox(yAxisItem->max()));
     yFormLayout->addRow("Title:", createTextEdit(yAxisItem->titleItem()));
     yFormLayout->addRow(createCheckBox("log10", yAxisItem->logScaleItem()));
 
diff --git a/Param/Distrib/Distributions.h b/Param/Distrib/Distributions.h
index 4275579ea0c555d4338ac339570aa708d75e3251..4d2609fb74ce1a850f67117c5abe63d77cb50c26 100644
--- a/Param/Distrib/Distributions.h
+++ b/Param/Distrib/Distributions.h
@@ -104,8 +104,8 @@ public:
 
     double probabilityDensity(double x) const override;
     double mean() const override { return (m_min + m_max) / 2.0; }
-    double lowerBound() const { return m_min; }
-    double upperBound() const { return m_max; }
+    double min() const { return m_min; }
+    double max() const { return m_max; }
 
     //! Returns list of sample values
     std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
diff --git a/Sim/Export/PyFmt2.cpp b/Sim/Export/PyFmt2.cpp
index 973e98c66395a27b9ae2923a42f40d2dc274f747..3ff6f1848cc567a6f39a732195e163d6c02f8dee 100644
--- a/Sim/Export/PyFmt2.cpp
+++ b/Sim/Export/PyFmt2.cpp
@@ -95,8 +95,8 @@ std::string printAxis(const IAxis* axis, const std::string& unit)
     std::ostringstream result;
     if (const auto* a = dynamic_cast<const FixedBinAxis*>(axis); a)
         result << "ba.FixedBinAxis(" << Py::Fmt::printString(a->axisName()) << ", " << a->size()
-               << ", " << Py::Fmt::printValue(a->lowerBound(), unit) << ", "
-               << Py::Fmt::printValue(a->upperBound(), unit) << ")";
+               << ", " << Py::Fmt::printValue(a->min(), unit) << ", "
+               << Py::Fmt::printValue(a->max(), unit) << ")";
     else if (const auto* a = dynamic_cast<const PointwiseAxis*>(axis); a) {
         result << "numpy.asarray([";
         const std::vector<double>& points = a->binCenters();
diff --git a/Sim/Export/SimulationToPython.cpp b/Sim/Export/SimulationToPython.cpp
index cad2656f248f3a97fe438e41253bcbb628ce53f9..574955c704de99b0097201fb15a422d2cfb05fbb 100644
--- a/Sim/Export/SimulationToPython.cpp
+++ b/Sim/Export/SimulationToPython.cpp
@@ -155,12 +155,10 @@ std::string defineDetector(const ISimulation* simulation)
                    << ", " << Py::Fmt::printDegrees(det->axis(0).center()) << ", "
                    << Py::Fmt::printDegrees(det->axis(1).center());
         } else {
-            result << det->axis(0).size() << ", "
-                   << Py::Fmt::printDegrees(det->axis(0).lowerBound()) << ", "
-                   << Py::Fmt::printDegrees(det->axis(0).upperBound()) << ", "
-                   << det->axis(1).size() << ", "
-                   << Py::Fmt::printDegrees(det->axis(1).lowerBound()) << ", "
-                   << Py::Fmt::printDegrees(det->axis(1).upperBound());
+            result << det->axis(0).size() << ", " << Py::Fmt::printDegrees(det->axis(0).min())
+                   << ", " << Py::Fmt::printDegrees(det->axis(0).max()) << ", "
+                   << det->axis(1).size() << ", " << Py::Fmt::printDegrees(det->axis(1).min())
+                   << ", " << Py::Fmt::printDegrees(det->axis(1).max());
         }
         result << ")\n";
     } else if (const auto* const det = dynamic_cast<const RectangularDetector*>(&detector)) {
diff --git a/Sim/Simulation/DepthProbeSimulation.cpp b/Sim/Simulation/DepthProbeSimulation.cpp
index e0d0ba07d25b09c7633b9992e6b2a65db47dd268..738a69936bf56554449fd3cf46564f8f0f1d6cf0 100644
--- a/Sim/Simulation/DepthProbeSimulation.cpp
+++ b/Sim/Simulation/DepthProbeSimulation.cpp
@@ -107,11 +107,11 @@ void DepthProbeSimulation::setBeamParameters(double lambda, const IAxis& alpha_a
     if (lambda <= 0.0)
         throw std::runtime_error(
             "Error in DepthProbeSimulation::setBeamParameters: wavelength must be positive.");
-    if (alpha_axis.lowerBound() < 0.0)
+    if (alpha_axis.min() < 0.0)
         throw std::runtime_error(
             "Error in DepthProbeSimulation::setBeamParameters: minimum value on "
             "angle axis is negative.");
-    if (alpha_axis.lowerBound() >= alpha_axis.upperBound())
+    if (alpha_axis.min() >= alpha_axis.max())
         throw std::runtime_error(
             "Error in DepthProbeSimulation::setBeamParameters: alpha bounds are not sorted.");
     if (alpha_axis.size() == 0)
diff --git a/Sim/Simulation/OffSpecularSimulation.cpp b/Sim/Simulation/OffSpecularSimulation.cpp
index 0abd15cd891095bbd8e960ca10b61e8861146b0b..df14684dd4982790680b45ebe2adaa3c2dc94fd1 100644
--- a/Sim/Simulation/OffSpecularSimulation.cpp
+++ b/Sim/Simulation/OffSpecularSimulation.cpp
@@ -69,7 +69,7 @@ void OffSpecularSimulation::setBeamParameters(double wavelength, const IAxis& al
     if (alpha_axis.size() < 1)
         throw std::runtime_error("OffSpecularSimulation::prepareSimulation() "
                                  "-> Error. Incoming alpha range size < 1.");
-    const double alpha_zero = alpha_axis.lowerBound();
+    const double alpha_zero = alpha_axis.min();
     instrument().setBeamParameters(wavelength, alpha_zero, phi_i);
     updateIntensityMap();
 }
diff --git a/Sim/Simulation/SpecularSimulation.cpp b/Sim/Simulation/SpecularSimulation.cpp
index da95bd9d6040f5e05f7b379838f5c036d6db4c9c..6272f25c6d6f001210789a524ddf76e476521acd 100644
--- a/Sim/Simulation/SpecularSimulation.cpp
+++ b/Sim/Simulation/SpecularSimulation.cpp
@@ -88,7 +88,7 @@ void SpecularSimulation::setScan(const ISpecularScan& scan)
         throw std::runtime_error("Error in SpecularSimulation::setScan: Scan cannot be set twice");
 
     // TODO: move inside AlphaScan when pointwise resolution is implemented
-    if (scan.coordinateAxis()->lowerBound() < 0.0)
+    if (scan.coordinateAxis()->min() < 0.0)
         throw std::runtime_error(
             "Error in SpecularSimulation::setScan: minimum value on coordinate axis is negative.");
 
diff --git a/Tests/PyUnit/intensitydata.py b/Tests/PyUnit/intensitydata.py
index 0a23c68ccc714d23195f44f41bfdd82a9550c399..2d7a5287c57fedf3d49c10b8ea9890c5d75f4d09 100644
--- a/Tests/PyUnit/intensitydata.py
+++ b/Tests/PyUnit/intensitydata.py
@@ -33,8 +33,8 @@ class IntensityDataTest(unittest.TestCase):
     def test_create_1d_object(self):
         axis0 = ba.FixedBinAxis("angle", 20, 0, 20.)
         self.assertEqual(20, axis0.size())
-        self.assertEqual(0, axis0.lowerBound())
-        self.assertEqual(20, axis0.upperBound())
+        self.assertEqual(0, axis0.min())
+        self.assertEqual(20, axis0.max())
         data = ba.IntensityData(axis0)
         self.assertEqual(20, data.allocatedSize())
         self.assertEqual(1, data.rank())
diff --git a/Tests/Unit/Device/ArrayUtilsTest.cpp b/Tests/Unit/Device/ArrayUtilsTest.cpp
index c35306554a98b5803b4104693bb43c262279d7ba..874bd4884f42026c923db2e91d4536bfb0b56f61 100644
--- a/Tests/Unit/Device/ArrayUtilsTest.cpp
+++ b/Tests/Unit/Device/ArrayUtilsTest.cpp
@@ -13,8 +13,8 @@ TEST_F(ArrayUtilsTest, PowerfieldFromVector1D)
 
     EXPECT_EQ(data1->allocatedSize(), vec_double.size());
     EXPECT_EQ(data1->getRawDataVector(), vec_double);
-    EXPECT_EQ(data1->axis(0).lowerBound(), 0.0);
-    EXPECT_EQ(data1->axis(0).upperBound(), 4.0);
+    EXPECT_EQ(data1->axis(0).min(), 0.0);
+    EXPECT_EQ(data1->axis(0).max(), 4.0);
 }
 
 TEST_F(ArrayUtilsTest, PowerfieldToVector1D)
@@ -38,11 +38,11 @@ TEST_F(ArrayUtilsTest, PowerfieldFromVector2D)
     EXPECT_EQ(data->rank(), 2u);
     EXPECT_EQ(data->allocatedSize(), 12u);
     EXPECT_EQ(data->axis(0).size(), 4u);
-    EXPECT_EQ(data->axis(0).lowerBound(), 0.0);
-    EXPECT_EQ(data->axis(0).upperBound(), 4.0);
+    EXPECT_EQ(data->axis(0).min(), 0.0);
+    EXPECT_EQ(data->axis(0).max(), 4.0);
     EXPECT_EQ(data->axis(1).size(), 3u);
-    EXPECT_EQ(data->axis(1).lowerBound(), 0.0);
-    EXPECT_EQ(data->axis(1).upperBound(), 3.0);
+    EXPECT_EQ(data->axis(1).min(), 0.0);
+    EXPECT_EQ(data->axis(1).max(), 3.0);
 
     const std::vector<double> expected = {8.0,  4.0, 0.0, 9.0,  5.0, 1.0,
                                           10.0, 6.0, 2.0, 11.0, 7.0, 3.0};
diff --git a/Tests/Unit/Device/ConstKBinAxisTest.cpp b/Tests/Unit/Device/ConstKBinAxisTest.cpp
index 7b4061af8ae39604d5bc6b01955b4b320d9112c4..28616f4040c105a3a79fe88f5acdadb42ad071bf 100644
--- a/Tests/Unit/Device/ConstKBinAxisTest.cpp
+++ b/Tests/Unit/Device/ConstKBinAxisTest.cpp
@@ -39,8 +39,8 @@ protected:
 TEST_F(ConstKBinAxisTest, TypicalAxis)
 {
     EXPECT_EQ(m_nbins, m_axis.size());
-    EXPECT_EQ(m_start, m_axis.lowerBound());
-    EXPECT_EQ(m_end, m_axis.upperBound());
+    EXPECT_EQ(m_start, m_axis.min());
+    EXPECT_EQ(m_end, m_axis.max());
 
     EXPECT_DOUBLE_EQ(m_start, m_axis.binBoundaries().front());
     EXPECT_DOUBLE_EQ(m_end, m_axis.binBoundaries().back());
diff --git a/Tests/Unit/Device/DepthProbeConverterTest.cpp b/Tests/Unit/Device/DepthProbeConverterTest.cpp
index f188fa26b1c5f964c77801ebc12d85d740e7f836..2619a76f4478f70b2b98f8c87dc4e4dadbb344af 100644
--- a/Tests/Unit/Device/DepthProbeConverterTest.cpp
+++ b/Tests/Unit/Device/DepthProbeConverterTest.cpp
@@ -71,8 +71,8 @@ void DepthProbeCoordinatesTest::checkAlphaAxis(Coords units,
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->size(), test_object.axisSize(0));
     EXPECT_EQ(axis->size(), m_nbins);
-    EXPECT_EQ(axis->lowerBound(), test_object.calculateMin(0, units));
-    EXPECT_EQ(axis->upperBound(), test_object.calculateMax(0, units));
+    EXPECT_EQ(axis->min(), test_object.calculateMin(0, units));
+    EXPECT_EQ(axis->max(), test_object.calculateMax(0, units));
 }
 
 void DepthProbeCoordinatesTest::checkZAxis(Coords units, const DepthProbeCoordinates& test_object)
@@ -82,13 +82,13 @@ void DepthProbeCoordinatesTest::checkZAxis(Coords units, const DepthProbeCoordin
     EXPECT_EQ(axis->size(), test_object.axisSize(1));
     EXPECT_EQ(axis->size(), m_nbins);
 
-    EXPECT_EQ(axis->lowerBound(), test_object.calculateMin(1, units));
+    EXPECT_EQ(axis->min(), test_object.calculateMin(1, units));
     const double test_min = units == Coords::NBINS ? 0 : m_z_start;
-    EXPECT_NEAR(axis->lowerBound(), test_min, std::abs(test_min) * 1e-10);
+    EXPECT_NEAR(axis->min(), test_min, std::abs(test_min) * 1e-10);
 
-    EXPECT_EQ(axis->upperBound(), test_object.calculateMax(1, units));
+    EXPECT_EQ(axis->max(), test_object.calculateMax(1, units));
     const double test_max = units == Coords::NBINS ? m_nbins : m_z_end;
-    EXPECT_NEAR(axis->upperBound(), test_max, std::abs(test_max) * 1e-10);
+    EXPECT_NEAR(axis->max(), test_max, std::abs(test_max) * 1e-10);
 }
 
 TEST_F(DepthProbeCoordinatesTest, DepthProbeCoordinates)
diff --git a/Tests/Unit/Device/FixedBinAxisTest.cpp b/Tests/Unit/Device/FixedBinAxisTest.cpp
index 9ac75e9c3ec67c46afff30940fcf816cf1683df8..9e02ede0a46375f168584ea882778fd6b0254859 100644
--- a/Tests/Unit/Device/FixedBinAxisTest.cpp
+++ b/Tests/Unit/Device/FixedBinAxisTest.cpp
@@ -11,8 +11,8 @@ TEST_F(FixedBinAxisTest, IndexedAccessor)
 {
     FixedBinAxis a1("length", 100, 0.0, 10.0);
     EXPECT_EQ(100u, a1.size());
-    EXPECT_EQ(0.0, a1.lowerBound());
-    EXPECT_EQ(10.0, a1.upperBound());
+    EXPECT_EQ(0.0, a1.min());
+    EXPECT_EQ(10.0, a1.max());
     EXPECT_DOUBLE_EQ(0.05, a1[0]);
     EXPECT_DOUBLE_EQ(0.15, a1[1]);
     EXPECT_DOUBLE_EQ(6.55, a1[65]);
@@ -29,8 +29,8 @@ TEST_F(FixedBinAxisTest, VectorOfUnitLength)
 {
     FixedBinAxis vec("name", 1, 1.0, 2.0);
     EXPECT_EQ(1u, vec.size());
-    EXPECT_EQ(double(1.0), vec.lowerBound());
-    EXPECT_EQ(double(2.0), vec.upperBound());
+    EXPECT_EQ(double(1.0), vec.min());
+    EXPECT_EQ(double(2.0), vec.max());
     EXPECT_EQ(1.5, vec[0]);
 }
 
@@ -157,16 +157,16 @@ TEST_F(FixedBinAxisTest, ClippedAxis)
     FixedBinAxis* clip1 = axis.clone();
     clip1->clip(-0.5, 2.5);
     EXPECT_EQ(clip1->size(), axis.size());
-    EXPECT_EQ(clip1->lowerBound(), axis.lowerBound());
-    EXPECT_EQ(clip1->upperBound(), axis.upperBound());
+    EXPECT_EQ(clip1->min(), axis.min());
+    EXPECT_EQ(clip1->max(), axis.max());
     EXPECT_TRUE(*clip1 == axis);
     delete clip1;
 
     FixedBinAxis* clip2 = axis.clone();
     clip2->clip(0.0, 1.99);
     EXPECT_EQ(clip2->size(), size_t(2));
-    EXPECT_EQ(clip2->lowerBound(), 0.0);
-    EXPECT_EQ(clip2->upperBound(), 2.0);
+    EXPECT_EQ(clip2->min(), 0.0);
+    EXPECT_EQ(clip2->max(), 2.0);
     EXPECT_TRUE(*clip2 != axis);
     delete clip2;
 }
diff --git a/Tests/Unit/Device/Histogram1DTest.cpp b/Tests/Unit/Device/Histogram1DTest.cpp
index 13595be57b0c341d0fde56d1ecb7d7e42400e4f6..4b865208eb3f4f5dd590ce3bc3d8d0e962336eb6 100644
--- a/Tests/Unit/Device/Histogram1DTest.cpp
+++ b/Tests/Unit/Device/Histogram1DTest.cpp
@@ -136,8 +136,8 @@ TEST_F(Histogram1DTest, CreateHistogram)
     std::unique_ptr<IHistogram> hist(IHistogram::createHistogram(data));
     EXPECT_EQ(size_t(1), hist->rank());
     EXPECT_EQ(data.allocatedSize(), hist->getNbinsX());
-    EXPECT_EQ(data.axis(0).lowerBound(), hist->xMin());
-    EXPECT_EQ(data.axis(0).upperBound(), hist->xMax());
+    EXPECT_EQ(data.axis(0).min(), hist->xMin());
+    EXPECT_EQ(data.axis(0).max(), hist->xMax());
     for (size_t i = 0; i < hist->getTotalNumberOfBins(); ++i) {
         EXPECT_EQ(data[i], hist->binContent(i));
         EXPECT_EQ(data[i], hist->binAverage(i));
@@ -158,8 +158,8 @@ TEST_F(Histogram1DTest, CreatePowerfield)
     std::unique_ptr<Powerfield<double>> data(hist.createPowerfield(IHistogram::DataType::INTEGRAL));
     EXPECT_EQ(size_t(1), data->rank());
     EXPECT_EQ(data->allocatedSize(), hist.getNbinsX());
-    EXPECT_EQ(data->axis(0).lowerBound(), hist.xMin());
-    EXPECT_EQ(data->axis(0).upperBound(), hist.xMax());
+    EXPECT_EQ(data->axis(0).min(), hist.xMin());
+    EXPECT_EQ(data->axis(0).max(), hist.xMax());
     for (size_t i = 0; i < data->allocatedSize(); ++i)
         EXPECT_EQ(4.0, (*data)[i]);
 
diff --git a/Tests/Unit/Device/Histogram2DTest.cpp b/Tests/Unit/Device/Histogram2DTest.cpp
index 7518e2b277a026dc642a1434e69011ddfde2d11e..4d4260c4a0dfd2d651b0f86a29bb6b64e337b1ef 100644
--- a/Tests/Unit/Device/Histogram2DTest.cpp
+++ b/Tests/Unit/Device/Histogram2DTest.cpp
@@ -341,10 +341,10 @@ TEST_F(Histogram2DTest, CreateHistogram)
     std::unique_ptr<IHistogram> h2(IHistogram::createHistogram(data));
     EXPECT_EQ(size_t(2), h2->rank());
     EXPECT_EQ(data.allocatedSize(), h2->getTotalNumberOfBins());
-    EXPECT_EQ(data.axis(0).lowerBound(), h2->xMin());
-    EXPECT_EQ(data.axis(0).upperBound(), h2->xMax());
-    EXPECT_EQ(data.axis(1).lowerBound(), h2->yMin());
-    EXPECT_EQ(data.axis(1).upperBound(), h2->yMax());
+    EXPECT_EQ(data.axis(0).min(), h2->xMin());
+    EXPECT_EQ(data.axis(0).max(), h2->xMax());
+    EXPECT_EQ(data.axis(1).min(), h2->yMin());
+    EXPECT_EQ(data.axis(1).max(), h2->yMax());
     for (size_t i = 0; i < h2->getTotalNumberOfBins(); ++i) {
         EXPECT_EQ(data[i], h2->binContent(i));
         EXPECT_EQ(data[i], h2->binAverage(i));
@@ -368,10 +368,10 @@ TEST_F(Histogram2DTest, CreatePowerfield)
     std::unique_ptr<Powerfield<double>> data(h2.createPowerfield(IHistogram::DataType::INTEGRAL));
     EXPECT_EQ(size_t(2), data->rank());
     EXPECT_EQ(data->allocatedSize(), h2.getTotalNumberOfBins());
-    EXPECT_EQ(data->axis(0).lowerBound(), h2.xMin());
-    EXPECT_EQ(data->axis(0).upperBound(), h2.xMax());
-    EXPECT_EQ(data->axis(1).lowerBound(), h2.yMin());
-    EXPECT_EQ(data->axis(1).upperBound(), h2.yMax());
+    EXPECT_EQ(data->axis(0).min(), h2.xMin());
+    EXPECT_EQ(data->axis(0).max(), h2.xMax());
+    EXPECT_EQ(data->axis(1).min(), h2.yMin());
+    EXPECT_EQ(data->axis(1).max(), h2.yMax());
     for (size_t i = 0; i < data->allocatedSize(); ++i)
         EXPECT_EQ(double(i), (*data)[i]);
 
diff --git a/Tests/Unit/Device/IOReaderWriterTest.cpp b/Tests/Unit/Device/IOReaderWriterTest.cpp
index f8d353481fb183c73421f7cfbac1a7c90275f790..958d2324e9156b8d1cab96f7d810ca397baf662a 100644
--- a/Tests/Unit/Device/IOReaderWriterTest.cpp
+++ b/Tests/Unit/Device/IOReaderWriterTest.cpp
@@ -27,8 +27,8 @@ TEST_F(IOReaderWriterTest, TestRWINT)
 
     auto compare_axis = [this, &result](size_t index) {
         EXPECT_EQ(m_model_data.axis(index).size(), result->axis(index).size());
-        EXPECT_EQ(m_model_data.axis(index).lowerBound(), result->axis(index).lowerBound());
-        EXPECT_EQ(m_model_data.axis(index).upperBound(), result->axis(index).upperBound());
+        EXPECT_EQ(m_model_data.axis(index).min(), result->axis(index).min());
+        EXPECT_EQ(m_model_data.axis(index).max(), result->axis(index).max());
     };
 
     EXPECT_EQ(m_model_data.rank(), result->rank());
diff --git a/Tests/Unit/Device/OffSpecularConverterTest.cpp b/Tests/Unit/Device/OffSpecularConverterTest.cpp
index ccf2a67162b617c0c26c32c9ff64cab113f1aea1..4ed5812ebc6a36e991ba77a50058957d430dc46d 100644
--- a/Tests/Unit/Device/OffSpecularConverterTest.cpp
+++ b/Tests/Unit/Device/OffSpecularConverterTest.cpp
@@ -71,14 +71,14 @@ TEST_F(OffSpecularCoordinatesTest, OffSpecularCoordinates)
     std::unique_ptr<IAxis> axis(coords->createConvertedAxis(0, Coords::UNDEFINED));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->size(), coords->axisSize(0));
-    EXPECT_EQ(axis->lowerBound(), coords->calculateMin(0, Coords::UNDEFINED));
-    EXPECT_EQ(axis->upperBound(), coords->calculateMax(0, Coords::UNDEFINED));
+    EXPECT_EQ(axis->min(), coords->calculateMin(0, Coords::UNDEFINED));
+    EXPECT_EQ(axis->max(), coords->calculateMax(0, Coords::UNDEFINED));
 
     std::unique_ptr<IAxis> axis2(coords->createConvertedAxis(1, Coords::RADIANS));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis2.get()));
     EXPECT_EQ(axis2->size(), coords->axisSize(1));
-    EXPECT_EQ(axis2->lowerBound(), coords->calculateMin(1, Coords::RADIANS));
-    EXPECT_EQ(axis2->upperBound(), coords->calculateMax(1, Coords::RADIANS));
+    EXPECT_EQ(axis2->min(), coords->calculateMin(1, Coords::RADIANS));
+    EXPECT_EQ(axis2->max(), coords->calculateMax(1, Coords::RADIANS));
 
     EXPECT_FAILED_ASSERT(coords->createConvertedAxis(2, Coords::UNDEFINED));
     EXPECT_FAILED_ASSERT(coords->createConvertedAxis(1, Coords::QSPACE));
diff --git a/Tests/Unit/Device/PointwiseAxisTest.cpp b/Tests/Unit/Device/PointwiseAxisTest.cpp
index 13db7b0a53beaaedbb8ff9b302c746b5d3ddab6e..80e0a03bf79737aa80c6a6c7180177427e01d1a4 100644
--- a/Tests/Unit/Device/PointwiseAxisTest.cpp
+++ b/Tests/Unit/Device/PointwiseAxisTest.cpp
@@ -25,8 +25,8 @@ TEST_F(PointwiseAxisTest, BasicProperties)
     std::vector<double> coordinates{0.0, 1.0, 4.0, 8.0};
     PointwiseAxis a1("length", coordinates);
     EXPECT_EQ(4u, a1.size());
-    EXPECT_EQ(0.0, a1.lowerBound());
-    EXPECT_EQ(8.0, a1.upperBound());
+    EXPECT_EQ(0.0, a1.min());
+    EXPECT_EQ(8.0, a1.max());
     EXPECT_EQ(0.0, a1[0]);
     EXPECT_EQ(1.0, a1[1]);
     EXPECT_EQ(4.0, a1[2]);
diff --git a/Tests/Unit/Device/RectangularConverterTest.cpp b/Tests/Unit/Device/RectangularConverterTest.cpp
index 0d3144ada7eee14dde356a980000de5b671fd3b3..187dc7a0d0d74152e1bcfa7bcd90eff488700bfd 100644
--- a/Tests/Unit/Device/RectangularConverterTest.cpp
+++ b/Tests/Unit/Device/RectangularConverterTest.cpp
@@ -92,14 +92,14 @@ TEST_F(RectangularConverterTest, ImageCoords)
     std::unique_ptr<IAxis> axis(converter.createConvertedAxis(0, Coords::UNDEFINED));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->size(), converter.axisSize(0));
-    EXPECT_EQ(axis->lowerBound(), converter.calculateMin(0, Coords::UNDEFINED));
-    EXPECT_EQ(axis->upperBound(), converter.calculateMax(0, Coords::UNDEFINED));
+    EXPECT_EQ(axis->min(), converter.calculateMin(0, Coords::UNDEFINED));
+    EXPECT_EQ(axis->max(), converter.calculateMax(0, Coords::UNDEFINED));
 
     std::unique_ptr<IAxis> axis2(converter.createConvertedAxis(1, Coords::QSPACE));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis2.get()));
     EXPECT_EQ(axis2->size(), converter.axisSize(1));
-    EXPECT_EQ(axis2->lowerBound(), converter.calculateMin(1, Coords::QSPACE));
-    EXPECT_EQ(axis2->upperBound(), converter.calculateMax(1, Coords::QSPACE));
+    EXPECT_EQ(axis2->min(), converter.calculateMin(1, Coords::QSPACE));
+    EXPECT_EQ(axis2->max(), converter.calculateMax(1, Coords::QSPACE));
 
     EXPECT_FAILED_ASSERT(converter.createConvertedAxis(2, Coords::UNDEFINED));
 }
diff --git a/Tests/Unit/Device/SpecularDetector1DTest.cpp b/Tests/Unit/Device/SpecularDetector1DTest.cpp
index af1b66f61d99c3d4c424a901b12d87008330f1b9..6aa80565099781c25b94c2d75536faec3cdf34b0 100644
--- a/Tests/Unit/Device/SpecularDetector1DTest.cpp
+++ b/Tests/Unit/Device/SpecularDetector1DTest.cpp
@@ -21,8 +21,8 @@ TEST_F(SpecularDetectorTest, basicBehaviour)
 
     // checking size and axis
     EXPECT_EQ(1u, detector.rank());
-    EXPECT_EQ(axis.lowerBound(), detector.axis(0).lowerBound());
-    EXPECT_EQ(axis.upperBound(), detector.axis(0).upperBound());
+    EXPECT_EQ(axis.min(), detector.axis(0).min());
+    EXPECT_EQ(axis.max(), detector.axis(0).max());
 
     // throwing exceptions
     Powerfield<double>* p_intensity_map(nullptr);
@@ -38,8 +38,8 @@ TEST_F(SpecularDetectorTest, createDetectorMap)
     // creating map in default units, which are radians and checking axes
     auto data = detector.createDetectorMap();
     EXPECT_EQ(data->axis(0).size(), 10u);
-    EXPECT_EQ(data->axis(0).lowerBound(), 1.0 * Units::deg);
-    EXPECT_EQ(data->axis(0).upperBound(), 10.0 * Units::deg);
+    EXPECT_EQ(data->axis(0).min(), 1.0 * Units::deg);
+    EXPECT_EQ(data->axis(0).max(), 10.0 * Units::deg);
 }
 
 TEST_F(SpecularDetectorTest, Clone)
@@ -54,8 +54,8 @@ TEST_F(SpecularDetectorTest, Clone)
 
     const auto data = clone->createDetectorMap();
     EXPECT_EQ(data->axis(0).size(), 5u);
-    EXPECT_EQ(data->axis(0).lowerBound(), 1.0 * Units::deg);
-    EXPECT_EQ(data->axis(0).upperBound(), 10.0 * Units::deg);
+    EXPECT_EQ(data->axis(0).min(), 1.0 * Units::deg);
+    EXPECT_EQ(data->axis(0).max(), 10.0 * Units::deg);
 
     EXPECT_EQ(nullptr, clone->detectorResolution());
     EXPECT_EQ(nullptr, clone->detectorMask());
diff --git a/Tests/Unit/Device/SphericalConverterTest.cpp b/Tests/Unit/Device/SphericalConverterTest.cpp
index 54b1df90381c191d2673181616417533b40c6e15..e8c8a678d8acf9b40f35a9fc02077e26fce9b742 100644
--- a/Tests/Unit/Device/SphericalConverterTest.cpp
+++ b/Tests/Unit/Device/SphericalConverterTest.cpp
@@ -69,14 +69,14 @@ TEST_F(SphericalConverterTest, SphericalCoords)
     std::unique_ptr<IAxis> axis(converter.createConvertedAxis(0, Coords::UNDEFINED));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis.get()));
     EXPECT_EQ(axis->size(), converter.axisSize(0));
-    EXPECT_EQ(axis->lowerBound(), converter.calculateMin(0, Coords::UNDEFINED));
-    EXPECT_EQ(axis->upperBound(), converter.calculateMax(0, Coords::UNDEFINED));
+    EXPECT_EQ(axis->min(), converter.calculateMin(0, Coords::UNDEFINED));
+    EXPECT_EQ(axis->max(), converter.calculateMax(0, Coords::UNDEFINED));
 
     std::unique_ptr<IAxis> axis2(converter.createConvertedAxis(1, Coords::QSPACE));
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(axis2.get()));
     EXPECT_EQ(axis2->size(), converter.axisSize(1));
-    EXPECT_EQ(axis2->lowerBound(), converter.calculateMin(1, Coords::QSPACE));
-    EXPECT_EQ(axis2->upperBound(), converter.calculateMax(1, Coords::QSPACE));
+    EXPECT_EQ(axis2->min(), converter.calculateMin(1, Coords::QSPACE));
+    EXPECT_EQ(axis2->max(), converter.calculateMax(1, Coords::QSPACE));
 
     EXPECT_FAILED_ASSERT(converter.createConvertedAxis(2, Coords::UNDEFINED));
 }
diff --git a/Tests/Unit/Device/SphericalDetectorTest.cpp b/Tests/Unit/Device/SphericalDetectorTest.cpp
index 1aabaf7ab564db4275ae9ffe6074b55bd056f4d5..8331ed13b43b8f2e1d1ffae2384097156a480637 100644
--- a/Tests/Unit/Device/SphericalDetectorTest.cpp
+++ b/Tests/Unit/Device/SphericalDetectorTest.cpp
@@ -48,10 +48,10 @@ TEST_F(SphericalDetectorTest, constructionWithAxes)
 
     // checking dimension and axes
     EXPECT_EQ(2u, detector.rank());
-    EXPECT_EQ(axis0.lowerBound(), detector.axis(0).lowerBound());
-    EXPECT_EQ(axis0.upperBound(), detector.axis(0).upperBound());
-    EXPECT_EQ(axis1.lowerBound(), detector.axis(1).lowerBound());
-    EXPECT_EQ(axis1.upperBound(), detector.axis(1).upperBound());
+    EXPECT_EQ(axis0.min(), detector.axis(0).min());
+    EXPECT_EQ(axis0.max(), detector.axis(0).max());
+    EXPECT_EQ(axis1.min(), detector.axis(1).min());
+    EXPECT_EQ(axis1.max(), detector.axis(1).max());
 }
 
 // Construction of the detector via classical constructor.
@@ -59,11 +59,11 @@ TEST_F(SphericalDetectorTest, constructionWithParameters)
 {
     SphericalDetector detector(10, -1.0, 1.0, 20, 0.0, 2.0);
     EXPECT_EQ(10u, detector.axis(0).size());
-    EXPECT_EQ(-1.0, detector.axis(0).lowerBound());
-    EXPECT_EQ(1.0, detector.axis(0).upperBound());
+    EXPECT_EQ(-1.0, detector.axis(0).min());
+    EXPECT_EQ(1.0, detector.axis(0).max());
     EXPECT_EQ(20u, detector.axis(1).size());
-    EXPECT_EQ(0.0, detector.axis(1).lowerBound());
-    EXPECT_EQ(2.0, detector.axis(1).upperBound());
+    EXPECT_EQ(0.0, detector.axis(1).min());
+    EXPECT_EQ(2.0, detector.axis(1).max());
 }
 
 // Creation of the detector map with axes in given units
@@ -75,11 +75,11 @@ TEST_F(SphericalDetectorTest, createDetectorMap)
     // creating map in default units, which are radians and checking axes
     auto data = detector.createDetectorMap();
     EXPECT_EQ(data->axis(0).size(), 10u);
-    EXPECT_EQ(data->axis(0).lowerBound(), -1.0 * Units::deg);
-    EXPECT_EQ(data->axis(0).upperBound(), 1.0 * Units::deg);
+    EXPECT_EQ(data->axis(0).min(), -1.0 * Units::deg);
+    EXPECT_EQ(data->axis(0).max(), 1.0 * Units::deg);
     EXPECT_EQ(data->axis(1).size(), 20u);
-    EXPECT_EQ(data->axis(1).lowerBound(), 0.0 * Units::deg);
-    EXPECT_EQ(data->axis(1).upperBound(), 2.0 * Units::deg);
+    EXPECT_EQ(data->axis(1).min(), 0.0 * Units::deg);
+    EXPECT_EQ(data->axis(1).max(), 2.0 * Units::deg);
 }
 
 // Testing region of interest.
@@ -123,11 +123,11 @@ TEST_F(SphericalDetectorTest, regionOfInterestAndDetectorMap)
     // to region of interest.
     auto data = detector.createDetectorMap();
     EXPECT_EQ(data->axis(0).size(), 4u);
-    EXPECT_EQ(data->axis(0).lowerBound(), 0.0 * Units::deg);
-    EXPECT_EQ(data->axis(0).upperBound(), 4.0 * Units::deg);
+    EXPECT_EQ(data->axis(0).min(), 0.0 * Units::deg);
+    EXPECT_EQ(data->axis(0).max(), 4.0 * Units::deg);
     EXPECT_EQ(data->axis(1).size(), 2u);
-    EXPECT_EQ(data->axis(1).lowerBound(), 1.0 * Units::deg);
-    EXPECT_EQ(data->axis(1).upperBound(), 3.0 * Units::deg);
+    EXPECT_EQ(data->axis(1).min(), 1.0 * Units::deg);
+    EXPECT_EQ(data->axis(1).max(), 3.0 * Units::deg);
 }
 
 TEST_F(SphericalDetectorTest, MaskOfDetector)
@@ -192,11 +192,11 @@ TEST_F(SphericalDetectorTest, Clone)
 
     auto data = clone->createDetectorMap();
     EXPECT_EQ(data->axis(0).size(), 4u);
-    EXPECT_EQ(data->axis(0).lowerBound(), 0.0 * Units::deg);
-    EXPECT_EQ(data->axis(0).upperBound(), 4.0 * Units::deg);
+    EXPECT_EQ(data->axis(0).min(), 0.0 * Units::deg);
+    EXPECT_EQ(data->axis(0).max(), 4.0 * Units::deg);
     EXPECT_EQ(data->axis(1).size(), 2u);
-    EXPECT_EQ(data->axis(1).lowerBound(), 1.0 * Units::deg);
-    EXPECT_EQ(data->axis(1).upperBound(), 3.0 * Units::deg);
+    EXPECT_EQ(data->axis(1).min(), 1.0 * Units::deg);
+    EXPECT_EQ(data->axis(1).max(), 3.0 * Units::deg);
 
     EXPECT_EQ(clone->detectorMask()->numberOfMaskedChannels(), 8);
 
diff --git a/Tests/Unit/Device/VariableBinAxisTest.cpp b/Tests/Unit/Device/VariableBinAxisTest.cpp
index e184e8a40b15df6ba27c8cea1cc8250381dc7d0d..1b26ae50306a08196cebcfecb505be9fab875074 100644
--- a/Tests/Unit/Device/VariableBinAxisTest.cpp
+++ b/Tests/Unit/Device/VariableBinAxisTest.cpp
@@ -12,8 +12,8 @@ TEST_F(VariableBinAxisTest, VectorOfUnitLength)
     std::vector<double> values(arr, arr + sizeof(arr) / sizeof(arr[0]));
     VariableBinAxis axis("name", 1, values);
     EXPECT_EQ(size_t(1), axis.size());
-    EXPECT_EQ(0.0, axis.lowerBound());
-    EXPECT_EQ(1.0, axis.upperBound());
+    EXPECT_EQ(0.0, axis.min());
+    EXPECT_EQ(1.0, axis.max());
     EXPECT_EQ(0.5, axis[0]);
 }
 
@@ -47,8 +47,8 @@ TEST_F(VariableBinAxisTest, IndexedAccessor)
     VariableBinAxis a1("name", nbins, values);
 
     EXPECT_EQ(100u, a1.size());
-    EXPECT_EQ(0.0, a1.lowerBound());
-    EXPECT_EQ(10.0, a1.upperBound());
+    EXPECT_EQ(0.0, a1.min());
+    EXPECT_EQ(10.0, a1.max());
     EXPECT_DOUBLE_EQ(0.05, a1[0]);
     EXPECT_DOUBLE_EQ(0.15, a1[1]);
     EXPECT_DOUBLE_EQ(6.55, a1[65]);
@@ -215,8 +215,8 @@ TEST_F(VariableBinAxisTest, ClippedAxis)
     VariableBinAxis* clip2 = axis.clone();
     clip2->clip(-0.5, 1.5);
     EXPECT_EQ(clip2->size(), size_t(3));
-    EXPECT_EQ(clip2->lowerBound(), -0.5);
-    EXPECT_EQ(clip2->upperBound(), 2.0);
+    EXPECT_EQ(clip2->min(), -0.5);
+    EXPECT_EQ(clip2->max(), 2.0);
     std::vector<double> centers = clip2->binCenters();
     EXPECT_EQ(centers[0], 0.0);
     EXPECT_EQ(centers[1], 0.75);
@@ -227,8 +227,8 @@ TEST_F(VariableBinAxisTest, ClippedAxis)
     VariableBinAxis* clip3 = axis.clone();
     clip3->clip(-0.5, 0.99);
     EXPECT_EQ(clip3->size(), size_t(2));
-    EXPECT_EQ(clip3->lowerBound(), -0.5);
-    EXPECT_EQ(clip3->upperBound(), 1.0);
+    EXPECT_EQ(clip3->min(), -0.5);
+    EXPECT_EQ(clip3->max(), 1.0);
     std::vector<double> boundaries = clip3->binBoundaries();
     EXPECT_EQ(boundaries[0], -0.5);
     EXPECT_EQ(boundaries[1], 0.5);
diff --git a/Tests/Unit/GUI/TestAxesItems.cpp b/Tests/Unit/GUI/TestAxesItems.cpp
index 759b50dfc02b8e77fcf69e84cadd994236ccb990..10226d02494979b5ce097308965ae580ec19f88f 100644
--- a/Tests/Unit/GUI/TestAxesItems.cpp
+++ b/Tests/Unit/GUI/TestAxesItems.cpp
@@ -19,10 +19,10 @@ TEST_F(TestAxesItems, gettersAndSettes)
     EXPECT_EQ(item.binCount(), 42);
 
     item.setLowerBound(42.1);
-    EXPECT_EQ(item.lowerBound(), 42.1);
+    EXPECT_EQ(item.min(), 42.1);
 
     item.setUpperBound(42.2);
-    EXPECT_EQ(item.upperBound(), 42.2);
+    EXPECT_EQ(item.max(), 42.2);
 
     item.setTitle("abc");
     EXPECT_EQ(item.title(), QString("abc"));
@@ -46,8 +46,8 @@ TEST_F(TestAxesItems, transformFromDomain)
     FixedBinAxis axis0("axis0", 99, -42.0, 42.0);
     GUI::Transform::FromDomain::setAxisItem(&item, axis0);
     EXPECT_EQ(item.binCount(), static_cast<int>(axis0.size()));
-    EXPECT_EQ(item.lowerBound(), axis0.lowerBound());
-    EXPECT_EQ(item.upperBound(), axis0.upperBound());
+    EXPECT_EQ(item.min(), axis0.min());
+    EXPECT_EQ(item.max(), axis0.max());
     EXPECT_EQ(item.title(), QString::fromStdString(axis0.axisName()));
 
     // transform domain axis with limits given in radians
@@ -55,8 +55,8 @@ TEST_F(TestAxesItems, transformFromDomain)
     const double scale = 1. / Units::deg;
     GUI::Transform::FromDomain::setAxisItem(&item, axis1, scale);
     EXPECT_EQ(item.binCount(), static_cast<int>(axis1.size()));
-    EXPECT_EQ(item.lowerBound(), -42.0);
-    EXPECT_EQ(item.upperBound(), 42.0);
+    EXPECT_EQ(item.min(), -42.0);
+    EXPECT_EQ(item.max(), 42.0);
     EXPECT_EQ(item.title(), QString::fromStdString(axis1.axisName()));
 
     // transform from unexpected axis
diff --git a/Tests/Unit/GUI/TestPropertyRepeater.cpp b/Tests/Unit/GUI/TestPropertyRepeater.cpp
index d8c1bceee079dbe281ae53f272ae0d48bffe8dab..821602a12339f4143962fbc2eb31b2bf9ace9d59 100644
--- a/Tests/Unit/GUI/TestPropertyRepeater.cpp
+++ b/Tests/Unit/GUI/TestPropertyRepeater.cpp
@@ -38,19 +38,19 @@ TEST_F(TestPropertyRepeater, twoItems)
     repeater.addItem(item2);
 
     // adding items to the repeater do not change values
-    EXPECT_EQ(item1->upperBound(), 2.0);
-    EXPECT_EQ(item2->upperBound(), 3.0);
+    EXPECT_EQ(item1->max(), 2.0);
+    EXPECT_EQ(item2->max(), 3.0);
 
     // change of the value of one item leads to the change in another
     item1->setUpperBound(4.0);
-    EXPECT_EQ(item1->upperBound(), 4.0);
-    EXPECT_EQ(item2->upperBound(), 4.0);
+    EXPECT_EQ(item1->max(), 4.0);
+    EXPECT_EQ(item2->max(), 4.0);
 
     // clearing repeater will stop update
     repeater.clear();
     item1->setUpperBound(5.0);
-    EXPECT_EQ(item1->upperBound(), 5.0);
-    EXPECT_EQ(item2->upperBound(), 4.0);
+    EXPECT_EQ(item1->max(), 5.0);
+    EXPECT_EQ(item2->max(), 4.0);
 }
 
 //! Repeater handles three items.
@@ -74,9 +74,9 @@ TEST_F(TestPropertyRepeater, threeItems)
 
     // change of the value of one item leads to the change in two another
     item1->setUpperBound(4.0);
-    EXPECT_EQ(item1->upperBound(), 4.0);
-    EXPECT_EQ(item2->upperBound(), 4.0);
-    EXPECT_EQ(item3->upperBound(), 4.0);
+    EXPECT_EQ(item1->max(), 4.0);
+    EXPECT_EQ(item2->max(), 4.0);
+    EXPECT_EQ(item3->max(), 4.0);
 }
 
 //! Checking repeater in "repeat childs properties" mode
diff --git a/Tests/Unit/Param/DistributionsTest.cpp b/Tests/Unit/Param/DistributionsTest.cpp
index 14c66f06febb2cc739d731befd794dfaa0d73393..37f05c0a56a7d13d69eba5342f05dcdcd1b58081 100644
--- a/Tests/Unit/Param/DistributionsTest.cpp
+++ b/Tests/Unit/Param/DistributionsTest.cpp
@@ -12,8 +12,8 @@ TEST_F(DistributionsTest, DistributionGateDefaultConstructor)
 {
     std::unique_ptr<DistributionGate> P_distr_gate{new DistributionGate()};
     EXPECT_EQ(0.5, P_distr_gate->mean());
-    EXPECT_EQ(0.0, P_distr_gate->lowerBound());
-    EXPECT_EQ(1.0, P_distr_gate->upperBound());
+    EXPECT_EQ(0.0, P_distr_gate->min());
+    EXPECT_EQ(1.0, P_distr_gate->max());
     EXPECT_EQ(1.0, P_distr_gate->probabilityDensity(1.0));
     EXPECT_EQ(0, P_distr_gate->probabilityDensity(3.0));
 
@@ -41,8 +41,8 @@ TEST_F(DistributionsTest, DistributionGateConstructor)
     // Test distribution with m_min < m_max:
     DistributionGate distr2(1.0, 2.0);
     EXPECT_EQ(1.5, distr2.mean());
-    EXPECT_EQ(1.0, distr2.lowerBound());
-    EXPECT_EQ(2.0, distr2.upperBound());
+    EXPECT_EQ(1.0, distr2.min());
+    EXPECT_EQ(2.0, distr2.max());
     EXPECT_EQ(1.0, distr2.probabilityDensity(1));
     EXPECT_EQ(0, distr2.probabilityDensity(3));
 
@@ -70,8 +70,8 @@ TEST_F(DistributionsTest, DistributionGateClone)
     DistributionGate gate(2.0, 3.0);
     DistributionGate* clone = gate.clone();
     EXPECT_EQ(gate.mean(), clone->mean());
-    EXPECT_EQ(gate.lowerBound(), clone->lowerBound());
-    EXPECT_EQ(gate.upperBound(), clone->upperBound());
+    EXPECT_EQ(gate.min(), clone->min());
+    EXPECT_EQ(gate.max(), clone->max());
     delete clone;
 }
 
diff --git a/Tests/Unit/Sim/CoordSystem1DTest.cpp b/Tests/Unit/Sim/CoordSystem1DTest.cpp
index 85534c0cfe844902e8b415ce7cac4bd3a947cdf0..e86c5322d26a275afa86f560aa7a335f0d81c2fe 100644
--- a/Tests/Unit/Sim/CoordSystem1DTest.cpp
+++ b/Tests/Unit/Sim/CoordSystem1DTest.cpp
@@ -63,29 +63,29 @@ void CoordSystem1DTest::checkConventionalConverter(const CoordSystem1D& test_obj
     const IAxis* tmp = axis_default.get();
     EXPECT_TRUE(dynamic_cast<const PointwiseAxis*>(tmp));
     EXPECT_EQ(axis_default->size(), test_object.axisSize(0));
-    EXPECT_EQ(axis_default->lowerBound(), test_object.calculateMin(0, Coords::UNDEFINED));
-    EXPECT_EQ(axis_default->upperBound(), test_object.calculateMax(0, Coords::UNDEFINED));
+    EXPECT_EQ(axis_default->min(), test_object.calculateMin(0, Coords::UNDEFINED));
+    EXPECT_EQ(axis_default->max(), test_object.calculateMax(0, Coords::UNDEFINED));
 
     // QSPACE
     std::unique_ptr<const IAxis> axis_qspace(test_object.createConvertedAxis(0, Coords::QSPACE));
     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, Coords::QSPACE));
-    EXPECT_EQ(axis_qspace->upperBound(), test_object.calculateMax(0, Coords::QSPACE));
+    EXPECT_EQ(axis_qspace->min(), test_object.calculateMin(0, Coords::QSPACE));
+    EXPECT_EQ(axis_qspace->max(), test_object.calculateMax(0, Coords::QSPACE));
 
     // NBINS
     std::unique_ptr<IAxis> axis_nbins(test_object.createConvertedAxis(0, Coords::NBINS));
     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, Coords::NBINS));
-    EXPECT_EQ(axis_nbins->upperBound(), test_object.calculateMax(0, Coords::NBINS));
+    EXPECT_EQ(axis_nbins->min(), test_object.calculateMin(0, Coords::NBINS));
+    EXPECT_EQ(axis_nbins->max(), test_object.calculateMax(0, Coords::NBINS));
 
     // RQ4
     std::unique_ptr<IAxis> axis_rq4(test_object.createConvertedAxis(0, Coords::RQ4));
     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, Coords::RQ4));
-    EXPECT_EQ(axis_rq4->upperBound(), test_object.calculateMax(0, Coords::RQ4));
+    EXPECT_EQ(axis_rq4->min(), test_object.calculateMin(0, Coords::RQ4));
+    EXPECT_EQ(axis_rq4->max(), test_object.calculateMax(0, Coords::RQ4));
     EXPECT_TRUE(*axis_rq4 == *axis_qspace);
 
     Powerfield<double> fake_data(m_axis);
@@ -129,30 +129,30 @@ void CoordSystem1DTest::checkQSpecConverter(const CoordSystem1D& test_object)
     std::unique_ptr<IAxis> axis_default(test_object.createConvertedAxis(0, 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, Coords::UNDEFINED));
-    EXPECT_EQ(axis_default->upperBound(), test_object.calculateMax(0, Coords::UNDEFINED));
+    EXPECT_EQ(axis_default->min(), test_object.calculateMin(0, Coords::UNDEFINED));
+    EXPECT_EQ(axis_default->max(), test_object.calculateMax(0, Coords::UNDEFINED));
 
     // QSPACE
     std::unique_ptr<IAxis> axis_qspace(test_object.createConvertedAxis(0, Coords::QSPACE));
     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, Coords::QSPACE));
-    EXPECT_EQ(axis_qspace->upperBound(), test_object.calculateMax(0, Coords::QSPACE));
+    EXPECT_EQ(axis_qspace->min(), test_object.calculateMin(0, Coords::QSPACE));
+    EXPECT_EQ(axis_qspace->max(), test_object.calculateMax(0, Coords::QSPACE));
     EXPECT_EQ(*axis_default, *axis_qspace);
 
     // NBINS
     std::unique_ptr<IAxis> axis_nbins(test_object.createConvertedAxis(0, Coords::NBINS));
     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, Coords::NBINS));
-    EXPECT_EQ(axis_nbins->upperBound(), test_object.calculateMax(0, Coords::NBINS));
+    EXPECT_EQ(axis_nbins->min(), test_object.calculateMin(0, Coords::NBINS));
+    EXPECT_EQ(axis_nbins->max(), test_object.calculateMax(0, Coords::NBINS));
 
     // RQ4
     std::unique_ptr<IAxis> axis_rq4(test_object.createConvertedAxis(0, Coords::RQ4));
     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, Coords::RQ4));
-    EXPECT_EQ(axis_rq4->upperBound(), test_object.calculateMax(0, Coords::RQ4));
+    EXPECT_EQ(axis_rq4->min(), test_object.calculateMin(0, Coords::RQ4));
+    EXPECT_EQ(axis_rq4->max(), test_object.calculateMax(0, Coords::RQ4));
     EXPECT_TRUE(*axis_rq4 == *axis_qspace);
 
     Powerfield<double> fake_data(m_axis);
diff --git a/Tests/Unit/Sim/DepthProbeSimulationTest.cpp b/Tests/Unit/Sim/DepthProbeSimulationTest.cpp
index af3f79a7ff30af20b00c63cb0667cf931e60d326..f9451a891a8a7c8289c10c4e7e3502a441a70038 100644
--- a/Tests/Unit/Sim/DepthProbeSimulationTest.cpp
+++ b/Tests/Unit/Sim/DepthProbeSimulationTest.cpp
@@ -69,14 +69,14 @@ TEST_F(DepthProbeSimulationTest, CheckAxesOfDefaultSimulation)
     const auto* const alpha_axis = sim->alphaAxis();
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(alpha_axis));
     EXPECT_EQ(alpha_axis->size(), 10u);
-    EXPECT_EQ(alpha_axis->lowerBound(), 0.0 * Units::deg);
-    EXPECT_EQ(alpha_axis->upperBound(), 2.0 * Units::deg);
+    EXPECT_EQ(alpha_axis->min(), 0.0 * Units::deg);
+    EXPECT_EQ(alpha_axis->max(), 2.0 * Units::deg);
 
     const auto* const z_axis = sim->zAxis();
     EXPECT_TRUE(dynamic_cast<const FixedBinAxis*>(z_axis));
     EXPECT_EQ(z_axis->size(), 12u);
-    EXPECT_EQ(z_axis->lowerBound(), -30.0 * Units::nm);
-    EXPECT_EQ(z_axis->upperBound(), 10.0 * Units::nm);
+    EXPECT_EQ(z_axis->min(), -30.0 * Units::nm);
+    EXPECT_EQ(z_axis->max(), 10.0 * Units::nm);
 }
 
 TEST_F(DepthProbeSimulationTest, SetBeamParameters)
@@ -86,8 +86,8 @@ TEST_F(DepthProbeSimulationTest, SetBeamParameters)
 
     sim.setBeamParameters(1.0, 10, 1.0 * Units::deg, 10.0 * Units::deg);
     EXPECT_EQ(10u, sim.alphaAxis()->size());
-    EXPECT_EQ(1.0 * Units::deg, sim.alphaAxis()->lowerBound());
-    EXPECT_EQ(10.0 * Units::deg, sim.alphaAxis()->upperBound());
+    EXPECT_EQ(1.0 * Units::deg, sim.alphaAxis()->min());
+    EXPECT_EQ(10.0 * Units::deg, sim.alphaAxis()->max());
     EXPECT_EQ(1.0, beam.intensity());
     EXPECT_EQ(1.0, beam.wavelength());
     EXPECT_EQ(0.0, beam.direction().alpha());
@@ -101,8 +101,8 @@ TEST_F(DepthProbeSimulationTest, SetBeamParameters)
     EXPECT_FAILED_ASSERT(sim.setBeamParameters(-1.0, 1, 1.0, 2.0));
 
     EXPECT_EQ(10u, sim.alphaAxis()->size());
-    EXPECT_EQ(1.0 * Units::deg, sim.alphaAxis()->lowerBound());
-    EXPECT_EQ(10.0 * Units::deg, sim.alphaAxis()->upperBound());
+    EXPECT_EQ(1.0 * Units::deg, sim.alphaAxis()->min());
+    EXPECT_EQ(10.0 * Units::deg, sim.alphaAxis()->max());
     EXPECT_EQ(1.0, beam.wavelength());
     EXPECT_EQ(0.0, beam.direction().alpha());
     EXPECT_EQ(0.0, beam.direction().phi());
@@ -123,18 +123,18 @@ TEST_F(DepthProbeSimulationTest, ResultAquisition)
     const std::unique_ptr<Histogram2D> depth_map(sim_result.histogram2d());
     EXPECT_EQ(10u * 12u, depth_map->getTotalNumberOfBins());
     EXPECT_EQ(2u, depth_map->rank());
-    EXPECT_EQ(0.0, depth_map->xAxis().lowerBound());
-    EXPECT_EQ(2.0, depth_map->xAxis().upperBound());
-    EXPECT_EQ(-30.0, depth_map->yAxis().lowerBound());
-    EXPECT_EQ(10.0, depth_map->yAxis().upperBound());
+    EXPECT_EQ(0.0, depth_map->xAxis().min());
+    EXPECT_EQ(2.0, depth_map->xAxis().max());
+    EXPECT_EQ(-30.0, depth_map->yAxis().min());
+    EXPECT_EQ(10.0, depth_map->yAxis().max());
 
     EXPECT_FAILED_ASSERT(sim_result.data(Coords::MM));
 
     const auto output = sim_result.data();
     EXPECT_EQ(depth_map->getTotalNumberOfBins(), output->allocatedSize());
     EXPECT_EQ(depth_map->rank(), output->rank());
-    EXPECT_EQ(depth_map->xAxis().lowerBound(), output->axis(0).lowerBound());
-    EXPECT_EQ(depth_map->xAxis().upperBound(), output->axis(0).upperBound());
+    EXPECT_EQ(depth_map->xAxis().min(), output->axis(0).min());
+    EXPECT_EQ(depth_map->xAxis().max(), output->axis(0).max());
 
     checkBeamState(*sim);
 }
diff --git a/Tests/Unit/Sim/SpecularSimulationTest.cpp b/Tests/Unit/Sim/SpecularSimulationTest.cpp
index 28073649d108ab053a558d5bf16b9435b81b1798..854fb9d2be4df45aa05a005bf4fad169719c3cdd 100644
--- a/Tests/Unit/Sim/SpecularSimulationTest.cpp
+++ b/Tests/Unit/Sim/SpecularSimulationTest.cpp
@@ -58,8 +58,8 @@ TEST_F(SpecularSimulationTest, SetAngularScan)
     const auto& beam = sim.beam();
 
     EXPECT_EQ(2u, sim.coordinateAxis()->size());
-    EXPECT_EQ(1.0 * Units::deg, sim.coordinateAxis()->lowerBound());
-    EXPECT_EQ(3.0 * Units::deg, sim.coordinateAxis()->upperBound());
+    EXPECT_EQ(1.0 * Units::deg, sim.coordinateAxis()->min());
+    EXPECT_EQ(3.0 * Units::deg, sim.coordinateAxis()->max());
     EXPECT_EQ(1.0, beam.intensity());
     EXPECT_EQ(1.0, beam.wavelength());
     EXPECT_EQ(0.0, beam.direction().alpha());
@@ -69,8 +69,8 @@ TEST_F(SpecularSimulationTest, SetAngularScan)
     AlphaScan scan2(1.0, 10, 1.0 * Units::deg, 10.0 * Units::deg);
     sim2.setScan(scan2);
     EXPECT_EQ(10u, sim2.coordinateAxis()->size());
-    EXPECT_EQ(1.0 * Units::deg, sim2.coordinateAxis()->lowerBound());
-    EXPECT_EQ(10.0 * Units::deg, sim2.coordinateAxis()->upperBound());
+    EXPECT_EQ(1.0 * Units::deg, sim2.coordinateAxis()->min());
+    EXPECT_EQ(10.0 * Units::deg, sim2.coordinateAxis()->max());
     EXPECT_EQ(1.0, beam.wavelength());
     EXPECT_EQ(0.0, beam.direction().alpha());
     EXPECT_EQ(0.0, beam.direction().phi());
@@ -81,8 +81,8 @@ TEST_F(SpecularSimulationTest, SetAngularScan)
 
     EXPECT_FAILED_ASSERT(sim2.setScan(scan2));
     EXPECT_EQ(10u, sim2.coordinateAxis()->size());
-    EXPECT_EQ(1.0 * Units::deg, sim2.coordinateAxis()->lowerBound());
-    EXPECT_EQ(10.0 * Units::deg, sim2.coordinateAxis()->upperBound());
+    EXPECT_EQ(1.0 * Units::deg, sim2.coordinateAxis()->min());
+    EXPECT_EQ(10.0 * Units::deg, sim2.coordinateAxis()->max());
     EXPECT_EQ(1.0, beam.wavelength());
     EXPECT_EQ(0.0, beam.direction().alpha());
     EXPECT_EQ(0.0, beam.direction().phi());
@@ -95,8 +95,8 @@ TEST_F(SpecularSimulationTest, SetAngularScan)
     sim4.setScan(scan4);
     EXPECT_FAILED_ASSERT(sim4.setScan(scan4));
 
-    EXPECT_EQ(.0 * Units::deg, sim4.coordinateAxis()->lowerBound());
-    EXPECT_EQ(2.0 * Units::deg, sim4.coordinateAxis()->upperBound());
+    EXPECT_EQ(.0 * Units::deg, sim4.coordinateAxis()->min());
+    EXPECT_EQ(2.0 * Units::deg, sim4.coordinateAxis()->max());
     EXPECT_EQ(10u, sim4.coordinateAxis()->size());
     EXPECT_EQ(1.0, sim4.beam().intensity());
     EXPECT_EQ(1.0, sim4.beam().wavelength());
@@ -119,8 +119,8 @@ TEST_F(SpecularSimulationTest, SetQScan)
     const auto& beam = sim.beam();
 
     EXPECT_EQ(2u, sim.coordinateAxis()->size());
-    EXPECT_EQ(1.0, sim.coordinateAxis()->lowerBound());
-    EXPECT_EQ(3.0, sim.coordinateAxis()->upperBound());
+    EXPECT_EQ(1.0, sim.coordinateAxis()->min());
+    EXPECT_EQ(3.0, sim.coordinateAxis()->max());
     EXPECT_EQ(1.0, beam.intensity());
     EXPECT_EQ(1.0, beam.wavelength());
     EXPECT_EQ(0.0, beam.direction().alpha());
@@ -133,8 +133,8 @@ TEST_F(SpecularSimulationTest, SetQScan)
     QzScan scan2(10, 1.0, 10.0);
     sim2.setScan(scan2);
     EXPECT_EQ(10u, sim2.coordinateAxis()->size());
-    EXPECT_EQ(1.0, sim2.coordinateAxis()->lowerBound());
-    EXPECT_EQ(10.0, sim2.coordinateAxis()->upperBound());
+    EXPECT_EQ(1.0, sim2.coordinateAxis()->min());
+    EXPECT_EQ(10.0, sim2.coordinateAxis()->max());
     EXPECT_EQ(2.0, beam.intensity());
     EXPECT_EQ(1.0, beam.wavelength());
     EXPECT_EQ(0.0, beam.direction().alpha());
@@ -147,8 +147,8 @@ TEST_F(SpecularSimulationTest, SetQScan)
     sim3.instrument().setPolFilters(polarizer_dir, analyzer_dir, 0.33, 0.22);
     sim3.setScan(scan3);
 
-    EXPECT_EQ(1.0, sim3.coordinateAxis()->lowerBound());
-    EXPECT_EQ(10.0, sim3.coordinateAxis()->upperBound());
+    EXPECT_EQ(1.0, sim3.coordinateAxis()->min());
+    EXPECT_EQ(10.0, sim3.coordinateAxis()->max());
     EXPECT_EQ(10u, sim3.coordinateAxis()->size());
     EXPECT_EQ(1.0, sim3.beam().intensity());
     EXPECT_EQ(1.0, sim3.beam().wavelength());
diff --git a/auto/Wrap/doxygenBase.i b/auto/Wrap/doxygenBase.i
index 04f24ece5f6e9177c5b60f6730d7f31573249acc..faea0b44d62659a322ff0a3b9645ac2de1a01bf7 100644
--- a/auto/Wrap/doxygenBase.i
+++ b/auto/Wrap/doxygenBase.i
@@ -267,12 +267,12 @@ Returns the number of bins.
 retrieve a 1d bin for the given index 
 ";
 
-%feature("docstring")  FixedBinAxis::lowerBound "double FixedBinAxis::lowerBound() const override
+%feature("docstring")  FixedBinAxis::min "double FixedBinAxis::min() const override
 
 Returns value of first point of axis. 
 ";
 
-%feature("docstring")  FixedBinAxis::upperBound "double FixedBinAxis::upperBound() const override
+%feature("docstring")  FixedBinAxis::max "double FixedBinAxis::max() const override
 
 Returns value of last point of axis. 
 ";
@@ -552,12 +552,12 @@ Sets the axis label.
 Returns the number of bins. 
 ";
 
-%feature("docstring")  IAxis::lowerBound "virtual double IAxis::lowerBound() const =0
+%feature("docstring")  IAxis::min "virtual double IAxis::min() const =0
 
 Returns value of first point of axis. 
 ";
 
-%feature("docstring")  IAxis::upperBound "virtual double IAxis::upperBound() const =0
+%feature("docstring")  IAxis::max "virtual double IAxis::max() const =0
 
 Returns value of last point of axis. 
 ";
@@ -833,12 +833,12 @@ retrieve the number of bins
 retrieve a 1d bin for the given index 
 ";
 
-%feature("docstring")  PointwiseAxis::lowerBound "double PointwiseAxis::lowerBound() const override
+%feature("docstring")  PointwiseAxis::min "double PointwiseAxis::min() const override
 
 Returns value of first on-axis point. 
 ";
 
-%feature("docstring")  PointwiseAxis::upperBound "double PointwiseAxis::upperBound() const override
+%feature("docstring")  PointwiseAxis::max "double PointwiseAxis::max() const override
 
 Returns value of last on-axis point. 
 ";
@@ -1179,12 +1179,12 @@ Returns the number of bins.
 retrieve a 1d bin for the given index 
 ";
 
-%feature("docstring")  VariableBinAxis::lowerBound "double VariableBinAxis::lowerBound() const override
+%feature("docstring")  VariableBinAxis::min "double VariableBinAxis::min() const override
 
 Returns value of first point of axis. 
 ";
 
-%feature("docstring")  VariableBinAxis::upperBound "double VariableBinAxis::upperBound() const override
+%feature("docstring")  VariableBinAxis::max "double VariableBinAxis::max() const override
 
 Returns value of last point of axis. 
 ";
diff --git a/auto/Wrap/doxygenDevice.i b/auto/Wrap/doxygenDevice.i
index 66ecd4a48987b70c377c88305b00b7b0510a496a..2356243c457679ef80c07640bc74ac2e85a536e0 100644
--- a/auto/Wrap/doxygenDevice.i
+++ b/auto/Wrap/doxygenDevice.i
@@ -31,9 +31,6 @@ Returns default units to convert to.
 ";
 
 
-// File: structCoordSystem2D_1_1AxisData.xml
-
-
 // File: structAxisInfo.xml
 %feature("docstring") AxisInfo "
 
@@ -274,6 +271,9 @@ C++ includes: CoordSystem2D.h
 %feature("docstring")  CoordSystem2D::CoordSystem2D "CoordSystem2D::CoordSystem2D(const Direction &direction, double wavelength=0)
 ";
 
+%feature("docstring")  CoordSystem2D::CoordSystem2D "CoordSystem2D::CoordSystem2D(const OwningVector< IAxis > &axes, const Direction &direction, double wavelength=0)
+";
+
 %feature("docstring")  CoordSystem2D::~CoordSystem2D "CoordSystem2D::~CoordSystem2D() override=default
 ";
 
@@ -297,11 +297,6 @@ Returns list of units that are available for all 2D detectors. Further units may
 %feature("docstring")  CoordSystem2D::createConvertedAxis "IAxis * CoordSystem2D::createConvertedAxis(size_t i_axis, Coords units) const override
 ";
 
-%feature("docstring")  CoordSystem2D::addCoordAxis "void CoordSystem2D::addCoordAxis(const IAxis &axis)
-
-Adds a copy of the given axis to the axis system. Order of adding defines position of axis (x-axis, y-axis, ...) 
-";
-
 
 // File: classCumulativeValue.xml
 %feature("docstring") CumulativeValue "
@@ -347,6 +342,9 @@ C++ includes: CoordSystem2D.h
 %feature("docstring")  DepthProbeCoordinates::DepthProbeCoordinates "DepthProbeCoordinates::DepthProbeCoordinates(const Direction &direction, double wavelength, const IAxis &alpha_axis, const IAxis &z_axis)
 ";
 
+%feature("docstring")  DepthProbeCoordinates::DepthProbeCoordinates "DepthProbeCoordinates::DepthProbeCoordinates(const OwningVector< IAxis > &axes, const Direction &direction, double wavelength)
+";
+
 %feature("docstring")  DepthProbeCoordinates::~DepthProbeCoordinates "DepthProbeCoordinates::~DepthProbeCoordinates() override
 ";
 
@@ -355,7 +353,7 @@ C++ includes: CoordSystem2D.h
 
 %feature("docstring")  DepthProbeCoordinates::availableUnits "std::vector< Coords > DepthProbeCoordinates::availableUnits() const override
 
-Returns the list of all available units. 
+Returns list of units that are available for all 2D detectors. Further units may be added by child classes. 
 ";
 
 %feature("docstring")  DepthProbeCoordinates::defaultUnits "Coords DepthProbeCoordinates::defaultUnits() const override
@@ -1466,7 +1464,7 @@ C++ includes: CoordSystem2D.h
 
 %feature("docstring")  ImageCoords::availableUnits "std::vector< Coords > ImageCoords::availableUnits() const override
 
-Returns the list of all available units. 
+Returns list of units that are available for all 2D detectors. Further units may be added by child classes. 
 ";
 
 %feature("docstring")  ImageCoords::defaultUnits "Coords ImageCoords::defaultUnits() const override
@@ -2437,7 +2435,7 @@ C++ includes: CoordSystem2D.h
 
 %feature("docstring")  SphericalCoords::availableUnits "std::vector< Coords > SphericalCoords::availableUnits() const override
 
-Returns the list of all available units. 
+Returns list of units that are available for all 2D detectors. Further units may be added by child classes. 
 ";
 
 %feature("docstring")  SphericalCoords::defaultUnits "Coords SphericalCoords::defaultUnits() const override
diff --git a/auto/Wrap/doxygenParam.i b/auto/Wrap/doxygenParam.i
index cb05c6808b8ed910e5033539960ad17abbd9556f..7a53a0675a099e33bd41b260e8488621fe678647 100644
--- a/auto/Wrap/doxygenParam.i
+++ b/auto/Wrap/doxygenParam.i
@@ -100,10 +100,10 @@ Returns the distribution-specific probability density for value x.
 Returns the distribution-specific mean. 
 ";
 
-%feature("docstring")  DistributionGate::lowerBound "double DistributionGate::lowerBound() const
+%feature("docstring")  DistributionGate::min "double DistributionGate::min() const
 ";
 
-%feature("docstring")  DistributionGate::upperBound "double DistributionGate::upperBound() const
+%feature("docstring")  DistributionGate::max "double DistributionGate::max() const
 ";
 
 %feature("docstring")  DistributionGate::equidistantPoints "std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
diff --git a/auto/Wrap/doxygenSim.i b/auto/Wrap/doxygenSim.i
index 0f93d05191801fd5ce4e158cb65724e1eea092f3..e130c442e5848a63cc73ffaf5088a5850f3873a4 100644
--- a/auto/Wrap/doxygenSim.i
+++ b/auto/Wrap/doxygenSim.i
@@ -478,12 +478,12 @@ Returns absolute value of difference between simulation and experimental data in
 
 %feature("docstring")  FitObjective::experimental_array "std::vector< double > FitObjective::experimental_array() const
 
-Returns one dimensional array representing merged experimental data. The area outside of the region of interest is not included, masked data is nullified. 
+Returns one-dimensional array representing merged experimental data. The area outside of the region of interest is not included, masked data is nullified. 
 ";
 
 %feature("docstring")  FitObjective::simulation_array "std::vector< double > FitObjective::simulation_array() const
 
-Returns one dimensional array representing merged simulated intensities data. The area outside of the region of interest is not included, masked data is nullified. 
+Returns one-dimensional array representing merged simulated intensities data. The area outside of the region of interest is not included, masked data is nullified. 
 ";
 
 %feature("docstring")  FitObjective::uncertainties "std::vector< double > FitObjective::uncertainties() const
diff --git a/auto/Wrap/libBornAgainBase.py b/auto/Wrap/libBornAgainBase.py
index 31737d90a8b5fb78db87fea9d8ca1d676ea36380..dd248d00894c9c3f63ac306baaba57076a8ef0f8 100644
--- a/auto/Wrap/libBornAgainBase.py
+++ b/auto/Wrap/libBornAgainBase.py
@@ -2139,25 +2139,25 @@ class IAxis(object):
         """
         return _libBornAgainBase.IAxis_size(self)
 
-    def lowerBound(self):
+    def min(self):
         r"""
-        lowerBound(IAxis self) -> double
-        virtual double IAxis::lowerBound() const =0
+        min(IAxis self) -> double
+        virtual double IAxis::min() const =0
 
         Returns value of first point of axis. 
 
         """
-        return _libBornAgainBase.IAxis_lowerBound(self)
+        return _libBornAgainBase.IAxis_min(self)
 
-    def upperBound(self):
+    def max(self):
         r"""
-        upperBound(IAxis self) -> double
-        virtual double IAxis::upperBound() const =0
+        max(IAxis self) -> double
+        virtual double IAxis::max() const =0
 
         Returns value of last point of axis. 
 
         """
-        return _libBornAgainBase.IAxis_upperBound(self)
+        return _libBornAgainBase.IAxis_max(self)
 
     def bounds(self):
         r"""
@@ -2339,25 +2339,25 @@ class VariableBinAxis(IAxis):
         """
         return _libBornAgainBase.VariableBinAxis_bin(self, index)
 
-    def lowerBound(self):
+    def min(self):
         r"""
-        lowerBound(VariableBinAxis self) -> double
-        double VariableBinAxis::lowerBound() const override
+        min(VariableBinAxis self) -> double
+        double VariableBinAxis::min() const override
 
         Returns value of first point of axis. 
 
         """
-        return _libBornAgainBase.VariableBinAxis_lowerBound(self)
+        return _libBornAgainBase.VariableBinAxis_min(self)
 
-    def upperBound(self):
+    def max(self):
         r"""
-        upperBound(VariableBinAxis self) -> double
-        double VariableBinAxis::upperBound() const override
+        max(VariableBinAxis self) -> double
+        double VariableBinAxis::max() const override
 
         Returns value of last point of axis. 
 
         """
-        return _libBornAgainBase.VariableBinAxis_upperBound(self)
+        return _libBornAgainBase.VariableBinAxis_max(self)
 
     def binCenter(self, index):
         r"""
@@ -2615,25 +2615,25 @@ class FixedBinAxis(IAxis):
         """
         return _libBornAgainBase.FixedBinAxis_bin(self, index)
 
-    def lowerBound(self):
+    def min(self):
         r"""
-        lowerBound(FixedBinAxis self) -> double
-        double FixedBinAxis::lowerBound() const override
+        min(FixedBinAxis self) -> double
+        double FixedBinAxis::min() const override
 
         Returns value of first point of axis. 
 
         """
-        return _libBornAgainBase.FixedBinAxis_lowerBound(self)
+        return _libBornAgainBase.FixedBinAxis_min(self)
 
-    def upperBound(self):
+    def max(self):
         r"""
-        upperBound(FixedBinAxis self) -> double
-        double FixedBinAxis::upperBound() const override
+        max(FixedBinAxis self) -> double
+        double FixedBinAxis::max() const override
 
         Returns value of last point of axis. 
 
         """
-        return _libBornAgainBase.FixedBinAxis_upperBound(self)
+        return _libBornAgainBase.FixedBinAxis_max(self)
 
     def binCenter(self, index):
         r"""
@@ -2733,25 +2733,25 @@ class PointwiseAxis(IAxis):
         """
         return _libBornAgainBase.PointwiseAxis_bin(self, index)
 
-    def lowerBound(self):
+    def min(self):
         r"""
-        lowerBound(PointwiseAxis self) -> double
-        double PointwiseAxis::lowerBound() const override
+        min(PointwiseAxis self) -> double
+        double PointwiseAxis::min() const override
 
         Returns value of first on-axis point. 
 
         """
-        return _libBornAgainBase.PointwiseAxis_lowerBound(self)
+        return _libBornAgainBase.PointwiseAxis_min(self)
 
-    def upperBound(self):
+    def max(self):
         r"""
-        upperBound(PointwiseAxis self) -> double
-        double PointwiseAxis::upperBound() const override
+        max(PointwiseAxis self) -> double
+        double PointwiseAxis::max() const override
 
         Returns value of last on-axis point. 
 
         """
-        return _libBornAgainBase.PointwiseAxis_upperBound(self)
+        return _libBornAgainBase.PointwiseAxis_max(self)
 
     def binCenter(self, index):
         r"""
diff --git a/auto/Wrap/libBornAgainBase_wrap.cpp b/auto/Wrap/libBornAgainBase_wrap.cpp
index 3c31a9e31ad0d2346022db8143ebcf0ab657ae80..b3cd808d8cf5404a41c9b5e268de3e05cfa1f2f5 100644
--- a/auto/Wrap/libBornAgainBase_wrap.cpp
+++ b/auto/Wrap/libBornAgainBase_wrap.cpp
@@ -25467,7 +25467,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IAxis_lowerBound(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IAxis_min(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IAxis *arg1 = (IAxis *) 0 ;
   void *argp1 = 0 ;
@@ -25479,10 +25479,10 @@ SWIGINTERN PyObject *_wrap_IAxis_lowerBound(PyObject *SWIGUNUSEDPARM(self), PyOb
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IAxis, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IAxis_lowerBound" "', argument " "1"" of type '" "IAxis const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IAxis_min" "', argument " "1"" of type '" "IAxis const *""'"); 
   }
   arg1 = reinterpret_cast< IAxis * >(argp1);
-  result = (double)((IAxis const *)arg1)->lowerBound();
+  result = (double)((IAxis const *)arg1)->min();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -25490,7 +25490,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IAxis_upperBound(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IAxis_max(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IAxis *arg1 = (IAxis *) 0 ;
   void *argp1 = 0 ;
@@ -25502,10 +25502,10 @@ SWIGINTERN PyObject *_wrap_IAxis_upperBound(PyObject *SWIGUNUSEDPARM(self), PyOb
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IAxis, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IAxis_upperBound" "', argument " "1"" of type '" "IAxis const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IAxis_max" "', argument " "1"" of type '" "IAxis const *""'"); 
   }
   arg1 = reinterpret_cast< IAxis * >(argp1);
-  result = (double)((IAxis const *)arg1)->upperBound();
+  result = (double)((IAxis const *)arg1)->max();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -26116,7 +26116,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_VariableBinAxis_lowerBound(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_VariableBinAxis_min(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   VariableBinAxis *arg1 = (VariableBinAxis *) 0 ;
   void *argp1 = 0 ;
@@ -26128,10 +26128,10 @@ SWIGINTERN PyObject *_wrap_VariableBinAxis_lowerBound(PyObject *SWIGUNUSEDPARM(s
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_VariableBinAxis, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VariableBinAxis_lowerBound" "', argument " "1"" of type '" "VariableBinAxis const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VariableBinAxis_min" "', argument " "1"" of type '" "VariableBinAxis const *""'"); 
   }
   arg1 = reinterpret_cast< VariableBinAxis * >(argp1);
-  result = (double)((VariableBinAxis const *)arg1)->lowerBound();
+  result = (double)((VariableBinAxis const *)arg1)->min();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -26139,7 +26139,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_VariableBinAxis_upperBound(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_VariableBinAxis_max(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   VariableBinAxis *arg1 = (VariableBinAxis *) 0 ;
   void *argp1 = 0 ;
@@ -26151,10 +26151,10 @@ SWIGINTERN PyObject *_wrap_VariableBinAxis_upperBound(PyObject *SWIGUNUSEDPARM(s
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_VariableBinAxis, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VariableBinAxis_upperBound" "', argument " "1"" of type '" "VariableBinAxis const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "VariableBinAxis_max" "', argument " "1"" of type '" "VariableBinAxis const *""'"); 
   }
   arg1 = reinterpret_cast< VariableBinAxis * >(argp1);
-  result = (double)((VariableBinAxis const *)arg1)->upperBound();
+  result = (double)((VariableBinAxis const *)arg1)->max();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -26842,7 +26842,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FixedBinAxis_lowerBound(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_FixedBinAxis_min(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FixedBinAxis *arg1 = (FixedBinAxis *) 0 ;
   void *argp1 = 0 ;
@@ -26854,10 +26854,10 @@ SWIGINTERN PyObject *_wrap_FixedBinAxis_lowerBound(PyObject *SWIGUNUSEDPARM(self
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FixedBinAxis, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FixedBinAxis_lowerBound" "', argument " "1"" of type '" "FixedBinAxis const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FixedBinAxis_min" "', argument " "1"" of type '" "FixedBinAxis const *""'"); 
   }
   arg1 = reinterpret_cast< FixedBinAxis * >(argp1);
-  result = (double)((FixedBinAxis const *)arg1)->lowerBound();
+  result = (double)((FixedBinAxis const *)arg1)->min();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -26865,7 +26865,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FixedBinAxis_upperBound(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_FixedBinAxis_max(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FixedBinAxis *arg1 = (FixedBinAxis *) 0 ;
   void *argp1 = 0 ;
@@ -26877,10 +26877,10 @@ SWIGINTERN PyObject *_wrap_FixedBinAxis_upperBound(PyObject *SWIGUNUSEDPARM(self
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_FixedBinAxis, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FixedBinAxis_upperBound" "', argument " "1"" of type '" "FixedBinAxis const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FixedBinAxis_max" "', argument " "1"" of type '" "FixedBinAxis const *""'"); 
   }
   arg1 = reinterpret_cast< FixedBinAxis * >(argp1);
-  result = (double)((FixedBinAxis const *)arg1)->upperBound();
+  result = (double)((FixedBinAxis const *)arg1)->max();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -27170,7 +27170,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PointwiseAxis_lowerBound(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_PointwiseAxis_min(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   PointwiseAxis *arg1 = (PointwiseAxis *) 0 ;
   void *argp1 = 0 ;
@@ -27182,10 +27182,10 @@ SWIGINTERN PyObject *_wrap_PointwiseAxis_lowerBound(PyObject *SWIGUNUSEDPARM(sel
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PointwiseAxis, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PointwiseAxis_lowerBound" "', argument " "1"" of type '" "PointwiseAxis const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PointwiseAxis_min" "', argument " "1"" of type '" "PointwiseAxis const *""'"); 
   }
   arg1 = reinterpret_cast< PointwiseAxis * >(argp1);
-  result = (double)((PointwiseAxis const *)arg1)->lowerBound();
+  result = (double)((PointwiseAxis const *)arg1)->min();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -27193,7 +27193,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_PointwiseAxis_upperBound(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_PointwiseAxis_max(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   PointwiseAxis *arg1 = (PointwiseAxis *) 0 ;
   void *argp1 = 0 ;
@@ -27205,10 +27205,10 @@ SWIGINTERN PyObject *_wrap_PointwiseAxis_upperBound(PyObject *SWIGUNUSEDPARM(sel
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_PointwiseAxis, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PointwiseAxis_upperBound" "', argument " "1"" of type '" "PointwiseAxis const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "PointwiseAxis_max" "', argument " "1"" of type '" "PointwiseAxis const *""'"); 
   }
   arg1 = reinterpret_cast< PointwiseAxis * >(argp1);
-  result = (double)((PointwiseAxis const *)arg1)->upperBound();
+  result = (double)((PointwiseAxis const *)arg1)->max();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -30248,16 +30248,16 @@ static PyMethodDef SwigMethods[] = {
 		"Returns the number of bins. \n"
 		"\n"
 		""},
-	 { "IAxis_lowerBound", _wrap_IAxis_lowerBound, METH_O, "\n"
-		"IAxis_lowerBound(IAxis self) -> double\n"
-		"virtual double IAxis::lowerBound() const =0\n"
+	 { "IAxis_min", _wrap_IAxis_min, METH_O, "\n"
+		"IAxis_min(IAxis self) -> double\n"
+		"virtual double IAxis::min() const =0\n"
 		"\n"
 		"Returns value of first point of axis. \n"
 		"\n"
 		""},
-	 { "IAxis_upperBound", _wrap_IAxis_upperBound, METH_O, "\n"
-		"IAxis_upperBound(IAxis self) -> double\n"
-		"virtual double IAxis::upperBound() const =0\n"
+	 { "IAxis_max", _wrap_IAxis_max, METH_O, "\n"
+		"IAxis_max(IAxis self) -> double\n"
+		"virtual double IAxis::max() const =0\n"
 		"\n"
 		"Returns value of last point of axis. \n"
 		"\n"
@@ -30380,16 +30380,16 @@ static PyMethodDef SwigMethods[] = {
 		"retrieve a 1d bin for the given index \n"
 		"\n"
 		""},
-	 { "VariableBinAxis_lowerBound", _wrap_VariableBinAxis_lowerBound, METH_O, "\n"
-		"VariableBinAxis_lowerBound(VariableBinAxis self) -> double\n"
-		"double VariableBinAxis::lowerBound() const override\n"
+	 { "VariableBinAxis_min", _wrap_VariableBinAxis_min, METH_O, "\n"
+		"VariableBinAxis_min(VariableBinAxis self) -> double\n"
+		"double VariableBinAxis::min() const override\n"
 		"\n"
 		"Returns value of first point of axis. \n"
 		"\n"
 		""},
-	 { "VariableBinAxis_upperBound", _wrap_VariableBinAxis_upperBound, METH_O, "\n"
-		"VariableBinAxis_upperBound(VariableBinAxis self) -> double\n"
-		"double VariableBinAxis::upperBound() const override\n"
+	 { "VariableBinAxis_max", _wrap_VariableBinAxis_max, METH_O, "\n"
+		"VariableBinAxis_max(VariableBinAxis self) -> double\n"
+		"double VariableBinAxis::max() const override\n"
 		"\n"
 		"Returns value of last point of axis. \n"
 		"\n"
@@ -30566,16 +30566,16 @@ static PyMethodDef SwigMethods[] = {
 		"retrieve a 1d bin for the given index \n"
 		"\n"
 		""},
-	 { "FixedBinAxis_lowerBound", _wrap_FixedBinAxis_lowerBound, METH_O, "\n"
-		"FixedBinAxis_lowerBound(FixedBinAxis self) -> double\n"
-		"double FixedBinAxis::lowerBound() const override\n"
+	 { "FixedBinAxis_min", _wrap_FixedBinAxis_min, METH_O, "\n"
+		"FixedBinAxis_min(FixedBinAxis self) -> double\n"
+		"double FixedBinAxis::min() const override\n"
 		"\n"
 		"Returns value of first point of axis. \n"
 		"\n"
 		""},
-	 { "FixedBinAxis_upperBound", _wrap_FixedBinAxis_upperBound, METH_O, "\n"
-		"FixedBinAxis_upperBound(FixedBinAxis self) -> double\n"
-		"double FixedBinAxis::upperBound() const override\n"
+	 { "FixedBinAxis_max", _wrap_FixedBinAxis_max, METH_O, "\n"
+		"FixedBinAxis_max(FixedBinAxis self) -> double\n"
+		"double FixedBinAxis::max() const override\n"
 		"\n"
 		"Returns value of last point of axis. \n"
 		"\n"
@@ -30638,16 +30638,16 @@ static PyMethodDef SwigMethods[] = {
 		"retrieve a 1d bin for the given index \n"
 		"\n"
 		""},
-	 { "PointwiseAxis_lowerBound", _wrap_PointwiseAxis_lowerBound, METH_O, "\n"
-		"PointwiseAxis_lowerBound(PointwiseAxis self) -> double\n"
-		"double PointwiseAxis::lowerBound() const override\n"
+	 { "PointwiseAxis_min", _wrap_PointwiseAxis_min, METH_O, "\n"
+		"PointwiseAxis_min(PointwiseAxis self) -> double\n"
+		"double PointwiseAxis::min() const override\n"
 		"\n"
 		"Returns value of first on-axis point. \n"
 		"\n"
 		""},
-	 { "PointwiseAxis_upperBound", _wrap_PointwiseAxis_upperBound, METH_O, "\n"
-		"PointwiseAxis_upperBound(PointwiseAxis self) -> double\n"
-		"double PointwiseAxis::upperBound() const override\n"
+	 { "PointwiseAxis_max", _wrap_PointwiseAxis_max, METH_O, "\n"
+		"PointwiseAxis_max(PointwiseAxis self) -> double\n"
+		"double PointwiseAxis::max() const override\n"
 		"\n"
 		"Returns value of last on-axis point. \n"
 		"\n"
diff --git a/auto/Wrap/libBornAgainParam.py b/auto/Wrap/libBornAgainParam.py
index 683733b6a4894a597fad0d2f71429e2c6af8d167..0ecc5f308d86713f4e8e70f94beb17df774b92c7 100644
--- a/auto/Wrap/libBornAgainParam.py
+++ b/auto/Wrap/libBornAgainParam.py
@@ -2303,21 +2303,21 @@ class DistributionGate(IDistribution1D):
         """
         return _libBornAgainParam.DistributionGate_mean(self)
 
-    def lowerBound(self):
+    def min(self):
         r"""
-        lowerBound(DistributionGate self) -> double
-        double DistributionGate::lowerBound() const
+        min(DistributionGate self) -> double
+        double DistributionGate::min() const
 
         """
-        return _libBornAgainParam.DistributionGate_lowerBound(self)
+        return _libBornAgainParam.DistributionGate_min(self)
 
-    def upperBound(self):
+    def max(self):
         r"""
-        upperBound(DistributionGate self) -> double
-        double DistributionGate::upperBound() const
+        max(DistributionGate self) -> double
+        double DistributionGate::max() const
 
         """
-        return _libBornAgainParam.DistributionGate_upperBound(self)
+        return _libBornAgainParam.DistributionGate_max(self)
 
     def equidistantPoints(self, *args):
         r"""
diff --git a/auto/Wrap/libBornAgainParam_wrap.cpp b/auto/Wrap/libBornAgainParam_wrap.cpp
index b31f4d9ea90c7cb4897de77cea02774931b19509..ae6cfee1e56b637e4f2d65470695921bff7f2eb0 100644
--- a/auto/Wrap/libBornAgainParam_wrap.cpp
+++ b/auto/Wrap/libBornAgainParam_wrap.cpp
@@ -29065,7 +29065,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_DistributionGate_lowerBound(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_DistributionGate_min(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   DistributionGate *arg1 = (DistributionGate *) 0 ;
   void *argp1 = 0 ;
@@ -29077,10 +29077,10 @@ SWIGINTERN PyObject *_wrap_DistributionGate_lowerBound(PyObject *SWIGUNUSEDPARM(
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_DistributionGate, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "DistributionGate_lowerBound" "', argument " "1"" of type '" "DistributionGate const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "DistributionGate_min" "', argument " "1"" of type '" "DistributionGate const *""'"); 
   }
   arg1 = reinterpret_cast< DistributionGate * >(argp1);
-  result = (double)((DistributionGate const *)arg1)->lowerBound();
+  result = (double)((DistributionGate const *)arg1)->min();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -29088,7 +29088,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_DistributionGate_upperBound(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_DistributionGate_max(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   DistributionGate *arg1 = (DistributionGate *) 0 ;
   void *argp1 = 0 ;
@@ -29100,10 +29100,10 @@ SWIGINTERN PyObject *_wrap_DistributionGate_upperBound(PyObject *SWIGUNUSEDPARM(
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_DistributionGate, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "DistributionGate_upperBound" "', argument " "1"" of type '" "DistributionGate const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "DistributionGate_max" "', argument " "1"" of type '" "DistributionGate const *""'"); 
   }
   arg1 = reinterpret_cast< DistributionGate * >(argp1);
-  result = (double)((DistributionGate const *)arg1)->upperBound();
+  result = (double)((DistributionGate const *)arg1)->max();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -34924,14 +34924,14 @@ static PyMethodDef SwigMethods[] = {
 		"Returns the distribution-specific mean. \n"
 		"\n"
 		""},
-	 { "DistributionGate_lowerBound", _wrap_DistributionGate_lowerBound, METH_O, "\n"
-		"DistributionGate_lowerBound(DistributionGate self) -> double\n"
-		"double DistributionGate::lowerBound() const\n"
+	 { "DistributionGate_min", _wrap_DistributionGate_min, METH_O, "\n"
+		"DistributionGate_min(DistributionGate self) -> double\n"
+		"double DistributionGate::min() const\n"
 		"\n"
 		""},
-	 { "DistributionGate_upperBound", _wrap_DistributionGate_upperBound, METH_O, "\n"
-		"DistributionGate_upperBound(DistributionGate self) -> double\n"
-		"double DistributionGate::upperBound() const\n"
+	 { "DistributionGate_max", _wrap_DistributionGate_max, METH_O, "\n"
+		"DistributionGate_max(DistributionGate self) -> double\n"
+		"double DistributionGate::max() const\n"
 		"\n"
 		""},
 	 { "DistributionGate_equidistantPoints", _wrap_DistributionGate_equidistantPoints, METH_VARARGS, "\n"
diff --git a/auto/Wrap/libBornAgainSim.py b/auto/Wrap/libBornAgainSim.py
index e48ac4517ee616242190a22efa24ca83ab3cb75c..f7aa5057ec18e8433fa717005e577f5f9f17ead9 100644
--- a/auto/Wrap/libBornAgainSim.py
+++ b/auto/Wrap/libBornAgainSim.py
@@ -2843,7 +2843,7 @@ class FitObjective(object):
         experimental_array(FitObjective self) -> vdouble1d_t
         std::vector< double > FitObjective::experimental_array() const
 
-        Returns one dimensional array representing merged experimental data. The area outside of the region of interest is not included, masked data is nullified. 
+        Returns one-dimensional array representing merged experimental data. The area outside of the region of interest is not included, masked data is nullified. 
 
         """
         return _libBornAgainSim.FitObjective_experimental_array(self)
@@ -2853,7 +2853,7 @@ class FitObjective(object):
         simulation_array(FitObjective self) -> vdouble1d_t
         std::vector< double > FitObjective::simulation_array() const
 
-        Returns one dimensional array representing merged simulated intensities data. The area outside of the region of interest is not included, masked data is nullified. 
+        Returns one-dimensional array representing merged simulated intensities data. The area outside of the region of interest is not included, masked data is nullified. 
 
         """
         return _libBornAgainSim.FitObjective_simulation_array(self)
diff --git a/auto/Wrap/libBornAgainSim_wrap.cpp b/auto/Wrap/libBornAgainSim_wrap.cpp
index 61e3521dde4d83907e4bdae13c16133b0563074e..b8f1696154856d191ec9fcb1f77e32ee58e93a6d 100644
--- a/auto/Wrap/libBornAgainSim_wrap.cpp
+++ b/auto/Wrap/libBornAgainSim_wrap.cpp
@@ -41706,14 +41706,14 @@ static PyMethodDef SwigMethods[] = {
 		"FitObjective_experimental_array(FitObjective self) -> vdouble1d_t\n"
 		"std::vector< double > FitObjective::experimental_array() const\n"
 		"\n"
-		"Returns one dimensional array representing merged experimental data. The area outside of the region of interest is not included, masked data is nullified. \n"
+		"Returns one-dimensional array representing merged experimental data. The area outside of the region of interest is not included, masked data is nullified. \n"
 		"\n"
 		""},
 	 { "FitObjective_simulation_array", _wrap_FitObjective_simulation_array, METH_O, "\n"
 		"FitObjective_simulation_array(FitObjective self) -> vdouble1d_t\n"
 		"std::vector< double > FitObjective::simulation_array() const\n"
 		"\n"
-		"Returns one dimensional array representing merged simulated intensities data. The area outside of the region of interest is not included, masked data is nullified. \n"
+		"Returns one-dimensional array representing merged simulated intensities data. The area outside of the region of interest is not included, masked data is nullified. \n"
 		"\n"
 		""},
 	 { "FitObjective_uncertainties_cpp", _wrap_FitObjective_uncertainties_cpp, METH_O, "\n"