diff --git a/.clang-tidy b/.clang-tidy
index 7212210e12c822617c358c6b57e55186f4182171..52a95dbba51a21442f9a27cf7321298a94a69620 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -26,6 +26,7 @@ Checks: '*,
 -*-uppercase-literal-suffix,
 -*nodiscard,
 -abseil-*,
+-altera-struct-pack-align,
 -altera-unroll-loops,
 -bugprone-branch-clone,
 -bugprone-easily-swappable-parameters,
@@ -34,7 +35,9 @@ Checks: '*,
 -cert-err58-cpp,
 -cert-err61-cpp,
 -cert-msc30-c*,
+-cert-msc32-c,
 -cert-msc50-cpp,
+-cert-msc51-cpp,
 -clang-analyzer-alpha*,
 -clang-analyzer-alpha.deadcode.UnreachableCode,
 -clang-analyzer-security.insecureAPI.strcpy,
@@ -63,6 +66,7 @@ Checks: '*,
 -hicpp-exception-baseclass,
 -hicpp-explicit-conversions,
 -hicpp-member-init,
+-hicpp-noexcept-move,
 -hicpp-signed-bitwise,
 -hicpp-vararg,
 -llvmlibc-callee-namespace,
@@ -106,6 +110,7 @@ Checks: '*,
 
 -*avoid-c-arrays,
 -*narrowing-conversions,
+-cppcoreguidelines-prefer-member-initializer,
 -cppcoreguidelines-owning-memory,
 -bugprone-unused-return-value,
 -bugprone-parent-virtual-call,
@@ -134,7 +139,6 @@ Checks: '*,
 *-use-override,
 cppcoreguidelines-explicit-virtual-functions,
 google-readability-avoid-underscore-in-googletest-name,
-hicpp-noexcept-move,
 llvm-qualified-auto,
 misc-uniqueptr-reset-release,
 modernize-avoid-bind,
diff --git a/Base/Axis/Bin.h b/Base/Axis/Bin.h
index baed11aa4c22c248bc62b210b30b61a644db07fc..8fc0c452dc157fc26f07b99847b716f59c6e2158 100644
--- a/Base/Axis/Bin.h
+++ b/Base/Axis/Bin.h
@@ -30,7 +30,7 @@ public:
     bool operator==(const Bin1D&) const = default;
 
     double min() const { return m_lower; }
-    double axn() const { return m_upper; }
+    double max() const { return m_upper; }
     double center() const { return (m_lower + m_upper) / 2; }
     double binSize() const { return m_upper - m_lower; }
     double atFraction(double fraction) const;
diff --git a/Base/Axis/Frame.cpp b/Base/Axis/Frame.cpp
index 5e25bbb8b021fb456096adb7447b6d1ea0e3f15e..1998ab0e980bb13ebff8b9774378610b86b48644 100644
--- a/Base/Axis/Frame.cpp
+++ b/Base/Axis/Frame.cpp
@@ -137,7 +137,7 @@ Frame* Frame::plottableFrame() const
 {
     std::vector<const Scale*> outaxes;
     for (size_t k = 0; k < rank(); ++k) {
-        Scale* s = new Scale(axis(k).plottableScale());
+        auto* s = new Scale(axis(k).plottableScale());
         outaxes.emplace_back(s);
     }
     return new Frame(std::move(outaxes));
diff --git a/Base/Axis/FrameUtil.cpp b/Base/Axis/FrameUtil.cpp
index f0551f611012f8e7e3945028b5d1b4c52a74e9ba..ecb35ab6835508fae844946146c542153057e819 100644
--- a/Base/Axis/FrameUtil.cpp
+++ b/Base/Axis/FrameUtil.cpp
@@ -50,7 +50,7 @@ double FrameUtil::coordinateFromBinf(double value, const Scale& axis)
         result = bin.min() + value * bin.binSize();
     } else if (index >= static_cast<int>(axis.size())) {
         Bin1D bin = axis.bin(axis.size() - 1);
-        result = bin.axn() + (value - axis.size()) * bin.binSize();
+        result = bin.max() + (value - axis.size()) * bin.binSize();
     } else {
         Bin1D bin = axis.bin(static_cast<size_t>(index));
         result = bin.min() + (value - static_cast<double>(index)) * bin.binSize();
diff --git a/Base/Axis/Scale.cpp b/Base/Axis/Scale.cpp
index fd248b0dc40c3556d423e553e0c27ec2ebd1b8ec..bf055e547ad5228f6c478997d377f895b3e22f6b 100644
--- a/Base/Axis/Scale.cpp
+++ b/Base/Axis/Scale.cpp
@@ -29,7 +29,7 @@ Scale::Scale(const Coordinate& coord, std::vector<Bin1D> bins)
     if (size() == 0)
         throw std::runtime_error("Scale constructor called with no bins");
     for (size_t i = 0; i < size() - 1; ++i) {
-        if (bin(i).axn() > bin(i + 1).min())
+        if (bin(i).max() > bin(i + 1).min())
             throw std::runtime_error("Scale constructor called with overlapping bins");
         if (bin(i) == bin(i + 1))
             throw std::runtime_error("Scale constructor called with repeating bin(s)");
@@ -46,8 +46,8 @@ Scale::Scale(const Coordinate& coord, std::vector<Bin1D> bins)
 }
 
 Scale::Scale(const Scale& other)
+    : m_bins(other.m_bins)
 {
-    m_bins = other.m_bins;
     ASSERT(other.m_coord);
     m_coord = std::make_unique<Coordinate>(*other.m_coord);
 }
@@ -80,7 +80,7 @@ double Scale::min() const
 
 double Scale::max() const
 {
-    return m_bins.back().axn();
+    return m_bins.back().max();
 }
 
 std::pair<double, double> Scale::bounds() const
@@ -124,7 +124,7 @@ std::vector<double> Scale::binCenters() const
 size_t Scale::closestIndex(double value) const
 {
     for (size_t i = 0; i < size() - 1; ++i)
-        if (value < (bin(i).axn() + bin(i + 1).min()) / 2)
+        if (value < (bin(i).max() + bin(i + 1).min()) / 2)
             return i;
     return size() - 1;
 }
@@ -136,7 +136,7 @@ bool Scale::isEquiDivision() const
         const Bin1D& b = bin(i);
         // exactly replicate the computation of bin bounds in the EquiDivision factory function
         if (b.min() != (N - i) * (min() / N) + i * (max() / N)
-            || b.axn() != (N - i - 1) * (min() / N) + (i + 1) * (max() / N))
+            || b.max() != (N - i - 1) * (min() / N) + (i + 1) * (max() / N))
             return false;
     }
     return true;
@@ -213,7 +213,7 @@ std::ostream& operator<<(std::ostream& ostr, const Scale& ax)
 
     ostr << "GenericScale(\"" << ax.axisLabel() << "\", [";
     for (const Bin1D& b : ax.bins())
-        ostr << b.min() << "," << b.axn() << ",";
+        ostr << b.min() << "," << b.max() << ",";
     ostr << "])";
     return ostr;
 }
@@ -232,7 +232,7 @@ Scale Scale::transformedScale(const std::string& label, const trafo_t& axTrafo)
     std::vector<Bin1D> outvector;
     for (const Bin1D& b : m_bins) {
         double bmi = axTrafo(b.min());
-        double bma = axTrafo(b.axn());
+        double bma = axTrafo(b.max());
         outvector.emplace_back(Bin1D::FromTo(bmi, bma));
     }
     return {label, outvector};
diff --git a/Base/Util/SysUtil.cpp b/Base/Util/SysUtil.cpp
index 9bfc3d361b032a0c1958dfeb4dc4506c2d831d95..6ac6c77c2ef0d8ac7ce82a8e15204b7937ad6c4a 100644
--- a/Base/Util/SysUtil.cpp
+++ b/Base/Util/SysUtil.cpp
@@ -17,7 +17,6 @@
 #include <iomanip>
 #include <iostream>
 #include <sstream>
-#include <stdexcept>
 
 std::string Base::System::getCurrentDateAndTime()
 {
diff --git a/Device/Beam/Beam.cpp b/Device/Beam/Beam.cpp
index 1205747f77cc6f686201e93588d7f228a52cceec..2b9e176c66d4d5dfc1f3c8d6d3d36f8829fdd3d1 100644
--- a/Device/Beam/Beam.cpp
+++ b/Device/Beam/Beam.cpp
@@ -37,7 +37,7 @@ Beam::~Beam() = default;
 
 Beam* Beam::clone() const
 {
-    Beam* result = new Beam(m_intensity, m_wavelength, m_alpha, m_phi);
+    auto* result = new Beam(m_intensity, m_wavelength, m_alpha, m_phi);
     result->m_footprint = m_footprint;
     result->m_polarization = m_polarization;
     return result;
diff --git a/Device/Beam/Beam.h b/Device/Beam/Beam.h
index 9bea431c84a80f48055a7c333c1e159bb57df293..cade97caaf9c43302dee013cf416ca4eb34d0f7c 100644
--- a/Device/Beam/Beam.h
+++ b/Device/Beam/Beam.h
@@ -73,7 +73,7 @@ public:
     }
 
     //! Returns polarization density as Bloch vector
-    R3 polVector() const
+    const R3& polVector() const
     {
         return m_polarization;
     }
diff --git a/Device/Data/DataUtil.cpp b/Device/Data/DataUtil.cpp
index 1cdc7f334702a220de12b6d77000f2e0a56d3345..5279c923321fe1e91eb3b0e6c831d1aa6e68684d 100644
--- a/Device/Data/DataUtil.cpp
+++ b/Device/Data/DataUtil.cpp
@@ -80,12 +80,12 @@ Datafield DataUtil::rotatedDatafield(const Datafield& data, int n)
         for (size_t i = 0; i < N; ++i)
             out[i] = data[N - 1 - i];
         return {{data.axis(0).clone(), data.axis(1).clone()}, out};
-    }
-    if (n == 3) {
+
+    } else if (n == 3) {
         for (size_t iy = 0; iy < ny; ++iy)     // out-y along out-axis 0
             for (size_t ix = 0; ix < nx; ++ix) // out-x along out-axis 1
                 out[iy * nx + (nx - 1 - ix)] = data[ix * ny + iy];
         return {{data.axis(1).clone(), data.axis(0).clone()}, out};
-    } else
-        ASSERT_NEVER;
+    }
+    ASSERT_NEVER;
 }
