diff --git a/Core/Background/ConstantBackground.h b/Core/Background/ConstantBackground.h
index 2376215d90d74486ef9b644a022ae85b36710214..298599e21a2982ddb70f808d2f55ba9b5d0d8297 100644
--- a/Core/Background/ConstantBackground.h
+++ b/Core/Background/ConstantBackground.h
@@ -33,8 +33,6 @@ public:
 
     double backgroundValue() const { return m_background_value; }
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double addBackground(double intensity) const override;
 
 private:
diff --git a/Core/Background/PoissonNoiseBackground.h b/Core/Background/PoissonNoiseBackground.h
index 543b20ca589adbe7839e75af8186e8b9a85f2965..89e61298a75398f447b2822d304898499a6d80aa 100644
--- a/Core/Background/PoissonNoiseBackground.h
+++ b/Core/Background/PoissonNoiseBackground.h
@@ -29,8 +29,6 @@ public:
     PoissonNoiseBackground();
     PoissonNoiseBackground* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double addBackground(double intensity) const override;
 };
 
diff --git a/Core/Simulation/DepthProbeSimulation.h b/Core/Simulation/DepthProbeSimulation.h
index 5e7302d8966655965dc283d140d25859417bf8cb..2bb106e2cda7abc2ddd50609cf5df589f85369d1 100644
--- a/Core/Simulation/DepthProbeSimulation.h
+++ b/Core/Simulation/DepthProbeSimulation.h
@@ -34,8 +34,6 @@ public:
     DepthProbeSimulation();
     ~DepthProbeSimulation() override;
 
-    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
     SimulationResult result() const override;
diff --git a/Core/Simulation/GISASSimulation.h b/Core/Simulation/GISASSimulation.h
index 873144be85b20311d8ce0bb2b38ef5d6f07397ff..f124b7706cce810709b19bca291ac7419c2742c9 100644
--- a/Core/Simulation/GISASSimulation.h
+++ b/Core/Simulation/GISASSimulation.h
@@ -31,8 +31,6 @@ public:
     GISASSimulation();
     ~GISASSimulation() override = default;
 
-    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
     SimulationResult result() const override;
diff --git a/Core/Simulation/OffSpecularSimulation.h b/Core/Simulation/OffSpecularSimulation.h
index 5a686099c6af0e0e007acbca338058e94a6fa65f..9f7ee8cf0fe877c325f32cee02b40e68535e322c 100644
--- a/Core/Simulation/OffSpecularSimulation.h
+++ b/Core/Simulation/OffSpecularSimulation.h
@@ -30,8 +30,6 @@ public:
     OffSpecularSimulation();
     ~OffSpecularSimulation() override = default;
 
-    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
     SimulationResult result() const override;
diff --git a/Core/Simulation/SpecularSimulation.h b/Core/Simulation/SpecularSimulation.h
index 21c49082a602d5ee4d1f7d380cb65be83bd8c7d6..5c7c1c15b3d610ff826c63d04ce6d2d35bfcc8bb 100644
--- a/Core/Simulation/SpecularSimulation.h
+++ b/Core/Simulation/SpecularSimulation.h
@@ -38,8 +38,6 @@ public:
     //! Put into a clean state for running a simulation.
     void prepareSimulation() override;
 
-    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
     //! zeros.
diff --git a/Device/Beam/Beam.h b/Device/Beam/Beam.h
index fc43ab9e790e4b621b658e95902d80878d66f368..a09f52cd1d3508faad077b8ce1d034b9a87f6863 100644
--- a/Device/Beam/Beam.h
+++ b/Device/Beam/Beam.h
@@ -41,7 +41,6 @@ public:
 
     static Beam horizontalBeam();
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     std::vector<const INode*> getChildren() const override;
 
     //! Returns the beam intensity in neutrons/sec
diff --git a/Device/Beam/FootprintGauss.h b/Device/Beam/FootprintGauss.h
index 867b0f128decc0eb6bcb7f0c1d70a32ace819700..bd67712b2d2e2ca4c527beee259796fa11e03605 100644
--- a/Device/Beam/FootprintGauss.h
+++ b/Device/Beam/FootprintGauss.h
@@ -30,8 +30,6 @@ public:
     FootprintGauss(std::vector<double> P);
     FootprintGauss(double width_ratio);
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     FootprintGauss* clone() const override;
 
     //! Calculate footprint correction coefficient from the beam incident angle _alpha_.
diff --git a/Device/Beam/FootprintSquare.h b/Device/Beam/FootprintSquare.h
index efac4d5d01d5dfc15782233243f6d9ca3bf8ec20..ae51718dcdf9c6eadc4a433c0874b6381a15d482 100644
--- a/Device/Beam/FootprintSquare.h
+++ b/Device/Beam/FootprintSquare.h
@@ -28,8 +28,6 @@ public:
     FootprintSquare(std::vector<double> P);
     FootprintSquare(double width_ratio);
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     FootprintSquare* clone() const override;
 
     //! Calculate footprint correction coefficient from the beam incident angle _alpha_.
diff --git a/Device/Detector/RectangularDetector.h b/Device/Detector/RectangularDetector.h
index b71c0ac9650c8f17c0b519c76cd625362f66ed56..fbe4f3552d2cf9378e1a389eefe9e3776742f775 100644
--- a/Device/Detector/RectangularDetector.h
+++ b/Device/Detector/RectangularDetector.h
@@ -47,8 +47,6 @@ public:
 
     RectangularDetector* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     ~RectangularDetector() override;
 
     void setDetectorNormal(const Direction& direction) override;
diff --git a/Device/Detector/SpecularDetector1D.h b/Device/Detector/SpecularDetector1D.h
index e77e0b0f6563ab84a1f345587295b01ccff746bc..4566131d595435ef9d5658dca085f59bdbcb9912 100644
--- a/Device/Detector/SpecularDetector1D.h
+++ b/Device/Detector/SpecularDetector1D.h
@@ -38,8 +38,6 @@ public:
 
     SpecularDetector1D* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     //! Returns detector masks container.
     const DetectorMask* detectorMask() const override { return nullptr; }
 
diff --git a/Device/Detector/SphericalDetector.h b/Device/Detector/SphericalDetector.h
index 57441a39dd671ecc4360b94f8beebec80bd927ec..c28331a99f354710947dc7f872d716486f9c7772 100644
--- a/Device/Detector/SphericalDetector.h
+++ b/Device/Detector/SphericalDetector.h
@@ -50,8 +50,6 @@ public:
 
     SphericalDetector* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     ~SphericalDetector() override = default;
 
     //! return default axes units
diff --git a/Device/Instrument/Instrument.h b/Device/Instrument/Instrument.h
index a7b9858cc2322f1cecaad46a0ae7e1d1c618e4e6..a87aa88887ee5d139535e06718947ddebdf2212e 100644
--- a/Device/Instrument/Instrument.h
+++ b/Device/Instrument/Instrument.h
@@ -39,8 +39,6 @@ public:
 
     ~Instrument() override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     Beam& beam() { return *m_beam; }
     const Beam& beam() const { return *m_beam; }
     void setBeam(const Beam& beam);
diff --git a/Device/Pol/PolFilter.h b/Device/Pol/PolFilter.h
index b6527c3bc8e3da208856d902caebc758353d9ad3..8ef8c9c4f2f4b3e21571d4626f3f1dda8014ca31 100644
--- a/Device/Pol/PolFilter.h
+++ b/Device/Pol/PolFilter.h
@@ -49,8 +49,6 @@ public:
     double polEfficiency() const; //!< will always return positive value
     double totalTransmission() const;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
 private:
     //! Verify if the given analyzer properties are physical
     bool check(R3 direction, double efficiency, double total_transmission) const;
diff --git a/Device/Resolution/ConvolutionDetectorResolution.h b/Device/Resolution/ConvolutionDetectorResolution.h
index 3281a1ac2e1346ebf58dbaf1e114536d615601b8..60108da9e76d8c0fcf2a49bed8146632bbd7f40d 100644
--- a/Device/Resolution/ConvolutionDetectorResolution.h
+++ b/Device/Resolution/ConvolutionDetectorResolution.h
@@ -48,9 +48,6 @@ public:
     //! Convolve given intensities with the encapsulated resolution.
     void applyDetectorResolution(OutputData<double>* p_intensity_map) const override;
 
-
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     const IResolutionFunction2D* getResolutionFunction2D() const;
 
     std::vector<const INode*> getChildren() const override;
diff --git a/Device/Resolution/ResolutionFunction2DGaussian.h b/Device/Resolution/ResolutionFunction2DGaussian.h
index bb84a8220cfb929504de7d38975ff138933f62f5..db483d8f9ff5f91f16c5f093826010e4865b04dd 100644
--- a/Device/Resolution/ResolutionFunction2DGaussian.h
+++ b/Device/Resolution/ResolutionFunction2DGaussian.h
@@ -31,8 +31,6 @@ public:
         return new ResolutionFunction2DGaussian(m_sigma_x, m_sigma_y);
     }
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double evaluateCDF(double x, double y) const override;
 
     double getSigmaX() const { return m_sigma_x; }
diff --git a/Param/Distrib/Distributions.h b/Param/Distrib/Distributions.h
index 896b7ed380c08604e65c51e71da8e90b507ec925..343636797188068d47f9dd8e16c26f85229174c4 100644
--- a/Param/Distrib/Distributions.h
+++ b/Param/Distrib/Distributions.h
@@ -108,8 +108,6 @@ public:
 
     bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
 #ifndef SWIG
     std::string pythonConstructor(const std::string& units) const override;
 #endif
