diff --git a/Base/Axis/ConstKBinAxis.cpp b/Base/Axis/ConstKBinAxis.cpp
index 776cc89fb4a79d919b4672d83c77aea7138f9135..f2a9cfeefbaee62fe0e08730d35bdff1ca15c672 100644
--- a/Base/Axis/ConstKBinAxis.cpp
+++ b/Base/Axis/ConstKBinAxis.cpp
@@ -45,11 +45,6 @@ ConstKBinAxis* ConstKBinAxis::clone() const
     return new ConstKBinAxis(axisName(), m_nbins, m_start, m_end);
 }
 
-ConstKBinAxis* ConstKBinAxis::createClippedAxis(double lower, double upper) const
-{
-    return static_cast<ConstKBinAxis*>(IAxis::createClippedAxis(lower, upper));
-}
-
 void ConstKBinAxis::clip(double lower, double upper)
 {
     if (lower >= upper)
diff --git a/Base/Axis/ConstKBinAxis.h b/Base/Axis/ConstKBinAxis.h
index c210243939d40f701d220c50e35494b631491e37..eba5a8c05ac8b74bdc2f02bae8cf6d1fa173b6f6 100644
--- a/Base/Axis/ConstKBinAxis.h
+++ b/Base/Axis/ConstKBinAxis.h
@@ -32,7 +32,6 @@ public:
 
     ConstKBinAxis* clone() const override;
 
-    ConstKBinAxis* createClippedAxis(double lower, double upper) const override;
     virtual void clip(double lower, double upper) override;
 
 protected:
diff --git a/Base/Axis/CustomBinAxis.cpp b/Base/Axis/CustomBinAxis.cpp
index 102b9cf3496bf22c040ec78766ac1a4c99fd3ee1..573cd568872db869e794e0a8563656aeadc5c790 100644
--- a/Base/Axis/CustomBinAxis.cpp
+++ b/Base/Axis/CustomBinAxis.cpp
@@ -60,12 +60,6 @@ std::vector<double> CustomBinAxis::binCenters() const
     return m_bin_centers;
 }
 