diff --git a/Device/Data/Datafield.cpp b/Device/Data/Datafield.cpp
index 772a1b562707b0342d94b205fc6c8a4cf5fd4e69..43eb227b0f3f93c903f3fa70df1f50a5bd0fc881 100644
--- a/Device/Data/Datafield.cpp
+++ b/Device/Data/Datafield.cpp
@@ -27,9 +27,6 @@
 
 namespace {
 
-auto const seed = 123;
-auto urbg = std::mt19937(seed);
-
 PyObject* npExport(const Frame& frame, const std::vector<double>& flatData)
 {
     if (flatData.empty())
@@ -131,7 +128,7 @@ Datafield::Datafield(const std::string& xlabel, const std::string& ylabel,
     else
         axes = {newEquiDivision(xlabel, ncols, 0.0, (double)ncols),
                 newEquiDivision(ylabel, nrows, 0.0, (double)nrows)};
-    m_frame.reset(new Frame(std::move(axes)));
+    m_frame = std::make_unique<Frame>(std::move(axes));
 
     setVector2D(vec);
 }
@@ -429,6 +426,9 @@ Datafield Datafield::flat() const
 
 Datafield Datafield::noisy(double prefactor, double minimum) const
 {
+    auto const seed = 123;
+    static auto urbg = std::mt19937(seed);
+
     std::vector<double> outval(size());
     std::vector<double> errval(size());
     for (size_t i = 0; i < size(); ++i) {
diff --git a/Device/Detector/Detector2D.cpp b/Device/Detector/Detector2D.cpp
index 67e70f479edd66607512bf2f09e3a8bb04dc9bc6..2f16dfc4e26f4f4391720824f99747ed4ef56e36 100644
--- a/Device/Detector/Detector2D.cpp
+++ b/Device/Detector/Detector2D.cpp
@@ -35,11 +35,6 @@ Detector2D::Detector2D(size_t n_phi, double phi_min, double phi_max, size_t n_al
     ASSERT(-pi / 2 < alpha_max && alpha_max < +pi / 2);
 }
 
-Detector2D::Detector2D(const Detector2D& other)
-    : IDetector(other)
-{
-}
-
 Detector2D* Detector2D::clone() const
 {
     return new Detector2D(*this);
@@ -51,11 +46,11 @@ Pixel* Detector2D::createPixel(size_t index) const
     const size_t iy = axisBinIndex(index, 1);
 
     const Bin1D& phi_in = axis(0).bin(ix);
-    const Bin1D phi_out = Bin1D::FromTo(atan(phi_in.min()), atan(phi_in.axn()));
+    const Bin1D phi_out = Bin1D::FromTo(atan(phi_in.min()), atan(phi_in.max()));
 
     const double ru = hypot(1., pow(phi_in.center(), 2));
     const Bin1D& alpha_in = axis(1).bin(iy);
-    const Bin1D alpha_out = Bin1D::FromTo(atan(alpha_in.min() / ru), atan(alpha_in.axn() / ru));
+    const Bin1D alpha_out = Bin1D::FromTo(atan(alpha_in.min() / ru), atan(alpha_in.max() / ru));
 
     return new Pixel(phi_out, alpha_out);
 }
diff --git a/Device/Detector/Detector2D.h b/Device/Detector/Detector2D.h
index 20dbe228b1e66e56d6da3b55cad6a3635d97eac7..9c7038025269990d47e901e5dae93e3afa3e17ba 100644
--- a/Device/Detector/Detector2D.h
+++ b/Device/Detector/Detector2D.h
@@ -27,7 +27,6 @@ public:
     Detector2D(size_t n_phi, double phi_min, double phi_max, size_t n_alpha, double alpha_min,
                double alpha_max);
 
-    Detector2D(const Detector2D& other);
     ~Detector2D() override = default;
 
     Detector2D* clone() const override;
diff --git a/Device/Detector/IDetector.cpp b/Device/Detector/IDetector.cpp
index 27db71881a8b401e8ef5aa4c83ef6cf666acf30b..dee16f00e66c4b83f4a20a6edc58633538be72a0 100644
--- a/Device/Detector/IDetector.cpp
+++ b/Device/Detector/IDetector.cpp
@@ -178,7 +178,7 @@ Datafield IDetector::createDetectorMap() const
     ASSERT(m_frame);
     auto* f = new Frame(*m_frame);
     f->setAxes(std::move(axes));
-    return Datafield(f);
+    return {f};
 }
 
 std::pair<double, double> IDetector::regionOfInterestBounds(size_t iAxis) const
diff --git a/Device/Detector/IDetector.h b/Device/Detector/IDetector.h
index 40b354fc6792e358718937d9f76e36becbff0305..22e137ee3b62a4407b4249f67063750229b198f9 100644
--- a/Device/Detector/IDetector.h
+++ b/Device/Detector/IDetector.h
@@ -111,7 +111,7 @@ public:
     virtual size_t indexOfSpecular(const Beam& beam) const = 0;
 
     //! Applies the detector resolution to the given intensity maps
-    void applyDetectorResolution(Datafield* intensity_map) const;
+    void applyDetectorResolution(Datafield* df) const;
 
     //! True if a region of interest is explicitly set.
     bool hasExplicitRegionOfInterest() const;
diff --git a/Device/Detector/OffspecDetector.cpp b/Device/Detector/OffspecDetector.cpp
index af926b55807f91440c9985ae742e3ad556999359..699cd542a335fdbc00632f875647c306b5d3af7e 100644
--- a/Device/Detector/OffspecDetector.cpp
+++ b/Device/Detector/OffspecDetector.cpp
@@ -57,17 +57,14 @@ size_t OffspecDetector::axisBinIndex(size_t i, size_t k_axis) const
 {
     if (k_axis == 0)
         return i % m_axes[0]->size();
-    else
+    else if (k_axis == 1)
         return i / m_axes[0]->size();
+    ASSERT_NEVER;
 }
 
 size_t OffspecDetector::totalSize() const
 {
-    const size_t dim = 2;
-    size_t result = 1;
-    for (size_t i_axis = 0; i_axis < dim; ++i_axis)
-        result *= m_axes[i_axis]->size();
-    return result;
+    return m_axes[0]->size() * m_axes[1]->size();
 }
 
 Pixel* OffspecDetector::createPixel(size_t index) const
diff --git a/Device/Detector/OffspecDetector.h b/Device/Detector/OffspecDetector.h
index 55248d22b4c55cee79d74721b75943277aa19a53..915fb5e660c5091214af30a45a39c4d75c8c9a59 100644
--- a/Device/Detector/OffspecDetector.h
+++ b/Device/Detector/OffspecDetector.h
@@ -51,7 +51,7 @@ public:
     const Scale& axis(size_t index) const;
 
     //! Calculate axis index for given global index
-    size_t axisBinIndex(size_t index, size_t selected_axis) const;
+    size_t axisBinIndex(size_t index, size_t k_axis) const;
 
     //! Returns total number of pixels.
     //! Any region of interest is not taken into account.
diff --git a/Device/IO/ReadReflectometry.cpp b/Device/IO/ReadReflectometry.cpp
index c543d0ff05ef8b91cf91155cfa15d1a7b84a5692..3cf3c22451254ac94f679e2406006fb96e2807c4 100644
--- a/Device/IO/ReadReflectometry.cpp
+++ b/Device/IO/ReadReflectometry.cpp
@@ -84,7 +84,7 @@ Datafield* Util::RW::readReflectometryTable(std::istream& s, const ImportSetting
         if (p.rm_negative && arg < 0)
             continue;
 
-        if (p.rm_duplications && QVec.size())
+        if (p.rm_duplications && !QVec.empty())
             if (Numeric::almostEqual(QVec.back(), arg, 1))
                 continue;
 
diff --git a/Device/IO/ReadWriteTiff.cpp b/Device/IO/ReadWriteTiff.cpp
index f9ae8ae99e9b1a5c9c1d30e0d9f4b0095a746019..e05797ca4951fd479c94e1e4689e312d9c1d759b 100644
--- a/Device/IO/ReadWriteTiff.cpp
+++ b/Device/IO/ReadWriteTiff.cpp
@@ -109,7 +109,7 @@ Datafield* Util::RW::readTiff(std::istream& input_stream)
     if (buf_size != expected_size)
         throw std::runtime_error("Cannot read TIFF file: wrong scanline size" + ref_to_doc);
 
-    tdata_t buf = _TIFFmalloc(buf_size);
+    tdata_t const buf = _TIFFmalloc(buf_size); // tdata_t is void*
     if (!buf)
         throw std::runtime_error("Cannot read TIFF file: failed allocating buffer" + ref_to_doc);
 
@@ -124,7 +124,7 @@ Datafield* Util::RW::readTiff(std::istream& input_stream)
         if (TIFFReadScanline(tiffstream, buf, row) < 0)
             throw std::runtime_error("Cannot read TIFF file: error in scanline." + ref_to_doc);
 
-        memcpy(&line_buf[0], buf, buf_size);
+        memcpy(line_buf.data(), buf, buf_size);
 
         for (unsigned col = 0; col < w; ++col) {
             void* incoming = &line_buf[col * bytesPerSample];
@@ -142,6 +142,8 @@ Datafield* Util::RW::readTiff(std::istream& input_stream)
                 case 32:
                     sample = *reinterpret_cast<uint32_t*>(incoming);
                     break;
+                default:
+                    throw std::runtime_error("Corrupted TIFF file");
                 }
                 break;
             case 2: // signed int
@@ -155,6 +157,8 @@ Datafield* Util::RW::readTiff(std::istream& input_stream)
                 case 32:
                     sample = *reinterpret_cast<int32_t*>(incoming);
                     break;
+                default:
+                    throw std::runtime_error("Corrupted TIFF file");
                 }
                 break;
             case 3: // IEEE float
@@ -217,7 +221,7 @@ void Util::RW::writeTiff(const Datafield& data, std::ostream& output_stream)
     for (unsigned row = 0; row < (uint32_t)m_height; row++) {
         for (unsigned col = 0; col < line_buf.size(); ++col)
             line_buf[col] = static_cast<sample_t>(data[(m_height - 1 - row) * m_width + col]);
-        memcpy(buf, &line_buf[0], buf_size);
+        memcpy(buf, line_buf.data(), buf_size);
 
         if (TIFFWriteScanline(tiffstream, buf, row) < 0)
             throw std::runtime_error("Cannot write TIFF file: error in TIFFWriteScanline");
diff --git a/Device/Mask/Line.cpp b/Device/Mask/Line.cpp
index 5db3da75d7b0fb149fb8bdb8c39fd5059f1d48a6..9d5b8e5c3dab8f122cc2b2a587aa64b6e9ef952e 100644
--- a/Device/Mask/Line.cpp
+++ b/Device/Mask/Line.cpp
@@ -48,9 +48,9 @@ bool Line::contains(const Bin1D& binx, const Bin1D& biny) const
 {
     std::vector<point_t> box_points;
     box_points.emplace_back(binx.min(), biny.min());
-    box_points.emplace_back(binx.min(), biny.axn());
-    box_points.emplace_back(binx.axn(), biny.axn());
-    box_points.emplace_back(binx.axn(), biny.min());
+    box_points.emplace_back(binx.min(), biny.max());
+    box_points.emplace_back(binx.max(), biny.max());
+    box_points.emplace_back(binx.max(), biny.min());
     box_points.emplace_back(binx.min(), biny.min());
 
     std::vector<point_t> line_points;
@@ -77,7 +77,7 @@ bool VerticalLine::contains(double x, double /*y*/) const
 
 bool VerticalLine::contains(const Bin1D& binx, const Bin1D& /*biny*/) const
 {
-    return m_x >= binx.min() && m_x <= binx.axn();
+    return m_x >= binx.min() && m_x <= binx.max();
 }
 
 // ------------------------------------------------------------------------- //
@@ -96,5 +96,5 @@ bool HorizontalLine::contains(double /*x*/, double y) const
 
 bool HorizontalLine::contains(const Bin1D& /*binx*/, const Bin1D& biny) const
 {
-    return m_y >= biny.min() && m_y <= biny.axn();
+    return m_y >= biny.min() && m_y <= biny.max();
 }
diff --git a/Device/Mask/MaskStack.cpp b/Device/Mask/MaskStack.cpp
index 6c8fb06f3e8dce2b504e6c519a647815b8b6845c..01224770abecfca5e9775034380bbb5ae44647e0 100644
--- a/Device/Mask/MaskStack.cpp
+++ b/Device/Mask/MaskStack.cpp
@@ -81,7 +81,7 @@ size_t MaskStack::numberOfMasks() const
     return m_stack.size();
 }
 
-const std::pair<IShape2D*, bool> MaskStack::patternAt(size_t iMask) const
+std::pair<IShape2D*, bool> MaskStack::patternAt(size_t iMask) const
 {
     MaskPattern* pat = m_stack.at(iMask);
     return {pat->shape, pat->doMask};
diff --git a/Device/Mask/MaskStack.h b/Device/Mask/MaskStack.h
index fdf16fd2ae85b4d127928a47cd5c9fe80c76fd87..b67707153854577620a904234437d80082f4b017 100644
--- a/Device/Mask/MaskStack.h
+++ b/Device/Mask/MaskStack.h
@@ -43,7 +43,7 @@ public:
 
     size_t numberOfMasks() const;
 
-    const std::pair<IShape2D*, bool> patternAt(size_t iMask) const;
+    std::pair<IShape2D*, bool> patternAt(size_t iMask) const;
 
 private:
     CloneableVector<MaskPattern> m_stack;
diff --git a/Device/Mask/Rectangle.cpp b/Device/Mask/Rectangle.cpp
index be5856e3aef0281c9f228dbc6348fa9536f52bb6..c0bebd8b004db9607329c8818aff632e27f56aae 100644
--- a/Device/Mask/Rectangle.cpp
+++ b/Device/Mask/Rectangle.cpp
@@ -56,7 +56,7 @@ bool Rectangle::contains(double x, double y) const
 bool Rectangle::contains(const Bin1D& binx, const Bin1D& biny) const
 {
     return m_inverted
-           ^ (binx.axn() > m_xlow && binx.min() < m_xup && biny.axn() > m_ylow
+           ^ (binx.max() > m_xlow && binx.min() < m_xup && biny.max() > m_ylow
               && biny.min() < m_yup);
 }
 
diff --git a/Device/Resolution/ConvolutionDetectorResolution.h b/Device/Resolution/ConvolutionDetectorResolution.h
index 8bb29dd9128351da18b336a0c8cef7a68859b81c..f32e4adad1f7760df9c3db4f3c96d03ee1f4fda5 100644
--- a/Device/Resolution/ConvolutionDetectorResolution.h
+++ b/Device/Resolution/ConvolutionDetectorResolution.h
@@ -41,7 +41,7 @@ public:
     std::string className() const final { return "ConvolutionDetectorResolution"; }
 
     //! Convolve given intensities with the encapsulated resolution.
-    void execDetectorResolution(Datafield* p_intensity_map) const override;
+    void execDetectorResolution(Datafield* df) const override;
 
     const IResolutionFunction2D* getResolutionFunction2D() const;
 
@@ -52,8 +52,8 @@ protected:
 
 private:
     void setResolutionFunction(const IResolutionFunction2D& resFunc);
-    void apply1dConvolution(Datafield* p_intensity_map) const;
-    void apply2dConvolution(Datafield* p_intensity_map) const;
+    void apply1dConvolution(Datafield* df) const;
+    void apply2dConvolution(Datafield* df) const;
     double getIntegratedPDF1d(double x, double step) const;
     double getIntegratedPDF2d(double x, double step_x, double y, double step_y) const;
 
diff --git a/GUI/Model/Axis/PointwiseAxisItem.cpp b/GUI/Model/Axis/PointwiseAxisItem.cpp
index d9a524c11397b013917d38739bfc8c2dfb38eb65..3d06631b4248eaa6a13c1ee1ef6a7a6b15ef9a34 100644
--- a/GUI/Model/Axis/PointwiseAxisItem.cpp
+++ b/GUI/Model/Axis/PointwiseAxisItem.cpp
@@ -63,7 +63,7 @@ QByteArray PointwiseAxisItem::serializeBinaryData() const
 
     std::stringstream ss;
     Util::RW::writeBAInt(axisData, ss);
-    return QByteArray(ss.str().c_str(), static_cast<int>(ss.str().size()));
+    return {ss.str().c_str(), static_cast<int>(ss.str().size())};
 }
 
 void PointwiseAxisItem::deserializeBinaryData(const QByteArray& data)
diff --git a/GUI/Model/Beam/BeamAngleItems.cpp b/GUI/Model/Beam/BeamAngleItems.cpp
index b93b2be0f77f0f4772f7b897f14bd31af20c45eb..64d702f0803c3414a6112f90a6e0e9cfa38c2c69 100644
--- a/GUI/Model/Beam/BeamAngleItems.cpp
+++ b/GUI/Model/Beam/BeamAngleItems.cpp
@@ -32,7 +32,7 @@ void BeamAzimuthalAngleItem::initDistribution(DistributionItem* newDistribution,
                                               const DistributionItem* currentDistribution)
 {
     double meanVal = 0.0;
-    if (auto* cd = dynamic_cast<const SymmetricResolutionItem*>(currentDistribution))
+    if (const auto* cd = dynamic_cast<const SymmetricResolutionItem*>(currentDistribution))
         meanVal = cd->mean();
 
     if (auto* nd = dynamic_cast<SymmetricResolutionItem*>(newDistribution)) {
@@ -81,7 +81,7 @@ void BeamInclinationAngleItem::initDistribution(DistributionItem* newDistributio
                                                 const DistributionItem* currentDistribution)
 {
     double meanVal = 0.2;
-    if (auto* cd = dynamic_cast<const SymmetricResolutionItem*>(currentDistribution))
+    if (const auto* cd = dynamic_cast<const SymmetricResolutionItem*>(currentDistribution))
         meanVal = cd->mean();
 
     if (auto* nd = dynamic_cast<SymmetricResolutionItem*>(newDistribution)) {
diff --git a/GUI/Model/Beam/BeamWavelengthItem.cpp b/GUI/Model/Beam/BeamWavelengthItem.cpp
index d11de02cdd84583d5d0de67633f5494937b3c6d8..5638d0ec7ace6dc4a52db123522d0621885baa29 100644
--- a/GUI/Model/Beam/BeamWavelengthItem.cpp
+++ b/GUI/Model/Beam/BeamWavelengthItem.cpp
@@ -23,7 +23,7 @@ void initDistribution(DistributionItem* newDistribution,
                       const DistributionItem* currentDistribution)
 {
     double meanVal = default_wl;
-    if (auto* cd = dynamic_cast<const SymmetricResolutionItem*>(currentDistribution))
+    if (const auto* cd = dynamic_cast<const SymmetricResolutionItem*>(currentDistribution))
         meanVal = cd->mean();
 
     if (auto* nd = dynamic_cast<SymmetricResolutionItem*>(newDistribution)) {
diff --git a/GUI/Model/Beam/GrazingScanItem.cpp b/GUI/Model/Beam/GrazingScanItem.cpp
index 6e79425b910fe7342fdd50cd43e0bd1fe7926fc4..0c93e0de95d30c7e60821c4afb27a758feeb34e0 100644
--- a/GUI/Model/Beam/GrazingScanItem.cpp
+++ b/GUI/Model/Beam/GrazingScanItem.cpp
@@ -36,18 +36,18 @@ const QString BaseData("BaseData");
 void setAxisPresentationDefaults(BasicAxisItem* axisItem)
 {
     ASSERT(axisItem);
-    if (!dynamic_cast<PointwiseAxisItem*>(axisItem)) {
-        axisItem->setMin(0.0);
-        axisItem->setMax(3.0);
-        axisItem->resize(500);
-    }
+    if (dynamic_cast<PointwiseAxisItem*>(axisItem))
+        return;
+    axisItem->setMin(0.0);
+    axisItem->setMax(3.0);
+    axisItem->resize(500);
 }
 
 void initDistribution(DistributionItem* newDistribution,
                       const DistributionItem* currentDistribution)
 {
     double meanVal = 0.0;
-    if (auto* cd = dynamic_cast<const SymmetricResolutionItem*>(currentDistribution))
+    if (const auto* cd = dynamic_cast<const SymmetricResolutionItem*>(currentDistribution))
         meanVal = cd->mean();
 
     if (auto* nd = dynamic_cast<SymmetricResolutionItem*>(newDistribution)) {
@@ -67,7 +67,7 @@ GrazingScanItem::GrazingScanItem()
     m_distribution.initWithInitializer("Distribution", "",
                                        DistributionItemCatalog::symmetricTypes(), initDistribution);
 
-    m_uniformAlphaAxis.reset(new BasicAxisItem());
+    m_uniformAlphaAxis = std::make_unique<BasicAxisItem>();
     setAxisPresentationDefaults(m_uniformAlphaAxis.get());
     m_currentAxisIsUniformAxis = true;
 }
@@ -155,7 +155,7 @@ BasicAxisItem* GrazingScanItem::alphaAxisItem() const
 
 bool GrazingScanItem::pointwiseAlphaAxisDefined() const
 {
-    return m_pointwiseAlphaAxis.get() != nullptr;
+    return (bool)m_pointwiseAlphaAxis;
 }
 
 bool GrazingScanItem::pointwiseAlphaAxisSelected() const
@@ -187,7 +187,7 @@ void GrazingScanItem::initUniformAxis(const Scale& axis)
 void GrazingScanItem::initListScan(const Scale& axis, QString units, const Frame& frame)
 {
     if (!m_pointwiseAlphaAxis) {
-        m_pointwiseAlphaAxis.reset(new PointwiseAxisItem());
+        m_pointwiseAlphaAxis = std::make_unique<PointwiseAxisItem>();
         setAxisPresentationDefaults(m_pointwiseAlphaAxis.get());
     }
 
diff --git a/GUI/Model/Beam/SourceItems.cpp b/GUI/Model/Beam/SourceItems.cpp
index 4a4ee4458979e0e7a63897552ed1871fd2301cbf..c13c51794a670034f3b5313ddb93e6fe1fde7d09 100644
--- a/GUI/Model/Beam/SourceItems.cpp
+++ b/GUI/Model/Beam/SourceItems.cpp
@@ -53,7 +53,7 @@ SourceItem::SourceItem()
     m_intensity.init("Intensity", "Beam intensity in neutrons/photons per sec.", 1e8, 3,
                      RealLimits::limited(0.0, 1e32), "intensity");
 
-    m_azimuthalAngleItem.reset(new BeamAzimuthalAngleItem());
+    m_azimuthalAngleItem = std::make_unique<BeamAzimuthalAngleItem>();
     m_footprint.init("Type", "Footprint type", FootprintItemCatalog::Type::Gaussian);
 }
 
@@ -202,8 +202,8 @@ void SourceItem::setFootprint(const IFootprint* footprint)
 
 BeamItem::BeamItem()
 {
-    m_wavelengthItem.reset(new BeamWavelengthItem);
-    m_inclinationAngleItem.reset(new BeamInclinationAngleItem);
+    m_wavelengthItem = std::make_unique<BeamWavelengthItem>();
+    m_inclinationAngleItem = std::make_unique<BeamInclinationAngleItem>();
 }
 
 void BeamItem::writeTo(QXmlStreamWriter* w) const
@@ -280,8 +280,8 @@ std::unique_ptr<Beam> BeamItem::createBeam() const
 
 ScanItem::ScanItem()
 {
-    m_grazingScanItem.reset(new GrazingScanItem());
-    m_wavelengthItem.reset(new BeamWavelengthItem(true));
+    m_grazingScanItem = std::make_unique<GrazingScanItem>();
+    m_wavelengthItem = std::make_unique<BeamWavelengthItem>(true);
 }
 
 void ScanItem::setScan(const BeamScan* scan)
@@ -359,7 +359,7 @@ BasicAxisItem* ScanItem::inclinationAxisItem() const
     return grazingScanItem()->alphaAxisItem();
 }
 
-void ScanItem::updateToData(const Scale& axis, QString units, const Frame& frame)
+void ScanItem::updateToData(const Scale& axis, QString units, const Frame& frame) const
 {
     if (units == "bin") {
         grazingScanItem()->initUniformAxis(axis);
diff --git a/GUI/Model/Beam/SourceItems.h b/GUI/Model/Beam/SourceItems.h
index db9e4aa2703ff4ae6cb957a9a705f39bfc3c2d4a..decda74f6a10b06d642bd5c27d5170dec2987fe0 100644
--- a/GUI/Model/Beam/SourceItems.h
+++ b/GUI/Model/Beam/SourceItems.h
@@ -100,7 +100,7 @@ public:
     GrazingScanItem* grazingScanItem() const;
     BasicAxisItem* inclinationAxisItem() const;
 
-    void updateToData(const Scale& axis, QString units, const Frame& frame);
+    void updateToData(const Scale& axis, QString units, const Frame& frame) const;
 
 private:
     std::unique_ptr<GrazingScanItem> m_grazingScanItem;
diff --git a/GUI/Model/Data/Data1DItem.cpp b/GUI/Model/Data/Data1DItem.cpp
index 56af02a01d10c60d1b1b7bca972bf4749abbd4b1..164cc15a8a551d1ec2f76aab13e2da3ab0c4c253 100644
--- a/GUI/Model/Data/Data1DItem.cpp
+++ b/GUI/Model/Data/Data1DItem.cpp
@@ -119,7 +119,7 @@ void Data1DItem::setLineStyle(QCPGraph::LineStyle lineStyle)
     m_lineType = line_map.key(lineStyle);
 }
 
-QColor Data1DItem::color()
+QColor Data1DItem::color() const
 {
     return m_color;
 }
@@ -129,7 +129,7 @@ void Data1DItem::setColor(Qt::GlobalColor color)
     m_color = color;
 }
 
-double Data1DItem::thickness()
+double Data1DItem::thickness() const
 {
     return m_thickness;
 }
@@ -150,7 +150,7 @@ void Data1DItem::setScatter(QCPScatterStyle::ScatterShape scatter)
     m_scatterType = scatter_map.key(scatter);
 }
 
-double Data1DItem::scatterSize()
+double Data1DItem::scatterSize() const
 {
     return m_scatterSize;
 }
@@ -283,7 +283,7 @@ QPair<double, double> Data1DItem::dataRange() const
     const double default_max = 1.0;
     const Datafield* data = c_field();
     if (!data)
-        return QPair<double, double>(default_min, default_max);
+        return {default_min, default_max};
 
     const auto vec = data->flatVector();
     double min(*std::min_element(vec.cbegin(), vec.cend()));
@@ -298,7 +298,7 @@ QPair<double, double> Data1DItem::dataRange() const
     else
         min /= 2.0;
 
-    return QPair<double, double>(min, max);
+    return {min, max};
 }
 
 void Data1DItem::resetView()
diff --git a/GUI/Model/Data/Data1DItem.h b/GUI/Model/Data/Data1DItem.h
index f961bd3c4177a239357f4cc103cff9b1f15e3c80..ba7b438e947a8ea08c1ae2c5d4e1d1508057bb74 100644
--- a/GUI/Model/Data/Data1DItem.h
+++ b/GUI/Model/Data/Data1DItem.h
@@ -51,11 +51,11 @@ public:
     void setLineStyle(QCPGraph::LineStyle lineStyle);
 
     //! Color for plotting
-    QColor color();
+    QColor color() const;
     void setColor(Qt::GlobalColor color);
 
     //! Line thickness for plotting
-    double thickness();
+    double thickness() const;
     void setThickness(double thickness);
 
     //! Scatter shape for plotting
@@ -63,7 +63,7 @@ public:
     void setScatter(QCPScatterStyle::ScatterShape scatter);
 
     //! Scatter size for plotting
-    double scatterSize();
+    double scatterSize() const;
     void setScatterSize(double scatterSize);
 
     void setSimuPlotStyle();
diff --git a/GUI/Model/Data/Data2DItem.cpp b/GUI/Model/Data/Data2DItem.cpp
index c3ee003177ae58c977c80658dee5c0efcf5557c6..a0e7c11558727b303c959b8d35ded2f30f7f2edb 100644
--- a/GUI/Model/Data/Data2DItem.cpp
+++ b/GUI/Model/Data/Data2DItem.cpp
@@ -124,7 +124,7 @@ void Data2DItem::setZrange(double zmin, double zmax)
 
 void Data2DItem::copyZRangeFromItem(DataItem* sourceItem)
 {
-    Data2DItem* source = dynamic_cast<Data2DItem*>(sourceItem);
+    const auto* source = dynamic_cast<Data2DItem*>(sourceItem);
     if (!source || source == this)
         return;
     setZrange(source->lowerZ(), source->upperZ());
@@ -139,8 +139,7 @@ QCPColorGradient Data2DItem::currentGradientQCP() const
 {
     if (gradient_map.contains(currentGradient()))
         return gradient_map.value(currentGradient());
-    else
-        return custom_gradient_map.value(currentGradient());
+    return custom_gradient_map.value(currentGradient());
 }
 
 QString Data2DItem::currentGradient() const
@@ -240,12 +239,11 @@ QPair<double, double> Data2DItem::dataRange() const
     double logRange = pow(10, zAxisItem()->logRangeOrders());
     if (isLog()) {
         min = std::max(min, max / logRange);
-        max = max * 1.1;
-    } else {
-        max = max * 1.1;
-    }
+        max *= 1.1;
+    } else
+        max *= 1.1;
 
-    return QPair<double, double>(min, max);
+    return {min, max};
 }
 
 const AmplitudeAxisItem* Data2DItem::zAxisItem() const
@@ -370,7 +368,7 @@ const MaskContainerItem* Data2DItem::maskContainerItem() const
 MaskContainerModel* Data2DItem::getOrCreateMaskContainerModel()
 {
     if (!m_maskContainerModel)
-        m_maskContainerModel.reset(new MaskContainerModel(new MaskContainerItem));
+        m_maskContainerModel = std::make_unique<MaskContainerModel>(new MaskContainerItem);
 
     return m_maskContainerModel.get();
 }
@@ -388,7 +386,7 @@ const ProjectionContainerItem* Data2DItem::projectionContainerItem() const
 MaskContainerModel* Data2DItem::getOrCreateProjectionContainerModel()
 {
     if (!m_maskContainerModel)
-        m_maskContainerModel.reset(new MaskContainerModel(new ProjectionContainerItem));
+        m_maskContainerModel = std::make_unique<MaskContainerModel>(new ProjectionContainerItem);
 
     return m_maskContainerModel.get();
 }
diff --git a/GUI/Model/Data/DataItem.cpp b/GUI/Model/Data/DataItem.cpp
index ae8ecc4ab67a33dddc5f1ca412e3f191d1493930..665e1e50cbfea1a8c59d5441aab275ac1e14a219 100644
--- a/GUI/Model/Data/DataItem.cpp
+++ b/GUI/Model/Data/DataItem.cpp
@@ -97,7 +97,7 @@ QString DataItem::loadDatafield(MessageService* messageService, const QString& p
         m_last_saved = m_last_modified;
     } catch (const std::exception& ex) {
         messageService->addWarning(this, QString(ex.what()));
-        return QString(ex.what());
+        return ex.what();
     }
     return {};
 }
@@ -166,19 +166,19 @@ void DataItem::setYrange(double lower, double upper)
     emit itemAxesRangeChanged();
 }
 
-void DataItem::checkXranges(DataItem* sourceItem)
+void DataItem::checkXranges(DataItem* sourceItem) const
 {
     if (xSize() != sourceItem->xSize())
         throw std::runtime_error("Data and simulation have different number of x bins");
 }
 
-void DataItem::checkYranges(DataItem* sourceItem)
+void DataItem::checkYranges(DataItem* sourceItem) const
 {
     if (ySize() != sourceItem->ySize())
         throw std::runtime_error("Data and simulation have different number of x bins");
 }
 
-void DataItem::checkXYranges(DataItem* sourceItem)
+void DataItem::checkXYranges(DataItem* sourceItem) const
 {
     checkXranges(sourceItem);
     checkYranges(sourceItem);
diff --git a/GUI/Model/Data/DataItem.h b/GUI/Model/Data/DataItem.h
index aa5a8988938d1978bfd6e0bf49658abb8c18547b..4960a5284c7e9dae207cc4769b3d760205802959 100644
--- a/GUI/Model/Data/DataItem.h
+++ b/GUI/Model/Data/DataItem.h
@@ -84,9 +84,9 @@ public:
     void setYrange(double lower, double upper);
 
     // Adjust zoom range of this item to the other items range
-    void checkXranges(DataItem* sourceItem);
-    void checkYranges(DataItem* sourceItem);
-    void checkXYranges(DataItem* sourceItem);
+    void checkXranges(DataItem* sourceItem) const;
+    void checkYranges(DataItem* sourceItem) const;
+    void checkXYranges(DataItem* sourceItem) const;
 
     const BasicAxisItem* axItemX() const;
     BasicAxisItem* axItemX();
diff --git a/GUI/Model/Descriptor/AxisProperty.cpp b/GUI/Model/Descriptor/AxisProperty.cpp
index 5695c8b1692a29ff133915c41ecc8a4c6acce8e3..ad3328b5e5f5a107b2fb587e6921c872b4e9678b 100644
--- a/GUI/Model/Descriptor/AxisProperty.cpp
+++ b/GUI/Model/Descriptor/AxisProperty.cpp
@@ -27,8 +27,6 @@ const QString ExpandGroupbox("ExpandGroupbox"); // obsolete since v22.0
 } // namespace Tag
 } // namespace
 
-using std::variant;
-
 AxisProperty::AxisProperty() = default;
 
 void AxisProperty::initMin(const QString& label, const QString& tooltip, double value,
diff --git a/GUI/Model/Descriptor/DistributionItems.cpp b/GUI/Model/Descriptor/DistributionItems.cpp
index 583cc18b5a5c1df25cd641be9228734bbba69e0c..54d20b8d733f1af524c4b56598343f1527de1976 100644
--- a/GUI/Model/Descriptor/DistributionItems.cpp
+++ b/GUI/Model/Descriptor/DistributionItems.cpp
@@ -38,8 +38,6 @@ const QString BaseData("BaseData");
 } // namespace Tag
 } // namespace
 
-using std::variant;
-
 DistributionItem::DistributionItem() = default;
 
 void DistributionItem::initRelSamplingWidth()
diff --git a/GUI/Model/Descriptor/DoubleProperty.cpp b/GUI/Model/Descriptor/DoubleProperty.cpp
index 602e9067c95bba83e10d862d19c561d1626e08c8..59d93d13ff7e4b177e48efc899d9fb4dd030982f 100644
--- a/GUI/Model/Descriptor/DoubleProperty.cpp
+++ b/GUI/Model/Descriptor/DoubleProperty.cpp
@@ -16,8 +16,6 @@
 #include "GUI/Support/XML/UtilXML.h"
 #include <QUuid>
 
-using std::variant;
-
 void DoubleProperty::init(const QString& label, const QString& tooltip, double value,
                           const QString& uidPrefix)
 {
diff --git a/GUI/Model/Descriptor/SelectionProperty.h b/GUI/Model/Descriptor/SelectionProperty.h
index 7e3839e6cd6d8d744164628b0ac9b1f59431deea..966855f73d108b696a67c5d8a5d37def1f7dc563 100644
--- a/GUI/Model/Descriptor/SelectionProperty.h
+++ b/GUI/Model/Descriptor/SelectionProperty.h
@@ -131,7 +131,7 @@ public:
     template <typename S, typename... ArgsForConstructor>
     S* setCurrentItem(ArgsForConstructor... argsForConstructor)
     {
-        S* s = new S(argsForConstructor...);
+        auto* s = new S(argsForConstructor...);
         if (s != nullptr && m_initializer)
             m_initializer(s, m_p.get());
         m_p.reset(s);
diff --git a/GUI/Model/Descriptor/VectorProperty.cpp b/GUI/Model/Descriptor/VectorProperty.cpp
index a1c616b6fa682cf947bc4a8e8b8f8bab9993d350..fadc1e541c57e21a6b78e105f875b7e6d4430c97 100644
--- a/GUI/Model/Descriptor/VectorProperty.cpp
+++ b/GUI/Model/Descriptor/VectorProperty.cpp
@@ -26,8 +26,6 @@ const QString Z("Z");
 } // namespace Tag
 } // namespace
 
-using std::variant;
-
 void VectorProperty::init(const QString& label, const QString& tooltip, const QString& uidPrefix)
 {
     init(label, tooltip, R3(), 3, 0.01, RealLimits::limitless(), uidPrefix);
diff --git a/GUI/Model/Detector/DetectorItem.cpp b/GUI/Model/Detector/DetectorItem.cpp
index 219c6716ef4041c94da648554cc0d4865d92c82a..d3f5081451c9bad55c12b264411e6da7e8462654 100644
--- a/GUI/Model/Detector/DetectorItem.cpp
+++ b/GUI/Model/Detector/DetectorItem.cpp
@@ -24,8 +24,6 @@
 #include "GUI/Model/Mask/MaskItems.h"
 #include "GUI/Support/XML/Backup.h"
 
-using Units::deg;
-
 namespace {
 namespace Tag {
 
@@ -90,7 +88,7 @@ std::unique_ptr<IDetector> DetectorItem::createDetector() const
 void DetectorItem::importMasks(const MaskContainerItem* item)
 {
     ASSERT(item);
-    m_maskContainerItem.reset(new MaskContainerItem);
+    m_maskContainerItem = std::make_unique<MaskContainerItem>();
     GUI::Util::copyContents(item, m_maskContainerItem.get());
 }
 
diff --git a/GUI/Model/Job/FitParameterContainerItem.cpp b/GUI/Model/Job/FitParameterContainerItem.cpp
index 1d488715dfe7b44e57acf71f956f8210d3d5fc18..732cdd67fb33b60bc5c9101690be4548cd378014 100644
--- a/GUI/Model/Job/FitParameterContainerItem.cpp
+++ b/GUI/Model/Job/FitParameterContainerItem.cpp
@@ -105,7 +105,7 @@ FitParameterContainerItem::fitParameterItem(const ParameterItem* parameterItem)
 
 QVector<FitParameterItem*> FitParameterContainerItem::fitParameterItems() const
 {
-    return QVector<FitParameterItem*>(m_fitParameterItems.begin(), m_fitParameterItems.end());
+    return {m_fitParameterItems.begin(), m_fitParameterItems.end()};
 }
 
 QStringList FitParameterContainerItem::fitParameterNames() const
@@ -116,7 +116,7 @@ QStringList FitParameterContainerItem::fitParameterNames() const
     return result;
 }
 
-void FitParameterContainerItem::removeLink(const ParameterItem* parameterItem)
+void FitParameterContainerItem::removeLink(const ParameterItem* parameterItem) const
 {
     if (FitParameterItem* fitParItem = fitParameterItem(parameterItem))
         fitParItem->removeLink(parameterItem->link());
@@ -124,13 +124,13 @@ void FitParameterContainerItem::removeLink(const ParameterItem* parameterItem)
 
 FitParameterItem* FitParameterContainerItem::createBareFitParameterItem()
 {
-    FitParameterItem* fitPar = new FitParameterItem(this);
+    auto* fitPar = new FitParameterItem(this);
     m_fitParameterItems.emplace_back(fitPar);
     updateFitParameterNames();
     return fitPar;
 }
 
-bool FitParameterContainerItem::isEmpty()
+bool FitParameterContainerItem::isEmpty() const
 {
     return fitParameterItems().isEmpty();
 }
@@ -138,7 +138,7 @@ bool FitParameterContainerItem::isEmpty()
 //! Propagate values to the corresponding parameter tree items of parameterContainer.
 
 void FitParameterContainerItem::setValuesInParameterContainer(
-    const std::vector<double>& values, ParameterContainerItem* parameterContainer)
+    const std::vector<double>& values, ParameterContainerItem* parameterContainer) const
 {
     ASSERT(parameterContainer);
 
diff --git a/GUI/Model/Job/FitParameterContainerItem.h b/GUI/Model/Job/FitParameterContainerItem.h
index 4cd7fbb1d536529a8997287798814ec8c4828902..feba4747ada1f2f43093b799dc746f270c361954 100644
--- a/GUI/Model/Job/FitParameterContainerItem.h
+++ b/GUI/Model/Job/FitParameterContainerItem.h
@@ -57,13 +57,13 @@ public:
     //! Returns list of fit parameter display names
     QStringList fitParameterNames() const;
 
-    void removeLink(const ParameterItem* parameterItem);
+    void removeLink(const ParameterItem* parameterItem) const;
 
     FitParameterItem* createBareFitParameterItem();
 
-    bool isEmpty();
+    bool isEmpty() const;
     void setValuesInParameterContainer(const std::vector<double>& values,
-                                       class ParameterContainerItem* parameterContainer);
+                                       class ParameterContainerItem* parameterContainer) const;
     void pullValuesFromParameterContainer(class ParameterContainerItem* parameterContainer);
 
     mumufit::Parameters createParameters() const;
diff --git a/GUI/Model/Job/FitParameterItem.cpp b/GUI/Model/Job/FitParameterItem.cpp
index 4b754b7a2128e5573b6d45963e6207ac01882fc0..14537de50f7ef42b2dc844468f74f9d6f9b014d6 100644
--- a/GUI/Model/Job/FitParameterItem.cpp
+++ b/GUI/Model/Job/FitParameterItem.cpp
@@ -313,7 +313,7 @@ QObject* FitParameterItem::maximumItem() const
 
 FitParameterLinkItem* FitParameterItem::addLinkItem(const QString& title, const QString& link)
 {
-    FitParameterLinkItem* newLink = new FitParameterLinkItem(this);
+    auto* newLink = new FitParameterLinkItem(this);
     m_links.emplace_back(newLink);
 
     newLink->setTitle(title);
diff --git a/GUI/Model/Model/DatafilesTree.cpp b/GUI/Model/Model/DatafilesTree.cpp
index 4acb6acd5ed45bfa019cf8610c9ad7dccdfafd57..962e27000d4eb8ff19dfe87f43a96fb0310256a0 100644
--- a/GUI/Model/Model/DatafilesTree.cpp
+++ b/GUI/Model/Model/DatafilesTree.cpp
@@ -92,7 +92,7 @@ QModelIndex DatafilesTree::indexOfHeadline(int rank) const
 QModelIndex DatafilesTree::index(int row, int column, const QModelIndex& parent) const
 {
     if (!hasIndex(row, column, parent))
-        return QModelIndex();
+        return {};
 
     if (!parent.isValid())
         return createIndex(row, column, nullptr);
@@ -101,16 +101,16 @@ QModelIndex DatafilesTree::index(int row, int column, const QModelIndex& parent)
         if (parent == indexOfHeadline(rank))
             return createIndex(row, column, m_items[rank - 1][row]);
 
-    return QModelIndex();
+    return {};
 }
 
 QModelIndex DatafilesTree::parent(const QModelIndex& index) const
 {
     if (!index.isValid())
-        return QModelIndex();
+        return {};
 
     if (index.internalPointer() == nullptr) // index is headline => no parent
-        return QModelIndex();
+        return {};
 
     return indexOfHeadline(itemForIndex(index)->rank());
 }
@@ -167,14 +167,14 @@ QVariant DatafilesTree::data(const QModelIndex& index, int role) const
             return qApp->palette().color(QPalette::Text);
 
         default:
-            return QVariant();
+            return {};
         }
     }
 
     auto* const item = itemForIndex(index);
 
     if (role == Qt::ToolTipRole)
-        return QString();
+        return {};
 
     if (role == Qt::DisplayRole)
         return item->realItemName();
@@ -182,7 +182,7 @@ QVariant DatafilesTree::data(const QModelIndex& index, int role) const
     if (role == Qt::EditRole)
         return item->realItemName();
 
-    return QVariant();
+    return {};
 }
 
 Qt::ItemFlags DatafilesTree::flags(const QModelIndex& index) const
@@ -224,13 +224,13 @@ DatafileItem* DatafilesTree::itemForIndex(const QModelIndex& index) const
 QModelIndex DatafilesTree::indexForItem(DatafileItem* item) const
 {
     if (item == nullptr)
-        return QModelIndex();
+        return {};
 
     const int rank = item->rank();
     if (auto index = m_items[rank - 1].indexOf(item); index >= 0)
         return createIndex(index, 0, item);
 
-    return QModelIndex();
+    return {};
 }
 
 bool DatafilesTree::isHeadline(const QModelIndex& index) const
diff --git a/GUI/Model/Model/FitParameterModel.cpp b/GUI/Model/Model/FitParameterModel.cpp
index 0eba2f26ada4b126efbcff0f142d8eb14020f083..427e7a66bd822e3e6961c479cdb4a1eead94b8c1 100644
--- a/GUI/Model/Model/FitParameterModel.cpp
+++ b/GUI/Model/Model/FitParameterModel.cpp
@@ -76,7 +76,7 @@ QModelIndex FitParameterModel::index(int row, int column, const QModelIndex& par
 {
     if (!m_fitParameterContainer || row < 0 || column < 0 || column >= columnCount(QModelIndex())
         || (parent.isValid() && parent.column() != COL_NAME))
-        return QModelIndex();
+        return {};
 
     QObject* parent_item = itemForIndex(parent);
     ASSERT(parent_item);
@@ -114,16 +114,16 @@ QModelIndex FitParameterModel::index(int row, int column, const QModelIndex& par
             if (FitParameterLinkItem* linkItem = links.at(row))
                 return createIndex(row, column, linkItem->linkItem());
     }
-    return QModelIndex();
+    return {};
 }
 
 QModelIndex FitParameterModel::parent(const QModelIndex& child) const
 {
     if (!m_fitParameterContainer)
-        return QModelIndex();
+        return {};
 
     if (!child.isValid())
-        return QModelIndex();
+        return {};
 
     if (QObject* child_item = itemForIndex(child)) {
         if (QObject* parent_item = child_item->parent()) {
@@ -135,7 +135,7 @@ QModelIndex FitParameterModel::parent(const QModelIndex& child) const
             }
         }
     }
-    return QModelIndex();
+    return {};
 }
 
 int FitParameterModel::rowCount(const QModelIndex& parent) const
@@ -177,10 +177,10 @@ int FitParameterModel::columnCount(const QModelIndex& parent) const
 QVariant FitParameterModel::data(const QModelIndex& index, int role) const
 {
     if (!m_fitParameterContainer)
-        return QVariant();
+        return {};
 
     if (!index.isValid() || index.column() < 0 || index.column() >= NUM_COLUMNS)
-        return QVariant();
+        return {};
 
     if (QObject* item = itemForIndex(index)) {
         if (role == Qt::DisplayRole || role == Qt::EditRole) {
@@ -199,7 +199,7 @@ QVariant FitParameterModel::data(const QModelIndex& index, int role) const
         if (role == Qt::ToolTipRole && dynamic_cast<FitParameterLinkItem*>(item))
             return valueOfItem(item);
     }
-    return QVariant();
+    return {};
 }
 
 bool FitParameterModel::setData(const QModelIndex& index, const QVariant& value, int role)
@@ -300,7 +300,7 @@ QVariant FitParameterModel::headerData(int section, Qt::Orientation orientation,
         return m_columnNames.value(section);
     if (role == Qt::ToolTipRole)
         return m_columnToolTips.value(section);
-    return QVariant();
+    return {};
 }
 
 void FitParameterModel::onFitItemChanged()
@@ -330,7 +330,7 @@ void FitParameterModel::addColumn(FitParameterModel::EColumn id, const QString&
 QModelIndex FitParameterModel::indexOfItem(QObject* item) const
 {
     if (!m_fitParameterContainer)
-        return QModelIndex();
+        return {};
 
     ASSERT(item);
 
@@ -360,7 +360,7 @@ QModelIndex FitParameterModel::indexOfItem(QObject* item) const
             return createIndex(index, 0, item);
         }
     }
-    return QModelIndex();
+    return {};
 }
 
 QObject* FitParameterModel::itemForIndex(const QModelIndex& index) const
@@ -383,7 +383,7 @@ QVariant FitParameterModel::valueOfItem(QObject* item) const
     if (auto* link = dynamic_cast<LinkItem*>(item))
         return link->link();
 
-    return QVariant();
+    return {};
 }
 
 void FitParameterModel::setValueOfItem(QObject* item, const QVariant& value)
diff --git a/GUI/Model/Sample/MaterialModel.cpp b/GUI/Model/Sample/MaterialModel.cpp
index 20b04fb00d9c3aba708b13f8c36842043aa0c433..de973e9ca66fb71a08af7c7c3ff854f63f0c8cf1 100644
--- a/GUI/Model/Sample/MaterialModel.cpp
+++ b/GUI/Model/Sample/MaterialModel.cpp
@@ -30,15 +30,15 @@ const QString Material("Material");
 QColor suggestMaterialColor(const QString& name)
 {
     if (name.contains(materialMap.key(DefaultMaterials::Vacuum)))
-        return QColor(179, 242, 255);
+        return {179, 242, 255};
     if (name.contains(materialMap.key(DefaultMaterials::Substrate)))
-        return QColor(205, 102, 0);
+        return {205, 102, 0};
     if (name.contains(materialMap.key(DefaultMaterials::Default)))
         return QColor(Qt::green);
     if (name.contains(materialMap.key(DefaultMaterials::Core)))
-        return QColor(220, 140, 220);
+        return {220, 140, 220};
     if (name.contains(materialMap.key(DefaultMaterials::Particle)))
-        return QColor(146, 198, 255);
+        return {146, 198, 255};
 
     // return a random color
     static std::random_device r;
diff --git a/GUI/Model/Sample/ParticleItem.h b/GUI/Model/Sample/ParticleItem.h
index 68d6fa76fd29d12a72368e6c91ee5e6c0212107a..bc30ab9c20007a782b514172faac9091b5ddc93f 100644
--- a/GUI/Model/Sample/ParticleItem.h
+++ b/GUI/Model/Sample/ParticleItem.h
@@ -46,7 +46,7 @@ private:
 
 template <typename T> T* ParticleItem::setFormFactorItemType()
 {
-    T* p = new T();
+    auto* p = new T();
     setFormFactor(p);
     return p;
 }
diff --git a/GUI/Support/Style/Style.cpp b/GUI/Support/Style/Style.cpp
index 85fb7e92dd31896262f834c7aa9ac7be64b86082..fc45a89cadfc11354831dcabaab5b9273d56566b 100644
--- a/GUI/Support/Style/Style.cpp
+++ b/GUI/Support/Style/Style.cpp
@@ -27,7 +27,7 @@ QSize FindSizeOfLetterM(const QWidget* widget)
     auto em = fontMetric.horizontalAdvance('M');
     auto fontAscent = fontMetric.ascent();
 
-    return QSize(em, fontAscent);
+    return {em, fontAscent};
 }
 
 QSize DefaultSizeOfLetterM()
diff --git a/GUI/Support/Style/Style.h b/GUI/Support/Style/Style.h
index ba0288ea68d32212dd3b8d3f581a5b7b44a9b676..1d11f8c92a08c6da4b3f6f31592cc1e25bd06949 100644
--- a/GUI/Support/Style/Style.h
+++ b/GUI/Support/Style/Style.h
@@ -15,10 +15,8 @@
 #ifndef BORNAGAIN_GUI_SUPPORT_STYLE_STYLE_H
 #define BORNAGAIN_GUI_SUPPORT_STYLE_STYLE_H
 
+#include <QDialog>
 #include <QFont>
-#include <QLayout>
-#include <QString>
-#include <QTreeView>
 #include <QWidget>
 
 //! Mostly concerned with fonts
diff --git a/GUI/View/Access/DataAccessWidget.cpp b/GUI/View/Access/DataAccessWidget.cpp
index 8afae3f3de4e5d7732200494aec2fc91eb267b6b..4688a96a75133793f616ab7e15425efc00f232fe 100644
--- a/GUI/View/Access/DataAccessWidget.cpp
+++ b/GUI/View/Access/DataAccessWidget.cpp
@@ -137,14 +137,14 @@ QList<Data2DItem*> DataAccessWidget::allData2DItems() const
 
 Data1DItem* DataAccessWidget::currentData1DItem() const
 {
-    if (allData1DItems().size() == 0)
+    if (allData1DItems().empty())
         return nullptr;
     return allData1DItems().first();
 }
 
 Data2DItem* DataAccessWidget::currentData2DItem() const
 {
-    if (allData2DItems().size() == 0)
+    if (allData2DItems().empty())
         return nullptr;
     return allData2DItems().first();
 }
diff --git a/GUI/View/Canvas/SpecularDataCanvas.cpp b/GUI/View/Canvas/SpecularDataCanvas.cpp
index eebd2eacc892269c0104ee9f1559f48a808008bc..944ea4f567d1071964e8b9d17f71b6a3ad48957f 100644
--- a/GUI/View/Canvas/SpecularDataCanvas.cpp
+++ b/GUI/View/Canvas/SpecularDataCanvas.cpp
@@ -27,7 +27,7 @@ SpecularDataCanvas::SpecularDataCanvas(QWidget* parent)
     , m_reset_view_action(nullptr)
     , m_save_plot_action(nullptr)
 {
-    QVBoxLayout* vlayout = new QVBoxLayout(this);
+    auto* vlayout = new QVBoxLayout(this);
     vlayout->setContentsMargins(0, 0, 0, 0);
     vlayout->setSpacing(0);
     vlayout->addWidget(m_plot_canvas);
@@ -62,12 +62,12 @@ void SpecularDataCanvas::setJobOrDatafileItem(QObject* item)
 
 QSize SpecularDataCanvas::sizeHint() const
 {
-    return QSize(500, 400);
+    return {500, 400};
 }
 
 QSize SpecularDataCanvas::minimumSizeHint() const
 {
-    return QSize(128, 128);
+    return {128, 128};
 }
 
 QList<QAction*> SpecularDataCanvas::actionList()
diff --git a/GUI/View/Data/DatafileEditor.h b/GUI/View/Data/DatafileEditor.h
index fc1bb5a722bc57a0c95df769d56cf6bd438780fd..24247aba14214cc856ace9ee0d0a0b2e10025532 100644
--- a/GUI/View/Data/DatafileEditor.h
+++ b/GUI/View/Data/DatafileEditor.h
@@ -32,8 +32,8 @@ class DatafileEditor : public QWidget {
 public:
     DatafileEditor(QWidget* parent, ProjectDocument* document);
 
-    QSize sizeHint() const override { return QSize(64, 135); }
-    QSize minimumSizeHint() const override { return QSize(64, 128); }
+    QSize sizeHint() const override { return {64, 135}; }
+    QSize minimumSizeHint() const override { return {64, 128}; }
 
     //! Set current DatafileItem to display in instrument selector.
     void setDatafileItem(DatafileItem* realItem);
diff --git a/GUI/View/Data/Legacy1dDialog.cpp b/GUI/View/Data/Legacy1dDialog.cpp
index 4dd0e1e63e6d52cc8119c1fe7aab8ac336ffa742..c77d6b8a43e8e4a2e19508cecda46fb53290fb3f 100644
--- a/GUI/View/Data/Legacy1dDialog.cpp
+++ b/GUI/View/Data/Legacy1dDialog.cpp
@@ -36,13 +36,13 @@ Legacy1dDialog::Legacy1dDialog(QWidget* parent, QString fname)
     auto* viewer = new DatafileInspector(this, fname);
     viewer->show();
 
-    auto vbox = new QVBoxLayout;
+    auto* vbox = new QVBoxLayout;
     setLayout(vbox);
 
-    auto gridLayout = new QGridLayout;
+    auto* gridLayout = new QGridLayout;
     vbox->addLayout(gridLayout);
 
-    auto have_sR = new QCheckBox;
+    auto* have_sR = new QCheckBox;
     gridLayout->addWidget(have_sR, 2, 0);
     have_sR->setCheckState(Msettings.col_sR == 0 ? Qt::Unchecked : Qt::Checked);
     // connect statement is below, as it needs access to other widgets
@@ -54,23 +54,23 @@ Legacy1dDialog::Legacy1dDialog(QWidget* parent, QString fname)
     gridLayout->addWidget(new QLabel("from  column"), 0, 2);
     gridLayout->addWidget(new QLabel("from  column"), 1, 2);
 
-    auto from_sR = new QLabel("from  column"); // this one can be made invisible
+    auto* from_sR = new QLabel("from  column"); // this one can be made invisible
     gridLayout->addWidget(from_sR, 2, 2);
     from_sR->setVisible(Msettings.col_sR != 0);
 
-    auto sb_Q = new QSpinBox;
+    auto* sb_Q = new QSpinBox;
     gridLayout->addWidget(sb_Q, 0, 3);
     sb_Q->setMinimum(1);
     sb_Q->setValue(Msettings.col_Q);
     connect(sb_Q, &QSpinBox::valueChanged, [&p = Msettings](int i) { p.col_Q = i; });
 
-    auto sb_R = new QSpinBox;
+    auto* sb_R = new QSpinBox;
     gridLayout->addWidget(sb_R, 1, 3);
     sb_R->setMinimum(1);
     sb_R->setValue(Msettings.col_R);
     connect(sb_R, &QSpinBox::valueChanged, [&p = Msettings](int i) { p.col_R = i; });
 
-    auto sb_sR = new QSpinBox;
+    auto* sb_sR = new QSpinBox;
     gridLayout->addWidget(sb_sR, 2, 3);
     sb_sR->setVisible(Msettings.col_sR != 0);
     sb_sR->setMinimum(1);
@@ -86,13 +86,13 @@ Legacy1dDialog::Legacy1dDialog(QWidget* parent, QString fname)
             sb_sR->setValue(p.col_R + 1);
     });
 
-    auto w21 = new QWidget;
+    auto* w21 = new QWidget;
     vbox->addWidget(w21);
 
-    auto form211 = new QFormLayout;
+    auto* form211 = new QFormLayout;
     w21->setLayout(form211);
 
-    auto linesToSkipEdit = new QLineEdit;
+    auto* linesToSkipEdit = new QLineEdit;
     form211->addRow("Ignore line numbers:", linesToSkipEdit);
     if (Msettings.linesToSkip.empty())
         linesToSkipEdit->setPlaceholderText("Example: 1-5, 12");
@@ -101,7 +101,7 @@ Legacy1dDialog::Legacy1dDialog(QWidget* parent, QString fname)
     connect(linesToSkipEdit, &QLineEdit::textEdited,
             [&p = Msettings](const QString& text) { p.linesToSkip = text.toStdString(); });
 
-    auto headerPrefixEdit = new QLineEdit;
+    auto* headerPrefixEdit = new QLineEdit;
     form211->addRow("Ignore lines starting with:", headerPrefixEdit);
     if (Msettings.headerPrefix.empty())
         headerPrefixEdit->setPlaceholderText("#,//");
@@ -112,7 +112,7 @@ Legacy1dDialog::Legacy1dDialog(QWidget* parent, QString fname)
 
     const std::vector<std::string> qCoords{"q (1/nm)",    "q(1/angstrom)", "alpha (rad)",
                                            "alpha (deg)", "2alpha (rad)",  "2alpha (deg)"};
-    auto qUnitCombo = new QComboBox;
+    auto* qUnitCombo = new QComboBox;
     form211->addRow("Ordinate given as:", qUnitCombo);
     qUnitCombo->addItem("q (1/nm)");
     qUnitCombo->addItem("q (1/Ã…)");
@@ -128,28 +128,28 @@ Legacy1dDialog::Legacy1dDialog(QWidget* parent, QString fname)
     connect(qUnitCombo, &QComboBox::currentIndexChanged,
             [&p = Msettings, qCoords](int i) { p.xCoord = qCoords[i]; });
 
-    auto sortCheckbox = new QCheckBox;
+    auto* sortCheckbox = new QCheckBox;
     sortCheckbox->setChecked(Msettings.sort);
     form211->addRow("Sort by Q", sortCheckbox);
     connect(sortCheckbox, &QCheckBox::toggled,
             [&p = Msettings](bool checked) { p.sort = checked; });
 
-    auto negativeCheckbox = new QCheckBox;
+    auto* negativeCheckbox = new QCheckBox;
     negativeCheckbox->setChecked(Msettings.rm_negative);
     form211->addRow("Discard negative Q", negativeCheckbox);
     connect(negativeCheckbox, &QCheckBox::toggled,
             [&p = Msettings](bool checked) { p.rm_negative = checked; });
 
-    auto duplicateCheckbox = new QCheckBox;
+    auto* duplicateCheckbox = new QCheckBox;
     duplicateCheckbox->setChecked(Msettings.rm_duplications);
     form211->addRow("Discard Q duplications", duplicateCheckbox);
     connect(duplicateCheckbox, &QCheckBox::toggled,
             [&p = Msettings](bool checked) { p.rm_duplications = checked; });
 
-    auto buttonline = new QHBoxLayout;
+    auto* buttonline = new QHBoxLayout;
     vbox->addLayout(buttonline);
 
-    auto okButton = new QPushButton("OK");
+    auto* okButton = new QPushButton("OK");
     buttonline->addWidget(okButton);
     okButton->setDefault(true);
     connect(okButton, &QPushButton::clicked, this, &Legacy1dDialog::accept);
diff --git a/GUI/View/FitControl/MinimizerSettingsWidget.cpp b/GUI/View/FitControl/MinimizerSettingsWidget.cpp
index 7d0679af37355e536afe9a96a46efe03591dd3cf..d4ad6739e1110301e594267e89d2408fa8ea0bcb 100644
--- a/GUI/View/FitControl/MinimizerSettingsWidget.cpp
+++ b/GUI/View/FitControl/MinimizerSettingsWidget.cpp
@@ -83,7 +83,7 @@ void MinimizerSettingsWidget::setMinContainerItem(MinimizerContainerItem* contai
 
 void MinimizerSettingsWidget::createGroupedAlgorithmsCombo()
 {
-    QComboBox* comboBox = new QComboBox;
+    auto* comboBox = new QComboBox;
     QStringList list = m_containerItem->commonAlgorithmCombo().values();
 
     // list with headers and separators
diff --git a/GUI/View/Frame/MaskEditingFrame.cpp b/GUI/View/Frame/MaskEditingFrame.cpp
index 14b0e8548a954ff68aaad8635c7eade2d013723b..98b5fec5bd00a42fc1c8f92ddbaa10d11e8c9f8f 100644
--- a/GUI/View/Frame/MaskEditingFrame.cpp
+++ b/GUI/View/Frame/MaskEditingFrame.cpp
@@ -32,7 +32,7 @@ MaskEditingFrame::MaskEditingFrame(QWidget* parent)
 {
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
 
-    QHBoxLayout* layout = new QHBoxLayout;
+    auto* layout = new QHBoxLayout;
     setLayout(layout);
     layout->setContentsMargins(0, 0, 0, 0);
     layout->setSpacing(0);
diff --git a/GUI/View/Info/CautionSign.cpp b/GUI/View/Info/CautionSign.cpp
index 323e26d6afda4985402040840d088a8679fddcbd..2614063b9b9d6a9185fd4c65733514a966d57851 100644
--- a/GUI/View/Info/CautionSign.cpp
+++ b/GUI/View/Info/CautionSign.cpp
@@ -113,5 +113,5 @@ QPoint CautionSign::positionForCautionSign() const
         }
     }
 
-    return QPoint(x, y);
+    return {x, y};
 }
diff --git a/GUI/View/Instrument/InstrumentLibraryEditor.cpp b/GUI/View/Instrument/InstrumentLibraryEditor.cpp
index 4ab3a1cbeb42e06d70be77f24a6a292cb8fe307f..fa94c2d808474648df9fea1606df0f774729f5c5 100644
--- a/GUI/View/Instrument/InstrumentLibraryEditor.cpp
+++ b/GUI/View/Instrument/InstrumentLibraryEditor.cpp
@@ -222,7 +222,7 @@ void InstrumentLibraryEditor::createWidgetsForCurrentInstrument()
         return;
     }
 
-    QWidget* w = new QWidget(m_scrollArea);
+    auto* w = new QWidget(m_scrollArea);
     auto* layout = new QVBoxLayout(w);
 
     auto title = QString("Summary (%1 instrument)").arg(currentInstrument->instrumentType());
diff --git a/GUI/View/Instrument/InstrumentListing.cpp b/GUI/View/Instrument/InstrumentListing.cpp
index cef624bea4649ea6e45371b2d36778404e2e0e27..7c7dd697a48cf7ab097be5c5c55711ac1d7d3ca1 100644
--- a/GUI/View/Instrument/InstrumentListing.cpp
+++ b/GUI/View/Instrument/InstrumentListing.cpp
@@ -110,12 +110,12 @@ InstrumentListing::~InstrumentListing()
 
 QSize InstrumentListing::sizeHint() const
 {
-    return QSize(170, 400);
+    return {170, 400};
 }
 
 QSize InstrumentListing::minimumSizeHint() const
 {
-    return QSize(96, 200);
+    return {96, 200};
 }
 
 QList<QAction*> InstrumentListing::toolbarActions() const
diff --git a/GUI/View/Instrument/InstrumentView.cpp b/GUI/View/Instrument/InstrumentView.cpp
index 0ce608985cb64474356f2f96cf6f4b7c2bb477f8..c51a70ce534b4da8fce4f944e09253ede30e6ed7 100644
--- a/GUI/View/Instrument/InstrumentView.cpp
+++ b/GUI/View/Instrument/InstrumentView.cpp
@@ -92,7 +92,7 @@ void InstrumentView::createWidgetsForCurrentInstrument()
         return;
     }
 
-    QWidget* w = new QWidget(m_scrollArea);
+    auto* w = new QWidget(m_scrollArea);
     auto* layout = new QVBoxLayout(w);
 
     //... Groupbox with instrument name and description (same layout for all instrument types)
diff --git a/GUI/View/Instrument/InstrumentsTreeModel.cpp b/GUI/View/Instrument/InstrumentsTreeModel.cpp
index d0bb5658b527987f311a658eb08d98748a18c1eb..bb7df5c9a1e3e20b55489232cec41aaad6df4d97 100644
--- a/GUI/View/Instrument/InstrumentsTreeModel.cpp
+++ b/GUI/View/Instrument/InstrumentsTreeModel.cpp
@@ -83,13 +83,13 @@ QModelIndex InstrumentsTreeModel::indexOfHeadline(InstrumentType type) const
         row++;
     }
 