@@ -147,8 +145,6 @@ public:
 
     bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
 #ifndef SWIG
     std::string pythonConstructor(const std::string& units) const override;
 #endif
@@ -189,8 +185,6 @@ public:
 
     bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
 #ifndef SWIG
     std::string pythonConstructor(const std::string& units) const override;
 #endif
@@ -231,8 +225,6 @@ public:
 
     bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     std::string pythonConstructor(const std::string& units) const override;
 
 private:
@@ -270,8 +262,6 @@ public:
 
     bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
 #ifndef SWIG
     std::string pythonConstructor(const std::string& units) const override;
 #endif
@@ -314,8 +304,6 @@ public:
 
     bool isDelta() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
 #ifndef SWIG
     std::string pythonConstructor(const std::string& units) const override;
 #endif
diff --git a/Param/Node/INode.h b/Param/Node/INode.h
index f68756e324682d5e9d0b4d2652261ccb106fea71..0c0ab4cb66d31b15bb83a9a57fa8408e9f696b05 100644
--- a/Param/Node/INode.h
+++ b/Param/Node/INode.h
@@ -16,7 +16,6 @@
 #ifndef BORNAGAIN_PARAM_NODE_INODE_H
 #define BORNAGAIN_PARAM_NODE_INODE_H
 
-#include "Param/Node/INodeVisitor.h" // not forward declared because used by all children
 #include <limits>
 #include <memory>
 #include <string>
@@ -56,9 +55,6 @@ public:
 
     virtual ~INode() = default;
 
-    //! Calls the INodeVisitor's visit method
-    virtual void accept(INodeVisitor* visitor) const = 0;
-
     //! Returns a vector of children
     virtual std::vector<const INode*> getChildren() const;
 
diff --git a/Param/Node/INodeVisitor.h b/Param/Node/INodeVisitor.h
deleted file mode 100644
index 9093e15ade631fc84e4db35f9302127c57600585..0000000000000000000000000000000000000000
--- a/Param/Node/INodeVisitor.h
+++ /dev/null
@@ -1,275 +0,0 @@
-//  ************************************************************************************************
-//
-//  BornAgain: simulate and fit reflection and scattering
-//
-//! @file      Param/Node/INodeVisitor.h
-//! @brief     Defines interface class INodeVisitor.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-//  ************************************************************************************************
-
-#ifndef USER_API
-#ifndef BORNAGAIN_PARAM_NODE_INODEVISITOR_H
-#define BORNAGAIN_PARAM_NODE_INODEVISITOR_H
-
-class BasicLattice2D;
-class Beam;
-class ConstantBackground;
-class ConvolutionDetectorResolution;
-class Crystal;
-class DistributionCosine;
-class DistributionGate;
-class DistributionGaussian;
-class DistributionLogNormal;
-class DistributionLorentz;
-class DistributionTrapezoid;
-class FTDecayFunction1DCauchy;
-class FTDecayFunction1DGauss;
-class FTDecayFunction1DTriangle;
-class FTDecayFunction1DVoigt;
-class FTDecayFunction2DCauchy;
-class FTDecayFunction2DGauss;
-class FTDecayFunction2DVoigt;
-class FTDistribution1DCauchy;
-class FTDistribution1DCosine;
-class FTDistribution1DGate;
-class FTDistribution1DGauss;
-class FTDistribution1DTriangle;
-class FTDistribution1DVoigt;
-class FTDistribution2DCauchy;
-class FTDistribution2DCone;
-class FTDistribution2DGate;
-class FTDistribution2DGauss;
-class FTDistribution2DVoigt;
-class FootprintGauss;
-class FootprintSquare;
-class FormFactorAnisoPyramid;
-class FormFactorBarGauss;
-class FormFactorBarLorentz;
-class FormFactorBox;
-class FormFactorCantellatedCube;
-class FormFactorCone6;
-class FormFactorCone;
-class FormFactorCoreShell;
-class FormFactorCosineRippleBox;
-class FormFactorCosineRippleGauss;
-class FormFactorCosineRippleLorentz;
-class FormFactorCrystal;
-class FormFactorCuboctahedron;
-class FormFactorCylinder;
-class FormFactorDecoratorMaterial;
-class FormFactorDecoratorPositionFactor;
-class FormFactorDecoratorRotation;
-class FormFactorDodecahedron;
-class FormFactorEllipsoidalCylinder;
-class FormFactorFullSphere;
-class FormFactorFullSpheroid;
-class FormFactorGaussSphere;
-class FormFactorHemiEllipsoid;
-class FormFactorHollowSphere;
-class FormFactorIcosahedron;
-class FormFactorLongBoxGauss;
-class FormFactorLongBoxLorentz;
-class FormFactorPrism3;
-class FormFactorPrism6;
-class FormFactorPyramid;
-class FormFactorSawtoothRippleBox;
-class FormFactorSawtoothRippleGauss;
-class FormFactorSawtoothRippleLorentz;
-class FormFactorSphereGaussianRadius;
-class FormFactorSphereLogNormalRadius;
-class FormFactorTetrahedron;
-class FormFactorTruncatedCube;
-class FormFactorTruncatedSphere;
-class FormFactorTruncatedSpheroid;
-class FormFactorWeighted;
-class GISASSimulation;
-class HexagonalLattice2D;
-class IBornFF;
-class IClusteredParticles;
-class IFormFactor;
-class IFormFactorDecorator;
-class IInterference;
-class INode;
-class IParticle;
-class IPeakShape;
-class IRotation;
-class ISampleNode;
-class IdentityRotation;
-class Instrument;
-class Interference1DLattice;
-class Interference2DLattice;
-class Interference2DParaCrystal;
-class Interference2DSuperLattice;
-class Interference3DLattice;
-class InterferenceFinite2DLattice;
-class InterferenceFinite3DLattice;
-class InterferenceHardDisk;
-class InterferenceNone;
-class InterferenceRadialParaCrystal;
-class InterferenceTwin;
-class Layer;
-class LayerInterface;
-class LayerRoughness;
-class MesoCrystal;
-class MultiLayer;
-class OffSpecularSimulation;
-class Particle;
-class ParticleComposition;
-class ParticleCoreShell;
-class ParticleLayout;
-class PoissonNoiseBackground;
-class RectangularDetector;
-class ResolutionFunction2DGaussian;
-class RotationEuler;
-class RotationX;
-class RotationY;
-class RotationZ;
-class SpecularDetector1D;
-class SpecularSimulation;
-class SphericalDetector;
-class SquareLattice2D;
-
-//! Visitor interface to visit ISampleNode objects.
-
-//! From visitor pattern to achieve double dispatch.
-
-class INodeVisitor {
-public:
-    INodeVisitor() {}
-    virtual ~INodeVisitor() = default;
-
-    virtual void visit(const BasicLattice2D*) {}
-    virtual void visit(const Beam*) {}
-    virtual void visit(const ConstantBackground*) {}
-    virtual void visit(const ConvolutionDetectorResolution*) {}
-    virtual void visit(const Crystal*) {}
-    virtual void visit(const DistributionCosine*) {}
-    virtual void visit(const DistributionGate*) {}
-    virtual void visit(const DistributionGaussian*) {}
-    virtual void visit(const DistributionLogNormal*) {}
-    virtual void visit(const DistributionLorentz*) {}
-    virtual void visit(const DistributionTrapezoid*) {}
-    virtual void visit(const FTDecayFunction1DCauchy*) {}
-    virtual void visit(const FTDecayFunction1DGauss*) {}
-    virtual void visit(const FTDecayFunction1DTriangle*) {}
-    virtual void visit(const FTDecayFunction1DVoigt*) {}
-    virtual void visit(const FTDecayFunction2DCauchy*) {}
-    virtual void visit(const FTDecayFunction2DGauss*) {}
-    virtual void visit(const FTDecayFunction2DVoigt*) {}
-    virtual void visit(const FTDistribution1DCauchy*) {}
-    virtual void visit(const FTDistribution1DCosine*) {}
-    virtual void visit(const FTDistribution1DGate*) {}
-    virtual void visit(const FTDistribution1DGauss*) {}
-    virtual void visit(const FTDistribution1DTriangle*) {}
-    virtual void visit(const FTDistribution1DVoigt*) {}
-    virtual void visit(const FTDistribution2DCauchy*) {}
-    virtual void visit(const FTDistribution2DCone*) {}
-    virtual void visit(const FTDistribution2DGate*) {}
-    virtual void visit(const FTDistribution2DGauss*) {}
-    virtual void visit(const FTDistribution2DVoigt*) {}
-    virtual void visit(const FootprintGauss*) {}
-    virtual void visit(const FootprintSquare*) {}
-    virtual void visit(const FormFactorAnisoPyramid*) {}
-    virtual void visit(const FormFactorBarGauss*) {}
-    virtual void visit(const FormFactorBarLorentz*) {}
-    virtual void visit(const FormFactorBox*) {}
-    virtual void visit(const FormFactorCantellatedCube*) {}
-    virtual void visit(const FormFactorCone*) {}
-    virtual void visit(const FormFactorCone6*) {}
-    virtual void visit(const FormFactorCoreShell*) {}
-    virtual void visit(const FormFactorCosineRippleBox*) {}
-    virtual void visit(const FormFactorCosineRippleGauss*) {}
-    virtual void visit(const FormFactorCosineRippleLorentz*) {}
-    virtual void visit(const FormFactorCrystal*) {}
-    virtual void visit(const FormFactorCuboctahedron*) {}
-    virtual void visit(const FormFactorCylinder*) {}
-    virtual void visit(const FormFactorDecoratorMaterial*) {}
-    virtual void visit(const FormFactorDecoratorPositionFactor*) {}
-    virtual void visit(const FormFactorDecoratorRotation*) {}
-    virtual void visit(const FormFactorDodecahedron*) {}
-    virtual void visit(const FormFactorEllipsoidalCylinder*) {}
-    virtual void visit(const FormFactorFullSphere*) {}
-    virtual void visit(const FormFactorFullSpheroid*) {}
-    virtual void visit(const FormFactorGaussSphere*) {}
-    virtual void visit(const FormFactorHemiEllipsoid*) {}
-    virtual void visit(const FormFactorHollowSphere*) {}
-    virtual void visit(const FormFactorIcosahedron*) {}
-    virtual void visit(const FormFactorLongBoxGauss*) {}
-    virtual void visit(const FormFactorLongBoxLorentz*) {}
-    virtual void visit(const FormFactorPrism3*) {}
-    virtual void visit(const FormFactorPrism6*) {}
-    virtual void visit(const FormFactorPyramid*) {}
-    virtual void visit(const FormFactorSawtoothRippleBox*) {}
-    virtual void visit(const FormFactorSawtoothRippleGauss*) {}
-    virtual void visit(const FormFactorSawtoothRippleLorentz*) {}
-    virtual void visit(const FormFactorSphereGaussianRadius*) {}
-    virtual void visit(const FormFactorSphereLogNormalRadius*) {}
-    virtual void visit(const FormFactorTetrahedron*) {}
-    virtual void visit(const FormFactorTruncatedCube*) {}
-    virtual void visit(const FormFactorTruncatedSphere*) {}
-    virtual void visit(const FormFactorTruncatedSpheroid*) {}
-    virtual void visit(const FormFactorWeighted*) {}
-    virtual void visit(const GISASSimulation*) {}
-    virtual void visit(const HexagonalLattice2D*) {}
-    virtual void visit(const IBornFF*) {}
-    virtual void visit(const IClusteredParticles*) {}
-    virtual void visit(const IFormFactor*) {}
-    virtual void visit(const IFormFactorDecorator*) {}
-    virtual void visit(const IInterference*) {}
-    virtual void visit(const INode*) {}
-    virtual void visit(const IParticle*) {}
-    virtual void visit(const IPeakShape*) {}
-    virtual void visit(const IRotation*) {}
-    virtual void visit(const ISampleNode*) {}
-    virtual void visit(const IdentityRotation*) {}
-    virtual void visit(const Instrument*) {}
-    virtual void visit(const Interference1DLattice*) {}
-    virtual void visit(const Interference2DLattice*) {}
-    virtual void visit(const Interference2DParaCrystal*) {}
-    virtual void visit(const Interference2DSuperLattice*) {}
-    virtual void visit(const Interference3DLattice*) {}
-    virtual void visit(const InterferenceFinite2DLattice*) {}
-    virtual void visit(const InterferenceFinite3DLattice*) {}
-    virtual void visit(const InterferenceHardDisk*) {}
-    virtual void visit(const InterferenceNone*) {}
-    virtual void visit(const InterferenceRadialParaCrystal*) {}
-    virtual void visit(const InterferenceTwin*) {}
-    virtual void visit(const Layer*) {}
-    virtual void visit(const LayerInterface*) {}
-    virtual void visit(const LayerRoughness*) {}
-    virtual void visit(const MesoCrystal*) {}
-    virtual void visit(const MultiLayer*) {}
-    virtual void visit(const OffSpecularSimulation*) {}
-    virtual void visit(const Particle*) {}
-    virtual void visit(const ParticleComposition*) {}
-    virtual void visit(const ParticleCoreShell*) {}
-    virtual void visit(const ParticleLayout*) {}
-    virtual void visit(const PoissonNoiseBackground*) {}
-    virtual void visit(const RectangularDetector*) {}
-    virtual void visit(const ResolutionFunction2DGaussian*) {}
-    virtual void visit(const RotationEuler*) {}
-    virtual void visit(const RotationX*) {}
-    virtual void visit(const RotationY*) {}
-    virtual void visit(const RotationZ*) {}
-    virtual void visit(const SpecularDetector1D*) {}
-    virtual void visit(const SpecularSimulation*) {}
-    virtual void visit(const SphericalDetector*) {}
-    virtual void visit(const SquareLattice2D*) {}
-
-    //! Returns depth of the visitor in the composite hierarchy
-    int depth() const { return m_depth; }
-
-    //! Sets depth  of the visitor in the composite hierarchy
-    void setDepth(int depth) { m_depth = depth; }
-
-private:
-    int m_depth{0};
-};
-
-#endif // BORNAGAIN_PARAM_NODE_INODEVISITOR_H
-#endif // USER_API
diff --git a/Sample/Aggregate/Interference1DLattice.h b/Sample/Aggregate/Interference1DLattice.h
index 4b56c1f1fb3843b57b589a653d00bd20729d322c..ea1209edfbff4a2d899e5632c74a72c66ebc24c8 100644
--- a/Sample/Aggregate/Interference1DLattice.h
+++ b/Sample/Aggregate/Interference1DLattice.h
@@ -32,8 +32,6 @@ public:
 
     Interference1DLattice* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     void setDecayFunction(const IFTDecayFunction1D& decay);
 
     double getLength() const { return m_length; }