-CustomBinAxis* CustomBinAxis::createClippedAxis(double /* lower */, double /* upper */) const
-{
-    throw std::runtime_error("CustomBinAxis::createClippedAxis() -> Error."
-                             " Not implemented.");
-}
-
 void CustomBinAxis::clip(double /* lower */, double /* upper */)
 {
     throw std::runtime_error("CustomBinAxis::clip() -> Error."
diff --git a/Base/Axis/CustomBinAxis.h b/Base/Axis/CustomBinAxis.h
index 490654bb538beacc3d71c147b9d8e9dc67d877a6..ce300376ee7397c5cf88feed14f9651265dc5512 100644
--- a/Base/Axis/CustomBinAxis.h
+++ b/Base/Axis/CustomBinAxis.h
@@ -37,7 +37,6 @@ public:
 
     std::vector<double> binCenters() const override;
 
-    CustomBinAxis* createClippedAxis(double lower, double upper) const override;
     virtual void clip(double lower, double upper) override;
 
 protected:
diff --git a/Base/Axis/FixedBinAxis.cpp b/Base/Axis/FixedBinAxis.cpp
index aaee7bebe0acb2d9cd3c26293d6f8519ab4adadb..a88ab04b373c38938f741d6035e2b79cfc21e7dd 100644
--- a/Base/Axis/FixedBinAxis.cpp
+++ b/Base/Axis/FixedBinAxis.cpp
@@ -77,11 +77,6 @@ std::vector<double> FixedBinAxis::binBoundaries() const
     return result;
 }
 
-FixedBinAxis* FixedBinAxis::createClippedAxis(double lower, double upper) const
-{
-    return static_cast<FixedBinAxis*>(IAxis::createClippedAxis(lower, upper));
-}
-
 void FixedBinAxis::clip(double lower, double upper)
 {
     if (lower >= upper)
diff --git a/Base/Axis/FixedBinAxis.h b/Base/Axis/FixedBinAxis.h
index bdd9635e8547cf7ef0a96ce53ae3ef0b1537da90..4b2463294956a886d91c8281dfba1f5927090542 100644
--- a/Base/Axis/FixedBinAxis.h
+++ b/Base/Axis/FixedBinAxis.h
@@ -49,7 +49,6 @@ public:
 
     std::vector<double> binBoundaries() const override;
 
-    FixedBinAxis* createClippedAxis(double lower, double upper) const override;
     void clip(double lower, double upper) override;
 
 protected:
diff --git a/Base/Axis/IAxis.cpp b/Base/Axis/IAxis.cpp
index d7f907b0e95ad13a1736ad69cbb7810aace0e7cd..384d7ea88f57c6aa16f5fe99426a26d4034eafe2 100644
--- a/Base/Axis/IAxis.cpp
+++ b/Base/Axis/IAxis.cpp
@@ -29,13 +29,6 @@ std::vector<double> IAxis::binBoundaries() const
     throw std::runtime_error("IAxis::binBoundaries() -> Error. Not implemented.");
 }
 
-IAxis* IAxis::createClippedAxis(double lower, double upper) const
-{
-    auto newAxis = clone();
-    newAxis->clip(lower, upper);
-    return newAxis;
-}
-
 void IAxis::clip(double /*lower*/, double /*upper*/)
 {
     throw std::runtime_error("IAxis::clip() -> Error. Not implemented.");
diff --git a/Base/Axis/IAxis.h b/Base/Axis/IAxis.h
index a412220a8b54595a5ce577ea92c75e63803c1a30..d8235730062192b0a74aaf6e4dc512b5dee702e5 100644
--- a/Base/Axis/IAxis.h
+++ b/Base/Axis/IAxis.h
@@ -72,9 +72,6 @@ public:
     //! Returns true if axis contains given point
     virtual bool contains(double value) const;
 
-    //! Creates a new clipped axis
-    virtual IAxis* createClippedAxis(double lower, double upper) const;
-
     //! Clips this axis to the given values
     virtual void clip(double lower, double upper);
 
diff --git a/Base/Axis/PointwiseAxis.cpp b/Base/Axis/PointwiseAxis.cpp
index 4256675145d30a5bcef23a8234c306bf888c27d7..4c30dc9cd98f243e01bc51a33d5e8e7a2f8cabd9 100644
--- a/Base/Axis/PointwiseAxis.cpp
+++ b/Base/Axis/PointwiseAxis.cpp
@@ -70,11 +70,6 @@ std::vector<double> PointwiseAxis::binBoundaries() const
     return result;
 }
 
-PointwiseAxis* PointwiseAxis::createClippedAxis(double lower, double upper) const
-{
-    return static_cast<PointwiseAxis*>(IAxis::createClippedAxis(lower, upper));
-}
-
 void PointwiseAxis::clip(double lower, double upper)
 {
     if (lower >= upper)
diff --git a/Base/Axis/PointwiseAxis.h b/Base/Axis/PointwiseAxis.h
index 0e321bda78620565dea65b3dc05481c31236d44e..bf48dbe97ae6be904653c1bd522db1acd7e58907 100644
--- a/Base/Axis/PointwiseAxis.h
+++ b/Base/Axis/PointwiseAxis.h
@@ -75,7 +75,6 @@ public:
 
     std::vector<double> binBoundaries() const override;
 
-    PointwiseAxis* createClippedAxis(double lower, double upper) const override;
     virtual void clip(double lower, double upper) override;
 
 private:
diff --git a/Base/Axis/VariableBinAxis.cpp b/Base/Axis/VariableBinAxis.cpp
index 660f6b93f55fd51044c1095aa51176cc842c469b..5f90ab0e79518744d1c61176e505338f34407b7f 100644
--- a/Base/Axis/VariableBinAxis.cpp
+++ b/Base/Axis/VariableBinAxis.cpp
@@ -95,11 +95,6 @@ std::vector<double> VariableBinAxis::binCenters() const
     return result;
 }
 
-VariableBinAxis* VariableBinAxis::createClippedAxis(double lower, double upper) const
-{
-    return static_cast<VariableBinAxis*>(IAxis::createClippedAxis(lower, upper));
-}
-
 void VariableBinAxis::clip(double lower, double upper)
 {
     if (lower >= upper)
diff --git a/Base/Axis/VariableBinAxis.h b/Base/Axis/VariableBinAxis.h
index 4dab8dcda06978505abba29d70175e9a59aa488b..f8e1bddf2cb86c8b47bbdb70b46dd9bbfc620b38 100644
--- a/Base/Axis/VariableBinAxis.h
+++ b/Base/Axis/VariableBinAxis.h
@@ -49,7 +49,6 @@ public:
     std::vector<double> binCenters() const override;
     std::vector<double> binBoundaries() const override { return m_bin_boundaries; }
 
-    virtual VariableBinAxis* createClippedAxis(double lower, double upper) const override;
     virtual void clip(double lower, double upper) override;
 
 protected:
diff --git a/Base/Util/PyFmt.cpp b/Base/Util/PyFmt.cpp
index 3b55b5208a9fccb00d52b7e0969e9147d9744ba3..967cc670c0e9855e859cb70a819e9653c60a6e7b 100644
--- a/Base/Util/PyFmt.cpp
+++ b/Base/Util/PyFmt.cpp
@@ -24,10 +24,10 @@ namespace Py::Fmt {
 std::string printImportedSymbols(const std::string& code)
 {
     std::vector<std::string> to_declare;
-    for (const std::string& key : {"angstrom", "deg", "nm", "nm2", "micrometer"})
+    for (const std::string key : {"angstrom", "deg", "nm", "nm2", "micrometer"})
         if (code.find("*" + key) != std::string::npos)
             to_declare.push_back(key);
-    for (const std::string& key : {"R3"})
+    for (const std::string key : {"R3"})
         if (code.find(key) != std::string::npos)
             to_declare.push_back(key);
     return "from bornagain import " + BaseUtils::String::join(to_declare, ", ") + "\n";
diff --git a/Device/Beam/Beam.cpp b/Device/Beam/Beam.cpp
index d310db4f18004076aff1c73b21d7c64ad3bbcbe9..83ce8f822eb9456e2f53abafce8671f092b5cb9a 100644
--- a/Device/Beam/Beam.cpp
+++ b/Device/Beam/Beam.cpp
@@ -58,6 +58,8 @@ Beam::Beam(const Beam& other) : Beam(other.m_intensity, other.m_wavelength, othe
 
 Beam& Beam::operator=(const Beam& other)
 {
+    if (&other==this)
+        return *this;
     m_intensity = other.m_intensity;
     m_wavelength = other.m_wavelength;
     // m_direction = other.m_direction;
diff --git a/Device/Coord/CoordSystem2D.cpp b/Device/Coord/CoordSystem2D.cpp
index 5bd8b1652fb38862ceac5d79c7a4caba32522d22..b9f9e749cf87afdbc92474bc0594534751486ef1 100644
--- a/Device/Coord/CoordSystem2D.cpp
+++ b/Device/Coord/CoordSystem2D.cpp
@@ -269,10 +269,10 @@ OffSpecularCoordinates::OffSpecularCoordinates(const Direction& direction, const
                                                double alpha_f_min, double alpha_f_max, size_t nbins)
     : CoordSystem2D(direction)
 {
-    addAxisData(axisName(0), alpha_axis.lowerBound(), alpha_axis.upperBound(), defaultUnits(),
+    addAxisData(axisName(0), alpha_axis.lowerBound(), alpha_axis.upperBound(), m_defaultUnits,
                 alpha_axis.size());
 
-    addAxisData(axisName(1), alpha_f_min, alpha_f_max, defaultUnits(), nbins);
+    addAxisData(axisName(1), alpha_f_min, alpha_f_max, m_defaultUnits, nbins);
 }
 
 OffSpecularCoordinates::OffSpecularCoordinates(const OffSpecularCoordinates& other)
@@ -307,11 +307,6 @@ OffSpecularCoordinates* OffSpecularCoordinates::clone() const
     return new OffSpecularCoordinates(*this);
 }
 
-Axes::Coords OffSpecularCoordinates::defaultUnits() const
-{
-    return Axes::Coords::DEGREES;
-}
-
 double OffSpecularCoordinates::calculateValue(size_t, Axes::Coords units, double value) const
 {
     switch (units) {
@@ -341,9 +336,9 @@ DepthProbeCoordinates::DepthProbeCoordinates(const Direction& direction, double
 {
     const auto& alpha_axis_name = axisName(0);
     const auto& z_axis_name = axisName(1);
-    addAxisData(alpha_axis_name, alpha_axis.lowerBound(), alpha_axis.upperBound(), defaultUnits(),
+    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(), defaultUnits(),
+    addAxisData(z_axis_name, z_axis.lowerBound(), z_axis.upperBound(), m_defaultUnits,
                 z_axis.size());
 }
 
diff --git a/Device/Coord/CoordSystem2D.h b/Device/Coord/CoordSystem2D.h
index 46e9cf482d0aec7b3c7ab9877b599450ef5782c0..81695b7c89b60832165b675ad5de98ca594b367a 100644
--- a/Device/Coord/CoordSystem2D.h
+++ b/Device/Coord/CoordSystem2D.h
@@ -89,9 +89,10 @@ public:
     //! Returns the list of all available units
     std::vector<Axes::Coords> availableUnits() const override;
 
-    Axes::Coords defaultUnits() const override { return Axes::Coords::DEGREES; }
+    Axes::Coords defaultUnits() const override { return m_defaultUnits; }
 
 private:
+    const Axes::Coords m_defaultUnits{ Axes::Coords::DEGREES };
     SphericalCoords(const SphericalCoords& other); //!< used by clone()
     double calculateValue(size_t i_axis, Axes::Coords units, double value) const override;
     std::vector<std::map<Axes::Coords, std::string>> createNameMaps() const override;
@@ -112,9 +113,10 @@ public:
     //! Returns the list of all available units
     std::vector<Axes::Coords> availableUnits() const override;
 
-    Axes::Coords defaultUnits() const override { return Axes::Coords::MM; }
+    Axes::Coords defaultUnits() const override { return m_defaultUnits; }
 
 private:
+    const Axes::Coords m_defaultUnits{ Axes::Coords::MM };
     ImageCoords(const ImageCoords& other); //!< used by clone()
     double calculateValue(size_t i_axis, Axes::Coords units, double value) const override;
     std::vector<std::map<Axes::Coords, std::string>> createNameMaps() const override;
@@ -139,9 +141,10 @@ public:
 
     OffSpecularCoordinates* clone() const override;
 
-    Axes::Coords defaultUnits() const override;
+    Axes::Coords defaultUnits() const override { return m_defaultUnits; }
 
 private:
+    const Axes::Coords m_defaultUnits{ Axes::Coords::DEGREES };
     OffSpecularCoordinates(const Direction& direction, const IAxis& alphaAxis, double alpha_f_min,
                            double alpha_f_max, size_t nbins);
     OffSpecularCoordinates(const OffSpecularCoordinates& other); //!< used by clone()
@@ -164,9 +167,10 @@ public:
     //! Returns the list of all available units
     std::vector<Axes::Coords> availableUnits() const override;
 
-    Axes::Coords defaultUnits() const override { return Axes::Coords::DEGREES; }
+    Axes::Coords defaultUnits() const override { return m_defaultUnits; }
 
 private:
+    const Axes::Coords m_defaultUnits{ Axes::Coords::DEGREES };
     DepthProbeCoordinates(const DepthProbeCoordinates& other); //!< used by clone()
     double calculateValue(size_t, Axes::Coords units, double value) const override;
     std::vector<std::map<Axes::Coords, std::string>> createNameMaps() const override;
diff --git a/Device/Data/DataUtils.cpp b/Device/Data/DataUtils.cpp
index a18ad1c6b0bfa0a9129f228b80fde67c06099459..3cd01756ff0e10e1e55cf3a32194ea6d79430c53 100644
--- a/Device/Data/DataUtils.cpp
+++ b/Device/Data/DataUtils.cpp
@@ -134,14 +134,12 @@ DataUtils::Data::createClippedDataSet(const OutputData<double>& origin, double x
 
     std::unique_ptr<OutputData<double>> result(new OutputData<double>);
     for (size_t i_axis = 0; i_axis < origin.rank(); i_axis++) {
-        const IAxis& axis = origin.axis(i_axis);
-        IAxis* new_axis;
+        std::unique_ptr<IAxis> new_axis{origin.axis(i_axis).clone()};
         if (i_axis == 0)
-            new_axis = axis.createClippedAxis(x1, x2);
+            new_axis->clip(x1, x2);
         else
-            new_axis = axis.createClippedAxis(y1, y2);
+            new_axis->clip(y1, y2);
         result->addAxis(*new_axis);
-        delete new_axis;
     }
     result->setAllTo(0.0);
 
diff --git a/Device/Detector/SimulationAreaIterator.cpp b/Device/Detector/SimulationAreaIterator.cpp
index e5ab4ef1962194b7996e68b8f9ee95ca5a2f61f1..590b158ebb10dcf9194472573ddd2dd55df1a477 100644
--- a/Device/Detector/SimulationAreaIterator.cpp
+++ b/Device/Detector/SimulationAreaIterator.cpp
@@ -64,13 +64,6 @@ SimulationAreaIterator& SimulationAreaIterator::operator++()
     return *this;
 }
 
-SimulationAreaIterator SimulationAreaIterator::operator++(int)
-{
-    SimulationAreaIterator result(*this);
-    this->operator++();
-    return result;
-}
-
 size_t SimulationAreaIterator::nextIndex(size_t currentIndex)
 {
     // #baROI + this can be optimized: Check whether a RegionOfInterest is present, then do not
diff --git a/Device/Detector/SimulationAreaIterator.h b/Device/Detector/SimulationAreaIterator.h
index d55fa2f1160ccef38f8513f9765a4bb62e3c216e..fafa3ffa00743e0b70a0b3283bf50abaf7afb881 100644
--- a/Device/Detector/SimulationAreaIterator.h
+++ b/Device/Detector/SimulationAreaIterator.h
@@ -58,9 +58,6 @@ public:
     //! prefix increment
     SimulationAreaIterator& operator++();
 
-    //! postfix increment
-    SimulationAreaIterator operator++(int);
-
 private:
     size_t nextIndex(size_t currentIndex);
 
diff --git a/Device/Histo/Histogram1D.cpp b/Device/Histo/Histogram1D.cpp
index c4862452a5045311f94f7b8fea75b089695a8bc1..4f6fca10ef9c99421cf7931e106606ac3055ff20 100644
--- a/Device/Histo/Histogram1D.cpp
+++ b/Device/Histo/Histogram1D.cpp
@@ -85,12 +85,13 @@ PyObject* Histogram1D::binErrorsNumpy() const
 
 Histogram1D* Histogram1D::crop(double xmin, double xmax)
 {
-    const std::unique_ptr<IAxis> xaxis(xAxis().createClippedAxis(xmin, xmax));
+    const std::unique_ptr<IAxis> xaxis{xAxis().clone()};
+    xaxis->clip(xmin, xmax);
     Histogram1D* result = new Histogram1D(*xaxis);
     OutputData<CumulativeValue>::const_iterator it_origin = m_data.begin();
     OutputData<CumulativeValue>::iterator it_result = result->m_data.begin();
     while (it_origin != m_data.end()) {
-        double x = m_data.getAxisValue(it_origin.getIndex(), 0);
+        const double x = m_data.getAxisValue(it_origin.getIndex(), 0);
         if (result->xAxis().contains(x)) {
             *it_result = *it_origin;
             ++it_result;
diff --git a/Device/Histo/Histogram2D.cpp b/Device/Histo/Histogram2D.cpp
index d407d8dd2647349c1c2a7b5c51f48c7b5819a28d..c36f3f44e6459ae6cff190971d678c9a2114ea55 100644
--- a/Device/Histo/Histogram2D.cpp
+++ b/Device/Histo/Histogram2D.cpp
@@ -112,8 +112,10 @@ Histogram1D* Histogram2D::projectionY(double xlow, double xup)
 
 Histogram2D* Histogram2D::crop(double xmin, double ymin, double xmax, double ymax)
 {
-    const std::unique_ptr<IAxis> xaxis(xAxis().createClippedAxis(xmin, xmax));
-    const std::unique_ptr<IAxis> yaxis(yAxis().createClippedAxis(ymin, ymax));
+    const std::unique_ptr<IAxis> xaxis{xAxis().clone()};
+    const std::unique_ptr<IAxis> yaxis{yAxis().clone()};
+    xaxis->clip(xmin, xmax);
+    yaxis->clip(ymin, ymax);
 
     Histogram2D* result = new Histogram2D(*xaxis, *yaxis);
     OutputData<CumulativeValue>::const_iterator it_origin = m_data.begin();
diff --git a/Device/Histo/SimulationResult.cpp b/Device/Histo/SimulationResult.cpp
index eaa29cc863ba7e0c9bb83439e751add48f22300a..2b9e0e156bfcc01279584b78b65d72960a48479c 100644
--- a/Device/Histo/SimulationResult.cpp
+++ b/Device/Histo/SimulationResult.cpp
@@ -43,6 +43,8 @@ SimulationResult::SimulationResult(SimulationResult&& other)
 
 SimulationResult& SimulationResult::operator=(const SimulationResult& other)
 {
+    if (&other==this)
+        return *this;
     if (!other.m_data || !other.m_coordsys)
         throw std::runtime_error("Error in SimulationResult(const SimulationResult& other): "
                                  "not initialized");
diff --git a/GUI/Model/Data/SpecularDataItem.cpp b/GUI/Model/Data/SpecularDataItem.cpp
index 96902e6d36cce94ea20d6ab460ee49d646f97831..df7156b9931d7ae4f3a43c41d49b6109a3d3a232 100644
--- a/GUI/Model/Data/SpecularDataItem.cpp
+++ b/GUI/Model/Data/SpecularDataItem.cpp
@@ -39,8 +39,8 @@ SpecularDataItem::SpecularDataItem() : DataItem(M_TYPE)
     amplitudeAxis->visibilityItem()->setValue(true);
     amplitudeAxis->visibilityItem()->setVisible(false);
 
-    setXaxisTitle(x_axis_default_name);
-    setYaxisTitle(y_axis_default_name);
+    xAxisItem()->setTitle(x_axis_default_name);
+    yAxisItem()->setTitle(y_axis_default_name);
 }
 
 void SpecularDataItem::setOutputData(OutputData<double>* data)
diff --git a/GUI/Model/Job/JobModel.cpp b/GUI/Model/Job/JobModel.cpp
index 8749d7eb64e90ebef06a0cab7d8d82bd513f911a..5a024052f637d988d8845db8e755d51c7997ab5e 100644
--- a/GUI/Model/Job/JobModel.cpp
+++ b/GUI/Model/Job/JobModel.cpp
@@ -216,6 +216,7 @@ QString JobModel::generateJobName()
 
 void JobModel::restoreItem(SessionItem* item)
 {
+    ASSERT(item);
     if (ParameterItem* parameter = dynamic_cast<ParameterItem*>(item))
         parameter->restoreFromBackup();
 
diff --git a/GUI/Model/Session/SessionModel.cpp b/GUI/Model/Session/SessionModel.cpp
index a34c1a32442c9b80ba85c5b87b3cd03ddeae364d..c52c1143c454ddb126b105ccc22ef1d704b3ce53 100644
--- a/GUI/Model/Session/SessionModel.cpp
+++ b/GUI/Model/Session/SessionModel.cpp
@@ -260,6 +260,7 @@ SessionItem* SessionModel::insertNewItem(QString model_type, SessionItem* parent
 {
     if (!parent_item)
         parent_item = m_root_item;
+    ASSERT(m_root_item);
     if (row > parent_item->numberOfChildren())
         return nullptr;
     if (parent_item != m_root_item) {
diff --git a/GUI/Model/Session/SessionXML.cpp b/GUI/Model/Session/SessionXML.cpp
index 7b4188027e8805fdf927f40fc54f95974447cfef..3b9cf517c0aa99fccdc16f61d213af0fc881515e 100644
--- a/GUI/Model/Session/SessionXML.cpp
+++ b/GUI/Model/Session/SessionXML.cpp
@@ -35,11 +35,14 @@ void report_error(MessageService* messageService, SessionItem* item, const QStri
 {
     if (!messageService)
         throw Error(QString("Warning: ") + message);
+    if (!item)
+        throw Error(QString("report_error called without parent; warning: ") + message);
     messageService->addWarning(item->model(), message);
 }
 
 SessionItem* createItem(SessionItem* item, const QString& modelType, const QString& tag)
 {
+    ASSERT(item);
     if (item->hasModelType<GroupItem>()) {
         if (auto groupItem = dynamic_cast<GroupItem*>(item))
             return groupItem->getItemOfType(modelType);
@@ -59,6 +62,8 @@ SessionItem* createItem(SessionItem* item, const QString& modelType, const QStri
 
 void GUI::Session::XML::writeTo(QXmlStreamWriter* writer, SessionItem* parent)
 {
+    ASSERT(writer);
+    ASSERT(parent);
     writer->writeStartElement(parent->model()->getModelTag());
     writer->writeAttribute(GUI::Session::XML::ModelNameAttribute, parent->model()->getModelName());
 
@@ -69,6 +74,7 @@ void GUI::Session::XML::writeTo(QXmlStreamWriter* writer, SessionItem* parent)
 
 void GUI::Session::XML::writeItemAndChildItems(QXmlStreamWriter* writer, const SessionItem* item)
 {
+    ASSERT(item);
     if (item->parent()) {
         writer->writeStartElement(GUI::Session::XML::ItemTag);
         writer->writeAttribute(GUI::Session::XML::ModelTypeAttribute, item->modelType());
@@ -99,6 +105,7 @@ void GUI::Session::XML::writeItemAndChildItems(QXmlStreamWriter* writer, const S
 
 void GUI::Session::XML::writeVariant(QXmlStreamWriter* writer, QVariant variant, int role)
 {
+    ASSERT(writer);
     if (variant.isValid()) {
         writer->writeStartElement(GUI::Session::XML::ParameterTag);
         QString type_name = variant.typeName();
@@ -142,6 +149,7 @@ void GUI::Session::XML::readItems(QXmlStreamReader* reader, SessionItem* parent,
                                   MessageService* messageService)
 {
     bool legacyDistributionFound = false;
+    ASSERT(reader);
     ASSERT(parent);
     const QString start_type = parent->model()->getModelTag();
     while (!reader->atEnd()) {
@@ -211,6 +219,7 @@ void GUI::Session::XML::readItems(QXmlStreamReader* reader, SessionItem* parent,
 QString GUI::Session::XML::readProperty(QXmlStreamReader* reader, SessionItem* item,
                                         MessageService* messageService)
 {
+    ASSERT(reader);
     const QString parameter_name =
         reader->attributes().value(GUI::Session::XML::ParameterNameAttribute).toString();
     const QString parameter_type =
diff --git a/Sample/Material/Material.cpp b/Sample/Material/Material.cpp
index 85d271cbdc858a0c4c06b58d8a395730986f67a1..9585cc1835d9cb58a3f760f60d116ce6047674cb 100644
--- a/Sample/Material/Material.cpp
+++ b/Sample/Material/Material.cpp
@@ -13,6 +13,7 @@
 //  ************************************************************************************************
 
 #include "Sample/Material/Material.h"
+#include "Base/Util/Assert.h"
 #include "Base/Vector/Transform3D.h"
 #include "Base/Vector/WavevectorInfo.h"
 #include <typeinfo>
@@ -24,15 +25,15 @@ Material::Material(std::unique_ptr<BaseMaterialImpl> material_impl)
 
 Material::Material(const Material& material)
 {
-    if (material.isEmpty())
-        throw std::runtime_error("Material: Error! Attempt to initialize material with nullptr.");
+    ASSERT(!material.isEmpty());
     m_material_impl.reset(material.m_material_impl->clone());
 }
 
 Material& Material::operator=(const Material& other)
 {
-    if (other.isEmpty())
-        throw std::runtime_error("Material: Error! Attempt to assign nullptr to material.");
+    if(this == &other)
+        return *this;
+    ASSERT(!other.isEmpty());
     m_material_impl.reset(other.m_material_impl->clone());
     return *this;
 }
diff --git a/Tests/Unit/Device/ConstKBinAxisTest.cpp b/Tests/Unit/Device/ConstKBinAxisTest.cpp
index 4a75e786d1312337bf2cbfd21a413c50a3481a8b..8631b95364adeacedd4f725d2808d8cdf59a8574 100644
--- a/Tests/Unit/Device/ConstKBinAxisTest.cpp
+++ b/Tests/Unit/Device/ConstKBinAxisTest.cpp
@@ -77,15 +77,16 @@ TEST_F(ConstKBinAxisTest, IOStream)
 
 TEST_F(ConstKBinAxisTest, ClippedAxis)
 {
-    ConstKBinAxis* clip1 = m_axis.createClippedAxis(Units::deg2rad(-10.0), Units::deg2rad(10.0));
+    ConstKBinAxis* clip1 = m_axis.clone();
+    clip1->clip(Units::deg2rad(-10.0), Units::deg2rad(10.0));
     EXPECT_TRUE(*clip1 == m_axis);
     delete clip1;
 
-    ConstKBinAxis* clip2 = m_axis.createClippedAxis(Units::deg2rad(-3.0), Units::deg2rad(3.0));
+    ConstKBinAxis* clip2 = m_axis.clone();
+    clip2->clip(Units::deg2rad(-3.0), Units::deg2rad(3.0));
     EXPECT_EQ(clip2->size(), size_t(8));
     std::vector<double> boundaries = clip2->binBoundaries();
-    for (size_t i = 0; i < boundaries.size(); ++i) {
+    for (size_t i = 0; i < boundaries.size(); ++i)
         EXPECT_EQ(boundaries[i], m_axis.bin(1 + i).m_lower);
-    }
     delete clip2;
 }
diff --git a/Tests/Unit/Device/FixedBinAxisTest.cpp b/Tests/Unit/Device/FixedBinAxisTest.cpp
index 89d599271458eda42f781820b455d86030337814..d0719563e1ed86f1e12d6d029370327ca165e8b3 100644
--- a/Tests/Unit/Device/FixedBinAxisTest.cpp
+++ b/Tests/Unit/Device/FixedBinAxisTest.cpp
@@ -153,14 +153,16 @@ TEST_F(FixedBinAxisTest, ClippedAxis)
 {
     FixedBinAxis axis("name", 4, -1.0, 3.0);
 
-    FixedBinAxis* clip1 = axis.createClippedAxis(-0.5, 2.5);
+    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_TRUE(*clip1 == axis);
     delete clip1;
 
-    FixedBinAxis* clip2 = axis.createClippedAxis(0.0, 1.99);
+    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);
diff --git a/Tests/Unit/Device/PointwiseAxisTest.cpp b/Tests/Unit/Device/PointwiseAxisTest.cpp
index 0b352460c600b78b98f7eeba2d8cbf64499ac7c8..ece86cf5a86935f0311115f49f327ea521042c61 100644
--- a/Tests/Unit/Device/PointwiseAxisTest.cpp
+++ b/Tests/Unit/Device/PointwiseAxisTest.cpp
@@ -132,20 +132,23 @@ TEST_F(PointwiseAxisTest, ClippedAxis)
 {
     PointwiseAxis axis("name", std::vector<double>{1.0, 2.0, 2.5, 2.7, 5.0});
 
-    std::unique_ptr<PointwiseAxis> clip1(axis.createClippedAxis(0.99, 5.1));
+    std::unique_ptr<PointwiseAxis> clip1(axis.clone());
+    clip1->clip(0.99, 5.1);
     EXPECT_TRUE(*clip1 == axis);
 
-    std::unique_ptr<PointwiseAxis> clip2(axis.createClippedAxis(1, 5.0));
+    std::unique_ptr<PointwiseAxis> clip2(axis.clone());
+    clip2->clip(1, 5.0);
     EXPECT_TRUE(*clip2 == axis);
 
-    std::unique_ptr<PointwiseAxis> clip3(axis.createClippedAxis(1.5, 2.5));
+    std::unique_ptr<PointwiseAxis> clip3(axis.clone());
+    clip3->clip(1.5, 2.5);
     EXPECT_TRUE(*clip3 != axis);
     EXPECT_EQ(clip3->size(), 2u);
     EXPECT_EQ(clip3->operator[](0), 2.0);
     EXPECT_EQ(clip3->operator[](1), 2.5);
 
-    EXPECT_THROW(axis.createClippedAxis(1.5, 2.0), std::runtime_error);
-    EXPECT_THROW(axis.createClippedAxis(5.0, 1.0), std::runtime_error);
+    EXPECT_THROW(axis.clone()->clip(1.5, 2.0), std::runtime_error);
+    EXPECT_THROW(axis.clone()->clip(5.0, 1.0), std::runtime_error);
 }
 
 TEST_F(PointwiseAxisTest, FixedBinAxisComparison)
@@ -170,17 +173,13 @@ TEST_F(PointwiseAxisTest, FixedBinAxisComparison)
     EXPECT_EQ(fixed_axis.findClosestIndex(2.5), pointwise_axis.findClosestIndex(2.5));
     EXPECT_EQ(fixed_axis.findClosestIndex(4.5), pointwise_axis.findClosestIndex(4.5));
 
-    std::unique_ptr<FixedBinAxis> clipped_fixed(fixed_axis.createClippedAxis(0.5, 3.5));
-    std::unique_ptr<PointwiseAxis> clipped_pointwise(pointwise_axis.createClippedAxis(0.5, 3.5));
+    std::unique_ptr<FixedBinAxis> clipped_fixed(fixed_axis.clone());
+    clipped_fixed->clip(0.5, 3.5);
+    std::unique_ptr<PointwiseAxis> clipped_pointwise(pointwise_axis.clone());
+    clipped_pointwise->clip(0.5, 3.5);
     EXPECT_EQ(clipped_fixed->size(), clipped_pointwise->size());
     EXPECT_DOUBLE_EQ(clipped_fixed->binCenter(0), clipped_pointwise->binCenter(0));
     EXPECT_DOUBLE_EQ(clipped_fixed->binCenter(3), clipped_pointwise->binCenter(3));
-
-    clipped_fixed.reset(fixed_axis.createClippedAxis(1.0, 3.0));
-    clipped_pointwise.reset(pointwise_axis.createClippedAxis(1.0, 3.0));
-    EXPECT_EQ(clipped_fixed->size(), clipped_pointwise->size());
-    EXPECT_DOUBLE_EQ(clipped_fixed->binCenter(0), clipped_pointwise->binCenter(0));
-    EXPECT_DOUBLE_EQ(clipped_fixed->binCenter(2), clipped_pointwise->binCenter(2));
 }
 
 TEST_F(PointwiseAxisTest, FixedBinAxisComparisonWithMask)
diff --git a/Tests/Unit/Device/SimulationAreaTest.cpp b/Tests/Unit/Device/SimulationAreaTest.cpp
index 5ecf981c19aa876206a80349853dea54c1f4b3a8..7c7aa9dd65e79ea4590965aae5948e5d8b134a0b 100644
--- a/Tests/Unit/Device/SimulationAreaTest.cpp
+++ b/Tests/Unit/Device/SimulationAreaTest.cpp
@@ -32,14 +32,6 @@ TEST_F(SimulationAreaTest, iteratorOperations)
     EXPECT_TRUE(it == it_begin);
     EXPECT_FALSE(it != it_begin);
 
-    // increment
-    it++;
-    EXPECT_EQ(it.roiIndex(), 1u);
-    EXPECT_TRUE(it != it_begin);
-    EXPECT_FALSE(it == it_begin);
-    ++it;
-    EXPECT_EQ(it.roiIndex(), 2u);
-
     // incrementing well behind the end
     for (size_t i = 0; i < 100; ++i)
         ++it;
diff --git a/Tests/Unit/Device/VariableBinAxisTest.cpp b/Tests/Unit/Device/VariableBinAxisTest.cpp
index 6e3710b73c73308540905c05edfcaf844eafc48c..09ab8ecf5bd6f84df1486719ed72e90f7779947a 100644
--- a/Tests/Unit/Device/VariableBinAxisTest.cpp
+++ b/Tests/Unit/Device/VariableBinAxisTest.cpp
@@ -207,11 +207,13 @@ TEST_F(VariableBinAxisTest, ClippedAxis)
     std::vector<double> values(arr, arr + sizeof(arr) / sizeof(arr[0]));
     VariableBinAxis axis("name", 4, values);
 
-    VariableBinAxis* clip1 = axis.createClippedAxis(-1.0, 2.0);
+    VariableBinAxis* clip1 = axis.clone();
+    clip1->clip(-1.0, 2.0);
     EXPECT_TRUE(axis == *clip1);
     delete clip1;
 
-    VariableBinAxis* clip2 = axis.createClippedAxis(-0.5, 1.5);
+    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);
@@ -222,7 +224,8 @@ TEST_F(VariableBinAxisTest, ClippedAxis)
     EXPECT_TRUE(axis != *clip2);
     delete clip2;
 
-    VariableBinAxis* clip3 = axis.createClippedAxis(-0.5, 0.99);
+    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);
diff --git a/auto/Wrap/doxygenBase.i b/auto/Wrap/doxygenBase.i
index 3e7096a9980d95eec37a36488999a8c3bc5e9e57..a57dc45adc39b392c599c2c2a71c46b90560596c 100644
--- a/auto/Wrap/doxygenBase.i
+++ b/auto/Wrap/doxygenBase.i
@@ -302,11 +302,6 @@ upper edge of last bin
 %feature("docstring")  ConstKBinAxis::clone "ConstKBinAxis * ConstKBinAxis::clone() const override
 ";
 
-%feature("docstring")  ConstKBinAxis::createClippedAxis "ConstKBinAxis * ConstKBinAxis::createClippedAxis(double lower, double upper) const override
-
-Creates a new clipped axis. 
-";
-
 %feature("docstring")  ConstKBinAxis::clip "void ConstKBinAxis::clip(double lower, double upper) override
 
 Clips this axis to the given values. 
@@ -355,11 +350,6 @@ retrieve a 1d bin for the given index
 %feature("docstring")  CustomBinAxis::binCenters "std::vector< double > CustomBinAxis::binCenters() const override
 ";
 
-%feature("docstring")  CustomBinAxis::createClippedAxis "CustomBinAxis * CustomBinAxis::createClippedAxis(double lower, double upper) const override
-
-Creates a new clipped axis. 
-";
-
 %feature("docstring")  CustomBinAxis::clip "void CustomBinAxis::clip(double lower, double upper) override
 
 Clips this axis to the given values. 
@@ -531,11 +521,6 @@ find bin index which is best match for given value
 %feature("docstring")  FixedBinAxis::binBoundaries "std::vector< double > FixedBinAxis::binBoundaries() const override
 ";
 
-%feature("docstring")  FixedBinAxis::createClippedAxis "FixedBinAxis * FixedBinAxis::createClippedAxis(double lower, double upper) const override
-
-Creates a new clipped axis. 
-";
-
 %feature("docstring")  FixedBinAxis::clip "void FixedBinAxis::clip(double lower, double upper) override
 
 Clips this axis to the given values. 
@@ -667,11 +652,6 @@ find bin index which is best match for given value
 Returns true if axis contains given point. 
 ";
 
-%feature("docstring")  IAxis::createClippedAxis "IAxis * IAxis::createClippedAxis(double lower, double upper) const
-
-Creates a new clipped axis. 
-";
-
 %feature("docstring")  IAxis::clip "void IAxis::clip(double lower, double upper)
 
 Clips this axis to the given values. 
@@ -860,11 +840,6 @@ find index of the coordinate closest to the given value
 %feature("docstring")  PointwiseAxis::binBoundaries "std::vector< double > PointwiseAxis::binBoundaries() const override
 ";
 
-%feature("docstring")  PointwiseAxis::createClippedAxis "PointwiseAxis * PointwiseAxis::createClippedAxis(double lower, double upper) const override
-
-Creates a new clipped axis. 
-";
-
 %feature("docstring")  PointwiseAxis::clip "void PointwiseAxis::clip(double lower, double upper) override
 
 Clips this axis to the given values. 
@@ -1240,11 +1215,6 @@ find bin index which is best match for given value
 %feature("docstring")  VariableBinAxis::binBoundaries "std::vector<double> VariableBinAxis::binBoundaries() const override
 ";
 
-%feature("docstring")  VariableBinAxis::createClippedAxis "VariableBinAxis * VariableBinAxis::createClippedAxis(double lower, double upper) const override
-
-Creates a new clipped axis. 
-";
-
 %feature("docstring")  VariableBinAxis::clip "void VariableBinAxis::clip(double lower, double upper) override
 
 Clips this axis to the given values. 
diff --git a/auto/Wrap/libBornAgainBase.py b/auto/Wrap/libBornAgainBase.py
index 45e3177c8d4bb05379f4a423914c0917e135b3ee..7c21c074ad99d174ba23e5b7d64c8d0422abf9e0 100644
--- a/auto/Wrap/libBornAgainBase.py
+++ b/auto/Wrap/libBornAgainBase.py
@@ -2337,16 +2337,6 @@ class IAxis(object):
         """
         return _libBornAgainBase.IAxis_contains(self, value)
 
-    def createClippedAxis(self, lower, upper):
-        r"""
-        createClippedAxis(IAxis self, double lower, double upper) -> IAxis
-        IAxis * IAxis::createClippedAxis(double lower, double upper) const
-
-        Creates a new clipped axis. 
-
-        """
-        return _libBornAgainBase.IAxis_createClippedAxis(self, lower, upper)
-
     def clip(self, *args):
         r"""
         clip(IAxis self, double lower, double upper)
@@ -2487,16 +2477,6 @@ class VariableBinAxis(IAxis):
         """
         return _libBornAgainBase.VariableBinAxis_binBoundaries(self)
 
-    def createClippedAxis(self, lower, upper):
-        r"""
-        createClippedAxis(VariableBinAxis self, double lower, double upper) -> VariableBinAxis
-        VariableBinAxis * VariableBinAxis::createClippedAxis(double lower, double upper) const override
-
-        Creates a new clipped axis. 
-
-        """
-        return _libBornAgainBase.VariableBinAxis_createClippedAxis(self, lower, upper)
-
     def clip(self, lower, upper):
         r"""
         clip(VariableBinAxis self, double lower, double upper)
@@ -2561,16 +2541,6 @@ class ConstKBinAxis(VariableBinAxis):
         """
         return _libBornAgainBase.ConstKBinAxis_clone(self)
 
-    def createClippedAxis(self, lower, upper):
-        r"""
-        createClippedAxis(ConstKBinAxis self, double lower, double upper) -> ConstKBinAxis
-        ConstKBinAxis * ConstKBinAxis::createClippedAxis(double lower, double upper) const override
-
-        Creates a new clipped axis. 
-
-        """
-        return _libBornAgainBase.ConstKBinAxis_createClippedAxis(self, lower, upper)
-
     def clip(self, lower, upper):
         r"""
         clip(ConstKBinAxis self, double lower, double upper)
@@ -2649,16 +2619,6 @@ class CustomBinAxis(VariableBinAxis):
         """
         return _libBornAgainBase.CustomBinAxis_binCenters(self)
 
-    def createClippedAxis(self, lower, upper):
-        r"""
-        createClippedAxis(CustomBinAxis self, double lower, double upper) -> CustomBinAxis
-        CustomBinAxis * CustomBinAxis::createClippedAxis(double lower, double upper) const override
-
-        Creates a new clipped axis. 
-
-        """
-        return _libBornAgainBase.CustomBinAxis_createClippedAxis(self, lower, upper)
-
     def clip(self, lower, upper):
         r"""
         clip(CustomBinAxis self, double lower, double upper)
@@ -2793,16 +2753,6 @@ class FixedBinAxis(IAxis):
         """
         return _libBornAgainBase.FixedBinAxis_binBoundaries(self)
 
-    def createClippedAxis(self, lower, upper):
-        r"""
-        createClippedAxis(FixedBinAxis self, double lower, double upper) -> FixedBinAxis
-        FixedBinAxis * FixedBinAxis::createClippedAxis(double lower, double upper) const override
-
-        Creates a new clipped axis. 
-
-        """
-        return _libBornAgainBase.FixedBinAxis_createClippedAxis(self, lower, upper)
-
     def clip(self, lower, upper):
         r"""
         clip(FixedBinAxis self, double lower, double upper)
diff --git a/auto/Wrap/libBornAgainBase_wrap.cpp b/auto/Wrap/libBornAgainBase_wrap.cpp
index f8b9ec9dd570589d05661798126184aa37f90367..bce376d465dc2a77c21465de5bd102a3f3b39443 100644
--- a/auto/Wrap/libBornAgainBase_wrap.cpp
+++ b/auto/Wrap/libBornAgainBase_wrap.cpp
@@ -26515,44 +26515,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IAxis_createClippedAxis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IAxis *arg1 = (IAxis *) 0 ;
-  double arg2 ;
-  double arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  PyObject *swig_obj[3] ;
-  IAxis *result = 0 ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "IAxis_createClippedAxis", 3, 3, swig_obj)) SWIG_fail;
-  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_createClippedAxis" "', argument " "1"" of type '" "IAxis const *""'"); 
-  }
-  arg1 = reinterpret_cast< IAxis * >(argp1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IAxis_createClippedAxis" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "IAxis_createClippedAxis" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (IAxis *)((IAxis const *)arg1)->createClippedAxis(arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IAxis, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_IAxis_clip__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   IAxis *arg1 = (IAxis *) 0 ;
@@ -27050,44 +27012,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_VariableBinAxis_createClippedAxis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  VariableBinAxis *arg1 = (VariableBinAxis *) 0 ;
-  double arg2 ;
-  double arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  PyObject *swig_obj[3] ;
-  VariableBinAxis *result = 0 ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "VariableBinAxis_createClippedAxis", 3, 3, swig_obj)) SWIG_fail;
-  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_createClippedAxis" "', argument " "1"" of type '" "VariableBinAxis const *""'"); 
-  }
-  arg1 = reinterpret_cast< VariableBinAxis * >(argp1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "VariableBinAxis_createClippedAxis" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "VariableBinAxis_createClippedAxis" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (VariableBinAxis *)((VariableBinAxis const *)arg1)->createClippedAxis(arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_VariableBinAxis, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_VariableBinAxis_clip(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   VariableBinAxis *arg1 = (VariableBinAxis *) 0 ;
@@ -27264,44 +27188,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_ConstKBinAxis_createClippedAxis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  ConstKBinAxis *arg1 = (ConstKBinAxis *) 0 ;
-  double arg2 ;
-  double arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  PyObject *swig_obj[3] ;
-  ConstKBinAxis *result = 0 ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "ConstKBinAxis_createClippedAxis", 3, 3, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ConstKBinAxis, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ConstKBinAxis_createClippedAxis" "', argument " "1"" of type '" "ConstKBinAxis const *""'"); 
-  }
-  arg1 = reinterpret_cast< ConstKBinAxis * >(argp1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "ConstKBinAxis_createClippedAxis" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "ConstKBinAxis_createClippedAxis" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (ConstKBinAxis *)((ConstKBinAxis const *)arg1)->createClippedAxis(arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ConstKBinAxis, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_ConstKBinAxis_clip(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   ConstKBinAxis *arg1 = (ConstKBinAxis *) 0 ;
@@ -27501,44 +27387,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_CustomBinAxis_createClippedAxis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  CustomBinAxis *arg1 = (CustomBinAxis *) 0 ;
-  double arg2 ;
-  double arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  PyObject *swig_obj[3] ;
-  CustomBinAxis *result = 0 ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "CustomBinAxis_createClippedAxis", 3, 3, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_CustomBinAxis, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CustomBinAxis_createClippedAxis" "', argument " "1"" of type '" "CustomBinAxis const *""'"); 
-  }
-  arg1 = reinterpret_cast< CustomBinAxis * >(argp1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "CustomBinAxis_createClippedAxis" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "CustomBinAxis_createClippedAxis" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (CustomBinAxis *)((CustomBinAxis const *)arg1)->createClippedAxis(arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_CustomBinAxis, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_CustomBinAxis_clip(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   CustomBinAxis *arg1 = (CustomBinAxis *) 0 ;
@@ -27890,44 +27738,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FixedBinAxis_createClippedAxis(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FixedBinAxis *arg1 = (FixedBinAxis *) 0 ;
-  double arg2 ;
-  double arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  PyObject *swig_obj[3] ;
-  FixedBinAxis *result = 0 ;
-  
-  if (!SWIG_Python_UnpackTuple(args, "FixedBinAxis_createClippedAxis", 3, 3, swig_obj)) SWIG_fail;
-  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_createClippedAxis" "', argument " "1"" of type '" "FixedBinAxis const *""'"); 
-  }
-  arg1 = reinterpret_cast< FixedBinAxis * >(argp1);
-  ecode2 = SWIG_AsVal_double(swig_obj[1], &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "FixedBinAxis_createClippedAxis" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "FixedBinAxis_createClippedAxis" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (FixedBinAxis *)((FixedBinAxis const *)arg1)->createClippedAxis(arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FixedBinAxis, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_FixedBinAxis_clip(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FixedBinAxis *arg1 = (FixedBinAxis *) 0 ;
@@ -33833,13 +33643,6 @@ static PyMethodDef SwigMethods[] = {
 		"Returns true if axis contains given point. \n"
 		"\n"
 		""},
-	 { "IAxis_createClippedAxis", _wrap_IAxis_createClippedAxis, METH_VARARGS, "\n"
-		"IAxis_createClippedAxis(IAxis self, double lower, double upper) -> IAxis\n"
-		"IAxis * IAxis::createClippedAxis(double lower, double upper) const\n"
-		"\n"
-		"Creates a new clipped axis. \n"
-		"\n"
-		""},
 	 { "IAxis_clip", _wrap_IAxis_clip, METH_VARARGS, "\n"
 		"IAxis_clip(IAxis self, double lower, double upper)\n"
 		"IAxis_clip(IAxis self, pvacuum_double_t bounds)\n"
@@ -33930,13 +33733,6 @@ static PyMethodDef SwigMethods[] = {
 		"std::vector<double> VariableBinAxis::binBoundaries() const override\n"
 		"\n"
 		""},
-	 { "VariableBinAxis_createClippedAxis", _wrap_VariableBinAxis_createClippedAxis, METH_VARARGS, "\n"
-		"VariableBinAxis_createClippedAxis(VariableBinAxis self, double lower, double upper) -> VariableBinAxis\n"
-		"VariableBinAxis * VariableBinAxis::createClippedAxis(double lower, double upper) const override\n"
-		"\n"
-		"Creates a new clipped axis. \n"
-		"\n"
-		""},
 	 { "VariableBinAxis_clip", _wrap_VariableBinAxis_clip, METH_VARARGS, "\n"
 		"VariableBinAxis_clip(VariableBinAxis self, double lower, double upper)\n"
 		"void VariableBinAxis::clip(double lower, double upper) override\n"
@@ -33979,13 +33775,6 @@ static PyMethodDef SwigMethods[] = {
 		"ConstKBinAxis * ConstKBinAxis::clone() const override\n"
 		"\n"
 		""},
-	 { "ConstKBinAxis_createClippedAxis", _wrap_ConstKBinAxis_createClippedAxis, METH_VARARGS, "\n"
-		"ConstKBinAxis_createClippedAxis(ConstKBinAxis self, double lower, double upper) -> ConstKBinAxis\n"
-		"ConstKBinAxis * ConstKBinAxis::createClippedAxis(double lower, double upper) const override\n"
-		"\n"
-		"Creates a new clipped axis. \n"
-		"\n"
-		""},
 	 { "ConstKBinAxis_clip", _wrap_ConstKBinAxis_clip, METH_VARARGS, "\n"
 		"ConstKBinAxis_clip(ConstKBinAxis self, double lower, double upper)\n"
 		"void ConstKBinAxis::clip(double lower, double upper) override\n"
@@ -34039,13 +33828,6 @@ static PyMethodDef SwigMethods[] = {
 		"std::vector< double > CustomBinAxis::binCenters() const override\n"
 		"\n"
 		""},
-	 { "CustomBinAxis_createClippedAxis", _wrap_CustomBinAxis_createClippedAxis, METH_VARARGS, "\n"
-		"CustomBinAxis_createClippedAxis(CustomBinAxis self, double lower, double upper) -> CustomBinAxis\n"
-		"CustomBinAxis * CustomBinAxis::createClippedAxis(double lower, double upper) const override\n"
-		"\n"
-		"Creates a new clipped axis. \n"
-		"\n"
-		""},
 	 { "CustomBinAxis_clip", _wrap_CustomBinAxis_clip, METH_VARARGS, "\n"
 		"CustomBinAxis_clip(CustomBinAxis self, double lower, double upper)\n"
 		"void CustomBinAxis::clip(double lower, double upper) override\n"
@@ -34137,13 +33919,6 @@ static PyMethodDef SwigMethods[] = {
 		"std::vector< double > FixedBinAxis::binBoundaries() const override\n"
 		"\n"
 		""},
-	 { "FixedBinAxis_createClippedAxis", _wrap_FixedBinAxis_createClippedAxis, METH_VARARGS, "\n"
-		"FixedBinAxis_createClippedAxis(FixedBinAxis self, double lower, double upper) -> FixedBinAxis\n"
-		"FixedBinAxis * FixedBinAxis::createClippedAxis(double lower, double upper) const override\n"
-		"\n"
-		"Creates a new clipped axis. \n"
-		"\n"
-		""},
 	 { "FixedBinAxis_clip", _wrap_FixedBinAxis_clip, METH_VARARGS, "\n"
 		"FixedBinAxis_clip(FixedBinAxis self, double lower, double upper)\n"
 		"void FixedBinAxis::clip(double lower, double upper) override\n"