-    return QModelIndex();
+    return {};
 }
 
 QModelIndex InstrumentsTreeModel::index(int row, int column, const QModelIndex& parent) const
 {
     if (!hasIndex(row, column, parent))
-        return QModelIndex();
+        return {};
 
     if (!parent.isValid())
         return createIndex(row, column, nullptr);
@@ -98,23 +98,23 @@ QModelIndex InstrumentsTreeModel::index(int row, int column, const QModelIndex&
         if (parent == indexOfHeadline(type))
             return createIndex(row, column, instrumentItemsOfType(type)[row]);
 
-    return QModelIndex();
+    return {};
 }
 
 QModelIndex InstrumentsTreeModel::parent(const QModelIndex& index) const
 {
     if (!index.isValid())
-        return QModelIndex();
+        return {};
 
     if (index.internalPointer() == nullptr) // index is headline => no parent
-        return QModelIndex();
+        return {};
 
     auto* item = itemForIndex(index);
     for (auto type : ::types)
         if (instrumentItemsOfType(type).contains(item))
             return indexOfHeadline(type);
 
-    return QModelIndex();
+    return {};
 }
 
 int InstrumentsTreeModel::columnCount(const QModelIndex& /*parent*/) const
@@ -257,13 +257,13 @@ InstrumentItem* InstrumentsTreeModel::itemForIndex(const QModelIndex& index) con
 QModelIndex InstrumentsTreeModel::indexForItem(InstrumentItem* item) const
 {
     if (item == nullptr)
-        return QModelIndex();
+        return {};
 
     for (auto type : ::types)
         if (auto row = instrumentItemsOfType(type).indexOf(item); row >= 0)
             return createIndex(row, 0, item);
 
-    return QModelIndex();
+    return {};
 }
 
 void InstrumentsTreeModel::removeItem(InstrumentItem* item)
diff --git a/GUI/View/Instrument/OffspecDetectorEditor.h b/GUI/View/Instrument/OffspecDetectorEditor.h
index dd038116a05d156005810782667355d764216483..91fe371976c0fe863980933ea6ab20c7c808770b 100644
--- a/GUI/View/Instrument/OffspecDetectorEditor.h
+++ b/GUI/View/Instrument/OffspecDetectorEditor.h
@@ -23,7 +23,7 @@ class OffspecInstrumentItem;
 class OffspecDetectorEditor : public CollapsibleGroupBox {
     Q_OBJECT
 public:
-    OffspecDetectorEditor(QWidget* parent, OffspecInstrumentItem* item);
+    OffspecDetectorEditor(QWidget* parent, OffspecInstrumentItem* instrument);
 
 signals:
     void dataChanged();
diff --git a/GUI/View/Instrument/PolarizationAnalysisEditor.h b/GUI/View/Instrument/PolarizationAnalysisEditor.h
index 34496da3345ab6db74f3c294277a604a3aa19fe4..944cf1439919967e8d807b7ed9f0fa1fab4b5d68 100644
--- a/GUI/View/Instrument/PolarizationAnalysisEditor.h
+++ b/GUI/View/Instrument/PolarizationAnalysisEditor.h
@@ -36,7 +36,7 @@ signals:
 
 private:
     DoubleSpinBox* createSpinBox(DoubleProperty& d);
-    void addBlochRow(QFormLayout* parentLayout, VectorProperty& d);
+    void addBlochRow(QFormLayout* parentLayout, VectorProperty& v);
 
     InstrumentItem* m_instrument;
 };
diff --git a/GUI/View/Job/JobProgressAssistant.h b/GUI/View/Job/JobProgressAssistant.h
index 62c8ec67332170bf949c30dfe04d07840f23cad5..2f0d30b7b44b6d638c33f6d279ae256aa01f9362 100644
--- a/GUI/View/Job/JobProgressAssistant.h
+++ b/GUI/View/Job/JobProgressAssistant.h
@@ -26,7 +26,7 @@ class MainWindow;
 class JobProgressAssistant : public QObject {
     Q_OBJECT
 public:
-    JobProgressAssistant(QProgressBar* proressBar, JobModel* jobModel);
+    JobProgressAssistant(QProgressBar* progressBar, JobModel* jobModel);
 
 private slots:
     void onGlobalProgress(int progress);
diff --git a/GUI/View/JobControl/JobPropertiesTableModel.cpp b/GUI/View/JobControl/JobPropertiesTableModel.cpp
index 91fd845f07300781353ff1aeb967b241bf4327c3..1acad4122087fce2e1f403f27ff94d4218e38cf6 100644
--- a/GUI/View/JobControl/JobPropertiesTableModel.cpp
+++ b/GUI/View/JobControl/JobPropertiesTableModel.cpp
@@ -66,7 +66,7 @@ QVariant JobPropertiesTableModel::data(const QModelIndex& index, int role) const
     if ((role != Qt::DisplayRole && role != Qt::EditRole && role != Qt::ToolTipRole)
         || index.column() < 0 || index.column() >= NumColumns || index.row() < 0
         || index.row() >= NumRows || !m_item)
-        return QVariant();
+        return {};
 
     switch (index.column()) {
     case Column::Name:
@@ -93,14 +93,14 @@ QVariant JobPropertiesTableModel::data(const QModelIndex& index, int role) const
             std::optional<size_t> duration = m_item->duration();
             if (duration)
                 return QString("%1 s").arg(duration.value() / 1000., 0, 'f', 3);
-            return QVariant();
+            return {};
         }
         default:
-            return QVariant();
+            return {};
         }
     }
     default:
-        return QVariant();
+        return {};
     }
 }
 
@@ -110,7 +110,7 @@ QVariant JobPropertiesTableModel::headerData(int section, Qt::Orientation orient
     if (role == Qt::DisplayRole && orientation == Qt::Horizontal && section >= 0
         && section < NumColumns)
         return ColumnNames[section];
-    return QVariant();
+    return {};
 }
 
 Qt::ItemFlags JobPropertiesTableModel::flags(const QModelIndex& index) const
diff --git a/GUI/View/JobControl/JobSelector.cpp b/GUI/View/JobControl/JobSelector.cpp
index 0d602d416bdcba6987ccdf3a19615d6e2b9074d1..dc38b0d1595f8aca9cb4c53aac2b851168221d82 100644
--- a/GUI/View/JobControl/JobSelector.cpp
+++ b/GUI/View/JobControl/JobSelector.cpp
@@ -26,7 +26,7 @@ QVariant listToQVariant(const QList<int>& list)
     QList<QVariant> var_list;
     for (int val : list)
         var_list.push_back(QVariant(val));
-    return QVariant(var_list);
+    return {var_list};
 }
 
 QList<int> qVariantToList(const QVariant& var)
diff --git a/GUI/View/MaterialEditor/MaterialEditorDialog.cpp b/GUI/View/MaterialEditor/MaterialEditorDialog.cpp
index 8f683c32ef10bba00c493abf873bb72d9312b967..702429c4ee08cf045cfde869917e2f5203cce72b 100644
--- a/GUI/View/MaterialEditor/MaterialEditorDialog.cpp
+++ b/GUI/View/MaterialEditor/MaterialEditorDialog.cpp
@@ -272,7 +272,7 @@ QString MaterialEditorDialog::chooseMaterial(QWidget* parent, SampleItem* sample
         if (MaterialItem* material = dialog.currentMaterialItem())
             return material->identifier();
 
-    return QString();
+    return {};
 }
 
 void MaterialEditorDialog::addRefractiveMaterial()