diff --git a/Sample/Aggregate/Interference2DLattice.h b/Sample/Aggregate/Interference2DLattice.h
index f05b2cbd163b0870476429d559f2ba5bba2fef7e..05c21b3a6fef3933c92bac95b66e1d90c93d3d35 100644
--- a/Sample/Aggregate/Interference2DLattice.h
+++ b/Sample/Aggregate/Interference2DLattice.h
@@ -33,8 +33,6 @@ public:
 
     Interference2DLattice* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     void setDecayFunction(const IFTDecayFunction2D& decay);
 
     void setIntegrationOverXi(bool integrate_xi);
diff --git a/Sample/Aggregate/Interference2DParaCrystal.h b/Sample/Aggregate/Interference2DParaCrystal.h
index 9f272df8622a7b43de739093b75d081ed6d973b1..1a3374be92a446236f3cc5da6450903ffd1333f5 100644
--- a/Sample/Aggregate/Interference2DParaCrystal.h
+++ b/Sample/Aggregate/Interference2DParaCrystal.h
@@ -38,8 +38,6 @@ public:
 
     Interference2DParaCrystal* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     void setDomainSizes(double size_1, double size_2);
 
     void setProbabilityDistributions(const IFTDistribution2D& pdf_1,
diff --git a/Sample/Aggregate/Interference2DSuperLattice.h b/Sample/Aggregate/Interference2DSuperLattice.h
index e0793cdfc492e1a3f186fc36372b842063781ab0..fda8ef9a80b06197c24e78660d957545b3fd47f5 100644
--- a/Sample/Aggregate/Interference2DSuperLattice.h
+++ b/Sample/Aggregate/Interference2DSuperLattice.h
@@ -34,8 +34,6 @@ public:
 
     Interference2DSuperLattice* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     void setSubstructureIFF(const IInterference& sub_iff);
     const IInterference& substructureIFF() const;
 
diff --git a/Sample/Aggregate/Interference3DLattice.h b/Sample/Aggregate/Interference3DLattice.h
index 0176f6c4e42a9aa1fe9c13fee4beb36a0563ba87..06edd0aaa6627d0b96fb16e5bd87a344f9575946 100644
--- a/Sample/Aggregate/Interference3DLattice.h
+++ b/Sample/Aggregate/Interference3DLattice.h
@@ -33,8 +33,6 @@ public:
 
     Interference3DLattice* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     void setPeakShape(const IPeakShape& peak_shape);
 
     const Lattice3D& lattice() const;
diff --git a/Sample/Aggregate/InterferenceFinite2DLattice.h b/Sample/Aggregate/InterferenceFinite2DLattice.h
index fe6a52b055c92d9cab550a148542141d7525558e..42ed49c8b0f70eaa486284da173762fd19b4b7da 100644
--- a/Sample/Aggregate/InterferenceFinite2DLattice.h
+++ b/Sample/Aggregate/InterferenceFinite2DLattice.h
@@ -31,8 +31,6 @@ public:
 
     InterferenceFinite2DLattice* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     unsigned numberUnitCells1() const { return m_N_1; }
     unsigned numberUnitCells2() const { return m_N_2; }
 
diff --git a/Sample/Aggregate/InterferenceFinite3DLattice.h b/Sample/Aggregate/InterferenceFinite3DLattice.h
index 511c5fab16bb5470f377b034f2e1a83f2660d66c..4e8568df696305a4c84b7accec6de32d0d83652a 100644
--- a/Sample/Aggregate/InterferenceFinite3DLattice.h
+++ b/Sample/Aggregate/InterferenceFinite3DLattice.h
@@ -31,8 +31,6 @@ public:
 
     InterferenceFinite3DLattice* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     unsigned numberUnitCells1() const { return m_N_1; }
     unsigned numberUnitCells2() const { return m_N_2; }
     unsigned numberUnitCells3() const { return m_N_3; }
diff --git a/Sample/Aggregate/InterferenceHardDisk.h b/Sample/Aggregate/InterferenceHardDisk.h
index e691e202f3b8d0e080e2a21bef3fd628dc24648b..56382472f7f9608d6d8a3ce87bc260e626dd148a 100644
--- a/Sample/Aggregate/InterferenceHardDisk.h
+++ b/Sample/Aggregate/InterferenceHardDisk.h
@@ -34,8 +34,6 @@ public:
 
     InterferenceHardDisk* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double getParticleDensity() const override;
 
     double radius() const;
diff --git a/Sample/Aggregate/InterferenceNone.h b/Sample/Aggregate/InterferenceNone.h
index 2bc0e89a124753259a9e8e95b76f4c055a31a2a5..5fbb53d300cb06d604c1963d75efd6ab219e5579 100644
--- a/Sample/Aggregate/InterferenceNone.h
+++ b/Sample/Aggregate/InterferenceNone.h
@@ -29,8 +29,6 @@ public:
 
     InterferenceNone* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
 private:
     double iff_without_dw(R3 q) const override;
 };
