diff --git a/Core/Computation/ConstantBackground.h b/Core/Computation/ConstantBackground.h
index b6da9a394657bdfccc1e0571a4a39436450c48b5..6c7650e2772e494f6e12a57122ab790bd147a8d7 100644
--- a/Core/Computation/ConstantBackground.h
+++ b/Core/Computation/ConstantBackground.h
@@ -26,13 +26,13 @@ public:
     ConstantBackground(const std::vector<double> P);
     ConstantBackground(double background_value);
 
-    ConstantBackground* clone() const final;
+    ConstantBackground* clone() const override;
 
     double backgroundValue() const { return m_background_value; }
 
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double addBackground(double intensity) const final;
+    double addBackground(double intensity) const override;
 
 private:
     const double& m_background_value;
diff --git a/Core/Computation/PoissonNoiseBackground.h b/Core/Computation/PoissonNoiseBackground.h
index 30f72ebfeb78c466d036eaf9fbbd4625bbce4f6c..0581ffef731b7f9bb23c995f38ab953374952c86 100644
--- a/Core/Computation/PoissonNoiseBackground.h
+++ b/Core/Computation/PoissonNoiseBackground.h
@@ -24,11 +24,11 @@
 class PoissonNoiseBackground : public IBackground {
 public:
     PoissonNoiseBackground();
-    PoissonNoiseBackground* clone() const final;
+    PoissonNoiseBackground* clone() const override;
 
     void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double addBackground(double intensity) const final;
+    double addBackground(double intensity) const override;
 };
 
 #endif // BORNAGAIN_CORE_COMPUTATION_POISSONNOISEBACKGROUND_H
diff --git a/Core/Scan/UnitConverter1D.h b/Core/Scan/UnitConverter1D.h
index 9f2e28a9bdfab9083c8e5a92baea8b7946b0dcde..095f0fa1a7977003a4e4f4e9468de6aeda3f2088 100644
--- a/Core/Scan/UnitConverter1D.h
+++ b/Core/Scan/UnitConverter1D.h
@@ -43,7 +43,7 @@ public:
     UnitConverter1D* clone() const override = 0;
 
     //! Returns dimensionality of converted canvas.
-    size_t dimension() const final { return 1u; }
+    size_t dimension() const override { return 1u; }
 
     //! Calculates minimum on-axis value in given units.
     double calculateMin(size_t i_axis, Axes::Units units) const override;
diff --git a/Core/Simulation/DepthProbeSimulation.h b/Core/Simulation/DepthProbeSimulation.h
index cf2cbad5219e8fce68e995abf27d948b301ab525..abbdae7235f75b3e2e33ca8e080a944b22385f87 100644
--- a/Core/Simulation/DepthProbeSimulation.h
+++ b/Core/Simulation/DepthProbeSimulation.h
@@ -37,7 +37,7 @@ public:
 
     DepthProbeSimulation* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     //! Returns the results of the simulation in a format that supports unit conversion and export
     //! to numpy arrays
diff --git a/Core/Simulation/SpecularSimulation.h b/Core/Simulation/SpecularSimulation.h
index 88dd079ec2df3f857d4f28ef6d998ae177723797..39debc1a9affd3b81a60059089f48bdc0156c831 100644
--- a/Core/Simulation/SpecularSimulation.h
+++ b/Core/Simulation/SpecularSimulation.h
@@ -39,7 +39,7 @@ public:
     //! Put into a clean state for running a simulation.
     void prepareSimulation() override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     //! Returns the results of the simulation in a format that supports unit conversion and export
     //! to numpy arrays. If simulation was not run, returns an array of proper size filled with
diff --git a/Device/Detector/IsGISAXSDetector.h b/Device/Detector/IsGISAXSDetector.h
index 9d6ad434796b5b954cc6dcc50e76eec6b76cf551..342638f5902233f256e0ac4b7e2407ec6aa9dccf 100644
--- a/Device/Detector/IsGISAXSDetector.h
+++ b/Device/Detector/IsGISAXSDetector.h
@@ -29,7 +29,7 @@ public:
 
     IsGISAXSDetector* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 protected:
     //! Generates an axis with correct name and default binning for given index
diff --git a/Device/Detector/RectangularDetector.h b/Device/Detector/RectangularDetector.h
index 774af2c4779c505c4a4489c0a94527186756bfc1..f0207732788d306efc8f1d0ff342eba42d633a45 100644
--- a/Device/Detector/RectangularDetector.h
+++ b/Device/Detector/RectangularDetector.h
@@ -44,7 +44,7 @@ public:
 
     RectangularDetector* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     ~RectangularDetector();
 
@@ -73,7 +73,7 @@ public:
     EDetectorArrangement getDetectorArrangment() const;
 
     //! return default axes units
-    virtual Axes::Units defaultAxesUnits() const final { return Axes::Units::MM; }
+    virtual Axes::Units defaultAxesUnits() const override { return Axes::Units::MM; }
 
     RectangularPixel* regionOfInterestPixel() const;
 
diff --git a/Device/Detector/SpecularDetector1D.h b/Device/Detector/SpecularDetector1D.h
index 09501594e1010f2cc9b8eb4c8bd7bfb737301244..90fecfb6cdeb7911ae5cdee8b336b62b0acb8114 100644
--- a/Device/Detector/SpecularDetector1D.h
+++ b/Device/Detector/SpecularDetector1D.h
@@ -49,7 +49,7 @@ public:
     void setAxis(const IAxis& axis);
 
     //! Return default axes units
-    virtual Axes::Units defaultAxesUnits() const final { return Axes::Units::RADIANS; }
+    virtual Axes::Units defaultAxesUnits() const override { return Axes::Units::RADIANS; }
 
 
 protected:
diff --git a/Device/Detector/SphericalDetector.h b/Device/Detector/SphericalDetector.h
index 52eef2a455a44a3315c65690c102baf208d3fd71..6d0fab8bdd2a19eb1fb4da6ca49998599512469b 100644
--- a/Device/Detector/SphericalDetector.h
+++ b/Device/Detector/SphericalDetector.h
@@ -53,7 +53,7 @@ public:
     ~SphericalDetector() override {}
 
     //! return default axes units
-    virtual Axes::Units defaultAxesUnits() const final { return Axes::Units::RADIANS; }
+    virtual Axes::Units defaultAxesUnits() const override { return Axes::Units::RADIANS; }
 
 protected:
     //! Creates an IPixel for the given OutputData object and index
diff --git a/Device/Instrument/Instrument.h b/Device/Instrument/Instrument.h
index 90dc0e3466842e4e4c71d0dbc0e73cfbe6523e42..5e53de265e4c1e6b449fb432ae15e670e7f94a42 100644
--- a/Device/Instrument/Instrument.h
+++ b/Device/Instrument/Instrument.h
@@ -38,7 +38,7 @@ public:
 
     virtual ~Instrument();
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     Beam& beam() { return m_beam; }
     const Beam& beam() const { return m_beam; }
diff --git a/Device/ProDetector/DetectionProperties.h b/Device/ProDetector/DetectionProperties.h
index 7a747d60b1e8a62fa83168faf099c3fb57276499..54d789de2d9393a78026a9265d0ea6e31d5473c2 100644
--- a/Device/ProDetector/DetectionProperties.h
+++ b/Device/ProDetector/DetectionProperties.h
@@ -46,7 +46,7 @@ public:
     double analyzerEfficiency() const; //!< will always return positive value
     double analyzerTotalTransmission() const;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     //! Verify if the given analyzer properties are physical
diff --git a/Device/Resolution/ConvolutionDetectorResolution.h b/Device/Resolution/ConvolutionDetectorResolution.h
index be0f2070399600ea885e6e73558a3c87d7c302d0..1cbc74895f45c50b4263a4c0b20677614e63a53e 100644
--- a/Device/Resolution/ConvolutionDetectorResolution.h
+++ b/Device/Resolution/ConvolutionDetectorResolution.h
@@ -45,7 +45,7 @@ public:
 
     virtual ConvolutionDetectorResolution* clone() const;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     const IResolutionFunction2D* getResolutionFunction2D() const;
 
diff --git a/Device/Resolution/ResolutionFunction2DGaussian.h b/Device/Resolution/ResolutionFunction2DGaussian.h
index aa41d02e86316193bcf691fedc2ffe68125b396e..2ce7bdc1f269484c77ec1688edb4317054e0775c 100644
--- a/Device/Resolution/ResolutionFunction2DGaussian.h
+++ b/Device/Resolution/ResolutionFunction2DGaussian.h
@@ -31,7 +31,7 @@ public:
         return new ResolutionFunction2DGaussian(m_sigma_x, m_sigma_y);
     }
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getSigmaX() const { return m_sigma_x; }
     double getSigmaY() const { return m_sigma_y; }
diff --git a/Fit/Adapter/MinimizerAdapter.h b/Fit/Adapter/MinimizerAdapter.h
index 442b8393567b1e5f02d53f32e943d4e1ec7f94dd..1a4c592bc60efa4c780eaae446220b67539648f3 100644
--- a/Fit/Adapter/MinimizerAdapter.h
+++ b/Fit/Adapter/MinimizerAdapter.h
@@ -52,14 +52,14 @@ public:
                                                mumufit::Parameters parameters) override;
 
     //! Returns name of the minimizer.
-    std::string minimizerName() const final;
+    std::string minimizerName() const override;
 
     //! Returns name of the minimization algorithm.
-    std::string algorithmName() const final;
+    std::string algorithmName() const override;
 
     void setParameters(const mumufit::Parameters& parameters);
 
-    double minValue() const final;
+    double minValue() const override;
 
     MinimizerOptions& options() { return m_options; }
     const MinimizerOptions& options() const { return m_options; }
@@ -74,7 +74,7 @@ public:
     virtual std::map<std::string, std::string> statusMap() const;
 
     //! Sets option string to the minimizer
-    void setOptions(const std::string& optionString) final;
+    void setOptions(const std::string& optionString) override;
 
 protected:
     MinimizerAdapter(const MinimizerInfo& minimizerInfo);
diff --git a/Fit/Minimizer/TestMinimizer.h b/Fit/Minimizer/TestMinimizer.h
index cc25f51f7480749814c55580a38546a64c6d1edd..52a83c28f3f396423a02c01ed3f63985e035d171 100644
--- a/Fit/Minimizer/TestMinimizer.h
+++ b/Fit/Minimizer/TestMinimizer.h
@@ -29,8 +29,8 @@ public:
     TestMinimizer();
     ~TestMinimizer() override;
 
-    std::string minimizerName() const final;
-    std::string algorithmName() const final { return ""; }
+    std::string minimizerName() const override;
+    std::string algorithmName() const override { return ""; }
 
     mumufit::MinimizerResult minimize_scalar(fcn_scalar_t fcn,
                                              mumufit::Parameters parameters) override;
diff --git a/GUI/coregui/Models/InstrumentItems.h b/GUI/coregui/Models/InstrumentItems.h
index 23d91eaf4554c680d2837dfaf0494bde9201bdc9..b4d4b640f3c0df5fe7035d4d9fb8d0c4e3c75fd6 100644
--- a/GUI/coregui/Models/InstrumentItems.h
+++ b/GUI/coregui/Models/InstrumentItems.h
@@ -84,7 +84,7 @@ public:
     bool alignedWith(const RealDataItem* item) const override;
     virtual QString defaultName() const override;
 
-    std::unique_ptr<IUnitConverter> createUnitConverter() const final;
+    std::unique_ptr<IUnitConverter> createUnitConverter() const override;
 };
 
 
@@ -116,7 +116,7 @@ public:
     void updateToRealData(const RealDataItem* item) override;
     virtual QString defaultName() const override;
 
-    std::unique_ptr<IUnitConverter> createUnitConverter() const final;
+    std::unique_ptr<IUnitConverter> createUnitConverter() const override;
 };
 
 
@@ -129,7 +129,7 @@ public:
     void updateToRealData(const RealDataItem* item) override;
     virtual QString defaultName() const override;
 
-    std::unique_ptr<IUnitConverter> createUnitConverter() const final;
+    std::unique_ptr<IUnitConverter> createUnitConverter() const override;
 };
 
 
@@ -151,7 +151,7 @@ public:
     // after ISimulation gets createUnitConverter method
     std::unique_ptr<DepthProbeSimulation> createSimulation() const;
 
-    std::unique_ptr<IUnitConverter> createUnitConverter() const final;
+    std::unique_ptr<IUnitConverter> createUnitConverter() const override;
 };
 
 #endif // BORNAGAIN_GUI_COREGUI_MODELS_INSTRUMENTITEMS_H
diff --git a/Param/Distrib/Distributions.h b/Param/Distrib/Distributions.h
index fe4c2250ba2bca8db0ff6a38fba53fba2070774a..b38d62bdd2a19b7b5608aae04bbaf8cead75c0a3 100644
--- a/Param/Distrib/Distributions.h
+++ b/Param/Distrib/Distributions.h
@@ -91,20 +91,20 @@ public:
     DistributionGate(double min, double max);
     DistributionGate();
 
-    DistributionGate* clone() const final { return new DistributionGate(m_min, m_max); }
+    DistributionGate* clone() const override { return new DistributionGate(m_min, m_max); }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final { return (m_min + m_max) / 2.0; }
+    double probabilityDensity(double x) const override;
+    double getMean() const override { return (m_min + m_max) / 2.0; }
     double lowerBound() const { return m_min; }
     double upperBound() const { return m_max; }
 
     //! Returns list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     const double& m_min;
@@ -124,19 +124,19 @@ public:
     DistributionLorentz(double mean, double hwhm);
     DistributionLorentz();
 
-    DistributionLorentz* clone() const final { return new DistributionLorentz(m_mean, m_hwhm); }
+    DistributionLorentz* clone() const override { return new DistributionLorentz(m_mean, m_hwhm); }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final { return m_mean; }
+    double probabilityDensity(double x) const override;
+    double getMean() const override { return m_mean; }
     double getHWHM() const { return m_hwhm; }
 
     //! generate list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     const double& m_mean;
@@ -156,22 +156,22 @@ public:
     DistributionGaussian(double mean, double std_dev);
     DistributionGaussian();
 
-    DistributionGaussian* clone() const final
+    DistributionGaussian* clone() const override
     {
         return new DistributionGaussian(m_mean, m_std_dev);
     }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final { return m_mean; }
+    double probabilityDensity(double x) const override;
+    double getMean() const override { return m_mean; }
     double getStdDev() const { return m_std_dev; }
 
     //! generate list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     const double& m_mean;
@@ -191,25 +191,25 @@ public:
     DistributionLogNormal(double median, double scale_param);
     DistributionLogNormal() = delete;
 
-    DistributionLogNormal* clone() const final
+    DistributionLogNormal* clone() const override
     {
         return new DistributionLogNormal(m_median, m_scale_param);
     }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final;
+    double probabilityDensity(double x) const override;
+    double getMean() const override;
     double getMedian() const { return m_median; }
     double getScalePar() const { return m_scale_param; }
 
     //! generate list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    virtual void setUnits(const std::string& units);
+    void setUnits(const std::string& units) override;
 
 private:
     const double& m_median;
@@ -229,19 +229,19 @@ public:
     DistributionCosine(double mean, double sigma);
     DistributionCosine();
 
-    DistributionCosine* clone() const final { return new DistributionCosine(m_mean, m_sigma); }
+    DistributionCosine* clone() const override { return new DistributionCosine(m_mean, m_sigma); }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final { return m_mean; }
+    double probabilityDensity(double x) const override;
+    double getMean() const override { return m_mean; }
     double getSigma() const { return m_sigma; }
 
     //! generate list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     const double& m_mean;
@@ -261,24 +261,24 @@ public:
     DistributionTrapezoid(double center, double left, double middle, double right);
     DistributionTrapezoid();
 
-    DistributionTrapezoid* clone() const final
+    DistributionTrapezoid* clone() const override
     {
         return new DistributionTrapezoid(m_center, m_left, m_middle, m_right);
     }
 
-    double probabilityDensity(double x) const final;
-    double getMean() const final { return m_center; }
+    double probabilityDensity(double x) const override;
+    double getMean() const override { return m_center; }
     double getLeftWidth() const { return m_left; }
     double getMiddleWidth() const { return m_middle; }
     double getRightWidth() const { return m_right; }
 
     //! generate list of sample values
-    virtual std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
-                                                  const RealLimits& limits = RealLimits()) const;
+    std::vector<double> equidistantPoints(size_t nbr_samples, double sigma_factor,
+                                          const RealLimits& limits = RealLimits()) const override;
 
-    bool isDelta() const final;
+    bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
     void adjustLimitsToNonZeroSamples(double& min, double& max, size_t nbr_samples) const;
diff --git a/Sample/Aggregate/InterferenceFunctionNone.h b/Sample/Aggregate/InterferenceFunctionNone.h
index 68150a98ed7152c242647fba0c575523dee977d5..f323fdff685dca1d132b1b243a521c12b5a4eb4e 100644
--- a/Sample/Aggregate/InterferenceFunctionNone.h
+++ b/Sample/Aggregate/InterferenceFunctionNone.h
@@ -24,12 +24,12 @@ class InterferenceFunctionNone : public IInterferenceFunction {
 public:
     InterferenceFunctionNone();
 
-    InterferenceFunctionNone* clone() const final;
+    InterferenceFunctionNone* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
 private:
-    double iff_without_dw(const kvector_t q) const final;
+    double iff_without_dw(const kvector_t q) const override;
 };
 
 #endif // BORNAGAIN_SAMPLE_AGGREGATE_INTERFERENCEFUNCTIONNONE_H
diff --git a/Sample/Aggregate/InterferenceFunctionRadialParaCrystal.h b/Sample/Aggregate/InterferenceFunctionRadialParaCrystal.h
index 7f32d1761db4595927f6438f5125ef460ffd98e7..f4e61ca1e9827d6f4b99973db2cdc137673302df 100644
--- a/Sample/Aggregate/InterferenceFunctionRadialParaCrystal.h
+++ b/Sample/Aggregate/InterferenceFunctionRadialParaCrystal.h
@@ -25,9 +25,9 @@
 class InterferenceFunctionRadialParaCrystal : public IInterferenceFunction {
 public:
     InterferenceFunctionRadialParaCrystal(double peak_distance, double damping_length);
-    InterferenceFunctionRadialParaCrystal* clone() const final;
+    InterferenceFunctionRadialParaCrystal* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     void setKappa(double kappa);
     double kappa() const;
@@ -43,12 +43,12 @@ public:
 
     double dampingLength() const { return m_damping_length; }
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
     double randomSample() const { return m_pdf->createSampler()->randomSample(); }
 
 private:
-    double iff_without_dw(const kvector_t q) const final;
+    double iff_without_dw(const kvector_t q) const override;
     void init_parameters();
 
     double m_peak_distance;  //!< the distance to the first neighbor peak
diff --git a/Sample/Aggregate/InterferenceFunctionTwin.h b/Sample/Aggregate/InterferenceFunctionTwin.h
index d4429e961ef56b8a4fcb6201ad9a7a82760aa0d2..abfb3a2318bec3282423a67fe11b99efdfeb69c4 100644
--- a/Sample/Aggregate/InterferenceFunctionTwin.h
+++ b/Sample/Aggregate/InterferenceFunctionTwin.h
@@ -25,16 +25,16 @@ class InterferenceFunctionTwin : public IInterferenceFunction {
 public:
     InterferenceFunctionTwin(const kvector_t& direction, double mean_distance, double std_dev);
 
-    InterferenceFunctionTwin* clone() const final;
+    InterferenceFunctionTwin* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     kvector_t direction() const;
     double meanDistance() const;
     double stdDev() const;
 
 private:
-    double iff_without_dw(const kvector_t q) const final;
+    double iff_without_dw(const kvector_t q) const override;
 
     kvector_t m_direction;
     double m_distance;
diff --git a/Sample/Correlations/FTDecay1D.h b/Sample/Correlations/FTDecay1D.h
index 087f370b886cbcf4a1d420168970e227897119fc..18a2deab0f397cc388bf808a55307a53acc95804 100644
--- a/Sample/Correlations/FTDecay1D.h
+++ b/Sample/Correlations/FTDecay1D.h
@@ -49,8 +49,8 @@ public:
     FTDecayFunction1DCauchy(double decay_length);
 
     FTDecayFunction1DCauchy* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 };
 
 //! One-dimensional Gauss decay function in reciprocal space;
@@ -62,8 +62,8 @@ public:
     FTDecayFunction1DGauss(double decay_length);
 
     FTDecayFunction1DGauss* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 };
 
 //! One-dimensional triangle decay function in reciprocal space;
@@ -75,8 +75,8 @@ public:
     FTDecayFunction1DTriangle(double decay_length);
 
     FTDecayFunction1DTriangle* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 };
 
 //! One-dimensional pseudo-Voigt decay function in reciprocal space;
@@ -88,8 +88,8 @@ public:
     FTDecayFunction1DVoigt(double decay_length, double eta);
 
     FTDecayFunction1DVoigt* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
     double eEta() const { return m_eta; }
 
 private:
diff --git a/Sample/Correlations/FTDecay2D.h b/Sample/Correlations/FTDecay2D.h
index c1ab026d2ec0cbabee177a6ea8091f25fded5b26..7a3aa16bcd6307d5a05fac5f87b0c83b31cb2543 100644
--- a/Sample/Correlations/FTDecay2D.h
+++ b/Sample/Correlations/FTDecay2D.h
@@ -68,8 +68,8 @@ public:
     FTDecayFunction2DCauchy(double decay_length_x, double decay_length_y, double gamma);
 
     FTDecayFunction2DCauchy* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 };
 
 //! Two-dimensional Gauss decay function in reciprocal space;
@@ -82,8 +82,8 @@ public:
     FTDecayFunction2DGauss(double decay_length_x, double decay_length_y, double gamma);
 
     FTDecayFunction2DGauss* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 };
 
 //! Two-dimensional pseudo-Voigt decay function in reciprocal space;
@@ -95,8 +95,8 @@ public:
     FTDecayFunction2DVoigt(double decay_length_x, double decay_length_y, double gamma, double eta);
 
     FTDecayFunction2DVoigt* clone() const;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
     double eta() const { return m_eta; }
 
 protected:
diff --git a/Sample/Correlations/FTDistributions1D.h b/Sample/Correlations/FTDistributions1D.h
index 51dacfdc58b486451e0941cf9b6502095045774a..365d1d1a424400d54ec5f6747f605ff92981e928 100644
--- a/Sample/Correlations/FTDistributions1D.h
+++ b/Sample/Correlations/FTDistributions1D.h
@@ -59,13 +59,13 @@ public:
     FTDistribution1DCauchy(const std::vector<double> P);
     FTDistribution1DCauchy(double omega);
 
-    FTDistribution1DCauchy* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DCauchy* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 };
 
@@ -78,13 +78,13 @@ public:
     FTDistribution1DGauss(const std::vector<double> P);
     FTDistribution1DGauss(double omega);
 
-    FTDistribution1DGauss* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DGauss* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 };
 
@@ -97,13 +97,13 @@ public:
     FTDistribution1DGate(const std::vector<double> P);
     FTDistribution1DGate(double omega);
 
-    FTDistribution1DGate* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DGate* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 };
 
@@ -116,13 +116,13 @@ public:
     FTDistribution1DTriangle(const std::vector<double> P);
     FTDistribution1DTriangle(double omega);
 
-    FTDistribution1DTriangle* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DTriangle* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 };
 
@@ -136,13 +136,13 @@ public:
     FTDistribution1DCosine(const std::vector<double> P);
     FTDistribution1DCosine(double omega);
 
-    FTDistribution1DCosine* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DCosine* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 };
 
@@ -156,14 +156,14 @@ public:
     FTDistribution1DVoigt(const std::vector<double> P);
     FTDistribution1DVoigt(double omega, double eta);
 
-    FTDistribution1DVoigt* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double q) const final;
+    FTDistribution1DVoigt* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double q) const override;
     double eta() const { return m_eta; }
 
-    double qSecondDerivative() const final;
+    double qSecondDerivative() const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution1DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution1DSampler> createSampler() const override;
 #endif
 
 protected:
diff --git a/Sample/Correlations/FTDistributions2D.h b/Sample/Correlations/FTDistributions2D.h
index 69e685c1ec8a89918cb288207e2a638c0998bdea..d4d2d1e2ff422ab47994fa63edb603c146a6345b 100644
--- a/Sample/Correlations/FTDistributions2D.h
+++ b/Sample/Correlations/FTDistributions2D.h
@@ -67,11 +67,11 @@ public:
     FTDistribution2DCauchy(const std::vector<double> P);
     FTDistribution2DCauchy(double omega_x, double omega_y, double gamma);
 
-    FTDistribution2DCauchy* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    FTDistribution2DCauchy* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution2DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution2DSampler> createSampler() const override;
 #endif
 };
 
@@ -85,11 +85,11 @@ public:
     FTDistribution2DGauss(const std::vector<double> P);
     FTDistribution2DGauss(double omega_x, double omega_y, double gamma);
 
-    FTDistribution2DGauss* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    FTDistribution2DGauss* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution2DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution2DSampler> createSampler() const override;
 #endif
 };
 
@@ -103,11 +103,11 @@ public:
     FTDistribution2DGate(const std::vector<double> P);
     FTDistribution2DGate(double omega_x, double omega_y, double gamma);
 
-    FTDistribution2DGate* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    FTDistribution2DGate* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution2DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution2DSampler> createSampler() const override;
 #endif
 };
 
@@ -121,11 +121,11 @@ public:
     FTDistribution2DCone(const std::vector<double> P);
     FTDistribution2DCone(double omega_x, double omega_y, double gamma);
 
-    FTDistribution2DCone* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    FTDistribution2DCone* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
 #ifndef SWIG
-    std::unique_ptr<IDistribution2DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution2DSampler> createSampler() const override;
 #endif
 };
 
@@ -138,12 +138,12 @@ public:
     FTDistribution2DVoigt(const std::vector<double> P);
     FTDistribution2DVoigt(double omega_x, double omega_y, double gamma, double eta);
 
-    FTDistribution2DVoigt* clone() const final;
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
-    double evaluate(double qx, double qy) const final;
+    FTDistribution2DVoigt* clone() const override;
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
+    double evaluate(double qx, double qy) const override;
     double eta() const { return m_eta; }
 #ifndef SWIG
-    std::unique_ptr<IDistribution2DSampler> createSampler() const final;
+    std::unique_ptr<IDistribution2DSampler> createSampler() const override;
 #endif
 
 protected:
diff --git a/Sample/Correlations/IDistribution1DSampler.h b/Sample/Correlations/IDistribution1DSampler.h
index bf3674bd2982ba1027366b37b03eaedc67176257..b3aac351d6e32f1312d00d2b4afbe0328d7a7ee4 100644
--- a/Sample/Correlations/IDistribution1DSampler.h
+++ b/Sample/Correlations/IDistribution1DSampler.h
@@ -31,7 +31,7 @@ public:
 class Distribution1DCauchySampler : public IDistribution1DSampler {
 public:
     Distribution1DCauchySampler(double lambda) : m_lambda(lambda) {}
-    double randomSample() const final;
+    double randomSample() const override;
 
 private:
     double m_lambda;
@@ -40,7 +40,7 @@ private:
 class Distribution1DGaussSampler : public IDistribution1DSampler {
 public:
     Distribution1DGaussSampler(double mean, double stddev) : m_mean(mean), m_stddev(stddev) {}
-    double randomSample() const final;
+    double randomSample() const override;
 
 private:
     double m_mean, m_stddev;
@@ -49,7 +49,7 @@ private:
 class Distribution1DGateSampler : public IDistribution1DSampler {
 public:
     Distribution1DGateSampler(double a, double b) : m_a(a), m_b(b) {}
-    double randomSample() const final;
+    double randomSample() const override;
 
 private:
     double m_a, m_b; // the left and right limits of the Gate (Uniform) distribution
@@ -58,7 +58,7 @@ private:
 class Distribution1DTriangleSampler : public IDistribution1DSampler {
 public:
     Distribution1DTriangleSampler(double omega) : m_omega(omega) {}
-    double randomSample() const final;
+    double randomSample() const override;
 
 private:
     double m_omega; // half the base of the symmetrical Triangle distribution
@@ -67,7 +67,7 @@ private:
 class Distribution1DCosineSampler : public IDistribution1DSampler {
 public:
     Distribution1DCosineSampler(double omega) : m_omega(omega) {}
-    double randomSample() const final;
+    double randomSample() const override;
 
 private:
     double m_omega;
diff --git a/Sample/Correlations/IDistribution2DSampler.h b/Sample/Correlations/IDistribution2DSampler.h
index 136debcf8ca3ea5f003f8512070acc3be9da1393..4a19d6def82355b0c3b6865dd63a770a19d1ef5f 100644
--- a/Sample/Correlations/IDistribution2DSampler.h
+++ b/Sample/Correlations/IDistribution2DSampler.h
@@ -36,7 +36,7 @@ public:
         : m_omega_x(omega_x), m_omega_y(omega_y)
     {
     }
-    std::pair<double, double> randomSample() const final;
+    std::pair<double, double> randomSample() const override;
 
 private:
     double m_omega_x, m_omega_y;
@@ -48,7 +48,7 @@ public:
         : m_omega_x(omega_x), m_omega_y(omega_y)
     {
     }
-    std::pair<double, double> randomSample() const final;
+    std::pair<double, double> randomSample() const override;
 
 private:
     double m_omega_x, m_omega_y;
@@ -60,7 +60,7 @@ public:
         : m_omega_x(omega_x), m_omega_y(omega_y)
     {
     }
-    std::pair<double, double> randomSample() const final;
+    std::pair<double, double> randomSample() const override;
 
 private:
     double m_omega_x, m_omega_y;
@@ -72,7 +72,7 @@ public:
         : m_omega_x(omega_x), m_omega_y(omega_y)
     {
     }
-    std::pair<double, double> randomSample() const final;
+    std::pair<double, double> randomSample() const override;
 
 private:
     double m_omega_x, m_omega_y;
diff --git a/Sample/Fresnel/MatrixFresnelMap.h b/Sample/Fresnel/MatrixFresnelMap.h
index 26968eb4862bbc6ceaea3ceb92e14fc2af9c88f1..b1036324e0d5c8a2d107e79d27d3bf53c8198361 100644
--- a/Sample/Fresnel/MatrixFresnelMap.h
+++ b/Sample/Fresnel/MatrixFresnelMap.h
@@ -43,9 +43,9 @@ public:
     MatrixFresnelMap& operator=(const MatrixFresnelMap& other) = delete;
 
     std::unique_ptr<const ILayerRTCoefficients>
-    getOutCoefficients(const SimulationElement& sim_element, size_t layer_index) const final;
+    getOutCoefficients(const SimulationElement& sim_element, size_t layer_index) const override;
 
-    void setSlices(const std::vector<Slice>& slices) final;
+    void setSlices(const std::vector<Slice>& slices) override;
 
 private:
     //! Provides a hash function for a 3-vector of doubles, for use in MatrixFresnelMap.
diff --git a/Sample/HardParticle/FormFactorAnisoPyramid.h b/Sample/HardParticle/FormFactorAnisoPyramid.h
index 14d2e05d4adf41f787f629e43adfeb70adae99ca..5979dfc196bd66f3a2925e071b31ad41a555a159 100644
--- a/Sample/HardParticle/FormFactorAnisoPyramid.h
+++ b/Sample/HardParticle/FormFactorAnisoPyramid.h
@@ -29,7 +29,7 @@ public:
     {
         return new FormFactorAnisoPyramid(m_length, m_width, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getWidth() const { return m_width; }
@@ -38,9 +38,9 @@ public:
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorBar.h b/Sample/HardParticle/FormFactorBar.h
index 2f186b519d6c4365912a4c85f4fac23d127e3d15..da6d0a293db0f965a00ddbc6c24a7b14644e3467 100644
--- a/Sample/HardParticle/FormFactorBar.h
+++ b/Sample/HardParticle/FormFactorBar.h
@@ -28,11 +28,11 @@ class FormFactorBarGauss : public IProfileRectangularRipple {
 public:
     FormFactorBarGauss(const std::vector<double> P);
     FormFactorBarGauss(double length, double width, double height);
-    FormFactorBarGauss* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorBarGauss* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 //! The form factor of an elongated, with Lorentz form factor in elongation direction.
@@ -41,11 +41,11 @@ class FormFactorBarLorentz : public IProfileRectangularRipple {
 public:
     FormFactorBarLorentz(const std::vector<double> P);
     FormFactorBarLorentz(double length, double width, double height);
-    FormFactorBarLorentz* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorBarLorentz* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 #endif // BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORBAR_H
diff --git a/Sample/HardParticle/FormFactorBox.h b/Sample/HardParticle/FormFactorBox.h
index 3371459f582d98785e7c13f2c83b667fda37cbde..5152257095a51871ffdd7207fcc3b6daee25fa92 100644
--- a/Sample/HardParticle/FormFactorBox.h
+++ b/Sample/HardParticle/FormFactorBox.h
@@ -25,23 +25,23 @@ public:
     FormFactorBox(const std::vector<double> P);
     FormFactorBox(double length, double width, double height);
 
-    FormFactorBox* clone() const final { return new FormFactorBox(m_length, m_width, m_height); }
+    FormFactorBox* clone() const override { return new FormFactorBox(m_length, m_width, m_height); }
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getWidth() const { return m_width; }
 
-    double volume() const final { return m_length * m_height * m_width; }
-    double radialExtension() const final { return m_length / 2.0; }
-    complex_t evaluate_for_q(cvector_t q) const final;
+    double volume() const override { return m_length * m_height * m_width; }
+    double radialExtension() const override { return m_length / 2.0; }
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
-    double height() const final { return m_height; }
+    void onChange() override;
+    double height() const override { return m_height; }
 
 private:
     const double& m_length;
diff --git a/Sample/HardParticle/FormFactorCantellatedCube.h b/Sample/HardParticle/FormFactorCantellatedCube.h
index 9b589a61483a121df94cacdec55c342d42ac0386..7fec2e8f18b41fd7baefef37a17ba62a7cd12c6f 100644
--- a/Sample/HardParticle/FormFactorCantellatedCube.h
+++ b/Sample/HardParticle/FormFactorCantellatedCube.h
@@ -29,13 +29,13 @@ public:
     {
         return new FormFactorCantellatedCube(m_length, m_removed_length);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getRemovedLength() const { return m_removed_length; }
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorCone.h b/Sample/HardParticle/FormFactorCone.h
index e7f63af8ed77c99821484e830304599a8d42eeb5..c1a7effec99a93239fc4c5a1b3c619578951d6c0 100644
--- a/Sample/HardParticle/FormFactorCone.h
+++ b/Sample/HardParticle/FormFactorCone.h
@@ -25,22 +25,22 @@ public:
     FormFactorCone(const std::vector<double> P);
     FormFactorCone(double radius, double height, double alpha);
 
-    FormFactorCone* clone() const final { return new FormFactorCone(m_radius, m_height, m_alpha); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorCone* clone() const override { return new FormFactorCone(m_radius, m_height, m_alpha); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getAlpha() const { return m_alpha; }
     double getRadius() const { return m_radius; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     complex_t Integrand(double Z) const;
diff --git a/Sample/HardParticle/FormFactorCone6.h b/Sample/HardParticle/FormFactorCone6.h
index f61aa8f836d757062cdbf12aaf1e20e6a5db0bd0..dc0acb4ffd7a9d92db70383f03b1a1a0921df672 100644
--- a/Sample/HardParticle/FormFactorCone6.h
+++ b/Sample/HardParticle/FormFactorCone6.h
@@ -29,7 +29,7 @@ public:
     {
         return new FormFactorCone6(m_base_edge, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getBaseEdge() const { return m_base_edge; }
     double getHeight() const { return m_height; }
@@ -37,9 +37,9 @@ public:
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorCosineRipple.h b/Sample/HardParticle/FormFactorCosineRipple.h
index 205bff8a2a9aaceedf798729a767f5ff722a2c9e..e4ede199c8e3c3560ea318f8c7e707854358dde2 100644
--- a/Sample/HardParticle/FormFactorCosineRipple.h
+++ b/Sample/HardParticle/FormFactorCosineRipple.h
@@ -23,11 +23,11 @@ class FormFactorCosineRippleBox : public ICosineRipple {
 public:
     FormFactorCosineRippleBox(const std::vector<double> P);
     FormFactorCosineRippleBox(double length, double width, double height);
-    FormFactorCosineRippleBox* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorCosineRippleBox* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 //! The form factor for a cosine ripple, with Gaussian profile in elongation direction.
@@ -36,11 +36,11 @@ class FormFactorCosineRippleGauss : public ICosineRipple {
 public:
     FormFactorCosineRippleGauss(const std::vector<double> P);
     FormFactorCosineRippleGauss(double length, double width, double height);
-    FormFactorCosineRippleGauss* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorCosineRippleGauss* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 //! The form factor for a cosine ripple, with Lorentz form factor in elongation direction.
@@ -49,11 +49,11 @@ class FormFactorCosineRippleLorentz : public ICosineRipple {
 public:
     FormFactorCosineRippleLorentz(const std::vector<double> P);
     FormFactorCosineRippleLorentz(double length, double width, double height);
-    FormFactorCosineRippleLorentz* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorCosineRippleLorentz* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 #endif // BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORCOSINERIPPLE_H
diff --git a/Sample/HardParticle/FormFactorCuboctahedron.h b/Sample/HardParticle/FormFactorCuboctahedron.h
index c50cae166634140b469605b12c342edcac368955..690ebf170470fa5ee29ac9562119613e6c2e77ce 100644
--- a/Sample/HardParticle/FormFactorCuboctahedron.h
+++ b/Sample/HardParticle/FormFactorCuboctahedron.h
@@ -29,7 +29,7 @@ public:
     {
         return new FormFactorCuboctahedron(m_length, m_height, m_height_ratio, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getHeight() const { return m_height; }
@@ -38,9 +38,9 @@ public:
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorCylinder.h b/Sample/HardParticle/FormFactorCylinder.h
index 827a70f68e1726ca30c9389add3a167b8bc99568..2ce0d5de923676508874ca318a7a6ebf907f7d62 100644
--- a/Sample/HardParticle/FormFactorCylinder.h
+++ b/Sample/HardParticle/FormFactorCylinder.h
@@ -25,21 +25,21 @@ public:
     FormFactorCylinder(const std::vector<double> P);
     FormFactorCylinder(double radius, double height);
 
-    FormFactorCylinder* clone() const final { return new FormFactorCylinder(m_radius, m_height); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorCylinder* clone() const override { return new FormFactorCylinder(m_radius, m_height); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getRadius() const { return m_radius; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/FormFactorDodecahedron.h b/Sample/HardParticle/FormFactorDodecahedron.h
index 14957390458937ac8176c3cc17b4886f363206e1..92fcd03ef2d078bc98ed979378fc54054bca9008 100644
--- a/Sample/HardParticle/FormFactorDodecahedron.h
+++ b/Sample/HardParticle/FormFactorDodecahedron.h
@@ -25,13 +25,13 @@ public:
     FormFactorDodecahedron(const std::vector<double> P);
     FormFactorDodecahedron(double edge);
 
-    FormFactorDodecahedron* clone() const final { return new FormFactorDodecahedron(m_edge); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorDodecahedron* clone() const override { return new FormFactorDodecahedron(m_edge); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getEdge() const { return m_edge; }
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorDot.h b/Sample/HardParticle/FormFactorDot.h
index 1af3368efea9a278ade71304dabfda43e7d54337..aab06cfa92d785297a93843e765618b77d8c1020 100644
--- a/Sample/HardParticle/FormFactorDot.h
+++ b/Sample/HardParticle/FormFactorDot.h
@@ -25,20 +25,20 @@ public:
     FormFactorDot(const std::vector<double> P);
     FormFactorDot(double radius);
 
-    FormFactorDot* clone() const final { return new FormFactorDot(m_radius); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorDot* clone() const override { return new FormFactorDot(m_radius); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadius() const { return m_radius; }
 
-    double radialExtension() const final { return 0; }
+    double radialExtension() const override { return 0; }
 
-    double bottomZ(const IRotation&) const final { return 0; }
-    double topZ(const IRotation&) const final { return 0; }
+    double bottomZ(const IRotation&) const override { return 0; }
+    double topZ(const IRotation&) const override { return 0; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    bool canSliceAnalytically(const IRotation&) const final { return false; }
+    bool canSliceAnalytically(const IRotation&) const override { return false; }
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/FormFactorEllipsoidalCylinder.h b/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
index 154415359aa6468ea40ef43e34c77aa8d0ddb540..cfc89d022201df32b5ff4257f6e9e2dbc5dde286 100644
--- a/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
+++ b/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
@@ -29,21 +29,21 @@ public:
     {
         return new FormFactorEllipsoidalCylinder(m_radius_x, m_radius_y, m_height);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadiusX() const { return m_radius_x; }
     double getRadiusY() const { return m_radius_y; }
     double getHeight() const { return m_height; }
 
-    double radialExtension() const final;
+    double radialExtension() const override;
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_radius_x;
diff --git a/Sample/HardParticle/FormFactorFullSphere.h b/Sample/HardParticle/FormFactorFullSphere.h
index 2f22ea0523b019aa15860c1eb5e93dde0584b471..068b2faaa2c30d678c8943d449f9ed4c268cb72e 100644
--- a/Sample/HardParticle/FormFactorFullSphere.h
+++ b/Sample/HardParticle/FormFactorFullSphere.h
@@ -29,25 +29,25 @@ public:
     {
         return new FormFactorFullSphere(m_radius, m_position_at_center);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadius() const { return m_radius; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    double bottomZ(const IRotation& rotation) const final;
+    double bottomZ(const IRotation& rotation) const override;
 
-    double topZ(const IRotation& rotation) const final;
+    double topZ(const IRotation& rotation) const override;
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    bool canSliceAnalytically(const IRotation&) const final { return true; }
+    bool canSliceAnalytically(const IRotation&) const override { return true; }
 
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/FormFactorFullSpheroid.h b/Sample/HardParticle/FormFactorFullSpheroid.h
index 900497ac91384a28e886f100e91848c6dd4541e1..93d0f140da08e33d1e300d5eb2d07e8afd5a8548 100644
--- a/Sample/HardParticle/FormFactorFullSpheroid.h
+++ b/Sample/HardParticle/FormFactorFullSpheroid.h
@@ -29,20 +29,20 @@ public:
     {
         return new FormFactorFullSpheroid(m_radius, m_height);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getRadius() const { return m_radius; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_radius;
diff --git a/Sample/HardParticle/FormFactorHemiEllipsoid.h b/Sample/HardParticle/FormFactorHemiEllipsoid.h
index 903947311c9c9a60e3b745e5dcf3c9b900786609..a37ce1a7be13118daa0e8b06f6c0b08e2fbbb738 100644
--- a/Sample/HardParticle/FormFactorHemiEllipsoid.h
+++ b/Sample/HardParticle/FormFactorHemiEllipsoid.h
@@ -31,18 +31,18 @@ public:
     {
         return new FormFactorHemiEllipsoid(m_radius_x, m_radius_y, m_height);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getRadiusX() const { return m_radius_x; }
     double getRadiusY() const { return m_radius_y; }
 
-    double radialExtension() const final;
+    double radialExtension() const override;
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     complex_t Integrand(double Z) const;
diff --git a/Sample/HardParticle/FormFactorHollowSphere.h b/Sample/HardParticle/FormFactorHollowSphere.h
index fa6f3ff0b052c7b7bb5298ff6f6f579b606e1d02..d04fee540c7c1216781d45ef717bff99058d3e32 100644
--- a/Sample/HardParticle/FormFactorHollowSphere.h
+++ b/Sample/HardParticle/FormFactorHollowSphere.h
@@ -29,14 +29,14 @@ public:
     {
         return new FormFactorHollowSphere(m_mean, m_full_width);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double radialExtension() const final { return m_mean; }
+    double radialExtension() const override { return m_mean; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     bool checkParameters() const;
diff --git a/Sample/HardParticle/FormFactorIcosahedron.h b/Sample/HardParticle/FormFactorIcosahedron.h
index ef5ac6f6d34bd6f3439c65ed9a3c36e197754037..76dcdd8a440c9d469edb0ace2c31e8f0d07cb3b7 100644
--- a/Sample/HardParticle/FormFactorIcosahedron.h
+++ b/Sample/HardParticle/FormFactorIcosahedron.h
@@ -25,13 +25,13 @@ public:
     FormFactorIcosahedron(const std::vector<double> P);
     FormFactorIcosahedron(double edge);
 
-    FormFactorIcosahedron* clone() const final { return new FormFactorIcosahedron(m_edge); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorIcosahedron* clone() const override { return new FormFactorIcosahedron(m_edge); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getEdge() const { return m_edge; }
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorLongBoxGauss.h b/Sample/HardParticle/FormFactorLongBoxGauss.h
index c39b99c0dbd863a4a7227a13672c56bdadf57029..c303c41962ba6ae33238e42cb5088eed94bce391 100644
--- a/Sample/HardParticle/FormFactorLongBoxGauss.h
+++ b/Sample/HardParticle/FormFactorLongBoxGauss.h
@@ -29,20 +29,20 @@ public:
     {
         return new FormFactorLongBoxGauss(m_length, m_width, m_height);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getHeight() const { return m_height; }
     double getWidth() const { return m_width; }
-    double radialExtension() const final { return m_length / 2.0; }
+    double radialExtension() const override { return m_length / 2.0; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_length;
diff --git a/Sample/HardParticle/FormFactorLongBoxLorentz.h b/Sample/HardParticle/FormFactorLongBoxLorentz.h
index 75633706986ea8495b8bf917a0fb08a16e0e2469..ca83b73220a200fda2771ab5718f353a843dde11 100644
--- a/Sample/HardParticle/FormFactorLongBoxLorentz.h
+++ b/Sample/HardParticle/FormFactorLongBoxLorentz.h
@@ -29,21 +29,21 @@ public:
     {
         return new FormFactorLongBoxLorentz(m_length, m_width, m_height);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getHeight() const { return m_height; }
     double getWidth() const { return m_width; }
 
-    double radialExtension() const final { return m_length / 2.0; }
+    double radialExtension() const override { return m_length / 2.0; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_length;
diff --git a/Sample/HardParticle/FormFactorPrism3.h b/Sample/HardParticle/FormFactorPrism3.h
index 24b00b9777bf2ff20436950b0415532b2aedcb8a..0fe5b69897e6e1f1f42b04d1ffe8977e3ebe407c 100644
--- a/Sample/HardParticle/FormFactorPrism3.h
+++ b/Sample/HardParticle/FormFactorPrism3.h
@@ -25,17 +25,17 @@ public:
     FormFactorPrism3(const std::vector<double> P);
     FormFactorPrism3(double base_edge, double height);
 
-    FormFactorPrism3* clone() const final { return new FormFactorPrism3(m_base_edge, m_height); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorPrism3* clone() const override { return new FormFactorPrism3(m_base_edge, m_height); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getBaseEdge() const { return m_base_edge; }
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
-    double height() const final { return m_height; }
+    void onChange() override;
+    double height() const override { return m_height; }
 
 private:
     const double& m_base_edge;
diff --git a/Sample/HardParticle/FormFactorPrism6.h b/Sample/HardParticle/FormFactorPrism6.h
index 3c1456953580466a248779fff08cb1f061d35554..b5cfa9a44ca453b29d7c48cce080d5bba6e8e044 100644
--- a/Sample/HardParticle/FormFactorPrism6.h
+++ b/Sample/HardParticle/FormFactorPrism6.h
@@ -25,17 +25,17 @@ public:
     FormFactorPrism6(const std::vector<double> P);
     FormFactorPrism6(double base_edge, double height);
 
-    FormFactorPrism6* clone() const final { return new FormFactorPrism6(m_base_edge, m_height); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorPrism6* clone() const override { return new FormFactorPrism6(m_base_edge, m_height); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getBaseEdge() const { return m_base_edge; }
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
-    double height() const final { return m_height; }
+    void onChange() override;
+    double height() const override { return m_height; }
 
 private:
     const double& m_base_edge;
diff --git a/Sample/HardParticle/FormFactorPyramid.h b/Sample/HardParticle/FormFactorPyramid.h
index 56ca2d16fe9ff33ea071f883e7dff496d90bbf0e..6962d633cc0551aa4c70c467827d3a6689b51d9b 100644
--- a/Sample/HardParticle/FormFactorPyramid.h
+++ b/Sample/HardParticle/FormFactorPyramid.h
@@ -29,7 +29,7 @@ public:
     {
         return new FormFactorPyramid(m_base_edge, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getBaseEdge() const { return m_base_edge; }
@@ -37,9 +37,9 @@ public:
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorSawtoothRipple.h b/Sample/HardParticle/FormFactorSawtoothRipple.h
index 44a39c8a8118ab701024d51993cef7ba18e70cda..32ad80a5f4186ecec92f5622588911b8696f25d2 100644
--- a/Sample/HardParticle/FormFactorSawtoothRipple.h
+++ b/Sample/HardParticle/FormFactorSawtoothRipple.h
@@ -23,11 +23,11 @@ class FormFactorSawtoothRippleBox : public ISawtoothRipple {
 public:
     FormFactorSawtoothRippleBox(const std::vector<double> P);
     FormFactorSawtoothRippleBox(double length, double width, double height, double asymmetry);
-    FormFactorSawtoothRippleBox* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorSawtoothRippleBox* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 //! The form factor for a cosine ripple, with Gaussian profile in elongation direction.
@@ -36,11 +36,11 @@ class FormFactorSawtoothRippleGauss : public ISawtoothRipple {
 public:
     FormFactorSawtoothRippleGauss(const std::vector<double> P);
     FormFactorSawtoothRippleGauss(double length, double width, double height, double asymmetry);
-    FormFactorSawtoothRippleGauss* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorSawtoothRippleGauss* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 //! The form factor for a cosine ripple, with Lorentz form factor in elongation direction.
@@ -49,11 +49,11 @@ class FormFactorSawtoothRippleLorentz : public ISawtoothRipple {
 public:
     FormFactorSawtoothRippleLorentz(const std::vector<double> P);
     FormFactorSawtoothRippleLorentz(double length, double width, double height, double asymmetry);
-    FormFactorSawtoothRippleLorentz* clone() const final;
-    void accept(INodeVisitor* visitor) const final;
+    FormFactorSawtoothRippleLorentz* clone() const override;
+    void accept(INodeVisitor* visitor) const override;
 
 private:
-    complex_t factor_x(complex_t qx) const final;
+    complex_t factor_x(complex_t qx) const override;
 };
 
 #endif // BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORSAWTOOTHRIPPLE_H
diff --git a/Sample/HardParticle/FormFactorTetrahedron.h b/Sample/HardParticle/FormFactorTetrahedron.h
index e7b774b4e532223ef5b373c0ca12786124a68bed..967b13e60bb94a27af17f282544c74cb2e065372 100644
--- a/Sample/HardParticle/FormFactorTetrahedron.h
+++ b/Sample/HardParticle/FormFactorTetrahedron.h
@@ -29,7 +29,7 @@ public:
     {
         return new FormFactorTetrahedron(m_base_edge, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getBaseEdge() const { return m_base_edge; }
     double getHeight() const { return m_height; }
@@ -37,9 +37,9 @@ public:
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorTruncatedCube.h b/Sample/HardParticle/FormFactorTruncatedCube.h
index 5bac041d20d33d1b34739eb6d397d8c05efdccf3..dc32159ba9801e55240d4e13daa5b0605a9c8b75 100644
--- a/Sample/HardParticle/FormFactorTruncatedCube.h
+++ b/Sample/HardParticle/FormFactorTruncatedCube.h
@@ -29,13 +29,13 @@ public:
     {
         return new FormFactorTruncatedCube(m_length, m_removed_length);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getRemovedLength() const { return m_removed_length; }
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     static const PolyhedralTopology topology;
diff --git a/Sample/HardParticle/FormFactorTruncatedSphere.h b/Sample/HardParticle/FormFactorTruncatedSphere.h
index a8cf3ca102eed0a74fed3ca145f2835c1110087b..cd5570e75b63b3f18af720074f87df635369c481 100644
--- a/Sample/HardParticle/FormFactorTruncatedSphere.h
+++ b/Sample/HardParticle/FormFactorTruncatedSphere.h
@@ -29,21 +29,21 @@ public:
     {
         return new FormFactorTruncatedSphere(m_radius, m_height, m_dh);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getRadius() const { return m_radius; }
     double getRemovedTop() const { return m_dh; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     bool check_initialization() const;
diff --git a/Sample/HardParticle/FormFactorTruncatedSpheroid.h b/Sample/HardParticle/FormFactorTruncatedSpheroid.h
index bda53e5225e0086c2fadba2fbeb12568088719fa..b31818a96068c118c978da27c898cbc418122d33 100644
--- a/Sample/HardParticle/FormFactorTruncatedSpheroid.h
+++ b/Sample/HardParticle/FormFactorTruncatedSpheroid.h
@@ -30,22 +30,22 @@ public:
     {
         return new FormFactorTruncatedSpheroid(m_radius, m_height, m_height_flattening, m_dh);
     }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadius() const { return m_radius; }
     double getHeight() const { return m_height; }
     double getHeightFlattening() const { return m_height_flattening; }
     double getRemovedTop() const { return m_dh; }
 
-    double radialExtension() const final { return m_radius; }
+    double radialExtension() const override { return m_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     IFormFactor* sliceFormFactor(ZLimits limits, const IRotation& rot,
-                                 kvector_t translation) const final;
+                                 kvector_t translation) const override;
 
-    void onChange() final;
+    void onChange() override;
 
 private:
     bool check_initialization() const;
diff --git a/Sample/HardParticle/IFormFactorPolyhedron.h b/Sample/HardParticle/IFormFactorPolyhedron.h
index 39f58abd8eaa27dec13ee53ad6d60e1d05c1addd..0c00fb9fecdc30128210d0a9a6a700464c39aa51 100644
--- a/Sample/HardParticle/IFormFactorPolyhedron.h
+++ b/Sample/HardParticle/IFormFactorPolyhedron.h
@@ -34,14 +34,14 @@ public:
     IFormFactorPolyhedron(const NodeMeta& meta, const std::vector<double>& PValues);
     ~IFormFactorPolyhedron();
 
-    double bottomZ(const IRotation& rotation) const final;
-    double topZ(const IRotation& rotation) const final;
+    double bottomZ(const IRotation& rotation) const override;
+    double topZ(const IRotation& rotation) const override;
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
     complex_t evaluate_centered(cvector_t q) const;
 
-    double volume() const final;
-    double radialExtension() const final;
+    double volume() const override;
+    double radialExtension() const override;
     void assert_platonic() const;
 
 protected:
diff --git a/Sample/HardParticle/IFormFactorPrism.h b/Sample/HardParticle/IFormFactorPrism.h
index 5156501e7ea9350cef6107879baaf5bde520ec78..e8bebfb6e3740bf3235ccf6bdc71a6299f6ebce6 100644
--- a/Sample/HardParticle/IFormFactorPrism.h
+++ b/Sample/HardParticle/IFormFactorPrism.h
@@ -28,8 +28,8 @@ public:
     IFormFactorPrism(const NodeMeta& meta, const std::vector<double>& PValues);
     ~IFormFactorPrism();
 
-    double bottomZ(const IRotation& rotation) const final;
-    double topZ(const IRotation& rotation) const final;
+    double bottomZ(const IRotation& rotation) const override;
+    double topZ(const IRotation& rotation) const override;
 
     complex_t evaluate_for_q(cvector_t q) const override;
     double volume() const override;
diff --git a/Sample/HardParticle/IProfileRipple.h b/Sample/HardParticle/IProfileRipple.h
index 1755717e3b886364f042be1844a3844a4d812198..55000f359b259aaa78d147a257686bf1187eaf18 100644
--- a/Sample/HardParticle/IProfileRipple.h
+++ b/Sample/HardParticle/IProfileRipple.h
@@ -28,9 +28,9 @@ public:
     double getHeight() const { return m_height; }
     double getWidth() const { return m_width; }
 
-    double radialExtension() const final;
+    double radialExtension() const override;
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     const double& m_length;
@@ -49,8 +49,8 @@ public:
     IProfileRectangularRipple(const NodeMeta& meta, const std::vector<double>& PValues);
 
 private:
-    virtual void onChange() final;
-    complex_t factor_yz(complex_t qy, complex_t qz) const final;
+    virtual void onChange() override;
+    complex_t factor_yz(complex_t qy, complex_t qz) const override;
 };
 
 //! Base class for form factors with a cosine ripple profile in the yz plane.
@@ -60,8 +60,8 @@ public:
     ICosineRipple(const NodeMeta& meta, const std::vector<double>& PValues);
 
 private:
-    virtual void onChange() final;
-    complex_t factor_yz(complex_t qy, complex_t qz) const final;
+    virtual void onChange() override;
+    complex_t factor_yz(complex_t qy, complex_t qz) const override;
 };
 
 //! Base class for form factors with a triangular ripple profile in the yz plane.
@@ -76,8 +76,8 @@ protected:
     const double& m_asymmetry;
 
 private:
-    virtual void onChange() final;
-    complex_t factor_yz(complex_t qy, complex_t qz) const final;
+    virtual void onChange() override;
+    complex_t factor_yz(complex_t qy, complex_t qz) const override;
 };
 
 #endif // BORNAGAIN_SAMPLE_HARDPARTICLE_IPROFILERIPPLE_H
diff --git a/Sample/Lattice/Lattice2D.h b/Sample/Lattice/Lattice2D.h
index af0695a787a9dc9db3e37c9d73106abe075da17e..7ef30a3d310804ebe29e3c11e83c4e5219874e6c 100644
--- a/Sample/Lattice/Lattice2D.h
+++ b/Sample/Lattice/Lattice2D.h
@@ -44,7 +44,7 @@ public:
     void setRotationEnabled(bool enabled);
 
 protected:
-    virtual void onChange();
+    virtual void onChange() override;
     double m_xi;
 };
 
@@ -56,12 +56,12 @@ public:
 
     BasicLattice2D* clone() const;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    virtual double length1() const { return m_length1; }
-    virtual double length2() const { return m_length2; }
-    virtual double latticeAngle() const { return m_angle; }
-    virtual double unitCellArea() const;
+    double length1() const override { return m_length1; }
+    double length2() const override { return m_length2; }
+    double latticeAngle() const override { return m_angle; }
+    double unitCellArea() const override;
 
 private:
     double m_length1, m_length2;
@@ -76,12 +76,12 @@ public:
 
     SquareLattice2D* clone() const;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    virtual double length1() const { return m_length; }
-    virtual double length2() const { return m_length; }
-    virtual double latticeAngle() const;
-    virtual double unitCellArea() const;
+    double length1() const override { return m_length; }
+    double length2() const override { return m_length; }
+    double latticeAngle() const override ;
+    double unitCellArea() const override ;
 
 private:
     double m_length;
@@ -95,12 +95,12 @@ public:
 
     HexagonalLattice2D* clone() const;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    virtual double length1() const { return m_length; }
-    virtual double length2() const { return m_length; }
-    virtual double latticeAngle() const;
-    virtual double unitCellArea() const;
+    double length1() const override { return m_length; }
+    double length2() const override { return m_length; }
+    double latticeAngle() const override;
+    double unitCellArea() const override;
 
 private:
     double m_length;
diff --git a/Sample/Material/MagneticMaterialImpl.h b/Sample/Material/MagneticMaterialImpl.h
index 566b68cd1cf157dc128fc2f9c19a46f48a486f3f..c34d515fb004f7ef503ecc690441c088159a7ddd 100644
--- a/Sample/Material/MagneticMaterialImpl.h
+++ b/Sample/Material/MagneticMaterialImpl.h
@@ -41,21 +41,21 @@ public:
     MagneticMaterialImpl* clone() const override = 0;
 
     //! Constructs a material with inverted magnetization
-    MagneticMaterialImpl* inverted() const final;
+    MagneticMaterialImpl* inverted() const override;
 
     //! Indicates whether the interaction with the material is scalar.
     //! This means that different polarization states will be diffracted equally
-    bool isScalarMaterial() const final;
+    bool isScalarMaterial() const override;
 
-    bool isMagneticMaterial() const final;
+    bool isMagneticMaterial() const override;
 
     //! Returns the magnetization (in A/m)
-    kvector_t magnetization() const final;
+    kvector_t magnetization() const override;
 
     //! Returns (\f$ \pi/\lambda^2 \f$ - sld) matrix with magnetization corrections
-    Eigen::Matrix2cd polarizedSubtrSLD(const WavevectorInfo& wavevectors) const final;
+    Eigen::Matrix2cd polarizedSubtrSLD(const WavevectorInfo& wavevectors) const override;
 
-    MagneticMaterialImpl* rotatedMaterial(const Transform3D& transform) const final;
+    MagneticMaterialImpl* rotatedMaterial(const Transform3D& transform) const override;
 
 private:
     void setMagnetization(kvector_t magnetization) { m_magnetization = magnetization; }
diff --git a/Sample/Multilayer/Layer.h b/Sample/Multilayer/Layer.h
index eb03d7f226ceb0b8e74c4ce02724aad97945a771..b06ce65286cda44425934ab740956acb44f37302 100644
--- a/Sample/Multilayer/Layer.h
+++ b/Sample/Multilayer/Layer.h
@@ -31,19 +31,19 @@ public:
 
     ~Layer() override;
 
-    Layer* clone() const final;
+    Layer* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double thickness() const { return m_thickness; }
 
-    const Material* material() const final { return &m_material; }
+    const Material* material() const override { return &m_material; }
 
     void addLayout(const ParticleLayout& decoration);
     size_t numberOfLayouts() const { return m_layouts.size(); }
     std::vector<const ParticleLayout*> layouts() const;
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
     void registerThickness(bool make_registered = true);
 
diff --git a/Sample/Multilayer/MultiLayer.h b/Sample/Multilayer/MultiLayer.h
index fb7b3629c83340605f40feab7f2299c657b11308..c2c9b1ccfe243d88f4e66e514a5b2d88bb576198 100644
--- a/Sample/Multilayer/MultiLayer.h
+++ b/Sample/Multilayer/MultiLayer.h
@@ -43,9 +43,9 @@ public:
     MultiLayer();
     ~MultiLayer() override;
 
-    MultiLayer* clone() const final;
+    MultiLayer* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     size_t numberOfLayers() const { return m_layers.size(); }
 
@@ -69,7 +69,7 @@ public:
     //! Returns the external field applied to the multilayer (units: A/m)
     kvector_t externalField() const { return m_ext_field; }
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
 private:
     //! Adds the layer with simultaneous registration in parent class
diff --git a/Sample/Particle/Crystal.h b/Sample/Particle/Crystal.h
index 2ec801955078a488a2c73d7aec3e4dd693a72cf3..083ff5eb5228d7faf0d3e7ba8928a43db2106f82 100644
--- a/Sample/Particle/Crystal.h
+++ b/Sample/Particle/Crystal.h
@@ -37,9 +37,9 @@ public:
     Crystal(const IParticle& basis, const Lattice3D& lattice, double position_variance = 0);
     ~Crystal();
 
-    Crystal* clone() const final;
+    Crystal* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     IFormFactor* createTotalFormFactor(const IFormFactor& meso_crystal_form_factor,
                                        const IRotation* p_rotation,
@@ -49,7 +49,7 @@ public:
 
     Lattice3D transformedLattice(const IRotation* p_rotation = nullptr) const;
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
 private:
     Crystal(IParticle* p_basis, const Lattice3D& lattice, double position_variance = 0);
diff --git a/Sample/Particle/IParticle.h b/Sample/Particle/IParticle.h
index 49b1264aad4c4e93cfb33e0605556d639e871fdf..bb7e7a935aa50b07fcc060be26b64a37f302126b 100644
--- a/Sample/Particle/IParticle.h
+++ b/Sample/Particle/IParticle.h
@@ -57,7 +57,7 @@ public:
     void setPosition(double x, double y, double z) { m_position = kvector_t(x, y, z); }
 
     //! Translates the particle
-    void translate(kvector_t translation) final;
+    void translate(kvector_t translation) override;
 
     //! Returns rotation object
     const IRotation* rotation() const;
@@ -66,7 +66,7 @@ public:
     void setRotation(const IRotation& rotation);
 
     //! Rotates the particle
-    void rotate(const IRotation& rotation) final;
+    void rotate(const IRotation& rotation) override;
 
     std::vector<const INode*> getChildren() const override;
 
diff --git a/Sample/Particle/MesoCrystal.h b/Sample/Particle/MesoCrystal.h
index d54a01c91928c5a2e9fc2cb7df69089f640d9ad7..bb40e5b540ffe41c57733861157f4eccf4451ab4 100644
--- a/Sample/Particle/MesoCrystal.h
+++ b/Sample/Particle/MesoCrystal.h
@@ -27,13 +27,13 @@ public:
     MesoCrystal(const Crystal& particle_structure, const IFormFactor& form_factor);
 
     ~MesoCrystal();
-    MesoCrystal* clone() const final;
+    MesoCrystal* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final;
+    void accept(INodeVisitor* visitor) const override;
 
-    SlicedParticle createSlicedParticle(ZLimits limits) const final;
+    SlicedParticle createSlicedParticle(ZLimits limits) const override;
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
 private:
     MesoCrystal(Crystal* p_particle_structure, IFormFactor* p_form_factor);
diff --git a/Sample/Particle/Particle.h b/Sample/Particle/Particle.h
index beb7d24ddffb07161ecc24b0c9ff07ca1a46f8ea..0179596fb5550dea7c52844541017118670ef53b 100644
--- a/Sample/Particle/Particle.h
+++ b/Sample/Particle/Particle.h
@@ -29,16 +29,16 @@ public:
     Particle(Material material, const IFormFactor& form_factor);
     Particle(Material material, const IFormFactor& form_factor, const IRotation& rotation);
 
-    Particle* clone() const final;
+    Particle* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    SlicedParticle createSlicedParticle(ZLimits limits) const final;
+    SlicedParticle createSlicedParticle(ZLimits limits) const override;
 
     void setMaterial(Material material);
-    const Material* material() const final { return &m_material; }
+    const Material* material() const override { return &m_material; }
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
 protected:
     Material m_material;
diff --git a/Sample/Particle/ParticleComposition.h b/Sample/Particle/ParticleComposition.h
index cc99897eb737ec91623edae5dfd5c04aa9ea60e3..b8664a491d45090b804892f108e9af28eae786a9 100644
--- a/Sample/Particle/ParticleComposition.h
+++ b/Sample/Particle/ParticleComposition.h
@@ -27,11 +27,11 @@ public:
     ParticleComposition(const IParticle& particle, std::vector<kvector_t> positions);
 
     ~ParticleComposition();
-    ParticleComposition* clone() const final;
+    ParticleComposition* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    IFormFactor* createFormFactor() const final;
+    IFormFactor* createFormFactor() const override;
 
     void addParticle(const IParticle& particle);
     void addParticle(const IParticle& particle, kvector_t position);
@@ -40,11 +40,11 @@ public:
     //! Returns number of different particles
     size_t nbrParticles() const { return m_particles.size(); }
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
-    SafePointerVector<IParticle> decompose() const final;
+    SafePointerVector<IParticle> decompose() const override;
 
-    ParticleLimits bottomTopZ() const final;
+    ParticleLimits bottomTopZ() const override;
 
 private:
     size_t check_index(size_t index) const;
diff --git a/Sample/Particle/ParticleCoreShell.h b/Sample/Particle/ParticleCoreShell.h
index c131da440e8ae1aab88e20fd8e922c0d0e5db182..3ee41a4f6d978716f289afdd2c7c03a09b20abb2 100644
--- a/Sample/Particle/ParticleCoreShell.h
+++ b/Sample/Particle/ParticleCoreShell.h
@@ -28,17 +28,17 @@ public:
                       kvector_t relative_core_position = kvector_t(0.0, 0.0, 0.0));
     ~ParticleCoreShell();
 
-    ParticleCoreShell* clone() const final;
+    ParticleCoreShell* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    SlicedParticle createSlicedParticle(ZLimits limits) const final;
+    SlicedParticle createSlicedParticle(ZLimits limits) const override;
 
     const Particle* coreParticle() const;
 
     const Particle* shellParticle() const;
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
 protected:
     void addAndRegisterCore(const Particle& core, kvector_t relative_core_position);
diff --git a/Sample/Particle/ParticleDistribution.h b/Sample/Particle/ParticleDistribution.h
index 32639969f48ec2dbb8c020d312d1ed1f8343f16e..23428f70b9579e41c8db5227a6c0c4320588463e 100644
--- a/Sample/Particle/ParticleDistribution.h
+++ b/Sample/Particle/ParticleDistribution.h
@@ -28,13 +28,13 @@ class ParticleDistribution : public IAbstractParticle {
 public:
     ParticleDistribution(const IParticle& prototype, const ParameterDistribution& par_distr);
 
-    ParticleDistribution* clone() const final;
+    ParticleDistribution* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    void translate(kvector_t translation) final;
+    void translate(kvector_t translation) override;
 
-    void rotate(const IRotation& rotation) final;
+    void rotate(const IRotation& rotation) override;
 
     //! Returns list of new particles generated according to a distribution.
     SafePointerVector<IParticle> generateParticles() const;
@@ -45,7 +45,7 @@ public:
     //! Returns the distributed parameter data
     ParameterDistribution parameterDistribution() const { return m_par_distribution; }
 
-    std::vector<const INode*> getChildren() const final;
+    std::vector<const INode*> getChildren() const override;
 
     std::string mainUnits() const;
 
diff --git a/Sample/SampleBuilderEngine/SampleBuilderNode.h b/Sample/SampleBuilderEngine/SampleBuilderNode.h
index b16205e89a651cc9ff96ba9db97057acf21143bc..514959d9e03afb7f34343ce79da0eda10017a69e 100644
--- a/Sample/SampleBuilderEngine/SampleBuilderNode.h
+++ b/Sample/SampleBuilderEngine/SampleBuilderNode.h
@@ -39,7 +39,7 @@ public:
 
     void reset();
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     std::unique_ptr<MultiLayer> createMultiLayer();
 
diff --git a/Sample/SampleBuilderEngine/SampleProvider.h b/Sample/SampleBuilderEngine/SampleProvider.h
index 128bcb09fe43ac7f17aa2135503af21e034b477e..6c871c7b5d9c4bbd6cf0dfd66d7aa3bc6a1c69fb 100644
--- a/Sample/SampleBuilderEngine/SampleProvider.h
+++ b/Sample/SampleBuilderEngine/SampleProvider.h
@@ -46,7 +46,7 @@ public:
 
     std::vector<const INode*> getChildren() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     void setParent(const INode* newParent) override;
 
diff --git a/Sample/Scattering/FormFactorDecoratorPositionFactor.h b/Sample/Scattering/FormFactorDecoratorPositionFactor.h
index 2eae23159d10e84cb6119b9b880a64e8d1001149..268e73f0d8cb03b4a71e82b5f6a4fdd2dde10fcc 100644
--- a/Sample/Scattering/FormFactorDecoratorPositionFactor.h
+++ b/Sample/Scattering/FormFactorDecoratorPositionFactor.h
@@ -34,15 +34,15 @@ public:
         return new FormFactorDecoratorPositionFactor(*m_ff, m_position);
     }
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double bottomZ(const IRotation& rotation) const final;
+    double bottomZ(const IRotation& rotation) const override;
 
-    double topZ(const IRotation& rotation) const final;
+    double topZ(const IRotation& rotation) const override;
 
-    complex_t evaluate(const WavevectorInfo& wavevectors) const final;
+    complex_t evaluate(const WavevectorInfo& wavevectors) const override;
 #ifndef SWIG
-    Eigen::Matrix2cd evaluatePol(const WavevectorInfo& wavevectors) const final;
+    Eigen::Matrix2cd evaluatePol(const WavevectorInfo& wavevectors) const override;
 #endif
 
 private:
diff --git a/Sample/Scattering/FormFactorDecoratorRotation.h b/Sample/Scattering/FormFactorDecoratorRotation.h
index bd7d8c85ee028fca71b81a282aaf812fd6b8f534..63eeda16330b1fccf237f7062c9bcd81cb03e9c1 100644
--- a/Sample/Scattering/FormFactorDecoratorRotation.h
+++ b/Sample/Scattering/FormFactorDecoratorRotation.h
@@ -33,17 +33,17 @@ public:
     //! Constructor, setting form factor and rotation.
     FormFactorDecoratorRotation(const IFormFactor& ff, const IRotation& rotation);
 
-    FormFactorDecoratorRotation* clone() const final;
+    FormFactorDecoratorRotation* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double bottomZ(const IRotation& rotation) const final;
+    double bottomZ(const IRotation& rotation) const override;
 
-    double topZ(const IRotation& rotation) const final;
+    double topZ(const IRotation& rotation) const override;
 
-    complex_t evaluate(const WavevectorInfo& wavevectors) const final;
+    complex_t evaluate(const WavevectorInfo& wavevectors) const override;
 #ifndef SWIG
-    Eigen::Matrix2cd evaluatePol(const WavevectorInfo& wavevectors) const final;
+    Eigen::Matrix2cd evaluatePol(const WavevectorInfo& wavevectors) const override;
 #endif
 
 private:
diff --git a/Sample/SoftParticle/FormFactorGauss.h b/Sample/SoftParticle/FormFactorGauss.h
index b0783daa01f58fb9bfc2bcdd8f586eecf8322d5a..b05215c23fb3d6eed8122135def33077d7c108ca 100644
--- a/Sample/SoftParticle/FormFactorGauss.h
+++ b/Sample/SoftParticle/FormFactorGauss.h
@@ -25,14 +25,14 @@ public:
     FormFactorGaussSphere(const std::vector<double> P);
     FormFactorGaussSphere(double mean_radius);
 
-    FormFactorGaussSphere* clone() const final { return new FormFactorGaussSphere(m_mean_radius); }
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    FormFactorGaussSphere* clone() const override { return new FormFactorGaussSphere(m_mean_radius); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getMeanRadius() const { return m_mean_radius; }
 
-    double radialExtension() const final { return m_mean_radius; }
+    double radialExtension() const override { return m_mean_radius; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
     void onChange() final{};
diff --git a/Sample/SoftParticle/FormFactorSphereGaussianRadius.h b/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
index f418a11b923f40af8b60ef40633e7094ad719148..d7430d31b98405c4f7ec632a4f2cb81765161dbc 100644
--- a/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
+++ b/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
@@ -31,14 +31,14 @@ public:
         return new FormFactorSphereGaussianRadius(m_mean, m_sigma);
     }
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double radialExtension() const final { return m_mean; }
+    double radialExtension() const override { return m_mean; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     double calculateMeanR3() const;
diff --git a/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h b/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
index 3dad5806cdcbe95d949f45319c23260267f32075..02e8c3dc0564ce0d42d2936733cd93291c68ee4a 100644
--- a/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
+++ b/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
@@ -26,16 +26,16 @@ public:
     FormFactorSphereLogNormalRadius(const std::vector<double> P, size_t n_samples = 0);
     FormFactorSphereLogNormalRadius(double mean, double scale_param, size_t n_samples);
 
-    FormFactorSphereLogNormalRadius* clone() const final;
+    FormFactorSphereLogNormalRadius* clone() const override;
 
-    void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
-    double radialExtension() const final { return m_mean; }
+    double radialExtension() const override { return m_mean; }
 
-    complex_t evaluate_for_q(cvector_t q) const final;
+    complex_t evaluate_for_q(cvector_t q) const override;
 
 protected:
-    void onChange() final;
+    void onChange() override;
 
 private:
     const double& m_mean;
diff --git a/Tests/UnitTests/Core/Sample/INodeTest.cpp b/Tests/UnitTests/Core/Sample/INodeTest.cpp
index 7f99940d1707a97cb022c5540e75a128a771d94d..75444167977f33f1737bf5d16adfd336ac044ae2 100644
--- a/Tests/UnitTests/Core/Sample/INodeTest.cpp
+++ b/Tests/UnitTests/Core/Sample/INodeTest.cpp
@@ -27,7 +27,7 @@ public:
             for (auto child : m_nodes)
                 delete child;
         }
-        void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+        void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
         void appendChild(INode* node)
         {
diff --git a/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp b/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
index 10ddf098b345a7083527fb85ba9f844680833e75..d5099d6968a97d6b1b2c5657bc04da9dabb40c31 100644
--- a/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
+++ b/Tests/UnitTests/Core/Sample/Lattice2DTest.cpp
@@ -82,7 +82,7 @@ TEST_F(Lattice2DTest, onChange)
     class Parent : public INode {
     public:
         Parent() : m_changed(false) {}
-        void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+        void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
         virtual void onChange() { m_changed = true; }
         bool m_changed;
     };
diff --git a/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp b/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp
index 6d49d533650fb3b29d7b91d14258a5c746a1bf22..5bb76eaeb77ce04da8297de5fe7127846771b53f 100644
--- a/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp
+++ b/Tests/UnitTests/Core/Sample/SampleProviderTest.cpp
@@ -31,7 +31,7 @@ public:
             registerChild(&m_provider);
         }
 
-        void accept(INodeVisitor* visitor) const final { visitor->visit(this); }
+        void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
         std::vector<const INode*> getChildren() const { return m_provider.getChildren(); }
 
diff --git a/auto/Wrap/doxygenCore.i b/auto/Wrap/doxygenCore.i
index 0e12ad149c8f8296762f4cc42cc4be16641a54a0..3e41d5e3c2eefefa25eb46f6f8bbaec8da8d6429 100644
--- a/auto/Wrap/doxygenCore.i
+++ b/auto/Wrap/doxygenCore.i
@@ -301,7 +301,7 @@ C++ includes: ConstantBackground.h
 %feature("docstring")  ConstantBackground::ConstantBackground "ConstantBackground::ConstantBackground(double background_value)
 ";
 
-%feature("docstring")  ConstantBackground::clone "ConstantBackground * ConstantBackground::clone() const final
+%feature("docstring")  ConstantBackground::clone "ConstantBackground * ConstantBackground::clone() const override
 ";
 
 %feature("docstring")  ConstantBackground::backgroundValue "double ConstantBackground::backgroundValue() const
@@ -310,7 +310,7 @@ C++ includes: ConstantBackground.h
 %feature("docstring")  ConstantBackground::accept "void ConstantBackground::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  ConstantBackground::addBackground "double ConstantBackground::addBackground(double intensity) const final
+%feature("docstring")  ConstantBackground::addBackground "double ConstantBackground::addBackground(double intensity) const override
 ";
 
 
@@ -407,7 +407,7 @@ Set calculation flag (if it's false, zero intensity is assigned to the element)
 %feature("docstring")  DepthProbeSimulation::clone "DepthProbeSimulation * DepthProbeSimulation::clone() const override
 ";
 
-%feature("docstring")  DepthProbeSimulation::accept "void DepthProbeSimulation::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DepthProbeSimulation::accept "void DepthProbeSimulation::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  DepthProbeSimulation::result "SimulationResult DepthProbeSimulation::result() const override
@@ -1636,13 +1636,13 @@ C++ includes: PoissonNoiseBackground.h
 %feature("docstring")  PoissonNoiseBackground::PoissonNoiseBackground "PoissonNoiseBackground::PoissonNoiseBackground()
 ";
 
-%feature("docstring")  PoissonNoiseBackground::clone "PoissonNoiseBackground * PoissonNoiseBackground::clone() const final
+%feature("docstring")  PoissonNoiseBackground::clone "PoissonNoiseBackground * PoissonNoiseBackground::clone() const override
 ";
 
 %feature("docstring")  PoissonNoiseBackground::accept "void PoissonNoiseBackground::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  PoissonNoiseBackground::addBackground "double PoissonNoiseBackground::addBackground(double intensity) const final
+%feature("docstring")  PoissonNoiseBackground::addBackground "double PoissonNoiseBackground::addBackground(double intensity) const override
 ";
 
 
@@ -2105,7 +2105,7 @@ C++ includes: SpecularSimulation.h
 Put into a clean state for running a simulation. 
 ";
 
-%feature("docstring")  SpecularSimulation::accept "void SpecularSimulation::accept(INodeVisitor *visitor) const final
+%feature("docstring")  SpecularSimulation::accept "void SpecularSimulation::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  SpecularSimulation::result "SimulationResult SpecularSimulation::result() const override
@@ -2198,7 +2198,7 @@ C++ includes: UnitConverter1D.h
 %feature("docstring")  UnitConverter1D::clone "UnitConverter1D* UnitConverter1D::clone() const override=0
 ";
 
-%feature("docstring")  UnitConverter1D::dimension "size_t UnitConverter1D::dimension() const final
+%feature("docstring")  UnitConverter1D::dimension "size_t UnitConverter1D::dimension() const override
 
 Returns dimensionality of converted canvas. 
 ";
diff --git a/auto/Wrap/doxygenDevice.i b/auto/Wrap/doxygenDevice.i
index 0581d585e0edd54126d4c1158741a29f67e8c936..ff54d9ec6137f332f8f1cf7a0ad7c0f3acc958f1 100644
--- a/auto/Wrap/doxygenDevice.i
+++ b/auto/Wrap/doxygenDevice.i
@@ -136,7 +136,7 @@ Convolve given intensities with the encapsulated resolution.
 %feature("docstring")  ConvolutionDetectorResolution::clone "ConvolutionDetectorResolution * ConvolutionDetectorResolution::clone() const
 ";
 
-%feature("docstring")  ConvolutionDetectorResolution::accept "void ConvolutionDetectorResolution::accept(INodeVisitor *visitor) const final
+%feature("docstring")  ConvolutionDetectorResolution::accept "void ConvolutionDetectorResolution::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  ConvolutionDetectorResolution::getResolutionFunction2D "const IResolutionFunction2D * ConvolutionDetectorResolution::getResolutionFunction2D() const
@@ -288,7 +288,7 @@ will always return positive value
 %feature("docstring")  DetectionProperties::analyzerTotalTransmission "double DetectionProperties::analyzerTotalTransmission() const
 ";
 
-%feature("docstring")  DetectionProperties::accept "void DetectionProperties::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DetectionProperties::accept "void DetectionProperties::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1323,7 +1323,7 @@ C++ includes: Instrument.h
 %feature("docstring")  Instrument::~Instrument "Instrument::~Instrument()
 ";
 
-%feature("docstring")  Instrument::accept "void Instrument::accept(INodeVisitor *visitor) const final
+%feature("docstring")  Instrument::accept "void Instrument::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  Instrument::beam "Beam& Instrument::beam()
@@ -1421,7 +1421,7 @@ C++ includes: IsGISAXSDetector.h
 %feature("docstring")  IsGISAXSDetector::clone "IsGISAXSDetector * IsGISAXSDetector::clone() const override
 ";
 
-%feature("docstring")  IsGISAXSDetector::accept "void IsGISAXSDetector::accept(INodeVisitor *visitor) const final
+%feature("docstring")  IsGISAXSDetector::accept "void IsGISAXSDetector::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -2198,7 +2198,7 @@ Height of the detector in mm along y-direction
 %feature("docstring")  RectangularDetector::clone "RectangularDetector * RectangularDetector::clone() const override
 ";
 
-%feature("docstring")  RectangularDetector::accept "void RectangularDetector::accept(INodeVisitor *visitor) const final
+%feature("docstring")  RectangularDetector::accept "void RectangularDetector::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  RectangularDetector::~RectangularDetector "RectangularDetector::~RectangularDetector()
@@ -2260,7 +2260,7 @@ Inits detector with the beam settings.
 %feature("docstring")  RectangularDetector::getDetectorArrangment "RectangularDetector::EDetectorArrangement RectangularDetector::getDetectorArrangment() const
 ";
 
-%feature("docstring")  RectangularDetector::defaultAxesUnits "virtual Axes::Units RectangularDetector::defaultAxesUnits() const final
+%feature("docstring")  RectangularDetector::defaultAxesUnits "virtual Axes::Units RectangularDetector::defaultAxesUnits() const override
 
 return default axes units 
 ";
@@ -2342,7 +2342,7 @@ C++ includes: ResolutionFunction2DGaussian.h
 %feature("docstring")  ResolutionFunction2DGaussian::clone "ResolutionFunction2DGaussian* ResolutionFunction2DGaussian::clone() const
 ";
 
-%feature("docstring")  ResolutionFunction2DGaussian::accept "void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const final
+%feature("docstring")  ResolutionFunction2DGaussian::accept "void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  ResolutionFunction2DGaussian::getSigmaX "double ResolutionFunction2DGaussian::getSigmaX() const
@@ -2574,7 +2574,7 @@ Resets region of interest making whole detector plane available for the simulati
 %feature("docstring")  SpecularDetector1D::setAxis "void SpecularDetector1D::setAxis(const IAxis &axis)
 ";
 
-%feature("docstring")  SpecularDetector1D::defaultAxesUnits "virtual Axes::Units SpecularDetector1D::defaultAxesUnits() const final
+%feature("docstring")  SpecularDetector1D::defaultAxesUnits "virtual Axes::Units SpecularDetector1D::defaultAxesUnits() const override
 
 Return default axes units. 
 ";
@@ -2675,7 +2675,7 @@ central alpha angle
 %feature("docstring")  SphericalDetector::~SphericalDetector "SphericalDetector::~SphericalDetector() override
 ";
 
-%feature("docstring")  SphericalDetector::defaultAxesUnits "virtual Axes::Units SphericalDetector::defaultAxesUnits() const final
+%feature("docstring")  SphericalDetector::defaultAxesUnits "virtual Axes::Units SphericalDetector::defaultAxesUnits() const override
 
 return default axes units 
 ";
diff --git a/auto/Wrap/doxygenFit.i b/auto/Wrap/doxygenFit.i
index 834fee9adbd0cfd156aacf7638039144fa92f1a0..b2c9c192ed7f79c34be6ca2518a19a509f4822f7 100644
--- a/auto/Wrap/doxygenFit.i
+++ b/auto/Wrap/doxygenFit.i
@@ -6714,12 +6714,12 @@ run minimization
 %feature("docstring")  MinimizerAdapter::minimize_residual "MinimizerResult MinimizerAdapter::minimize_residual(fcn_residual_t fcn, mumufit::Parameters parameters) override
 ";
 
-%feature("docstring")  MinimizerAdapter::minimizerName "std::string MinimizerAdapter::minimizerName() const final
+%feature("docstring")  MinimizerAdapter::minimizerName "std::string MinimizerAdapter::minimizerName() const override
 
 Returns name of the minimizer. 
 ";
 
-%feature("docstring")  MinimizerAdapter::algorithmName "std::string MinimizerAdapter::algorithmName() const final
+%feature("docstring")  MinimizerAdapter::algorithmName "std::string MinimizerAdapter::algorithmName() const override
 
 Returns name of the minimization algorithm. 
 ";
@@ -6727,7 +6727,7 @@ Returns name of the minimization algorithm.
 %feature("docstring")  MinimizerAdapter::setParameters "void MinimizerAdapter::setParameters(const mumufit::Parameters &parameters)
 ";
 
-%feature("docstring")  MinimizerAdapter::minValue "double MinimizerAdapter::minValue() const final
+%feature("docstring")  MinimizerAdapter::minValue "double MinimizerAdapter::minValue() const override
 
 Returns minimum function value. 
 ";
@@ -6753,7 +6753,7 @@ Returns true if minimizer provides error and error matrix.
 Returns map of string representing different minimizer statuses. 
 ";
 
-%feature("docstring")  MinimizerAdapter::setOptions "void MinimizerAdapter::setOptions(const std::string &optionString) final
+%feature("docstring")  MinimizerAdapter::setOptions "void MinimizerAdapter::setOptions(const std::string &optionString) override
 
 Sets option string to the minimizer. 
 ";
@@ -11967,12 +11967,12 @@ C++ includes: TestMinimizer.h
 %feature("docstring")  TestMinimizer::~TestMinimizer "TestMinimizer::~TestMinimizer() override
 ";
 
-%feature("docstring")  TestMinimizer::minimizerName "std::string TestMinimizer::minimizerName() const final
+%feature("docstring")  TestMinimizer::minimizerName "std::string TestMinimizer::minimizerName() const override
 
 return name of the minimizer 
 ";
 
-%feature("docstring")  TestMinimizer::algorithmName "std::string TestMinimizer::algorithmName() const final
+%feature("docstring")  TestMinimizer::algorithmName "std::string TestMinimizer::algorithmName() const override
 
 return name of the minimization algorithm 
 ";
diff --git a/auto/Wrap/doxygenParam.i b/auto/Wrap/doxygenParam.i
index 87e44c33fa5e6552f98fb4a98e17f5aef13dc93c..f5afff15150eb5ed4fc7e640d6a3baabccb6a4af 100644
--- a/auto/Wrap/doxygenParam.i
+++ b/auto/Wrap/doxygenParam.i
@@ -18,15 +18,15 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionCosine::DistributionCosine "DistributionCosine::DistributionCosine()
 ";
 
-%feature("docstring")  DistributionCosine::clone "DistributionCosine* DistributionCosine::clone() const final
+%feature("docstring")  DistributionCosine::clone "DistributionCosine* DistributionCosine::clone() const override
 ";
 
-%feature("docstring")  DistributionCosine::probabilityDensity "double DistributionCosine::probabilityDensity(double x) const final
+%feature("docstring")  DistributionCosine::probabilityDensity "double DistributionCosine::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionCosine::getMean "double DistributionCosine::getMean() const final
+%feature("docstring")  DistributionCosine::getMean "double DistributionCosine::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -34,17 +34,17 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionCosine::getSigma "double DistributionCosine::getSigma() const
 ";
 
-%feature("docstring")  DistributionCosine::equidistantPoints "std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionCosine::equidistantPoints "std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 generate list of sample values 
 ";
 
-%feature("docstring")  DistributionCosine::isDelta "bool DistributionCosine::isDelta() const final
+%feature("docstring")  DistributionCosine::isDelta "bool DistributionCosine::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionCosine::accept "void DistributionCosine::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionCosine::accept "void DistributionCosine::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
@@ -67,15 +67,15 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionGate::DistributionGate "DistributionGate::DistributionGate()
 ";
 
-%feature("docstring")  DistributionGate::clone "DistributionGate* DistributionGate::clone() const final
+%feature("docstring")  DistributionGate::clone "DistributionGate* DistributionGate::clone() const override
 ";
 
-%feature("docstring")  DistributionGate::probabilityDensity "double DistributionGate::probabilityDensity(double x) const final
+%feature("docstring")  DistributionGate::probabilityDensity "double DistributionGate::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionGate::getMean "double DistributionGate::getMean() const final
+%feature("docstring")  DistributionGate::getMean "double DistributionGate::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -86,17 +86,17 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionGate::upperBound "double DistributionGate::upperBound() const
 ";
 
-%feature("docstring")  DistributionGate::equidistantPoints "std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionGate::equidistantPoints "std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 Returns list of sample values. 
 ";
 
-%feature("docstring")  DistributionGate::isDelta "bool DistributionGate::isDelta() const final
+%feature("docstring")  DistributionGate::isDelta "bool DistributionGate::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionGate::accept "void DistributionGate::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionGate::accept "void DistributionGate::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
@@ -122,12 +122,12 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionGaussian::clone "DistributionGaussian* DistributionGaussian::clone() const final
 ";
 
-%feature("docstring")  DistributionGaussian::probabilityDensity "double DistributionGaussian::probabilityDensity(double x) const final
+%feature("docstring")  DistributionGaussian::probabilityDensity "double DistributionGaussian::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionGaussian::getMean "double DistributionGaussian::getMean() const final
+%feature("docstring")  DistributionGaussian::getMean "double DistributionGaussian::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -135,17 +135,17 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionGaussian::getStdDev "double DistributionGaussian::getStdDev() const
 ";
 
-%feature("docstring")  DistributionGaussian::equidistantPoints "std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionGaussian::equidistantPoints "std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 generate list of sample values 
 ";
 
-%feature("docstring")  DistributionGaussian::isDelta "bool DistributionGaussian::isDelta() const final
+%feature("docstring")  DistributionGaussian::isDelta "bool DistributionGaussian::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionGaussian::accept "void DistributionGaussian::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionGaussian::accept "void DistributionGaussian::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
@@ -212,12 +212,12 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionLogNormal::clone "DistributionLogNormal* DistributionLogNormal::clone() const final
 ";
 
-%feature("docstring")  DistributionLogNormal::probabilityDensity "double DistributionLogNormal::probabilityDensity(double x) const final
+%feature("docstring")  DistributionLogNormal::probabilityDensity "double DistributionLogNormal::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionLogNormal::getMean "double DistributionLogNormal::getMean() const final
+%feature("docstring")  DistributionLogNormal::getMean "double DistributionLogNormal::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -228,22 +228,22 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionLogNormal::getScalePar "double DistributionLogNormal::getScalePar() const
 ";
 
-%feature("docstring")  DistributionLogNormal::equidistantPoints "std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionLogNormal::equidistantPoints "std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 generate list of sample values 
 ";
 
-%feature("docstring")  DistributionLogNormal::isDelta "bool DistributionLogNormal::isDelta() const final
+%feature("docstring")  DistributionLogNormal::isDelta "bool DistributionLogNormal::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionLogNormal::accept "void DistributionLogNormal::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionLogNormal::accept "void DistributionLogNormal::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
 
-%feature("docstring")  DistributionLogNormal::setUnits "void DistributionLogNormal::setUnits(const std::string &units)
+%feature("docstring")  DistributionLogNormal::setUnits "void DistributionLogNormal::setUnits(const std::string &units) override
 
 Sets distribution units. 
 ";
@@ -266,15 +266,15 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionLorentz::DistributionLorentz "DistributionLorentz::DistributionLorentz()
 ";
 
-%feature("docstring")  DistributionLorentz::clone "DistributionLorentz* DistributionLorentz::clone() const final
+%feature("docstring")  DistributionLorentz::clone "DistributionLorentz* DistributionLorentz::clone() const override
 ";
 
-%feature("docstring")  DistributionLorentz::probabilityDensity "double DistributionLorentz::probabilityDensity(double x) const final
+%feature("docstring")  DistributionLorentz::probabilityDensity "double DistributionLorentz::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionLorentz::getMean "double DistributionLorentz::getMean() const final
+%feature("docstring")  DistributionLorentz::getMean "double DistributionLorentz::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -282,17 +282,17 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionLorentz::getHWHM "double DistributionLorentz::getHWHM() const
 ";
 
-%feature("docstring")  DistributionLorentz::equidistantPoints "std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionLorentz::equidistantPoints "std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 generate list of sample values 
 ";
 
-%feature("docstring")  DistributionLorentz::isDelta "bool DistributionLorentz::isDelta() const final
+%feature("docstring")  DistributionLorentz::isDelta "bool DistributionLorentz::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionLorentz::accept "void DistributionLorentz::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionLorentz::accept "void DistributionLorentz::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
@@ -318,12 +318,12 @@ C++ includes: Distributions.h
 %feature("docstring")  DistributionTrapezoid::clone "DistributionTrapezoid* DistributionTrapezoid::clone() const final
 ";
 
-%feature("docstring")  DistributionTrapezoid::probabilityDensity "double DistributionTrapezoid::probabilityDensity(double x) const final
+%feature("docstring")  DistributionTrapezoid::probabilityDensity "double DistributionTrapezoid::probabilityDensity(double x) const override
 
 Returns the distribution-specific probability density for value x. 
 ";
 
-%feature("docstring")  DistributionTrapezoid::getMean "double DistributionTrapezoid::getMean() const final
+%feature("docstring")  DistributionTrapezoid::getMean "double DistributionTrapezoid::getMean() const override
 
 Returns the distribution-specific mean. 
 ";
@@ -337,17 +337,17 @@ Returns the distribution-specific mean.
 %feature("docstring")  DistributionTrapezoid::getRightWidth "double DistributionTrapezoid::getRightWidth() const
 ";
 
-%feature("docstring")  DistributionTrapezoid::equidistantPoints "std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+%feature("docstring")  DistributionTrapezoid::equidistantPoints "std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
 generate list of sample values 
 ";
 
-%feature("docstring")  DistributionTrapezoid::isDelta "bool DistributionTrapezoid::isDelta() const final
+%feature("docstring")  DistributionTrapezoid::isDelta "bool DistributionTrapezoid::isDelta() const override
 
 Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 ";
 
-%feature("docstring")  DistributionTrapezoid::accept "void DistributionTrapezoid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  DistributionTrapezoid::accept "void DistributionTrapezoid::accept(INodeVisitor *visitor) const override
 
 Calls the  INodeVisitor's visit method. 
 ";
diff --git a/auto/Wrap/doxygenSample.i b/auto/Wrap/doxygenSample.i
index 8bb0b7d8fb935986ce0363f1386954b2d5ab3b8f..04633f6fd54b4a4f21a34baa770569944b646e45 100644
--- a/auto/Wrap/doxygenSample.i
+++ b/auto/Wrap/doxygenSample.i
@@ -153,19 +153,19 @@ C++ includes: Lattice2D.h
 %feature("docstring")  BasicLattice2D::clone "BasicLattice2D * BasicLattice2D::clone() const
 ";
 
-%feature("docstring")  BasicLattice2D::accept "void BasicLattice2D::accept(INodeVisitor *visitor) const final
+%feature("docstring")  BasicLattice2D::accept "void BasicLattice2D::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  BasicLattice2D::length1 "virtual double BasicLattice2D::length1() const
+%feature("docstring")  BasicLattice2D::length1 "double BasicLattice2D::length1() const override
 ";
 
-%feature("docstring")  BasicLattice2D::length2 "virtual double BasicLattice2D::length2() const
+%feature("docstring")  BasicLattice2D::length2 "double BasicLattice2D::length2() const override
 ";
 
-%feature("docstring")  BasicLattice2D::latticeAngle "virtual double BasicLattice2D::latticeAngle() const
+%feature("docstring")  BasicLattice2D::latticeAngle "double BasicLattice2D::latticeAngle() const override
 ";
 
-%feature("docstring")  BasicLattice2D::unitCellArea "double BasicLattice2D::unitCellArea() const
+%feature("docstring")  BasicLattice2D::unitCellArea "double BasicLattice2D::unitCellArea() const override
 ";
 
 
@@ -446,12 +446,12 @@ C++ includes: Crystal.h
 %feature("docstring")  Crystal::~Crystal "Crystal::~Crystal()
 ";
 
-%feature("docstring")  Crystal::clone "Crystal * Crystal::clone() const final
+%feature("docstring")  Crystal::clone "Crystal * Crystal::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  Crystal::accept "void Crystal::accept(INodeVisitor *visitor) const final
+%feature("docstring")  Crystal::accept "void Crystal::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  Crystal::createTotalFormFactor "IFormFactor * Crystal::createTotalFormFactor(const IFormFactor &meso_crystal_form_factor, const IRotation *p_rotation, const kvector_t &translation) const
@@ -463,7 +463,7 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  Crystal::transformedLattice "Lattice3D Crystal::transformedLattice(const IRotation *p_rotation=nullptr) const
 ";
 
-%feature("docstring")  Crystal::getChildren "std::vector< const INode * > Crystal::getChildren() const final
+%feature("docstring")  Crystal::getChildren "std::vector< const INode * > Crystal::getChildren() const override
 ";
 
 
@@ -563,7 +563,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution1DCauchySampler::Distribution1DCauchySampler "Distribution1DCauchySampler::Distribution1DCauchySampler(double lambda)
 ";
 
-%feature("docstring")  Distribution1DCauchySampler::randomSample "double Distribution1DCauchySampler::randomSample() const final
+%feature("docstring")  Distribution1DCauchySampler::randomSample "double Distribution1DCauchySampler::randomSample() const override
 ";
 
 
@@ -573,7 +573,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution1DCosineSampler::Distribution1DCosineSampler "Distribution1DCosineSampler::Distribution1DCosineSampler(double omega)
 ";
 
-%feature("docstring")  Distribution1DCosineSampler::randomSample "double Distribution1DCosineSampler::randomSample() const final
+%feature("docstring")  Distribution1DCosineSampler::randomSample "double Distribution1DCosineSampler::randomSample() const override
 ";
 
 
@@ -583,7 +583,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution1DGateSampler::Distribution1DGateSampler "Distribution1DGateSampler::Distribution1DGateSampler(double a, double b)
 ";
 
-%feature("docstring")  Distribution1DGateSampler::randomSample "double Distribution1DGateSampler::randomSample() const final
+%feature("docstring")  Distribution1DGateSampler::randomSample "double Distribution1DGateSampler::randomSample() const override
 ";
 
 
@@ -593,7 +593,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution1DGaussSampler::Distribution1DGaussSampler "Distribution1DGaussSampler::Distribution1DGaussSampler(double mean, double stddev)
 ";
 
-%feature("docstring")  Distribution1DGaussSampler::randomSample "double Distribution1DGaussSampler::randomSample() const final
+%feature("docstring")  Distribution1DGaussSampler::randomSample "double Distribution1DGaussSampler::randomSample() const override
 ";
 
 
@@ -603,7 +603,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution1DTriangleSampler::Distribution1DTriangleSampler "Distribution1DTriangleSampler::Distribution1DTriangleSampler(double omega)
 ";
 
-%feature("docstring")  Distribution1DTriangleSampler::randomSample "double Distribution1DTriangleSampler::randomSample() const final
+%feature("docstring")  Distribution1DTriangleSampler::randomSample "double Distribution1DTriangleSampler::randomSample() const override
 ";
 
 
@@ -613,7 +613,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution2DCauchySampler::Distribution2DCauchySampler "Distribution2DCauchySampler::Distribution2DCauchySampler(double omega_x, double omega_y)
 ";
 
-%feature("docstring")  Distribution2DCauchySampler::randomSample "std::pair< double, double > Distribution2DCauchySampler::randomSample() const final
+%feature("docstring")  Distribution2DCauchySampler::randomSample "std::pair< double, double > Distribution2DCauchySampler::randomSample() const override
 ";
 
 
@@ -623,7 +623,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution2DConeSampler::Distribution2DConeSampler "Distribution2DConeSampler::Distribution2DConeSampler(double omega_x, double omega_y)
 ";
 
-%feature("docstring")  Distribution2DConeSampler::randomSample "std::pair< double, double > Distribution2DConeSampler::randomSample() const final
+%feature("docstring")  Distribution2DConeSampler::randomSample "std::pair< double, double > Distribution2DConeSampler::randomSample() const override
 ";
 
 
@@ -633,7 +633,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution2DGateSampler::Distribution2DGateSampler "Distribution2DGateSampler::Distribution2DGateSampler(double omega_x, double omega_y)
 ";
 
-%feature("docstring")  Distribution2DGateSampler::randomSample "std::pair< double, double > Distribution2DGateSampler::randomSample() const final
+%feature("docstring")  Distribution2DGateSampler::randomSample "std::pair< double, double > Distribution2DGateSampler::randomSample() const override
 ";
 
 
@@ -643,7 +643,7 @@ C++ includes: DecouplingApproximationStrategy.h
 %feature("docstring")  Distribution2DGaussSampler::Distribution2DGaussSampler "Distribution2DGaussSampler::Distribution2DGaussSampler(double omega_x, double omega_y)
 ";
 
-%feature("docstring")  Distribution2DGaussSampler::randomSample "std::pair< double, double > Distribution2DGaussSampler::randomSample() const final
+%feature("docstring")  Distribution2DGaussSampler::randomSample "std::pair< double, double > Distribution2DGaussSampler::randomSample() const override
 ";
 
 
@@ -748,7 +748,7 @@ C++ includes: FormFactorAnisoPyramid.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorAnisoPyramid::accept "void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorAnisoPyramid::accept "void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorAnisoPyramid::getLength "double FormFactorAnisoPyramid::getLength() const
@@ -778,12 +778,12 @@ C++ includes: FormFactorBar.h
 %feature("docstring")  FormFactorBarGauss::FormFactorBarGauss "FormFactorBarGauss::FormFactorBarGauss(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorBarGauss::clone "FormFactorBarGauss * FormFactorBarGauss::clone() const final
+%feature("docstring")  FormFactorBarGauss::clone "FormFactorBarGauss * FormFactorBarGauss::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorBarGauss::accept "void FormFactorBarGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorBarGauss::accept "void FormFactorBarGauss::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -801,12 +801,12 @@ C++ includes: FormFactorBar.h
 %feature("docstring")  FormFactorBarLorentz::FormFactorBarLorentz "FormFactorBarLorentz::FormFactorBarLorentz(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorBarLorentz::clone "FormFactorBarLorentz * FormFactorBarLorentz::clone() const final
+%feature("docstring")  FormFactorBarLorentz::clone "FormFactorBarLorentz * FormFactorBarLorentz::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorBarLorentz::accept "void FormFactorBarLorentz::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorBarLorentz::accept "void FormFactorBarLorentz::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -824,12 +824,12 @@ C++ includes: FormFactorBox.h
 %feature("docstring")  FormFactorBox::FormFactorBox "FormFactorBox::FormFactorBox(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorBox::clone "FormFactorBox* FormFactorBox::clone() const final
+%feature("docstring")  FormFactorBox::clone "FormFactorBox* FormFactorBox::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorBox::accept "void FormFactorBox::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorBox::accept "void FormFactorBox::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorBox::getLength "double FormFactorBox::getLength() const
@@ -838,17 +838,17 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorBox::getWidth "double FormFactorBox::getWidth() const
 ";
 
-%feature("docstring")  FormFactorBox::volume "double FormFactorBox::volume() const final
+%feature("docstring")  FormFactorBox::volume "double FormFactorBox::volume() const override
 
 Returns the total volume of the particle of this form factor's shape. 
 ";
 
-%feature("docstring")  FormFactorBox::radialExtension "double FormFactorBox::radialExtension() const final
+%feature("docstring")  FormFactorBox::radialExtension "double FormFactorBox::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorBox::evaluate_for_q "complex_t FormFactorBox::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorBox::evaluate_for_q "complex_t FormFactorBox::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -873,7 +873,7 @@ C++ includes: FormFactorCantellatedCube.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCantellatedCube::accept "void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCantellatedCube::accept "void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorCantellatedCube::getLength "double FormFactorCantellatedCube::getLength() const
@@ -972,12 +972,12 @@ C++ includes: FormFactorCone.h
 %feature("docstring")  FormFactorCone::FormFactorCone "FormFactorCone::FormFactorCone(double radius, double height, double alpha)
 ";
 
-%feature("docstring")  FormFactorCone::clone "FormFactorCone* FormFactorCone::clone() const final
+%feature("docstring")  FormFactorCone::clone "FormFactorCone* FormFactorCone::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCone::accept "void FormFactorCone::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCone::accept "void FormFactorCone::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorCone::getHeight "double FormFactorCone::getHeight() const
@@ -989,12 +989,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorCone::getRadius "double FormFactorCone::getRadius() const
 ";
 
-%feature("docstring")  FormFactorCone::radialExtension "double FormFactorCone::radialExtension() const final
+%feature("docstring")  FormFactorCone::radialExtension "double FormFactorCone::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorCone::evaluate_for_q "complex_t FormFactorCone::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorCone::evaluate_for_q "complex_t FormFactorCone::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1019,7 +1019,7 @@ C++ includes: FormFactorCone6.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCone6::accept "void FormFactorCone6::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCone6::accept "void FormFactorCone6::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorCone6::getBaseEdge "double FormFactorCone6::getBaseEdge() const
@@ -1101,12 +1101,12 @@ C++ includes: FormFactorCosineRipple.h
 %feature("docstring")  FormFactorCosineRippleBox::FormFactorCosineRippleBox "FormFactorCosineRippleBox::FormFactorCosineRippleBox(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorCosineRippleBox::clone "FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const final
+%feature("docstring")  FormFactorCosineRippleBox::clone "FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCosineRippleBox::accept "void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCosineRippleBox::accept "void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1124,12 +1124,12 @@ C++ includes: FormFactorCosineRipple.h
 %feature("docstring")  FormFactorCosineRippleGauss::FormFactorCosineRippleGauss "FormFactorCosineRippleGauss::FormFactorCosineRippleGauss(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorCosineRippleGauss::clone "FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const final
+%feature("docstring")  FormFactorCosineRippleGauss::clone "FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCosineRippleGauss::accept "void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCosineRippleGauss::accept "void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1147,12 +1147,12 @@ C++ includes: FormFactorCosineRipple.h
 %feature("docstring")  FormFactorCosineRippleLorentz::FormFactorCosineRippleLorentz "FormFactorCosineRippleLorentz::FormFactorCosineRippleLorentz(double length, double width, double height)
 ";
 
-%feature("docstring")  FormFactorCosineRippleLorentz::clone "FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const final
+%feature("docstring")  FormFactorCosineRippleLorentz::clone "FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCosineRippleLorentz::accept "void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCosineRippleLorentz::accept "void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1233,7 +1233,7 @@ C++ includes: FormFactorCuboctahedron.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCuboctahedron::accept "void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCuboctahedron::accept "void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorCuboctahedron::getLength "double FormFactorCuboctahedron::getLength() const
@@ -1263,12 +1263,12 @@ C++ includes: FormFactorCylinder.h
 %feature("docstring")  FormFactorCylinder::FormFactorCylinder "FormFactorCylinder::FormFactorCylinder(double radius, double height)
 ";
 
-%feature("docstring")  FormFactorCylinder::clone "FormFactorCylinder* FormFactorCylinder::clone() const final
+%feature("docstring")  FormFactorCylinder::clone "FormFactorCylinder* FormFactorCylinder::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorCylinder::accept "void FormFactorCylinder::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorCylinder::accept "void FormFactorCylinder::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorCylinder::getHeight "double FormFactorCylinder::getHeight() const
@@ -1277,12 +1277,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorCylinder::getRadius "double FormFactorCylinder::getRadius() const
 ";
 
-%feature("docstring")  FormFactorCylinder::radialExtension "double FormFactorCylinder::radialExtension() const final
+%feature("docstring")  FormFactorCylinder::radialExtension "double FormFactorCylinder::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorCylinder::evaluate_for_q "complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorCylinder::evaluate_for_q "complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1347,25 +1347,25 @@ C++ includes: FormFactorDecoratorPositionFactor.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::accept "void FormFactorDecoratorPositionFactor::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::accept "void FormFactorDecoratorPositionFactor::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::bottomZ "double FormFactorDecoratorPositionFactor::bottomZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::bottomZ "double FormFactorDecoratorPositionFactor::bottomZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::topZ "double FormFactorDecoratorPositionFactor::topZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::topZ "double FormFactorDecoratorPositionFactor::topZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::evaluate "complex_t FormFactorDecoratorPositionFactor::evaluate(const WavevectorInfo &wavevectors) const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::evaluate "complex_t FormFactorDecoratorPositionFactor::evaluate(const WavevectorInfo &wavevectors) const override
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorDecoratorPositionFactor::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorPositionFactor::evaluatePol(const WavevectorInfo &wavevectors) const final
+%feature("docstring")  FormFactorDecoratorPositionFactor::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorPositionFactor::evaluatePol(const WavevectorInfo &wavevectors) const override
 
 Returns scattering amplitude for matrix interactions. 
 ";
@@ -1384,30 +1384,30 @@ C++ includes: FormFactorDecoratorRotation.h
 Constructor, setting form factor and rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::clone "FormFactorDecoratorRotation * FormFactorDecoratorRotation::clone() const final
+%feature("docstring")  FormFactorDecoratorRotation::clone "FormFactorDecoratorRotation * FormFactorDecoratorRotation::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::accept "void FormFactorDecoratorRotation::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorDecoratorRotation::accept "void FormFactorDecoratorRotation::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::bottomZ "double FormFactorDecoratorRotation::bottomZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorDecoratorRotation::bottomZ "double FormFactorDecoratorRotation::bottomZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::topZ "double FormFactorDecoratorRotation::topZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorDecoratorRotation::topZ "double FormFactorDecoratorRotation::topZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::evaluate "complex_t FormFactorDecoratorRotation::evaluate(const WavevectorInfo &wavevectors) const final
+%feature("docstring")  FormFactorDecoratorRotation::evaluate "complex_t FormFactorDecoratorRotation::evaluate(const WavevectorInfo &wavevectors) const override
 
 Returns scattering amplitude for complex wavevectors ki, kf. 
 ";
 
-%feature("docstring")  FormFactorDecoratorRotation::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorRotation::evaluatePol(const WavevectorInfo &wavevectors) const final
+%feature("docstring")  FormFactorDecoratorRotation::evaluatePol "Eigen::Matrix2cd FormFactorDecoratorRotation::evaluatePol(const WavevectorInfo &wavevectors) const override
 
 Returns scattering amplitude for matrix interactions. 
 ";
@@ -1427,12 +1427,12 @@ C++ includes: FormFactorDodecahedron.h
 %feature("docstring")  FormFactorDodecahedron::FormFactorDodecahedron "FormFactorDodecahedron::FormFactorDodecahedron(double edge)
 ";
 
-%feature("docstring")  FormFactorDodecahedron::clone "FormFactorDodecahedron* FormFactorDodecahedron::clone() const final
+%feature("docstring")  FormFactorDodecahedron::clone "FormFactorDodecahedron* FormFactorDodecahedron::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorDodecahedron::accept "void FormFactorDodecahedron::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorDodecahedron::accept "void FormFactorDodecahedron::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorDodecahedron::getEdge "double FormFactorDodecahedron::getEdge() const
@@ -1453,33 +1453,33 @@ C++ includes: FormFactorDot.h
 %feature("docstring")  FormFactorDot::FormFactorDot "FormFactorDot::FormFactorDot(double radius)
 ";
 
-%feature("docstring")  FormFactorDot::clone "FormFactorDot* FormFactorDot::clone() const final
+%feature("docstring")  FormFactorDot::clone "FormFactorDot* FormFactorDot::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorDot::accept "void FormFactorDot::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorDot::accept "void FormFactorDot::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorDot::getRadius "double FormFactorDot::getRadius() const
 ";
 
-%feature("docstring")  FormFactorDot::radialExtension "double FormFactorDot::radialExtension() const final
+%feature("docstring")  FormFactorDot::radialExtension "double FormFactorDot::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorDot::bottomZ "double FormFactorDot::bottomZ(const IRotation &) const final
+%feature("docstring")  FormFactorDot::bottomZ "double FormFactorDot::bottomZ(const IRotation &) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDot::topZ "double FormFactorDot::topZ(const IRotation &) const final
+%feature("docstring")  FormFactorDot::topZ "double FormFactorDot::topZ(const IRotation &) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorDot::evaluate_for_q "complex_t FormFactorDot::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorDot::evaluate_for_q "complex_t FormFactorDot::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1504,7 +1504,7 @@ C++ includes: FormFactorEllipsoidalCylinder.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::accept "void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorEllipsoidalCylinder::accept "void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorEllipsoidalCylinder::getRadiusX "double FormFactorEllipsoidalCylinder::getRadiusX() const
@@ -1516,12 +1516,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorEllipsoidalCylinder::getHeight "double FormFactorEllipsoidalCylinder::getHeight() const
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::radialExtension "double FormFactorEllipsoidalCylinder::radialExtension() const final
+%feature("docstring")  FormFactorEllipsoidalCylinder::radialExtension "double FormFactorEllipsoidalCylinder::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorEllipsoidalCylinder::evaluate_for_q "complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorEllipsoidalCylinder::evaluate_for_q "complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1546,28 +1546,28 @@ C++ includes: FormFactorFullSphere.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorFullSphere::accept "void FormFactorFullSphere::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorFullSphere::accept "void FormFactorFullSphere::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorFullSphere::getRadius "double FormFactorFullSphere::getRadius() const
 ";
 
-%feature("docstring")  FormFactorFullSphere::radialExtension "double FormFactorFullSphere::radialExtension() const final
+%feature("docstring")  FormFactorFullSphere::radialExtension "double FormFactorFullSphere::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorFullSphere::bottomZ "double FormFactorFullSphere::bottomZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorFullSphere::bottomZ "double FormFactorFullSphere::bottomZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorFullSphere::topZ "double FormFactorFullSphere::topZ(const IRotation &rotation) const final
+%feature("docstring")  FormFactorFullSphere::topZ "double FormFactorFullSphere::topZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  FormFactorFullSphere::evaluate_for_q "complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorFullSphere::evaluate_for_q "complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1592,7 +1592,7 @@ C++ includes: FormFactorFullSpheroid.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::accept "void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorFullSpheroid::accept "void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorFullSpheroid::getHeight "double FormFactorFullSpheroid::getHeight() const
@@ -1601,12 +1601,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorFullSpheroid::getRadius "double FormFactorFullSpheroid::getRadius() const
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::radialExtension "double FormFactorFullSpheroid::radialExtension() const final
+%feature("docstring")  FormFactorFullSpheroid::radialExtension "double FormFactorFullSpheroid::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorFullSpheroid::evaluate_for_q "complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorFullSpheroid::evaluate_for_q "complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1626,23 +1626,23 @@ C++ includes: FormFactorGauss.h
 %feature("docstring")  FormFactorGaussSphere::FormFactorGaussSphere "FormFactorGaussSphere::FormFactorGaussSphere(double mean_radius)
 ";
 
-%feature("docstring")  FormFactorGaussSphere::clone "FormFactorGaussSphere* FormFactorGaussSphere::clone() const final
+%feature("docstring")  FormFactorGaussSphere::clone "FormFactorGaussSphere* FormFactorGaussSphere::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorGaussSphere::accept "void FormFactorGaussSphere::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorGaussSphere::accept "void FormFactorGaussSphere::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorGaussSphere::getMeanRadius "double FormFactorGaussSphere::getMeanRadius() const
 ";
 
-%feature("docstring")  FormFactorGaussSphere::radialExtension "double FormFactorGaussSphere::radialExtension() const final
+%feature("docstring")  FormFactorGaussSphere::radialExtension "double FormFactorGaussSphere::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorGaussSphere::evaluate_for_q "complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorGaussSphere::evaluate_for_q "complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1670,7 +1670,7 @@ C++ includes: FormFactorHemiEllipsoid.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::accept "void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorHemiEllipsoid::accept "void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorHemiEllipsoid::getHeight "double FormFactorHemiEllipsoid::getHeight() const
@@ -1682,12 +1682,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorHemiEllipsoid::getRadiusY "double FormFactorHemiEllipsoid::getRadiusY() const
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::radialExtension "double FormFactorHemiEllipsoid::radialExtension() const final
+%feature("docstring")  FormFactorHemiEllipsoid::radialExtension "double FormFactorHemiEllipsoid::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorHemiEllipsoid::evaluate_for_q "complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorHemiEllipsoid::evaluate_for_q "complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1712,15 +1712,15 @@ C++ includes: FormFactorHollowSphere.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorHollowSphere::accept "void FormFactorHollowSphere::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorHollowSphere::accept "void FormFactorHollowSphere::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FormFactorHollowSphere::radialExtension "double FormFactorHollowSphere::radialExtension() const final
+%feature("docstring")  FormFactorHollowSphere::radialExtension "double FormFactorHollowSphere::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorHollowSphere::evaluate_for_q "complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorHollowSphere::evaluate_for_q "complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1740,12 +1740,12 @@ C++ includes: FormFactorIcosahedron.h
 %feature("docstring")  FormFactorIcosahedron::FormFactorIcosahedron "FormFactorIcosahedron::FormFactorIcosahedron(double edge)
 ";
 
-%feature("docstring")  FormFactorIcosahedron::clone "FormFactorIcosahedron* FormFactorIcosahedron::clone() const final
+%feature("docstring")  FormFactorIcosahedron::clone "FormFactorIcosahedron* FormFactorIcosahedron::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorIcosahedron::accept "void FormFactorIcosahedron::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorIcosahedron::accept "void FormFactorIcosahedron::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorIcosahedron::getEdge "double FormFactorIcosahedron::getEdge() const
@@ -1771,7 +1771,7 @@ C++ includes: FormFactorLongBoxGauss.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::accept "void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorLongBoxGauss::accept "void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorLongBoxGauss::getLength "double FormFactorLongBoxGauss::getLength() const
@@ -1783,12 +1783,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorLongBoxGauss::getWidth "double FormFactorLongBoxGauss::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::radialExtension "double FormFactorLongBoxGauss::radialExtension() const final
+%feature("docstring")  FormFactorLongBoxGauss::radialExtension "double FormFactorLongBoxGauss::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLongBoxGauss::evaluate_for_q "complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorLongBoxGauss::evaluate_for_q "complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1813,7 +1813,7 @@ C++ includes: FormFactorLongBoxLorentz.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::accept "void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorLongBoxLorentz::accept "void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorLongBoxLorentz::getLength "double FormFactorLongBoxLorentz::getLength() const
@@ -1825,12 +1825,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorLongBoxLorentz::getWidth "double FormFactorLongBoxLorentz::getWidth() const
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::radialExtension "double FormFactorLongBoxLorentz::radialExtension() const final
+%feature("docstring")  FormFactorLongBoxLorentz::radialExtension "double FormFactorLongBoxLorentz::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorLongBoxLorentz::evaluate_for_q "complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorLongBoxLorentz::evaluate_for_q "complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -1850,12 +1850,12 @@ C++ includes: FormFactorPrism3.h
 %feature("docstring")  FormFactorPrism3::FormFactorPrism3 "FormFactorPrism3::FormFactorPrism3(double base_edge, double height)
 ";
 
-%feature("docstring")  FormFactorPrism3::clone "FormFactorPrism3* FormFactorPrism3::clone() const final
+%feature("docstring")  FormFactorPrism3::clone "FormFactorPrism3* FormFactorPrism3::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorPrism3::accept "void FormFactorPrism3::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorPrism3::accept "void FormFactorPrism3::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorPrism3::getBaseEdge "double FormFactorPrism3::getBaseEdge() const
@@ -1876,12 +1876,12 @@ C++ includes: FormFactorPrism6.h
 %feature("docstring")  FormFactorPrism6::FormFactorPrism6 "FormFactorPrism6::FormFactorPrism6(double base_edge, double height)
 ";
 
-%feature("docstring")  FormFactorPrism6::clone "FormFactorPrism6* FormFactorPrism6::clone() const final
+%feature("docstring")  FormFactorPrism6::clone "FormFactorPrism6* FormFactorPrism6::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorPrism6::accept "void FormFactorPrism6::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorPrism6::accept "void FormFactorPrism6::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorPrism6::getBaseEdge "double FormFactorPrism6::getBaseEdge() const
@@ -1907,7 +1907,7 @@ C++ includes: FormFactorPyramid.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorPyramid::accept "void FormFactorPyramid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorPyramid::accept "void FormFactorPyramid::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorPyramid::getHeight "double FormFactorPyramid::getHeight() const
@@ -1934,12 +1934,12 @@ C++ includes: FormFactorSawtoothRipple.h
 %feature("docstring")  FormFactorSawtoothRippleBox::FormFactorSawtoothRippleBox "FormFactorSawtoothRippleBox::FormFactorSawtoothRippleBox(double length, double width, double height, double asymmetry)
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleBox::clone "FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const final
+%feature("docstring")  FormFactorSawtoothRippleBox::clone "FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleBox::accept "void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorSawtoothRippleBox::accept "void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1957,12 +1957,12 @@ C++ includes: FormFactorSawtoothRipple.h
 %feature("docstring")  FormFactorSawtoothRippleGauss::FormFactorSawtoothRippleGauss "FormFactorSawtoothRippleGauss::FormFactorSawtoothRippleGauss(double length, double width, double height, double asymmetry)
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleGauss::clone "FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const final
+%feature("docstring")  FormFactorSawtoothRippleGauss::clone "FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleGauss::accept "void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorSawtoothRippleGauss::accept "void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -1980,12 +1980,12 @@ C++ includes: FormFactorSawtoothRipple.h
 %feature("docstring")  FormFactorSawtoothRippleLorentz::FormFactorSawtoothRippleLorentz "FormFactorSawtoothRippleLorentz::FormFactorSawtoothRippleLorentz(double length, double width, double height, double asymmetry)
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleLorentz::clone "FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const final
+%feature("docstring")  FormFactorSawtoothRippleLorentz::clone "FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorSawtoothRippleLorentz::accept "void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorSawtoothRippleLorentz::accept "void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -2008,15 +2008,15 @@ C++ includes: FormFactorSphereGaussianRadius.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::accept "void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorSphereGaussianRadius::accept "void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::radialExtension "double FormFactorSphereGaussianRadius::radialExtension() const final
+%feature("docstring")  FormFactorSphereGaussianRadius::radialExtension "double FormFactorSphereGaussianRadius::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorSphereGaussianRadius::evaluate_for_q "complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorSphereGaussianRadius::evaluate_for_q "complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -2036,20 +2036,20 @@ C++ includes: FormFactorSphereLogNormalRadius.h
 %feature("docstring")  FormFactorSphereLogNormalRadius::FormFactorSphereLogNormalRadius "FormFactorSphereLogNormalRadius::FormFactorSphereLogNormalRadius(double mean, double scale_param, size_t n_samples)
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::clone "FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const final
+%feature("docstring")  FormFactorSphereLogNormalRadius::clone "FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::accept "void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorSphereLogNormalRadius::accept "void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::radialExtension "double FormFactorSphereLogNormalRadius::radialExtension() const final
+%feature("docstring")  FormFactorSphereLogNormalRadius::radialExtension "double FormFactorSphereLogNormalRadius::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorSphereLogNormalRadius::evaluate_for_q "complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorSphereLogNormalRadius::evaluate_for_q "complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -2074,7 +2074,7 @@ C++ includes: FormFactorTetrahedron.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorTetrahedron::accept "void FormFactorTetrahedron::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorTetrahedron::accept "void FormFactorTetrahedron::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorTetrahedron::getBaseEdge "double FormFactorTetrahedron::getBaseEdge() const
@@ -2106,7 +2106,7 @@ C++ includes: FormFactorTruncatedCube.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorTruncatedCube::accept "void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorTruncatedCube::accept "void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorTruncatedCube::getLength "double FormFactorTruncatedCube::getLength() const
@@ -2135,7 +2135,7 @@ C++ includes: FormFactorTruncatedSphere.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::accept "void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorTruncatedSphere::accept "void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorTruncatedSphere::getHeight "double FormFactorTruncatedSphere::getHeight() const
@@ -2147,12 +2147,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorTruncatedSphere::getRemovedTop "double FormFactorTruncatedSphere::getRemovedTop() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::radialExtension "double FormFactorTruncatedSphere::radialExtension() const final
+%feature("docstring")  FormFactorTruncatedSphere::radialExtension "double FormFactorTruncatedSphere::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorTruncatedSphere::evaluate_for_q "complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorTruncatedSphere::evaluate_for_q "complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const override
 
 Complex form factor. 
 ";
@@ -2177,7 +2177,7 @@ C++ includes: FormFactorTruncatedSpheroid.h
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::accept "void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FormFactorTruncatedSpheroid::accept "void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  FormFactorTruncatedSpheroid::getRadius "double FormFactorTruncatedSpheroid::getRadius() const
@@ -2192,12 +2192,12 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  FormFactorTruncatedSpheroid::getRemovedTop "double FormFactorTruncatedSpheroid::getRemovedTop() const
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::radialExtension "double FormFactorTruncatedSpheroid::radialExtension() const final
+%feature("docstring")  FormFactorTruncatedSpheroid::radialExtension "double FormFactorTruncatedSpheroid::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  FormFactorTruncatedSpheroid::evaluate_for_q "complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  FormFactorTruncatedSpheroid::evaluate_for_q "complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -2278,10 +2278,10 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DCauchy::clone "FTDecayFunction1DCauchy * FTDecayFunction1DCauchy::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction1DCauchy::accept "void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction1DCauchy::accept "void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction1DCauchy::evaluate "double FTDecayFunction1DCauchy::evaluate(double q) const final
+%feature("docstring")  FTDecayFunction1DCauchy::evaluate "double FTDecayFunction1DCauchy::evaluate(double q) const override
 ";
 
 
@@ -2302,10 +2302,10 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DGauss::clone "FTDecayFunction1DGauss * FTDecayFunction1DGauss::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction1DGauss::accept "void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction1DGauss::accept "void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction1DGauss::evaluate "double FTDecayFunction1DGauss::evaluate(double q) const final
+%feature("docstring")  FTDecayFunction1DGauss::evaluate "double FTDecayFunction1DGauss::evaluate(double q) const override
 ";
 
 
@@ -2326,10 +2326,10 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DTriangle::clone "FTDecayFunction1DTriangle * FTDecayFunction1DTriangle::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction1DTriangle::accept "void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction1DTriangle::accept "void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction1DTriangle::evaluate "double FTDecayFunction1DTriangle::evaluate(double q) const final
+%feature("docstring")  FTDecayFunction1DTriangle::evaluate "double FTDecayFunction1DTriangle::evaluate(double q) const override
 ";
 
 
@@ -2350,10 +2350,10 @@ C++ includes: FTDecay1D.h
 %feature("docstring")  FTDecayFunction1DVoigt::clone "FTDecayFunction1DVoigt * FTDecayFunction1DVoigt::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction1DVoigt::accept "void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction1DVoigt::accept "void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction1DVoigt::evaluate "double FTDecayFunction1DVoigt::evaluate(double q) const final
+%feature("docstring")  FTDecayFunction1DVoigt::evaluate "double FTDecayFunction1DVoigt::evaluate(double q) const override
 ";
 
 %feature("docstring")  FTDecayFunction1DVoigt::eEta "double FTDecayFunction1DVoigt::eEta() const
@@ -2377,10 +2377,10 @@ C++ includes: FTDecay2D.h
 %feature("docstring")  FTDecayFunction2DCauchy::clone "FTDecayFunction2DCauchy * FTDecayFunction2DCauchy::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction2DCauchy::accept "void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction2DCauchy::accept "void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction2DCauchy::evaluate "double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDecayFunction2DCauchy::evaluate "double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed decay function for q in X,Y coordinates 
 ";
@@ -2403,10 +2403,10 @@ C++ includes: FTDecay2D.h
 %feature("docstring")  FTDecayFunction2DGauss::clone "FTDecayFunction2DGauss * FTDecayFunction2DGauss::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction2DGauss::accept "void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction2DGauss::accept "void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction2DGauss::evaluate "double FTDecayFunction2DGauss::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDecayFunction2DGauss::evaluate "double FTDecayFunction2DGauss::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed decay function for q in X,Y coordinates 
 ";
@@ -2429,10 +2429,10 @@ C++ includes: FTDecay2D.h
 %feature("docstring")  FTDecayFunction2DVoigt::clone "FTDecayFunction2DVoigt * FTDecayFunction2DVoigt::clone() const
 ";
 
-%feature("docstring")  FTDecayFunction2DVoigt::accept "void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDecayFunction2DVoigt::accept "void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDecayFunction2DVoigt::evaluate "double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDecayFunction2DVoigt::evaluate "double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed decay function for q in X,Y coordinates 
 ";
@@ -2455,23 +2455,23 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DCauchy::FTDistribution1DCauchy "FTDistribution1DCauchy::FTDistribution1DCauchy(double omega)
 ";
 
-%feature("docstring")  FTDistribution1DCauchy::clone "FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const final
+%feature("docstring")  FTDistribution1DCauchy::clone "FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DCauchy::accept "void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DCauchy::accept "void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DCauchy::evaluate "double FTDistribution1DCauchy::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DCauchy::evaluate "double FTDistribution1DCauchy::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DCauchy::qSecondDerivative "double FTDistribution1DCauchy::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DCauchy::qSecondDerivative "double FTDistribution1DCauchy::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DCauchy::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DCauchy::createSampler() const final
+%feature("docstring")  FTDistribution1DCauchy::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DCauchy::createSampler() const override
 ";
 
 
@@ -2489,23 +2489,23 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DCosine::FTDistribution1DCosine "FTDistribution1DCosine::FTDistribution1DCosine(double omega)
 ";
 
-%feature("docstring")  FTDistribution1DCosine::clone "FTDistribution1DCosine * FTDistribution1DCosine::clone() const final
+%feature("docstring")  FTDistribution1DCosine::clone "FTDistribution1DCosine * FTDistribution1DCosine::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DCosine::accept "void FTDistribution1DCosine::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DCosine::accept "void FTDistribution1DCosine::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DCosine::evaluate "double FTDistribution1DCosine::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DCosine::evaluate "double FTDistribution1DCosine::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DCosine::qSecondDerivative "double FTDistribution1DCosine::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DCosine::qSecondDerivative "double FTDistribution1DCosine::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DCosine::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DCosine::createSampler() const final
+%feature("docstring")  FTDistribution1DCosine::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DCosine::createSampler() const override
 ";
 
 
@@ -2523,23 +2523,23 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DGate::FTDistribution1DGate "FTDistribution1DGate::FTDistribution1DGate(double omega)
 ";
 
-%feature("docstring")  FTDistribution1DGate::clone "FTDistribution1DGate * FTDistribution1DGate::clone() const final
+%feature("docstring")  FTDistribution1DGate::clone "FTDistribution1DGate * FTDistribution1DGate::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DGate::accept "void FTDistribution1DGate::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DGate::accept "void FTDistribution1DGate::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DGate::evaluate "double FTDistribution1DGate::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DGate::evaluate "double FTDistribution1DGate::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DGate::qSecondDerivative "double FTDistribution1DGate::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DGate::qSecondDerivative "double FTDistribution1DGate::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DGate::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DGate::createSampler() const final
+%feature("docstring")  FTDistribution1DGate::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DGate::createSampler() const override
 ";
 
 
@@ -2557,23 +2557,23 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DGauss::FTDistribution1DGauss "FTDistribution1DGauss::FTDistribution1DGauss(double omega)
 ";
 
-%feature("docstring")  FTDistribution1DGauss::clone "FTDistribution1DGauss * FTDistribution1DGauss::clone() const final
+%feature("docstring")  FTDistribution1DGauss::clone "FTDistribution1DGauss * FTDistribution1DGauss::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DGauss::accept "void FTDistribution1DGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DGauss::accept "void FTDistribution1DGauss::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DGauss::evaluate "double FTDistribution1DGauss::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DGauss::evaluate "double FTDistribution1DGauss::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DGauss::qSecondDerivative "double FTDistribution1DGauss::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DGauss::qSecondDerivative "double FTDistribution1DGauss::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DGauss::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DGauss::createSampler() const final
+%feature("docstring")  FTDistribution1DGauss::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DGauss::createSampler() const override
 ";
 
 
@@ -2591,23 +2591,23 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DTriangle::FTDistribution1DTriangle "FTDistribution1DTriangle::FTDistribution1DTriangle(double omega)
 ";
 
-%feature("docstring")  FTDistribution1DTriangle::clone "FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const final
+%feature("docstring")  FTDistribution1DTriangle::clone "FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DTriangle::accept "void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DTriangle::accept "void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DTriangle::evaluate "double FTDistribution1DTriangle::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DTriangle::evaluate "double FTDistribution1DTriangle::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
 
-%feature("docstring")  FTDistribution1DTriangle::qSecondDerivative "double FTDistribution1DTriangle::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DTriangle::qSecondDerivative "double FTDistribution1DTriangle::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DTriangle::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DTriangle::createSampler() const final
+%feature("docstring")  FTDistribution1DTriangle::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DTriangle::createSampler() const override
 ";
 
 
@@ -2625,13 +2625,13 @@ C++ includes: FTDistributions1D.h
 %feature("docstring")  FTDistribution1DVoigt::FTDistribution1DVoigt "FTDistribution1DVoigt::FTDistribution1DVoigt(double omega, double eta)
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::clone "FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const final
+%feature("docstring")  FTDistribution1DVoigt::clone "FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const override
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::accept "void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution1DVoigt::accept "void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::evaluate "double FTDistribution1DVoigt::evaluate(double q) const final
+%feature("docstring")  FTDistribution1DVoigt::evaluate "double FTDistribution1DVoigt::evaluate(double q) const override
 
 Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 ";
@@ -2639,12 +2639,12 @@ Returns Fourier transform of this distribution; is a decay function starting at
 %feature("docstring")  FTDistribution1DVoigt::eta "double FTDistribution1DVoigt::eta() const
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::qSecondDerivative "double FTDistribution1DVoigt::qSecondDerivative() const final
+%feature("docstring")  FTDistribution1DVoigt::qSecondDerivative "double FTDistribution1DVoigt::qSecondDerivative() const override
 
 Returns the negative of the second order derivative in q space around q=0. 
 ";
 
-%feature("docstring")  FTDistribution1DVoigt::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DVoigt::createSampler() const final
+%feature("docstring")  FTDistribution1DVoigt::createSampler "std::unique_ptr< IDistribution1DSampler > FTDistribution1DVoigt::createSampler() const override
 ";
 
 
@@ -2662,18 +2662,18 @@ C++ includes: FTDistributions2D.h
 %feature("docstring")  FTDistribution2DCauchy::FTDistribution2DCauchy "FTDistribution2DCauchy::FTDistribution2DCauchy(double omega_x, double omega_y, double gamma)
 ";
 
-%feature("docstring")  FTDistribution2DCauchy::clone "FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const final
+%feature("docstring")  FTDistribution2DCauchy::clone "FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const override
 ";
 
-%feature("docstring")  FTDistribution2DCauchy::accept "void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution2DCauchy::accept "void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution2DCauchy::evaluate "double FTDistribution2DCauchy::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDistribution2DCauchy::evaluate "double FTDistribution2DCauchy::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
 
-%feature("docstring")  FTDistribution2DCauchy::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DCauchy::createSampler() const final
+%feature("docstring")  FTDistribution2DCauchy::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DCauchy::createSampler() const override
 ";
 
 
@@ -2703,18 +2703,18 @@ C++ includes: FTDistributions2D.h
 %feature("docstring")  FTDistribution2DCone::FTDistribution2DCone "FTDistribution2DCone::FTDistribution2DCone(double omega_x, double omega_y, double gamma)
 ";
 
-%feature("docstring")  FTDistribution2DCone::clone "FTDistribution2DCone * FTDistribution2DCone::clone() const final
+%feature("docstring")  FTDistribution2DCone::clone "FTDistribution2DCone * FTDistribution2DCone::clone() const override
 ";
 
-%feature("docstring")  FTDistribution2DCone::accept "void FTDistribution2DCone::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution2DCone::accept "void FTDistribution2DCone::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution2DCone::evaluate "double FTDistribution2DCone::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDistribution2DCone::evaluate "double FTDistribution2DCone::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
 
-%feature("docstring")  FTDistribution2DCone::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DCone::createSampler() const final
+%feature("docstring")  FTDistribution2DCone::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DCone::createSampler() const override
 ";
 
 
@@ -2732,18 +2732,18 @@ C++ includes: FTDistributions2D.h
 %feature("docstring")  FTDistribution2DGate::FTDistribution2DGate "FTDistribution2DGate::FTDistribution2DGate(double omega_x, double omega_y, double gamma)
 ";
 
-%feature("docstring")  FTDistribution2DGate::clone "FTDistribution2DGate * FTDistribution2DGate::clone() const final
+%feature("docstring")  FTDistribution2DGate::clone "FTDistribution2DGate * FTDistribution2DGate::clone() const override
 ";
 
-%feature("docstring")  FTDistribution2DGate::accept "void FTDistribution2DGate::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution2DGate::accept "void FTDistribution2DGate::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution2DGate::evaluate "double FTDistribution2DGate::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDistribution2DGate::evaluate "double FTDistribution2DGate::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
 
-%feature("docstring")  FTDistribution2DGate::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DGate::createSampler() const final
+%feature("docstring")  FTDistribution2DGate::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DGate::createSampler() const override
 ";
 
 
@@ -2761,18 +2761,18 @@ C++ includes: FTDistributions2D.h
 %feature("docstring")  FTDistribution2DGauss::FTDistribution2DGauss "FTDistribution2DGauss::FTDistribution2DGauss(double omega_x, double omega_y, double gamma)
 ";
 
-%feature("docstring")  FTDistribution2DGauss::clone "FTDistribution2DGauss * FTDistribution2DGauss::clone() const final
+%feature("docstring")  FTDistribution2DGauss::clone "FTDistribution2DGauss * FTDistribution2DGauss::clone() const override
 ";
 
-%feature("docstring")  FTDistribution2DGauss::accept "void FTDistribution2DGauss::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution2DGauss::accept "void FTDistribution2DGauss::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution2DGauss::evaluate "double FTDistribution2DGauss::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDistribution2DGauss::evaluate "double FTDistribution2DGauss::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
 
-%feature("docstring")  FTDistribution2DGauss::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DGauss::createSampler() const final
+%feature("docstring")  FTDistribution2DGauss::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DGauss::createSampler() const override
 ";
 
 
@@ -2790,13 +2790,13 @@ C++ includes: FTDistributions2D.h
 %feature("docstring")  FTDistribution2DVoigt::FTDistribution2DVoigt "FTDistribution2DVoigt::FTDistribution2DVoigt(double omega_x, double omega_y, double gamma, double eta)
 ";
 
-%feature("docstring")  FTDistribution2DVoigt::clone "FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const final
+%feature("docstring")  FTDistribution2DVoigt::clone "FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const override
 ";
 
-%feature("docstring")  FTDistribution2DVoigt::accept "void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const final
+%feature("docstring")  FTDistribution2DVoigt::accept "void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  FTDistribution2DVoigt::evaluate "double FTDistribution2DVoigt::evaluate(double qx, double qy) const final
+%feature("docstring")  FTDistribution2DVoigt::evaluate "double FTDistribution2DVoigt::evaluate(double qx, double qy) const override
 
 evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 ";
@@ -2804,7 +2804,7 @@ evaluate Fourier transformed distribution for q in X,Y coordinates the original
 %feature("docstring")  FTDistribution2DVoigt::eta "double FTDistribution2DVoigt::eta() const
 ";
 
-%feature("docstring")  FTDistribution2DVoigt::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DVoigt::createSampler() const final
+%feature("docstring")  FTDistribution2DVoigt::createSampler "std::unique_ptr< IDistribution2DSampler > FTDistribution2DVoigt::createSampler() const override
 ";
 
 
@@ -2873,19 +2873,19 @@ C++ includes: Lattice2D.h
 %feature("docstring")  HexagonalLattice2D::clone "HexagonalLattice2D * HexagonalLattice2D::clone() const
 ";
 
-%feature("docstring")  HexagonalLattice2D::accept "void HexagonalLattice2D::accept(INodeVisitor *visitor) const final
+%feature("docstring")  HexagonalLattice2D::accept "void HexagonalLattice2D::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  HexagonalLattice2D::length1 "virtual double HexagonalLattice2D::length1() const
+%feature("docstring")  HexagonalLattice2D::length1 "double HexagonalLattice2D::length1() const override
 ";
 
-%feature("docstring")  HexagonalLattice2D::length2 "virtual double HexagonalLattice2D::length2() const
+%feature("docstring")  HexagonalLattice2D::length2 "double HexagonalLattice2D::length2() const override
 ";
 
-%feature("docstring")  HexagonalLattice2D::latticeAngle "double HexagonalLattice2D::latticeAngle() const
+%feature("docstring")  HexagonalLattice2D::latticeAngle "double HexagonalLattice2D::latticeAngle() const override
 ";
 
-%feature("docstring")  HexagonalLattice2D::unitCellArea "double HexagonalLattice2D::unitCellArea() const
+%feature("docstring")  HexagonalLattice2D::unitCellArea "double HexagonalLattice2D::unitCellArea() const override
 ";
 
 
@@ -3287,17 +3287,17 @@ The mathematics implemented here is described in full detail in a paper by Joach
 %feature("docstring")  IFormFactorPolyhedron::~IFormFactorPolyhedron "IFormFactorPolyhedron::~IFormFactorPolyhedron()
 ";
 
-%feature("docstring")  IFormFactorPolyhedron::bottomZ "double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const final
+%feature("docstring")  IFormFactorPolyhedron::bottomZ "double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  IFormFactorPolyhedron::topZ "double IFormFactorPolyhedron::topZ(const IRotation &rotation) const final
+%feature("docstring")  IFormFactorPolyhedron::topZ "double IFormFactorPolyhedron::topZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  IFormFactorPolyhedron::evaluate_for_q "complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  IFormFactorPolyhedron::evaluate_for_q "complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -3305,12 +3305,12 @@ Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This m
 %feature("docstring")  IFormFactorPolyhedron::evaluate_centered "complex_t IFormFactorPolyhedron::evaluate_centered(cvector_t q) const
 ";
 
-%feature("docstring")  IFormFactorPolyhedron::volume "double IFormFactorPolyhedron::volume() const final
+%feature("docstring")  IFormFactorPolyhedron::volume "double IFormFactorPolyhedron::volume() const override
 
 Returns the total volume of the particle of this form factor's shape. 
 ";
 
-%feature("docstring")  IFormFactorPolyhedron::radialExtension "double IFormFactorPolyhedron::radialExtension() const final
+%feature("docstring")  IFormFactorPolyhedron::radialExtension "double IFormFactorPolyhedron::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
@@ -3335,12 +3335,12 @@ C++ includes: IFormFactorPrism.h
 %feature("docstring")  IFormFactorPrism::~IFormFactorPrism "IFormFactorPrism::~IFormFactorPrism()
 ";
 
-%feature("docstring")  IFormFactorPrism::bottomZ "double IFormFactorPrism::bottomZ(const IRotation &rotation) const final
+%feature("docstring")  IFormFactorPrism::bottomZ "double IFormFactorPrism::bottomZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  IFormFactorPrism::topZ "double IFormFactorPrism::topZ(const IRotation &rotation) const final
+%feature("docstring")  IFormFactorPrism::topZ "double IFormFactorPrism::topZ(const IRotation &rotation) const override
 
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
@@ -4142,12 +4142,12 @@ C++ includes: InterferenceFunctionNone.h
 %feature("docstring")  InterferenceFunctionNone::InterferenceFunctionNone "InterferenceFunctionNone::InterferenceFunctionNone()
 ";
 
-%feature("docstring")  InterferenceFunctionNone::clone "InterferenceFunctionNone * InterferenceFunctionNone::clone() const final
+%feature("docstring")  InterferenceFunctionNone::clone "InterferenceFunctionNone * InterferenceFunctionNone::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  InterferenceFunctionNone::accept "void InterferenceFunctionNone::accept(INodeVisitor *visitor) const final
+%feature("docstring")  InterferenceFunctionNone::accept "void InterferenceFunctionNone::accept(INodeVisitor *visitor) const override
 ";
 
 
@@ -4173,12 +4173,12 @@ damping_length:
 the damping (coherence) length of the paracrystal in nanometers 
 ";
 
-%feature("docstring")  InterferenceFunctionRadialParaCrystal::clone "InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const final
+%feature("docstring")  InterferenceFunctionRadialParaCrystal::clone "InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  InterferenceFunctionRadialParaCrystal::accept "void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const final
+%feature("docstring")  InterferenceFunctionRadialParaCrystal::accept "void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  InterferenceFunctionRadialParaCrystal::setKappa "void InterferenceFunctionRadialParaCrystal::setKappa(double kappa)
@@ -4223,7 +4223,7 @@ probability distribution (Fourier transform of probability density)
 %feature("docstring")  InterferenceFunctionRadialParaCrystal::dampingLength "double InterferenceFunctionRadialParaCrystal::dampingLength() const
 ";
 
-%feature("docstring")  InterferenceFunctionRadialParaCrystal::getChildren "std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const final
+%feature("docstring")  InterferenceFunctionRadialParaCrystal::getChildren "std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const override
 ";
 
 %feature("docstring")  InterferenceFunctionRadialParaCrystal::randomSample "double InterferenceFunctionRadialParaCrystal::randomSample() const
@@ -4241,12 +4241,12 @@ C++ includes: InterferenceFunctionTwin.h
 %feature("docstring")  InterferenceFunctionTwin::InterferenceFunctionTwin "InterferenceFunctionTwin::InterferenceFunctionTwin(const kvector_t &direction, double mean_distance, double std_dev)
 ";
 
-%feature("docstring")  InterferenceFunctionTwin::clone "InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const final
+%feature("docstring")  InterferenceFunctionTwin::clone "InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  InterferenceFunctionTwin::accept "void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const final
+%feature("docstring")  InterferenceFunctionTwin::accept "void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  InterferenceFunctionTwin::direction "kvector_t InterferenceFunctionTwin::direction() const
@@ -4318,7 +4318,7 @@ z:
 z-coordinate in nanometers 
 ";
 
-%feature("docstring")  IParticle::translate "void IParticle::translate(kvector_t translation) final
+%feature("docstring")  IParticle::translate "void IParticle::translate(kvector_t translation) override
 
 Translates the particle. 
 ";
@@ -4333,7 +4333,7 @@ Returns rotation object.
 Sets transformation. 
 ";
 
-%feature("docstring")  IParticle::rotate "void IParticle::rotate(const IRotation &rotation) final
+%feature("docstring")  IParticle::rotate "void IParticle::rotate(const IRotation &rotation) override
 
 Rotates the particle. 
 ";
@@ -4425,12 +4425,12 @@ C++ includes: IProfileRipple.h
 %feature("docstring")  IProfileRipple::getWidth "double IProfileRipple::getWidth() const
 ";
 
-%feature("docstring")  IProfileRipple::radialExtension "double IProfileRipple::radialExtension() const final
+%feature("docstring")  IProfileRipple::radialExtension "double IProfileRipple::radialExtension() const override
 
 Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 ";
 
-%feature("docstring")  IProfileRipple::evaluate_for_q "complex_t IProfileRipple::evaluate_for_q(cvector_t q) const final
+%feature("docstring")  IProfileRipple::evaluate_for_q "complex_t IProfileRipple::evaluate_for_q(cvector_t q) const override
 
 Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 ";
@@ -4866,18 +4866,18 @@ thickness of a layer in nanometers
 %feature("docstring")  Layer::~Layer "Layer::~Layer() override
 ";
 
-%feature("docstring")  Layer::clone "Layer * Layer::clone() const final
+%feature("docstring")  Layer::clone "Layer * Layer::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  Layer::accept "void Layer::accept(INodeVisitor *visitor) const final
+%feature("docstring")  Layer::accept "void Layer::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  Layer::thickness "double Layer::thickness() const
 ";
 
-%feature("docstring")  Layer::material "const Material* Layer::material() const final
+%feature("docstring")  Layer::material "const Material* Layer::material() const override
 
 Returns nullptr, unless overwritten to return a specific material. 
 ";
@@ -4891,7 +4891,7 @@ Returns nullptr, unless overwritten to return a specific material.
 %feature("docstring")  Layer::layouts "std::vector< const ParticleLayout * > Layer::layouts() const
 ";
 
-%feature("docstring")  Layer::getChildren "std::vector< const INode * > Layer::getChildren() const final
+%feature("docstring")  Layer::getChildren "std::vector< const INode * > Layer::getChildren() const override
 ";
 
 %feature("docstring")  Layer::registerThickness "void Layer::registerThickness(bool make_registered=true)
@@ -5181,30 +5181,30 @@ Constructs basic material with name and magnetization.
 Returns pointer to a copy of material. 
 ";
 
-%feature("docstring")  MagneticMaterialImpl::inverted "MagneticMaterialImpl * MagneticMaterialImpl::inverted() const final
+%feature("docstring")  MagneticMaterialImpl::inverted "MagneticMaterialImpl * MagneticMaterialImpl::inverted() const override
 
 Constructs a material with inverted magnetization. 
 ";
 
-%feature("docstring")  MagneticMaterialImpl::isScalarMaterial "bool MagneticMaterialImpl::isScalarMaterial() const final
+%feature("docstring")  MagneticMaterialImpl::isScalarMaterial "bool MagneticMaterialImpl::isScalarMaterial() const override
 
 Indicates whether the interaction with the material is scalar. This means that different polarization states will be diffracted equally 
 ";
 
-%feature("docstring")  MagneticMaterialImpl::isMagneticMaterial "bool MagneticMaterialImpl::isMagneticMaterial() const final
+%feature("docstring")  MagneticMaterialImpl::isMagneticMaterial "bool MagneticMaterialImpl::isMagneticMaterial() const override
 ";
 
-%feature("docstring")  MagneticMaterialImpl::magnetization "kvector_t MagneticMaterialImpl::magnetization() const final
+%feature("docstring")  MagneticMaterialImpl::magnetization "kvector_t MagneticMaterialImpl::magnetization() const override
 
 Returns the magnetization (in A/m) 
 ";
 
-%feature("docstring")  MagneticMaterialImpl::polarizedSubtrSLD "Eigen::Matrix2cd MagneticMaterialImpl::polarizedSubtrSLD(const WavevectorInfo &wavevectors) const final
+%feature("docstring")  MagneticMaterialImpl::polarizedSubtrSLD "Eigen::Matrix2cd MagneticMaterialImpl::polarizedSubtrSLD(const WavevectorInfo &wavevectors) const override
 
 Returns (  $ \\\\pi/\\\\lambda^2 $ - sld) matrix with magnetization corrections. 
 ";
 
-%feature("docstring")  MagneticMaterialImpl::rotatedMaterial "MagneticMaterialImpl * MagneticMaterialImpl::rotatedMaterial(const Transform3D &transform) const final
+%feature("docstring")  MagneticMaterialImpl::rotatedMaterial "MagneticMaterialImpl * MagneticMaterialImpl::rotatedMaterial(const Transform3D &transform) const override
 ";
 
 
@@ -5409,12 +5409,12 @@ C++ includes: MatrixFresnelMap.h
 %feature("docstring")  MatrixFresnelMap::MatrixFresnelMap "MatrixFresnelMap::MatrixFresnelMap(const MatrixFresnelMap &other)=delete
 ";
 
-%feature("docstring")  MatrixFresnelMap::getOutCoefficients "std::unique_ptr< const ILayerRTCoefficients > MatrixFresnelMap::getOutCoefficients(const SimulationElement &sim_element, size_t layer_index) const final
+%feature("docstring")  MatrixFresnelMap::getOutCoefficients "std::unique_ptr< const ILayerRTCoefficients > MatrixFresnelMap::getOutCoefficients(const SimulationElement &sim_element, size_t layer_index) const override
 
 Retrieves the amplitude coefficients for a (time-reversed) outgoing wavevector. 
 ";
 
-%feature("docstring")  MatrixFresnelMap::setSlices "void MatrixFresnelMap::setSlices(const std::vector< Slice > &slices) final
+%feature("docstring")  MatrixFresnelMap::setSlices "void MatrixFresnelMap::setSlices(const std::vector< Slice > &slices) override
 ";
 
 
@@ -5499,20 +5499,20 @@ C++ includes: MesoCrystal.h
 %feature("docstring")  MesoCrystal::~MesoCrystal "MesoCrystal::~MesoCrystal()
 ";
 
-%feature("docstring")  MesoCrystal::clone "MesoCrystal * MesoCrystal::clone() const final
+%feature("docstring")  MesoCrystal::clone "MesoCrystal * MesoCrystal::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  MesoCrystal::accept "void MesoCrystal::accept(INodeVisitor *visitor) const final
+%feature("docstring")  MesoCrystal::accept "void MesoCrystal::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  MesoCrystal::createSlicedParticle "SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const final
+%feature("docstring")  MesoCrystal::createSlicedParticle "SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const override
 
 Creates a sliced form factor for this particle. 
 ";
 
-%feature("docstring")  MesoCrystal::getChildren "std::vector< const INode * > MesoCrystal::getChildren() const final
+%feature("docstring")  MesoCrystal::getChildren "std::vector< const INode * > MesoCrystal::getChildren() const override
 ";
 
 
@@ -5610,12 +5610,12 @@ C++ includes: MultiLayer.h
 %feature("docstring")  MultiLayer::~MultiLayer "MultiLayer::~MultiLayer() override
 ";
 
-%feature("docstring")  MultiLayer::clone "MultiLayer * MultiLayer::clone() const final
+%feature("docstring")  MultiLayer::clone "MultiLayer * MultiLayer::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  MultiLayer::accept "void MultiLayer::accept(INodeVisitor *visitor) const final
+%feature("docstring")  MultiLayer::accept "void MultiLayer::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  MultiLayer::numberOfLayers "size_t MultiLayer::numberOfLayers() const
@@ -5667,7 +5667,7 @@ Returns cross correlation length of roughnesses between interfaces.
 Returns the external field applied to the multilayer (units: A/m) 
 ";
 
-%feature("docstring")  MultiLayer::getChildren "std::vector< const INode * > MultiLayer::getChildren() const final
+%feature("docstring")  MultiLayer::getChildren "std::vector< const INode * > MultiLayer::getChildren() const override
 ";
 
 
@@ -5739,15 +5739,15 @@ C++ includes: Particle.h
 %feature("docstring")  Particle::Particle "Particle::Particle(Material material, const IFormFactor &form_factor, const IRotation &rotation)
 ";
 
-%feature("docstring")  Particle::clone "Particle * Particle::clone() const final
+%feature("docstring")  Particle::clone "Particle * Particle::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  Particle::accept "void Particle::accept(INodeVisitor *visitor) const final
+%feature("docstring")  Particle::accept "void Particle::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  Particle::createSlicedParticle "SlicedParticle Particle::createSlicedParticle(ZLimits limits) const final
+%feature("docstring")  Particle::createSlicedParticle "SlicedParticle Particle::createSlicedParticle(ZLimits limits) const override
 
 Creates a sliced form factor for this particle. 
 ";
@@ -5755,12 +5755,12 @@ Creates a sliced form factor for this particle.
 %feature("docstring")  Particle::setMaterial "void Particle::setMaterial(Material material)
 ";
 
-%feature("docstring")  Particle::material "const Material* Particle::material() const final
+%feature("docstring")  Particle::material "const Material* Particle::material() const override
 
 Returns nullptr, unless overwritten to return a specific material. 
 ";
 
-%feature("docstring")  Particle::getChildren "std::vector< const INode * > Particle::getChildren() const final
+%feature("docstring")  Particle::getChildren "std::vector< const INode * > Particle::getChildren() const override
 ";
 
 
@@ -5781,15 +5781,15 @@ C++ includes: ParticleComposition.h
 %feature("docstring")  ParticleComposition::~ParticleComposition "ParticleComposition::~ParticleComposition()
 ";
 
-%feature("docstring")  ParticleComposition::clone "ParticleComposition * ParticleComposition::clone() const final
+%feature("docstring")  ParticleComposition::clone "ParticleComposition * ParticleComposition::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  ParticleComposition::accept "void ParticleComposition::accept(INodeVisitor *visitor) const final
+%feature("docstring")  ParticleComposition::accept "void ParticleComposition::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  ParticleComposition::createFormFactor "IFormFactor * ParticleComposition::createFormFactor() const final
+%feature("docstring")  ParticleComposition::createFormFactor "IFormFactor * ParticleComposition::createFormFactor() const override
 
 Creates a form factor for this particle. 
 ";
@@ -5808,15 +5808,15 @@ Creates a form factor for this particle.
 Returns number of different particles. 
 ";
 
-%feature("docstring")  ParticleComposition::getChildren "std::vector< const INode * > ParticleComposition::getChildren() const final
+%feature("docstring")  ParticleComposition::getChildren "std::vector< const INode * > ParticleComposition::getChildren() const override
 ";
 
-%feature("docstring")  ParticleComposition::decompose "SafePointerVector< IParticle > ParticleComposition::decompose() const final
+%feature("docstring")  ParticleComposition::decompose "SafePointerVector< IParticle > ParticleComposition::decompose() const override
 
 Decompose in constituent  IParticle objects. 
 ";
 
-%feature("docstring")  ParticleComposition::bottomTopZ "ParticleLimits ParticleComposition::bottomTopZ() const final
+%feature("docstring")  ParticleComposition::bottomTopZ "ParticleLimits ParticleComposition::bottomTopZ() const override
 
 Top and bottom z-coordinate. 
 ";
@@ -5848,15 +5848,15 @@ C++ includes: ParticleCoreShell.h
 %feature("docstring")  ParticleCoreShell::~ParticleCoreShell "ParticleCoreShell::~ParticleCoreShell()
 ";
 
-%feature("docstring")  ParticleCoreShell::clone "ParticleCoreShell * ParticleCoreShell::clone() const final
+%feature("docstring")  ParticleCoreShell::clone "ParticleCoreShell * ParticleCoreShell::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  ParticleCoreShell::accept "void ParticleCoreShell::accept(INodeVisitor *visitor) const final
+%feature("docstring")  ParticleCoreShell::accept "void ParticleCoreShell::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  ParticleCoreShell::createSlicedParticle "SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const final
+%feature("docstring")  ParticleCoreShell::createSlicedParticle "SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const override
 
 Creates a sliced form factor for this particle. 
 ";
@@ -5867,7 +5867,7 @@ Creates a sliced form factor for this particle.
 %feature("docstring")  ParticleCoreShell::shellParticle "const Particle * ParticleCoreShell::shellParticle() const
 ";
 
-%feature("docstring")  ParticleCoreShell::getChildren "std::vector< const INode * > ParticleCoreShell::getChildren() const final
+%feature("docstring")  ParticleCoreShell::getChildren "std::vector< const INode * > ParticleCoreShell::getChildren() const override
 ";
 
 
@@ -5882,20 +5882,20 @@ C++ includes: ParticleDistribution.h
 %feature("docstring")  ParticleDistribution::ParticleDistribution "ParticleDistribution::ParticleDistribution(const IParticle &prototype, const ParameterDistribution &par_distr)
 ";
 
-%feature("docstring")  ParticleDistribution::clone "ParticleDistribution * ParticleDistribution::clone() const final
+%feature("docstring")  ParticleDistribution::clone "ParticleDistribution * ParticleDistribution::clone() const override
 
 Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  ParticleDistribution::accept "void ParticleDistribution::accept(INodeVisitor *visitor) const final
+%feature("docstring")  ParticleDistribution::accept "void ParticleDistribution::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  ParticleDistribution::translate "void ParticleDistribution::translate(kvector_t translation) final
+%feature("docstring")  ParticleDistribution::translate "void ParticleDistribution::translate(kvector_t translation) override
 
 Translates the particle with the given vector. 
 ";
 
-%feature("docstring")  ParticleDistribution::rotate "void ParticleDistribution::rotate(const IRotation &rotation) final
+%feature("docstring")  ParticleDistribution::rotate "void ParticleDistribution::rotate(const IRotation &rotation) override
 
 Applies the given rotation to the particle. 
 ";
@@ -5917,7 +5917,7 @@ Returns the prototype particle, used for generating multiple ones.
 Returns the distributed parameter data. 
 ";
 
-%feature("docstring")  ParticleDistribution::getChildren "std::vector< const INode * > ParticleDistribution::getChildren() const final
+%feature("docstring")  ParticleDistribution::getChildren "std::vector< const INode * > ParticleDistribution::getChildren() const override
 ";
 
 %feature("docstring")  ParticleDistribution::mainUnits "std::string ParticleDistribution::mainUnits() const
@@ -6716,7 +6716,7 @@ Sets sample builder and borrows its parameters.
 Resets to initial state by removing builder and its borrowed parameters. 
 ";
 
-%feature("docstring")  SampleBuilderNode::accept "void SampleBuilderNode::accept(INodeVisitor *visitor) const final
+%feature("docstring")  SampleBuilderNode::accept "void SampleBuilderNode::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  SampleBuilderNode::createMultiLayer "std::unique_ptr< MultiLayer > SampleBuilderNode::createMultiLayer()
@@ -6766,7 +6766,7 @@ Generates new sample if sample builder defined.
 %feature("docstring")  SampleProvider::getChildren "std::vector< const INode * > SampleProvider::getChildren() const override
 ";
 
-%feature("docstring")  SampleProvider::accept "void SampleProvider::accept(INodeVisitor *visitor) const final
+%feature("docstring")  SampleProvider::accept "void SampleProvider::accept(INodeVisitor *visitor) const override
 ";
 
 %feature("docstring")  SampleProvider::setParent "void SampleProvider::setParent(const INode *newParent) override
@@ -7280,19 +7280,19 @@ C++ includes: Lattice2D.h
 %feature("docstring")  SquareLattice2D::clone "SquareLattice2D * SquareLattice2D::clone() const
 ";
 
-%feature("docstring")  SquareLattice2D::accept "void SquareLattice2D::accept(INodeVisitor *visitor) const final
+%feature("docstring")  SquareLattice2D::accept "void SquareLattice2D::accept(INodeVisitor *visitor) const override
 ";
 
-%feature("docstring")  SquareLattice2D::length1 "virtual double SquareLattice2D::length1() const
+%feature("docstring")  SquareLattice2D::length1 "double SquareLattice2D::length1() const override
 ";
 
-%feature("docstring")  SquareLattice2D::length2 "virtual double SquareLattice2D::length2() const
+%feature("docstring")  SquareLattice2D::length2 "double SquareLattice2D::length2() const override
 ";
 
-%feature("docstring")  SquareLattice2D::latticeAngle "double SquareLattice2D::latticeAngle() const
+%feature("docstring")  SquareLattice2D::latticeAngle "double SquareLattice2D::latticeAngle() const override
 ";
 
-%feature("docstring")  SquareLattice2D::unitCellArea "double SquareLattice2D::unitCellArea() const
+%feature("docstring")  SquareLattice2D::unitCellArea "double SquareLattice2D::unitCellArea() const override
 ";
 
 
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 97b1cb3d9a327c1179966e042fdca7ec23cb55a6..d6a94cf23da5dd7d51445c503c5cafcabc940781 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -3908,7 +3908,7 @@ class DepthProbeSimulation(ISimulation):
     def accept(self, visitor):
         r"""
         accept(DepthProbeSimulation self, INodeVisitor * visitor)
-        void DepthProbeSimulation::accept(INodeVisitor *visitor) const final
+        void DepthProbeSimulation::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainCore.DepthProbeSimulation_accept(self, visitor)
@@ -4019,7 +4019,7 @@ class SpecularSimulation(ISimulation):
     def accept(self, visitor):
         r"""
         accept(SpecularSimulation self, INodeVisitor * visitor)
-        void SpecularSimulation::accept(INodeVisitor *visitor) const final
+        void SpecularSimulation::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainCore.SpecularSimulation_accept(self, visitor)
@@ -4235,7 +4235,7 @@ class ConstantBackground(IBackground):
     def clone(self):
         r"""
         clone(ConstantBackground self) -> ConstantBackground
-        ConstantBackground * ConstantBackground::clone() const final
+        ConstantBackground * ConstantBackground::clone() const override
 
         """
         return _libBornAgainCore.ConstantBackground_clone(self)
@@ -4259,7 +4259,7 @@ class ConstantBackground(IBackground):
     def addBackground(self, intensity):
         r"""
         addBackground(ConstantBackground self, double intensity) -> double
-        double ConstantBackground::addBackground(double intensity) const final
+        double ConstantBackground::addBackground(double intensity) const override
 
         """
         return _libBornAgainCore.ConstantBackground_addBackground(self, intensity)
@@ -4292,7 +4292,7 @@ class PoissonNoiseBackground(IBackground):
     def clone(self):
         r"""
         clone(PoissonNoiseBackground self) -> PoissonNoiseBackground
-        PoissonNoiseBackground * PoissonNoiseBackground::clone() const final
+        PoissonNoiseBackground * PoissonNoiseBackground::clone() const override
 
         """
         return _libBornAgainCore.PoissonNoiseBackground_clone(self)
@@ -4308,7 +4308,7 @@ class PoissonNoiseBackground(IBackground):
     def addBackground(self, intensity):
         r"""
         addBackground(PoissonNoiseBackground self, double intensity) -> double
-        double PoissonNoiseBackground::addBackground(double intensity) const final
+        double PoissonNoiseBackground::addBackground(double intensity) const override
 
         """
         return _libBornAgainCore.PoissonNoiseBackground_addBackground(self, intensity)
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index a90e0175fe7dcc96c6a027ef14e920eb007ece64..1a651690a0939e280d61e2fe59e165927fd29865 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -44740,7 +44740,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DepthProbeSimulation_accept", _wrap_DepthProbeSimulation_accept, METH_VARARGS, "\n"
 		"DepthProbeSimulation_accept(DepthProbeSimulation self, INodeVisitor * visitor)\n"
-		"void DepthProbeSimulation::accept(INodeVisitor *visitor) const final\n"
+		"void DepthProbeSimulation::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "DepthProbeSimulation_result", _wrap_DepthProbeSimulation_result, METH_O, "\n"
@@ -44811,7 +44811,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "SpecularSimulation_accept", _wrap_SpecularSimulation_accept, METH_VARARGS, "\n"
 		"SpecularSimulation_accept(SpecularSimulation self, INodeVisitor * visitor)\n"
-		"void SpecularSimulation::accept(INodeVisitor *visitor) const final\n"
+		"void SpecularSimulation::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "SpecularSimulation_result", _wrap_SpecularSimulation_result, METH_O, "\n"
@@ -44933,7 +44933,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ConstantBackground_clone", _wrap_ConstantBackground_clone, METH_O, "\n"
 		"ConstantBackground_clone(ConstantBackground self) -> ConstantBackground\n"
-		"ConstantBackground * ConstantBackground::clone() const final\n"
+		"ConstantBackground * ConstantBackground::clone() const override\n"
 		"\n"
 		""},
 	 { "ConstantBackground_backgroundValue", _wrap_ConstantBackground_backgroundValue, METH_O, "\n"
@@ -44948,7 +44948,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ConstantBackground_addBackground", _wrap_ConstantBackground_addBackground, METH_VARARGS, "\n"
 		"ConstantBackground_addBackground(ConstantBackground self, double intensity) -> double\n"
-		"double ConstantBackground::addBackground(double intensity) const final\n"
+		"double ConstantBackground::addBackground(double intensity) const override\n"
 		"\n"
 		""},
 	 { "delete_ConstantBackground", _wrap_delete_ConstantBackground, METH_O, "delete_ConstantBackground(ConstantBackground self)"},
@@ -44961,7 +44961,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "PoissonNoiseBackground_clone", _wrap_PoissonNoiseBackground_clone, METH_O, "\n"
 		"PoissonNoiseBackground_clone(PoissonNoiseBackground self) -> PoissonNoiseBackground\n"
-		"PoissonNoiseBackground * PoissonNoiseBackground::clone() const final\n"
+		"PoissonNoiseBackground * PoissonNoiseBackground::clone() const override\n"
 		"\n"
 		""},
 	 { "PoissonNoiseBackground_accept", _wrap_PoissonNoiseBackground_accept, METH_VARARGS, "\n"
@@ -44971,7 +44971,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "PoissonNoiseBackground_addBackground", _wrap_PoissonNoiseBackground_addBackground, METH_VARARGS, "\n"
 		"PoissonNoiseBackground_addBackground(PoissonNoiseBackground self, double intensity) -> double\n"
-		"double PoissonNoiseBackground::addBackground(double intensity) const final\n"
+		"double PoissonNoiseBackground::addBackground(double intensity) const override\n"
 		"\n"
 		""},
 	 { "delete_PoissonNoiseBackground", _wrap_delete_PoissonNoiseBackground, METH_O, "delete_PoissonNoiseBackground(PoissonNoiseBackground self)"},
diff --git a/auto/Wrap/libBornAgainDevice.py b/auto/Wrap/libBornAgainDevice.py
index c1607ab3b50b285771747cdeccc3bc5d2bf519e8..2005f6590884b18210fb2976776e99148cb5c85a 100644
--- a/auto/Wrap/libBornAgainDevice.py
+++ b/auto/Wrap/libBornAgainDevice.py
@@ -3608,7 +3608,7 @@ class ResolutionFunction2DGaussian(IResolutionFunction2D):
     def accept(self, visitor):
         r"""
         accept(ResolutionFunction2DGaussian self, INodeVisitor * visitor)
-        void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const final
+        void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainDevice.ResolutionFunction2DGaussian_accept(self, visitor)
@@ -4247,7 +4247,7 @@ class RectangularDetector(IDetector2D):
     def accept(self, visitor):
         r"""
         accept(RectangularDetector self, INodeVisitor * visitor)
-        void RectangularDetector::accept(INodeVisitor *visitor) const final
+        void RectangularDetector::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainDevice.RectangularDetector_accept(self, visitor)
@@ -4402,7 +4402,7 @@ class RectangularDetector(IDetector2D):
     def defaultAxesUnits(self):
         r"""
         defaultAxesUnits(RectangularDetector self) -> Axes::Units
-        virtual Axes::Units RectangularDetector::defaultAxesUnits() const final
+        virtual Axes::Units RectangularDetector::defaultAxesUnits() const override
 
         return default axes units 
 
@@ -4464,7 +4464,7 @@ class SphericalDetector(IDetector2D):
     def defaultAxesUnits(self):
         r"""
         defaultAxesUnits(SphericalDetector self) -> Axes::Units
-        virtual Axes::Units SphericalDetector::defaultAxesUnits() const final
+        virtual Axes::Units SphericalDetector::defaultAxesUnits() const override
 
         return default axes units 
 
@@ -4508,7 +4508,7 @@ class IsGISAXSDetector(SphericalDetector):
     def accept(self, visitor):
         r"""
         accept(IsGISAXSDetector self, INodeVisitor * visitor)
-        void IsGISAXSDetector::accept(INodeVisitor *visitor) const final
+        void IsGISAXSDetector::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainDevice.IsGISAXSDetector_accept(self, visitor)
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index c67d4847085d0f61403c00954b6f1a9660d89e36..f875c08430b5bc5f0bae4c82d78510457223e790 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -44969,7 +44969,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ResolutionFunction2DGaussian_accept", _wrap_ResolutionFunction2DGaussian_accept, METH_VARARGS, "\n"
 		"ResolutionFunction2DGaussian_accept(ResolutionFunction2DGaussian self, INodeVisitor * visitor)\n"
-		"void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const final\n"
+		"void ResolutionFunction2DGaussian::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "ResolutionFunction2DGaussian_getSigmaX", _wrap_ResolutionFunction2DGaussian_getSigmaX, METH_O, "\n"
@@ -45329,7 +45329,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "RectangularDetector_accept", _wrap_RectangularDetector_accept, METH_VARARGS, "\n"
 		"RectangularDetector_accept(RectangularDetector self, INodeVisitor * visitor)\n"
-		"void RectangularDetector::accept(INodeVisitor *visitor) const final\n"
+		"void RectangularDetector::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_RectangularDetector", _wrap_delete_RectangularDetector, METH_O, "\n"
@@ -45431,7 +45431,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "RectangularDetector_defaultAxesUnits", _wrap_RectangularDetector_defaultAxesUnits, METH_O, "\n"
 		"RectangularDetector_defaultAxesUnits(RectangularDetector self) -> Axes::Units\n"
-		"virtual Axes::Units RectangularDetector::defaultAxesUnits() const final\n"
+		"virtual Axes::Units RectangularDetector::defaultAxesUnits() const override\n"
 		"\n"
 		"return default axes units \n"
 		"\n"
@@ -45468,7 +45468,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "SphericalDetector_defaultAxesUnits", _wrap_SphericalDetector_defaultAxesUnits, METH_O, "\n"
 		"SphericalDetector_defaultAxesUnits(SphericalDetector self) -> Axes::Units\n"
-		"virtual Axes::Units SphericalDetector::defaultAxesUnits() const final\n"
+		"virtual Axes::Units SphericalDetector::defaultAxesUnits() const override\n"
 		"\n"
 		"return default axes units \n"
 		"\n"
@@ -45489,7 +45489,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IsGISAXSDetector_accept", _wrap_IsGISAXSDetector_accept, METH_VARARGS, "\n"
 		"IsGISAXSDetector_accept(IsGISAXSDetector self, INodeVisitor * visitor)\n"
-		"void IsGISAXSDetector::accept(INodeVisitor *visitor) const final\n"
+		"void IsGISAXSDetector::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_IsGISAXSDetector", _wrap_delete_IsGISAXSDetector, METH_O, "delete_IsGISAXSDetector(IsGISAXSDetector self)"},
diff --git a/auto/Wrap/libBornAgainParam.py b/auto/Wrap/libBornAgainParam.py
index c71d60fdac9749296a5da6866f771410c9606da8..9980f8cff19ed2361370127adffa3a85003012fb 100644
--- a/auto/Wrap/libBornAgainParam.py
+++ b/auto/Wrap/libBornAgainParam.py
@@ -3625,7 +3625,7 @@ class DistributionGate(IDistribution1D):
     def clone(self):
         r"""
         clone(DistributionGate self) -> DistributionGate
-        DistributionGate* DistributionGate::clone() const final
+        DistributionGate* DistributionGate::clone() const override
 
         """
         return _libBornAgainParam.DistributionGate_clone(self)
@@ -3633,7 +3633,7 @@ class DistributionGate(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionGate self, double x) -> double
-        double DistributionGate::probabilityDensity(double x) const final
+        double DistributionGate::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -3643,7 +3643,7 @@ class DistributionGate(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionGate self) -> double
-        double DistributionGate::getMean() const final
+        double DistributionGate::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -3669,7 +3669,7 @@ class DistributionGate(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionGate self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         Returns list of sample values. 
 
@@ -3679,7 +3679,7 @@ class DistributionGate(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionGate self) -> bool
-        bool DistributionGate::isDelta() const final
+        bool DistributionGate::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -3689,7 +3689,7 @@ class DistributionGate(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionGate self, INodeVisitor visitor)
-        void DistributionGate::accept(INodeVisitor *visitor) const final
+        void DistributionGate::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -3726,7 +3726,7 @@ class DistributionLorentz(IDistribution1D):
     def clone(self):
         r"""
         clone(DistributionLorentz self) -> DistributionLorentz
-        DistributionLorentz* DistributionLorentz::clone() const final
+        DistributionLorentz* DistributionLorentz::clone() const override
 
         """
         return _libBornAgainParam.DistributionLorentz_clone(self)
@@ -3734,7 +3734,7 @@ class DistributionLorentz(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionLorentz self, double x) -> double
-        double DistributionLorentz::probabilityDensity(double x) const final
+        double DistributionLorentz::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -3744,7 +3744,7 @@ class DistributionLorentz(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionLorentz self) -> double
-        double DistributionLorentz::getMean() const final
+        double DistributionLorentz::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -3762,7 +3762,7 @@ class DistributionLorentz(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionLorentz self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         generate list of sample values 
 
@@ -3772,7 +3772,7 @@ class DistributionLorentz(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionLorentz self) -> bool
-        bool DistributionLorentz::isDelta() const final
+        bool DistributionLorentz::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -3782,7 +3782,7 @@ class DistributionLorentz(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionLorentz self, INodeVisitor visitor)
-        void DistributionLorentz::accept(INodeVisitor *visitor) const final
+        void DistributionLorentz::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -3827,7 +3827,7 @@ class DistributionGaussian(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionGaussian self, double x) -> double
-        double DistributionGaussian::probabilityDensity(double x) const final
+        double DistributionGaussian::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -3837,7 +3837,7 @@ class DistributionGaussian(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionGaussian self) -> double
-        double DistributionGaussian::getMean() const final
+        double DistributionGaussian::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -3855,7 +3855,7 @@ class DistributionGaussian(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionGaussian self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         generate list of sample values 
 
@@ -3865,7 +3865,7 @@ class DistributionGaussian(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionGaussian self) -> bool
-        bool DistributionGaussian::isDelta() const final
+        bool DistributionGaussian::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -3875,7 +3875,7 @@ class DistributionGaussian(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionGaussian self, INodeVisitor visitor)
-        void DistributionGaussian::accept(INodeVisitor *visitor) const final
+        void DistributionGaussian::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -3919,7 +3919,7 @@ class DistributionLogNormal(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionLogNormal self, double x) -> double
-        double DistributionLogNormal::probabilityDensity(double x) const final
+        double DistributionLogNormal::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -3929,7 +3929,7 @@ class DistributionLogNormal(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionLogNormal self) -> double
-        double DistributionLogNormal::getMean() const final
+        double DistributionLogNormal::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -3955,7 +3955,7 @@ class DistributionLogNormal(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionLogNormal self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         generate list of sample values 
 
@@ -3965,7 +3965,7 @@ class DistributionLogNormal(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionLogNormal self) -> bool
-        bool DistributionLogNormal::isDelta() const final
+        bool DistributionLogNormal::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -3975,7 +3975,7 @@ class DistributionLogNormal(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionLogNormal self, INodeVisitor visitor)
-        void DistributionLogNormal::accept(INodeVisitor *visitor) const final
+        void DistributionLogNormal::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -3985,7 +3985,7 @@ class DistributionLogNormal(IDistribution1D):
     def setUnits(self, units):
         r"""
         setUnits(DistributionLogNormal self, std::string const & units)
-        void DistributionLogNormal::setUnits(const std::string &units)
+        void DistributionLogNormal::setUnits(const std::string &units) override
 
         Sets distribution units. 
 
@@ -4022,7 +4022,7 @@ class DistributionCosine(IDistribution1D):
     def clone(self):
         r"""
         clone(DistributionCosine self) -> DistributionCosine
-        DistributionCosine* DistributionCosine::clone() const final
+        DistributionCosine* DistributionCosine::clone() const override
 
         """
         return _libBornAgainParam.DistributionCosine_clone(self)
@@ -4030,7 +4030,7 @@ class DistributionCosine(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionCosine self, double x) -> double
-        double DistributionCosine::probabilityDensity(double x) const final
+        double DistributionCosine::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -4040,7 +4040,7 @@ class DistributionCosine(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionCosine self) -> double
-        double DistributionCosine::getMean() const final
+        double DistributionCosine::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -4058,7 +4058,7 @@ class DistributionCosine(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionCosine self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         generate list of sample values 
 
@@ -4068,7 +4068,7 @@ class DistributionCosine(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionCosine self) -> bool
-        bool DistributionCosine::isDelta() const final
+        bool DistributionCosine::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -4078,7 +4078,7 @@ class DistributionCosine(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionCosine self, INodeVisitor visitor)
-        void DistributionCosine::accept(INodeVisitor *visitor) const final
+        void DistributionCosine::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
@@ -4123,7 +4123,7 @@ class DistributionTrapezoid(IDistribution1D):
     def probabilityDensity(self, x):
         r"""
         probabilityDensity(DistributionTrapezoid self, double x) -> double
-        double DistributionTrapezoid::probabilityDensity(double x) const final
+        double DistributionTrapezoid::probabilityDensity(double x) const override
 
         Returns the distribution-specific probability density for value x. 
 
@@ -4133,7 +4133,7 @@ class DistributionTrapezoid(IDistribution1D):
     def getMean(self):
         r"""
         getMean(DistributionTrapezoid self) -> double
-        double DistributionTrapezoid::getMean() const final
+        double DistributionTrapezoid::getMean() const override
 
         Returns the distribution-specific mean. 
 
@@ -4167,7 +4167,7 @@ class DistributionTrapezoid(IDistribution1D):
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionTrapezoid self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
-        std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const
+        std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override
 
         generate list of sample values 
 
@@ -4177,7 +4177,7 @@ class DistributionTrapezoid(IDistribution1D):
     def isDelta(self):
         r"""
         isDelta(DistributionTrapezoid self) -> bool
-        bool DistributionTrapezoid::isDelta() const final
+        bool DistributionTrapezoid::isDelta() const override
 
         Returns true if the distribution is in the limit case of a Dirac delta distribution. 
 
@@ -4187,7 +4187,7 @@ class DistributionTrapezoid(IDistribution1D):
     def accept(self, visitor):
         r"""
         accept(DistributionTrapezoid self, INodeVisitor visitor)
-        void DistributionTrapezoid::accept(INodeVisitor *visitor) const final
+        void DistributionTrapezoid::accept(INodeVisitor *visitor) const override
 
         Calls the  INodeVisitor's visit method. 
 
diff --git a/auto/Wrap/libBornAgainParam_wrap.cpp b/auto/Wrap/libBornAgainParam_wrap.cpp
index 0110bdccdd65b3c27f6e1f776ff05f9896377cc7..d7f39b09f2ea92f42c16897f6623f8573ad9322f 100644
--- a/auto/Wrap/libBornAgainParam_wrap.cpp
+++ b/auto/Wrap/libBornAgainParam_wrap.cpp
@@ -51485,19 +51485,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGate_clone", _wrap_DistributionGate_clone, METH_O, "\n"
 		"DistributionGate_clone(DistributionGate self) -> DistributionGate\n"
-		"DistributionGate* DistributionGate::clone() const final\n"
+		"DistributionGate* DistributionGate::clone() const override\n"
 		"\n"
 		""},
 	 { "DistributionGate_probabilityDensity", _wrap_DistributionGate_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionGate_probabilityDensity(DistributionGate self, double x) -> double\n"
-		"double DistributionGate::probabilityDensity(double x) const final\n"
+		"double DistributionGate::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionGate_getMean", _wrap_DistributionGate_getMean, METH_O, "\n"
 		"DistributionGate_getMean(DistributionGate self) -> double\n"
-		"double DistributionGate::getMean() const final\n"
+		"double DistributionGate::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51514,21 +51514,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGate_equidistantPoints", _wrap_DistributionGate_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionGate_equidistantPoints(DistributionGate self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionGate::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"Returns list of sample values. \n"
 		"\n"
 		""},
 	 { "DistributionGate_isDelta", _wrap_DistributionGate_isDelta, METH_O, "\n"
 		"DistributionGate_isDelta(DistributionGate self) -> bool\n"
-		"bool DistributionGate::isDelta() const final\n"
+		"bool DistributionGate::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionGate_accept", _wrap_DistributionGate_accept, METH_VARARGS, "\n"
 		"DistributionGate_accept(DistributionGate self, INodeVisitor visitor)\n"
-		"void DistributionGate::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionGate::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -51545,19 +51545,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLorentz_clone", _wrap_DistributionLorentz_clone, METH_O, "\n"
 		"DistributionLorentz_clone(DistributionLorentz self) -> DistributionLorentz\n"
-		"DistributionLorentz* DistributionLorentz::clone() const final\n"
+		"DistributionLorentz* DistributionLorentz::clone() const override\n"
 		"\n"
 		""},
 	 { "DistributionLorentz_probabilityDensity", _wrap_DistributionLorentz_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionLorentz_probabilityDensity(DistributionLorentz self, double x) -> double\n"
-		"double DistributionLorentz::probabilityDensity(double x) const final\n"
+		"double DistributionLorentz::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionLorentz_getMean", _wrap_DistributionLorentz_getMean, METH_O, "\n"
 		"DistributionLorentz_getMean(DistributionLorentz self) -> double\n"
-		"double DistributionLorentz::getMean() const final\n"
+		"double DistributionLorentz::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51569,21 +51569,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLorentz_equidistantPoints", _wrap_DistributionLorentz_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionLorentz_equidistantPoints(DistributionLorentz self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionLorentz::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"generate list of sample values \n"
 		"\n"
 		""},
 	 { "DistributionLorentz_isDelta", _wrap_DistributionLorentz_isDelta, METH_O, "\n"
 		"DistributionLorentz_isDelta(DistributionLorentz self) -> bool\n"
-		"bool DistributionLorentz::isDelta() const final\n"
+		"bool DistributionLorentz::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionLorentz_accept", _wrap_DistributionLorentz_accept, METH_VARARGS, "\n"
 		"DistributionLorentz_accept(DistributionLorentz self, INodeVisitor visitor)\n"
-		"void DistributionLorentz::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionLorentz::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -51605,14 +51605,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGaussian_probabilityDensity", _wrap_DistributionGaussian_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionGaussian_probabilityDensity(DistributionGaussian self, double x) -> double\n"
-		"double DistributionGaussian::probabilityDensity(double x) const final\n"
+		"double DistributionGaussian::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionGaussian_getMean", _wrap_DistributionGaussian_getMean, METH_O, "\n"
 		"DistributionGaussian_getMean(DistributionGaussian self) -> double\n"
-		"double DistributionGaussian::getMean() const final\n"
+		"double DistributionGaussian::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51624,21 +51624,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionGaussian_equidistantPoints", _wrap_DistributionGaussian_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionGaussian_equidistantPoints(DistributionGaussian self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionGaussian::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"generate list of sample values \n"
 		"\n"
 		""},
 	 { "DistributionGaussian_isDelta", _wrap_DistributionGaussian_isDelta, METH_O, "\n"
 		"DistributionGaussian_isDelta(DistributionGaussian self) -> bool\n"
-		"bool DistributionGaussian::isDelta() const final\n"
+		"bool DistributionGaussian::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionGaussian_accept", _wrap_DistributionGaussian_accept, METH_VARARGS, "\n"
 		"DistributionGaussian_accept(DistributionGaussian self, INodeVisitor visitor)\n"
-		"void DistributionGaussian::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionGaussian::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -51659,14 +51659,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLogNormal_probabilityDensity", _wrap_DistributionLogNormal_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionLogNormal_probabilityDensity(DistributionLogNormal self, double x) -> double\n"
-		"double DistributionLogNormal::probabilityDensity(double x) const final\n"
+		"double DistributionLogNormal::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionLogNormal_getMean", _wrap_DistributionLogNormal_getMean, METH_O, "\n"
 		"DistributionLogNormal_getMean(DistributionLogNormal self) -> double\n"
-		"double DistributionLogNormal::getMean() const final\n"
+		"double DistributionLogNormal::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51683,28 +51683,28 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionLogNormal_equidistantPoints", _wrap_DistributionLogNormal_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionLogNormal_equidistantPoints(DistributionLogNormal self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionLogNormal::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"generate list of sample values \n"
 		"\n"
 		""},
 	 { "DistributionLogNormal_isDelta", _wrap_DistributionLogNormal_isDelta, METH_O, "\n"
 		"DistributionLogNormal_isDelta(DistributionLogNormal self) -> bool\n"
-		"bool DistributionLogNormal::isDelta() const final\n"
+		"bool DistributionLogNormal::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionLogNormal_accept", _wrap_DistributionLogNormal_accept, METH_VARARGS, "\n"
 		"DistributionLogNormal_accept(DistributionLogNormal self, INodeVisitor visitor)\n"
-		"void DistributionLogNormal::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionLogNormal::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
 		""},
 	 { "DistributionLogNormal_setUnits", _wrap_DistributionLogNormal_setUnits, METH_VARARGS, "\n"
 		"DistributionLogNormal_setUnits(DistributionLogNormal self, std::string const & units)\n"
-		"void DistributionLogNormal::setUnits(const std::string &units)\n"
+		"void DistributionLogNormal::setUnits(const std::string &units) override\n"
 		"\n"
 		"Sets distribution units. \n"
 		"\n"
@@ -51721,19 +51721,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionCosine_clone", _wrap_DistributionCosine_clone, METH_O, "\n"
 		"DistributionCosine_clone(DistributionCosine self) -> DistributionCosine\n"
-		"DistributionCosine* DistributionCosine::clone() const final\n"
+		"DistributionCosine* DistributionCosine::clone() const override\n"
 		"\n"
 		""},
 	 { "DistributionCosine_probabilityDensity", _wrap_DistributionCosine_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionCosine_probabilityDensity(DistributionCosine self, double x) -> double\n"
-		"double DistributionCosine::probabilityDensity(double x) const final\n"
+		"double DistributionCosine::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionCosine_getMean", _wrap_DistributionCosine_getMean, METH_O, "\n"
 		"DistributionCosine_getMean(DistributionCosine self) -> double\n"
-		"double DistributionCosine::getMean() const final\n"
+		"double DistributionCosine::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51745,21 +51745,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionCosine_equidistantPoints", _wrap_DistributionCosine_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionCosine_equidistantPoints(DistributionCosine self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionCosine::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"generate list of sample values \n"
 		"\n"
 		""},
 	 { "DistributionCosine_isDelta", _wrap_DistributionCosine_isDelta, METH_O, "\n"
 		"DistributionCosine_isDelta(DistributionCosine self) -> bool\n"
-		"bool DistributionCosine::isDelta() const final\n"
+		"bool DistributionCosine::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionCosine_accept", _wrap_DistributionCosine_accept, METH_VARARGS, "\n"
 		"DistributionCosine_accept(DistributionCosine self, INodeVisitor visitor)\n"
-		"void DistributionCosine::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionCosine::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
@@ -51781,14 +51781,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionTrapezoid_probabilityDensity", _wrap_DistributionTrapezoid_probabilityDensity, METH_VARARGS, "\n"
 		"DistributionTrapezoid_probabilityDensity(DistributionTrapezoid self, double x) -> double\n"
-		"double DistributionTrapezoid::probabilityDensity(double x) const final\n"
+		"double DistributionTrapezoid::probabilityDensity(double x) const override\n"
 		"\n"
 		"Returns the distribution-specific probability density for value x. \n"
 		"\n"
 		""},
 	 { "DistributionTrapezoid_getMean", _wrap_DistributionTrapezoid_getMean, METH_O, "\n"
 		"DistributionTrapezoid_getMean(DistributionTrapezoid self) -> double\n"
-		"double DistributionTrapezoid::getMean() const final\n"
+		"double DistributionTrapezoid::getMean() const override\n"
 		"\n"
 		"Returns the distribution-specific mean. \n"
 		"\n"
@@ -51810,21 +51810,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "DistributionTrapezoid_equidistantPoints", _wrap_DistributionTrapezoid_equidistantPoints, METH_VARARGS, "\n"
 		"DistributionTrapezoid_equidistantPoints(DistributionTrapezoid self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t\n"
-		"std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const\n"
+		"std::vector< double > DistributionTrapezoid::equidistantPoints(size_t nbr_samples, double sigma_factor, const RealLimits &limits=RealLimits()) const override\n"
 		"\n"
 		"generate list of sample values \n"
 		"\n"
 		""},
 	 { "DistributionTrapezoid_isDelta", _wrap_DistributionTrapezoid_isDelta, METH_O, "\n"
 		"DistributionTrapezoid_isDelta(DistributionTrapezoid self) -> bool\n"
-		"bool DistributionTrapezoid::isDelta() const final\n"
+		"bool DistributionTrapezoid::isDelta() const override\n"
 		"\n"
 		"Returns true if the distribution is in the limit case of a Dirac delta distribution. \n"
 		"\n"
 		""},
 	 { "DistributionTrapezoid_accept", _wrap_DistributionTrapezoid_accept, METH_VARARGS, "\n"
 		"DistributionTrapezoid_accept(DistributionTrapezoid self, INodeVisitor visitor)\n"
-		"void DistributionTrapezoid::accept(INodeVisitor *visitor) const final\n"
+		"void DistributionTrapezoid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		"Calls the  INodeVisitor's visit method. \n"
 		"\n"
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index c30bb214042d1587a6135163df407a26867feeae..fc008f750c806f1f00550f0d550bfce8dfda7a16 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -4476,7 +4476,7 @@ class Crystal(ISampleNode):
     def clone(self):
         r"""
         clone(Crystal self) -> Crystal
-        Crystal * Crystal::clone() const final
+        Crystal * Crystal::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -4486,7 +4486,7 @@ class Crystal(ISampleNode):
     def accept(self, visitor):
         r"""
         accept(Crystal self, INodeVisitor * visitor)
-        void Crystal::accept(INodeVisitor *visitor) const final
+        void Crystal::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.Crystal_accept(self, visitor)
@@ -4518,7 +4518,7 @@ class Crystal(ISampleNode):
     def getChildren(self):
         r"""
         getChildren(Crystal self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > Crystal::getChildren() const final
+        std::vector< const INode * > Crystal::getChildren() const override
 
         """
         return _libBornAgainSample.Crystal_getChildren(self)
@@ -4609,7 +4609,7 @@ class IParticle(IAbstractParticle):
     def translate(self, translation):
         r"""
         translate(IParticle self, kvector_t translation)
-        void IParticle::translate(kvector_t translation) final
+        void IParticle::translate(kvector_t translation) override
 
         Translates the particle. 
 
@@ -4639,7 +4639,7 @@ class IParticle(IAbstractParticle):
     def rotate(self, rotation):
         r"""
         rotate(IParticle self, IRotation rotation)
-        void IParticle::rotate(const IRotation &rotation) final
+        void IParticle::rotate(const IRotation &rotation) override
 
         Rotates the particle. 
 
@@ -4720,7 +4720,7 @@ class MesoCrystal(IParticle):
     def clone(self):
         r"""
         clone(MesoCrystal self) -> MesoCrystal
-        MesoCrystal * MesoCrystal::clone() const final
+        MesoCrystal * MesoCrystal::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -4730,7 +4730,7 @@ class MesoCrystal(IParticle):
     def accept(self, visitor):
         r"""
         accept(MesoCrystal self, INodeVisitor * visitor)
-        void MesoCrystal::accept(INodeVisitor *visitor) const final
+        void MesoCrystal::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.MesoCrystal_accept(self, visitor)
@@ -4738,7 +4738,7 @@ class MesoCrystal(IParticle):
     def createSlicedParticle(self, limits):
         r"""
         createSlicedParticle(MesoCrystal self, ZLimits limits) -> SlicedParticle
-        SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const final
+        SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const override
 
         Creates a sliced form factor for this particle. 
 
@@ -4748,7 +4748,7 @@ class MesoCrystal(IParticle):
     def getChildren(self):
         r"""
         getChildren(MesoCrystal self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > MesoCrystal::getChildren() const final
+        std::vector< const INode * > MesoCrystal::getChildren() const override
 
         """
         return _libBornAgainSample.MesoCrystal_getChildren(self)
@@ -4783,7 +4783,7 @@ class Particle(IParticle):
     def clone(self):
         r"""
         clone(Particle self) -> Particle
-        Particle * Particle::clone() const final
+        Particle * Particle::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -4793,7 +4793,7 @@ class Particle(IParticle):
     def accept(self, visitor):
         r"""
         accept(Particle self, INodeVisitor * visitor)
-        void Particle::accept(INodeVisitor *visitor) const final
+        void Particle::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.Particle_accept(self, visitor)
@@ -4801,7 +4801,7 @@ class Particle(IParticle):
     def createSlicedParticle(self, limits):
         r"""
         createSlicedParticle(Particle self, ZLimits limits) -> SlicedParticle
-        SlicedParticle Particle::createSlicedParticle(ZLimits limits) const final
+        SlicedParticle Particle::createSlicedParticle(ZLimits limits) const override
 
         Creates a sliced form factor for this particle. 
 
@@ -4819,7 +4819,7 @@ class Particle(IParticle):
     def material(self):
         r"""
         material(Particle self) -> Material
-        const Material* Particle::material() const final
+        const Material* Particle::material() const override
 
         Returns nullptr, unless overwritten to return a specific material. 
 
@@ -4829,7 +4829,7 @@ class Particle(IParticle):
     def getChildren(self):
         r"""
         getChildren(Particle self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > Particle::getChildren() const final
+        std::vector< const INode * > Particle::getChildren() const override
 
         """
         return _libBornAgainSample.Particle_getChildren(self)
@@ -4863,7 +4863,7 @@ class ParticleComposition(IParticle):
     def clone(self):
         r"""
         clone(ParticleComposition self) -> ParticleComposition
-        ParticleComposition * ParticleComposition::clone() const final
+        ParticleComposition * ParticleComposition::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -4873,7 +4873,7 @@ class ParticleComposition(IParticle):
     def accept(self, visitor):
         r"""
         accept(ParticleComposition self, INodeVisitor * visitor)
-        void ParticleComposition::accept(INodeVisitor *visitor) const final
+        void ParticleComposition::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.ParticleComposition_accept(self, visitor)
@@ -4881,7 +4881,7 @@ class ParticleComposition(IParticle):
     def createFormFactor(self):
         r"""
         createFormFactor(ParticleComposition self) -> IFormFactor
-        IFormFactor * ParticleComposition::createFormFactor() const final
+        IFormFactor * ParticleComposition::createFormFactor() const override
 
         Creates a form factor for this particle. 
 
@@ -4918,7 +4918,7 @@ class ParticleComposition(IParticle):
     def getChildren(self):
         r"""
         getChildren(ParticleComposition self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > ParticleComposition::getChildren() const final
+        std::vector< const INode * > ParticleComposition::getChildren() const override
 
         """
         return _libBornAgainSample.ParticleComposition_getChildren(self)
@@ -4926,7 +4926,7 @@ class ParticleComposition(IParticle):
     def decompose(self):
         r"""
         decompose(ParticleComposition self) -> SafePointerVector< IParticle >
-        SafePointerVector< IParticle > ParticleComposition::decompose() const final
+        SafePointerVector< IParticle > ParticleComposition::decompose() const override
 
         Decompose in constituent  IParticle objects. 
 
@@ -4936,7 +4936,7 @@ class ParticleComposition(IParticle):
     def bottomTopZ(self):
         r"""
         bottomTopZ(ParticleComposition self) -> ParticleLimits
-        ParticleLimits ParticleComposition::bottomTopZ() const final
+        ParticleLimits ParticleComposition::bottomTopZ() const override
 
         Top and bottom z-coordinate. 
 
@@ -4971,7 +4971,7 @@ class ParticleCoreShell(IParticle):
     def clone(self):
         r"""
         clone(ParticleCoreShell self) -> ParticleCoreShell
-        ParticleCoreShell * ParticleCoreShell::clone() const final
+        ParticleCoreShell * ParticleCoreShell::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -4981,7 +4981,7 @@ class ParticleCoreShell(IParticle):
     def accept(self, visitor):
         r"""
         accept(ParticleCoreShell self, INodeVisitor * visitor)
-        void ParticleCoreShell::accept(INodeVisitor *visitor) const final
+        void ParticleCoreShell::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.ParticleCoreShell_accept(self, visitor)
@@ -4989,7 +4989,7 @@ class ParticleCoreShell(IParticle):
     def createSlicedParticle(self, limits):
         r"""
         createSlicedParticle(ParticleCoreShell self, ZLimits limits) -> SlicedParticle
-        SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const final
+        SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const override
 
         Creates a sliced form factor for this particle. 
 
@@ -5015,7 +5015,7 @@ class ParticleCoreShell(IParticle):
     def getChildren(self):
         r"""
         getChildren(ParticleCoreShell self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > ParticleCoreShell::getChildren() const final
+        std::vector< const INode * > ParticleCoreShell::getChildren() const override
 
         """
         return _libBornAgainSample.ParticleCoreShell_getChildren(self)
@@ -5047,7 +5047,7 @@ class ParticleDistribution(IAbstractParticle):
     def clone(self):
         r"""
         clone(ParticleDistribution self) -> ParticleDistribution
-        ParticleDistribution * ParticleDistribution::clone() const final
+        ParticleDistribution * ParticleDistribution::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -5057,7 +5057,7 @@ class ParticleDistribution(IAbstractParticle):
     def accept(self, visitor):
         r"""
         accept(ParticleDistribution self, INodeVisitor * visitor)
-        void ParticleDistribution::accept(INodeVisitor *visitor) const final
+        void ParticleDistribution::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.ParticleDistribution_accept(self, visitor)
@@ -5065,7 +5065,7 @@ class ParticleDistribution(IAbstractParticle):
     def translate(self, translation):
         r"""
         translate(ParticleDistribution self, kvector_t translation)
-        void ParticleDistribution::translate(kvector_t translation) final
+        void ParticleDistribution::translate(kvector_t translation) override
 
         Translates the particle with the given vector. 
 
@@ -5075,7 +5075,7 @@ class ParticleDistribution(IAbstractParticle):
     def rotate(self, rotation):
         r"""
         rotate(ParticleDistribution self, IRotation rotation)
-        void ParticleDistribution::rotate(const IRotation &rotation) final
+        void ParticleDistribution::rotate(const IRotation &rotation) override
 
         Applies the given rotation to the particle. 
 
@@ -5117,7 +5117,7 @@ class ParticleDistribution(IAbstractParticle):
     def getChildren(self):
         r"""
         getChildren(ParticleDistribution self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > ParticleDistribution::getChildren() const final
+        std::vector< const INode * > ParticleDistribution::getChildren() const override
 
         """
         return _libBornAgainSample.ParticleDistribution_getChildren(self)
@@ -5211,7 +5211,7 @@ class FTDecayFunction1DCauchy(IFTDecayFunction1D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction1DCauchy self, INodeVisitor * visitor)
-        void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DCauchy_accept(self, visitor)
@@ -5219,7 +5219,7 @@ class FTDecayFunction1DCauchy(IFTDecayFunction1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDecayFunction1DCauchy self, double q) -> double
-        double FTDecayFunction1DCauchy::evaluate(double q) const final
+        double FTDecayFunction1DCauchy::evaluate(double q) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DCauchy_evaluate(self, q)
@@ -5261,7 +5261,7 @@ class FTDecayFunction1DGauss(IFTDecayFunction1D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction1DGauss self, INodeVisitor * visitor)
-        void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DGauss_accept(self, visitor)
@@ -5269,7 +5269,7 @@ class FTDecayFunction1DGauss(IFTDecayFunction1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDecayFunction1DGauss self, double q) -> double
-        double FTDecayFunction1DGauss::evaluate(double q) const final
+        double FTDecayFunction1DGauss::evaluate(double q) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DGauss_evaluate(self, q)
@@ -5311,7 +5311,7 @@ class FTDecayFunction1DTriangle(IFTDecayFunction1D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction1DTriangle self, INodeVisitor * visitor)
-        void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DTriangle_accept(self, visitor)
@@ -5319,7 +5319,7 @@ class FTDecayFunction1DTriangle(IFTDecayFunction1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDecayFunction1DTriangle self, double q) -> double
-        double FTDecayFunction1DTriangle::evaluate(double q) const final
+        double FTDecayFunction1DTriangle::evaluate(double q) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DTriangle_evaluate(self, q)
@@ -5361,7 +5361,7 @@ class FTDecayFunction1DVoigt(IFTDecayFunction1D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction1DVoigt self, INodeVisitor * visitor)
-        void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DVoigt_accept(self, visitor)
@@ -5369,7 +5369,7 @@ class FTDecayFunction1DVoigt(IFTDecayFunction1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDecayFunction1DVoigt self, double q) -> double
-        double FTDecayFunction1DVoigt::evaluate(double q) const final
+        double FTDecayFunction1DVoigt::evaluate(double q) const override
 
         """
         return _libBornAgainSample.FTDecayFunction1DVoigt_evaluate(self, q)
@@ -5499,7 +5499,7 @@ class FTDecayFunction2DCauchy(IFTDecayFunction2D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction2DCauchy self, INodeVisitor * visitor)
-        void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction2DCauchy_accept(self, visitor)
@@ -5507,7 +5507,7 @@ class FTDecayFunction2DCauchy(IFTDecayFunction2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDecayFunction2DCauchy self, double qx, double qy) -> double
-        double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const final
+        double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed decay function for q in X,Y coordinates 
 
@@ -5551,7 +5551,7 @@ class FTDecayFunction2DGauss(IFTDecayFunction2D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction2DGauss self, INodeVisitor * visitor)
-        void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction2DGauss_accept(self, visitor)
@@ -5559,7 +5559,7 @@ class FTDecayFunction2DGauss(IFTDecayFunction2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDecayFunction2DGauss self, double qx, double qy) -> double
-        double FTDecayFunction2DGauss::evaluate(double qx, double qy) const final
+        double FTDecayFunction2DGauss::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed decay function for q in X,Y coordinates 
 
@@ -5603,7 +5603,7 @@ class FTDecayFunction2DVoigt(IFTDecayFunction2D):
     def accept(self, visitor):
         r"""
         accept(FTDecayFunction2DVoigt self, INodeVisitor * visitor)
-        void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const final
+        void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDecayFunction2DVoigt_accept(self, visitor)
@@ -5611,7 +5611,7 @@ class FTDecayFunction2DVoigt(IFTDecayFunction2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDecayFunction2DVoigt self, double qx, double qy) -> double
-        double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const final
+        double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed decay function for q in X,Y coordinates 
 
@@ -5711,7 +5711,7 @@ class FTDistribution1DCauchy(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DCauchy self) -> FTDistribution1DCauchy
-        FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const final
+        FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DCauchy_clone(self)
@@ -5719,7 +5719,7 @@ class FTDistribution1DCauchy(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DCauchy self, INodeVisitor * visitor)
-        void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DCauchy_accept(self, visitor)
@@ -5727,7 +5727,7 @@ class FTDistribution1DCauchy(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DCauchy self, double q) -> double
-        double FTDistribution1DCauchy::evaluate(double q) const final
+        double FTDistribution1DCauchy::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -5737,7 +5737,7 @@ class FTDistribution1DCauchy(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DCauchy self) -> double
-        double FTDistribution1DCauchy::qSecondDerivative() const final
+        double FTDistribution1DCauchy::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -5773,7 +5773,7 @@ class FTDistribution1DGauss(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DGauss self) -> FTDistribution1DGauss
-        FTDistribution1DGauss * FTDistribution1DGauss::clone() const final
+        FTDistribution1DGauss * FTDistribution1DGauss::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DGauss_clone(self)
@@ -5781,7 +5781,7 @@ class FTDistribution1DGauss(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DGauss self, INodeVisitor * visitor)
-        void FTDistribution1DGauss::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DGauss_accept(self, visitor)
@@ -5789,7 +5789,7 @@ class FTDistribution1DGauss(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DGauss self, double q) -> double
-        double FTDistribution1DGauss::evaluate(double q) const final
+        double FTDistribution1DGauss::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -5799,7 +5799,7 @@ class FTDistribution1DGauss(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DGauss self) -> double
-        double FTDistribution1DGauss::qSecondDerivative() const final
+        double FTDistribution1DGauss::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -5835,7 +5835,7 @@ class FTDistribution1DGate(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DGate self) -> FTDistribution1DGate
-        FTDistribution1DGate * FTDistribution1DGate::clone() const final
+        FTDistribution1DGate * FTDistribution1DGate::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DGate_clone(self)
@@ -5843,7 +5843,7 @@ class FTDistribution1DGate(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DGate self, INodeVisitor * visitor)
-        void FTDistribution1DGate::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DGate::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DGate_accept(self, visitor)
@@ -5851,7 +5851,7 @@ class FTDistribution1DGate(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DGate self, double q) -> double
-        double FTDistribution1DGate::evaluate(double q) const final
+        double FTDistribution1DGate::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -5861,7 +5861,7 @@ class FTDistribution1DGate(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DGate self) -> double
-        double FTDistribution1DGate::qSecondDerivative() const final
+        double FTDistribution1DGate::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -5897,7 +5897,7 @@ class FTDistribution1DTriangle(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DTriangle self) -> FTDistribution1DTriangle
-        FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const final
+        FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DTriangle_clone(self)
@@ -5905,7 +5905,7 @@ class FTDistribution1DTriangle(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DTriangle self, INodeVisitor * visitor)
-        void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DTriangle_accept(self, visitor)
@@ -5913,7 +5913,7 @@ class FTDistribution1DTriangle(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DTriangle self, double q) -> double
-        double FTDistribution1DTriangle::evaluate(double q) const final
+        double FTDistribution1DTriangle::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -5923,7 +5923,7 @@ class FTDistribution1DTriangle(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DTriangle self) -> double
-        double FTDistribution1DTriangle::qSecondDerivative() const final
+        double FTDistribution1DTriangle::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -5959,7 +5959,7 @@ class FTDistribution1DCosine(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DCosine self) -> FTDistribution1DCosine
-        FTDistribution1DCosine * FTDistribution1DCosine::clone() const final
+        FTDistribution1DCosine * FTDistribution1DCosine::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DCosine_clone(self)
@@ -5967,7 +5967,7 @@ class FTDistribution1DCosine(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DCosine self, INodeVisitor * visitor)
-        void FTDistribution1DCosine::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DCosine::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DCosine_accept(self, visitor)
@@ -5975,7 +5975,7 @@ class FTDistribution1DCosine(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DCosine self, double q) -> double
-        double FTDistribution1DCosine::evaluate(double q) const final
+        double FTDistribution1DCosine::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -5985,7 +5985,7 @@ class FTDistribution1DCosine(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DCosine self) -> double
-        double FTDistribution1DCosine::qSecondDerivative() const final
+        double FTDistribution1DCosine::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -6021,7 +6021,7 @@ class FTDistribution1DVoigt(IFTDistribution1D):
     def clone(self):
         r"""
         clone(FTDistribution1DVoigt self) -> FTDistribution1DVoigt
-        FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const final
+        FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution1DVoigt_clone(self)
@@ -6029,7 +6029,7 @@ class FTDistribution1DVoigt(IFTDistribution1D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution1DVoigt self, INodeVisitor * visitor)
-        void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const final
+        void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution1DVoigt_accept(self, visitor)
@@ -6037,7 +6037,7 @@ class FTDistribution1DVoigt(IFTDistribution1D):
     def evaluate(self, q):
         r"""
         evaluate(FTDistribution1DVoigt self, double q) -> double
-        double FTDistribution1DVoigt::evaluate(double q) const final
+        double FTDistribution1DVoigt::evaluate(double q) const override
 
         Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. 
 
@@ -6055,7 +6055,7 @@ class FTDistribution1DVoigt(IFTDistribution1D):
     def qSecondDerivative(self):
         r"""
         qSecondDerivative(FTDistribution1DVoigt self) -> double
-        double FTDistribution1DVoigt::qSecondDerivative() const final
+        double FTDistribution1DVoigt::qSecondDerivative() const override
 
         Returns the negative of the second order derivative in q space around q=0. 
 
@@ -6163,7 +6163,7 @@ class FTDistribution2DCauchy(IFTDistribution2D):
     def clone(self):
         r"""
         clone(FTDistribution2DCauchy self) -> FTDistribution2DCauchy
-        FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const final
+        FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution2DCauchy_clone(self)
@@ -6171,7 +6171,7 @@ class FTDistribution2DCauchy(IFTDistribution2D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution2DCauchy self, INodeVisitor * visitor)
-        void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const final
+        void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution2DCauchy_accept(self, visitor)
@@ -6179,7 +6179,7 @@ class FTDistribution2DCauchy(IFTDistribution2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDistribution2DCauchy self, double qx, double qy) -> double
-        double FTDistribution2DCauchy::evaluate(double qx, double qy) const final
+        double FTDistribution2DCauchy::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 
@@ -6215,7 +6215,7 @@ class FTDistribution2DGauss(IFTDistribution2D):
     def clone(self):
         r"""
         clone(FTDistribution2DGauss self) -> FTDistribution2DGauss
-        FTDistribution2DGauss * FTDistribution2DGauss::clone() const final
+        FTDistribution2DGauss * FTDistribution2DGauss::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution2DGauss_clone(self)
@@ -6223,7 +6223,7 @@ class FTDistribution2DGauss(IFTDistribution2D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution2DGauss self, INodeVisitor * visitor)
-        void FTDistribution2DGauss::accept(INodeVisitor *visitor) const final
+        void FTDistribution2DGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution2DGauss_accept(self, visitor)
@@ -6231,7 +6231,7 @@ class FTDistribution2DGauss(IFTDistribution2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDistribution2DGauss self, double qx, double qy) -> double
-        double FTDistribution2DGauss::evaluate(double qx, double qy) const final
+        double FTDistribution2DGauss::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 
@@ -6267,7 +6267,7 @@ class FTDistribution2DGate(IFTDistribution2D):
     def clone(self):
         r"""
         clone(FTDistribution2DGate self) -> FTDistribution2DGate
-        FTDistribution2DGate * FTDistribution2DGate::clone() const final
+        FTDistribution2DGate * FTDistribution2DGate::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution2DGate_clone(self)
@@ -6275,7 +6275,7 @@ class FTDistribution2DGate(IFTDistribution2D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution2DGate self, INodeVisitor * visitor)
-        void FTDistribution2DGate::accept(INodeVisitor *visitor) const final
+        void FTDistribution2DGate::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution2DGate_accept(self, visitor)
@@ -6283,7 +6283,7 @@ class FTDistribution2DGate(IFTDistribution2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDistribution2DGate self, double qx, double qy) -> double
-        double FTDistribution2DGate::evaluate(double qx, double qy) const final
+        double FTDistribution2DGate::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 
@@ -6319,7 +6319,7 @@ class FTDistribution2DCone(IFTDistribution2D):
     def clone(self):
         r"""
         clone(FTDistribution2DCone self) -> FTDistribution2DCone
-        FTDistribution2DCone * FTDistribution2DCone::clone() const final
+        FTDistribution2DCone * FTDistribution2DCone::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution2DCone_clone(self)
@@ -6327,7 +6327,7 @@ class FTDistribution2DCone(IFTDistribution2D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution2DCone self, INodeVisitor * visitor)
-        void FTDistribution2DCone::accept(INodeVisitor *visitor) const final
+        void FTDistribution2DCone::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution2DCone_accept(self, visitor)
@@ -6335,7 +6335,7 @@ class FTDistribution2DCone(IFTDistribution2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDistribution2DCone self, double qx, double qy) -> double
-        double FTDistribution2DCone::evaluate(double qx, double qy) const final
+        double FTDistribution2DCone::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 
@@ -6371,7 +6371,7 @@ class FTDistribution2DVoigt(IFTDistribution2D):
     def clone(self):
         r"""
         clone(FTDistribution2DVoigt self) -> FTDistribution2DVoigt
-        FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const final
+        FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const override
 
         """
         return _libBornAgainSample.FTDistribution2DVoigt_clone(self)
@@ -6379,7 +6379,7 @@ class FTDistribution2DVoigt(IFTDistribution2D):
     def accept(self, visitor):
         r"""
         accept(FTDistribution2DVoigt self, INodeVisitor * visitor)
-        void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const final
+        void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FTDistribution2DVoigt_accept(self, visitor)
@@ -6387,7 +6387,7 @@ class FTDistribution2DVoigt(IFTDistribution2D):
     def evaluate(self, qx, qy):
         r"""
         evaluate(FTDistribution2DVoigt self, double qx, double qy) -> double
-        double FTDistribution2DVoigt::evaluate(double qx, double qy) const final
+        double FTDistribution2DVoigt::evaluate(double qx, double qy) const override
 
         evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 
 
@@ -7815,7 +7815,7 @@ class InterferenceFunctionNone(IInterferenceFunction):
     def clone(self):
         r"""
         clone(InterferenceFunctionNone self) -> InterferenceFunctionNone
-        InterferenceFunctionNone * InterferenceFunctionNone::clone() const final
+        InterferenceFunctionNone * InterferenceFunctionNone::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -7825,7 +7825,7 @@ class InterferenceFunctionNone(IInterferenceFunction):
     def accept(self, visitor):
         r"""
         accept(InterferenceFunctionNone self, INodeVisitor * visitor)
-        void InterferenceFunctionNone::accept(INodeVisitor *visitor) const final
+        void InterferenceFunctionNone::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.InterferenceFunctionNone_accept(self, visitor)
@@ -7869,7 +7869,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
     def clone(self):
         r"""
         clone(InterferenceFunctionRadialParaCrystal self) -> InterferenceFunctionRadialParaCrystal
-        InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const final
+        InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -7879,7 +7879,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
     def accept(self, visitor):
         r"""
         accept(InterferenceFunctionRadialParaCrystal self, INodeVisitor * visitor)
-        void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const final
+        void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.InterferenceFunctionRadialParaCrystal_accept(self, visitor)
@@ -7969,7 +7969,7 @@ class InterferenceFunctionRadialParaCrystal(IInterferenceFunction):
     def getChildren(self):
         r"""
         getChildren(InterferenceFunctionRadialParaCrystal self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const final
+        std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const override
 
         """
         return _libBornAgainSample.InterferenceFunctionRadialParaCrystal_getChildren(self)
@@ -8010,7 +8010,7 @@ class InterferenceFunctionTwin(IInterferenceFunction):
     def clone(self):
         r"""
         clone(InterferenceFunctionTwin self) -> InterferenceFunctionTwin
-        InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const final
+        InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -8020,7 +8020,7 @@ class InterferenceFunctionTwin(IInterferenceFunction):
     def accept(self, visitor):
         r"""
         accept(InterferenceFunctionTwin self, INodeVisitor * visitor)
-        void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const final
+        void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.InterferenceFunctionTwin_accept(self, visitor)
@@ -8404,7 +8404,7 @@ class Layer(ISampleNode):
     def clone(self):
         r"""
         clone(Layer self) -> Layer
-        Layer * Layer::clone() const final
+        Layer * Layer::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -8414,7 +8414,7 @@ class Layer(ISampleNode):
     def accept(self, visitor):
         r"""
         accept(Layer self, INodeVisitor * visitor)
-        void Layer::accept(INodeVisitor *visitor) const final
+        void Layer::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.Layer_accept(self, visitor)
@@ -8430,7 +8430,7 @@ class Layer(ISampleNode):
     def material(self):
         r"""
         material(Layer self) -> Material
-        const Material* Layer::material() const final
+        const Material* Layer::material() const override
 
         Returns nullptr, unless overwritten to return a specific material. 
 
@@ -8464,7 +8464,7 @@ class Layer(ISampleNode):
     def getChildren(self):
         r"""
         getChildren(Layer self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > Layer::getChildren() const final
+        std::vector< const INode * > Layer::getChildren() const override
 
         """
         return _libBornAgainSample.Layer_getChildren(self)
@@ -8523,7 +8523,7 @@ class MultiLayer(ISampleNode):
     def clone(self):
         r"""
         clone(MultiLayer self) -> MultiLayer
-        MultiLayer * MultiLayer::clone() const final
+        MultiLayer * MultiLayer::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -8533,7 +8533,7 @@ class MultiLayer(ISampleNode):
     def accept(self, visitor):
         r"""
         accept(MultiLayer self, INodeVisitor * visitor)
-        void MultiLayer::accept(INodeVisitor *visitor) const final
+        void MultiLayer::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.MultiLayer_accept(self, visitor)
@@ -8645,7 +8645,7 @@ class MultiLayer(ISampleNode):
     def getChildren(self):
         r"""
         getChildren(MultiLayer self) -> swig_dummy_type_const_inode_vector
-        std::vector< const INode * > MultiLayer::getChildren() const final
+        std::vector< const INode * > MultiLayer::getChildren() const override
 
         """
         return _libBornAgainSample.MultiLayer_getChildren(self)
@@ -8692,7 +8692,7 @@ class IFormFactorPolyhedron(IBornFF):
     def bottomZ(self, rotation):
         r"""
         bottomZ(IFormFactorPolyhedron self, IRotation rotation) -> double
-        double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const final
+        double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -8702,7 +8702,7 @@ class IFormFactorPolyhedron(IBornFF):
     def topZ(self, rotation):
         r"""
         topZ(IFormFactorPolyhedron self, IRotation rotation) -> double
-        double IFormFactorPolyhedron::topZ(const IRotation &rotation) const final
+        double IFormFactorPolyhedron::topZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -8712,7 +8712,7 @@ class IFormFactorPolyhedron(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(IFormFactorPolyhedron self, cvector_t q) -> complex_t
-        complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const final
+        complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -8730,7 +8730,7 @@ class IFormFactorPolyhedron(IBornFF):
     def volume(self):
         r"""
         volume(IFormFactorPolyhedron self) -> double
-        double IFormFactorPolyhedron::volume() const final
+        double IFormFactorPolyhedron::volume() const override
 
         Returns the total volume of the particle of this form factor's shape. 
 
@@ -8740,7 +8740,7 @@ class IFormFactorPolyhedron(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(IFormFactorPolyhedron self) -> double
-        double IFormFactorPolyhedron::radialExtension() const final
+        double IFormFactorPolyhedron::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -8780,7 +8780,7 @@ class IFormFactorPrism(IBornFF):
     def bottomZ(self, rotation):
         r"""
         bottomZ(IFormFactorPrism self, IRotation rotation) -> double
-        double IFormFactorPrism::bottomZ(const IRotation &rotation) const final
+        double IFormFactorPrism::bottomZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -8790,7 +8790,7 @@ class IFormFactorPrism(IBornFF):
     def topZ(self, rotation):
         r"""
         topZ(IFormFactorPrism self, IRotation rotation) -> double
-        double IFormFactorPrism::topZ(const IRotation &rotation) const final
+        double IFormFactorPrism::topZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -8881,7 +8881,7 @@ class IProfileRipple(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(IProfileRipple self) -> double
-        double IProfileRipple::radialExtension() const final
+        double IProfileRipple::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -8891,7 +8891,7 @@ class IProfileRipple(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(IProfileRipple self, cvector_t q) -> complex_t
-        complex_t IProfileRipple::evaluate_for_q(cvector_t q) const final
+        complex_t IProfileRipple::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9005,7 +9005,7 @@ class FormFactorAnisoPyramid(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorAnisoPyramid self, INodeVisitor * visitor)
-        void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const final
+        void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorAnisoPyramid_accept(self, visitor)
@@ -9071,7 +9071,7 @@ class FormFactorBox(IFormFactorPrism):
     def clone(self):
         r"""
         clone(FormFactorBox self) -> FormFactorBox
-        FormFactorBox* FormFactorBox::clone() const final
+        FormFactorBox* FormFactorBox::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9081,7 +9081,7 @@ class FormFactorBox(IFormFactorPrism):
     def accept(self, visitor):
         r"""
         accept(FormFactorBox self, INodeVisitor * visitor)
-        void FormFactorBox::accept(INodeVisitor *visitor) const final
+        void FormFactorBox::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorBox_accept(self, visitor)
@@ -9105,7 +9105,7 @@ class FormFactorBox(IFormFactorPrism):
     def volume(self):
         r"""
         volume(FormFactorBox self) -> double
-        double FormFactorBox::volume() const final
+        double FormFactorBox::volume() const override
 
         Returns the total volume of the particle of this form factor's shape. 
 
@@ -9115,7 +9115,7 @@ class FormFactorBox(IFormFactorPrism):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorBox self) -> double
-        double FormFactorBox::radialExtension() const final
+        double FormFactorBox::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9125,7 +9125,7 @@ class FormFactorBox(IFormFactorPrism):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorBox self, cvector_t q) -> complex_t
-        complex_t FormFactorBox::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorBox::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9171,7 +9171,7 @@ class FormFactorCantellatedCube(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorCantellatedCube self, INodeVisitor * visitor)
-        void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const final
+        void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCantellatedCube_accept(self, visitor)
@@ -9221,7 +9221,7 @@ class FormFactorCone(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorCone self) -> FormFactorCone
-        FormFactorCone* FormFactorCone::clone() const final
+        FormFactorCone* FormFactorCone::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9231,7 +9231,7 @@ class FormFactorCone(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorCone self, INodeVisitor * visitor)
-        void FormFactorCone::accept(INodeVisitor *visitor) const final
+        void FormFactorCone::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCone_accept(self, visitor)
@@ -9263,7 +9263,7 @@ class FormFactorCone(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorCone self) -> double
-        double FormFactorCone::radialExtension() const final
+        double FormFactorCone::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9273,7 +9273,7 @@ class FormFactorCone(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorCone self, cvector_t q) -> complex_t
-        complex_t FormFactorCone::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorCone::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9319,7 +9319,7 @@ class FormFactorCone6(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorCone6 self, INodeVisitor * visitor)
-        void FormFactorCone6::accept(INodeVisitor *visitor) const final
+        void FormFactorCone6::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCone6_accept(self, visitor)
@@ -9377,7 +9377,7 @@ class FormFactorCosineRippleBox(ICosineRipple):
     def clone(self):
         r"""
         clone(FormFactorCosineRippleBox self) -> FormFactorCosineRippleBox
-        FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const final
+        FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9387,7 +9387,7 @@ class FormFactorCosineRippleBox(ICosineRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorCosineRippleBox self, INodeVisitor * visitor)
-        void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const final
+        void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCosineRippleBox_accept(self, visitor)
@@ -9421,7 +9421,7 @@ class FormFactorCosineRippleGauss(ICosineRipple):
     def clone(self):
         r"""
         clone(FormFactorCosineRippleGauss self) -> FormFactorCosineRippleGauss
-        FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const final
+        FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9431,7 +9431,7 @@ class FormFactorCosineRippleGauss(ICosineRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorCosineRippleGauss self, INodeVisitor * visitor)
-        void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const final
+        void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCosineRippleGauss_accept(self, visitor)
@@ -9465,7 +9465,7 @@ class FormFactorCosineRippleLorentz(ICosineRipple):
     def clone(self):
         r"""
         clone(FormFactorCosineRippleLorentz self) -> FormFactorCosineRippleLorentz
-        FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const final
+        FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9475,7 +9475,7 @@ class FormFactorCosineRippleLorentz(ICosineRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorCosineRippleLorentz self, INodeVisitor * visitor)
-        void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const final
+        void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCosineRippleLorentz_accept(self, visitor)
@@ -9519,7 +9519,7 @@ class FormFactorCuboctahedron(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorCuboctahedron self, INodeVisitor * visitor)
-        void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const final
+        void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCuboctahedron_accept(self, visitor)
@@ -9585,7 +9585,7 @@ class FormFactorCylinder(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorCylinder self) -> FormFactorCylinder
-        FormFactorCylinder* FormFactorCylinder::clone() const final
+        FormFactorCylinder* FormFactorCylinder::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9595,7 +9595,7 @@ class FormFactorCylinder(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorCylinder self, INodeVisitor * visitor)
-        void FormFactorCylinder::accept(INodeVisitor *visitor) const final
+        void FormFactorCylinder::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorCylinder_accept(self, visitor)
@@ -9619,7 +9619,7 @@ class FormFactorCylinder(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorCylinder self) -> double
-        double FormFactorCylinder::radialExtension() const final
+        double FormFactorCylinder::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9629,7 +9629,7 @@ class FormFactorCylinder(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorCylinder self, cvector_t q) -> complex_t
-        complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9665,7 +9665,7 @@ class FormFactorDodecahedron(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorDodecahedron self) -> FormFactorDodecahedron
-        FormFactorDodecahedron* FormFactorDodecahedron::clone() const final
+        FormFactorDodecahedron* FormFactorDodecahedron::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9675,7 +9675,7 @@ class FormFactorDodecahedron(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorDodecahedron self, INodeVisitor * visitor)
-        void FormFactorDodecahedron::accept(INodeVisitor *visitor) const final
+        void FormFactorDodecahedron::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorDodecahedron_accept(self, visitor)
@@ -9717,7 +9717,7 @@ class FormFactorDot(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorDot self) -> FormFactorDot
-        FormFactorDot* FormFactorDot::clone() const final
+        FormFactorDot* FormFactorDot::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -9727,7 +9727,7 @@ class FormFactorDot(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorDot self, INodeVisitor * visitor)
-        void FormFactorDot::accept(INodeVisitor *visitor) const final
+        void FormFactorDot::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorDot_accept(self, visitor)
@@ -9743,7 +9743,7 @@ class FormFactorDot(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorDot self) -> double
-        double FormFactorDot::radialExtension() const final
+        double FormFactorDot::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9753,7 +9753,7 @@ class FormFactorDot(IBornFF):
     def bottomZ(self, arg2):
         r"""
         bottomZ(FormFactorDot self, IRotation arg2) -> double
-        double FormFactorDot::bottomZ(const IRotation &) const final
+        double FormFactorDot::bottomZ(const IRotation &) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -9763,7 +9763,7 @@ class FormFactorDot(IBornFF):
     def topZ(self, arg2):
         r"""
         topZ(FormFactorDot self, IRotation arg2) -> double
-        double FormFactorDot::topZ(const IRotation &) const final
+        double FormFactorDot::topZ(const IRotation &) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -9773,7 +9773,7 @@ class FormFactorDot(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorDot self, cvector_t q) -> complex_t
-        complex_t FormFactorDot::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorDot::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9819,7 +9819,7 @@ class FormFactorEllipsoidalCylinder(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorEllipsoidalCylinder self, INodeVisitor * visitor)
-        void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const final
+        void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorEllipsoidalCylinder_accept(self, visitor)
@@ -9851,7 +9851,7 @@ class FormFactorEllipsoidalCylinder(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorEllipsoidalCylinder self) -> double
-        double FormFactorEllipsoidalCylinder::radialExtension() const final
+        double FormFactorEllipsoidalCylinder::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9861,7 +9861,7 @@ class FormFactorEllipsoidalCylinder(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorEllipsoidalCylinder self, cvector_t q) -> complex_t
-        complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9907,7 +9907,7 @@ class FormFactorFullSphere(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorFullSphere self, INodeVisitor * visitor)
-        void FormFactorFullSphere::accept(INodeVisitor *visitor) const final
+        void FormFactorFullSphere::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorFullSphere_accept(self, visitor)
@@ -9923,7 +9923,7 @@ class FormFactorFullSphere(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorFullSphere self) -> double
-        double FormFactorFullSphere::radialExtension() const final
+        double FormFactorFullSphere::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -9933,7 +9933,7 @@ class FormFactorFullSphere(IBornFF):
     def bottomZ(self, rotation):
         r"""
         bottomZ(FormFactorFullSphere self, IRotation rotation) -> double
-        double FormFactorFullSphere::bottomZ(const IRotation &rotation) const final
+        double FormFactorFullSphere::bottomZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -9943,7 +9943,7 @@ class FormFactorFullSphere(IBornFF):
     def topZ(self, rotation):
         r"""
         topZ(FormFactorFullSphere self, IRotation rotation) -> double
-        double FormFactorFullSphere::topZ(const IRotation &rotation) const final
+        double FormFactorFullSphere::topZ(const IRotation &rotation) const override
 
         Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 
@@ -9953,7 +9953,7 @@ class FormFactorFullSphere(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorFullSphere self, cvector_t q) -> complex_t
-        complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -9999,7 +9999,7 @@ class FormFactorFullSpheroid(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorFullSpheroid self, INodeVisitor * visitor)
-        void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const final
+        void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorFullSpheroid_accept(self, visitor)
@@ -10023,7 +10023,7 @@ class FormFactorFullSpheroid(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorFullSpheroid self) -> double
-        double FormFactorFullSpheroid::radialExtension() const final
+        double FormFactorFullSpheroid::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10033,7 +10033,7 @@ class FormFactorFullSpheroid(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorFullSpheroid self, cvector_t q) -> complex_t
-        complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -10080,7 +10080,7 @@ class FormFactorHemiEllipsoid(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorHemiEllipsoid self, INodeVisitor * visitor)
-        void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const final
+        void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorHemiEllipsoid_accept(self, visitor)
@@ -10112,7 +10112,7 @@ class FormFactorHemiEllipsoid(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorHemiEllipsoid self) -> double
-        double FormFactorHemiEllipsoid::radialExtension() const final
+        double FormFactorHemiEllipsoid::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10122,7 +10122,7 @@ class FormFactorHemiEllipsoid(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorHemiEllipsoid self, cvector_t q) -> complex_t
-        complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -10167,7 +10167,7 @@ class FormFactorHollowSphere(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorHollowSphere self, INodeVisitor * visitor)
-        void FormFactorHollowSphere::accept(INodeVisitor *visitor) const final
+        void FormFactorHollowSphere::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorHollowSphere_accept(self, visitor)
@@ -10175,7 +10175,7 @@ class FormFactorHollowSphere(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorHollowSphere self) -> double
-        double FormFactorHollowSphere::radialExtension() const final
+        double FormFactorHollowSphere::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10185,7 +10185,7 @@ class FormFactorHollowSphere(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorHollowSphere self, cvector_t q) -> complex_t
-        complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -10221,7 +10221,7 @@ class FormFactorIcosahedron(IFormFactorPolyhedron):
     def clone(self):
         r"""
         clone(FormFactorIcosahedron self) -> FormFactorIcosahedron
-        FormFactorIcosahedron* FormFactorIcosahedron::clone() const final
+        FormFactorIcosahedron* FormFactorIcosahedron::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10231,7 +10231,7 @@ class FormFactorIcosahedron(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorIcosahedron self, INodeVisitor * visitor)
-        void FormFactorIcosahedron::accept(INodeVisitor *visitor) const final
+        void FormFactorIcosahedron::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorIcosahedron_accept(self, visitor)
@@ -10283,7 +10283,7 @@ class FormFactorLongBoxGauss(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorLongBoxGauss self, INodeVisitor * visitor)
-        void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const final
+        void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorLongBoxGauss_accept(self, visitor)
@@ -10315,7 +10315,7 @@ class FormFactorLongBoxGauss(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorLongBoxGauss self) -> double
-        double FormFactorLongBoxGauss::radialExtension() const final
+        double FormFactorLongBoxGauss::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10325,7 +10325,7 @@ class FormFactorLongBoxGauss(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorLongBoxGauss self, cvector_t q) -> complex_t
-        complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -10371,7 +10371,7 @@ class FormFactorLongBoxLorentz(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorLongBoxLorentz self, INodeVisitor * visitor)
-        void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const final
+        void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorLongBoxLorentz_accept(self, visitor)
@@ -10403,7 +10403,7 @@ class FormFactorLongBoxLorentz(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorLongBoxLorentz self) -> double
-        double FormFactorLongBoxLorentz::radialExtension() const final
+        double FormFactorLongBoxLorentz::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10413,7 +10413,7 @@ class FormFactorLongBoxLorentz(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorLongBoxLorentz self, cvector_t q) -> complex_t
-        complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -10449,7 +10449,7 @@ class FormFactorPrism3(IFormFactorPrism):
     def clone(self):
         r"""
         clone(FormFactorPrism3 self) -> FormFactorPrism3
-        FormFactorPrism3* FormFactorPrism3::clone() const final
+        FormFactorPrism3* FormFactorPrism3::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10459,7 +10459,7 @@ class FormFactorPrism3(IFormFactorPrism):
     def accept(self, visitor):
         r"""
         accept(FormFactorPrism3 self, INodeVisitor * visitor)
-        void FormFactorPrism3::accept(INodeVisitor *visitor) const final
+        void FormFactorPrism3::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorPrism3_accept(self, visitor)
@@ -10501,7 +10501,7 @@ class FormFactorPrism6(IFormFactorPrism):
     def clone(self):
         r"""
         clone(FormFactorPrism6 self) -> FormFactorPrism6
-        FormFactorPrism6* FormFactorPrism6::clone() const final
+        FormFactorPrism6* FormFactorPrism6::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10511,7 +10511,7 @@ class FormFactorPrism6(IFormFactorPrism):
     def accept(self, visitor):
         r"""
         accept(FormFactorPrism6 self, INodeVisitor * visitor)
-        void FormFactorPrism6::accept(INodeVisitor *visitor) const final
+        void FormFactorPrism6::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorPrism6_accept(self, visitor)
@@ -10563,7 +10563,7 @@ class FormFactorPyramid(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorPyramid self, INodeVisitor * visitor)
-        void FormFactorPyramid::accept(INodeVisitor *visitor) const final
+        void FormFactorPyramid::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorPyramid_accept(self, visitor)
@@ -10621,7 +10621,7 @@ class FormFactorSawtoothRippleBox(ISawtoothRipple):
     def clone(self):
         r"""
         clone(FormFactorSawtoothRippleBox self) -> FormFactorSawtoothRippleBox
-        FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const final
+        FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10631,7 +10631,7 @@ class FormFactorSawtoothRippleBox(ISawtoothRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorSawtoothRippleBox self, INodeVisitor * visitor)
-        void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const final
+        void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorSawtoothRippleBox_accept(self, visitor)
@@ -10665,7 +10665,7 @@ class FormFactorSawtoothRippleGauss(ISawtoothRipple):
     def clone(self):
         r"""
         clone(FormFactorSawtoothRippleGauss self) -> FormFactorSawtoothRippleGauss
-        FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const final
+        FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10675,7 +10675,7 @@ class FormFactorSawtoothRippleGauss(ISawtoothRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorSawtoothRippleGauss self, INodeVisitor * visitor)
-        void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const final
+        void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorSawtoothRippleGauss_accept(self, visitor)
@@ -10709,7 +10709,7 @@ class FormFactorSawtoothRippleLorentz(ISawtoothRipple):
     def clone(self):
         r"""
         clone(FormFactorSawtoothRippleLorentz self) -> FormFactorSawtoothRippleLorentz
-        FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const final
+        FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -10719,7 +10719,7 @@ class FormFactorSawtoothRippleLorentz(ISawtoothRipple):
     def accept(self, visitor):
         r"""
         accept(FormFactorSawtoothRippleLorentz self, INodeVisitor * visitor)
-        void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const final
+        void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorSawtoothRippleLorentz_accept(self, visitor)
@@ -10763,7 +10763,7 @@ class FormFactorTetrahedron(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorTetrahedron self, INodeVisitor * visitor)
-        void FormFactorTetrahedron::accept(INodeVisitor *visitor) const final
+        void FormFactorTetrahedron::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorTetrahedron_accept(self, visitor)
@@ -10831,7 +10831,7 @@ class FormFactorTruncatedCube(IFormFactorPolyhedron):
     def accept(self, visitor):
         r"""
         accept(FormFactorTruncatedCube self, INodeVisitor * visitor)
-        void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const final
+        void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorTruncatedCube_accept(self, visitor)
@@ -10891,7 +10891,7 @@ class FormFactorTruncatedSphere(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorTruncatedSphere self, INodeVisitor * visitor)
-        void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const final
+        void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorTruncatedSphere_accept(self, visitor)
@@ -10923,7 +10923,7 @@ class FormFactorTruncatedSphere(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorTruncatedSphere self) -> double
-        double FormFactorTruncatedSphere::radialExtension() const final
+        double FormFactorTruncatedSphere::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -10933,7 +10933,7 @@ class FormFactorTruncatedSphere(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorTruncatedSphere self, cvector_t q) -> complex_t
-        complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const override
 
         Complex form factor. 
 
@@ -10979,7 +10979,7 @@ class FormFactorTruncatedSpheroid(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorTruncatedSpheroid self, INodeVisitor * visitor)
-        void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const final
+        void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorTruncatedSpheroid_accept(self, visitor)
@@ -11019,7 +11019,7 @@ class FormFactorTruncatedSpheroid(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorTruncatedSpheroid self) -> double
-        double FormFactorTruncatedSpheroid::radialExtension() const final
+        double FormFactorTruncatedSpheroid::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -11029,7 +11029,7 @@ class FormFactorTruncatedSpheroid(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorTruncatedSpheroid self, cvector_t q) -> complex_t
-        complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -11065,7 +11065,7 @@ class FormFactorGaussSphere(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorGaussSphere self) -> FormFactorGaussSphere
-        FormFactorGaussSphere* FormFactorGaussSphere::clone() const final
+        FormFactorGaussSphere* FormFactorGaussSphere::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -11075,7 +11075,7 @@ class FormFactorGaussSphere(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorGaussSphere self, INodeVisitor * visitor)
-        void FormFactorGaussSphere::accept(INodeVisitor *visitor) const final
+        void FormFactorGaussSphere::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorGaussSphere_accept(self, visitor)
@@ -11091,7 +11091,7 @@ class FormFactorGaussSphere(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorGaussSphere self) -> double
-        double FormFactorGaussSphere::radialExtension() const final
+        double FormFactorGaussSphere::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -11101,7 +11101,7 @@ class FormFactorGaussSphere(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorGaussSphere self, cvector_t q) -> complex_t
-        complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -11147,7 +11147,7 @@ class FormFactorSphereGaussianRadius(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorSphereGaussianRadius self, INodeVisitor * visitor)
-        void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const final
+        void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorSphereGaussianRadius_accept(self, visitor)
@@ -11155,7 +11155,7 @@ class FormFactorSphereGaussianRadius(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorSphereGaussianRadius self) -> double
-        double FormFactorSphereGaussianRadius::radialExtension() const final
+        double FormFactorSphereGaussianRadius::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -11165,7 +11165,7 @@ class FormFactorSphereGaussianRadius(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorSphereGaussianRadius self, cvector_t q) -> complex_t
-        complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -11201,7 +11201,7 @@ class FormFactorSphereLogNormalRadius(IBornFF):
     def clone(self):
         r"""
         clone(FormFactorSphereLogNormalRadius self) -> FormFactorSphereLogNormalRadius
-        FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const final
+        FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const override
 
         Returns a clone of this  ISampleNode object. 
 
@@ -11211,7 +11211,7 @@ class FormFactorSphereLogNormalRadius(IBornFF):
     def accept(self, visitor):
         r"""
         accept(FormFactorSphereLogNormalRadius self, INodeVisitor * visitor)
-        void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const final
+        void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.FormFactorSphereLogNormalRadius_accept(self, visitor)
@@ -11219,7 +11219,7 @@ class FormFactorSphereLogNormalRadius(IBornFF):
     def radialExtension(self):
         r"""
         radialExtension(FormFactorSphereLogNormalRadius self) -> double
-        double FormFactorSphereLogNormalRadius::radialExtension() const final
+        double FormFactorSphereLogNormalRadius::radialExtension() const override
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
@@ -11229,7 +11229,7 @@ class FormFactorSphereLogNormalRadius(IBornFF):
     def evaluate_for_q(self, q):
         r"""
         evaluate_for_q(FormFactorSphereLogNormalRadius self, cvector_t q) -> complex_t
-        complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const final
+        complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const override
 
         Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. 
 
@@ -11581,7 +11581,7 @@ class BasicLattice2D(Lattice2D):
     def accept(self, visitor):
         r"""
         accept(BasicLattice2D self, INodeVisitor * visitor)
-        void BasicLattice2D::accept(INodeVisitor *visitor) const final
+        void BasicLattice2D::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.BasicLattice2D_accept(self, visitor)
@@ -11589,7 +11589,7 @@ class BasicLattice2D(Lattice2D):
     def length1(self):
         r"""
         length1(BasicLattice2D self) -> double
-        virtual double BasicLattice2D::length1() const
+        double BasicLattice2D::length1() const override
 
         """
         return _libBornAgainSample.BasicLattice2D_length1(self)
@@ -11597,7 +11597,7 @@ class BasicLattice2D(Lattice2D):
     def length2(self):
         r"""
         length2(BasicLattice2D self) -> double
-        virtual double BasicLattice2D::length2() const
+        double BasicLattice2D::length2() const override
 
         """
         return _libBornAgainSample.BasicLattice2D_length2(self)
@@ -11605,7 +11605,7 @@ class BasicLattice2D(Lattice2D):
     def latticeAngle(self):
         r"""
         latticeAngle(BasicLattice2D self) -> double
-        virtual double BasicLattice2D::latticeAngle() const
+        double BasicLattice2D::latticeAngle() const override
 
         """
         return _libBornAgainSample.BasicLattice2D_latticeAngle(self)
@@ -11613,7 +11613,7 @@ class BasicLattice2D(Lattice2D):
     def unitCellArea(self):
         r"""
         unitCellArea(BasicLattice2D self) -> double
-        double BasicLattice2D::unitCellArea() const
+        double BasicLattice2D::unitCellArea() const override
 
         """
         return _libBornAgainSample.BasicLattice2D_unitCellArea(self)
@@ -11654,7 +11654,7 @@ class SquareLattice2D(Lattice2D):
     def accept(self, visitor):
         r"""
         accept(SquareLattice2D self, INodeVisitor * visitor)
-        void SquareLattice2D::accept(INodeVisitor *visitor) const final
+        void SquareLattice2D::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.SquareLattice2D_accept(self, visitor)
@@ -11662,7 +11662,7 @@ class SquareLattice2D(Lattice2D):
     def length1(self):
         r"""
         length1(SquareLattice2D self) -> double
-        virtual double SquareLattice2D::length1() const
+        double SquareLattice2D::length1() const override
 
         """
         return _libBornAgainSample.SquareLattice2D_length1(self)
@@ -11670,7 +11670,7 @@ class SquareLattice2D(Lattice2D):
     def length2(self):
         r"""
         length2(SquareLattice2D self) -> double
-        virtual double SquareLattice2D::length2() const
+        double SquareLattice2D::length2() const override
 
         """
         return _libBornAgainSample.SquareLattice2D_length2(self)
@@ -11678,7 +11678,7 @@ class SquareLattice2D(Lattice2D):
     def latticeAngle(self):
         r"""
         latticeAngle(SquareLattice2D self) -> double
-        double SquareLattice2D::latticeAngle() const
+        double SquareLattice2D::latticeAngle() const override
 
         """
         return _libBornAgainSample.SquareLattice2D_latticeAngle(self)
@@ -11686,7 +11686,7 @@ class SquareLattice2D(Lattice2D):
     def unitCellArea(self):
         r"""
         unitCellArea(SquareLattice2D self) -> double
-        double SquareLattice2D::unitCellArea() const
+        double SquareLattice2D::unitCellArea() const override
 
         """
         return _libBornAgainSample.SquareLattice2D_unitCellArea(self)
@@ -11727,7 +11727,7 @@ class HexagonalLattice2D(Lattice2D):
     def accept(self, visitor):
         r"""
         accept(HexagonalLattice2D self, INodeVisitor * visitor)
-        void HexagonalLattice2D::accept(INodeVisitor *visitor) const final
+        void HexagonalLattice2D::accept(INodeVisitor *visitor) const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_accept(self, visitor)
@@ -11735,7 +11735,7 @@ class HexagonalLattice2D(Lattice2D):
     def length1(self):
         r"""
         length1(HexagonalLattice2D self) -> double
-        virtual double HexagonalLattice2D::length1() const
+        double HexagonalLattice2D::length1() const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_length1(self)
@@ -11743,7 +11743,7 @@ class HexagonalLattice2D(Lattice2D):
     def length2(self):
         r"""
         length2(HexagonalLattice2D self) -> double
-        virtual double HexagonalLattice2D::length2() const
+        double HexagonalLattice2D::length2() const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_length2(self)
@@ -11751,7 +11751,7 @@ class HexagonalLattice2D(Lattice2D):
     def latticeAngle(self):
         r"""
         latticeAngle(HexagonalLattice2D self) -> double
-        double HexagonalLattice2D::latticeAngle() const
+        double HexagonalLattice2D::latticeAngle() const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_latticeAngle(self)
@@ -11759,7 +11759,7 @@ class HexagonalLattice2D(Lattice2D):
     def unitCellArea(self):
         r"""
         unitCellArea(HexagonalLattice2D self) -> double
-        double HexagonalLattice2D::unitCellArea() const
+        double HexagonalLattice2D::unitCellArea() const override
 
         """
         return _libBornAgainSample.HexagonalLattice2D_unitCellArea(self)
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index 31937909b10773ef2436c71f4ed6d8b7299f8f16..3bad374567343cafb71913fb52ad5aeb80b74e99 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -71654,14 +71654,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Crystal_clone", _wrap_Crystal_clone, METH_O, "\n"
 		"Crystal_clone(Crystal self) -> Crystal\n"
-		"Crystal * Crystal::clone() const final\n"
+		"Crystal * Crystal::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "Crystal_accept", _wrap_Crystal_accept, METH_VARARGS, "\n"
 		"Crystal_accept(Crystal self, INodeVisitor * visitor)\n"
-		"void Crystal::accept(INodeVisitor *visitor) const final\n"
+		"void Crystal::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "Crystal_createTotalFormFactor", _wrap_Crystal_createTotalFormFactor, METH_VARARGS, "\n"
@@ -71681,7 +71681,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Crystal_getChildren", _wrap_Crystal_getChildren, METH_O, "\n"
 		"Crystal_getChildren(Crystal self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > Crystal::getChildren() const final\n"
+		"std::vector< const INode * > Crystal::getChildren() const override\n"
 		"\n"
 		""},
 	 { "Crystal_swigregister", Crystal_swigregister, METH_O, NULL},
@@ -71741,7 +71741,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IParticle_translate", _wrap_IParticle_translate, METH_VARARGS, "\n"
 		"IParticle_translate(IParticle self, kvector_t translation)\n"
-		"void IParticle::translate(kvector_t translation) final\n"
+		"void IParticle::translate(kvector_t translation) override\n"
 		"\n"
 		"Translates the particle. \n"
 		"\n"
@@ -71762,7 +71762,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IParticle_rotate", _wrap_IParticle_rotate, METH_VARARGS, "\n"
 		"IParticle_rotate(IParticle self, IRotation rotation)\n"
-		"void IParticle::rotate(const IRotation &rotation) final\n"
+		"void IParticle::rotate(const IRotation &rotation) override\n"
 		"\n"
 		"Rotates the particle. \n"
 		"\n"
@@ -71811,26 +71811,26 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "MesoCrystal_clone", _wrap_MesoCrystal_clone, METH_O, "\n"
 		"MesoCrystal_clone(MesoCrystal self) -> MesoCrystal\n"
-		"MesoCrystal * MesoCrystal::clone() const final\n"
+		"MesoCrystal * MesoCrystal::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "MesoCrystal_accept", _wrap_MesoCrystal_accept, METH_VARARGS, "\n"
 		"MesoCrystal_accept(MesoCrystal self, INodeVisitor * visitor)\n"
-		"void MesoCrystal::accept(INodeVisitor *visitor) const final\n"
+		"void MesoCrystal::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "MesoCrystal_createSlicedParticle", _wrap_MesoCrystal_createSlicedParticle, METH_VARARGS, "\n"
 		"MesoCrystal_createSlicedParticle(MesoCrystal self, ZLimits limits) -> SlicedParticle\n"
-		"SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const final\n"
+		"SlicedParticle MesoCrystal::createSlicedParticle(ZLimits limits) const override\n"
 		"\n"
 		"Creates a sliced form factor for this particle. \n"
 		"\n"
 		""},
 	 { "MesoCrystal_getChildren", _wrap_MesoCrystal_getChildren, METH_O, "\n"
 		"MesoCrystal_getChildren(MesoCrystal self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > MesoCrystal::getChildren() const final\n"
+		"std::vector< const INode * > MesoCrystal::getChildren() const override\n"
 		"\n"
 		""},
 	 { "MesoCrystal_swigregister", MesoCrystal_swigregister, METH_O, NULL},
@@ -71849,19 +71849,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Particle_clone", _wrap_Particle_clone, METH_O, "\n"
 		"Particle_clone(Particle self) -> Particle\n"
-		"Particle * Particle::clone() const final\n"
+		"Particle * Particle::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "Particle_accept", _wrap_Particle_accept, METH_VARARGS, "\n"
 		"Particle_accept(Particle self, INodeVisitor * visitor)\n"
-		"void Particle::accept(INodeVisitor *visitor) const final\n"
+		"void Particle::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "Particle_createSlicedParticle", _wrap_Particle_createSlicedParticle, METH_VARARGS, "\n"
 		"Particle_createSlicedParticle(Particle self, ZLimits limits) -> SlicedParticle\n"
-		"SlicedParticle Particle::createSlicedParticle(ZLimits limits) const final\n"
+		"SlicedParticle Particle::createSlicedParticle(ZLimits limits) const override\n"
 		"\n"
 		"Creates a sliced form factor for this particle. \n"
 		"\n"
@@ -71873,14 +71873,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Particle_material", _wrap_Particle_material, METH_O, "\n"
 		"Particle_material(Particle self) -> Material\n"
-		"const Material* Particle::material() const final\n"
+		"const Material* Particle::material() const override\n"
 		"\n"
 		"Returns nullptr, unless overwritten to return a specific material. \n"
 		"\n"
 		""},
 	 { "Particle_getChildren", _wrap_Particle_getChildren, METH_O, "\n"
 		"Particle_getChildren(Particle self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > Particle::getChildren() const final\n"
+		"std::vector< const INode * > Particle::getChildren() const override\n"
 		"\n"
 		""},
 	 { "Particle_swigregister", Particle_swigregister, METH_O, NULL},
@@ -71898,19 +71898,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleComposition_clone", _wrap_ParticleComposition_clone, METH_O, "\n"
 		"ParticleComposition_clone(ParticleComposition self) -> ParticleComposition\n"
-		"ParticleComposition * ParticleComposition::clone() const final\n"
+		"ParticleComposition * ParticleComposition::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "ParticleComposition_accept", _wrap_ParticleComposition_accept, METH_VARARGS, "\n"
 		"ParticleComposition_accept(ParticleComposition self, INodeVisitor * visitor)\n"
-		"void ParticleComposition::accept(INodeVisitor *visitor) const final\n"
+		"void ParticleComposition::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "ParticleComposition_createFormFactor", _wrap_ParticleComposition_createFormFactor, METH_O, "\n"
 		"ParticleComposition_createFormFactor(ParticleComposition self) -> IFormFactor\n"
-		"IFormFactor * ParticleComposition::createFormFactor() const final\n"
+		"IFormFactor * ParticleComposition::createFormFactor() const override\n"
 		"\n"
 		"Creates a form factor for this particle. \n"
 		"\n"
@@ -71935,19 +71935,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleComposition_getChildren", _wrap_ParticleComposition_getChildren, METH_O, "\n"
 		"ParticleComposition_getChildren(ParticleComposition self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > ParticleComposition::getChildren() const final\n"
+		"std::vector< const INode * > ParticleComposition::getChildren() const override\n"
 		"\n"
 		""},
 	 { "ParticleComposition_decompose", _wrap_ParticleComposition_decompose, METH_O, "\n"
 		"ParticleComposition_decompose(ParticleComposition self) -> SafePointerVector< IParticle >\n"
-		"SafePointerVector< IParticle > ParticleComposition::decompose() const final\n"
+		"SafePointerVector< IParticle > ParticleComposition::decompose() const override\n"
 		"\n"
 		"Decompose in constituent  IParticle objects. \n"
 		"\n"
 		""},
 	 { "ParticleComposition_bottomTopZ", _wrap_ParticleComposition_bottomTopZ, METH_O, "\n"
 		"ParticleComposition_bottomTopZ(ParticleComposition self) -> ParticleLimits\n"
-		"ParticleLimits ParticleComposition::bottomTopZ() const final\n"
+		"ParticleLimits ParticleComposition::bottomTopZ() const override\n"
 		"\n"
 		"Top and bottom z-coordinate. \n"
 		"\n"
@@ -71966,19 +71966,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleCoreShell_clone", _wrap_ParticleCoreShell_clone, METH_O, "\n"
 		"ParticleCoreShell_clone(ParticleCoreShell self) -> ParticleCoreShell\n"
-		"ParticleCoreShell * ParticleCoreShell::clone() const final\n"
+		"ParticleCoreShell * ParticleCoreShell::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "ParticleCoreShell_accept", _wrap_ParticleCoreShell_accept, METH_VARARGS, "\n"
 		"ParticleCoreShell_accept(ParticleCoreShell self, INodeVisitor * visitor)\n"
-		"void ParticleCoreShell::accept(INodeVisitor *visitor) const final\n"
+		"void ParticleCoreShell::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "ParticleCoreShell_createSlicedParticle", _wrap_ParticleCoreShell_createSlicedParticle, METH_VARARGS, "\n"
 		"ParticleCoreShell_createSlicedParticle(ParticleCoreShell self, ZLimits limits) -> SlicedParticle\n"
-		"SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const final\n"
+		"SlicedParticle ParticleCoreShell::createSlicedParticle(ZLimits limits) const override\n"
 		"\n"
 		"Creates a sliced form factor for this particle. \n"
 		"\n"
@@ -71995,7 +71995,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleCoreShell_getChildren", _wrap_ParticleCoreShell_getChildren, METH_O, "\n"
 		"ParticleCoreShell_getChildren(ParticleCoreShell self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > ParticleCoreShell::getChildren() const final\n"
+		"std::vector< const INode * > ParticleCoreShell::getChildren() const override\n"
 		"\n"
 		""},
 	 { "ParticleCoreShell_swigregister", ParticleCoreShell_swigregister, METH_O, NULL},
@@ -72007,26 +72007,26 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleDistribution_clone", _wrap_ParticleDistribution_clone, METH_O, "\n"
 		"ParticleDistribution_clone(ParticleDistribution self) -> ParticleDistribution\n"
-		"ParticleDistribution * ParticleDistribution::clone() const final\n"
+		"ParticleDistribution * ParticleDistribution::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "ParticleDistribution_accept", _wrap_ParticleDistribution_accept, METH_VARARGS, "\n"
 		"ParticleDistribution_accept(ParticleDistribution self, INodeVisitor * visitor)\n"
-		"void ParticleDistribution::accept(INodeVisitor *visitor) const final\n"
+		"void ParticleDistribution::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "ParticleDistribution_translate", _wrap_ParticleDistribution_translate, METH_VARARGS, "\n"
 		"ParticleDistribution_translate(ParticleDistribution self, kvector_t translation)\n"
-		"void ParticleDistribution::translate(kvector_t translation) final\n"
+		"void ParticleDistribution::translate(kvector_t translation) override\n"
 		"\n"
 		"Translates the particle with the given vector. \n"
 		"\n"
 		""},
 	 { "ParticleDistribution_rotate", _wrap_ParticleDistribution_rotate, METH_VARARGS, "\n"
 		"ParticleDistribution_rotate(ParticleDistribution self, IRotation rotation)\n"
-		"void ParticleDistribution::rotate(const IRotation &rotation) final\n"
+		"void ParticleDistribution::rotate(const IRotation &rotation) override\n"
 		"\n"
 		"Applies the given rotation to the particle. \n"
 		"\n"
@@ -72056,7 +72056,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "ParticleDistribution_getChildren", _wrap_ParticleDistribution_getChildren, METH_O, "\n"
 		"ParticleDistribution_getChildren(ParticleDistribution self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > ParticleDistribution::getChildren() const final\n"
+		"std::vector< const INode * > ParticleDistribution::getChildren() const override\n"
 		"\n"
 		""},
 	 { "ParticleDistribution_mainUnits", _wrap_ParticleDistribution_mainUnits, METH_O, "\n"
@@ -72097,12 +72097,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DCauchy_accept", _wrap_FTDecayFunction1DCauchy_accept, METH_VARARGS, "\n"
 		"FTDecayFunction1DCauchy_accept(FTDecayFunction1DCauchy self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction1DCauchy::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DCauchy_evaluate", _wrap_FTDecayFunction1DCauchy_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction1DCauchy_evaluate(FTDecayFunction1DCauchy self, double q) -> double\n"
-		"double FTDecayFunction1DCauchy::evaluate(double q) const final\n"
+		"double FTDecayFunction1DCauchy::evaluate(double q) const override\n"
 		"\n"
 		""},
 	 { "delete_FTDecayFunction1DCauchy", _wrap_delete_FTDecayFunction1DCauchy, METH_O, "delete_FTDecayFunction1DCauchy(FTDecayFunction1DCauchy self)"},
@@ -72121,12 +72121,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DGauss_accept", _wrap_FTDecayFunction1DGauss_accept, METH_VARARGS, "\n"
 		"FTDecayFunction1DGauss_accept(FTDecayFunction1DGauss self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction1DGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DGauss_evaluate", _wrap_FTDecayFunction1DGauss_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction1DGauss_evaluate(FTDecayFunction1DGauss self, double q) -> double\n"
-		"double FTDecayFunction1DGauss::evaluate(double q) const final\n"
+		"double FTDecayFunction1DGauss::evaluate(double q) const override\n"
 		"\n"
 		""},
 	 { "delete_FTDecayFunction1DGauss", _wrap_delete_FTDecayFunction1DGauss, METH_O, "delete_FTDecayFunction1DGauss(FTDecayFunction1DGauss self)"},
@@ -72145,12 +72145,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DTriangle_accept", _wrap_FTDecayFunction1DTriangle_accept, METH_VARARGS, "\n"
 		"FTDecayFunction1DTriangle_accept(FTDecayFunction1DTriangle self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction1DTriangle::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DTriangle_evaluate", _wrap_FTDecayFunction1DTriangle_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction1DTriangle_evaluate(FTDecayFunction1DTriangle self, double q) -> double\n"
-		"double FTDecayFunction1DTriangle::evaluate(double q) const final\n"
+		"double FTDecayFunction1DTriangle::evaluate(double q) const override\n"
 		"\n"
 		""},
 	 { "delete_FTDecayFunction1DTriangle", _wrap_delete_FTDecayFunction1DTriangle, METH_O, "delete_FTDecayFunction1DTriangle(FTDecayFunction1DTriangle self)"},
@@ -72169,12 +72169,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction1DVoigt_accept", _wrap_FTDecayFunction1DVoigt_accept, METH_VARARGS, "\n"
 		"FTDecayFunction1DVoigt_accept(FTDecayFunction1DVoigt self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction1DVoigt::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DVoigt_evaluate", _wrap_FTDecayFunction1DVoigt_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction1DVoigt_evaluate(FTDecayFunction1DVoigt self, double q) -> double\n"
-		"double FTDecayFunction1DVoigt::evaluate(double q) const final\n"
+		"double FTDecayFunction1DVoigt::evaluate(double q) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction1DVoigt_eEta", _wrap_FTDecayFunction1DVoigt_eEta, METH_O, "\n"
@@ -72242,12 +72242,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction2DCauchy_accept", _wrap_FTDecayFunction2DCauchy_accept, METH_VARARGS, "\n"
 		"FTDecayFunction2DCauchy_accept(FTDecayFunction2DCauchy self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction2DCauchy::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction2DCauchy_evaluate", _wrap_FTDecayFunction2DCauchy_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction2DCauchy_evaluate(FTDecayFunction2DCauchy self, double qx, double qy) -> double\n"
-		"double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const final\n"
+		"double FTDecayFunction2DCauchy::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed decay function for q in X,Y coordinates \n"
 		"\n"
@@ -72268,12 +72268,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction2DGauss_accept", _wrap_FTDecayFunction2DGauss_accept, METH_VARARGS, "\n"
 		"FTDecayFunction2DGauss_accept(FTDecayFunction2DGauss self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction2DGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction2DGauss_evaluate", _wrap_FTDecayFunction2DGauss_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction2DGauss_evaluate(FTDecayFunction2DGauss self, double qx, double qy) -> double\n"
-		"double FTDecayFunction2DGauss::evaluate(double qx, double qy) const final\n"
+		"double FTDecayFunction2DGauss::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed decay function for q in X,Y coordinates \n"
 		"\n"
@@ -72294,12 +72294,12 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDecayFunction2DVoigt_accept", _wrap_FTDecayFunction2DVoigt_accept, METH_VARARGS, "\n"
 		"FTDecayFunction2DVoigt_accept(FTDecayFunction2DVoigt self, INodeVisitor * visitor)\n"
-		"void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const final\n"
+		"void FTDecayFunction2DVoigt::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDecayFunction2DVoigt_evaluate", _wrap_FTDecayFunction2DVoigt_evaluate, METH_VARARGS, "\n"
 		"FTDecayFunction2DVoigt_evaluate(FTDecayFunction2DVoigt self, double qx, double qy) -> double\n"
-		"double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const final\n"
+		"double FTDecayFunction2DVoigt::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed decay function for q in X,Y coordinates \n"
 		"\n"
@@ -72346,24 +72346,24 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DCauchy_clone", _wrap_FTDistribution1DCauchy_clone, METH_O, "\n"
 		"FTDistribution1DCauchy_clone(FTDistribution1DCauchy self) -> FTDistribution1DCauchy\n"
-		"FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const final\n"
+		"FTDistribution1DCauchy * FTDistribution1DCauchy::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DCauchy_accept", _wrap_FTDistribution1DCauchy_accept, METH_VARARGS, "\n"
 		"FTDistribution1DCauchy_accept(FTDistribution1DCauchy self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DCauchy::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DCauchy_evaluate", _wrap_FTDistribution1DCauchy_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DCauchy_evaluate(FTDistribution1DCauchy self, double q) -> double\n"
-		"double FTDistribution1DCauchy::evaluate(double q) const final\n"
+		"double FTDistribution1DCauchy::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
 		""},
 	 { "FTDistribution1DCauchy_qSecondDerivative", _wrap_FTDistribution1DCauchy_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DCauchy_qSecondDerivative(FTDistribution1DCauchy self) -> double\n"
-		"double FTDistribution1DCauchy::qSecondDerivative() const final\n"
+		"double FTDistribution1DCauchy::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72379,24 +72379,24 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DGauss_clone", _wrap_FTDistribution1DGauss_clone, METH_O, "\n"
 		"FTDistribution1DGauss_clone(FTDistribution1DGauss self) -> FTDistribution1DGauss\n"
-		"FTDistribution1DGauss * FTDistribution1DGauss::clone() const final\n"
+		"FTDistribution1DGauss * FTDistribution1DGauss::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DGauss_accept", _wrap_FTDistribution1DGauss_accept, METH_VARARGS, "\n"
 		"FTDistribution1DGauss_accept(FTDistribution1DGauss self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DGauss_evaluate", _wrap_FTDistribution1DGauss_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DGauss_evaluate(FTDistribution1DGauss self, double q) -> double\n"
-		"double FTDistribution1DGauss::evaluate(double q) const final\n"
+		"double FTDistribution1DGauss::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
 		""},
 	 { "FTDistribution1DGauss_qSecondDerivative", _wrap_FTDistribution1DGauss_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DGauss_qSecondDerivative(FTDistribution1DGauss self) -> double\n"
-		"double FTDistribution1DGauss::qSecondDerivative() const final\n"
+		"double FTDistribution1DGauss::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72412,24 +72412,24 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DGate_clone", _wrap_FTDistribution1DGate_clone, METH_O, "\n"
 		"FTDistribution1DGate_clone(FTDistribution1DGate self) -> FTDistribution1DGate\n"
-		"FTDistribution1DGate * FTDistribution1DGate::clone() const final\n"
+		"FTDistribution1DGate * FTDistribution1DGate::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DGate_accept", _wrap_FTDistribution1DGate_accept, METH_VARARGS, "\n"
 		"FTDistribution1DGate_accept(FTDistribution1DGate self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DGate::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DGate::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DGate_evaluate", _wrap_FTDistribution1DGate_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DGate_evaluate(FTDistribution1DGate self, double q) -> double\n"
-		"double FTDistribution1DGate::evaluate(double q) const final\n"
+		"double FTDistribution1DGate::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
 		""},
 	 { "FTDistribution1DGate_qSecondDerivative", _wrap_FTDistribution1DGate_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DGate_qSecondDerivative(FTDistribution1DGate self) -> double\n"
-		"double FTDistribution1DGate::qSecondDerivative() const final\n"
+		"double FTDistribution1DGate::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72445,24 +72445,24 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DTriangle_clone", _wrap_FTDistribution1DTriangle_clone, METH_O, "\n"
 		"FTDistribution1DTriangle_clone(FTDistribution1DTriangle self) -> FTDistribution1DTriangle\n"
-		"FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const final\n"
+		"FTDistribution1DTriangle * FTDistribution1DTriangle::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DTriangle_accept", _wrap_FTDistribution1DTriangle_accept, METH_VARARGS, "\n"
 		"FTDistribution1DTriangle_accept(FTDistribution1DTriangle self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DTriangle::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DTriangle_evaluate", _wrap_FTDistribution1DTriangle_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DTriangle_evaluate(FTDistribution1DTriangle self, double q) -> double\n"
-		"double FTDistribution1DTriangle::evaluate(double q) const final\n"
+		"double FTDistribution1DTriangle::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
 		""},
 	 { "FTDistribution1DTriangle_qSecondDerivative", _wrap_FTDistribution1DTriangle_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DTriangle_qSecondDerivative(FTDistribution1DTriangle self) -> double\n"
-		"double FTDistribution1DTriangle::qSecondDerivative() const final\n"
+		"double FTDistribution1DTriangle::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72478,24 +72478,24 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DCosine_clone", _wrap_FTDistribution1DCosine_clone, METH_O, "\n"
 		"FTDistribution1DCosine_clone(FTDistribution1DCosine self) -> FTDistribution1DCosine\n"
-		"FTDistribution1DCosine * FTDistribution1DCosine::clone() const final\n"
+		"FTDistribution1DCosine * FTDistribution1DCosine::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DCosine_accept", _wrap_FTDistribution1DCosine_accept, METH_VARARGS, "\n"
 		"FTDistribution1DCosine_accept(FTDistribution1DCosine self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DCosine::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DCosine::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DCosine_evaluate", _wrap_FTDistribution1DCosine_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DCosine_evaluate(FTDistribution1DCosine self, double q) -> double\n"
-		"double FTDistribution1DCosine::evaluate(double q) const final\n"
+		"double FTDistribution1DCosine::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
 		""},
 	 { "FTDistribution1DCosine_qSecondDerivative", _wrap_FTDistribution1DCosine_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DCosine_qSecondDerivative(FTDistribution1DCosine self) -> double\n"
-		"double FTDistribution1DCosine::qSecondDerivative() const final\n"
+		"double FTDistribution1DCosine::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72511,17 +72511,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DVoigt_clone", _wrap_FTDistribution1DVoigt_clone, METH_O, "\n"
 		"FTDistribution1DVoigt_clone(FTDistribution1DVoigt self) -> FTDistribution1DVoigt\n"
-		"FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const final\n"
+		"FTDistribution1DVoigt * FTDistribution1DVoigt::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DVoigt_accept", _wrap_FTDistribution1DVoigt_accept, METH_VARARGS, "\n"
 		"FTDistribution1DVoigt_accept(FTDistribution1DVoigt self, INodeVisitor * visitor)\n"
-		"void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution1DVoigt::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution1DVoigt_evaluate", _wrap_FTDistribution1DVoigt_evaluate, METH_VARARGS, "\n"
 		"FTDistribution1DVoigt_evaluate(FTDistribution1DVoigt self, double q) -> double\n"
-		"double FTDistribution1DVoigt::evaluate(double q) const final\n"
+		"double FTDistribution1DVoigt::evaluate(double q) const override\n"
 		"\n"
 		"Returns Fourier transform of this distribution; is a decay function starting at evaluate(0)=1. \n"
 		"\n"
@@ -72533,7 +72533,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution1DVoigt_qSecondDerivative", _wrap_FTDistribution1DVoigt_qSecondDerivative, METH_O, "\n"
 		"FTDistribution1DVoigt_qSecondDerivative(FTDistribution1DVoigt self) -> double\n"
-		"double FTDistribution1DVoigt::qSecondDerivative() const final\n"
+		"double FTDistribution1DVoigt::qSecondDerivative() const override\n"
 		"\n"
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
@@ -72585,17 +72585,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution2DCauchy_clone", _wrap_FTDistribution2DCauchy_clone, METH_O, "\n"
 		"FTDistribution2DCauchy_clone(FTDistribution2DCauchy self) -> FTDistribution2DCauchy\n"
-		"FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const final\n"
+		"FTDistribution2DCauchy * FTDistribution2DCauchy::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DCauchy_accept", _wrap_FTDistribution2DCauchy_accept, METH_VARARGS, "\n"
 		"FTDistribution2DCauchy_accept(FTDistribution2DCauchy self, INodeVisitor * visitor)\n"
-		"void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution2DCauchy::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DCauchy_evaluate", _wrap_FTDistribution2DCauchy_evaluate, METH_VARARGS, "\n"
 		"FTDistribution2DCauchy_evaluate(FTDistribution2DCauchy self, double qx, double qy) -> double\n"
-		"double FTDistribution2DCauchy::evaluate(double qx, double qy) const final\n"
+		"double FTDistribution2DCauchy::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 \n"
 		"\n"
@@ -72611,17 +72611,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution2DGauss_clone", _wrap_FTDistribution2DGauss_clone, METH_O, "\n"
 		"FTDistribution2DGauss_clone(FTDistribution2DGauss self) -> FTDistribution2DGauss\n"
-		"FTDistribution2DGauss * FTDistribution2DGauss::clone() const final\n"
+		"FTDistribution2DGauss * FTDistribution2DGauss::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DGauss_accept", _wrap_FTDistribution2DGauss_accept, METH_VARARGS, "\n"
 		"FTDistribution2DGauss_accept(FTDistribution2DGauss self, INodeVisitor * visitor)\n"
-		"void FTDistribution2DGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution2DGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DGauss_evaluate", _wrap_FTDistribution2DGauss_evaluate, METH_VARARGS, "\n"
 		"FTDistribution2DGauss_evaluate(FTDistribution2DGauss self, double qx, double qy) -> double\n"
-		"double FTDistribution2DGauss::evaluate(double qx, double qy) const final\n"
+		"double FTDistribution2DGauss::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 \n"
 		"\n"
@@ -72637,17 +72637,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution2DGate_clone", _wrap_FTDistribution2DGate_clone, METH_O, "\n"
 		"FTDistribution2DGate_clone(FTDistribution2DGate self) -> FTDistribution2DGate\n"
-		"FTDistribution2DGate * FTDistribution2DGate::clone() const final\n"
+		"FTDistribution2DGate * FTDistribution2DGate::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DGate_accept", _wrap_FTDistribution2DGate_accept, METH_VARARGS, "\n"
 		"FTDistribution2DGate_accept(FTDistribution2DGate self, INodeVisitor * visitor)\n"
-		"void FTDistribution2DGate::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution2DGate::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DGate_evaluate", _wrap_FTDistribution2DGate_evaluate, METH_VARARGS, "\n"
 		"FTDistribution2DGate_evaluate(FTDistribution2DGate self, double qx, double qy) -> double\n"
-		"double FTDistribution2DGate::evaluate(double qx, double qy) const final\n"
+		"double FTDistribution2DGate::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 \n"
 		"\n"
@@ -72663,17 +72663,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution2DCone_clone", _wrap_FTDistribution2DCone_clone, METH_O, "\n"
 		"FTDistribution2DCone_clone(FTDistribution2DCone self) -> FTDistribution2DCone\n"
-		"FTDistribution2DCone * FTDistribution2DCone::clone() const final\n"
+		"FTDistribution2DCone * FTDistribution2DCone::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DCone_accept", _wrap_FTDistribution2DCone_accept, METH_VARARGS, "\n"
 		"FTDistribution2DCone_accept(FTDistribution2DCone self, INodeVisitor * visitor)\n"
-		"void FTDistribution2DCone::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution2DCone::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DCone_evaluate", _wrap_FTDistribution2DCone_evaluate, METH_VARARGS, "\n"
 		"FTDistribution2DCone_evaluate(FTDistribution2DCone self, double qx, double qy) -> double\n"
-		"double FTDistribution2DCone::evaluate(double qx, double qy) const final\n"
+		"double FTDistribution2DCone::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 \n"
 		"\n"
@@ -72689,17 +72689,17 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FTDistribution2DVoigt_clone", _wrap_FTDistribution2DVoigt_clone, METH_O, "\n"
 		"FTDistribution2DVoigt_clone(FTDistribution2DVoigt self) -> FTDistribution2DVoigt\n"
-		"FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const final\n"
+		"FTDistribution2DVoigt * FTDistribution2DVoigt::clone() const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DVoigt_accept", _wrap_FTDistribution2DVoigt_accept, METH_VARARGS, "\n"
 		"FTDistribution2DVoigt_accept(FTDistribution2DVoigt self, INodeVisitor * visitor)\n"
-		"void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const final\n"
+		"void FTDistribution2DVoigt::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FTDistribution2DVoigt_evaluate", _wrap_FTDistribution2DVoigt_evaluate, METH_VARARGS, "\n"
 		"FTDistribution2DVoigt_evaluate(FTDistribution2DVoigt self, double qx, double qy) -> double\n"
-		"double FTDistribution2DVoigt::evaluate(double qx, double qy) const final\n"
+		"double FTDistribution2DVoigt::evaluate(double qx, double qy) const override\n"
 		"\n"
 		"evaluate Fourier transformed distribution for q in X,Y coordinates the original distribution (in real space) is assumed to be normalized: total integral is equal to 1 \n"
 		"\n"
@@ -73585,14 +73585,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "InterferenceFunctionNone_clone", _wrap_InterferenceFunctionNone_clone, METH_O, "\n"
 		"InterferenceFunctionNone_clone(InterferenceFunctionNone self) -> InterferenceFunctionNone\n"
-		"InterferenceFunctionNone * InterferenceFunctionNone::clone() const final\n"
+		"InterferenceFunctionNone * InterferenceFunctionNone::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "InterferenceFunctionNone_accept", _wrap_InterferenceFunctionNone_accept, METH_VARARGS, "\n"
 		"InterferenceFunctionNone_accept(InterferenceFunctionNone self, INodeVisitor * visitor)\n"
-		"void InterferenceFunctionNone::accept(INodeVisitor *visitor) const final\n"
+		"void InterferenceFunctionNone::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_InterferenceFunctionNone", _wrap_delete_InterferenceFunctionNone, METH_O, "delete_InterferenceFunctionNone(InterferenceFunctionNone self)"},
@@ -73616,14 +73616,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "InterferenceFunctionRadialParaCrystal_clone", _wrap_InterferenceFunctionRadialParaCrystal_clone, METH_O, "\n"
 		"InterferenceFunctionRadialParaCrystal_clone(InterferenceFunctionRadialParaCrystal self) -> InterferenceFunctionRadialParaCrystal\n"
-		"InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const final\n"
+		"InterferenceFunctionRadialParaCrystal * InterferenceFunctionRadialParaCrystal::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "InterferenceFunctionRadialParaCrystal_accept", _wrap_InterferenceFunctionRadialParaCrystal_accept, METH_VARARGS, "\n"
 		"InterferenceFunctionRadialParaCrystal_accept(InterferenceFunctionRadialParaCrystal self, INodeVisitor * visitor)\n"
-		"void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const final\n"
+		"void InterferenceFunctionRadialParaCrystal::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "InterferenceFunctionRadialParaCrystal_setKappa", _wrap_InterferenceFunctionRadialParaCrystal_setKappa, METH_VARARGS, "\n"
@@ -73686,7 +73686,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "InterferenceFunctionRadialParaCrystal_getChildren", _wrap_InterferenceFunctionRadialParaCrystal_getChildren, METH_O, "\n"
 		"InterferenceFunctionRadialParaCrystal_getChildren(InterferenceFunctionRadialParaCrystal self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const final\n"
+		"std::vector< const INode * > InterferenceFunctionRadialParaCrystal::getChildren() const override\n"
 		"\n"
 		""},
 	 { "InterferenceFunctionRadialParaCrystal_randomSample", _wrap_InterferenceFunctionRadialParaCrystal_randomSample, METH_O, "\n"
@@ -73704,14 +73704,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "InterferenceFunctionTwin_clone", _wrap_InterferenceFunctionTwin_clone, METH_O, "\n"
 		"InterferenceFunctionTwin_clone(InterferenceFunctionTwin self) -> InterferenceFunctionTwin\n"
-		"InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const final\n"
+		"InterferenceFunctionTwin * InterferenceFunctionTwin::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "InterferenceFunctionTwin_accept", _wrap_InterferenceFunctionTwin_accept, METH_VARARGS, "\n"
 		"InterferenceFunctionTwin_accept(InterferenceFunctionTwin self, INodeVisitor * visitor)\n"
-		"void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const final\n"
+		"void InterferenceFunctionTwin::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "InterferenceFunctionTwin_direction", _wrap_InterferenceFunctionTwin_direction, METH_O, "\n"
@@ -73963,14 +73963,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Layer_clone", _wrap_Layer_clone, METH_O, "\n"
 		"Layer_clone(Layer self) -> Layer\n"
-		"Layer * Layer::clone() const final\n"
+		"Layer * Layer::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "Layer_accept", _wrap_Layer_accept, METH_VARARGS, "\n"
 		"Layer_accept(Layer self, INodeVisitor * visitor)\n"
-		"void Layer::accept(INodeVisitor *visitor) const final\n"
+		"void Layer::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "Layer_thickness", _wrap_Layer_thickness, METH_O, "\n"
@@ -73980,7 +73980,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Layer_material", _wrap_Layer_material, METH_O, "\n"
 		"Layer_material(Layer self) -> Material\n"
-		"const Material* Layer::material() const final\n"
+		"const Material* Layer::material() const override\n"
 		"\n"
 		"Returns nullptr, unless overwritten to return a specific material. \n"
 		"\n"
@@ -74002,7 +74002,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "Layer_getChildren", _wrap_Layer_getChildren, METH_O, "\n"
 		"Layer_getChildren(Layer self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > Layer::getChildren() const final\n"
+		"std::vector< const INode * > Layer::getChildren() const override\n"
 		"\n"
 		""},
 	 { "Layer_registerThickness", _wrap_Layer_registerThickness, METH_VARARGS, "\n"
@@ -74034,14 +74034,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "MultiLayer_clone", _wrap_MultiLayer_clone, METH_O, "\n"
 		"MultiLayer_clone(MultiLayer self) -> MultiLayer\n"
-		"MultiLayer * MultiLayer::clone() const final\n"
+		"MultiLayer * MultiLayer::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "MultiLayer_accept", _wrap_MultiLayer_accept, METH_VARARGS, "\n"
 		"MultiLayer_accept(MultiLayer self, INodeVisitor * visitor)\n"
-		"void MultiLayer::accept(INodeVisitor *visitor) const final\n"
+		"void MultiLayer::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "MultiLayer_numberOfLayers", _wrap_MultiLayer_numberOfLayers, METH_O, "\n"
@@ -74117,7 +74117,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "MultiLayer_getChildren", _wrap_MultiLayer_getChildren, METH_O, "\n"
 		"MultiLayer_getChildren(MultiLayer self) -> swig_dummy_type_const_inode_vector\n"
-		"std::vector< const INode * > MultiLayer::getChildren() const final\n"
+		"std::vector< const INode * > MultiLayer::getChildren() const override\n"
 		"\n"
 		""},
 	 { "MultiLayer_swigregister", MultiLayer_swigregister, METH_O, NULL},
@@ -74131,21 +74131,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IFormFactorPolyhedron_bottomZ", _wrap_IFormFactorPolyhedron_bottomZ, METH_VARARGS, "\n"
 		"IFormFactorPolyhedron_bottomZ(IFormFactorPolyhedron self, IRotation rotation) -> double\n"
-		"double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const final\n"
+		"double IFormFactorPolyhedron::bottomZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "IFormFactorPolyhedron_topZ", _wrap_IFormFactorPolyhedron_topZ, METH_VARARGS, "\n"
 		"IFormFactorPolyhedron_topZ(IFormFactorPolyhedron self, IRotation rotation) -> double\n"
-		"double IFormFactorPolyhedron::topZ(const IRotation &rotation) const final\n"
+		"double IFormFactorPolyhedron::topZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "IFormFactorPolyhedron_evaluate_for_q", _wrap_IFormFactorPolyhedron_evaluate_for_q, METH_VARARGS, "\n"
 		"IFormFactorPolyhedron_evaluate_for_q(IFormFactorPolyhedron self, cvector_t q) -> complex_t\n"
-		"complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t IFormFactorPolyhedron::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74157,14 +74157,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IFormFactorPolyhedron_volume", _wrap_IFormFactorPolyhedron_volume, METH_O, "\n"
 		"IFormFactorPolyhedron_volume(IFormFactorPolyhedron self) -> double\n"
-		"double IFormFactorPolyhedron::volume() const final\n"
+		"double IFormFactorPolyhedron::volume() const override\n"
 		"\n"
 		"Returns the total volume of the particle of this form factor's shape. \n"
 		"\n"
 		""},
 	 { "IFormFactorPolyhedron_radialExtension", _wrap_IFormFactorPolyhedron_radialExtension, METH_O, "\n"
 		"IFormFactorPolyhedron_radialExtension(IFormFactorPolyhedron self) -> double\n"
-		"double IFormFactorPolyhedron::radialExtension() const final\n"
+		"double IFormFactorPolyhedron::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
@@ -74184,14 +74184,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IFormFactorPrism_bottomZ", _wrap_IFormFactorPrism_bottomZ, METH_VARARGS, "\n"
 		"IFormFactorPrism_bottomZ(IFormFactorPrism self, IRotation rotation) -> double\n"
-		"double IFormFactorPrism::bottomZ(const IRotation &rotation) const final\n"
+		"double IFormFactorPrism::bottomZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "IFormFactorPrism_topZ", _wrap_IFormFactorPrism_topZ, METH_VARARGS, "\n"
 		"IFormFactorPrism_topZ(IFormFactorPrism self, IRotation rotation) -> double\n"
-		"double IFormFactorPrism::topZ(const IRotation &rotation) const final\n"
+		"double IFormFactorPrism::topZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
@@ -74240,14 +74240,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IProfileRipple_radialExtension", _wrap_IProfileRipple_radialExtension, METH_O, "\n"
 		"IProfileRipple_radialExtension(IProfileRipple self) -> double\n"
-		"double IProfileRipple::radialExtension() const final\n"
+		"double IProfileRipple::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "IProfileRipple_evaluate_for_q", _wrap_IProfileRipple_evaluate_for_q, METH_VARARGS, "\n"
 		"IProfileRipple_evaluate_for_q(IProfileRipple self, cvector_t q) -> complex_t\n"
-		"complex_t IProfileRipple::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t IProfileRipple::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74280,7 +74280,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorAnisoPyramid_accept", _wrap_FormFactorAnisoPyramid_accept, METH_VARARGS, "\n"
 		"FormFactorAnisoPyramid_accept(FormFactorAnisoPyramid self, INodeVisitor * visitor)\n"
-		"void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorAnisoPyramid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorAnisoPyramid_getLength", _wrap_FormFactorAnisoPyramid_getLength, METH_O, "\n"
@@ -74314,14 +74314,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorBox_clone", _wrap_FormFactorBox_clone, METH_O, "\n"
 		"FormFactorBox_clone(FormFactorBox self) -> FormFactorBox\n"
-		"FormFactorBox* FormFactorBox::clone() const final\n"
+		"FormFactorBox* FormFactorBox::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorBox_accept", _wrap_FormFactorBox_accept, METH_VARARGS, "\n"
 		"FormFactorBox_accept(FormFactorBox self, INodeVisitor * visitor)\n"
-		"void FormFactorBox::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorBox::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorBox_getLength", _wrap_FormFactorBox_getLength, METH_O, "\n"
@@ -74336,21 +74336,21 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorBox_volume", _wrap_FormFactorBox_volume, METH_O, "\n"
 		"FormFactorBox_volume(FormFactorBox self) -> double\n"
-		"double FormFactorBox::volume() const final\n"
+		"double FormFactorBox::volume() const override\n"
 		"\n"
 		"Returns the total volume of the particle of this form factor's shape. \n"
 		"\n"
 		""},
 	 { "FormFactorBox_radialExtension", _wrap_FormFactorBox_radialExtension, METH_O, "\n"
 		"FormFactorBox_radialExtension(FormFactorBox self) -> double\n"
-		"double FormFactorBox::radialExtension() const final\n"
+		"double FormFactorBox::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorBox_evaluate_for_q", _wrap_FormFactorBox_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorBox_evaluate_for_q(FormFactorBox self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorBox::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorBox::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74373,7 +74373,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCantellatedCube_accept", _wrap_FormFactorCantellatedCube_accept, METH_VARARGS, "\n"
 		"FormFactorCantellatedCube_accept(FormFactorCantellatedCube self, INodeVisitor * visitor)\n"
-		"void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCantellatedCube::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorCantellatedCube_getLength", _wrap_FormFactorCantellatedCube_getLength, METH_O, "\n"
@@ -74397,14 +74397,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCone_clone", _wrap_FormFactorCone_clone, METH_O, "\n"
 		"FormFactorCone_clone(FormFactorCone self) -> FormFactorCone\n"
-		"FormFactorCone* FormFactorCone::clone() const final\n"
+		"FormFactorCone* FormFactorCone::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorCone_accept", _wrap_FormFactorCone_accept, METH_VARARGS, "\n"
 		"FormFactorCone_accept(FormFactorCone self, INodeVisitor * visitor)\n"
-		"void FormFactorCone::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCone::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorCone_getHeight", _wrap_FormFactorCone_getHeight, METH_O, "\n"
@@ -74424,14 +74424,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCone_radialExtension", _wrap_FormFactorCone_radialExtension, METH_O, "\n"
 		"FormFactorCone_radialExtension(FormFactorCone self) -> double\n"
-		"double FormFactorCone::radialExtension() const final\n"
+		"double FormFactorCone::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorCone_evaluate_for_q", _wrap_FormFactorCone_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorCone_evaluate_for_q(FormFactorCone self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorCone::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorCone::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74454,7 +74454,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCone6_accept", _wrap_FormFactorCone6_accept, METH_VARARGS, "\n"
 		"FormFactorCone6_accept(FormFactorCone6 self, INodeVisitor * visitor)\n"
-		"void FormFactorCone6::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCone6::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorCone6_getBaseEdge", _wrap_FormFactorCone6_getBaseEdge, METH_O, "\n"
@@ -74483,14 +74483,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCosineRippleBox_clone", _wrap_FormFactorCosineRippleBox_clone, METH_O, "\n"
 		"FormFactorCosineRippleBox_clone(FormFactorCosineRippleBox self) -> FormFactorCosineRippleBox\n"
-		"FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const final\n"
+		"FormFactorCosineRippleBox * FormFactorCosineRippleBox::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorCosineRippleBox_accept", _wrap_FormFactorCosineRippleBox_accept, METH_VARARGS, "\n"
 		"FormFactorCosineRippleBox_accept(FormFactorCosineRippleBox self, INodeVisitor * visitor)\n"
-		"void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCosineRippleBox::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorCosineRippleBox", _wrap_delete_FormFactorCosineRippleBox, METH_O, "delete_FormFactorCosineRippleBox(FormFactorCosineRippleBox self)"},
@@ -74504,14 +74504,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCosineRippleGauss_clone", _wrap_FormFactorCosineRippleGauss_clone, METH_O, "\n"
 		"FormFactorCosineRippleGauss_clone(FormFactorCosineRippleGauss self) -> FormFactorCosineRippleGauss\n"
-		"FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const final\n"
+		"FormFactorCosineRippleGauss * FormFactorCosineRippleGauss::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorCosineRippleGauss_accept", _wrap_FormFactorCosineRippleGauss_accept, METH_VARARGS, "\n"
 		"FormFactorCosineRippleGauss_accept(FormFactorCosineRippleGauss self, INodeVisitor * visitor)\n"
-		"void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCosineRippleGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorCosineRippleGauss", _wrap_delete_FormFactorCosineRippleGauss, METH_O, "delete_FormFactorCosineRippleGauss(FormFactorCosineRippleGauss self)"},
@@ -74525,14 +74525,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCosineRippleLorentz_clone", _wrap_FormFactorCosineRippleLorentz_clone, METH_O, "\n"
 		"FormFactorCosineRippleLorentz_clone(FormFactorCosineRippleLorentz self) -> FormFactorCosineRippleLorentz\n"
-		"FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const final\n"
+		"FormFactorCosineRippleLorentz * FormFactorCosineRippleLorentz::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorCosineRippleLorentz_accept", _wrap_FormFactorCosineRippleLorentz_accept, METH_VARARGS, "\n"
 		"FormFactorCosineRippleLorentz_accept(FormFactorCosineRippleLorentz self, INodeVisitor * visitor)\n"
-		"void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCosineRippleLorentz::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorCosineRippleLorentz", _wrap_delete_FormFactorCosineRippleLorentz, METH_O, "delete_FormFactorCosineRippleLorentz(FormFactorCosineRippleLorentz self)"},
@@ -74553,7 +74553,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCuboctahedron_accept", _wrap_FormFactorCuboctahedron_accept, METH_VARARGS, "\n"
 		"FormFactorCuboctahedron_accept(FormFactorCuboctahedron self, INodeVisitor * visitor)\n"
-		"void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCuboctahedron::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorCuboctahedron_getLength", _wrap_FormFactorCuboctahedron_getLength, METH_O, "\n"
@@ -74587,14 +74587,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCylinder_clone", _wrap_FormFactorCylinder_clone, METH_O, "\n"
 		"FormFactorCylinder_clone(FormFactorCylinder self) -> FormFactorCylinder\n"
-		"FormFactorCylinder* FormFactorCylinder::clone() const final\n"
+		"FormFactorCylinder* FormFactorCylinder::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorCylinder_accept", _wrap_FormFactorCylinder_accept, METH_VARARGS, "\n"
 		"FormFactorCylinder_accept(FormFactorCylinder self, INodeVisitor * visitor)\n"
-		"void FormFactorCylinder::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorCylinder::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorCylinder_getHeight", _wrap_FormFactorCylinder_getHeight, METH_O, "\n"
@@ -74609,14 +74609,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorCylinder_radialExtension", _wrap_FormFactorCylinder_radialExtension, METH_O, "\n"
 		"FormFactorCylinder_radialExtension(FormFactorCylinder self) -> double\n"
-		"double FormFactorCylinder::radialExtension() const final\n"
+		"double FormFactorCylinder::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorCylinder_evaluate_for_q", _wrap_FormFactorCylinder_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorCylinder_evaluate_for_q(FormFactorCylinder self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorCylinder::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74632,14 +74632,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorDodecahedron_clone", _wrap_FormFactorDodecahedron_clone, METH_O, "\n"
 		"FormFactorDodecahedron_clone(FormFactorDodecahedron self) -> FormFactorDodecahedron\n"
-		"FormFactorDodecahedron* FormFactorDodecahedron::clone() const final\n"
+		"FormFactorDodecahedron* FormFactorDodecahedron::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorDodecahedron_accept", _wrap_FormFactorDodecahedron_accept, METH_VARARGS, "\n"
 		"FormFactorDodecahedron_accept(FormFactorDodecahedron self, INodeVisitor * visitor)\n"
-		"void FormFactorDodecahedron::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorDodecahedron::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorDodecahedron_getEdge", _wrap_FormFactorDodecahedron_getEdge, METH_O, "\n"
@@ -74658,14 +74658,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorDot_clone", _wrap_FormFactorDot_clone, METH_O, "\n"
 		"FormFactorDot_clone(FormFactorDot self) -> FormFactorDot\n"
-		"FormFactorDot* FormFactorDot::clone() const final\n"
+		"FormFactorDot* FormFactorDot::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorDot_accept", _wrap_FormFactorDot_accept, METH_VARARGS, "\n"
 		"FormFactorDot_accept(FormFactorDot self, INodeVisitor * visitor)\n"
-		"void FormFactorDot::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorDot::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorDot_getRadius", _wrap_FormFactorDot_getRadius, METH_O, "\n"
@@ -74675,28 +74675,28 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorDot_radialExtension", _wrap_FormFactorDot_radialExtension, METH_O, "\n"
 		"FormFactorDot_radialExtension(FormFactorDot self) -> double\n"
-		"double FormFactorDot::radialExtension() const final\n"
+		"double FormFactorDot::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorDot_bottomZ", _wrap_FormFactorDot_bottomZ, METH_VARARGS, "\n"
 		"FormFactorDot_bottomZ(FormFactorDot self, IRotation arg2) -> double\n"
-		"double FormFactorDot::bottomZ(const IRotation &) const final\n"
+		"double FormFactorDot::bottomZ(const IRotation &) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "FormFactorDot_topZ", _wrap_FormFactorDot_topZ, METH_VARARGS, "\n"
 		"FormFactorDot_topZ(FormFactorDot self, IRotation arg2) -> double\n"
-		"double FormFactorDot::topZ(const IRotation &) const final\n"
+		"double FormFactorDot::topZ(const IRotation &) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "FormFactorDot_evaluate_for_q", _wrap_FormFactorDot_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorDot_evaluate_for_q(FormFactorDot self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorDot::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorDot::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74719,7 +74719,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorEllipsoidalCylinder_accept", _wrap_FormFactorEllipsoidalCylinder_accept, METH_VARARGS, "\n"
 		"FormFactorEllipsoidalCylinder_accept(FormFactorEllipsoidalCylinder self, INodeVisitor * visitor)\n"
-		"void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorEllipsoidalCylinder::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorEllipsoidalCylinder_getRadiusX", _wrap_FormFactorEllipsoidalCylinder_getRadiusX, METH_O, "\n"
@@ -74739,14 +74739,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorEllipsoidalCylinder_radialExtension", _wrap_FormFactorEllipsoidalCylinder_radialExtension, METH_O, "\n"
 		"FormFactorEllipsoidalCylinder_radialExtension(FormFactorEllipsoidalCylinder self) -> double\n"
-		"double FormFactorEllipsoidalCylinder::radialExtension() const final\n"
+		"double FormFactorEllipsoidalCylinder::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorEllipsoidalCylinder_evaluate_for_q", _wrap_FormFactorEllipsoidalCylinder_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorEllipsoidalCylinder_evaluate_for_q(FormFactorEllipsoidalCylinder self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorEllipsoidalCylinder::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74769,7 +74769,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorFullSphere_accept", _wrap_FormFactorFullSphere_accept, METH_VARARGS, "\n"
 		"FormFactorFullSphere_accept(FormFactorFullSphere self, INodeVisitor * visitor)\n"
-		"void FormFactorFullSphere::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorFullSphere::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorFullSphere_getRadius", _wrap_FormFactorFullSphere_getRadius, METH_O, "\n"
@@ -74779,28 +74779,28 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorFullSphere_radialExtension", _wrap_FormFactorFullSphere_radialExtension, METH_O, "\n"
 		"FormFactorFullSphere_radialExtension(FormFactorFullSphere self) -> double\n"
-		"double FormFactorFullSphere::radialExtension() const final\n"
+		"double FormFactorFullSphere::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorFullSphere_bottomZ", _wrap_FormFactorFullSphere_bottomZ, METH_VARARGS, "\n"
 		"FormFactorFullSphere_bottomZ(FormFactorFullSphere self, IRotation rotation) -> double\n"
-		"double FormFactorFullSphere::bottomZ(const IRotation &rotation) const final\n"
+		"double FormFactorFullSphere::bottomZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "FormFactorFullSphere_topZ", _wrap_FormFactorFullSphere_topZ, METH_VARARGS, "\n"
 		"FormFactorFullSphere_topZ(FormFactorFullSphere self, IRotation rotation) -> double\n"
-		"double FormFactorFullSphere::topZ(const IRotation &rotation) const final\n"
+		"double FormFactorFullSphere::topZ(const IRotation &rotation) const override\n"
 		"\n"
 		"Returns the z-coordinate of the lowest point in this shape after a given rotation. \n"
 		"\n"
 		""},
 	 { "FormFactorFullSphere_evaluate_for_q", _wrap_FormFactorFullSphere_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorFullSphere_evaluate_for_q(FormFactorFullSphere self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorFullSphere::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74823,7 +74823,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorFullSpheroid_accept", _wrap_FormFactorFullSpheroid_accept, METH_VARARGS, "\n"
 		"FormFactorFullSpheroid_accept(FormFactorFullSpheroid self, INodeVisitor * visitor)\n"
-		"void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorFullSpheroid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorFullSpheroid_getHeight", _wrap_FormFactorFullSpheroid_getHeight, METH_O, "\n"
@@ -74838,14 +74838,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorFullSpheroid_radialExtension", _wrap_FormFactorFullSpheroid_radialExtension, METH_O, "\n"
 		"FormFactorFullSpheroid_radialExtension(FormFactorFullSpheroid self) -> double\n"
-		"double FormFactorFullSpheroid::radialExtension() const final\n"
+		"double FormFactorFullSpheroid::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorFullSpheroid_evaluate_for_q", _wrap_FormFactorFullSpheroid_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorFullSpheroid_evaluate_for_q(FormFactorFullSpheroid self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorFullSpheroid::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74873,7 +74873,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorHemiEllipsoid_accept", _wrap_FormFactorHemiEllipsoid_accept, METH_VARARGS, "\n"
 		"FormFactorHemiEllipsoid_accept(FormFactorHemiEllipsoid self, INodeVisitor * visitor)\n"
-		"void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorHemiEllipsoid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorHemiEllipsoid_getHeight", _wrap_FormFactorHemiEllipsoid_getHeight, METH_O, "\n"
@@ -74893,14 +74893,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorHemiEllipsoid_radialExtension", _wrap_FormFactorHemiEllipsoid_radialExtension, METH_O, "\n"
 		"FormFactorHemiEllipsoid_radialExtension(FormFactorHemiEllipsoid self) -> double\n"
-		"double FormFactorHemiEllipsoid::radialExtension() const final\n"
+		"double FormFactorHemiEllipsoid::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorHemiEllipsoid_evaluate_for_q", _wrap_FormFactorHemiEllipsoid_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorHemiEllipsoid_evaluate_for_q(FormFactorHemiEllipsoid self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorHemiEllipsoid::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74922,19 +74922,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorHollowSphere_accept", _wrap_FormFactorHollowSphere_accept, METH_VARARGS, "\n"
 		"FormFactorHollowSphere_accept(FormFactorHollowSphere self, INodeVisitor * visitor)\n"
-		"void FormFactorHollowSphere::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorHollowSphere::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorHollowSphere_radialExtension", _wrap_FormFactorHollowSphere_radialExtension, METH_O, "\n"
 		"FormFactorHollowSphere_radialExtension(FormFactorHollowSphere self) -> double\n"
-		"double FormFactorHollowSphere::radialExtension() const final\n"
+		"double FormFactorHollowSphere::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorHollowSphere_evaluate_for_q", _wrap_FormFactorHollowSphere_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorHollowSphere_evaluate_for_q(FormFactorHollowSphere self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorHollowSphere::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -74950,14 +74950,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorIcosahedron_clone", _wrap_FormFactorIcosahedron_clone, METH_O, "\n"
 		"FormFactorIcosahedron_clone(FormFactorIcosahedron self) -> FormFactorIcosahedron\n"
-		"FormFactorIcosahedron* FormFactorIcosahedron::clone() const final\n"
+		"FormFactorIcosahedron* FormFactorIcosahedron::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorIcosahedron_accept", _wrap_FormFactorIcosahedron_accept, METH_VARARGS, "\n"
 		"FormFactorIcosahedron_accept(FormFactorIcosahedron self, INodeVisitor * visitor)\n"
-		"void FormFactorIcosahedron::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorIcosahedron::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorIcosahedron_getEdge", _wrap_FormFactorIcosahedron_getEdge, METH_O, "\n"
@@ -74983,7 +74983,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorLongBoxGauss_accept", _wrap_FormFactorLongBoxGauss_accept, METH_VARARGS, "\n"
 		"FormFactorLongBoxGauss_accept(FormFactorLongBoxGauss self, INodeVisitor * visitor)\n"
-		"void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorLongBoxGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorLongBoxGauss_getLength", _wrap_FormFactorLongBoxGauss_getLength, METH_O, "\n"
@@ -75003,14 +75003,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorLongBoxGauss_radialExtension", _wrap_FormFactorLongBoxGauss_radialExtension, METH_O, "\n"
 		"FormFactorLongBoxGauss_radialExtension(FormFactorLongBoxGauss self) -> double\n"
-		"double FormFactorLongBoxGauss::radialExtension() const final\n"
+		"double FormFactorLongBoxGauss::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorLongBoxGauss_evaluate_for_q", _wrap_FormFactorLongBoxGauss_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorLongBoxGauss_evaluate_for_q(FormFactorLongBoxGauss self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorLongBoxGauss::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75033,7 +75033,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorLongBoxLorentz_accept", _wrap_FormFactorLongBoxLorentz_accept, METH_VARARGS, "\n"
 		"FormFactorLongBoxLorentz_accept(FormFactorLongBoxLorentz self, INodeVisitor * visitor)\n"
-		"void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorLongBoxLorentz::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorLongBoxLorentz_getLength", _wrap_FormFactorLongBoxLorentz_getLength, METH_O, "\n"
@@ -75053,14 +75053,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorLongBoxLorentz_radialExtension", _wrap_FormFactorLongBoxLorentz_radialExtension, METH_O, "\n"
 		"FormFactorLongBoxLorentz_radialExtension(FormFactorLongBoxLorentz self) -> double\n"
-		"double FormFactorLongBoxLorentz::radialExtension() const final\n"
+		"double FormFactorLongBoxLorentz::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorLongBoxLorentz_evaluate_for_q", _wrap_FormFactorLongBoxLorentz_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorLongBoxLorentz_evaluate_for_q(FormFactorLongBoxLorentz self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorLongBoxLorentz::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75076,14 +75076,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorPrism3_clone", _wrap_FormFactorPrism3_clone, METH_O, "\n"
 		"FormFactorPrism3_clone(FormFactorPrism3 self) -> FormFactorPrism3\n"
-		"FormFactorPrism3* FormFactorPrism3::clone() const final\n"
+		"FormFactorPrism3* FormFactorPrism3::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorPrism3_accept", _wrap_FormFactorPrism3_accept, METH_VARARGS, "\n"
 		"FormFactorPrism3_accept(FormFactorPrism3 self, INodeVisitor * visitor)\n"
-		"void FormFactorPrism3::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorPrism3::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorPrism3_getBaseEdge", _wrap_FormFactorPrism3_getBaseEdge, METH_O, "\n"
@@ -75102,14 +75102,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorPrism6_clone", _wrap_FormFactorPrism6_clone, METH_O, "\n"
 		"FormFactorPrism6_clone(FormFactorPrism6 self) -> FormFactorPrism6\n"
-		"FormFactorPrism6* FormFactorPrism6::clone() const final\n"
+		"FormFactorPrism6* FormFactorPrism6::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorPrism6_accept", _wrap_FormFactorPrism6_accept, METH_VARARGS, "\n"
 		"FormFactorPrism6_accept(FormFactorPrism6 self, INodeVisitor * visitor)\n"
-		"void FormFactorPrism6::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorPrism6::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorPrism6_getBaseEdge", _wrap_FormFactorPrism6_getBaseEdge, METH_O, "\n"
@@ -75135,7 +75135,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorPyramid_accept", _wrap_FormFactorPyramid_accept, METH_VARARGS, "\n"
 		"FormFactorPyramid_accept(FormFactorPyramid self, INodeVisitor * visitor)\n"
-		"void FormFactorPyramid::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorPyramid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorPyramid_getHeight", _wrap_FormFactorPyramid_getHeight, METH_O, "\n"
@@ -75164,14 +75164,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSawtoothRippleBox_clone", _wrap_FormFactorSawtoothRippleBox_clone, METH_O, "\n"
 		"FormFactorSawtoothRippleBox_clone(FormFactorSawtoothRippleBox self) -> FormFactorSawtoothRippleBox\n"
-		"FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const final\n"
+		"FormFactorSawtoothRippleBox * FormFactorSawtoothRippleBox::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorSawtoothRippleBox_accept", _wrap_FormFactorSawtoothRippleBox_accept, METH_VARARGS, "\n"
 		"FormFactorSawtoothRippleBox_accept(FormFactorSawtoothRippleBox self, INodeVisitor * visitor)\n"
-		"void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorSawtoothRippleBox::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorSawtoothRippleBox", _wrap_delete_FormFactorSawtoothRippleBox, METH_O, "delete_FormFactorSawtoothRippleBox(FormFactorSawtoothRippleBox self)"},
@@ -75185,14 +75185,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSawtoothRippleGauss_clone", _wrap_FormFactorSawtoothRippleGauss_clone, METH_O, "\n"
 		"FormFactorSawtoothRippleGauss_clone(FormFactorSawtoothRippleGauss self) -> FormFactorSawtoothRippleGauss\n"
-		"FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const final\n"
+		"FormFactorSawtoothRippleGauss * FormFactorSawtoothRippleGauss::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorSawtoothRippleGauss_accept", _wrap_FormFactorSawtoothRippleGauss_accept, METH_VARARGS, "\n"
 		"FormFactorSawtoothRippleGauss_accept(FormFactorSawtoothRippleGauss self, INodeVisitor * visitor)\n"
-		"void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorSawtoothRippleGauss::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorSawtoothRippleGauss", _wrap_delete_FormFactorSawtoothRippleGauss, METH_O, "delete_FormFactorSawtoothRippleGauss(FormFactorSawtoothRippleGauss self)"},
@@ -75206,14 +75206,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSawtoothRippleLorentz_clone", _wrap_FormFactorSawtoothRippleLorentz_clone, METH_O, "\n"
 		"FormFactorSawtoothRippleLorentz_clone(FormFactorSawtoothRippleLorentz self) -> FormFactorSawtoothRippleLorentz\n"
-		"FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const final\n"
+		"FormFactorSawtoothRippleLorentz * FormFactorSawtoothRippleLorentz::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorSawtoothRippleLorentz_accept", _wrap_FormFactorSawtoothRippleLorentz_accept, METH_VARARGS, "\n"
 		"FormFactorSawtoothRippleLorentz_accept(FormFactorSawtoothRippleLorentz self, INodeVisitor * visitor)\n"
-		"void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorSawtoothRippleLorentz::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "delete_FormFactorSawtoothRippleLorentz", _wrap_delete_FormFactorSawtoothRippleLorentz, METH_O, "delete_FormFactorSawtoothRippleLorentz(FormFactorSawtoothRippleLorentz self)"},
@@ -75234,7 +75234,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTetrahedron_accept", _wrap_FormFactorTetrahedron_accept, METH_VARARGS, "\n"
 		"FormFactorTetrahedron_accept(FormFactorTetrahedron self, INodeVisitor * visitor)\n"
-		"void FormFactorTetrahedron::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorTetrahedron::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorTetrahedron_getBaseEdge", _wrap_FormFactorTetrahedron_getBaseEdge, METH_O, "\n"
@@ -75270,7 +75270,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedCube_accept", _wrap_FormFactorTruncatedCube_accept, METH_VARARGS, "\n"
 		"FormFactorTruncatedCube_accept(FormFactorTruncatedCube self, INodeVisitor * visitor)\n"
-		"void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorTruncatedCube::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorTruncatedCube_getLength", _wrap_FormFactorTruncatedCube_getLength, METH_O, "\n"
@@ -75301,7 +75301,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedSphere_accept", _wrap_FormFactorTruncatedSphere_accept, METH_VARARGS, "\n"
 		"FormFactorTruncatedSphere_accept(FormFactorTruncatedSphere self, INodeVisitor * visitor)\n"
-		"void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorTruncatedSphere::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorTruncatedSphere_getHeight", _wrap_FormFactorTruncatedSphere_getHeight, METH_O, "\n"
@@ -75321,14 +75321,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedSphere_radialExtension", _wrap_FormFactorTruncatedSphere_radialExtension, METH_O, "\n"
 		"FormFactorTruncatedSphere_radialExtension(FormFactorTruncatedSphere self) -> double\n"
-		"double FormFactorTruncatedSphere::radialExtension() const final\n"
+		"double FormFactorTruncatedSphere::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorTruncatedSphere_evaluate_for_q", _wrap_FormFactorTruncatedSphere_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorTruncatedSphere_evaluate_for_q(FormFactorTruncatedSphere self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorTruncatedSphere::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Complex form factor. \n"
 		"\n"
@@ -75351,7 +75351,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedSpheroid_accept", _wrap_FormFactorTruncatedSpheroid_accept, METH_VARARGS, "\n"
 		"FormFactorTruncatedSpheroid_accept(FormFactorTruncatedSpheroid self, INodeVisitor * visitor)\n"
-		"void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorTruncatedSpheroid::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorTruncatedSpheroid_getRadius", _wrap_FormFactorTruncatedSpheroid_getRadius, METH_O, "\n"
@@ -75376,14 +75376,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorTruncatedSpheroid_radialExtension", _wrap_FormFactorTruncatedSpheroid_radialExtension, METH_O, "\n"
 		"FormFactorTruncatedSpheroid_radialExtension(FormFactorTruncatedSpheroid self) -> double\n"
-		"double FormFactorTruncatedSpheroid::radialExtension() const final\n"
+		"double FormFactorTruncatedSpheroid::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorTruncatedSpheroid_evaluate_for_q", _wrap_FormFactorTruncatedSpheroid_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorTruncatedSpheroid_evaluate_for_q(FormFactorTruncatedSpheroid self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorTruncatedSpheroid::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75399,14 +75399,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorGaussSphere_clone", _wrap_FormFactorGaussSphere_clone, METH_O, "\n"
 		"FormFactorGaussSphere_clone(FormFactorGaussSphere self) -> FormFactorGaussSphere\n"
-		"FormFactorGaussSphere* FormFactorGaussSphere::clone() const final\n"
+		"FormFactorGaussSphere* FormFactorGaussSphere::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorGaussSphere_accept", _wrap_FormFactorGaussSphere_accept, METH_VARARGS, "\n"
 		"FormFactorGaussSphere_accept(FormFactorGaussSphere self, INodeVisitor * visitor)\n"
-		"void FormFactorGaussSphere::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorGaussSphere::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorGaussSphere_getMeanRadius", _wrap_FormFactorGaussSphere_getMeanRadius, METH_O, "\n"
@@ -75416,14 +75416,14 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorGaussSphere_radialExtension", _wrap_FormFactorGaussSphere_radialExtension, METH_O, "\n"
 		"FormFactorGaussSphere_radialExtension(FormFactorGaussSphere self) -> double\n"
-		"double FormFactorGaussSphere::radialExtension() const final\n"
+		"double FormFactorGaussSphere::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorGaussSphere_evaluate_for_q", _wrap_FormFactorGaussSphere_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorGaussSphere_evaluate_for_q(FormFactorGaussSphere self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorGaussSphere::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75446,19 +75446,19 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSphereGaussianRadius_accept", _wrap_FormFactorSphereGaussianRadius_accept, METH_VARARGS, "\n"
 		"FormFactorSphereGaussianRadius_accept(FormFactorSphereGaussianRadius self, INodeVisitor * visitor)\n"
-		"void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorSphereGaussianRadius::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorSphereGaussianRadius_radialExtension", _wrap_FormFactorSphereGaussianRadius_radialExtension, METH_O, "\n"
 		"FormFactorSphereGaussianRadius_radialExtension(FormFactorSphereGaussianRadius self) -> double\n"
-		"double FormFactorSphereGaussianRadius::radialExtension() const final\n"
+		"double FormFactorSphereGaussianRadius::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorSphereGaussianRadius_evaluate_for_q", _wrap_FormFactorSphereGaussianRadius_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorSphereGaussianRadius_evaluate_for_q(FormFactorSphereGaussianRadius self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorSphereGaussianRadius::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75474,26 +75474,26 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "FormFactorSphereLogNormalRadius_clone", _wrap_FormFactorSphereLogNormalRadius_clone, METH_O, "\n"
 		"FormFactorSphereLogNormalRadius_clone(FormFactorSphereLogNormalRadius self) -> FormFactorSphereLogNormalRadius\n"
-		"FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const final\n"
+		"FormFactorSphereLogNormalRadius * FormFactorSphereLogNormalRadius::clone() const override\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
 	 { "FormFactorSphereLogNormalRadius_accept", _wrap_FormFactorSphereLogNormalRadius_accept, METH_VARARGS, "\n"
 		"FormFactorSphereLogNormalRadius_accept(FormFactorSphereLogNormalRadius self, INodeVisitor * visitor)\n"
-		"void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const final\n"
+		"void FormFactorSphereLogNormalRadius::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "FormFactorSphereLogNormalRadius_radialExtension", _wrap_FormFactorSphereLogNormalRadius_radialExtension, METH_O, "\n"
 		"FormFactorSphereLogNormalRadius_radialExtension(FormFactorSphereLogNormalRadius self) -> double\n"
-		"double FormFactorSphereLogNormalRadius::radialExtension() const final\n"
+		"double FormFactorSphereLogNormalRadius::radialExtension() const override\n"
 		"\n"
 		"Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations \n"
 		"\n"
 		""},
 	 { "FormFactorSphereLogNormalRadius_evaluate_for_q", _wrap_FormFactorSphereLogNormalRadius_evaluate_for_q, METH_VARARGS, "\n"
 		"FormFactorSphereLogNormalRadius_evaluate_for_q(FormFactorSphereLogNormalRadius self, cvector_t q) -> complex_t\n"
-		"complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const final\n"
+		"complex_t FormFactorSphereLogNormalRadius::evaluate_for_q(cvector_t q) const override\n"
 		"\n"
 		"Returns scattering amplitude for complex scattering wavevector q=k_i-k_f. This method is public only for convenience of plotting form factors in Python. \n"
 		"\n"
@@ -75692,27 +75692,27 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "BasicLattice2D_accept", _wrap_BasicLattice2D_accept, METH_VARARGS, "\n"
 		"BasicLattice2D_accept(BasicLattice2D self, INodeVisitor * visitor)\n"
-		"void BasicLattice2D::accept(INodeVisitor *visitor) const final\n"
+		"void BasicLattice2D::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "BasicLattice2D_length1", _wrap_BasicLattice2D_length1, METH_O, "\n"
 		"BasicLattice2D_length1(BasicLattice2D self) -> double\n"
-		"virtual double BasicLattice2D::length1() const\n"
+		"double BasicLattice2D::length1() const override\n"
 		"\n"
 		""},
 	 { "BasicLattice2D_length2", _wrap_BasicLattice2D_length2, METH_O, "\n"
 		"BasicLattice2D_length2(BasicLattice2D self) -> double\n"
-		"virtual double BasicLattice2D::length2() const\n"
+		"double BasicLattice2D::length2() const override\n"
 		"\n"
 		""},
 	 { "BasicLattice2D_latticeAngle", _wrap_BasicLattice2D_latticeAngle, METH_O, "\n"
 		"BasicLattice2D_latticeAngle(BasicLattice2D self) -> double\n"
-		"virtual double BasicLattice2D::latticeAngle() const\n"
+		"double BasicLattice2D::latticeAngle() const override\n"
 		"\n"
 		""},
 	 { "BasicLattice2D_unitCellArea", _wrap_BasicLattice2D_unitCellArea, METH_O, "\n"
 		"BasicLattice2D_unitCellArea(BasicLattice2D self) -> double\n"
-		"double BasicLattice2D::unitCellArea() const\n"
+		"double BasicLattice2D::unitCellArea() const override\n"
 		"\n"
 		""},
 	 { "delete_BasicLattice2D", _wrap_delete_BasicLattice2D, METH_O, "delete_BasicLattice2D(BasicLattice2D self)"},
@@ -75730,27 +75730,27 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "SquareLattice2D_accept", _wrap_SquareLattice2D_accept, METH_VARARGS, "\n"
 		"SquareLattice2D_accept(SquareLattice2D self, INodeVisitor * visitor)\n"
-		"void SquareLattice2D::accept(INodeVisitor *visitor) const final\n"
+		"void SquareLattice2D::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "SquareLattice2D_length1", _wrap_SquareLattice2D_length1, METH_O, "\n"
 		"SquareLattice2D_length1(SquareLattice2D self) -> double\n"
-		"virtual double SquareLattice2D::length1() const\n"
+		"double SquareLattice2D::length1() const override\n"
 		"\n"
 		""},
 	 { "SquareLattice2D_length2", _wrap_SquareLattice2D_length2, METH_O, "\n"
 		"SquareLattice2D_length2(SquareLattice2D self) -> double\n"
-		"virtual double SquareLattice2D::length2() const\n"
+		"double SquareLattice2D::length2() const override\n"
 		"\n"
 		""},
 	 { "SquareLattice2D_latticeAngle", _wrap_SquareLattice2D_latticeAngle, METH_O, "\n"
 		"SquareLattice2D_latticeAngle(SquareLattice2D self) -> double\n"
-		"double SquareLattice2D::latticeAngle() const\n"
+		"double SquareLattice2D::latticeAngle() const override\n"
 		"\n"
 		""},
 	 { "SquareLattice2D_unitCellArea", _wrap_SquareLattice2D_unitCellArea, METH_O, "\n"
 		"SquareLattice2D_unitCellArea(SquareLattice2D self) -> double\n"
-		"double SquareLattice2D::unitCellArea() const\n"
+		"double SquareLattice2D::unitCellArea() const override\n"
 		"\n"
 		""},
 	 { "delete_SquareLattice2D", _wrap_delete_SquareLattice2D, METH_O, "delete_SquareLattice2D(SquareLattice2D self)"},
@@ -75768,27 +75768,27 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "HexagonalLattice2D_accept", _wrap_HexagonalLattice2D_accept, METH_VARARGS, "\n"
 		"HexagonalLattice2D_accept(HexagonalLattice2D self, INodeVisitor * visitor)\n"
-		"void HexagonalLattice2D::accept(INodeVisitor *visitor) const final\n"
+		"void HexagonalLattice2D::accept(INodeVisitor *visitor) const override\n"
 		"\n"
 		""},
 	 { "HexagonalLattice2D_length1", _wrap_HexagonalLattice2D_length1, METH_O, "\n"
 		"HexagonalLattice2D_length1(HexagonalLattice2D self) -> double\n"
-		"virtual double HexagonalLattice2D::length1() const\n"
+		"double HexagonalLattice2D::length1() const override\n"
 		"\n"
 		""},
 	 { "HexagonalLattice2D_length2", _wrap_HexagonalLattice2D_length2, METH_O, "\n"
 		"HexagonalLattice2D_length2(HexagonalLattice2D self) -> double\n"
-		"virtual double HexagonalLattice2D::length2() const\n"
+		"double HexagonalLattice2D::length2() const override\n"
 		"\n"
 		""},
 	 { "HexagonalLattice2D_latticeAngle", _wrap_HexagonalLattice2D_latticeAngle, METH_O, "\n"
 		"HexagonalLattice2D_latticeAngle(HexagonalLattice2D self) -> double\n"
-		"double HexagonalLattice2D::latticeAngle() const\n"
+		"double HexagonalLattice2D::latticeAngle() const override\n"
 		"\n"
 		""},
 	 { "HexagonalLattice2D_unitCellArea", _wrap_HexagonalLattice2D_unitCellArea, METH_O, "\n"
 		"HexagonalLattice2D_unitCellArea(HexagonalLattice2D self) -> double\n"
-		"double HexagonalLattice2D::unitCellArea() const\n"
+		"double HexagonalLattice2D::unitCellArea() const override\n"
 		"\n"
 		""},
 	 { "delete_HexagonalLattice2D", _wrap_delete_HexagonalLattice2D, METH_O, "delete_HexagonalLattice2D(HexagonalLattice2D self)"},