diff --git a/GUI/View/MaterialEditor/MaterialEditorModel.cpp b/GUI/View/MaterialEditor/MaterialEditorModel.cpp
index 1c2855b7cbeca93a9f5a02a66a77316b2d1ff80d..dfdecc1feb8bd89ca53b6a4ed5810721876f807d 100644
--- a/GUI/View/MaterialEditor/MaterialEditorModel.cpp
+++ b/GUI/View/MaterialEditor/MaterialEditorModel.cpp
@@ -180,7 +180,7 @@ QModelIndex MaterialEditorModel::indexFromMaterial(const QString& identifier) co
     for (int row = 0; row < materials.size(); row++)
         if (materials[row]->identifier() == identifier)
             return index(row, 0);
-    return QModelIndex();
+    return {};
 }
 
 QModelIndex MaterialEditorModel::indexFromMaterial(const MaterialItem* m) const
@@ -189,7 +189,7 @@ QModelIndex MaterialEditorModel::indexFromMaterial(const MaterialItem* m) const
     for (int row = 0; row < materials.size(); row++)
         if (materials[row] == m)
             return index(row, 0);
-    return QModelIndex();
+    return {};
 }
 
 QModelIndex MaterialEditorModel::first() const
diff --git a/GUI/View/Numeric/ComboUtil.cpp b/GUI/View/Numeric/ComboUtil.cpp
index 4898a34781e7fa5c983df64b2dd9e6e0d0ddebe2..4e36f8b324d97558eb0d0528593e4436da13a1d3 100644
--- a/GUI/View/Numeric/ComboUtil.cpp
+++ b/GUI/View/Numeric/ComboUtil.cpp
@@ -24,7 +24,7 @@ QComboBox* GUI::Util::createComboBox(function<ComboProperty()> comboFunction,
                                      function<void(const QString&)> slot, bool inScrollArea,
                                      QList<function<void()>>* updaters, QString tooltip)
 {
-    QComboBox* combo = new QComboBox;
+    auto* combo = new QComboBox;
     combo->addItems(comboFunction().values());
     combo->setMaxCount(comboFunction().values().size());
     combo->setToolTip(tooltip);
diff --git a/GUI/View/Numeric/ComboUtil.h b/GUI/View/Numeric/ComboUtil.h
index b7bbe81f14cd02a6de1e6203491725f17b3806dd..d737bb2bb1527041a57a7c5197bac2a8b9356d69 100644
--- a/GUI/View/Numeric/ComboUtil.h
+++ b/GUI/View/Numeric/ComboUtil.h
@@ -50,7 +50,7 @@ template <typename T> QComboBox* createComboBoxFromProperty(SelectionProperty<T>
                                                             std::function<void(int)> slot,
                                                             bool inScrollArea)
 {
-    QComboBox* combo = new QComboBox;
+    auto* combo = new QComboBox;
     combo->addItems(d.options());
     combo->setMaxCount(d.options().size());
     combo->setToolTip(d.tooltip());
diff --git a/GUI/View/Numeric/NumWidgetUtil.cpp b/GUI/View/Numeric/NumWidgetUtil.cpp
index 1e75ab49d7740bc2910891744a28092b05010f20..f69ab4abcfc6d87bd47097630ac89b0c49778dbc 100644
--- a/GUI/View/Numeric/NumWidgetUtil.cpp
+++ b/GUI/View/Numeric/NumWidgetUtil.cpp
@@ -47,7 +47,7 @@ ScientificSpinBox* GUI::Util::createScientificSpinBox(QFormLayout* parentLayout,
 QCheckBox* GUI::Util::createCheckBox(const QString& title, function<bool()> getter,
                                      function<void(bool)> setter, QList<function<void()>>* updaters)
 {
-    QCheckBox* checkBox = new QCheckBox(title);
+    auto* checkBox = new QCheckBox(title);
     checkBox->setChecked(getter());
 
     QObject::connect(checkBox, &QCheckBox::stateChanged, [=]() { setter(checkBox->isChecked()); });
@@ -65,7 +65,7 @@ QSpinBox* GUI::Util::createIntSpinbox(function<int()> getter, function<void(int)
                                       const RealLimits& limits, QString tooltip,
                                       QList<function<void()>>* updaters, bool easyScrollable)
 {
-    QSpinBox* spin = new QSpinBox;
+    auto* spin = new QSpinBox;
     spin->setFocusPolicy(Qt::StrongFocus);
 
     spin->setMinimum(limits.hasLowerLimit() ? limits.lowerLimit()
@@ -94,7 +94,7 @@ QDoubleSpinBox* GUI::Util::createDoubleSpinbox(function<double()> getter,
                                                QList<function<void()>>* updaters, QString tooltip,
                                                const RealLimits& limits, bool easyScrollable)
 {
-    QDoubleSpinBox* spin = new QDoubleSpinBox;
+    auto* spin = new QDoubleSpinBox;
     spin->setFocusPolicy(Qt::StrongFocus);
     spin->setMinimum(limits.hasLowerLimit() ? limits.lowerLimit()
                                             : -std::numeric_limits<int>::max());
diff --git a/GUI/View/ParEdit/FitParameterDelegate.cpp b/GUI/View/ParEdit/FitParameterDelegate.cpp
index dcb95f50cd4daccf0a1be0b8382255e782c35713..ce6a467e96afa634c8751b51420564aa725db9a6 100644
--- a/GUI/View/ParEdit/FitParameterDelegate.cpp
+++ b/GUI/View/ParEdit/FitParameterDelegate.cpp
@@ -60,7 +60,7 @@ QString toString(const QModelIndex& index)
 
     if (isDoubleProperty(variant) && index.internalPointer()) {
         auto* item = static_cast<QObject*>(index.internalPointer());
-        FitDoubleItem* doubleItem = dynamic_cast<FitDoubleItem*>(item);
+        auto* doubleItem = dynamic_cast<FitDoubleItem*>(item);
         // only "Scientific SpinBoxes" in Fit-Window
         return ScientificSpinBox::toString(doubleItem->value(), doubleItem->decimals());
     }
@@ -71,7 +71,7 @@ QWidget* createEditor(QObject* item, QWidget* parent)
 {
     CustomEditor* result(nullptr);
 
-    if (FitDoubleItem* doubleItem = dynamic_cast<FitDoubleItem*>(item)) {
+    if (auto* doubleItem = dynamic_cast<FitDoubleItem*>(item)) {
         // only Scientific SpinBoxes in Fit-Window
         auto* editor = new ScientificSpinBoxEditor;
         editor->setLimits(doubleItem->limits());
diff --git a/GUI/View/Plotter/ColorMap.cpp b/GUI/View/Plotter/ColorMap.cpp
index 63dbc0cad1dc8ac6a0bfcb82a6674fa38ab24028..67ad99c1f3f02259af75a5dd58834708b32d5d17 100644
--- a/GUI/View/Plotter/ColorMap.cpp
+++ b/GUI/View/Plotter/ColorMap.cpp
@@ -35,7 +35,7 @@ const int colorbar_width = 80;
 QCPRange qcpRange(double xmin, double xmax, int nbins)
 {
     double dx = (xmax - xmin) / nbins;
-    return QCPRange(xmin + dx / 2., xmax - dx / 2.);
+    return {xmin + dx / 2., xmax - dx / 2.};
 }
 
 } // namespace
diff --git a/GUI/View/Plotter/ColorMap.h b/GUI/View/Plotter/ColorMap.h
index 740f4e2a2b9ade75377e504510f0b6e96e29b80e..68a5d5a7111d447c418f9a93036cd2e30ac095d7 100644
--- a/GUI/View/Plotter/ColorMap.h
+++ b/GUI/View/Plotter/ColorMap.h
@@ -36,8 +36,8 @@ public:
 
     void itemToMap(Data2DItem* item);
 
-    QSize sizeHint() const override { return QSize(500, 400); }
-    QSize minimumSizeHint() const override { return QSize(128, 128); }
+    QSize sizeHint() const override { return {500, 400}; }
+    QSize minimumSizeHint() const override { return {128, 128}; }
 
     QCPColorScale* colorScale() { return m_colorScale; }
 
diff --git a/GUI/View/Plotter/ProjectionsPlot.cpp b/GUI/View/Plotter/ProjectionsPlot.cpp
index 221508c6a5d8ca9ae4c01d9508bafdeff3e97bf5..869a4a40791c49a67a3337804034b780bdedbf34 100644
--- a/GUI/View/Plotter/ProjectionsPlot.cpp
+++ b/GUI/View/Plotter/ProjectionsPlot.cpp
@@ -176,7 +176,7 @@ void ProjectionsPlot::updateProjectionsData()
 void ProjectionsPlot::updateProjections()
 {
     ASSERT(m_data2DItem);
-    auto container_item = m_data2DItem->projectionContainerItem();
+    auto* container_item = m_data2DItem->projectionContainerItem();
     if (!container_item)
         return;
     auto projn_items = container_item->projectionsOfType(m_orientation);
diff --git a/GUI/View/Plotter/RangeUtil.cpp b/GUI/View/Plotter/RangeUtil.cpp
index cac9c4e5bb86efb68b062060c69f099c1aa9f74f..fe65fed449d9fd4a0e0d101a72a94f06892fcac5 100644
--- a/GUI/View/Plotter/RangeUtil.cpp
+++ b/GUI/View/Plotter/RangeUtil.cpp
@@ -23,7 +23,7 @@ namespace {
 double commonMin(const QList<AmplitudeAxisItem*>& axes)
 {
     double min = +std::numeric_limits<double>::max();
-    for (auto axis : axes)
+    for (auto* axis : axes)
         if (min > axis->min())
             min = axis->min();
     return min;
@@ -32,7 +32,7 @@ double commonMin(const QList<AmplitudeAxisItem*>& axes)
 double commonMax(const QList<AmplitudeAxisItem*>& axes)
 {
     double max = -std::numeric_limits<double>::max();
-    for (auto axis : axes)
+    for (auto* axis : axes)
         if (max < axis->max())
             max = axis->max();
     return max;
@@ -40,13 +40,13 @@ double commonMax(const QList<AmplitudeAxisItem*>& axes)
 
 QCPRange commonRange(const QList<AmplitudeAxisItem*>& axes)
 {
-    return QCPRange(commonMin(axes), commonMax(axes));
+    return {commonMin(axes), commonMax(axes)};
 }
 
 QList<AmplitudeAxisItem*> valueAxesFromData1DItems(const QList<Data1DItem*>& items)
 {
     QList<AmplitudeAxisItem*> axes;
-    for (auto item : items)
+    for (auto* item : items)
         axes.append(item->axItemY());
     return axes;
 }
@@ -54,7 +54,7 @@ QList<AmplitudeAxisItem*> valueAxesFromData1DItems(const QList<Data1DItem*>& ite
 QList<AmplitudeAxisItem*> valueAxesFromData2DItems(const QList<Data2DItem*>& items)
 {
     QList<AmplitudeAxisItem*> axes;
-    for (auto item : items)
+    for (auto* item : items)
         axes.append(item->zAxisItem());
     return axes;
 }
@@ -64,13 +64,13 @@ QList<AmplitudeAxisItem*> valueAxesFromData2DItems(const QList<Data2DItem*>& ite
 void GUI::View::RangeUtil::setCommonRangeY(QList<Data1DItem*> items)
 {
     QCPRange range = commonRange(valueAxesFromData1DItems(items));
-    for (auto item : items)
+    for (auto* item : items)
         item->setYrange(range.lower, range.upper);
 }
 
 void GUI::View::RangeUtil::setCommonRangeZ(QList<Data2DItem*> items)
 {
     QCPRange range = commonRange(valueAxesFromData2DItems(items));
-    for (auto item : items)
+    for (auto* item : items)
         item->setZrange(range.lower, range.upper);
 }
diff --git a/GUI/View/Plotter/SpecularPlot.cpp b/GUI/View/Plotter/SpecularPlot.cpp
index 0826b967ebfb09eee7e050b19f59f48d8face126..76f9dd60c74d3a6f6fadbd0f6e56770677f1806a 100644
--- a/GUI/View/Plotter/SpecularPlot.cpp
+++ b/GUI/View/Plotter/SpecularPlot.cpp
@@ -74,7 +74,7 @@ QList<Data1DItem*> SpecularPlot::data1DItems() const
 
 Data1DItem* SpecularPlot::currentData1DItem() const
 {
-    if (data1DItems().size() == 0)
+    if (data1DItems().empty())
         return nullptr;
 
     return data1DItems().first();
@@ -104,18 +104,18 @@ void SpecularPlot::setLog()
     replot();
 }
 
-void SpecularPlot::onXaxisRangeChanged(QCPRange range)
+void SpecularPlot::onXaxisRangeChanged(QCPRange range) const
 {
-    for (auto item : data1DItems())
+    for (auto* item : data1DItems())
         item->setXrange(range.lower, range.upper);
     gProjectDocument.value()->setModified();
     if (currentData1DItem())
         emit currentData1DItem()->updateOtherPlots(currentData1DItem());
 }
 
-void SpecularPlot::onYaxisRangeChanged(QCPRange range)
+void SpecularPlot::onYaxisRangeChanged(QCPRange range) const
 {
-    for (auto item : data1DItems())
+    for (auto* item : data1DItems())
         item->setYrange(range.lower, range.upper);
     gProjectDocument.value()->setModified();
     if (currentData1DItem())
@@ -130,12 +130,12 @@ void SpecularPlot::onTimeToReplot()
 void SpecularPlot::connectItems()
 {
     // data
-    for (auto item : data1DItems())
+    for (auto* item : data1DItems())
         connect(item, &DataItem::datafieldChanged, this, &SpecularPlot::initPlot,
                 Qt::UniqueConnection);
 
     // units
-    for (auto item : data1DItems())
+    for (auto* item : data1DItems())
         connect(item, &DataItem::axesUnitsReplotRequested, this, &SpecularPlot::setPlot,
                 Qt::UniqueConnection);
 
@@ -161,7 +161,7 @@ void SpecularPlot::initPlot()
     m_qcp->clearPlottables(); // clear graphs and error bars
     m_graph_map.clear();
     m_errorbar_map.clear();
-    for (auto item : data1DItems()) {
+    for (auto* item : data1DItems()) {
         m_qcp->addGraph();
         m_graph_map.insert(item, m_qcp->graph());
         m_qcp->graph()->setLineStyle(item->lineStyle());
@@ -171,7 +171,7 @@ void SpecularPlot::initPlot()
         // create error bars
         const Datafield* data = item->c_field();
         if (data && data->hasErrorSigmas()) {
-            QCPErrorBars* errorBars = new QCPErrorBars(m_qcp->xAxis, m_qcp->yAxis);
+            auto* errorBars = new QCPErrorBars(m_qcp->xAxis, m_qcp->yAxis);
             m_errorbar_map.insert(item, errorBars);
             errorBars->removeFromLegend();
             errorBars->setAntialiased(false);
@@ -222,7 +222,7 @@ void SpecularPlot::setUpdateTimerConnected(bool isConnected)
 
 void SpecularPlot::setPlot()
 {
-    for (auto item : data1DItems())
+    for (auto* item : data1DItems())
         setDataFromItem(item);
     setAxes();
     setAxesLabels();
diff --git a/GUI/View/Plotter/SpecularPlot.h b/GUI/View/Plotter/SpecularPlot.h
index e42af315ec168de17ebeb1371b092fd0e3a8194d..2899850f855f0d8860844310ac0589d72461ab4d 100644
--- a/GUI/View/Plotter/SpecularPlot.h
+++ b/GUI/View/Plotter/SpecularPlot.h
@@ -41,8 +41,8 @@ public:
     QList<Data1DItem*> data1DItems() const;
     Data1DItem* currentData1DItem() const;
 
-    QSize sizeHint() const override { return QSize(500, 400); }
-    QSize minimumSizeHint() const override { return QSize(128, 128); }
+    QSize sizeHint() const override { return {500, 400}; }
+    QSize minimumSizeHint() const override { return {128, 128}; }
 
     //! sets logarithmic scale
     void setLog();
@@ -51,10 +51,10 @@ public:
 
 private:
     //! Propagate xmin, xmax back to Data2DItem
-    void onXaxisRangeChanged(QCPRange range);
+    void onXaxisRangeChanged(QCPRange range) const;
 
     //! Propagate ymin, ymax back to Data2DItem
-    void onYaxisRangeChanged(QCPRange range);
+    void onYaxisRangeChanged(QCPRange range) const;
 
     //! Replots SpecularPlot.
     void onTimeToReplot();
diff --git a/GUI/View/ProShape/MaskUtil.cpp b/GUI/View/ProShape/MaskUtil.cpp
index 63a1a0dad1ec84e4cad61c54e27f76461bec41a7..3b0df4040d2d2c249f3fa7304928765b8b05a619 100644
--- a/GUI/View/ProShape/MaskUtil.cpp
+++ b/GUI/View/ProShape/MaskUtil.cpp
@@ -25,21 +25,21 @@ QBrush MaskUtil::getSelectionMarkerBrush()
 
 QPen MaskUtil::getSelectionMarkerPen()
 {
-    return QPen(QColor(99, 162, 217));
+    return {QColor(99, 162, 217)};
 }
 
 QBrush MaskUtil::getMaskBrush(bool mask_value)
 {
     if (!mask_value)
         return Qt::NoBrush;
-    return QBrush(QColor(0, 0, 80)); // deep blue
+    return {QColor(0, 0, 80)}; // deep blue
 }
 
 QPen MaskUtil::getMaskPen(bool mask_value)
 {
     if (mask_value)
-        return QPen(QColor(165, 80, 76)); // dark red
-    return QPen(QColor(0, 140, 70));      // dark green
+        return {QColor(165, 80, 76)}; // dark red
+    return {QColor(0, 140, 70)};      // dark green
 }
 
 QRectF MaskUtil::getMarkerRectangle(const QPointF& pos)
diff --git a/GUI/View/Realspace/RealspacePanel.cpp b/GUI/View/Realspace/RealspacePanel.cpp
index 245e7dc6bc3f3c76ae3aab2cdc584666f26c1e42..7b9eee9081eef4edb0e0f167fe7e074c20684556 100644
--- a/GUI/View/Realspace/RealspacePanel.cpp
+++ b/GUI/View/Realspace/RealspacePanel.cpp
@@ -61,7 +61,7 @@ RealspacePanel::RealspacePanel(QWidget* parent)
 
 QSize RealspacePanel::sizeHint() const
 {
-    return QSize(300, 300);
+    return {300, 300};
 }
 
 RealspaceWidget* RealspacePanel::widget()
diff --git a/GUI/View/Sample/LayerEditorUtil.cpp b/GUI/View/Sample/LayerEditorUtil.cpp
index dd74a9b9b2d20e98141b7e11c5177dea86616f22..8af34f21e4eb6095c941efd2a384cb4a408c07f0 100644
--- a/GUI/View/Sample/LayerEditorUtil.cpp
+++ b/GUI/View/Sample/LayerEditorUtil.cpp
@@ -66,7 +66,7 @@ void LayerEditorUtil::addMultiPropertyToGrid(QGridLayout* m_gridLayout, int firs
 {
     int col = firstCol;
     for (auto* d : valueProperties) {
-        DoubleSpinBox* editor = new DoubleSpinBox(*d);
+        auto* editor = new DoubleSpinBox(*d);
         QObject::connect(editor, &DoubleSpinBox::baseValueChanged,
                          [setNewValue, d](double newValue) { setNewValue(newValue, *d); });
 
diff --git a/GUI/View/Sample/SampleListModel.cpp b/GUI/View/Sample/SampleListModel.cpp
index 8f3f3356e8626fe40552cee27e62a97cdc0a8383..7918aec2b4213662ac3499c951c6a36acdadcfa2 100644
--- a/GUI/View/Sample/SampleListModel.cpp
+++ b/GUI/View/Sample/SampleListModel.cpp
@@ -61,7 +61,7 @@ QVariant SampleListModel::data(const QModelIndex& index, int role) const
     if (role == Qt::EditRole)
         return item->sampleName();
 
-    return QVariant();
+    return {};
 }
 
 Qt::ItemFlags SampleListModel::flags(const QModelIndex& index) const
@@ -105,7 +105,7 @@ QModelIndex SampleListModel::indexForItem(SampleItem* item) const
     if (auto row = m_sampleItems->sampleItems().indexOf(item); row >= 0)
         return index(row, 0);
 
-    return QModelIndex();
+    return {};
 }
 
 void SampleListModel::removeSample(SampleItem* item)
diff --git a/GUI/View/Sample/SampleView.cpp b/GUI/View/Sample/SampleView.cpp
index 3d0c356da28c1b1b91e57ea29d82bfa983d629ec..cf0103a6dbce7e1680493cec14295f87b55984e3 100644
--- a/GUI/View/Sample/SampleView.cpp
+++ b/GUI/View/Sample/SampleView.cpp
@@ -59,7 +59,7 @@ SampleView::SampleView(QWidget* parent, ProjectDocument* document)
 
     //... Right block: sample editor and bottom panels
 
-    QSplitter* vSplitter = new QSplitter;
+    auto* vSplitter = new QSplitter;
     vSplitter->setOrientation(Qt::Vertical);
     hLayout->addWidget(vSplitter);
 
@@ -68,7 +68,7 @@ SampleView::SampleView(QWidget* parent, ProjectDocument* document)
 
     //... Below central widget: realspace and script panels
 
-    QSplitter* hSplitter = new QSplitter;
+    auto* hSplitter = new QSplitter;
     hSplitter->setOrientation(Qt::Horizontal);
     vSplitter->addWidget(hSplitter);
 
diff --git a/GUI/View/Scene/MaskGraphicsScene.cpp b/GUI/View/Scene/MaskGraphicsScene.cpp
index ca48591584d3ff07176229aa58e0a4485e536e25..b9401775480772d35ea3c8eb0dced09c36b4a7cf 100644
--- a/GUI/View/Scene/MaskGraphicsScene.cpp
+++ b/GUI/View/Scene/MaskGraphicsScene.cpp
@@ -663,7 +663,7 @@ void MaskGraphicsScene::processPolygonItem(QGraphicsSceneMouseEvent* event)
 
     if (!m_currentItem) {
         setDrawingInProgress(true);
-        PolygonItem* new_poly = new PolygonItem;
+        auto* new_poly = new PolygonItem;
         m_maskContainerModel->insertMask(0, new_poly);
         new_poly->setMaskValue(m_mask_value);
         m_currentItem.reset(new_poly);
@@ -713,7 +713,7 @@ void MaskGraphicsScene::processLineItem(QGraphicsSceneMouseEvent* event)
 
 void MaskGraphicsScene::processVerticalLineItem(const QPointF& pos)
 {
-    VerticalLineItem* item = new VerticalLineItem;
+    auto* item = new VerticalLineItem;
     m_maskContainerModel->insertMask(0, item);
     m_currentItem.reset(item);
     item->setPosX(m_adaptor->fromSceneX(pos.x()));
@@ -721,7 +721,7 @@ void MaskGraphicsScene::processVerticalLineItem(const QPointF& pos)
 
 void MaskGraphicsScene::processHorizontalLineItem(const QPointF& pos)
 {
-    HorizontalLineItem* item = new HorizontalLineItem;
+    auto* item = new HorizontalLineItem;
     m_maskContainerModel->insertMask(0, item);
     m_currentItem.reset(item);
     item->setPosY(m_adaptor->fromSceneY(pos.y()));
@@ -732,7 +732,7 @@ void MaskGraphicsScene::processMaskAllItem(QGraphicsSceneMouseEvent* event)
 {
     Q_UNUSED(event);
     setDrawingInProgress(true);
-    MaskAllItem* item = new MaskAllItem;
+    auto* item = new MaskAllItem;
     m_maskContainerModel->insertMask(0, item);
     m_currentItem.reset(item);
     m_selectionModel->clearSelection();
diff --git a/GUI/View/Scene/MaskGraphicsView.h b/GUI/View/Scene/MaskGraphicsView.h
index 18f546f90f0ad6f1494cf95e86715cd3210871b0..a56a19e26b27a87cd2776a7fada0af143b97f4ff 100644
--- a/GUI/View/Scene/MaskGraphicsView.h
+++ b/GUI/View/Scene/MaskGraphicsView.h
@@ -27,8 +27,8 @@ class MaskGraphicsView : public QGraphicsView {
     Q_OBJECT
 public:
     MaskGraphicsView(MaskGraphicsScene* scene, QWidget* parent = nullptr);
-    QSize sizeHint() const override { return QSize(512, 512); }
-    QSize minimumSizeHint() const override { return QSize(128, 128); }
+    QSize sizeHint() const override { return {512, 512}; }
+    QSize minimumSizeHint() const override { return {128, 128}; }
 
 public slots:
     void onResetViewRequest();
diff --git a/GUI/View/Setup/MaskEditorToolpanel.cpp b/GUI/View/Setup/MaskEditorToolpanel.cpp
index 40366820baa8e663ed9058078b7f38bbe271dce2..be9d8bb0666da0785609a5cb2d1cfb75ff4633fc 100644
--- a/GUI/View/Setup/MaskEditorToolpanel.cpp
+++ b/GUI/View/Setup/MaskEditorToolpanel.cpp
@@ -209,7 +209,7 @@ void MaskEditorToolpanel::createMaskEditorUI()
 void MaskEditorToolpanel::addMaskSpinBox(const QString& label, function<double()> getter,
                                          function<void(double)> setter, const RealLimits& limits)
 {
-    QDoubleSpinBox* spinBox = new QDoubleSpinBox;
+    auto* spinBox = new QDoubleSpinBox;
     GUI::View::NumberUtil::configSpinbox(spinBox, 3, limits);
     spinBox->setValue(getter());
 
diff --git a/Img3D/Build/BuilderUtil.cpp b/Img3D/Build/BuilderUtil.cpp
index 1f044e9db3120bf7279bcae9bf8bfdea342ed9a6..648210d0882ac0b370fb5c00856e162b9f9d591e 100644
--- a/Img3D/Build/BuilderUtil.cpp
+++ b/Img3D/Build/BuilderUtil.cpp
@@ -34,8 +34,8 @@ namespace {
 
 R3 to_kvector(const F3& origin)
 {
-    return R3(static_cast<double>(origin.x()), static_cast<double>(origin.y()),
-              static_cast<double>(origin.z()));
+    return {static_cast<double>(origin.x()), static_cast<double>(origin.y()),
+            static_cast<double>(origin.z())};
 }
 
 //! Returns the Euler angles from an IRotation object.
@@ -231,8 +231,8 @@ Particle3DContainer Img3D::BuilderUtils::mesocrystal3DContainer(Mesocrystal* con
     // These methods DO NOT add rotation/translation of the mesocrystal to its children
     // and hence they need to be added manually
     const auto lattice = *mesocrystal->particleStructure().lattice();
-    auto* const particleBasis = mesocrystal->particleStructure().basis();
-    auto* const outerShapeff = mesocrystal->outerShape();
+    const auto* particleBasis = mesocrystal->particleStructure().basis();
+    const auto* outerShapeff = mesocrystal->outerShape();
 
     const auto* mesocrystal_rotation = M_clone->rotation();
     auto mesocrystal_translation = M_clone->particlePosition();
diff --git a/Img3D/Mesh/Sphere.cpp b/Img3D/Mesh/Sphere.cpp
index 78d34626b9ed3a0edc3218f8f0cf79791a985a26..8df5420f8553f7602c8b5073772616c82b4886ac 100644
--- a/Img3D/Mesh/Sphere.cpp
+++ b/Img3D/Mesh/Sphere.cpp
@@ -25,7 +25,7 @@ namespace Img3D {
 Geometry::Mesh Geometry::meshSphere(float cut, float baseShift, float removedTop)
 {
     if (1 <= cut)
-        return Mesh();
+        return {};
     cut = qMax(0.f, cut);
     ASSERT(0 <= cut && cut < 1);
 
diff --git a/Img3D/Model/Particles.cpp b/Img3D/Model/Particles.cpp
index 0a10e7163a039ea21fd470e5c648b41ccb0220e3..da75353644fc836b95d26fe91cbd79a77a11e09a 100644
--- a/Img3D/Model/Particles.cpp
+++ b/Img3D/Model/Particles.cpp
@@ -346,7 +346,8 @@ HorizontalCylinder::HorizontalCylinder(float R, float L, float s_b, float s_t)
 }
 
 PlatonicOctahedron::PlatonicOctahedron(float L)
-    : PlotParticle(Key(BaseShape::Bipyramid4, 1.0f, asin(sqrt(2.0f / 3)), 1.0f / sqrt(2.0f)))
+    : PlotParticle(
+        Key(BaseShape::Bipyramid4, 1.0f, std::asin(std::sqrt(2.0f / 3)), 1.0f / std::sqrt(2.0f)))
 {
     isNull = (L <= 0);
     scale = F3(L, L, L);
@@ -359,7 +360,7 @@ PlatonicTetrahedron::PlatonicTetrahedron(float L)
 {
     isNull = (L <= 0);
     float D = L / sqrt3f;
-    scale = F3(D * 2, D * 2, L * sqrt(6.f) / 3);
+    scale = F3(D * 2, D * 2, L * std::sqrt(6.f) / 3);
     offset = F3(0, 0, 0);
     set();
 }
diff --git a/Img3D/Model/PlottableBody.cpp b/Img3D/Model/PlottableBody.cpp
index edadcf894dbd30f545a6de2ec54e99230fc3b296..95b1f5e8e1d2aa94c06ffbe93967e8667df41126 100644
--- a/Img3D/Model/PlottableBody.cpp
+++ b/Img3D/Model/PlottableBody.cpp
@@ -51,7 +51,7 @@ Img3D::F3 QuaternionToEuler(const QQuaternion& q)
     const float y = 2 * std::atan(std::sqrt((b * b + c * c) / (a * a + d * d)));
     const float z = term1 - term2;
 
-    return Img3D::F3(x, y, z);
+    return {x, y, z};
 }
 
 } // namespace
diff --git a/Img3D/Type/CameraParams.cpp b/Img3D/Type/CameraParams.cpp
index f0d4d81324e7eeaa74eff0fecef3514c0279ec62..44cf392edd3ff70ce87f35871c8d31651d3d41f7 100644
--- a/Img3D/Type/CameraParams.cpp
+++ b/Img3D/Type/CameraParams.cpp
@@ -35,8 +35,8 @@ CameraParams::CameraParams(const F3& eye_, const F3& ctr_, const F3& up_, QQuate
 
 CameraParams CameraParams::interpolateTo(const CameraParams& to, float r) const
 {
-    return CameraParams(interpolateF3(eye, to.eye, r), interpolateF3(ctr, to.ctr, r),
-                        interpolateF3(up, to.up, r), QQuaternion::slerp(rot, to.rot, r));
+    return {interpolateF3(eye, to.eye, r), interpolateF3(ctr, to.ctr, r),
+            interpolateF3(up, to.up, r), QQuaternion::slerp(rot, to.rot, r)};
 }
 
 } // namespace Img3D
diff --git a/Img3D/Type/FloatVector3D.cpp b/Img3D/Type/FloatVector3D.cpp
index 8305a13f7d80f436de89446610ef34bf8d58c6da..96aa06314c76e997b9d91ebdeba056ecc0653b14 100644
--- a/Img3D/Type/FloatVector3D.cpp
+++ b/Img3D/Type/FloatVector3D.cpp
@@ -54,12 +54,12 @@ F3Range::F3Range(F3 _1, F3 _2)
 
 F3 F3Range::size() const
 {
-    return F3(x.size(), y.size(), z.size());
+    return {x.size(), y.size(), z.size()};
 }
 
 F3 F3Range::mid() const
 {
-    return F3(x.mid(), y.mid(), z.mid());
+    return {x.mid(), y.mid(), z.mid()};
 }
 
 float F3Range::length() const
diff --git a/PyCore/Embed/PyInterpreter.cpp b/PyCore/Embed/PyInterpreter.cpp
index 1a67baecef54bb7e07e1fb16db69fb7cf7a97fae..ce9ae84763ffb8facbd462a9b8a6ef100950468e 100644
--- a/PyCore/Embed/PyInterpreter.cpp
+++ b/PyCore/Embed/PyInterpreter.cpp
@@ -545,7 +545,7 @@ PyObjectPtr PyInterpreter::Numpy::arrayND(std::vector<std::size_t>& dimensions)
         ASSERT(dimensions[d]);
 
     npy_int ndim_numpy = static_cast<npy_int>(n_dims);
-    npy_intp* ndimsizes_numpy = new npy_intp[n_dims];
+    auto* ndimsizes_numpy = new npy_intp[n_dims];
     for (std::size_t d = 0; d < n_dims; ++d)
         ndimsizes_numpy[d] = dimensions[d];
 
diff --git a/Resample/Element/DiffuseElement.cpp b/Resample/Element/DiffuseElement.cpp
index 4b50e37779875995f365c0dbf6527ccd2e5ea4f8..e2c0e51e69f8ccf9a3bd4296f7d2cec8dc07e649 100644
--- a/Resample/Element/DiffuseElement.cpp
+++ b/Resample/Element/DiffuseElement.cpp
@@ -38,8 +38,6 @@ DiffuseElement::DiffuseElement(double wavelength, double alpha_i, double phi_i,
 {
 }
 
-DiffuseElement::~DiffuseElement() = default;
-
 void DiffuseElement::setFluxes(const Fluxes* fluxes_in, const Fluxes* fluxes_out)
 {
     m_fluxes_in = fluxes_in;
diff --git a/Resample/Element/DiffuseElement.h b/Resample/Element/DiffuseElement.h
index 193fe3d7ee6caaa685749d33b9e804a674cf90e1..e4017b6b71b07a5e670dfbd03d9bf71a9a2ffe80 100644
--- a/Resample/Element/DiffuseElement.h
+++ b/Resample/Element/DiffuseElement.h
@@ -37,7 +37,6 @@ public:
                    const Fluxes* fluxes_in = nullptr, const Fluxes* fluxes_out = nullptr);
     DiffuseElement(const DiffuseElement&) = delete;
     DiffuseElement(DiffuseElement&&) noexcept = default;
-    ~DiffuseElement();
 
     void setFluxes(const Fluxes* fluxes_in, const Fluxes* fluxes_out);
     const IFlux* fluxIn(size_t i_layer) const;
diff --git a/Resample/Element/SpecularElement.cpp b/Resample/Element/SpecularElement.cpp
index 58f3797a2af43ef311eadd7a7c103e79356fe1c3..113965527b2e1b417ef419a203a8bf143397ad15 100644
--- a/Resample/Element/SpecularElement.cpp
+++ b/Resample/Element/SpecularElement.cpp
@@ -26,5 +26,3 @@ SpecularElement::SpecularElement(size_t i_out, bool computable, double weight, d
     , m_k(k)
 {
 }
-
-SpecularElement::~SpecularElement() = default;
diff --git a/Resample/Element/SpecularElement.h b/Resample/Element/SpecularElement.h
index 9045358b08c1f29d1354fb0fdbeea109c27273fe..b2408bab69a2e8cd6f8602f92277487dc6745b13 100644
--- a/Resample/Element/SpecularElement.h
+++ b/Resample/Element/SpecularElement.h
@@ -38,8 +38,6 @@ public:
     SpecularElement(const SpecularElement& other) = delete;
     SpecularElement(SpecularElement&& other) noexcept = default;
 
-    ~SpecularElement();
-
     size_t i_out() const { return m_i_out; }
     double weight() const { return m_weight; }
     double beamIntensity() const { return m_beamIntensity; }
diff --git a/Resample/Slice/ProfileHelper.cpp b/Resample/Slice/ProfileHelper.cpp
index 44ad29af92cf66c9eeddeee3779ffcd7336bb71b..5312263aa4ddbdcbe50ff588ac7f7c4403aa682a 100644
--- a/Resample/Slice/ProfileHelper.cpp
+++ b/Resample/Slice/ProfileHelper.cpp
@@ -57,8 +57,8 @@ complex_t quantity(const Material& mat, std::string q)
 } // namespace
 
 
-ProfileHelper::ProfileHelper(const SliceStack& stack)
-    : m_stack(stack)
+ProfileHelper::ProfileHelper(SliceStack stack)
+    : m_stack(std::move(stack))
 {
 }
 
diff --git a/Resample/Slice/ProfileHelper.h b/Resample/Slice/ProfileHelper.h
index 52728a389bf558fd1114a18c80913dbe6f6a6ddd..9af689441949d0159ace0fc005c7f39b05759d41 100644
--- a/Resample/Slice/ProfileHelper.h
+++ b/Resample/Slice/ProfileHelper.h
@@ -29,7 +29,7 @@
 
 class ProfileHelper {
 public:
-    ProfileHelper(const SliceStack& stack);
+    ProfileHelper(SliceStack stack);
     ~ProfileHelper() = default;
 
     std::vector<complex_t> calculateSLDProfile(const std::vector<double>& z_values) const;
diff --git a/Resample/Specular/ComputeFluxMagnetic.cpp b/Resample/Specular/ComputeFluxMagnetic.cpp
index ee38d7c4429445a637519bf465aae033dce64d48..a1d94e65f72e97facc82b36d70f289f5608d4b9a 100644
--- a/Resample/Specular/ComputeFluxMagnetic.cpp
+++ b/Resample/Specular/ComputeFluxMagnetic.cpp
@@ -14,13 +14,12 @@
 
 #include "Resample/Specular/ComputeFluxMagnetic.h"
 #include "Base/Const/PhysicalConstants.h"
+#include "Base/Math/Functions.h"
 #include "Base/Spin/SpinMatrix.h"
 #include "Base/Util/Assert.h"
 #include "Resample/Flux/MatrixFlux.h"
 #include "Resample/Slice/KzComputation.h"
 #include "Resample/Slice/SliceStack.h"
-#include "Resample/Specular/TransitionMagneticNevot.h"
-#include "Resample/Specular/TransitionMagneticTanh.h"
 #include "Sample/Interface/LayerRoughness.h"
 #include <algorithm>
 #include <numbers>
@@ -33,6 +32,74 @@ namespace {
 constexpr double magnetic_prefactor = PhysConsts::m_n * PhysConsts::g_factor_n * PhysConsts::mu_N
                                       / PhysConsts::h_bar / PhysConsts::h_bar / 4. / pi * 1e-18;
 
+
+using std::numbers::pi;
+
+//! Returns refraction matrix blocks s_{ab}^+-.
+//! See PhysRef, chapter "Polarized", section "InterTR_ace with tanh profile".
+std::pair<SpinMatrix, SpinMatrix> refractionMatrixBlocksTanh(const MatrixFlux& TR_a,
+                                                             const MatrixFlux& TR_b, double sigma)
+{
+    ASSERT(sigma > 0);
+
+    const double sigeff = std::pow(pi / 2, 1.5) * sigma;
+    complex_t rau = std::sqrt(Math::tanhc(sigeff * TR_a.k_eigen_up()));
+    complex_t rad = std::sqrt(Math::tanhc(sigeff * TR_a.k_eigen_dn()));
+    complex_t rbu = std::sqrt(Math::tanhc(sigeff * TR_b.k_eigen_up()));
+    complex_t rbd = std::sqrt(Math::tanhc(sigeff * TR_b.k_eigen_dn()));
+
+    SpinMatrix Rkk =
+        TR_b.eigenToMatrix({rbu * TR_b.k_eigen_up(), rbd * TR_b.k_eigen_dn()})
+        * TR_a.eigenToMatrix({1. / rau / TR_a.k_eigen_up(), 1. / rad / TR_a.k_eigen_dn()});
+
+    SpinMatrix RInv = TR_a.eigenToMatrix({rau, rad}) * TR_b.eigenToMatrix({1. / rbu, 1. / rbd});
+
+    const SpinMatrix sp = (RInv + Rkk) / 2.;
+    const SpinMatrix sm = (RInv - Rkk) / 2.;
+
+    return {sp, sm};
+}
+
+//! Returns refraction matrix blocks s_{ab}^+-.
+//! See PhysRef, chapter "Polarized", section "Nevot-Croce approximation".
+std::pair<SpinMatrix, SpinMatrix> refractionMatrixBlocksNevot(const MatrixFlux& TR_a,
+                                                              const MatrixFlux& TR_b, double sigma)
+{
+    ASSERT(sigma > 0);
+
+    auto roughness_matrix = [&TR_a, &TR_b, sigma](double sign) -> SpinMatrix {
+        complex_t alpha_a = TR_a.k_eigen_up() + TR_a.k_eigen_dn();
+        complex_t alpha_b = TR_b.k_eigen_up() + TR_b.k_eigen_dn();
+        complex_t beta_a = TR_a.k_eigen_up() - TR_a.k_eigen_dn();
+        complex_t beta_b = TR_b.k_eigen_up() - TR_b.k_eigen_dn();
+
+        const complex_t alpha = alpha_b + sign * alpha_a;
+        C3 b = beta_b * TR_b.field() + sign * beta_a * TR_a.field();
+
+        auto square = [](auto& v) { return v.x() * v.x() + v.y() * v.y() + v.z() * v.z(); };
+        complex_t beta = std::sqrt(square(b));
+        if (std::abs(beta) < std::numeric_limits<double>::epsilon() * 10.) {
+            const complex_t alpha_pp = -(alpha * alpha) * sigma * sigma / 8.;
+            return {std::exp(alpha_pp), 0, 0, std::exp(alpha_pp)};
+        }
+
+        b /= beta;
+
+        const complex_t alpha_pp = -(alpha * alpha + beta * beta) * sigma * sigma / 8.;
+        const complex_t beta_pp = -alpha * beta * sigma * sigma / 4.;
+        SpinMatrix Q(b.z() + 1., b.x() - I * b.y(), b.x() + I * b.y(), -1. - b.z());
+        const SpinMatrix M(std::exp(beta_pp), 0, 0, std::exp(-beta_pp));
+
+        return std::exp(alpha_pp) * Q * M * Q.adjoint() / (2. * (1. + b.z()));
+    };
+
+    const auto kk = SpinMatrix(TR_a.computeInverseKappa() * TR_b.computeKappa());
+    const auto sp = 0.5 * (SpinMatrix::One() + kk) * roughness_matrix(-1.);
+    const auto sm = 0.5 * (SpinMatrix::One() - kk) * roughness_matrix(+1.);
+
+    return {sp, sm};
+}
+
 double magneticSLD(R3 B_field)
 {
     return magnetic_prefactor * B_field.mag();
@@ -63,9 +130,9 @@ std::pair<SpinMatrix, SpinMatrix> refractionMatrixBlocks(const MatrixFlux& tr_a,
     }
 
     if (r_model == RoughnessModel::NEVOT_CROCE)
-        return Compute::refractionMatrixBlocksNevot(tr_a, tr_b, sigma);
+        return refractionMatrixBlocksNevot(tr_a, tr_b, sigma);
 
-    return Compute::refractionMatrixBlocksTanh(tr_a, tr_b, sigma);
+    return refractionMatrixBlocksTanh(tr_a, tr_b, sigma);
 }
 
 //! Split off from Compute::polarizedFluxes just to facilitate the conversion from
diff --git a/Resample/Specular/TransitionMagneticNevot.cpp b/Resample/Specular/TransitionMagneticNevot.cpp
deleted file mode 100644
index 065e8ecf8a269a8bbb1caf2910bac09d810f33bc..0000000000000000000000000000000000000000
--- a/Resample/Specular/TransitionMagneticNevot.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Resample/Specular/TransitionMagneticNevot.cpp
-//! @brief     Implements namespace MagneticNevotCroceTransition.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2020
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Resample/Specular/TransitionMagneticNevot.h"
-#include "Base/Spin/SpinMatrix.h"
-#include "Base/Util/Assert.h"
-#include "Resample/Flux/MatrixFlux.h"
-
-//! Returns refraction matrix blocks s_{ab}^+-.
-//! See PhysRef, chapter "Polarized", section "Nevot-Croce approximation".
-std::pair<SpinMatrix, SpinMatrix>
-Compute::refractionMatrixBlocksNevot(const MatrixFlux& TR_a, const MatrixFlux& TR_b, double sigma)
-{
-    ASSERT(sigma > 0);
-
-    auto roughness_matrix = [&TR_a, &TR_b, sigma](double sign) -> SpinMatrix {
-        complex_t alpha_a = TR_a.k_eigen_up() + TR_a.k_eigen_dn();
-        complex_t alpha_b = TR_b.k_eigen_up() + TR_b.k_eigen_dn();
-        complex_t beta_a = TR_a.k_eigen_up() - TR_a.k_eigen_dn();
-        complex_t beta_b = TR_b.k_eigen_up() - TR_b.k_eigen_dn();
-
-        const complex_t alpha = alpha_b + sign * alpha_a;
-        C3 b = beta_b * TR_b.field() + sign * beta_a * TR_a.field();
-
-        auto square = [](auto& v) { return v.x() * v.x() + v.y() * v.y() + v.z() * v.z(); };
-        complex_t beta = std::sqrt(square(b));
-        if (std::abs(beta) < std::numeric_limits<double>::epsilon() * 10.) {
-            const complex_t alpha_pp = -(alpha * alpha) * sigma * sigma / 8.;
-            return SpinMatrix(std::exp(alpha_pp), 0, 0, std::exp(alpha_pp));
-        }
-
-        b /= beta;
-
-        const complex_t alpha_pp = -(alpha * alpha + beta * beta) * sigma * sigma / 8.;
-        const complex_t beta_pp = -alpha * beta * sigma * sigma / 4.;
-        SpinMatrix Q(b.z() + 1., b.x() - I * b.y(), b.x() + I * b.y(), -1. - b.z());
-        const SpinMatrix M(std::exp(beta_pp), 0, 0, std::exp(-beta_pp));
-
-        return std::exp(alpha_pp) * Q * M * Q.adjoint() / (2. * (1. + b.z()));
-    };
-
-    const auto kk = SpinMatrix(TR_a.computeInverseKappa() * TR_b.computeKappa());
-    const auto sp = 0.5 * (SpinMatrix::One() + kk) * roughness_matrix(-1.);
-    const auto sm = 0.5 * (SpinMatrix::One() - kk) * roughness_matrix(+1.);
-
-    return {sp, sm};
-}
diff --git a/Resample/Specular/TransitionMagneticNevot.h b/Resample/Specular/TransitionMagneticNevot.h
deleted file mode 100644
index 16f5b9c5521e96ca64d5e72b29a88bc5038003f7..0000000000000000000000000000000000000000
--- a/Resample/Specular/TransitionMagneticNevot.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Resample/Specular/TransitionMagneticNevot.h
-//! @brief     Defines namespace MagneticNevotCroceTransition.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2020
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#ifdef SWIG
-#error no need to expose this header to Swig
-#endif // SWIG
-#ifndef BORNAGAIN_RESAMPLE_SPECULAR_TRANSITIONMAGNETICNEVOT_H
-#define BORNAGAIN_RESAMPLE_SPECULAR_TRANSITIONMAGNETICNEVOT_H
-
-#include <utility> // pair
-
-class MatrixFlux;
-class SpinMatrix;
-
-namespace Compute {
-
-std::pair<SpinMatrix, SpinMatrix>
-refractionMatrixBlocksNevot(const MatrixFlux& coeff_i, const MatrixFlux& coeff_i1, double sigma);
-}
-
-#endif // BORNAGAIN_RESAMPLE_SPECULAR_TRANSITIONMAGNETICNEVOT_H
diff --git a/Resample/Specular/TransitionMagneticTanh.cpp b/Resample/Specular/TransitionMagneticTanh.cpp
deleted file mode 100644
index 0b0603420134a8d986c5852da3e41ae28e20cbcd..0000000000000000000000000000000000000000
--- a/Resample/Specular/TransitionMagneticTanh.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Resample/Specular/TransitionMagneticTanh.cpp
-//! @brief     Implements class SpecularMagneticTanhStrategy.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2020
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#include "Resample/Specular/TransitionMagneticTanh.h"
-#include "Base/Math/Functions.h"
-#include "Base/Spin/SpinMatrix.h"
-#include "Base/Util/Assert.h"
-#include "Resample/Flux/MatrixFlux.h"
-#include <numbers>
-
-using std::numbers::pi;
-
-//! Returns refraction matrix blocks s_{ab}^+-.
-//! See PhysRef, chapter "Polarized", section "InterTR_ace with tanh profile".
-std::pair<SpinMatrix, SpinMatrix>
-Compute::refractionMatrixBlocksTanh(const MatrixFlux& TR_a, const MatrixFlux& TR_b, double sigma)
-{
-    ASSERT(sigma > 0);
-
-    const double sigeff = std::pow(pi / 2, 1.5) * sigma;
-    complex_t rau = std::sqrt(Math::tanhc(sigeff * TR_a.k_eigen_up()));
-    complex_t rad = std::sqrt(Math::tanhc(sigeff * TR_a.k_eigen_dn()));
-    complex_t rbu = std::sqrt(Math::tanhc(sigeff * TR_b.k_eigen_up()));
-    complex_t rbd = std::sqrt(Math::tanhc(sigeff * TR_b.k_eigen_dn()));
-
-    SpinMatrix Rkk =
-        TR_b.eigenToMatrix({rbu * TR_b.k_eigen_up(), rbd * TR_b.k_eigen_dn()})
-        * TR_a.eigenToMatrix({1. / rau / TR_a.k_eigen_up(), 1. / rad / TR_a.k_eigen_dn()});
-
-    SpinMatrix RInv = TR_a.eigenToMatrix({rau, rad}) * TR_b.eigenToMatrix({1. / rbu, 1. / rbd});
-
-    const SpinMatrix sp = (RInv + Rkk) / 2.;
-    const SpinMatrix sm = (RInv - Rkk) / 2.;
-
-    return {sp, sm};
-}
diff --git a/Resample/Specular/TransitionMagneticTanh.h b/Resample/Specular/TransitionMagneticTanh.h
deleted file mode 100644
index 5092aca283e01c06263aedb21830e4ad2f3ff48e..0000000000000000000000000000000000000000
--- a/Resample/Specular/TransitionMagneticTanh.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Resample/Specular/TransitionMagneticTanh.h
-//! @brief     Defines namespace TransitionMagneticTanh.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2020
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#ifdef SWIG
-#error no need to expose this header to Swig
-#endif // SWIG
-#ifndef BORNAGAIN_RESAMPLE_SPECULAR_TRANSITIONMAGNETICTANH_H
-#define BORNAGAIN_RESAMPLE_SPECULAR_TRANSITIONMAGNETICTANH_H
-
-#include <utility> // pair
-
-class MatrixFlux;
-class SpinMatrix;
-
-namespace Compute {
-
-std::pair<SpinMatrix, SpinMatrix>
-refractionMatrixBlocksTanh(const MatrixFlux& coeff_i, const MatrixFlux& coeff_i1, double sigma);
-}
-
-#endif // BORNAGAIN_RESAMPLE_SPECULAR_TRANSITIONMAGNETICTANH_H
diff --git a/Sample/Particle/PolyhedralUtil.cpp b/Sample/Particle/PolyhedralUtil.cpp
index 614ad262dd27632ef2a6ed846ae263c1a9493afa..ed0836ce7222d7d206c4ab65fbafc9648af9d8de 100644
--- a/Sample/Particle/PolyhedralUtil.cpp
+++ b/Sample/Particle/PolyhedralUtil.cpp
@@ -20,7 +20,7 @@
 
 Span PolyhedralUtil::spanZ(const std::vector<R3>& vertices, const IRotation* rotation)
 {
-    ASSERT(vertices.size());
+    ASSERT(!vertices.empty());
     const R3& v0 = vertices[0];
     double z0 = (rotation ? rotation->transformed(v0) : v0).z();
     Span result(z0, z0);
diff --git a/Sample/Scattering/Rotations.h b/Sample/Scattering/Rotations.h
index d5b4d6ee94d37c160da7be4dfb8ef696e0eb8608..d9aef6703885f6ed31acc9ec4f6c5d4e4b240fd4 100644
--- a/Sample/Scattering/Rotations.h
+++ b/Sample/Scattering/Rotations.h
@@ -24,7 +24,7 @@
 
 class IRotation : public ICloneable, public INode {
 public:
-    static IRotation* createRotation(const RotMatrix& transform);
+    static IRotation* createRotation(const RotMatrix& matrix);
 
     IRotation(const std::vector<double>& PValues);
 
diff --git a/Sample/Shapes/IShape3D.cpp b/Sample/Shapes/IShape3D.cpp
index 17b221bfe2d9861049ef28b340b0c4156eec3ce1..dc6d18c44778baed3cfc41f3a090b4584b4b908d 100644
--- a/Sample/Shapes/IShape3D.cpp
+++ b/Sample/Shapes/IShape3D.cpp
@@ -69,9 +69,8 @@ std::vector<R3> EllipseVerticesXtrunc(double x, double r_y, double r_z, double z
         double y = r_y * std::cos(angle);
         double z = r_z * std::sin(angle) - z_b; // bottom is at 0, top at z_t-z_b
 
-        if (0 <= z && z <= (z_t - z_b)) {
-            result.push_back(R3(x, y, z));
-        }
+        if (0 <= z && z <= (z_t - z_b))
+            result.emplace_back(R3(x, y, z));
     }
     double alpha_t = atan(z_t / sqrt(r_z * r_z - z_t * z_t) * r_z / r_y);
     double alpha_b = atan(z_b / sqrt(r_z * r_z - z_b * z_b) * r_z / r_y);
@@ -79,10 +78,10 @@ std::vector<R3> EllipseVerticesXtrunc(double x, double r_y, double r_z, double z
     double y_t = r_y * std::cos(alpha_t);
     double y_b = r_y * std::cos(alpha_b);
 
-    result.push_back(R3(x, y_t, z_t - z_b));
-    result.push_back(R3(x, -y_t, z_t - z_b));
-    result.push_back(R3(x, y_b, 0));
-    result.push_back(R3(x, -y_b, 0));
+    result.emplace_back(R3(x, y_t, z_t - z_b));
+    result.emplace_back(R3(x, -y_t, z_t - z_b));
+    result.emplace_back(R3(x, y_b, 0));
+    result.emplace_back(R3(x, -y_b, 0));
 
     return result;
 }
diff --git a/Sim/Export/MaterialKeyHandler.cpp b/Sim/Export/MaterialKeyHandler.cpp
index c5854bde08b7aef5504c40717e1b9ff5f08a0056..7e2c9814cc5446bc950e51b4f1ec2c31cea2408d 100644
--- a/Sim/Export/MaterialKeyHandler.cpp
+++ b/Sim/Export/MaterialKeyHandler.cpp
@@ -26,7 +26,7 @@ void MaterialKeyHandler::insertMaterial(const Material* mat)
     m_Mat2Unique.emplace(mat, mat);
 
     const std::string key = "material_" + mat->materialName();
-    ASSERT(!m_Key2Mat.count(key)); // material must not be exported more than once
+    ASSERT(!m_Key2Mat.contains(key)); // material must not be exported more than once
     m_Key2Mat.emplace(key, mat);
 }
 
diff --git a/Sim/Export/SimulationToPython.cpp b/Sim/Export/SimulationToPython.cpp
index a3d63d95a2ce9dcc8cd28b434471bb796ebb199e..748b7f2f7ea794d1314cff0b8b93706267316bc9 100644
--- a/Sim/Export/SimulationToPython.cpp
+++ b/Sim/Export/SimulationToPython.cpp
@@ -206,7 +206,7 @@ std::string defineBeamScan(const BeamScan& scan)
         result << defineQzScan(*s);
     else
         ASSERT_NEVER;
-    if (scan.intensity() != scan.defaultIntensity)
+    if (scan.intensity() != BeamScan::defaultIntensity)
         result << indent() << "scan.setIntensity(" << scan.intensity() << ")\n";
     if (const IFootprint* fp = scan.footprint()) {
         result << defineFootprint(*fp);
diff --git a/Sim/Fitting/SimDataPair.cpp b/Sim/Fitting/SimDataPair.cpp
index 2643e62e297ec191620ca24f36d5e8a90d1c08f4..83914cc198e6bcc40747fe08f5eb3a787e541846 100644
--- a/Sim/Fitting/SimDataPair.cpp
+++ b/Sim/Fitting/SimDataPair.cpp
@@ -69,7 +69,7 @@ Datafield repositionData(const ScatteringSimulation& simulation, const Datafield
         throw std::runtime_error(
             "FitObject::init_dataset: Detector and experimental data have different shape");
 
-    return Datafield(coordSystem.clonedAxes(), values, errors);
+    return {coordSystem.clonedAxes(), values, errors};
 }
 
 } // namespace
diff --git a/Sim/Scan/AlphaScan.cpp b/Sim/Scan/AlphaScan.cpp
index 99dd755f6a14dcf64f7763f04e6ed8aa91b4364b..523bb233b8ad9d16bba63213057e3b2e6c77e13b 100644
--- a/Sim/Scan/AlphaScan.cpp
+++ b/Sim/Scan/AlphaScan.cpp
@@ -106,7 +106,7 @@ void AlphaScan::createBeams()
 {
     m_beams.clear();
     for (size_t i = 0; i < nScan(); i++) {
-        Beam* beam = new Beam(defaultIntensity, defaultWavelength, m_axis->binCenter(i));
+        auto* beam = new Beam(defaultIntensity, defaultWavelength, m_axis->binCenter(i));
         m_beams.emplace_back(beam);
     }
 }
diff --git a/Sim/Scan/BeamScan.cpp b/Sim/Scan/BeamScan.cpp
index ff870e5ad134b73d00e2560897b00fa8824f6061..dcbca54b229bc8a5b3f5d8c0af76296e20bdbdac 100644
--- a/Sim/Scan/BeamScan.cpp
+++ b/Sim/Scan/BeamScan.cpp
@@ -22,9 +22,6 @@
 #include "Device/Pol/PolFilter.h"
 #include "Resample/Slice/KzComputation.h"
 #include <iostream>
-#include <numbers>
-
-using std::numbers::pi;
 
 BeamScan::BeamScan(Scale* axis)
     : m_axis(axis)
@@ -55,7 +52,7 @@ std::vector<const INode*> BeamScan::nodeChildren() const
 
 void BeamScan::setAnalyzer(R3 Bloch_vector, double mean_transmission)
 {
-    m_polAnalyzer.reset(new PolFilter(Bloch_vector, mean_transmission));
+    m_polAnalyzer = std::make_unique<PolFilter>(Bloch_vector, mean_transmission);
 }
 
 void BeamScan::setAnalyzer(R3 direction, double efficiency, double mean_transmission)
@@ -80,10 +77,10 @@ double BeamScan::intensity() const
     return m_beams.front()->intensity();
 }
 
-void BeamScan::setIntensity(double val)
+void BeamScan::setIntensity(double intensity)
 {
     for (auto& b : m_beams)
-        b->setIntensity(val);
+        b->setIntensity(intensity);
 }
 
 double BeamScan::intensityAt(size_t i) const
@@ -91,12 +88,12 @@ double BeamScan::intensityAt(size_t i) const
     return m_beams[i]->intensity();
 }
 
-void BeamScan::setIntensityAt(size_t i, double val)
+void BeamScan::setIntensityAt(size_t i, double intensity)
 {
-    m_beams[i]->setIntensity(val);
+    m_beams[i]->setIntensity(intensity);
 }
 
-const R3 BeamScan::polarization() const
+const R3& BeamScan::polarization() const
 {
     if (!isCommonPolarization())
         throw std::runtime_error("Polarization changes during scan. "
@@ -156,7 +153,7 @@ SpinMatrix BeamScan::analyzerMatrix() const
 
 Frame BeamScan::scanCoordSystem() const
 {
-    return Frame(coordinateAxis()->clone());
+    return {coordinateAxis()->clone()};
 }
 
 std::vector<complex_t> BeamScan::produceKz(const SliceStack& slices, R3 k) const
diff --git a/Sim/Scan/BeamScan.h b/Sim/Scan/BeamScan.h
index a4283b338de25d39957b82e37460e557372fbe33..8810f6b1826b4cc2abeaf2d18aca138a09687394 100644
--- a/Sim/Scan/BeamScan.h
+++ b/Sim/Scan/BeamScan.h
@@ -45,7 +45,7 @@ public:
     std::vector<const INode*> nodeChildren() const override;
 
     void setIntensity(double intensity);
-    void setIntensityAt(size_t i, double val);
+    void setIntensityAt(size_t i, double intensity);
 
     //! Sets the polarization density matrix according to the given Bloch vector
     void setPolarization(R3 bloch_vector);
@@ -62,7 +62,7 @@ public:
     double intensity() const;
     double intensityAt(size_t i) const;
 
-    const R3 polarization() const;
+    const R3& polarization() const;
     R3 polarizationAt(size_t i) const;
 
     const IFootprint* footprint() const;
diff --git a/Sim/Scan/LambdaScan.cpp b/Sim/Scan/LambdaScan.cpp
index 4f7686ee2a9e05e9e71c1d7295ffe0eef5c6cc37..b8acb52ab15b39db9e51859568b1881e0b5c6f23 100644
--- a/Sim/Scan/LambdaScan.cpp
+++ b/Sim/Scan/LambdaScan.cpp
@@ -80,7 +80,7 @@ void LambdaScan::createBeams()
 {
     m_beams.clear();
     for (size_t i = 0; i < nScan(); i++) {
-        Beam* beam = new Beam(defaultIntensity, m_axis->binCenter(i), defaultInclination);
+        auto* beam = new Beam(defaultIntensity, m_axis->binCenter(i), defaultInclination);
         m_beams.emplace_back(beam);
     }
 }
diff --git a/Sim/Scan/PhysicalScan.cpp b/Sim/Scan/PhysicalScan.cpp
index c1990712dc31006eabc457cbca736af76df2e22b..11b1f1d831ecb96d00126c9bd41cb596b3bfee9a 100644
--- a/Sim/Scan/PhysicalScan.cpp
+++ b/Sim/Scan/PhysicalScan.cpp
@@ -29,9 +29,9 @@ void PhysicalScan::copyPhysicalScan(PhysicalScan* dest) const
 {
     BeamScan::copyBeamScan(dest);
     if (m_lambda_distrib)
-        dest->setWavelengthDistribution(*m_lambda_distrib.get());
+        dest->setWavelengthDistribution(*m_lambda_distrib);
     if (m_alpha_distrib)
-        dest->setAngleDistribution(*m_alpha_distrib.get());
+        dest->setAngleDistribution(*m_alpha_distrib);
 }
 
 std::vector<const INode*> PhysicalScan::nodeChildren() const
diff --git a/Sim/Scan/QzScan.cpp b/Sim/Scan/QzScan.cpp
index fd18edf8176c381845ecfef8fb70c553d2246de1..c7e698ab6ee7cde46400c0e9b133e5f43e396873 100644
--- a/Sim/Scan/QzScan.cpp
+++ b/Sim/Scan/QzScan.cpp
@@ -23,8 +23,6 @@
 #include <algorithm> // is_sorted
 #include <numbers>
 
-using std::numbers::pi;
-
 QzScan::QzScan(Scale* qs_nm)
     : BeamScan(qs_nm)
 {
@@ -89,7 +87,7 @@ std::vector<SpecularElement> QzScan::generateElements() const
             const std::vector<ParameterSample> qzDistrib = m_qz_distrib->distributionSamples();
             for (size_t j = 0; j < qzDistrib.size(); ++j) {
                 double qz = q0;
-                ASSERT(m_resol_width.size() > 0);
+                ASSERT(!m_resol_width.empty());
                 if (m_relative_resolution)
                     qz += q0 * m_resol_width[0] * qzDistrib[j].value;
                 else if (m_resol_width.size() > 1)
@@ -144,7 +142,7 @@ void QzScan::createBeams()
         // TODO use some shared function "qz2lambda"
         double lambda =
             4.0 * std::numbers::pi * std::sin(defaultInclination) / m_axis->binCenter(i);
-        Beam* beam = new Beam(defaultIntensity, lambda, defaultInclination);
+        auto* beam = new Beam(defaultIntensity, lambda, defaultInclination);
         // Since the grazing geometry is not clear in q-space, the footprint should not be used
         beam->setFootprint(nullptr);
         m_beams.emplace_back(beam);
diff --git a/Sim/Simulation/OffspecSimulation.cpp b/Sim/Simulation/OffspecSimulation.cpp
index 6c251b9c0bff08bf6906f8c6dfdbc961b844e1f8..f97b4cfdee972c80f7c7950e4ad5d58b5a47bb8d 100644
--- a/Sim/Simulation/OffspecSimulation.cpp
+++ b/Sim/Simulation/OffspecSimulation.cpp
@@ -56,7 +56,7 @@ void OffspecSimulation::prepareSimulation()
 
 Frame OffspecSimulation::simCoordSystem() const
 {
-    return Frame(m_scan->coordinateAxis()->clone(), m_detector->axis(1).clone());
+    return {m_scan->coordinateAxis()->clone(), m_detector->axis(1).clone()};
 }
 
 //... Overridden executors:
@@ -81,7 +81,7 @@ void OffspecSimulation::initDistributionHandler()
 
 void OffspecSimulation::runComputation(const ReSample& re_sample, size_t i, double weight)
 {
-    if (auto phys_scan = dynamic_cast<PhysicalScan*>(m_scan.get()))
+    if (auto* phys_scan = dynamic_cast<PhysicalScan*>(m_scan.get()))
         if (phys_scan->wavelengthDistribution() || phys_scan->alphaDistribution())
             throw std::runtime_error(
                 "Offspecular simulation supports neither alpha nor lambda distributions.");
diff --git a/Tests/Unit/Base/FixedBinAxisTest.cpp b/Tests/Unit/Base/FixedBinAxisTest.cpp
index 4ea80b4ba78c1ac1e3ee31291e4388606c5049c9..50ddc398a99e92ff7cf940f35e5a5cd9cb65bc6a 100644
--- a/Tests/Unit/Base/FixedBinAxisTest.cpp
+++ b/Tests/Unit/Base/FixedBinAxisTest.cpp
@@ -59,24 +59,24 @@ TEST(EquiDivisionTest, CheckBin)
     Bin1D bin0 = axis.bin(0);
     EXPECT_DOUBLE_EQ(0.25, bin0.center());
     EXPECT_DOUBLE_EQ(0.0, bin0.min());
-    EXPECT_DOUBLE_EQ(0.5, bin0.axn());
+    EXPECT_DOUBLE_EQ(0.5, bin0.max());
     EXPECT_DOUBLE_EQ(0.5, bin0.binSize());
 
     Bin1D bin3 = axis.bin(3);
     EXPECT_DOUBLE_EQ(1.75, bin3.center());
     EXPECT_DOUBLE_EQ(1.5, bin3.min());
-    EXPECT_DOUBLE_EQ(2.0, bin3.axn());
+    EXPECT_DOUBLE_EQ(2.0, bin3.max());
     EXPECT_DOUBLE_EQ(0.5, bin3.binSize());
 
     Bin1D bin10 = axis.bin(10);
     EXPECT_DOUBLE_EQ(5.25, bin10.center());
     EXPECT_DOUBLE_EQ(5.0, bin10.min());
-    EXPECT_DOUBLE_EQ(5.5, bin10.axn());
+    EXPECT_DOUBLE_EQ(5.5, bin10.max());
 
     Bin1D bin19 = axis.bin(19);
     EXPECT_DOUBLE_EQ(9.75, bin19.center());
     EXPECT_DOUBLE_EQ(9.5, bin19.min());
-    EXPECT_DOUBLE_EQ(10.0, bin19.axn());
+    EXPECT_DOUBLE_EQ(10.0, bin19.max());
 
     EXPECT_THROW(axis.bin(20), std::out_of_range);