diff --git a/Sample/Aggregate/InterferenceRadialParaCrystal.h b/Sample/Aggregate/InterferenceRadialParaCrystal.h
index e221af9cf537f589f7b4b9994379cae8d6a3f8e6..ef690861f0e3b2fb62d5922773ca49d709ac21ee 100644
--- a/Sample/Aggregate/InterferenceRadialParaCrystal.h
+++ b/Sample/Aggregate/InterferenceRadialParaCrystal.h
@@ -31,8 +31,6 @@ public:
     InterferenceRadialParaCrystal(double peak_distance, double damping_length);
     InterferenceRadialParaCrystal* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     void setKappa(double kappa);
     double kappa() const;
 
diff --git a/Sample/Aggregate/InterferenceTwin.h b/Sample/Aggregate/InterferenceTwin.h
index 3cbc58900e7632daac8b8198b8ce649a5afa39fc..58d6640319af6cf0aeaf4ba09d51108e018feff6 100644
--- a/Sample/Aggregate/InterferenceTwin.h
+++ b/Sample/Aggregate/InterferenceTwin.h
@@ -30,8 +30,6 @@ public:
 
     InterferenceTwin* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     R3 direction() const;
     double meanDistance() const;
     double stdDev() const;
diff --git a/Sample/Aggregate/ParticleLayout.h b/Sample/Aggregate/ParticleLayout.h
index dae277e9036b982720e1dcc697e59c90b9c5496f..3cb75d14e10ee73c46e14b6115c3c2e3d12c99c6 100644
--- a/Sample/Aggregate/ParticleLayout.h
+++ b/Sample/Aggregate/ParticleLayout.h
@@ -38,8 +38,6 @@ public:
 
     ParticleLayout* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     void addParticle(const IParticle& particle, double abundance = -1.0, R3 position = {},
                      const IRotation& rotation = IdentityRotation());
 
diff --git a/Sample/Correlations/FTDecay1D.h b/Sample/Correlations/FTDecay1D.h
index eaa0aec45366ce531ad14453a17ecfbff570e9a8..d8080247fa620e58a817620eafcefa24a72ff539 100644
--- a/Sample/Correlations/FTDecay1D.h
+++ b/Sample/Correlations/FTDecay1D.h
@@ -56,7 +56,6 @@ public:
     FTDecayFunction1DCauchy(double decay_length);
 
     FTDecayFunction1DCauchy* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
 };
 
@@ -72,7 +71,6 @@ public:
     FTDecayFunction1DGauss(double decay_length);
 
     FTDecayFunction1DGauss* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
 };
 
@@ -88,7 +86,6 @@ public:
     FTDecayFunction1DTriangle(double decay_length);
 
     FTDecayFunction1DTriangle* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
 };
 
@@ -104,7 +101,6 @@ public:
     FTDecayFunction1DVoigt(double decay_length, double eta);
 
     FTDecayFunction1DVoigt* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
     double eta() const { return m_eta; }
 #ifndef SWIG
diff --git a/Sample/Correlations/FTDecay2D.h b/Sample/Correlations/FTDecay2D.h
index 906f0a2fa2d46722d1090f655431b08d3e717c68..8772419d8902406018bbefebbc718e8408bb1103 100644
--- a/Sample/Correlations/FTDecay2D.h
+++ b/Sample/Correlations/FTDecay2D.h
@@ -73,7 +73,6 @@ public:
     FTDecayFunction2DCauchy(double decay_length_x, double decay_length_y, double gamma);
 
     FTDecayFunction2DCauchy* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double qx, double qy) const override;
 };
 
@@ -90,7 +89,6 @@ public:
     FTDecayFunction2DGauss(double decay_length_x, double decay_length_y, double gamma);
 
     FTDecayFunction2DGauss* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double qx, double qy) const override;
 };
 
@@ -106,7 +104,6 @@ public:
     FTDecayFunction2DVoigt(double decay_length_x, double decay_length_y, double gamma, double eta);
 
     FTDecayFunction2DVoigt* 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
diff --git a/Sample/Correlations/FTDistributions1D.h b/Sample/Correlations/FTDistributions1D.h
index 566e6ca512859788a75320f1102a594ab9b0f22b..ab97caf83892d56f85a1b058d6b96417538ef267 100644
--- a/Sample/Correlations/FTDistributions1D.h
+++ b/Sample/Correlations/FTDistributions1D.h
@@ -64,7 +64,6 @@ public:
     FTDistribution1DCauchy(double omega);
 
     FTDistribution1DCauchy* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
     double qSecondDerivative() const override;
 #ifndef SWIG
@@ -85,7 +84,6 @@ public:
     FTDistribution1DGauss(double omega);
 
     FTDistribution1DGauss* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
     double qSecondDerivative() const override;
 #ifndef SWIG
@@ -106,7 +104,6 @@ public:
     FTDistribution1DGate(double omega);
 
     FTDistribution1DGate* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
     double qSecondDerivative() const override;
 #ifndef SWIG
@@ -127,7 +124,6 @@ public:
     FTDistribution1DTriangle(double omega);
 
     FTDistribution1DTriangle* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
     double qSecondDerivative() const override;
 #ifndef SWIG
@@ -149,7 +145,6 @@ public:
     FTDistribution1DCosine(double omega);
 
     FTDistribution1DCosine* clone() const override;
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
     double evaluate(double q) const override;
     double qSecondDerivative() const override;
 #ifndef SWIG
@@ -171,7 +166,6 @@ public:
     FTDistribution1DVoigt(double omega, double eta);
 
     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 override;
diff --git a/Sample/Correlations/FTDistributions2D.h b/Sample/Correlations/FTDistributions2D.h
index 495a1ccca382947a6b336562a0e42495eba049b6..230c6bd615653a9978830081c9f3174d4187ea39 100644
--- a/Sample/Correlations/FTDistributions2D.h
+++ b/Sample/Correlations/FTDistributions2D.h
@@ -72,7 +72,6 @@ public:
     FTDistribution2DCauchy(double omega_x, double omega_y, double gamma);
 
     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 override;
@@ -93,7 +92,6 @@ public:
     FTDistribution2DGauss(double omega_x, double omega_y, double gamma);
 
     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 override;
@@ -114,7 +112,6 @@ public:
     FTDistribution2DGate(double omega_x, double omega_y, double gamma);
 
     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 override;
@@ -135,7 +132,6 @@ public:
     FTDistribution2DCone(double omega_x, double omega_y, double gamma);
 
     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 override;
@@ -155,7 +151,6 @@ public:
     FTDistribution2DVoigt(double omega_x, double omega_y, double gamma, double eta);
 
     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
diff --git a/Sample/Correlations/IPeakShape.h b/Sample/Correlations/IPeakShape.h
index fb78a49fb822a65c8c9997a0f6ba88d5c05fd028..2db37aeedd1dc6009dbaabe87cbd7d21912fc706 100644
--- a/Sample/Correlations/IPeakShape.h
+++ b/Sample/Correlations/IPeakShape.h
@@ -50,8 +50,6 @@ public:
 
     IsotropicGaussPeakShape* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double evaluate(R3 q, R3 q_lattice_point) const override;
 
 private:
@@ -72,8 +70,6 @@ public:
 
     IsotropicLorentzPeakShape* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double evaluate(R3 q, R3 q_lattice_point) const override;
 
 private:
@@ -95,8 +91,6 @@ public:
 
     GaussFisherPeakShape* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double evaluate(R3 q, R3 q_lattice_point) const override;
 
     bool angularDisorder() const override { return true; }
@@ -120,8 +114,6 @@ public:
 
     LorentzFisherPeakShape* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double evaluate(R3 q, R3 q_lattice_point) const override;
 
     bool angularDisorder() const override { return true; }
@@ -146,8 +138,6 @@ public:
 
     MisesFisherGaussPeakShape* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double evaluate(R3 q, R3 q_lattice_point) const override;
 
     bool angularDisorder() const override { return true; }
@@ -171,8 +161,6 @@ public:
 
     MisesGaussPeakShape* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double evaluate(R3 q, R3 q_lattice_point) const override;
 
     bool angularDisorder() const override { return true; }
diff --git a/Sample/HardParticle/FormFactorAnisoPyramid.h b/Sample/HardParticle/FormFactorAnisoPyramid.h
index cc365832372aa0b5a3675e20bcf87d09887bce92..5b6f8c0d1623747e0e9bb592f782852063baa918 100644
--- a/Sample/HardParticle/FormFactorAnisoPyramid.h
+++ b/Sample/HardParticle/FormFactorAnisoPyramid.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorAnisoPyramid(m_length, m_width, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getWidth() const { return m_width; }
diff --git a/Sample/HardParticle/FormFactorBar.cpp b/Sample/HardParticle/FormFactorBar.cpp
index 0f416e7e9d4d66933bfdcd78e727483c6b6f1a8e..c0baac614302c92561c825bfe79ced1b507935d2 100644
--- a/Sample/HardParticle/FormFactorBar.cpp
+++ b/Sample/HardParticle/FormFactorBar.cpp
@@ -34,11 +34,6 @@ FormFactorBarGauss* FormFactorBarGauss::clone() const
     return new FormFactorBarGauss(m_length, m_width, m_height);
 }
 
-void FormFactorBarGauss::accept(INodeVisitor* visitor) const
-{
-    visitor->visit(this);
-}
-
 complex_t FormFactorBarGauss::factor_x(complex_t qx) const
 {
     return ripples::factor_x_Gauss(qx, m_length);
@@ -63,11 +58,6 @@ FormFactorBarLorentz* FormFactorBarLorentz::clone() const
     return new FormFactorBarLorentz(m_length, m_width, m_height);
 }
 
-void FormFactorBarLorentz::accept(INodeVisitor* visitor) const
-{
-    visitor->visit(this);
-}
-
 complex_t FormFactorBarLorentz::factor_x(complex_t qx) const
 {
     return ripples::factor_x_Lorentz(qx, m_length);
diff --git a/Sample/HardParticle/FormFactorBar.h b/Sample/HardParticle/FormFactorBar.h
index 5ef09dc60dfa2c1655fdf3f216f7209a01d41036..ca0775c8b2b32ac375e1b69f7a8ab0c32b6c0c0c 100644
--- a/Sample/HardParticle/FormFactorBar.h
+++ b/Sample/HardParticle/FormFactorBar.h
@@ -32,7 +32,6 @@ public:
     FormFactorBarGauss(std::vector<double> P);
     FormFactorBarGauss(double length, double width, double height);
     FormFactorBarGauss* clone() const override;
-    void accept(INodeVisitor* visitor) const override;
 
 private:
     complex_t factor_x(complex_t qx) const override;
@@ -48,7 +47,6 @@ public:
     FormFactorBarLorentz(std::vector<double> P);
     FormFactorBarLorentz(double length, double width, double height);
     FormFactorBarLorentz* clone() const override;
-    void accept(INodeVisitor* visitor) const override;
 
 private:
     complex_t factor_x(complex_t qx) const override;
diff --git a/Sample/HardParticle/FormFactorBox.h b/Sample/HardParticle/FormFactorBox.h
index 568d89004635e2e02fd4a6faf102293950860c73..afe9eff4b6e9f6751220d71dd23482c539dc5605 100644
--- a/Sample/HardParticle/FormFactorBox.h
+++ b/Sample/HardParticle/FormFactorBox.h
@@ -30,8 +30,6 @@ public:
 
     FormFactorBox* clone() const override { return new FormFactorBox(m_length, m_width, m_height); }
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double getLength() const { return m_length; }
     double getWidth() const { return m_width; }
 
diff --git a/Sample/HardParticle/FormFactorCantellatedCube.h b/Sample/HardParticle/FormFactorCantellatedCube.h
index 4bf96946661768f02e22e0a9612e6508077bb027..df1fa26644498ba7ff8d33e7443284e298fa93c3 100644
--- a/Sample/HardParticle/FormFactorCantellatedCube.h
+++ b/Sample/HardParticle/FormFactorCantellatedCube.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorCantellatedCube(m_length, m_removed_length);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getRemovedLength() const { return m_removed_length; }
diff --git a/Sample/HardParticle/FormFactorCone.h b/Sample/HardParticle/FormFactorCone.h
index 39de28d6a8bbb326f5dd8ac0eea3ae0f3f5e0b00..f827bac2dc4f32cae2f37f124d7b965580c85e5e 100644
--- a/Sample/HardParticle/FormFactorCone.h
+++ b/Sample/HardParticle/FormFactorCone.h
@@ -32,7 +32,6 @@ public:
     {
         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; }
diff --git a/Sample/HardParticle/FormFactorCone6.h b/Sample/HardParticle/FormFactorCone6.h
index e40b224bf891bec6ed621a371c428fd0874dce90..82f860f582b7fbda35f6bf580d483ff80eb216a7 100644
--- a/Sample/HardParticle/FormFactorCone6.h
+++ b/Sample/HardParticle/FormFactorCone6.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorCone6(m_base_edge, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getBaseEdge() const { return m_base_edge; }
     double getHeight() const { return m_height; }
diff --git a/Sample/HardParticle/FormFactorCosineRipple.cpp b/Sample/HardParticle/FormFactorCosineRipple.cpp
index f6508f1a0eeaf32d574e53b5ef013a1a379d76ce..74a603009f483fa8afe925ef973eb02eed7986ac 100644
--- a/Sample/HardParticle/FormFactorCosineRipple.cpp
+++ b/Sample/HardParticle/FormFactorCosineRipple.cpp
@@ -34,11 +34,6 @@ FormFactorCosineRippleBox* FormFactorCosineRippleBox::clone() const
     return new FormFactorCosineRippleBox(m_length, m_width, m_height);
 }
 
-void FormFactorCosineRippleBox::accept(INodeVisitor* visitor) const
-{
-    visitor->visit(this);
-}
-
 complex_t FormFactorCosineRippleBox::factor_x(complex_t qx) const
 {
     return ripples::factor_x_box(qx, m_length);
@@ -63,11 +58,6 @@ FormFactorCosineRippleGauss* FormFactorCosineRippleGauss::clone() const
     return new FormFactorCosineRippleGauss(m_length, m_width, m_height);
 }
 
-void FormFactorCosineRippleGauss::accept(INodeVisitor* visitor) const
-{
-    visitor->visit(this);
-}
-
 complex_t FormFactorCosineRippleGauss::factor_x(complex_t qx) const
 {
     return ripples::factor_x_Gauss(qx, m_length);
@@ -93,11 +83,6 @@ FormFactorCosineRippleLorentz* FormFactorCosineRippleLorentz::clone() const
     return new FormFactorCosineRippleLorentz(m_length, m_width, m_height);
 }
 
-void FormFactorCosineRippleLorentz::accept(INodeVisitor* visitor) const
-{
-    visitor->visit(this);
-}
-
 complex_t FormFactorCosineRippleLorentz::factor_x(complex_t qx) const
 {
     return ripples::factor_x_Lorentz(qx, m_length);
diff --git a/Sample/HardParticle/FormFactorCosineRipple.h b/Sample/HardParticle/FormFactorCosineRipple.h
index 2dc5ecd5755994ab1f90b962bde67941369ea717..5832a26a091722bdf2b2f26ee9e130a534edd3f7 100644
--- a/Sample/HardParticle/FormFactorCosineRipple.h
+++ b/Sample/HardParticle/FormFactorCosineRipple.h
@@ -27,7 +27,6 @@ public:
     FormFactorCosineRippleBox(std::vector<double> P);
     FormFactorCosineRippleBox(double length, double width, double height);
     FormFactorCosineRippleBox* clone() const override;
-    void accept(INodeVisitor* visitor) const override;
 
 private:
     complex_t factor_x(complex_t qx) const override;
@@ -43,7 +42,6 @@ public:
     FormFactorCosineRippleGauss(std::vector<double> P);
     FormFactorCosineRippleGauss(double length, double width, double height);
     FormFactorCosineRippleGauss* clone() const override;
-    void accept(INodeVisitor* visitor) const override;
 
 private:
     complex_t factor_x(complex_t qx) const override;
@@ -59,7 +57,6 @@ public:
     FormFactorCosineRippleLorentz(std::vector<double> P);
     FormFactorCosineRippleLorentz(double length, double width, double height);
     FormFactorCosineRippleLorentz* clone() const override;
-    void accept(INodeVisitor* visitor) const override;
 
 private:
     complex_t factor_x(complex_t qx) const override;
diff --git a/Sample/HardParticle/FormFactorCuboctahedron.h b/Sample/HardParticle/FormFactorCuboctahedron.h
index 8fabb59b377357d257b8b93c45ef0e225a73889b..a098febbf8cd7b765a13c99f8444f2becc1f988a 100644
--- a/Sample/HardParticle/FormFactorCuboctahedron.h
+++ b/Sample/HardParticle/FormFactorCuboctahedron.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorCuboctahedron(m_length, m_height, m_height_ratio, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getHeight() const { return m_height; }
diff --git a/Sample/HardParticle/FormFactorCylinder.h b/Sample/HardParticle/FormFactorCylinder.h
index 017c0b0f2e04103e731022c64e569688a80de36c..d18d69a5256a55e49ff370f282b54075f7a40311 100644
--- a/Sample/HardParticle/FormFactorCylinder.h
+++ b/Sample/HardParticle/FormFactorCylinder.h
@@ -32,7 +32,6 @@ public:
     {
         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; }
diff --git a/Sample/HardParticle/FormFactorDodecahedron.h b/Sample/HardParticle/FormFactorDodecahedron.h
index 690e3b460fde5b1270149cc7989a8d02e25832fa..eadcf267785c4aa2ca75b4d49ef9e64377be9cc4 100644
--- a/Sample/HardParticle/FormFactorDodecahedron.h
+++ b/Sample/HardParticle/FormFactorDodecahedron.h
@@ -29,7 +29,6 @@ public:
     FormFactorDodecahedron(double edge);
 
     FormFactorDodecahedron* clone() const override { return new FormFactorDodecahedron(m_edge); }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getEdge() const { return m_edge; }
 
diff --git a/Sample/HardParticle/FormFactorEllipsoidalCylinder.h b/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
index d06467991e8d141e2a12ddee3125a52fd6b22eb2..0c07fee2ed018f545f0cb980e6aa435964fb8263 100644
--- a/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
+++ b/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorEllipsoidalCylinder(m_radius_x, m_radius_y, m_height);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadiusX() const { return m_radius_x; }
     double getRadiusY() const { return m_radius_y; }
diff --git a/Sample/HardParticle/FormFactorFullSphere.h b/Sample/HardParticle/FormFactorFullSphere.h
index 66d87c42d5a5449dc0ce71cdbe00aff714d81d4f..cfa8d936edcda8ec534175f9ae45f4bfa471e22f 100644
--- a/Sample/HardParticle/FormFactorFullSphere.h
+++ b/Sample/HardParticle/FormFactorFullSphere.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorFullSphere(m_radius, m_position_at_center);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadius() const { return m_radius; }
 
diff --git a/Sample/HardParticle/FormFactorFullSpheroid.h b/Sample/HardParticle/FormFactorFullSpheroid.h
index 8c8195de08762dffa24eb9840fd4a90a200d0acb..321274a34e4978b5620858e80fbd5ee15fc5a7d8 100644
--- a/Sample/HardParticle/FormFactorFullSpheroid.h
+++ b/Sample/HardParticle/FormFactorFullSpheroid.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorFullSpheroid(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; }
diff --git a/Sample/HardParticle/FormFactorHemiEllipsoid.h b/Sample/HardParticle/FormFactorHemiEllipsoid.h
index f110008a9b63a2523ec24d40dd9a3194f53959bc..b09039e70446595a707b0560910ad9399b7fa043 100644
--- a/Sample/HardParticle/FormFactorHemiEllipsoid.h
+++ b/Sample/HardParticle/FormFactorHemiEllipsoid.h
@@ -34,7 +34,6 @@ public:
     {
         return new FormFactorHemiEllipsoid(m_radius_x, m_radius_y, m_height);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getRadiusX() const { return m_radius_x; }
diff --git a/Sample/HardParticle/FormFactorHollowSphere.h b/Sample/HardParticle/FormFactorHollowSphere.h
index dea911caef267fb9bf911e809d866cf3ca126cca..457c1579538287ea510ff2af3f66b53c2071dbe7 100644
--- a/Sample/HardParticle/FormFactorHollowSphere.h
+++ b/Sample/HardParticle/FormFactorHollowSphere.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorHollowSphere(m_mean, m_full_width);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double radialExtension() const override { return m_mean; }
 
diff --git a/Sample/HardParticle/FormFactorIcosahedron.h b/Sample/HardParticle/FormFactorIcosahedron.h
index 3895e7cbfefc5df4caf0d88c413db84a67ad5f58..5aa0ab5d92e654fe48431acb6ad925ef99182d92 100644
--- a/Sample/HardParticle/FormFactorIcosahedron.h
+++ b/Sample/HardParticle/FormFactorIcosahedron.h
@@ -29,7 +29,6 @@ public:
     FormFactorIcosahedron(double edge);
 
     FormFactorIcosahedron* clone() const override { return new FormFactorIcosahedron(m_edge); }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getEdge() const { return m_edge; }
 
diff --git a/Sample/HardParticle/FormFactorLongBoxGauss.h b/Sample/HardParticle/FormFactorLongBoxGauss.h
index 4bac539bdd103efef432c182ecc02b58deb92bc5..fce280fb2731723104b4d019d6f4dd0e9aafa146 100644
--- a/Sample/HardParticle/FormFactorLongBoxGauss.h
+++ b/Sample/HardParticle/FormFactorLongBoxGauss.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorLongBoxGauss(m_length, m_width, m_height);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getHeight() const { return m_height; }
diff --git a/Sample/HardParticle/FormFactorLongBoxLorentz.h b/Sample/HardParticle/FormFactorLongBoxLorentz.h
index b1c43d9866398bef17cd50c2811c7d431972b7f0..1c455dcc31aac04a253c68beae93f680a2a178ac 100644
--- a/Sample/HardParticle/FormFactorLongBoxLorentz.h
+++ b/Sample/HardParticle/FormFactorLongBoxLorentz.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorLongBoxLorentz(m_length, m_width, m_height);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getHeight() const { return m_height; }
diff --git a/Sample/HardParticle/FormFactorPrism3.h b/Sample/HardParticle/FormFactorPrism3.h
index 82c222b1210c297712a1ddf9a72b0ff060a3619a..dff0805ca9087cbb04c1e4d8eeef1524049eca94 100644
--- a/Sample/HardParticle/FormFactorPrism3.h
+++ b/Sample/HardParticle/FormFactorPrism3.h
@@ -29,7 +29,6 @@ public:
     FormFactorPrism3(double base_edge, double height);
 
     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; }
 
diff --git a/Sample/HardParticle/FormFactorPrism6.h b/Sample/HardParticle/FormFactorPrism6.h
index a47561d3b85afafdcd98ccb944ff8195c8a20804..811ce70fc00b4750ff342e93d794a61fd89fb9d1 100644
--- a/Sample/HardParticle/FormFactorPrism6.h
+++ b/Sample/HardParticle/FormFactorPrism6.h
@@ -29,7 +29,6 @@ public:
     FormFactorPrism6(double base_edge, double height);
 
     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; }
 
diff --git a/Sample/HardParticle/FormFactorPyramid.h b/Sample/HardParticle/FormFactorPyramid.h
index 8fe0d305bbe8073974e7eee73e694677238004fd..fab7a5cc86cba08f475c533011604fef000ef9ce 100644
--- a/Sample/HardParticle/FormFactorPyramid.h
+++ b/Sample/HardParticle/FormFactorPyramid.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorPyramid(m_base_edge, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getBaseEdge() const { return m_base_edge; }
diff --git a/Sample/HardParticle/FormFactorSawtoothRipple.cpp b/Sample/HardParticle/FormFactorSawtoothRipple.cpp
index fa7e2b07e12ed8c889065903da85c85ec2bd373d..f5e02daf26249764b53798af9d345420c1115f8f 100644
--- a/Sample/HardParticle/FormFactorSawtoothRipple.cpp
+++ b/Sample/HardParticle/FormFactorSawtoothRipple.cpp
@@ -35,11 +35,6 @@ FormFactorSawtoothRippleBox* FormFactorSawtoothRippleBox::clone() const
     return new FormFactorSawtoothRippleBox(m_length, m_width, m_height, m_asymmetry);
 }
 
-void FormFactorSawtoothRippleBox::accept(INodeVisitor* visitor) const
-{
-    visitor->visit(this);
-}
-
 complex_t FormFactorSawtoothRippleBox::factor_x(complex_t qx) const
 {
     return ripples::factor_x_box(qx, m_length);
@@ -65,11 +60,6 @@ FormFactorSawtoothRippleGauss* FormFactorSawtoothRippleGauss::clone() const
     return new FormFactorSawtoothRippleGauss(m_length, m_width, m_height, m_asymmetry);
 }
 
-void FormFactorSawtoothRippleGauss::accept(INodeVisitor* visitor) const
-{
-    visitor->visit(this);
-}
-
 complex_t FormFactorSawtoothRippleGauss::factor_x(complex_t qx) const
 {
     return ripples::factor_x_Gauss(qx, m_length);
@@ -95,11 +85,6 @@ FormFactorSawtoothRippleLorentz* FormFactorSawtoothRippleLorentz::clone() const
     return new FormFactorSawtoothRippleLorentz(m_length, m_width, m_height, m_asymmetry);
 }
 
-void FormFactorSawtoothRippleLorentz::accept(INodeVisitor* visitor) const
-{
-    visitor->visit(this);
-}
-
 complex_t FormFactorSawtoothRippleLorentz::factor_x(complex_t qx) const
 {
     return ripples::factor_x_Lorentz(qx, m_length);
diff --git a/Sample/HardParticle/FormFactorSawtoothRipple.h b/Sample/HardParticle/FormFactorSawtoothRipple.h
index 160650abe311c56223735d728fd7691fecc9b492..528226a534595092a87f70b438e24ab3a8a50576 100644
--- a/Sample/HardParticle/FormFactorSawtoothRipple.h
+++ b/Sample/HardParticle/FormFactorSawtoothRipple.h
@@ -27,7 +27,6 @@ public:
     FormFactorSawtoothRippleBox(std::vector<double> P);
     FormFactorSawtoothRippleBox(double length, double width, double height, double asymmetry);
     FormFactorSawtoothRippleBox* clone() const override;
-    void accept(INodeVisitor* visitor) const override;
 
 private:
     complex_t factor_x(complex_t qx) const override;
@@ -43,7 +42,6 @@ public:
     FormFactorSawtoothRippleGauss(std::vector<double> P);
     FormFactorSawtoothRippleGauss(double length, double width, double height, double asymmetry);
     FormFactorSawtoothRippleGauss* clone() const override;
-    void accept(INodeVisitor* visitor) const override;
 
 private:
     complex_t factor_x(complex_t qx) const override;
@@ -59,7 +57,6 @@ public:
     FormFactorSawtoothRippleLorentz(std::vector<double> P);
     FormFactorSawtoothRippleLorentz(double length, double width, double height, double asymmetry);
     FormFactorSawtoothRippleLorentz* clone() const override;
-    void accept(INodeVisitor* visitor) const override;
 
 private:
     complex_t factor_x(complex_t qx) const override;
diff --git a/Sample/HardParticle/FormFactorTetrahedron.h b/Sample/HardParticle/FormFactorTetrahedron.h
index 45404719aed3df13b7c8532cbbf0e0f14fc2b954..132ed7c3df37caef676a3564e68e4a9c5067c5ed 100644
--- a/Sample/HardParticle/FormFactorTetrahedron.h
+++ b/Sample/HardParticle/FormFactorTetrahedron.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorTetrahedron(m_base_edge, m_height, m_alpha);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getBaseEdge() const { return m_base_edge; }
     double getHeight() const { return m_height; }
diff --git a/Sample/HardParticle/FormFactorTruncatedCube.h b/Sample/HardParticle/FormFactorTruncatedCube.h
index e56d24790c1998401fa354790d939a20fce06fd9..a8470492867d05154246d279da25293f91e3c796 100644
--- a/Sample/HardParticle/FormFactorTruncatedCube.h
+++ b/Sample/HardParticle/FormFactorTruncatedCube.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorTruncatedCube(m_length, m_removed_length);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getLength() const { return m_length; }
     double getRemovedLength() const { return m_removed_length; }
diff --git a/Sample/HardParticle/FormFactorTruncatedSphere.h b/Sample/HardParticle/FormFactorTruncatedSphere.h
index 1c02f0c424d6baebfc2e1ade8647e7976ed65c06..360701310b29cf83f1f21d94014be5d788321250 100644
--- a/Sample/HardParticle/FormFactorTruncatedSphere.h
+++ b/Sample/HardParticle/FormFactorTruncatedSphere.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorTruncatedSphere(m_radius, m_height, m_dh);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getHeight() const { return m_height; }
     double getRadius() const { return m_radius; }
diff --git a/Sample/HardParticle/FormFactorTruncatedSpheroid.h b/Sample/HardParticle/FormFactorTruncatedSpheroid.h
index 3f3456f10cc183b405e2884294d28c103fa83592..596c9b4e97169b002ec7a882d1bac5df60f40958 100644
--- a/Sample/HardParticle/FormFactorTruncatedSpheroid.h
+++ b/Sample/HardParticle/FormFactorTruncatedSpheroid.h
@@ -33,7 +33,6 @@ public:
     {
         return new FormFactorTruncatedSpheroid(m_radius, m_height, m_height_flattening, m_dh);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getRadius() const { return m_radius; }
     double getHeight() const { return m_height; }
diff --git a/Sample/Interface/LayerInterface.h b/Sample/Interface/LayerInterface.h
index 5f6832336624ff016e2ce537b41e84f5bcb8e6ad..eefff6fc2c2b4464d80899093bd7d59ff6a78db6 100644
--- a/Sample/Interface/LayerInterface.h
+++ b/Sample/Interface/LayerInterface.h
@@ -24,6 +24,7 @@
 #include <memory>
 
 class LayerRoughness;
+class Layer;
 
 //! Interface between two layers, possibly with roughness.
 
@@ -36,8 +37,6 @@ public:
 
     LayerInterface* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     //! Creates smooth interface between two layers
     static LayerInterface* createSmoothInterface(const Layer* top_layer, const Layer* bottom_layer);
 
diff --git a/Sample/Interface/LayerRoughness.h b/Sample/Interface/LayerRoughness.h
index fcd6ce5db9f9d352d22151d2a387d43d4af6ab04..0ea91e42972e5f21af5f30db48d4b535e7bdb6fa 100644
--- a/Sample/Interface/LayerRoughness.h
+++ b/Sample/Interface/LayerRoughness.h
@@ -38,7 +38,6 @@ public:
     {
         return new LayerRoughness(m_sigma, m_hurstParameter, m_lateralCorrLength);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     //! Returns power spectral density of the surface roughness
     double getSpectralFun(R3 kvec) const;
diff --git a/Sample/Lattice/Lattice2D.h b/Sample/Lattice/Lattice2D.h
index 569f53b675912fac5c14db866f32447abad6ed2c..0738372cdcbc8c38375c9372901f7549ddd222fd 100644
--- a/Sample/Lattice/Lattice2D.h
+++ b/Sample/Lattice/Lattice2D.h
@@ -57,8 +57,6 @@ public:
 
     BasicLattice2D* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double length1() const override { return m_length1; }
     double length2() const override { return m_length2; }
     double latticeAngle() const override { return m_angle; }
@@ -80,8 +78,6 @@ public:
 
     SquareLattice2D* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double length1() const override { return m_length; }
     double length2() const override { return m_length; }
     double latticeAngle() const override;
@@ -102,8 +98,6 @@ public:
 
     HexagonalLattice2D* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double length1() const override { return m_length; }
     double length2() const override { return m_length; }
     double latticeAngle() const override;
diff --git a/Sample/Lattice/Lattice3D.h b/Sample/Lattice/Lattice3D.h
index acb8ab3ce2ab0de0182ccad5f1dc0349fd319df0..f404ba1e21217bada552908e1c6c47236894d8c3 100644
--- a/Sample/Lattice/Lattice3D.h
+++ b/Sample/Lattice/Lattice3D.h
@@ -37,8 +37,6 @@ public:
     ~Lattice3D() override;
     Lattice3D& operator=(const Lattice3D&) = delete;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     //! Creates transformed lattice
     Lattice3D transformed(const Transform3D& transform) const;
 
diff --git a/Sample/Multilayer/Layer.h b/Sample/Multilayer/Layer.h
index 2ba25dd7796767161ddf66bc61ca26750209f5b3..41611f54fa771adeb6a1c4c7434a0eab2a182d73 100644
--- a/Sample/Multilayer/Layer.h
+++ b/Sample/Multilayer/Layer.h
@@ -34,8 +34,6 @@ public:
 
     Layer* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double thickness() const { return m_thickness; }
 
     const Material* material() const override { return &m_material; }
diff --git a/Sample/Multilayer/MultiLayer.h b/Sample/Multilayer/MultiLayer.h
index a0201832ce1224fb7323e2e11143f4d1eb37d2a4..6846f647c7823f544b2b7313c14d7702a014d311 100644
--- a/Sample/Multilayer/MultiLayer.h
+++ b/Sample/Multilayer/MultiLayer.h
@@ -49,8 +49,6 @@ public:
 
     MultiLayer* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     size_t numberOfLayers() const { return m_layers.size(); }
 
     void addLayer(const Layer& layer);
diff --git a/Sample/Particle/Crystal.h b/Sample/Particle/Crystal.h
index 54ebcb3fcbc38efb213aaca4b7f33c04e51acf91..b33e4d2c6cccb8a12e7a174bbc21c8c2014d0af7 100644
--- a/Sample/Particle/Crystal.h
+++ b/Sample/Particle/Crystal.h
@@ -21,6 +21,7 @@
 class IFormFactor;
 class IRotation;
 class Admixtures;
+class IParticle;
 
 //! A crystal structure, defined by a Bravais lattice, a basis, and a position variance.
 //!
@@ -42,8 +43,6 @@ public:
 
     Crystal* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     IFormFactor* createTotalFormFactor(const IFormFactor& meso_crystal_form_factor,
                                        const IRotation* rotation, const R3& translation) const;
 
diff --git a/Sample/Particle/FormFactorCoreShell.h b/Sample/Particle/FormFactorCoreShell.h
index 42dd66c56275882dacc08df6c807c0cb474612e6..c3ec2b36bfbdcefeb0f369dd76d47ae8e46b5736 100644
--- a/Sample/Particle/FormFactorCoreShell.h
+++ b/Sample/Particle/FormFactorCoreShell.h
@@ -38,8 +38,6 @@ public:
 
     FormFactorCoreShell* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double radialExtension() const override;
 
     double bottomZ(const IRotation& rotation) const override;
diff --git a/Sample/Particle/FormFactorCrystal.h b/Sample/Particle/FormFactorCrystal.h
index f3a2cab7d2ca308975075802a414da2759bfa5d4..1bcfc9de237b6a6a957cc224299bc0961e6c1924 100644
--- a/Sample/Particle/FormFactorCrystal.h
+++ b/Sample/Particle/FormFactorCrystal.h
@@ -36,8 +36,6 @@ public:
                                      m_position_variance);
     }
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     void setAmbientMaterial(const Material& material) override
     {
         m_basis_form_factor->setAmbientMaterial(material);
diff --git a/Sample/Particle/FormFactorWeighted.h b/Sample/Particle/FormFactorWeighted.h
index 920cf4b5c2c9e5d857292d8c49932c4cb9c30e3b..5426fa3f9df14cdb0a6d6446ea2889bd993f8763 100644
--- a/Sample/Particle/FormFactorWeighted.h
+++ b/Sample/Particle/FormFactorWeighted.h
@@ -34,8 +34,6 @@ public:
 
     FormFactorWeighted* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double radialExtension() const override;
 
     double bottomZ(const IRotation& rotation) const override;
diff --git a/Sample/Particle/IParticle.h b/Sample/Particle/IParticle.h
index 982ffa8248c6d5393350e2f93a1e8534daa8d561..e3e43e4157882ba37b2194fa1a847ad7cab3e417 100644
--- a/Sample/Particle/IParticle.h
+++ b/Sample/Particle/IParticle.h
@@ -24,6 +24,8 @@
 struct SlicedParticle;
 class Rotations;
 class ZLimits;
+class IFormFactor;
+class IRotation;
 
 //! Abstract base class for Particle, ParticleComposition, ParticleCoreShell, MesoCrystal.
 //! Provides position/rotation and form factor. Abundance is inherited from IParticle.
diff --git a/Sample/Particle/MesoCrystal.cpp b/Sample/Particle/MesoCrystal.cpp
index 940fb1235986c070f2527140df768aae007f642f..957c79d20ff7ab9c4b5cf70f884ba737e3880521 100644
--- a/Sample/Particle/MesoCrystal.cpp
+++ b/Sample/Particle/MesoCrystal.cpp
@@ -42,11 +42,6 @@ MesoCrystal* MesoCrystal::clone() const
     return p_result;
 }
 
-void MesoCrystal::accept(INodeVisitor* visitor) const
-{
-    visitor->visit(this);
-}
-
 SlicedParticle MesoCrystal::createSlicedParticle(const ZLimits& limits) const
 {
     ASSERT(m_particle_structure && m_meso_form_factor);
diff --git a/Sample/Particle/MesoCrystal.h b/Sample/Particle/MesoCrystal.h
index fada223988aaf70ff9476d54317910ea13027b47..a9e794dccaaa28e357929fd0c7ae699f4bd93c6a 100644
--- a/Sample/Particle/MesoCrystal.h
+++ b/Sample/Particle/MesoCrystal.h
@@ -32,8 +32,6 @@ public:
     ~MesoCrystal() override;
     MesoCrystal* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override;
-
     SlicedParticle createSlicedParticle(const ZLimits& limits) const override;
 
     std::vector<const INode*> getChildren() const override;
diff --git a/Sample/Particle/Particle.h b/Sample/Particle/Particle.h
index 6973958388fe9071263a50cc95b52a2676faca25..6b22e73500a0fc582b92bc3be497f2155625ccb4 100644
--- a/Sample/Particle/Particle.h
+++ b/Sample/Particle/Particle.h
@@ -31,8 +31,6 @@ public:
 
     Particle* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     SlicedParticle createSlicedParticle(const ZLimits& limits) const override;
 
     const Material* material() const override { return &m_material; }
diff --git a/Sample/Particle/ParticleComposition.h b/Sample/Particle/ParticleComposition.h
index 4577a1e5589564ce85c99400357c54728b12a8bd..fdd1e297aa6370cd4281d01c0b1040f3162f820d 100644
--- a/Sample/Particle/ParticleComposition.h
+++ b/Sample/Particle/ParticleComposition.h
@@ -32,8 +32,6 @@ public:
     ~ParticleComposition() override;
     ParticleComposition* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     IFormFactor* createFormFactor() const override;
 
     void addParticle(const IParticle& particle);
diff --git a/Sample/Particle/ParticleCoreShell.h b/Sample/Particle/ParticleCoreShell.h
index 08f700c0746397fd0331b39a129e0818bd410603..09ce543c3b5f7b2e01f880c8c65570fe4a18773d 100644
--- a/Sample/Particle/ParticleCoreShell.h
+++ b/Sample/Particle/ParticleCoreShell.h
@@ -33,8 +33,6 @@ public:
 
     ParticleCoreShell* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     SlicedParticle createSlicedParticle(const ZLimits& limits) const override;
 
     const Particle* coreParticle() const;
diff --git a/Sample/Scattering/FormFactorDecoratorMaterial.h b/Sample/Scattering/FormFactorDecoratorMaterial.h
index 66db8baefd6e5ad599ba424cabc87ff8fff49f5c..a70846433ce475579ee04a12fc7a9e76cefb0274 100644
--- a/Sample/Scattering/FormFactorDecoratorMaterial.h
+++ b/Sample/Scattering/FormFactorDecoratorMaterial.h
@@ -39,8 +39,6 @@ public:
 
     FormFactorDecoratorMaterial* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     //! Sets the material of the scatterer
     void setMaterial(const Material& material);
 
diff --git a/Sample/Scattering/FormFactorDecoratorPositionFactor.h b/Sample/Scattering/FormFactorDecoratorPositionFactor.h
index 763863d4fb2b16e25ea0bd30527f8bf3c880db97..b0dc789c682f8c5bddf2918bb902925658634373 100644
--- a/Sample/Scattering/FormFactorDecoratorPositionFactor.h
+++ b/Sample/Scattering/FormFactorDecoratorPositionFactor.h
@@ -36,8 +36,6 @@ public:
         return new FormFactorDecoratorPositionFactor(*m_ff, m_position);
     }
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double bottomZ(const IRotation& rotation) const override;
 
     double topZ(const IRotation& rotation) const override;
diff --git a/Sample/Scattering/FormFactorDecoratorRotation.h b/Sample/Scattering/FormFactorDecoratorRotation.h
index ef30b9c1e6507cf021524b0d32a01b34de772ad9..84d47a67988933bea8236ac65668732fe22fdfdf 100644
--- a/Sample/Scattering/FormFactorDecoratorRotation.h
+++ b/Sample/Scattering/FormFactorDecoratorRotation.h
@@ -37,8 +37,6 @@ public:
 
     FormFactorDecoratorRotation* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double bottomZ(const IRotation& rotation) const override;
 
     double topZ(const IRotation& rotation) const override;
diff --git a/Sample/Scattering/Rotations.h b/Sample/Scattering/Rotations.h
index ccc11dd9df454bfe50f481210c9b578d087e705a..026debbfd2a7f27218e082d3ebc24f7e920b3e1b 100644
--- a/Sample/Scattering/Rotations.h
+++ b/Sample/Scattering/Rotations.h
@@ -65,8 +65,6 @@ public:
     IdentityRotation* clone() const override { return new IdentityRotation(); }
     IdentityRotation* createInverse() const override { return new IdentityRotation(); }
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     Transform3D getTransform3D() const override;
 
     bool isIdentity() const override { return true; }
@@ -85,8 +83,6 @@ public:
     RotationX* clone() const override { return new RotationX(m_angle); }
     RotationX* createInverse() const override { return new RotationX(-m_angle); }
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double getAngle() const { return m_angle; }
 
     Transform3D getTransform3D() const override;
@@ -108,8 +104,6 @@ public:
     RotationY* clone() const override { return new RotationY(m_angle); }
     RotationY* createInverse() const override { return new RotationY(-m_angle); }
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double getAngle() const { return m_angle; }
 
     Transform3D getTransform3D() const override;
@@ -131,8 +125,6 @@ public:
     RotationZ* clone() const override { return new RotationZ(m_angle); }
     RotationZ* createInverse() const override { return new RotationZ(-m_angle); }
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double getAngle() const { return m_angle; }
 
     Transform3D getTransform3D() const override;
@@ -154,8 +146,6 @@ public:
     RotationEuler* clone() const override { return new RotationEuler(m_alpha, m_beta, m_gamma); }
     IRotation* createInverse() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double getAlpha() const { return m_alpha; }
     double getBeta() const { return m_beta; }
     double getGamma() const { return m_gamma; }
diff --git a/Sample/SoftParticle/FormFactorGauss.h b/Sample/SoftParticle/FormFactorGauss.h
index f5c6caba1aba4fe7a2ef444d0d4e9a7b148a419c..99b7355606ddce147d8cca9b652f9bacc5d053b0 100644
--- a/Sample/SoftParticle/FormFactorGauss.h
+++ b/Sample/SoftParticle/FormFactorGauss.h
@@ -32,7 +32,6 @@ public:
     {
         return new FormFactorGaussSphere(m_mean_radius);
     }
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
 
     double getMeanRadius() const { return m_mean_radius; }
 
diff --git a/Sample/SoftParticle/FormFactorSphereGaussianRadius.h b/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
index de0ddc0816d84572978dcc53fba2b3861ff37d3c..a5b1f39722f65c035417a3d1c7fdc66bbb40551d 100644
--- a/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
+++ b/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
@@ -34,8 +34,6 @@ public:
         return new FormFactorSphereGaussianRadius(m_mean, m_sigma);
     }
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double radialExtension() const override { return m_mean; }
 
     complex_t formfactor(C3 q) const override;
diff --git a/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h b/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
index e26da4d3dab1e68afcedc9a14b69928ed7430aee..1b4c496c7f42d339e132a886990cb3774b8a934a 100644
--- a/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
+++ b/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
@@ -31,8 +31,6 @@ public:
 
     FormFactorSphereLogNormalRadius* clone() const override;
 
-    void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
     double radialExtension() const override { return m_mean; }
 
     complex_t formfactor(C3 q) const override;
diff --git a/Tests/Unit/Param/INodeTest.cpp b/Tests/Unit/Param/INodeTest.cpp
index e4efc171b948d6237cb4a96ea226e0e9c4694c64..617e113ddb0d1fdeb7f469dd911d46e4c1a20937 100644
--- a/Tests/Unit/Param/INodeTest.cpp
+++ b/Tests/Unit/Param/INodeTest.cpp
@@ -27,8 +27,6 @@ public:
                 delete child;
         }
 
-        void accept(INodeVisitor* visitor) const override { visitor->visit(this); }
-
         void appendChild(INode* node) { m_nodes.push_back(node); }
 
         std::vector<const INode*> getChildren() const override