diff --git a/Examples/varia/CustomFormFactor.py b/Examples/varia/CustomFormFactor.py
index 3b0a29ab27ab01d69d0ec2c0691ecc8d0bee353d..c93cad05147ed8b16dd8c69c74051bb6329e5468 100755
--- a/Examples/varia/CustomFormFactor.py
+++ b/Examples/varia/CustomFormFactor.py
@@ -13,14 +13,14 @@ def sinc(x):
     return cmath.sin(x)/x
 
 
-class CustomFormFactor(ba.IBornFF):
+class CustomFormFactor(ba.IFormFactor):
     """
     A custom defined form factor.
     The particle is a prism of height H,
     with a base in form of a Greek cross ("plus" sign) with side length L.
     """
     def __init__(self, L, H):
-        ba.IBornFF.__init__(self)
+        ba.IFormFactor.__init__(self)
         # parameters describing the form factor
         self.L = L
         self.H = H
diff --git a/GUI/Model/Sample/FormFactorItems.cpp b/GUI/Model/Sample/FormFactorItems.cpp
index 15d8f1933a4cafb5df6f6cf8fc93ecd315c85a67..cba8b44b17d2acb3c3a316bbc88d6586e59d0eee 100644
--- a/GUI/Model/Sample/FormFactorItems.cpp
+++ b/GUI/Model/Sample/FormFactorItems.cpp
@@ -26,7 +26,7 @@ Pyramid2Item::Pyramid2Item()
     m_alpha.init("Alpha", "Dihedral angle between base and facet", 60.0, Unit::degree, "alpha");
 }
 
-std::unique_ptr<IBornFF> Pyramid2Item::createFormFactor() const
+std::unique_ptr<IFormFactor> Pyramid2Item::createFormFactor() const
 {
     return std::make_unique<FormFactorPyramid2>(length(), width(), height(), alpha() * Units::deg);
 }
@@ -40,7 +40,7 @@ BarGaussItem::BarGaussItem()
     m_height.init("Height", "Height of the box", 13.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> BarGaussItem::createFormFactor() const
+std::unique_ptr<IFormFactor> BarGaussItem::createFormFactor() const
 {
     return std::make_unique<FormFactorBarGauss>(length(), width(), height());
 }
@@ -54,7 +54,7 @@ BarLorentzItem::BarLorentzItem()
     m_height.init("Height", "Height of the box", 13.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> BarLorentzItem::createFormFactor() const
+std::unique_ptr<IFormFactor> BarLorentzItem::createFormFactor() const
 {
     return std::make_unique<FormFactorBarLorentz>(length(), width(), height());
 }
@@ -68,7 +68,7 @@ BoxItem::BoxItem()
     m_height.init("Height", "Height of the box", 13.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> BoxItem::createFormFactor() const
+std::unique_ptr<IFormFactor> BoxItem::createFormFactor() const
 {
     return std::make_unique<FormFactorBox>(length(), width(), height());
 }
@@ -83,7 +83,7 @@ ConeItem::ConeItem()
                  "alpha");
 }
 
-std::unique_ptr<IBornFF> ConeItem::createFormFactor() const
+std::unique_ptr<IFormFactor> ConeItem::createFormFactor() const
 {
     return std::make_unique<FormFactorCone>(radius(), height(), alpha() * Units::deg);
 }
@@ -98,7 +98,7 @@ Pyramid6Item::Pyramid6Item()
     m_alpha.init("Alpha", "Dihedral angle between base and facet", 60.0, Unit::degree, "alpha");
 }
 
-std::unique_ptr<IBornFF> Pyramid6Item::createFormFactor() const
+std::unique_ptr<IFormFactor> Pyramid6Item::createFormFactor() const
 {
     return std::make_unique<FormFactorPyramid6>(baseEdge(), height(), alpha() * Units::deg);
 }
@@ -118,7 +118,7 @@ Bipyramid4Item::Bipyramid4Item()
     m_alpha.init("Alpha", "Dihedral angle between base and facets", 60.0, Unit::degree, "alpha");
 }
 
-std::unique_ptr<IBornFF> Bipyramid4Item::createFormFactor() const
+std::unique_ptr<IFormFactor> Bipyramid4Item::createFormFactor() const
 {
     return std::make_unique<FormFactorBipyramid4>(length(), height(), heightRatio(),
                                                   alpha() * Units::deg);
@@ -132,7 +132,7 @@ CylinderItem::CylinderItem()
     m_height.init("Height", "Height of the cylinder", 16.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> CylinderItem::createFormFactor() const
+std::unique_ptr<IFormFactor> CylinderItem::createFormFactor() const
 {
     return std::make_unique<FormFactorCylinder>(radius(), height());
 }
@@ -144,7 +144,7 @@ DodecahedronItem::DodecahedronItem()
     m_edge.init("Edge", "Length of the edge", 10.0, Unit::nanometer, "edge");
 }
 
-std::unique_ptr<IBornFF> DodecahedronItem::createFormFactor() const
+std::unique_ptr<IFormFactor> DodecahedronItem::createFormFactor() const
 {
     return std::make_unique<FormFactorDodecahedron>(edge());
 }
@@ -160,7 +160,7 @@ EllipsoidalCylinderItem::EllipsoidalCylinderItem()
     m_height.init("Height", "Height of the ellipsoidal cylinder", 16.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> EllipsoidalCylinderItem::createFormFactor() const
+std::unique_ptr<IFormFactor> EllipsoidalCylinderItem::createFormFactor() const
 {
     return std::make_unique<FormFactorEllipsoidalCylinder>(radiusX(), radiusY(), height());
 }
@@ -172,7 +172,7 @@ FullSphereItem::FullSphereItem()
     m_radius.init("Radius", "Radius of the sphere", 8.0, Unit::nanometer, "radius");
 }
 
-std::unique_ptr<IBornFF> FullSphereItem::createFormFactor() const
+std::unique_ptr<IFormFactor> FullSphereItem::createFormFactor() const
 {
     return std::make_unique<FormFactorFullSphere>(radius());
 }
@@ -186,7 +186,7 @@ FullSpheroidItem::FullSpheroidItem()
     m_height.init("Height", "Height of the full spheroid", 13.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> FullSpheroidItem::createFormFactor() const
+std::unique_ptr<IFormFactor> FullSpheroidItem::createFormFactor() const
 {
     return std::make_unique<FormFactorFullSpheroid>(radius(), height());
 }
@@ -202,7 +202,7 @@ HemiEllipsoidItem::HemiEllipsoidItem()
     m_height.init("Height", "Height of the hemi ellipsoid", 8.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> HemiEllipsoidItem::createFormFactor() const
+std::unique_ptr<IFormFactor> HemiEllipsoidItem::createFormFactor() const
 {
     return std::make_unique<FormFactorHemiEllipsoid>(radiusX(), radiusY(), height());
 }
@@ -214,7 +214,7 @@ IcosahedronItem::IcosahedronItem()
     m_edge.init("Edge", "Length of the edge", 10.0, Unit::nanometer, "edge");
 }
 
-std::unique_ptr<IBornFF> IcosahedronItem::createFormFactor() const
+std::unique_ptr<IFormFactor> IcosahedronItem::createFormFactor() const
 {
     return std::make_unique<FormFactorIcosahedron>(edge());
 }
@@ -227,7 +227,7 @@ Prism3Item::Prism3Item()
     m_height.init("Height", "Height", 13.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> Prism3Item::createFormFactor() const
+std::unique_ptr<IFormFactor> Prism3Item::createFormFactor() const
 {
     return std::make_unique<FormFactorPrism3>(baseEdge(), height());
 }
@@ -240,7 +240,7 @@ Prism6Item::Prism6Item()
     m_height.init("Height", "Height", 11.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> Prism6Item::createFormFactor() const
+std::unique_ptr<IFormFactor> Prism6Item::createFormFactor() const
 {
     return std::make_unique<FormFactorPrism6>(baseEdge(), height());
 }
@@ -255,7 +255,7 @@ Pyramid4Item::Pyramid4Item()
                  "alpha");
 }
 
-std::unique_ptr<IBornFF> Pyramid4Item::createFormFactor() const
+std::unique_ptr<IFormFactor> Pyramid4Item::createFormFactor() const
 {
     return std::make_unique<FormFactorPyramid4>(baseEdge(), height(), alpha() * Units::deg);
 }
@@ -269,7 +269,7 @@ CosineRippleBoxItem::CosineRippleBoxItem()
     m_height.init("Height", "Height of the ripple", 14.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> CosineRippleBoxItem::createFormFactor() const
+std::unique_ptr<IFormFactor> CosineRippleBoxItem::createFormFactor() const
 {
     return std::make_unique<FormFactorCosineRippleBox>(length(), width(), height());
 }
@@ -283,7 +283,7 @@ CosineRippleGaussItem::CosineRippleGaussItem()
     m_height.init("Height", "Height of the ripple", 14.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> CosineRippleGaussItem::createFormFactor() const
+std::unique_ptr<IFormFactor> CosineRippleGaussItem::createFormFactor() const
 {
     return std::make_unique<FormFactorCosineRippleGauss>(length(), width(), height());
 }
@@ -297,7 +297,7 @@ CosineRippleLorentzItem::CosineRippleLorentzItem()
     m_height.init("Height", "Height of the ripple", 14.0, Unit::nanometer, "height");
 }
 
-std::unique_ptr<IBornFF> CosineRippleLorentzItem::createFormFactor() const
+std::unique_ptr<IFormFactor> CosineRippleLorentzItem::createFormFactor() const
 {
     return std::make_unique<FormFactorCosineRippleLorentz>(length(), width(), height());
 }
@@ -313,7 +313,7 @@ SawtoothRippleBoxItem::SawtoothRippleBoxItem()
                      Unit::nanometer, "asymmetry");
 }
 
-std::unique_ptr<IBornFF> SawtoothRippleBoxItem::createFormFactor() const
+std::unique_ptr<IFormFactor> SawtoothRippleBoxItem::createFormFactor() const
 {
     return std::make_unique<FormFactorSawtoothRippleBox>(length(), width(), height(), asymmetry());
 }
@@ -329,7 +329,7 @@ SawtoothRippleGaussItem::SawtoothRippleGaussItem()
                      Unit::nanometer, "asymmetry");
 }
 
-std::unique_ptr<IBornFF> SawtoothRippleGaussItem::createFormFactor() const
+std::unique_ptr<IFormFactor> SawtoothRippleGaussItem::createFormFactor() const
 {
     return std::make_unique<FormFactorSawtoothRippleGauss>(length(), width(), height(),
                                                            asymmetry());
@@ -346,7 +346,7 @@ SawtoothRippleLorentzItem::SawtoothRippleLorentzItem()
                      Unit::nanometer, "asymmetry");
 }
 
-std::unique_ptr<IBornFF> SawtoothRippleLorentzItem::createFormFactor() const
+std::unique_ptr<IFormFactor> SawtoothRippleLorentzItem::createFormFactor() const
 {
     return std::make_unique<FormFactorSawtoothRippleLorentz>(length(), width(), height(),
                                                              asymmetry());
@@ -362,7 +362,7 @@ Pyramid3Item::Pyramid3Item()
     m_alpha.init("Alpha", "Dihedral angle between base and facet", 60.0, Unit::degree, "alpha");
 }
 
-std::unique_ptr<IBornFF> Pyramid3Item::createFormFactor() const
+std::unique_ptr<IFormFactor> Pyramid3Item::createFormFactor() const
 {
     return std::make_unique<FormFactorPyramid3>(baseEdge(), height(), alpha() * Units::deg);
 }
@@ -376,7 +376,7 @@ TruncatedCubeItem::TruncatedCubeItem()
                          Unit::nanometer, "removedLength");
 }
 
-std::unique_ptr<IBornFF> TruncatedCubeItem::createFormFactor() const
+std::unique_ptr<IFormFactor> TruncatedCubeItem::createFormFactor() const
 {
     return std::make_unique<FormFactorTruncatedCube>(length(), removedLength());
 }
@@ -391,7 +391,7 @@ TruncatedSphereItem::TruncatedSphereItem()
                       "removedTop");
 }
 
-std::unique_ptr<IBornFF> TruncatedSphereItem::createFormFactor() const
+std::unique_ptr<IFormFactor> TruncatedSphereItem::createFormFactor() const
 {
     return std::make_unique<FormFactorTruncatedSphere>(radius(), height(), removedTop());
 }
@@ -411,7 +411,7 @@ TruncatedSpheroidItem::TruncatedSpheroidItem()
                       "removedTop");
 }
 
-std::unique_ptr<IBornFF> TruncatedSpheroidItem::createFormFactor() const
+std::unique_ptr<IFormFactor> TruncatedSpheroidItem::createFormFactor() const
 {
     return std::make_unique<FormFactorTruncatedSpheroid>(radius(), height(), heightFlattening(),
                                                          removedTop());
diff --git a/GUI/Model/Sample/FormFactorItems.h b/GUI/Model/Sample/FormFactorItems.h
index 90ef61b55a1a060a7faec9c917bc98354defbe61..b41e397c06ca9bab5096b1077ff9ee232925f287 100644
--- a/GUI/Model/Sample/FormFactorItems.h
+++ b/GUI/Model/Sample/FormFactorItems.h
@@ -20,7 +20,7 @@
 #include <QVector>
 #include <memory>
 
-class IBornFF;
+class IFormFactor;
 class GroupInfo;
 
 #define FF_PROPERTY(nameLower, nameUpper)                                                          \
@@ -36,7 +36,7 @@ public:
     virtual ~FormFactorItem() = default;
 
 public:
-    virtual std::unique_ptr<IBornFF> createFormFactor() const = 0;
+    virtual std::unique_ptr<IFormFactor> createFormFactor() const = 0;
     virtual DoubleDescriptors geometryValues() const = 0;
     virtual QVector<DoubleProperty*> serializationProperties() = 0;
     virtual void serialize(Streamer& s);
@@ -45,7 +45,7 @@ public:
 class Pyramid2Item : public FormFactorItem {
 public:
     Pyramid2Item();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(width, Width)
@@ -65,7 +65,7 @@ public:
 class BarGaussItem : public FormFactorItem {
 public:
     BarGaussItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(width, Width)
@@ -81,7 +81,7 @@ public:
 class BarLorentzItem : public FormFactorItem {
 public:
     BarLorentzItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(width, Width)
@@ -97,7 +97,7 @@ public:
 class BoxItem : public FormFactorItem {
 public:
     BoxItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(width, Width)
@@ -113,7 +113,7 @@ public:
 class ConeItem : public FormFactorItem {
 public:
     ConeItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(radius, Radius)
     FF_PROPERTY(height, Height)
@@ -129,7 +129,7 @@ public:
 class Pyramid6Item : public FormFactorItem {
 public:
     Pyramid6Item();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(baseEdge, BaseEdge)
     FF_PROPERTY(height, Height)
@@ -145,7 +145,7 @@ public:
 class Bipyramid4Item : public FormFactorItem {
 public:
     Bipyramid4Item();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(height, Height)
@@ -165,7 +165,7 @@ public:
 class CylinderItem : public FormFactorItem {
 public:
     CylinderItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(radius, Radius)
     FF_PROPERTY(height, Height)
@@ -177,7 +177,7 @@ public:
 class DodecahedronItem : public FormFactorItem {
 public:
     DodecahedronItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(edge, Edge)
 
@@ -188,7 +188,7 @@ public:
 class EllipsoidalCylinderItem : public FormFactorItem {
 public:
     EllipsoidalCylinderItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(radiusX, RadiusX)
     FF_PROPERTY(radiusY, RadiusY)
@@ -204,7 +204,7 @@ public:
 class FullSphereItem : public FormFactorItem {
 public:
     FullSphereItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(radius, Radius)
 
@@ -215,7 +215,7 @@ public:
 class FullSpheroidItem : public FormFactorItem {
 public:
     FullSpheroidItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(radius, Radius)
     FF_PROPERTY(height, Height)
@@ -227,7 +227,7 @@ public:
 class HemiEllipsoidItem : public FormFactorItem {
 public:
     HemiEllipsoidItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(radiusX, RadiusX)
     FF_PROPERTY(radiusY, RadiusY)
@@ -243,7 +243,7 @@ public:
 class IcosahedronItem : public FormFactorItem {
 public:
     IcosahedronItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(edge, Edge)
 
@@ -254,7 +254,7 @@ public:
 class Prism3Item : public FormFactorItem {
 public:
     Prism3Item();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(baseEdge, BaseEdge)
     FF_PROPERTY(height, Height)
@@ -266,7 +266,7 @@ public:
 class Prism6Item : public FormFactorItem {
 public:
     Prism6Item();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(baseEdge, BaseEdge)
     FF_PROPERTY(height, Height)
@@ -278,7 +278,7 @@ public:
 class Pyramid4Item : public FormFactorItem {
 public:
     Pyramid4Item();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(baseEdge, BaseEdge)
     FF_PROPERTY(height, Height)
@@ -294,7 +294,7 @@ public:
 class CosineRippleBoxItem : public FormFactorItem {
 public:
     CosineRippleBoxItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(width, Width)
@@ -310,7 +310,7 @@ public:
 class CosineRippleGaussItem : public FormFactorItem {
 public:
     CosineRippleGaussItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(width, Width)
@@ -326,7 +326,7 @@ public:
 class CosineRippleLorentzItem : public FormFactorItem {
 public:
     CosineRippleLorentzItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(width, Width)
@@ -342,7 +342,7 @@ public:
 class SawtoothRippleBoxItem : public FormFactorItem {
 public:
     SawtoothRippleBoxItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(width, Width)
@@ -362,7 +362,7 @@ public:
 class SawtoothRippleGaussItem : public FormFactorItem {
 public:
     SawtoothRippleGaussItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(width, Width)
@@ -382,7 +382,7 @@ public:
 class SawtoothRippleLorentzItem : public FormFactorItem {
 public:
     SawtoothRippleLorentzItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(width, Width)
@@ -402,7 +402,7 @@ public:
 class Pyramid3Item : public FormFactorItem {
 public:
     Pyramid3Item();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(baseEdge, BaseEdge)
     FF_PROPERTY(height, Height)
@@ -418,7 +418,7 @@ public:
 class TruncatedCubeItem : public FormFactorItem {
 public:
     TruncatedCubeItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(length, Length)
     FF_PROPERTY(removedLength, RemovedLength)
@@ -433,7 +433,7 @@ public:
 class TruncatedSphereItem : public FormFactorItem {
 public:
     TruncatedSphereItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(radius, Radius)
     FF_PROPERTY(height, Height)
@@ -449,7 +449,7 @@ public:
 class TruncatedSpheroidItem : public FormFactorItem {
 public:
     TruncatedSpheroidItem();
-    std::unique_ptr<IBornFF> createFormFactor() const override;
+    std::unique_ptr<IFormFactor> createFormFactor() const override;
 
     FF_PROPERTY(radius, Radius)
     FF_PROPERTY(height, Height)
diff --git a/GUI/Model/Sample/MesoCrystalItem.cpp b/GUI/Model/Sample/MesoCrystalItem.cpp
index 054ca435d0ffad664888c46b24f1d8f0c68a7106..251923fb6d97ca0bfbfe5ffbb177078e4fa0b947 100644
--- a/GUI/Model/Sample/MesoCrystalItem.cpp
+++ b/GUI/Model/Sample/MesoCrystalItem.cpp
@@ -23,7 +23,7 @@
 #include "GUI/Support/XML/Serialize.h"
 #include "GUI/Util/Error.h"
 #include "Sample/Particle/Crystal.h"
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 #include "Sample/Particle/MesoCrystal.h"
 #include "Sample/Particle/Particle.h"
 #include "Sample/Particle/ParticleCoreShell.h"
@@ -79,7 +79,7 @@ std::unique_ptr<MesoCrystal> MesoCrystalItem::createMesoCrystal() const
                     "No basis particle defined");
     Crystal crystal(*basis, lattice);
 
-    std::unique_ptr<IBornFF> ff = getOuterShape();
+    std::unique_ptr<IFormFactor> ff = getOuterShape();
     if (!ff)
         throw Error("MesoCrystalItem::createMesoCrystal(): "
                     "No outer shape defined");
@@ -114,7 +114,7 @@ std::unique_ptr<IParticle> MesoCrystalItem::getBasis() const
     return {};
 }
 
-std::unique_ptr<IBornFF> MesoCrystalItem::getOuterShape() const
+std::unique_ptr<IFormFactor> MesoCrystalItem::getOuterShape() const
 {
     return m_outerShape->createFormFactor();
 }
diff --git a/GUI/Model/Sample/MesoCrystalItem.h b/GUI/Model/Sample/MesoCrystalItem.h
index 25f3dc0177ab845da557b38e1699d94a46ad93a7..5d07f4d0cfefe69565cca060af15c744ff847cd6 100644
--- a/GUI/Model/Sample/MesoCrystalItem.h
+++ b/GUI/Model/Sample/MesoCrystalItem.h
@@ -22,7 +22,7 @@
 #include "Sample/Lattice/Lattice3D.h"
 #include <memory>
 
-class IBornFF;
+class IFormFactor;
 class IParticle;
 class MesoCrystal;
 class MaterialItems;
@@ -37,7 +37,7 @@ public:
     Lattice3D getLattice() const;
     std::unique_ptr<IParticle> getBasis() const;
 
-    std::unique_ptr<IBornFF> getOuterShape() const;
+    std::unique_ptr<IFormFactor> getOuterShape() const;
     template <typename T>
     T* setOuterShapeType();
 
diff --git a/GUI/View/FromDomain/FromDomain.cpp b/GUI/View/FromDomain/FromDomain.cpp
index 3d86d99e242a6954ccedf531c06f415eba0f5437..8552a7a8ae2df71d9f76fc8b8de796380946bab0 100644
--- a/GUI/View/FromDomain/FromDomain.cpp
+++ b/GUI/View/FromDomain/FromDomain.cpp
@@ -831,7 +831,7 @@ void GUI::Transform::FromDomain::setInterference(ParticleLayoutItem* layoutItem,
 }
 
 void GUI::Transform::FromDomain::setFormFactor(std::variant<ParticleItem*, MesoCrystalItem*> parent,
-                                               const IBornFF* iFormFactor)
+                                               const IFormFactor* iFormFactor)
 {
     if (const auto* formfactor = dynamic_cast<const FormFactorPyramid2*>(iFormFactor)) {
         auto* formfactorItem = addFormFactorItem<Pyramid2Item>(parent);
diff --git a/GUI/View/FromDomain/FromDomain.h b/GUI/View/FromDomain/FromDomain.h
index 1de2a77a6fcaff3a6804b78ccb05909935071644..85a30718be0303f3668232aca3e991ffd39b1929 100644
--- a/GUI/View/FromDomain/FromDomain.h
+++ b/GUI/View/FromDomain/FromDomain.h
@@ -64,7 +64,7 @@ class ParticleLayoutItem;
 class IInterference;
 class ParticleItem;
 class MesoCrystalItem;
-class IBornFF;
+class IFormFactor;
 
 namespace GUI::Transform::FromDomain {
 
@@ -128,7 +128,7 @@ void setRotation(ItemWithParticles* item, const IRotation* rotation);
 void setInterference(ParticleLayoutItem* layoutItem, const IInterference* interference);
 
 void setFormFactor(std::variant<ParticleItem*, MesoCrystalItem*> parent,
-                   const IBornFF* iFormFactor);
+                   const IFormFactor* iFormFactor);
 
 } // namespace GUI::Transform::FromDomain
 
diff --git a/GUI/View/Realspace/RealSpaceBuilderUtils.cpp b/GUI/View/Realspace/RealSpaceBuilderUtils.cpp
index 014d83bde1a40b6f55f3981b3c0d1e9a8ac5a717..b04f611e596a81c80d0a2bcef416fb48dfa9fed7 100644
--- a/GUI/View/Realspace/RealSpaceBuilderUtils.cpp
+++ b/GUI/View/Realspace/RealSpaceBuilderUtils.cpp
@@ -35,12 +35,12 @@ namespace {
 
 const double layerBorderWidth = 10.0;
 
-const IBornFF* getUnderlyingFormFactor(const IBornFF* ff)
+const IFormFactor* getUnderlyingFormFactor(const IFormFactor* ff)
 {
     // TRUE as long as ff is of ReParticle (or its derived) type
     while (dynamic_cast<const ReParticle*>(ff))
         ff = dynamic_cast<const ReParticle*>(ff)->formfactor_at_bottom();
-    const auto* ffb = dynamic_cast<const IBornFF*>(ff);
+    const auto* ffb = dynamic_cast<const IFormFactor*>(ff);
     ASSERT(ffb);
     return ffb;
 }
@@ -259,7 +259,7 @@ Particle3DContainer GUI::RealSpace::BuilderUtils::singleParticle3DContainer(
 {
     std::unique_ptr<Particle> P_clone(particle.clone()); // clone of the particle
 
-    const IBornFF* ff = getUnderlyingFormFactor(P_clone->formfactor_at_bottom());
+    const IFormFactor* ff = getUnderlyingFormFactor(P_clone->formfactor_at_bottom());
 
     auto particle3D = GUI::View::TransformTo3D::createParticlefromFormfactor(ff);
     applyParticleTransformations(*P_clone, *particle3D, to_kvector(origin));
diff --git a/GUI/View/Realspace/RealSpaceMesoCrystalUtils.cpp b/GUI/View/Realspace/RealSpaceMesoCrystalUtils.cpp
index d720c51f0808c12619d17269bfdbfb6779c260a4..f0abde6eae2d0fb7f92cde08048113765752c20a 100644
--- a/GUI/View/Realspace/RealSpaceMesoCrystalUtils.cpp
+++ b/GUI/View/Realspace/RealSpaceMesoCrystalUtils.cpp
@@ -28,7 +28,7 @@ namespace {
 
 const int n = 10; // TODO: Adjust this parameter based on the size of the mesocrystal
 
-bool isPositionInsideMesoCrystal(const IBornFF* outerShape, R3 positionInside)
+bool isPositionInsideMesoCrystal(const IFormFactor* outerShape, R3 positionInside)
 {
     bool check(false);
     if (const auto* ff_Pyramid2 = dynamic_cast<const FormFactorPyramid2*>(outerShape)) {
diff --git a/GUI/View/Realspace/TransformTo3D.cpp b/GUI/View/Realspace/TransformTo3D.cpp
index 8c05d21ab27a1746a778da14ca43b70c7af6e34c..cf04db3ec06e29bf5daec1828cf5a2dc12aa5034 100644
--- a/GUI/View/Realspace/TransformTo3D.cpp
+++ b/GUI/View/Realspace/TransformTo3D.cpp
@@ -58,7 +58,7 @@ GUI::View::TransformTo3D::createLayer(const LayerItem& layerItem,
 }
 
 std::unique_ptr<GUI::RealSpace::Particles::Particle>
-GUI::View::TransformTo3D::createParticlefromFormfactor(const IBornFF* ff)
+GUI::View::TransformTo3D::createParticlefromFormfactor(const IFormFactor* ff)
 {
     if (const auto* ff_Pyramid2 = dynamic_cast<const FormFactorPyramid2*>(ff)) {
         double length = ff_Pyramid2->length();
diff --git a/GUI/View/Realspace/TransformTo3D.h b/GUI/View/Realspace/TransformTo3D.h
index c65f34456a49e795ef4f50b02edde7b539601a66..18302a5ff5089d1649f54468cbf886a5ec380fc0 100644
--- a/GUI/View/Realspace/TransformTo3D.h
+++ b/GUI/View/Realspace/TransformTo3D.h
@@ -24,7 +24,7 @@ class LayerItem;
 class ParticleItem;
 class SessionItem;
 struct SceneGeometry;
-class IBornFF;
+class IFormFactor;
 
 //! Collection of utility functions to build 3D objects from session items.
 
@@ -37,7 +37,7 @@ std::unique_ptr<GUI::RealSpace::Layer> createLayer(const LayerItem& layerItem,
                                                    const QVector3D& origin = {});
 
 std::unique_ptr<GUI::RealSpace::Particles::Particle>
-createParticlefromFormfactor(const IBornFF* ff);
+createParticlefromFormfactor(const IFormFactor* ff);
 
 } // namespace GUI::View::TransformTo3D
 
diff --git a/Resample/Particle/ReParticle.cpp b/Resample/Particle/ReParticle.cpp
index 64aac1438d24c6ed7b7b19baffed3ec4e5521d3c..9d462e2f2c074859cc0097e5f6b27b6820998ad1 100644
--- a/Resample/Particle/ReParticle.cpp
+++ b/Resample/Particle/ReParticle.cpp
@@ -17,10 +17,10 @@
 #include "Base/Vector/WavevectorInfo.h" // debug
 #include "Sample/Material/Material.h"
 #include "Sample/Material/MaterialFactoryFuncs.h"
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 #include "Sample/Scattering/Rotations.h"
 
-ReParticle::ReParticle(IBornFF* ff, const Material* material, const Material* ambient_material,
+ReParticle::ReParticle(IFormFactor* ff, const Material* material, const Material* ambient_material,
                        const R3* position, const RotMatrix* rotMatrix)
     : m_ff(std::move(ff))
     , m_material(std::move(material))
@@ -30,7 +30,7 @@ ReParticle::ReParticle(IBornFF* ff, const Material* material, const Material* am
 {
 }
 
-ReParticle::ReParticle(const IBornFF& ff)
+ReParticle::ReParticle(const IFormFactor& ff)
     : ReParticle(ff.clone(), nullptr, nullptr, nullptr, nullptr)
 {
 }
@@ -46,7 +46,7 @@ ReParticle* ReParticle::clone() const
 }
 
 
-ReParticle* ReParticle::createTransformedFormFactor(const IBornFF& formfactor, const IRotation* rot,
+ReParticle* ReParticle::createTransformedFormFactor(const IFormFactor& formfactor, const IRotation* rot,
                                                     R3 translation)
 {
     auto* result = new ReParticle(formfactor);
@@ -87,7 +87,7 @@ double ReParticle::radialExtension() const
     return m_ff->radialExtension();
 }
 
-const IBornFF* ReParticle::formfactor_at_bottom() const
+const IFormFactor* ReParticle::formfactor_at_bottom() const
 {
     return m_ff.get();
 }
diff --git a/Resample/Particle/ReParticle.h b/Resample/Particle/ReParticle.h
index 311ceca0d020f93db9907f0a364e6ff561e4f996..596c9a35f6783a27897c4b3d404a137c35371654 100644
--- a/Resample/Particle/ReParticle.h
+++ b/Resample/Particle/ReParticle.h
@@ -24,7 +24,7 @@
 #include <heinz/Vectors3D.h>
 #include <memory>
 
-class IBornFF;
+class IFormFactor;
 class Material;
 class RotMatrix;
 
@@ -32,7 +32,7 @@ class RotMatrix;
 
 class ReParticle : public IReParticle {
 public:
-    ReParticle(const IBornFF& ff);
+    ReParticle(const IFormFactor& ff);
     ~ReParticle() override;
 
     ReParticle* clone() const override;
@@ -59,18 +59,18 @@ public:
 
     double topZ(const IRotation* rotation) const override;
 
-    const IBornFF* formfactor_at_bottom() const;
+    const IFormFactor* formfactor_at_bottom() const;
 
     virtual complex_t formfactor_at_bottom(C3 q) const;
 
-    static ReParticle* createTransformedFormFactor(const IBornFF& formfactor, const IRotation* rot,
+    static ReParticle* createTransformedFormFactor(const IFormFactor& formfactor, const IRotation* rot,
                                                    R3 translation);
 
 protected:
-    std::unique_ptr<const IBornFF> m_ff;
+    std::unique_ptr<const IFormFactor> m_ff;
 
     // private:
-    ReParticle(IBornFF* ff, const Material* material, const Material* ambient_material,
+    ReParticle(IFormFactor* ff, const Material* material, const Material* ambient_material,
                const R3* position, const RotMatrix* rotMatrix);
 
     std::unique_ptr<const Material> m_material;
diff --git a/Resample/Processed/Slicer.cpp b/Resample/Processed/Slicer.cpp
index c704efb8bbd6b78edd666b6a65dce8f22a4f5794..276b306a2862fc4b4b4b58814257d335aeeb87bf 100644
--- a/Resample/Processed/Slicer.cpp
+++ b/Resample/Processed/Slicer.cpp
@@ -60,7 +60,7 @@ SlicingEffects computeSlicingEffects(ZLimits limits, const R3& position, double
     return {new_position, dz_bottom, dz_top};
 }
 
-bool shapeIsContainedInLimits(const IBornFF& formfactor, ZLimits limits, const IRotation* rotation,
+bool shapeIsContainedInLimits(const IFormFactor& formfactor, ZLimits limits, const IRotation* rotation,
                               R3 translation)
 {
     double zbottom = formfactor.bottomZ(rotation) + translation.z();
@@ -69,7 +69,7 @@ bool shapeIsContainedInLimits(const IBornFF& formfactor, ZLimits limits, const I
     return limits.zBottom() <= zbottom && ztop <= limits.zTop();
 }
 
-bool shapeOutsideLimits(const IBornFF& formfactor, ZLimits limits, const IRotation* rotation,
+bool shapeOutsideLimits(const IFormFactor& formfactor, ZLimits limits, const IRotation* rotation,
                         R3 translation)
 {
     double zbottom = formfactor.bottomZ(rotation) + translation.z();
@@ -78,7 +78,7 @@ bool shapeOutsideLimits(const IBornFF& formfactor, ZLimits limits, const IRotati
     return ztop <= limits.zBottom() || zbottom >= limits.zTop();
 }
 
-ReParticle* createParticleSlice(const IBornFF* ff, ZLimits limits, const IRotation* rot,
+ReParticle* createParticleSlice(const IFormFactor* ff, ZLimits limits, const IRotation* rot,
                                 R3 translation)
 {
     if (shapeOutsideLimits(*ff, limits, rot, translation))
@@ -316,7 +316,7 @@ ParticleInSlice Compute::Slicing::createParticleInSlice(const IParticle* particl
 
     } else if (const auto* p = dynamic_cast<const MesoCrystal*>(particle)) {
         const Crystal* crystal = &p->particleStructure();
-        const IBornFF* meso_formfactor = p->outerShape();
+        const IFormFactor* meso_formfactor = p->outerShape();
         ASSERT(crystal && meso_formfactor);
 
         double unit_cell_volume = crystal->lattice()->unitCellVolume();
diff --git a/Sample/ComponentBuilder/FormFactorComponents.h b/Sample/ComponentBuilder/FormFactorComponents.h
index 8f95caeb6f44792288a840a34160ff2065e91e46..3603ded1c6b1252b5ab962698d05361121ff758c 100644
--- a/Sample/ComponentBuilder/FormFactorComponents.h
+++ b/Sample/ComponentBuilder/FormFactorComponents.h
@@ -26,7 +26,7 @@
 //! @class FormFactorComponents
 //! @brief Predefined form factors for functional tests.
 
-class FormFactorComponents : public IRegistry<IBornFF> {
+class FormFactorComponents : public IRegistry<IFormFactor> {
 public:
     FormFactorComponents();
 };
diff --git a/Sample/HardParticle/FormFactorCone.cpp b/Sample/HardParticle/FormFactorCone.cpp
index faacb01b12a4130f7fcac05e1288b4ab5f2583e6..daef566f9606a449788fdf9630e50878749f0e16 100644
--- a/Sample/HardParticle/FormFactorCone.cpp
+++ b/Sample/HardParticle/FormFactorCone.cpp
@@ -21,7 +21,7 @@
 #include <limits>
 
 FormFactorCone::FormFactorCone(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_radius(m_P[0])
     , m_height(m_P[1])
     , m_alpha(m_P[2])
diff --git a/Sample/HardParticle/FormFactorCone.h b/Sample/HardParticle/FormFactorCone.h
index f44bbfa3092a7358b3746f4fbcd4c07e8955ed19..a1efcf473c0033af403a73ac7a7e2332c9bec1f4 100644
--- a/Sample/HardParticle/FormFactorCone.h
+++ b/Sample/HardParticle/FormFactorCone.h
@@ -15,12 +15,12 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORCONE_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORCONE_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! A conical frustum (cone truncated parallel to the base) with circular base.
 //! @ingroup hardParticle
 
-class FormFactorCone : public IBornFF {
+class FormFactorCone : public IFormFactor {
 public:
     FormFactorCone(double radius, double height, double alpha);
 #ifndef USER_API
diff --git a/Sample/HardParticle/FormFactorCylinder.cpp b/Sample/HardParticle/FormFactorCylinder.cpp
index 85e68e91a559e7b2f61610efb59d2fdc8ef47549..b4ab6081f7bd9c176622e69f8883517ac37a75cf 100644
--- a/Sample/HardParticle/FormFactorCylinder.cpp
+++ b/Sample/HardParticle/FormFactorCylinder.cpp
@@ -19,7 +19,7 @@
 #include "Sample/Shapes/DoubleEllipse.h"
 
 FormFactorCylinder::FormFactorCylinder(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_radius(m_P[0])
     , m_height(m_P[1])
 {
diff --git a/Sample/HardParticle/FormFactorCylinder.h b/Sample/HardParticle/FormFactorCylinder.h
index 95e83e096ca26d22d94dde3068248800e2e759ed..1f6ad845ce7ed1d759d8ac5efb2cee0248b93289 100644
--- a/Sample/HardParticle/FormFactorCylinder.h
+++ b/Sample/HardParticle/FormFactorCylinder.h
@@ -15,12 +15,12 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORCYLINDER_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORCYLINDER_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! A circular cylinder.
 //! @ingroup hardParticle
 
-class FormFactorCylinder : public IBornFF {
+class FormFactorCylinder : public IFormFactor {
 public:
     FormFactorCylinder(double radius, double height);
 #ifndef USER_API
diff --git a/Sample/HardParticle/FormFactorEllipsoidalCylinder.cpp b/Sample/HardParticle/FormFactorEllipsoidalCylinder.cpp
index 398364954bf63b2496dcf174f1f31d6529f1926c..8dfdbb1d7260ef995f4a0033d6d6236b2d2a1ecc 100644
--- a/Sample/HardParticle/FormFactorEllipsoidalCylinder.cpp
+++ b/Sample/HardParticle/FormFactorEllipsoidalCylinder.cpp
@@ -19,7 +19,7 @@
 #include "Sample/Shapes/DoubleEllipse.h"
 
 FormFactorEllipsoidalCylinder::FormFactorEllipsoidalCylinder(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_radius_x(m_P[0])
     , m_radius_y(m_P[1])
     , m_height(m_P[2])
diff --git a/Sample/HardParticle/FormFactorEllipsoidalCylinder.h b/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
index 85c181f5448c6f7230423d818d2d8e7f096bd97a..a8b4383a329dbdb161c18f35f3b3936ec8dbd7f3 100644
--- a/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
+++ b/Sample/HardParticle/FormFactorEllipsoidalCylinder.h
@@ -15,12 +15,12 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORELLIPSOIDALCYLINDER_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORELLIPSOIDALCYLINDER_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! A cylinder with elliptical base.
 //! @ingroup hardParticle
 
-class FormFactorEllipsoidalCylinder : public IBornFF {
+class FormFactorEllipsoidalCylinder : public IFormFactor {
 public:
     FormFactorEllipsoidalCylinder(double radius_x, double radius_y, double height);
 #ifndef USER_API
diff --git a/Sample/HardParticle/FormFactorFullSphere.cpp b/Sample/HardParticle/FormFactorFullSphere.cpp
index cfc61881201c42d4d75d086d878e5b270625e0a7..4a9bb54114b9bb09f0e75caabd259b418dcf30d1 100644
--- a/Sample/HardParticle/FormFactorFullSphere.cpp
+++ b/Sample/HardParticle/FormFactorFullSphere.cpp
@@ -19,7 +19,7 @@
 #include "Sample/Scattering/Rotations.h"
 
 FormFactorFullSphere::FormFactorFullSphere(const std::vector<double> P, bool position_at_center)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_radius(m_P[0])
     , m_position_at_center(position_at_center)
 {
diff --git a/Sample/HardParticle/FormFactorFullSphere.h b/Sample/HardParticle/FormFactorFullSphere.h
index 1e453a960ea761fcca6e1fcfeeb6ee6c6bf6aeb6..2c461876aa69c9c9009361d018000a95690809df 100644
--- a/Sample/HardParticle/FormFactorFullSphere.h
+++ b/Sample/HardParticle/FormFactorFullSphere.h
@@ -15,12 +15,12 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORFULLSPHERE_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORFULLSPHERE_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! A full sphere.
 //! @ingroup hardParticle
 
-class FormFactorFullSphere : public IBornFF {
+class FormFactorFullSphere : public IFormFactor {
 public:
     FormFactorFullSphere(double radius, bool position_at_center = false);
 #ifndef USER_API
diff --git a/Sample/HardParticle/FormFactorFullSpheroid.cpp b/Sample/HardParticle/FormFactorFullSpheroid.cpp
index 5464d339983500ba3d921ca7ca0fa8e951cffa2d..4cc721e1ba3ca3cc562be823272e6b5dbd7dda7a 100644
--- a/Sample/HardParticle/FormFactorFullSpheroid.cpp
+++ b/Sample/HardParticle/FormFactorFullSpheroid.cpp
@@ -20,7 +20,7 @@
 #include <limits>
 
 FormFactorFullSpheroid::FormFactorFullSpheroid(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_radius(m_P[0])
     , m_height(m_P[1])
 {
diff --git a/Sample/HardParticle/FormFactorFullSpheroid.h b/Sample/HardParticle/FormFactorFullSpheroid.h
index b785d40e92baa7a7b80214b1cb7ed982b601cf29..2d61866b7b7ccc5ec56590e3549884586c06824e 100644
--- a/Sample/HardParticle/FormFactorFullSpheroid.h
+++ b/Sample/HardParticle/FormFactorFullSpheroid.h
@@ -15,12 +15,12 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORFULLSPHEROID_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORFULLSPHEROID_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! A full spheroid (an ellipsoid with two equal axes, hence with circular cross section)
 //! @ingroup hardParticle
 
-class FormFactorFullSpheroid : public IBornFF {
+class FormFactorFullSpheroid : public IFormFactor {
 public:
     FormFactorFullSpheroid(double radius, double height);
 #ifndef USER_API
diff --git a/Sample/HardParticle/FormFactorHemiEllipsoid.cpp b/Sample/HardParticle/FormFactorHemiEllipsoid.cpp
index 7c41eaf11eccca8c5b1d17426e3ac5cbde6c2742..6939c382c83c73536e7366b86d2c137498bef2fc 100644
--- a/Sample/HardParticle/FormFactorHemiEllipsoid.cpp
+++ b/Sample/HardParticle/FormFactorHemiEllipsoid.cpp
@@ -20,7 +20,7 @@
 #include <limits>
 
 FormFactorHemiEllipsoid::FormFactorHemiEllipsoid(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_radius_x(m_P[0])
     , m_radius_y(m_P[1])
     , m_height(m_P[2])
diff --git a/Sample/HardParticle/FormFactorHemiEllipsoid.h b/Sample/HardParticle/FormFactorHemiEllipsoid.h
index 36da169067f5de6d6b95d3378bdbd92664d4d52c..fcad92e68f4ad29190f47da74d3d8340cb886456 100644
--- a/Sample/HardParticle/FormFactorHemiEllipsoid.h
+++ b/Sample/HardParticle/FormFactorHemiEllipsoid.h
@@ -15,13 +15,13 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORHEMIELLIPSOID_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORHEMIELLIPSOID_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! An hemi ellipsoid,
 //!   obtained by truncating a full ellipsoid in the middle plane spanned by two principal axes.
 //! @ingroup hardParticle
 
-class FormFactorHemiEllipsoid : public IBornFF {
+class FormFactorHemiEllipsoid : public IFormFactor {
 public:
     FormFactorHemiEllipsoid(double radius_x, double radius_y, double height);
 #ifndef USER_API
diff --git a/Sample/HardParticle/FormFactorHollowSphere.cpp b/Sample/HardParticle/FormFactorHollowSphere.cpp
index babf0bf8d8bb309948da2cf4ae7f57682c67824c..1baefd9aeb2e49e26996d583ee43b5055655de86 100644
--- a/Sample/HardParticle/FormFactorHollowSphere.cpp
+++ b/Sample/HardParticle/FormFactorHollowSphere.cpp
@@ -18,7 +18,7 @@
 #include <limits>
 
 FormFactorHollowSphere::FormFactorHollowSphere(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_mean(m_P[0])
     , m_full_width(m_P[1])
 {
diff --git a/Sample/HardParticle/FormFactorHollowSphere.h b/Sample/HardParticle/FormFactorHollowSphere.h
index 335bcf16f1f2d552efd3eb3071b7f6e5dfc69d22..0b24ec5cb5c95edb4ea8025a309cb9b440f0f1cd 100644
--- a/Sample/HardParticle/FormFactorHollowSphere.h
+++ b/Sample/HardParticle/FormFactorHollowSphere.h
@@ -20,7 +20,7 @@
 //! Integrated full sphere form factor over a uniform distribution of radii.
 //! @ingroup softParticle
 
-class FormFactorHollowSphere : public IBornFF {
+class FormFactorHollowSphere : public IFormFactor {
 public:
     FormFactorHollowSphere(double mean, double full_width);
 #ifndef USER_API
diff --git a/Sample/HardParticle/FormFactorHorizontalCylinder.cpp b/Sample/HardParticle/FormFactorHorizontalCylinder.cpp
index 605390cc059a721863f7c995432e06353605851c..f500c2f8ffd4307331b5e0ee7f38b1ec26e79f8d 100644
--- a/Sample/HardParticle/FormFactorHorizontalCylinder.cpp
+++ b/Sample/HardParticle/FormFactorHorizontalCylinder.cpp
@@ -20,7 +20,7 @@
 #include "Sample/Shapes/DoubleEllipse.h"
 
 FormFactorHorizontalCylinder::FormFactorHorizontalCylinder(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_radius(m_P[0])
     , m_length(m_P[1])
     , m_slice_bottom(m_P[2])
diff --git a/Sample/HardParticle/FormFactorHorizontalCylinder.h b/Sample/HardParticle/FormFactorHorizontalCylinder.h
index 5a8fd2ae52711e5c941e17214357e0b36a624fa8..0652dc585842c431b076eaff6666fa57413d1137 100644
--- a/Sample/HardParticle/FormFactorHorizontalCylinder.h
+++ b/Sample/HardParticle/FormFactorHorizontalCylinder.h
@@ -15,12 +15,12 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORHORIZONTALCYLINDER_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORHORIZONTALCYLINDER_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! A circular cylinder.
 //! @ingroup hardParticle
 
-class FormFactorHorizontalCylinder : public IBornFF {
+class FormFactorHorizontalCylinder : public IFormFactor {
 public:
     FormFactorHorizontalCylinder(double radius, double length, double slice_bottom,
                                  double slice_top);
diff --git a/Sample/HardParticle/FormFactorLongBoxGauss.cpp b/Sample/HardParticle/FormFactorLongBoxGauss.cpp
index e57a3d0fb11af8772828437321ceffb2f2e47b5b..1faae5f02c70c3f42a11951c8fe879573397571d 100644
--- a/Sample/HardParticle/FormFactorLongBoxGauss.cpp
+++ b/Sample/HardParticle/FormFactorLongBoxGauss.cpp
@@ -17,7 +17,7 @@
 #include "Sample/Shapes/Box.h"
 
 FormFactorLongBoxGauss::FormFactorLongBoxGauss(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_length(m_P[0])
     , m_width(m_P[1])
     , m_height(m_P[2])
diff --git a/Sample/HardParticle/FormFactorLongBoxGauss.h b/Sample/HardParticle/FormFactorLongBoxGauss.h
index 5c7add330b6629e485e7ff05fa268fef09d0b288..9ac4f8aa67fc5e9510f4d07e9ba0f810871704b4 100644
--- a/Sample/HardParticle/FormFactorLongBoxGauss.h
+++ b/Sample/HardParticle/FormFactorLongBoxGauss.h
@@ -15,12 +15,12 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORLONGBOXGAUSS_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORLONGBOXGAUSS_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! The form factor for a long rectangular box.
 //! @ingroup legacyGrating
 
-class FormFactorLongBoxGauss : public IBornFF {
+class FormFactorLongBoxGauss : public IFormFactor {
 public:
     FormFactorLongBoxGauss(double length, double width, double height);
 #ifndef USER_API
diff --git a/Sample/HardParticle/FormFactorLongBoxLorentz.cpp b/Sample/HardParticle/FormFactorLongBoxLorentz.cpp
index 7929f46e4a872e9692997fd0e152e0d53fed3105..427b066f10783d6c180ea81fc7d20e67f8132474 100644
--- a/Sample/HardParticle/FormFactorLongBoxLorentz.cpp
+++ b/Sample/HardParticle/FormFactorLongBoxLorentz.cpp
@@ -17,7 +17,7 @@
 #include "Sample/Shapes/Box.h"
 
 FormFactorLongBoxLorentz::FormFactorLongBoxLorentz(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_length(m_P[0])
     , m_width(m_P[1])
     , m_height(m_P[2])
diff --git a/Sample/HardParticle/FormFactorLongBoxLorentz.h b/Sample/HardParticle/FormFactorLongBoxLorentz.h
index f8debf2e84ac7bcf12e750e7bb4789e18e8ec6b8..1f73c5cc0e4877180baa0954e31f6dc5efac6f5b 100644
--- a/Sample/HardParticle/FormFactorLongBoxLorentz.h
+++ b/Sample/HardParticle/FormFactorLongBoxLorentz.h
@@ -15,12 +15,12 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORLONGBOXLORENTZ_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORLONGBOXLORENTZ_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! The form factor for a long rectangular box.
 //! @ingroup legacyGrating
 
-class FormFactorLongBoxLorentz : public IBornFF {
+class FormFactorLongBoxLorentz : public IFormFactor {
 public:
     FormFactorLongBoxLorentz(double length, double width, double height);
 #ifndef USER_API
diff --git a/Sample/HardParticle/FormFactorTruncatedSphere.cpp b/Sample/HardParticle/FormFactorTruncatedSphere.cpp
index 6fac46dd7a5cff1e6876051e058d02a1fdf5aa0d..3ee15dfb59cb978dc24969fb32f63be2e07c337c 100644
--- a/Sample/HardParticle/FormFactorTruncatedSphere.cpp
+++ b/Sample/HardParticle/FormFactorTruncatedSphere.cpp
@@ -20,7 +20,7 @@
 #include <limits>
 
 FormFactorTruncatedSphere::FormFactorTruncatedSphere(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_radius(m_P[0])
     , m_height(m_P[1])
     , m_dh(m_P[2])
diff --git a/Sample/HardParticle/FormFactorTruncatedSphere.h b/Sample/HardParticle/FormFactorTruncatedSphere.h
index 79770633915046fb2d3ef92e937e518ff4ae1ebd..418a1257f9ceb77c219f8e8bd7265455cdb03876 100644
--- a/Sample/HardParticle/FormFactorTruncatedSphere.h
+++ b/Sample/HardParticle/FormFactorTruncatedSphere.h
@@ -15,12 +15,12 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORTRUNCATEDSPHERE_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORTRUNCATEDSPHERE_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! A truncated Sphere.
 //! @ingroup hardParticle
 
-class FormFactorTruncatedSphere : public IBornFF {
+class FormFactorTruncatedSphere : public IFormFactor {
 public:
     FormFactorTruncatedSphere(double radius, double height, double dh);
 #ifndef USER_API
diff --git a/Sample/HardParticle/FormFactorTruncatedSpheroid.cpp b/Sample/HardParticle/FormFactorTruncatedSpheroid.cpp
index 0a5925ec3fcb135bf8f1e6fec499b19b786f4c45..b1d93248b6407885614492f7c12c4e17e2e08f38 100644
--- a/Sample/HardParticle/FormFactorTruncatedSpheroid.cpp
+++ b/Sample/HardParticle/FormFactorTruncatedSpheroid.cpp
@@ -20,7 +20,7 @@
 #include <limits>
 
 FormFactorTruncatedSpheroid::FormFactorTruncatedSpheroid(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_radius(m_P[0])
     , m_height(m_P[1])
     , m_height_flattening(m_P[2])
diff --git a/Sample/HardParticle/FormFactorTruncatedSpheroid.h b/Sample/HardParticle/FormFactorTruncatedSpheroid.h
index 9510bbeda264f2011a2487025cb7bfee47283359..fc270dbff26f7fb07c18e5a6a2399e35e8487251 100644
--- a/Sample/HardParticle/FormFactorTruncatedSpheroid.h
+++ b/Sample/HardParticle/FormFactorTruncatedSpheroid.h
@@ -15,13 +15,13 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORTRUNCATEDSPHEROID_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_FORMFACTORTRUNCATEDSPHEROID_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! A truncated spheroid.
 //! An ellipsoid with two equal axis, truncated by a plane perpendicular to the third axis.
 //! @ingroup hardParticle
 
-class FormFactorTruncatedSpheroid : public IBornFF {
+class FormFactorTruncatedSpheroid : public IFormFactor {
 public:
     FormFactorTruncatedSpheroid(double radius, double height, double height_flattening, double dh);
 #ifndef USER_API
diff --git a/Sample/HardParticle/IFormFactorPolyhedron.cpp b/Sample/HardParticle/IFormFactorPolyhedron.cpp
index 41b97dcb0d9341b029100f61ded86044395e242f..e6c45bf19a75be2a2609ee661e9d8a4f86642103 100644
--- a/Sample/HardParticle/IFormFactorPolyhedron.cpp
+++ b/Sample/HardParticle/IFormFactorPolyhedron.cpp
@@ -30,7 +30,7 @@
 // #endif
 
 IFormFactorPolyhedron::IFormFactorPolyhedron(const std::vector<double>& PValues)
-    : IBornFF(PValues)
+    : IFormFactor(PValues)
 {
 }
 
diff --git a/Sample/HardParticle/IFormFactorPolyhedron.h b/Sample/HardParticle/IFormFactorPolyhedron.h
index d20457942b05327c23018e790a0f100ff282fae6..6c5fe75266f1c288129c2d01eb03478297d656f3 100644
--- a/Sample/HardParticle/IFormFactorPolyhedron.h
+++ b/Sample/HardParticle/IFormFactorPolyhedron.h
@@ -16,7 +16,7 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_IFORMFACTORPOLYHEDRON_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_IFORMFACTORPOLYHEDRON_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 #include <ff/PolyhedralTopology.h>
 #include <memory>
 
@@ -27,7 +27,7 @@ class Polyhedron;
 
 //! A polyhedron, for form factor computation.
 
-class IFormFactorPolyhedron : public IBornFF {
+class IFormFactorPolyhedron : public IFormFactor {
 public:
     // #ifdef ALGORITHM_DIAGNOSTIC
     //     static void setLimits(double _q, int _n);
diff --git a/Sample/HardParticle/IFormFactorPrism.cpp b/Sample/HardParticle/IFormFactorPrism.cpp
index b1a5e6e03dd5647b23e9cdb01c1710517575e1c6..0a430ab62e67003b87096ebb39cfff6f554749b9 100644
--- a/Sample/HardParticle/IFormFactorPrism.cpp
+++ b/Sample/HardParticle/IFormFactorPrism.cpp
@@ -17,7 +17,7 @@
 #include <ff/Prism.h>
 
 IFormFactorPrism::IFormFactorPrism(const std::vector<double>& PValues)
-    : IBornFF(PValues)
+    : IFormFactor(PValues)
 {
 }
 
diff --git a/Sample/HardParticle/IFormFactorPrism.h b/Sample/HardParticle/IFormFactorPrism.h
index a27da07a836d0ab9fed28571e2b88744489d6a46..8e22f60d3a49cf7dd7b23120603d116bf6aee292 100644
--- a/Sample/HardParticle/IFormFactorPrism.h
+++ b/Sample/HardParticle/IFormFactorPrism.h
@@ -16,7 +16,7 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_IFORMFACTORPRISM_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_IFORMFACTORPRISM_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 #include <memory>
 
 namespace ff {
@@ -28,7 +28,7 @@ class Prism;
 
 //! A prism with a polygonal base, for form factor computation.
 
-class IFormFactorPrism : public IBornFF {
+class IFormFactorPrism : public IFormFactor {
 public:
     IFormFactorPrism(const std::vector<double>& PValues);
     ~IFormFactorPrism() override;
diff --git a/Sample/HardParticle/IProfileRipple.cpp b/Sample/HardParticle/IProfileRipple.cpp
index a7d8ee4d49faba4bcb485171c20d50e75bb12512..fb755819e37d25b9d72f383b24186dbc4c6b188d 100644
--- a/Sample/HardParticle/IProfileRipple.cpp
+++ b/Sample/HardParticle/IProfileRipple.cpp
@@ -23,7 +23,7 @@
 //  ************************************************************************************************
 
 IProfileRipple::IProfileRipple(const std::vector<double>& PValues)
-    : IBornFF(PValues)
+    : IFormFactor(PValues)
     , m_length(m_P[0])
     , m_width(m_P[1])
     , m_height(m_P[2])
diff --git a/Sample/HardParticle/IProfileRipple.h b/Sample/HardParticle/IProfileRipple.h
index 810a2c6faf173601e8451a820af0b7d3e6a7a8b1..a20919173ffb7536bac4a13f866665ae76440c95 100644
--- a/Sample/HardParticle/IProfileRipple.h
+++ b/Sample/HardParticle/IProfileRipple.h
@@ -16,11 +16,11 @@
 #ifndef BORNAGAIN_SAMPLE_HARDPARTICLE_IPROFILERIPPLE_H
 #define BORNAGAIN_SAMPLE_HARDPARTICLE_IPROFILERIPPLE_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! Base class for form factors with a cosine ripple profile in the yz plane.
 
-class IProfileRipple : public IBornFF {
+class IProfileRipple : public IFormFactor {
 public:
     IProfileRipple(const std::vector<double>& PValues);
 
diff --git a/Sample/Particle/IBornFF.cpp b/Sample/Particle/IFormFactor.cpp
similarity index 69%
rename from Sample/Particle/IBornFF.cpp
rename to Sample/Particle/IFormFactor.cpp
index 02164d23baea57f915e8f556421c04f7283e61ff..5efa7f104512214d4da21cdfa285fce62499f4e4 100644
--- a/Sample/Particle/IBornFF.cpp
+++ b/Sample/Particle/IFormFactor.cpp
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Sample/Particle/IBornFF.cpp
-//! @brief     Implements interface class IBornFF.
+//! @file      Sample/Particle/IFormFactor.cpp
+//! @brief     Implements interface class IFormFactor.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -12,7 +12,7 @@
 //
 //  ************************************************************************************************
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 #include "Base/Py/PyFmt.h"
 #include "Base/Util/StringUtils.h"
 #include "Base/Vector/WavevectorInfo.h"
@@ -21,52 +21,52 @@
 #include "Sample/Shapes/IShape3D.h"
 #include <stdexcept>
 
-IBornFF::IBornFF() = default;
+IFormFactor::IFormFactor() = default;
 
-IBornFF::IBornFF(const std::vector<double>& PValues)
+IFormFactor::IFormFactor(const std::vector<double>& PValues)
     : ISampleNode(PValues)
 {
 }
 
-IBornFF::~IBornFF() = default;
+IFormFactor::~IFormFactor() = default;
 
-std::string IBornFF::shapeName() const
+std::string IFormFactor::shapeName() const
 {
     if (className().substr(0, 10) == "FormFactor")
         return className().substr(10);
     return className();
 }
 
-complex_t IBornFF::theFF(const WavevectorInfo& wavevectors) const
+complex_t IFormFactor::theFF(const WavevectorInfo& wavevectors) const
 {
     return formfactor_at_bottom(wavevectors.getQ());
 }
 
-Eigen::Matrix2cd IBornFF::thePolFF(const WavevectorInfo& wavevectors) const
+Eigen::Matrix2cd IFormFactor::thePolFF(const WavevectorInfo& wavevectors) const
 {
     return formfactor_pol(wavevectors.getQ());
 }
 
-double IBornFF::bottomZ(const IRotation* rotation) const
+double IFormFactor::bottomZ(const IRotation* rotation) const
 {
     if (!m_shape3D)
         throw std::runtime_error("Bug: Form factor has no m_shape3D, cannot compute bottom z");
     return PolyhedralUtil::BottomZ(m_shape3D->vertices(), rotation);
 }
 
-double IBornFF::topZ(const IRotation* rotation) const
+double IFormFactor::topZ(const IRotation* rotation) const
 {
     if (!m_shape3D)
         throw std::runtime_error("Bug: Form factor has no m_shape3D, cannot compute top z");
     return PolyhedralUtil::TopZ(m_shape3D->vertices(), rotation);
 }
 
-bool IBornFF::canSliceAnalytically(const IRotation* rotation) const
+bool IFormFactor::canSliceAnalytically(const IRotation* rotation) const
 {
     return !rotation || rotation->zInvariant();
 }
 
-std::string IBornFF::pythonConstructor() const
+std::string IFormFactor::pythonConstructor() const
 {
     std::vector<std::pair<double, std::string>> arguments;
     for (size_t i = 0; i < parDefs().size(); i++)
@@ -75,12 +75,12 @@ std::string IBornFF::pythonConstructor() const
     return Py::Fmt::printFunction(className(), arguments);
 }
 
-Eigen::Matrix2cd IBornFF::formfactor_pol(C3 q) const
+Eigen::Matrix2cd IFormFactor::formfactor_pol(C3 q) const
 {
     return formfactor_at_bottom(q) * Eigen::Matrix2cd::Identity();
 }
 
-double IBornFF::volume() const
+double IFormFactor::volume() const
 {
     return std::abs(formfactor_at_bottom(C3()));
 }
diff --git a/Sample/Particle/IBornFF.h b/Sample/Particle/IFormFactor.h
similarity index 86%
rename from Sample/Particle/IBornFF.h
rename to Sample/Particle/IFormFactor.h
index 9f5d60e240eb43c070ea36c46297aad81d8f009c..5f978d9adea9bbe1a8e4def87d74f8ce6a3c2859 100644
--- a/Sample/Particle/IBornFF.h
+++ b/Sample/Particle/IFormFactor.h
@@ -2,7 +2,7 @@
 //
 //  BornAgain: simulate and fit reflection and scattering
 //
-//! @file      Sample/Particle/IBornFF.h
+//! @file      Sample/Particle/IFormFactor.h
 //! @brief     Defines interface IDecoratableBorn.
 //!
 //! @homepage  http://www.bornagainproject.org
@@ -13,8 +13,8 @@
 //  ************************************************************************************************
 
 #ifndef USER_API
-#ifndef BORNAGAIN_SAMPLE_PARTICLE_IBORNFF_H
-#define BORNAGAIN_SAMPLE_PARTICLE_IBORNFF_H
+#ifndef BORNAGAIN_SAMPLE_PARTICLE_IFORMFACTOR_H
+#define BORNAGAIN_SAMPLE_PARTICLE_IFORMFACTOR_H
 
 #include "Sample/Scattering/ISampleNode.h"
 #include <Eigen/Core>
@@ -31,13 +31,13 @@ class WavevectorInfo;
 //! on the incoming and outgoing wave vectors ki and kf, except through their
 //! difference, the scattering vector q=ki-kf.
 
-class IBornFF : public ISampleNode {
+class IFormFactor : public ISampleNode {
 public:
-    IBornFF();
-    IBornFF(const std::vector<double>& PValues);
-    ~IBornFF() override;
+    IFormFactor();
+    IFormFactor(const std::vector<double>& PValues);
+    ~IFormFactor() override;
 
-    IBornFF* clone() const override = 0;
+    IFormFactor* clone() const override = 0;
 
     virtual complex_t theFF(const WavevectorInfo& wavevectors) const;
 
@@ -76,5 +76,5 @@ protected:
     std::unique_ptr<IShape3D> m_shape3D;
 };
 
-#endif // BORNAGAIN_SAMPLE_PARTICLE_IBORNFF_H
+#endif // BORNAGAIN_SAMPLE_PARTICLE_IFORMFACTOR_H
 #endif // USER_API
diff --git a/Sample/Particle/MesoCrystal.cpp b/Sample/Particle/MesoCrystal.cpp
index 6da62960e4e5e81d3b747135067d3ed29be19834..1c1e12d5aea4a67c19d3c596276735779aa4b132 100644
--- a/Sample/Particle/MesoCrystal.cpp
+++ b/Sample/Particle/MesoCrystal.cpp
@@ -15,16 +15,16 @@
 #include "Sample/Particle/MesoCrystal.h"
 #include "Base/Util/Assert.h"
 #include "Sample/Particle/Crystal.h"
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 #include "Sample/Scattering/Rotations.h"
 
-MesoCrystal::MesoCrystal(Crystal* crystal, IBornFF* formfactor)
+MesoCrystal::MesoCrystal(Crystal* crystal, IFormFactor* formfactor)
     : m_crystal(crystal)
     , m_meso_formfactor(formfactor)
 {
 }
 
-MesoCrystal::MesoCrystal(const Crystal& crystal, const IBornFF& formfactor)
+MesoCrystal::MesoCrystal(const Crystal& crystal, const IFormFactor& formfactor)
     : MesoCrystal(crystal.clone(), formfactor.clone())
 {
 }
diff --git a/Sample/Particle/MesoCrystal.h b/Sample/Particle/MesoCrystal.h
index da248d6620a26848c090789df7bb14f3e563b6ff..2b66a1916ccf26954e35c2910e347fcc9a4e6770 100644
--- a/Sample/Particle/MesoCrystal.h
+++ b/Sample/Particle/MesoCrystal.h
@@ -17,7 +17,7 @@
 
 #include "Sample/Particle/IParticle.h"
 
-class IBornFF;
+class IFormFactor;
 class Crystal;
 
 //! A particle with a crystalline inner structure, made of smaller particles,
@@ -26,7 +26,7 @@ class Crystal;
 
 class MesoCrystal : public IParticle {
 public:
-    MesoCrystal(const Crystal& crystal, const IBornFF& formfactor);
+    MesoCrystal(const Crystal& crystal, const IFormFactor& formfactor);
 
     ~MesoCrystal() override;
 
@@ -34,14 +34,14 @@ public:
     std::string className() const final { return "MesoCrystal"; }
     std::vector<const INode*> nodeChildren() const override;
 
-    const IBornFF* outerShape() const { return m_meso_formfactor.get(); }
+    const IFormFactor* outerShape() const { return m_meso_formfactor.get(); }
     const Crystal& particleStructure() const;
 
 private:
-    MesoCrystal(Crystal* crystal, IBornFF* formfactor);
+    MesoCrystal(Crystal* crystal, IFormFactor* formfactor);
 
     const std::unique_ptr<Crystal> m_crystal;         //!< Crystalline inner structure
-    const std::unique_ptr<IBornFF> m_meso_formfactor; //!< Outer shape of the mesocrystal
+    const std::unique_ptr<IFormFactor> m_meso_formfactor; //!< Outer shape of the mesocrystal
 };
 
 #endif // BORNAGAIN_SAMPLE_PARTICLE_MESOCRYSTAL_H
diff --git a/Sample/Particle/Particle.cpp b/Sample/Particle/Particle.cpp
index 8f159288d280505dc4d4422f5716fa426638588f..5aade9ccbeb5fecece40863af9f817ff0164b927 100644
--- a/Sample/Particle/Particle.cpp
+++ b/Sample/Particle/Particle.cpp
@@ -17,13 +17,13 @@
 #include "Base/Vector/RotMatrix.h"
 #include "Sample/Scattering/Rotations.h"
 
-Particle::Particle(Material material, const IBornFF& formfactor)
+Particle::Particle(Material material, const IFormFactor& formfactor)
     : m_material(std::move(material))
     , m_formfactor(formfactor.clone())
 {
 }
 
-Particle::Particle(Material material, const IBornFF& formfactor, const IRotation& rotation)
+Particle::Particle(Material material, const IFormFactor& formfactor, const IRotation& rotation)
     : Particle(material, formfactor)
 {
     setRotation(rotation);
diff --git a/Sample/Particle/Particle.h b/Sample/Particle/Particle.h
index 2468a25a5c8695c3f7311ed030b252940ff5fe2e..30fe645482806f69f06a6acd92cd007a1adcf0ee 100644
--- a/Sample/Particle/Particle.h
+++ b/Sample/Particle/Particle.h
@@ -16,7 +16,7 @@
 #define BORNAGAIN_SAMPLE_PARTICLE_PARTICLE_H
 
 #include "Sample/Material/Material.h"
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 #include "Sample/Particle/IParticle.h"
 
 //! A particle with a form factor and refractive index.
@@ -24,8 +24,8 @@
 
 class Particle : public IParticle {
 public:
-    Particle(Material material, const IBornFF& formfactor);
-    Particle(Material material, const IBornFF& formfactor, const IRotation& rotation);
+    Particle(Material material, const IFormFactor& formfactor);
+    Particle(Material material, const IFormFactor& formfactor, const IRotation& rotation);
     ~Particle() override;
 
     Particle* clone() const override;
@@ -34,11 +34,11 @@ public:
 
     const Material* material() const override { return &m_material; }
 
-    const IBornFF* formfactor_at_bottom() const { return m_formfactor.get(); }
+    const IFormFactor* formfactor_at_bottom() const { return m_formfactor.get(); }
 
 private:
     const Material m_material;
-    std::unique_ptr<const IBornFF> m_formfactor;
+    std::unique_ptr<const IFormFactor> m_formfactor;
 };
 
 #endif // BORNAGAIN_SAMPLE_PARTICLE_PARTICLE_H
diff --git a/Sample/Particle/PolyhedralUtil.cpp b/Sample/Particle/PolyhedralUtil.cpp
index 987a20d821a75defadfc0a8ae648f344158e6ae5..14312f87e9ced3fefa56de075dbfaf7be014d5d6 100644
--- a/Sample/Particle/PolyhedralUtil.cpp
+++ b/Sample/Particle/PolyhedralUtil.cpp
@@ -3,7 +3,7 @@
 //  BornAgain: simulate and fit reflection and scattering
 //
 //! @file      Sample/Particle/PolyhedralUtil.cpp
-//! @brief     Implements interface class IBornFF.
+//! @brief     Implements interface class IFormFactor.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
diff --git a/Sample/SoftParticle/FormFactorGauss.cpp b/Sample/SoftParticle/FormFactorGauss.cpp
index d0c0c021fdd86eccfad7409c7abf32e557ccf976..6e115ba440e8d6528d0b0c8ad5a7e163147b57cf 100644
--- a/Sample/SoftParticle/FormFactorGauss.cpp
+++ b/Sample/SoftParticle/FormFactorGauss.cpp
@@ -18,7 +18,7 @@
 #include <limits>
 
 FormFactorGaussSphere::FormFactorGaussSphere(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_mean_radius(m_P[0])
 {
     checkNodeArgs();
diff --git a/Sample/SoftParticle/FormFactorGauss.h b/Sample/SoftParticle/FormFactorGauss.h
index 62a72eee3a96669d68e1ce7cd8d9fccc4d5cacaa..3afb409d7fb51b9ee877507a58ffc030a817632b 100644
--- a/Sample/SoftParticle/FormFactorGauss.h
+++ b/Sample/SoftParticle/FormFactorGauss.h
@@ -15,12 +15,12 @@
 #ifndef BORNAGAIN_SAMPLE_SOFTPARTICLE_FORMFACTORGAUSS_H
 #define BORNAGAIN_SAMPLE_SOFTPARTICLE_FORMFACTORGAUSS_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 
 //! The form factor of a Gaussian sphere.
 //! @ingroup softParticle
 
-class FormFactorGaussSphere : public IBornFF {
+class FormFactorGaussSphere : public IFormFactor {
 public:
     FormFactorGaussSphere(std::vector<double> P);
     FormFactorGaussSphere(double mean_radius);
diff --git a/Sample/SoftParticle/FormFactorSphereGaussianRadius.cpp b/Sample/SoftParticle/FormFactorSphereGaussianRadius.cpp
index 2410e56cb763ce2caabe89ec9bfbfac584ec9ebf..6fac634fa3d8bca24524cadae0fb785deeeabb48 100644
--- a/Sample/SoftParticle/FormFactorSphereGaussianRadius.cpp
+++ b/Sample/SoftParticle/FormFactorSphereGaussianRadius.cpp
@@ -17,7 +17,7 @@
 #include "Sample/Shapes/TruncatedEllipsoid.h"
 
 FormFactorSphereGaussianRadius::FormFactorSphereGaussianRadius(const std::vector<double> P)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_mean(m_P[0])
     , m_sigma(m_P[1])
 {
diff --git a/Sample/SoftParticle/FormFactorSphereGaussianRadius.h b/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
index c626e72a8b2f524bdebe0d4784bcfc4d5ad3e707..b65ea1f13da6b64bc9391f209730614f5efc6bc3 100644
--- a/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
+++ b/Sample/SoftParticle/FormFactorSphereGaussianRadius.h
@@ -15,13 +15,13 @@
 #ifndef BORNAGAIN_SAMPLE_SOFTPARTICLE_FORMFACTORSPHEREGAUSSIANRADIUS_H
 #define BORNAGAIN_SAMPLE_SOFTPARTICLE_FORMFACTORSPHEREGAUSSIANRADIUS_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 #include <memory>
 
 //! A sphere with gaussian radius distribution.
 //! @ingroup softParticle
 
-class FormFactorSphereGaussianRadius : public IBornFF {
+class FormFactorSphereGaussianRadius : public IFormFactor {
 public:
     FormFactorSphereGaussianRadius(std::vector<double> P);
     FormFactorSphereGaussianRadius(double mean, double sigma);
diff --git a/Sample/SoftParticle/FormFactorSphereLogNormalRadius.cpp b/Sample/SoftParticle/FormFactorSphereLogNormalRadius.cpp
index 6b4947ba51c1685d3eed86227d9e93d651349ae3..dd2545aa78d9b5fbec80bf53004a0f68d738adb8 100644
--- a/Sample/SoftParticle/FormFactorSphereLogNormalRadius.cpp
+++ b/Sample/SoftParticle/FormFactorSphereLogNormalRadius.cpp
@@ -21,7 +21,7 @@
 
 FormFactorSphereLogNormalRadius::FormFactorSphereLogNormalRadius(const std::vector<double> P,
                                                                  size_t n_samples)
-    : IBornFF(P)
+    : IFormFactor(P)
     , m_mean(m_P[0])
     , m_scale_param(m_P[1])
     , m_n_samples(n_samples)
diff --git a/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h b/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
index fd80176de4eb3e6bbfe8b6600e588a540b7b139e..1d293e129b43f45496d8b59fdc63baafa597b52c 100644
--- a/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
+++ b/Sample/SoftParticle/FormFactorSphereLogNormalRadius.h
@@ -15,13 +15,13 @@
 #ifndef BORNAGAIN_SAMPLE_SOFTPARTICLE_FORMFACTORSPHERELOGNORMALRADIUS_H
 #define BORNAGAIN_SAMPLE_SOFTPARTICLE_FORMFACTORSPHERELOGNORMALRADIUS_H
 
-#include "Sample/Particle/IBornFF.h"
+#include "Sample/Particle/IFormFactor.h"
 #include <memory>
 
 //! A sphere with log normal radius distribution.
 //! @ingroup softParticle
 
-class FormFactorSphereLogNormalRadius : public IBornFF {
+class FormFactorSphereLogNormalRadius : public IFormFactor {
 public:
     FormFactorSphereLogNormalRadius(std::vector<double> P, size_t n_samples = 0);
     FormFactorSphereLogNormalRadius(double mean, double scale_param, size_t n_samples);
diff --git a/Sample/StandardSamples/LayersWithAbsorptionBuilder.cpp b/Sample/StandardSamples/LayersWithAbsorptionBuilder.cpp
index 1cfe9d3858142b257b6c668a0959475f536a1953..30a4ae4f107fba4c5a7626631c85d60aeda5d7bd 100644
--- a/Sample/StandardSamples/LayersWithAbsorptionBuilder.cpp
+++ b/Sample/StandardSamples/LayersWithAbsorptionBuilder.cpp
@@ -23,7 +23,7 @@
 
 using Units::deg;
 
-MultiLayer* ExemplarySamples::createLayersWithAbsorptionWithFF(const IBornFF* ff)
+MultiLayer* ExemplarySamples::createLayersWithAbsorptionWithFF(const IFormFactor* ff)
 {
     const double middle_layer_thickness(60.0);
 
diff --git a/Sample/StandardSamples/LayersWithAbsorptionBuilder.h b/Sample/StandardSamples/LayersWithAbsorptionBuilder.h
index 571e2bb9c7dadb7f6b754cac975e87fb06eb7e10..43e41f8dc0d8b0155b4145984c03e66cd107b6f9 100644
--- a/Sample/StandardSamples/LayersWithAbsorptionBuilder.h
+++ b/Sample/StandardSamples/LayersWithAbsorptionBuilder.h
@@ -20,7 +20,7 @@
 #ifndef BORNAGAIN_SAMPLE_STANDARDSAMPLES_LAYERSWITHABSORPTIONBUILDER_H
 #define BORNAGAIN_SAMPLE_STANDARDSAMPLES_LAYERSWITHABSORPTIONBUILDER_H
 
-class IBornFF;
+class IFormFactor;
 class MultiLayer;
 
 //! The LayersWithAbsorptionBuilder class generates a multilayer with 3 layers with
@@ -31,7 +31,7 @@ class MultiLayer;
 
 namespace ExemplarySamples {
 
-MultiLayer* createLayersWithAbsorptionWithFF(const IBornFF*);
+MultiLayer* createLayersWithAbsorptionWithFF(const IFormFactor*);
 
 } // namespace ExemplarySamples
 
diff --git a/Sample/StandardSamples/ParticleInVacuumBuilder.cpp b/Sample/StandardSamples/ParticleInVacuumBuilder.cpp
index de2fdc91a5c8f7a42b364d13f6fa14795f2d8bae..877b32990b4cf5cb46a3a909ca67519ca6911839 100644
--- a/Sample/StandardSamples/ParticleInVacuumBuilder.cpp
+++ b/Sample/StandardSamples/ParticleInVacuumBuilder.cpp
@@ -22,7 +22,7 @@
 
 #include <iostream>
 
-MultiLayer* ExemplarySamples::createParticleInVacuumWithFF(const IBornFF* ff)
+MultiLayer* ExemplarySamples::createParticleInVacuumWithFF(const IFormFactor* ff)
 {
     Layer vacuum_layer(refMat::Vacuum);
 
diff --git a/Sample/StandardSamples/ParticleInVacuumBuilder.h b/Sample/StandardSamples/ParticleInVacuumBuilder.h
index e190b764e277111c857359384dbadecb689931ae..49e16e0007fcb886c4febbc237b7404b31d42d4a 100644
--- a/Sample/StandardSamples/ParticleInVacuumBuilder.h
+++ b/Sample/StandardSamples/ParticleInVacuumBuilder.h
@@ -20,7 +20,7 @@
 #ifndef BORNAGAIN_SAMPLE_STANDARDSAMPLES_PARTICLEINVACUUMBUILDER_H
 #define BORNAGAIN_SAMPLE_STANDARDSAMPLES_PARTICLEINVACUUMBUILDER_H
 
-class IBornFF;
+class IFormFactor;
 class MultiLayer;
 
 //! The ParticleInVacuumBuilder class generates a multilayer with single vacuum layer
@@ -29,7 +29,7 @@ class MultiLayer;
 
 namespace ExemplarySamples {
 
-MultiLayer* createParticleInVacuumWithFF(const IBornFF*);
+MultiLayer* createParticleInVacuumWithFF(const IFormFactor*);
 
 } // namespace ExemplarySamples
 
diff --git a/Sim/Export/SampleToPython.cpp b/Sim/Export/SampleToPython.cpp
index ff27082792b09e2f764a4c2c89fa5fd35f8865c5..23807b4c106b12c9aa611d30b3c6dfd9ac2feb0d 100644
--- a/Sim/Export/SampleToPython.cpp
+++ b/Sim/Export/SampleToPython.cpp
@@ -113,7 +113,7 @@ void SampleToPython::initLabels(const MultiLayer& multilayer)
         m_objs->insertModel("roughness", x);
     for (const auto* x : NodeUtils::AllDescendantsOfType<ParticleLayout>(multilayer))
         m_objs->insertModel("layout", x);
-    for (const auto* x : NodeUtils::AllDescendantsOfType<IBornFF>(multilayer))
+    for (const auto* x : NodeUtils::AllDescendantsOfType<IFormFactor>(multilayer))
         m_objs->insertModel("ff", x);
     for (const auto* x : NodeUtils::AllDescendantsOfType<IInterference>(multilayer))
         m_objs->insertModel("iff", x);
@@ -228,7 +228,7 @@ std::string SampleToPython::defineRoughnesses() const
 
 std::string SampleToPython::defineFormFactors() const
 {
-    std::vector<const IBornFF*> formfactors = m_objs->objectsOfType<IBornFF>();
+    std::vector<const IFormFactor*> formfactors = m_objs->objectsOfType<IFormFactor>();
     if (formfactors.empty())
         return "";
     std::ostringstream result;
@@ -381,7 +381,7 @@ std::string SampleToPython::defineParticles() const
     result << "\n" << indent() << "# Define particles\n";
     for (const auto* s : v) {
         const std::string& key = m_objs->obj2key(s);
-        const auto* ff = NodeUtils::OnlyChildOfType<IBornFF>(*s);
+        const auto* ff = NodeUtils::OnlyChildOfType<IFormFactor>(*s);
         ASSERT(ff);
         result << indent() << key << " = ba.Particle(" << m_materials->mat2key(s->material())
                << ", " << m_objs->obj2key(ff) << ")\n";
@@ -441,7 +441,7 @@ std::string SampleToPython::defineMesoCrystals() const
     for (const auto* s : v) {
         const std::string& key = m_objs->obj2key(s);
         const auto* crystal = NodeUtils::OnlyChildOfType<Crystal>(*s);
-        const auto* outer_shape = NodeUtils::OnlyChildOfType<IBornFF>(*s);
+        const auto* outer_shape = NodeUtils::OnlyChildOfType<IFormFactor>(*s);
         if (!crystal || !outer_shape)
             continue;
         result << indent() << key << " = ba.MesoCrystal(";
diff --git a/Tests/Functional/Std/StandardTests.h b/Tests/Functional/Std/StandardTests.h
index 04bf79e3974b90b11dcc9bf12150c35171370f3b..c17eb0a7735c6c8ffc714c922d75fe44289244ac 100644
--- a/Tests/Functional/Std/StandardTests.h
+++ b/Tests/Functional/Std/StandardTests.h
@@ -45,7 +45,7 @@ class Std : public ::testing::Test {
 TEST_F(Std, FormFactors)
 {
     for (const std::string& ffname : FormFactorComponents().keys()) {
-        const IBornFF* ff = FormFactorComponents().getItem(ffname)->clone();
+        const IFormFactor* ff = FormFactorComponents().getItem(ffname)->clone();
         ASSERT(ff);
         std::unique_ptr<const MultiLayer> sample(
             ExemplarySamples::createParticleInVacuumWithFF(ff));
@@ -572,7 +572,7 @@ TEST_F(Std, OffSpecularResonator)
 TEST_F(Std, FormFactorsWithAbsorption)
 {
     for (const std::string& ffname : FormFactorComponents().keys()) {
-        const IBornFF* ff = FormFactorComponents().getItem(ffname)->clone();
+        const IFormFactor* ff = FormFactorComponents().getItem(ffname)->clone();
         ASSERT(ff);
         std::unique_ptr<const MultiLayer> sample(
             ExemplarySamples::createLayersWithAbsorptionWithFF(ff));
diff --git a/Tests/Unit/Numeric/BisectFF.cpp b/Tests/Unit/Numeric/BisectFF.cpp
index d1a4a8e043c9bd5d6d3d28a6262ad08bdc565d43..1f064dee6c2a9629b96afd5e80b437c171416b24 100644
--- a/Tests/Unit/Numeric/BisectFF.cpp
+++ b/Tests/Unit/Numeric/BisectFF.cpp
@@ -21,7 +21,7 @@
         testing::Values(1e-19, 1e-17, 1e-15, 1e-12, 1e-9, 1e-6, 1e-3, .03, 1., 3., 10., 30., 100.),
         testing::Values(-1., 1.), testing::Values(0, -4e-16, +8e-16, -5e-11, 3e-7, -2e-3, .01, .1));
 
-complex_t deriv(const IBornFF& ff, const C3& qf, const complex_t Ff,
+complex_t deriv(const IFormFactor& ff, const C3& qf, const complex_t Ff,
                 const PolyhedralDiagnosis& /*df*/, const C3& qdir, const double qstep)
 {
     assert(Ff == ff.formfactor_at_bottom(qf));
@@ -33,7 +33,7 @@ complex_t deriv(const IBornFF& ff, const C3& qf, const complex_t Ff,
 
 //! Bisect between two q's to find possible discontinuities
 
-void bisect(int& ifail, const C3& qdir, const IBornFF& ff, const C3& q0, const C3& q1,
+void bisect(int& ifail, const C3& qdir, const IFormFactor& ff, const C3& q0, const C3& q1,
             const complex_t F0, const complex_t F1, const PolyhedralDiagnosis& d0,
             const PolyhedralDiagnosis& d1, const double qmindiff, const double Fmaxreldiff)
 {
@@ -84,7 +84,7 @@ void bisect(int& ifail, const C3& qdir, const IBornFF& ff, const C3& q0, const C
         bisect(ifail, qdir, ff, q2, q1, F2, F1, d2, d1, qmindiff, Fmaxreldiff);
 }
 
-void run_bisection(int& ifail, IBornFF& ff, const C3& q0, const C3& q1)
+void run_bisection(int& ifail, IFormFactor& ff, const C3& q0, const C3& q1)
 {
     const double qdiffmin = std::max(q0.mag(), q1.mag()) / 4e11;
     complex_t F0 = ff.formfactor_at_bottom(q0);
@@ -97,7 +97,7 @@ void run_bisection(int& ifail, IBornFF& ff, const C3& q0, const C3& q1)
     bisect(ifail, q1 - q0, ff, q0, q1, F0, F1, d0, d1, qdiffmin, .6e-10);
 }
 
-void run_test(IBornFF& ff)
+void run_test(IFormFactor& ff)
 {
     ::testing::internal::ParamGenerator<std::tuple<C3, C3, double, double, double>> gen = qlist;
     int ifail = 0;
diff --git a/Tests/Unit/Numeric/FormFactorSpecializationTest.cpp b/Tests/Unit/Numeric/FormFactorSpecializationTest.cpp
index e828c4313ea24cf565b8f0af05347b84625a8f13..c980dd3bb7af68d74e2f13a27380336b7f1f78b3 100644
--- a/Tests/Unit/Numeric/FormFactorSpecializationTest.cpp
+++ b/Tests/Unit/Numeric/FormFactorSpecializationTest.cpp
@@ -8,14 +8,14 @@
 
 class FFSpecializationTest : public testing::Test {
 protected:
-    void run_test(IBornFF* p0, IBornFF* p1, double eps, double qmag1, double qmag2)
+    void run_test(IFormFactor* p0, IFormFactor* p1, double eps, double qmag1, double qmag2)
     {
         formfactorTest::run_test_for_many_q([&](C3 q) { test_ff_eq(q, p0, p1, eps); }, qmag1,
                                             qmag2);
     }
 
 private:
-    void test_ff_eq(C3 q, IBornFF* p0, IBornFF* p1, double eps)
+    void test_ff_eq(C3 q, IFormFactor* p0, IFormFactor* p1, double eps)
     {
         const complex_t f0 = p0->formfactor_at_bottom(q);
         const complex_t f1 = p1->formfactor_at_bottom(q);
diff --git a/Tests/Unit/Numeric/FormFactorSymmetryTest.cpp b/Tests/Unit/Numeric/FormFactorSymmetryTest.cpp
index 258fde9fa6c49c043ea2a55159f4f8c848edb54a..2e15513066beb3fe87ef5406863b6a875264a1fe 100644
--- a/Tests/Unit/Numeric/FormFactorSymmetryTest.cpp
+++ b/Tests/Unit/Numeric/FormFactorSymmetryTest.cpp
@@ -10,7 +10,7 @@ class FFSymmetryTest : public testing::Test {
 private:
     using transform_t = std::function<C3(const C3&)>;
 
-    void test_qq_eq(IBornFF* ff, C3 q, C3 p, double eps)
+    void test_qq_eq(IFormFactor* ff, C3 q, C3 p, double eps)
     {
         complex_t f0 = ff->formfactor_at_bottom(q);
 #ifdef ALGORITHM_DIAGNOSTIC
@@ -36,7 +36,7 @@ private:
     }
 
 protected:
-    void run_test(IBornFF* ff, transform_t trafo, double eps, double qmag1, double qmag2)
+    void run_test(IFormFactor* ff, transform_t trafo, double eps, double qmag1, double qmag2)
     {
         formfactorTest::run_test_for_many_q([&](C3 q) { test_qq_eq(ff, q, trafo(q), eps); }, qmag1,
                                             qmag2);
diff --git a/Tests/Unit/Sample/FormFactorBasicTest.cpp b/Tests/Unit/Sample/FormFactorBasicTest.cpp
index a9de6e61d44c18957c9290b059bfbdc4a1123840..27e0b527f0784c625435a767fe5362b6247a62aa 100644
--- a/Tests/Unit/Sample/FormFactorBasicTest.cpp
+++ b/Tests/Unit/Sample/FormFactorBasicTest.cpp
@@ -6,7 +6,7 @@
 
 class FormFactorBasicTest : public ::testing::Test {
 protected:
-    void test_eps_q(const IBornFF* p, C3 qdir, double eps) const
+    void test_eps_q(const IFormFactor* p, C3 qdir, double eps) const
     {
         C3 q = eps * qdir;
         complex_t ff = p->formfactor_at_bottom(q);
@@ -18,7 +18,7 @@ protected:
         EXPECT_GT(real(ff), V * (1 - std::max(3e-16, 2 * eps * R * eps * R)));
         EXPECT_LT(std::abs(imag(ff)), 2 * eps * V * R);
     }
-    void test_small_q(const IBornFF* p, complex_t x, complex_t y, complex_t z) const
+    void test_small_q(const IFormFactor* p, complex_t x, complex_t y, complex_t z) const
     {
         C3 q(x, y, z);
         test_eps_q(p, q, 1e-14);
@@ -26,7 +26,7 @@ protected:
         test_eps_q(p, q, 1e-8);
         test_eps_q(p, q, 1e-5);
     }
-    void test_ff(const IBornFF* p)
+    void test_ff(const IFormFactor* p)
     {
         complex_t ff0 = p->formfactor_at_bottom(C3(0., 0., 0.));
         EXPECT_EQ(imag(ff0), 0.);
@@ -54,7 +54,7 @@ protected:
         test_small_q(p, 1, 1, 1);
         test_small_q(p, .7, .8, .9);
 
-        IBornFF* clone = p->clone();
+        IFormFactor* clone = p->clone();
         EXPECT_EQ(clone->volume(), V);
         C3 q(.1, .2, complex_t(.3, .004));
         EXPECT_EQ(clone->formfactor_at_bottom(q), p->formfactor_at_bottom(q));
diff --git a/Wrap/Swig/libBornAgainSample.i b/Wrap/Swig/libBornAgainSample.i
index 67ae93b0270823a263babb949e23a94b43c523a3..c0f6b0d27d337aca49fae9bab64b25862a61624f 100644
--- a/Wrap/Swig/libBornAgainSample.i
+++ b/Wrap/Swig/libBornAgainSample.i
@@ -31,7 +31,7 @@
 
 %feature("director") ISampleNode;            // needed by IReParticle
 %feature("director") IReParticle;        // needed by ReParticle etc ?
-%feature("director") IBornFF;    // used in CustomFormFactor.py
+%feature("director") IFormFactor;    // used in CustomFormFactor.py
 
 %{
 #include "Base/Vector/RotMatrix.h"
@@ -92,7 +92,7 @@
 %include "Sample/Material/MaterialFactoryFuncs.h"
 
 %include "Sample/Scattering/ISampleNode.h"
-%include "Sample/Particle/IBornFF.h"
+%include "Sample/Particle/IFormFactor.h"
 %include "Sample/Scattering/Rotations.h"
 
 %include "Sample/Particle/Crystal.h"
diff --git a/auto/Wrap/doxygenResample.i b/auto/Wrap/doxygenResample.i
index 426db30f31c326271a139519ee32de5b8e3156e1..99aa593cdd9c70681c03918aa3be4ee28ae9ee79 100644
--- a/auto/Wrap/doxygenResample.i
+++ b/auto/Wrap/doxygenResample.i
@@ -560,7 +560,7 @@ A reprocessed simple particle, with shape m_ff.
 C++ includes: ReParticle.h
 ";
 
-%feature("docstring")  ReParticle::ReParticle "ReParticle::ReParticle(const IBornFF &ff)
+%feature("docstring")  ReParticle::ReParticle "ReParticle::ReParticle(const IFormFactor &ff)
 ";
 
 %feature("docstring")  ReParticle::~ReParticle "ReParticle::~ReParticle() override
@@ -615,7 +615,7 @@ Returns the z-coordinate of the lowest point in this shape after a given rotatio
 Returns the z-coordinate of the lowest point in this shape after a given rotation. 
 ";
 
-%feature("docstring")  ReParticle::formfactor_at_bottom "const IBornFF * ReParticle::formfactor_at_bottom() const
+%feature("docstring")  ReParticle::formfactor_at_bottom "const IFormFactor * ReParticle::formfactor_at_bottom() const
 ";
 
 %feature("docstring")  ReParticle::formfactor_at_bottom "complex_t ReParticle::formfactor_at_bottom(C3 q) const
diff --git a/auto/Wrap/doxygenSample.i b/auto/Wrap/doxygenSample.i
index a1f7ba1530f75ad4c9e307353b577f7f2c713bf2..a00fa77bc7594d5bcc8d2ac14bab1aabff8f59d8 100644
--- a/auto/Wrap/doxygenSample.i
+++ b/auto/Wrap/doxygenSample.i
@@ -1678,140 +1678,140 @@ C++ includes: Lattice2D.h
 ";
 
 
-// File: classIBornFF.xml
-%feature("docstring") IBornFF "
-
-Abstract base class for Born form factors.
+// File: classICosineRipple.xml
+%feature("docstring") ICosineRipple "
 
-In contrast to the generic IReParticle, a Born form factor does not depend on the incoming and outgoing wave vectors ki and kf, except through their difference, the scattering vector q=ki-kf.
+Base class for form factors with a cosine ripple profile in the yz plane.
 
-C++ includes: IBornFF.h
+C++ includes: IProfileRipple.h
 ";
 
-%feature("docstring")  IBornFF::IBornFF "IBornFF::IBornFF()
+%feature("docstring")  ICosineRipple::ICosineRipple "ICosineRipple::ICosineRipple(const std::vector< double > &PValues)
 ";
 
-%feature("docstring")  IBornFF::IBornFF "IBornFF::IBornFF(const std::vector< double > &PValues)
-";
 
-%feature("docstring")  IBornFF::~IBornFF "IBornFF::~IBornFF() override
-";
+// File: classIdentityRotation.xml
+%feature("docstring") IdentityRotation "
 
-%feature("docstring")  IBornFF::clone "IBornFF* IBornFF::clone() const override=0
+The identity rotation, which leaves everything in place.
 
-Returns a clone of this  ISampleNode object. 
+C++ includes: Rotations.h
 ";
 
-%feature("docstring")  IBornFF::theFF "complex_t IBornFF::theFF(const WavevectorInfo &wavevectors) const
+%feature("docstring")  IdentityRotation::IdentityRotation "IdentityRotation::IdentityRotation()
 ";
 
-%feature("docstring")  IBornFF::shapeName "std::string IBornFF::shapeName() const
+%feature("docstring")  IdentityRotation::clone "IdentityRotation* IdentityRotation::clone() const override
 ";
 
-%feature("docstring")  IBornFF::thePolFF "Eigen::Matrix2cd IBornFF::thePolFF(const WavevectorInfo &wavevectors) const
+%feature("docstring")  IdentityRotation::className "std::string IdentityRotation::className() const final
 ";
 
-%feature("docstring")  IBornFF::bottomZ "double IBornFF::bottomZ(const IRotation *rotation) const
-";
+%feature("docstring")  IdentityRotation::createInverse "IdentityRotation* IdentityRotation::createInverse() const override
 
-%feature("docstring")  IBornFF::topZ "double IBornFF::topZ(const IRotation *rotation) const
+Returns a new  IRotation object that is the current object's inverse. 
 ";
 
-%feature("docstring")  IBornFF::volume "double IBornFF::volume() const
+%feature("docstring")  IdentityRotation::rotMatrix "RotMatrix IdentityRotation::rotMatrix() const override
+
+Returns transformation. 
 ";
 
-%feature("docstring")  IBornFF::radialExtension "virtual double IBornFF::radialExtension() const =0
+%feature("docstring")  IdentityRotation::isIdentity "bool IdentityRotation::isIdentity() 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 
+Returns true if rotation matrix is identity matrix (no rotations) 
 ";
 
-%feature("docstring")  IBornFF::formfactor_at_bottom "virtual complex_t IBornFF::formfactor_at_bottom(C3 q) const =0
-";
 
-%feature("docstring")  IBornFF::pythonConstructor "std::string IBornFF::pythonConstructor() const
+// File: classIDistribution1DSampler.xml
+%feature("docstring") IDistribution1DSampler "";
 
-Creates the Python constructor of this class (or derived classes) 
+%feature("docstring")  IDistribution1DSampler::IDistribution1DSampler "IDistribution1DSampler::IDistribution1DSampler()=default
 ";
 
-%feature("docstring")  IBornFF::canSliceAnalytically "bool IBornFF::canSliceAnalytically(const IRotation *rot) const
-
-Default implementation only allows rotations along z-axis. 
+%feature("docstring")  IDistribution1DSampler::~IDistribution1DSampler "IDistribution1DSampler::~IDistribution1DSampler()
 ";
 
-%feature("docstring")  IBornFF::formfactor_pol "Eigen::Matrix2cd IBornFF::formfactor_pol(C3 q) const
-
-Returns scattering amplitude for complex scattering wavevector q=k_i-k_f in case of matrix interactions. Default implementation calls formfactor_at_bottom(q) and multiplies with the unit matrix. 
+%feature("docstring")  IDistribution1DSampler::randomSample "virtual double IDistribution1DSampler::randomSample() const =0
 ";
 
 
-// File: classICosineRipple.xml
-%feature("docstring") ICosineRipple "
+// File: classIDistribution2DSampler.xml
+%feature("docstring") IDistribution2DSampler "";
 
-Base class for form factors with a cosine ripple profile in the yz plane.
+%feature("docstring")  IDistribution2DSampler::IDistribution2DSampler "IDistribution2DSampler::IDistribution2DSampler()=default
+";
 
-C++ includes: IProfileRipple.h
+%feature("docstring")  IDistribution2DSampler::~IDistribution2DSampler "IDistribution2DSampler::~IDistribution2DSampler()
 ";
 
-%feature("docstring")  ICosineRipple::ICosineRipple "ICosineRipple::ICosineRipple(const std::vector< double > &PValues)
+%feature("docstring")  IDistribution2DSampler::randomSample "virtual std::pair<double, double> IDistribution2DSampler::randomSample() const =0
 ";
 
 
-// File: classIdentityRotation.xml
-%feature("docstring") IdentityRotation "
+// File: classIFormFactor.xml
+%feature("docstring") IFormFactor "
 
-The identity rotation, which leaves everything in place.
+Abstract base class for Born form factors.
 
-C++ includes: Rotations.h
-";
+In contrast to the generic IReParticle, a Born form factor does not depend on the incoming and outgoing wave vectors ki and kf, except through their difference, the scattering vector q=ki-kf.
 
-%feature("docstring")  IdentityRotation::IdentityRotation "IdentityRotation::IdentityRotation()
+C++ includes: IFormFactor.h
 ";
 
-%feature("docstring")  IdentityRotation::clone "IdentityRotation* IdentityRotation::clone() const override
+%feature("docstring")  IFormFactor::IFormFactor "IFormFactor::IFormFactor()
 ";
 
-%feature("docstring")  IdentityRotation::className "std::string IdentityRotation::className() const final
+%feature("docstring")  IFormFactor::IFormFactor "IFormFactor::IFormFactor(const std::vector< double > &PValues)
 ";
 
-%feature("docstring")  IdentityRotation::createInverse "IdentityRotation* IdentityRotation::createInverse() const override
-
-Returns a new  IRotation object that is the current object's inverse. 
+%feature("docstring")  IFormFactor::~IFormFactor "IFormFactor::~IFormFactor() override
 ";
 
-%feature("docstring")  IdentityRotation::rotMatrix "RotMatrix IdentityRotation::rotMatrix() const override
+%feature("docstring")  IFormFactor::clone "IFormFactor* IFormFactor::clone() const override=0
 
-Returns transformation. 
+Returns a clone of this  ISampleNode object. 
 ";
 
-%feature("docstring")  IdentityRotation::isIdentity "bool IdentityRotation::isIdentity() const override
+%feature("docstring")  IFormFactor::theFF "complex_t IFormFactor::theFF(const WavevectorInfo &wavevectors) const
+";
 
-Returns true if rotation matrix is identity matrix (no rotations) 
+%feature("docstring")  IFormFactor::shapeName "std::string IFormFactor::shapeName() const
 ";
 
+%feature("docstring")  IFormFactor::thePolFF "Eigen::Matrix2cd IFormFactor::thePolFF(const WavevectorInfo &wavevectors) const
+";
 
-// File: classIDistribution1DSampler.xml
-%feature("docstring") IDistribution1DSampler "";
+%feature("docstring")  IFormFactor::bottomZ "double IFormFactor::bottomZ(const IRotation *rotation) const
+";
 
-%feature("docstring")  IDistribution1DSampler::IDistribution1DSampler "IDistribution1DSampler::IDistribution1DSampler()=default
+%feature("docstring")  IFormFactor::topZ "double IFormFactor::topZ(const IRotation *rotation) const
 ";
 
-%feature("docstring")  IDistribution1DSampler::~IDistribution1DSampler "IDistribution1DSampler::~IDistribution1DSampler()
+%feature("docstring")  IFormFactor::volume "double IFormFactor::volume() const
 ";
 
-%feature("docstring")  IDistribution1DSampler::randomSample "virtual double IDistribution1DSampler::randomSample() const =0
+%feature("docstring")  IFormFactor::radialExtension "virtual double IFormFactor::radialExtension() const =0
+
+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")  IFormFactor::formfactor_at_bottom "virtual complex_t IFormFactor::formfactor_at_bottom(C3 q) const =0
+";
 
-// File: classIDistribution2DSampler.xml
-%feature("docstring") IDistribution2DSampler "";
+%feature("docstring")  IFormFactor::pythonConstructor "std::string IFormFactor::pythonConstructor() const
 
-%feature("docstring")  IDistribution2DSampler::IDistribution2DSampler "IDistribution2DSampler::IDistribution2DSampler()=default
+Creates the Python constructor of this class (or derived classes) 
 ";
 
-%feature("docstring")  IDistribution2DSampler::~IDistribution2DSampler "IDistribution2DSampler::~IDistribution2DSampler()
+%feature("docstring")  IFormFactor::canSliceAnalytically "bool IFormFactor::canSliceAnalytically(const IRotation *rot) const
+
+Default implementation only allows rotations along z-axis. 
 ";
 
-%feature("docstring")  IDistribution2DSampler::randomSample "virtual std::pair<double, double> IDistribution2DSampler::randomSample() const =0
+%feature("docstring")  IFormFactor::formfactor_pol "Eigen::Matrix2cd IFormFactor::formfactor_pol(C3 q) const
+
+Returns scattering amplitude for complex scattering wavevector q=k_i-k_f in case of matrix interactions. Default implementation calls formfactor_at_bottom(q) and multiplies with the unit matrix. 
 ";
 
 
@@ -3508,7 +3508,7 @@ A particle with a crystalline inner structure, made of smaller particles, and an
 C++ includes: MesoCrystal.h
 ";
 
-%feature("docstring")  MesoCrystal::MesoCrystal "MesoCrystal::MesoCrystal(const Crystal &crystal, const IBornFF &formfactor)
+%feature("docstring")  MesoCrystal::MesoCrystal "MesoCrystal::MesoCrystal(const Crystal &crystal, const IFormFactor &formfactor)
 ";
 
 %feature("docstring")  MesoCrystal::~MesoCrystal "MesoCrystal::~MesoCrystal() override
@@ -3525,7 +3525,7 @@ Returns a clone of this  ISampleNode object.
 %feature("docstring")  MesoCrystal::nodeChildren "std::vector< const INode * > MesoCrystal::nodeChildren() const override
 ";
 
-%feature("docstring")  MesoCrystal::outerShape "const IBornFF* MesoCrystal::outerShape() const
+%feature("docstring")  MesoCrystal::outerShape "const IFormFactor* MesoCrystal::outerShape() const
 ";
 
 %feature("docstring")  MesoCrystal::particleStructure "const Crystal & MesoCrystal::particleStructure() const
@@ -3705,10 +3705,10 @@ A particle with a form factor and refractive index.
 C++ includes: Particle.h
 ";
 
-%feature("docstring")  Particle::Particle "Particle::Particle(Material material, const IBornFF &formfactor)
+%feature("docstring")  Particle::Particle "Particle::Particle(Material material, const IFormFactor &formfactor)
 ";
 
-%feature("docstring")  Particle::Particle "Particle::Particle(Material material, const IBornFF &formfactor, const IRotation &rotation)
+%feature("docstring")  Particle::Particle "Particle::Particle(Material material, const IFormFactor &formfactor, const IRotation &rotation)
 ";
 
 %feature("docstring")  Particle::~Particle "Particle::~Particle() override
@@ -3730,7 +3730,7 @@ Returns a clone of this  ISampleNode object.
 Returns nullptr, unless overwritten to return a specific material. 
 ";
 
-%feature("docstring")  Particle::formfactor_at_bottom "const IBornFF* Particle::formfactor_at_bottom() const
+%feature("docstring")  Particle::formfactor_at_bottom "const IFormFactor* Particle::formfactor_at_bottom() const
 ";
 
 
@@ -4808,7 +4808,7 @@ Returns a body-centered cubic (cI) lattice with edge length a. TODO: Clarify mea
 %feature("docstring")  ExemplarySamples::createLattice1D "MultiLayer * ExemplarySamples::createLattice1D()
 ";
 
-%feature("docstring")  ExemplarySamples::createLayersWithAbsorptionWithFF "MultiLayer * ExemplarySamples::createLayersWithAbsorptionWithFF(const IBornFF *)
+%feature("docstring")  ExemplarySamples::createLayersWithAbsorptionWithFF "MultiLayer * ExemplarySamples::createLayersWithAbsorptionWithFF(const IFormFactor *)
 ";
 
 %feature("docstring")  ExemplarySamples::createLayersWithAbsorptionBySLD "MultiLayer * ExemplarySamples::createLayersWithAbsorptionBySLD()
@@ -4883,7 +4883,7 @@ Returns a body-centered cubic (cI) lattice with edge length a. TODO: Clarify mea
 %feature("docstring")  ExemplarySamples::createLinkedBoxDistribution "MultiLayer * ExemplarySamples::createLinkedBoxDistribution()
 ";
 
-%feature("docstring")  ExemplarySamples::createParticleInVacuumWithFF "MultiLayer * ExemplarySamples::createParticleInVacuumWithFF(const IBornFF *)
+%feature("docstring")  ExemplarySamples::createParticleInVacuumWithFF "MultiLayer * ExemplarySamples::createParticleInVacuumWithFF(const IFormFactor *)
 ";
 
 %feature("docstring")  ExemplarySamples::createHardDisk "MultiLayer * ExemplarySamples::createHardDisk()
@@ -5603,10 +5603,10 @@ magnetization (in A/m)
 // File: Crystal_8h.xml
 
 
-// File: IBornFF_8cpp.xml
+// File: IFormFactor_8cpp.xml
 
 
-// File: IBornFF_8h.xml
+// File: IFormFactor_8h.xml
 
 
 // File: IParticle_8cpp.xml
diff --git a/auto/Wrap/libBornAgainBase_wrap.cpp b/auto/Wrap/libBornAgainBase_wrap.cpp
index 16fdb766edeb976767f0dcbcd7af79c0d69d99e2..839de7bf0ed4bd565cd8f56328d71fe98f10a004 100644
--- a/auto/Wrap/libBornAgainBase_wrap.cpp
+++ b/auto/Wrap/libBornAgainBase_wrap.cpp
@@ -5253,7 +5253,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/share/swig4.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/local/share/swig/4.0.2/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&
 
diff --git a/auto/Wrap/libBornAgainDevice_wrap.cpp b/auto/Wrap/libBornAgainDevice_wrap.cpp
index 069d328590fa50ab8e97b988680a99d075446665..b695be05ba467086a4292abaa4223001aa23753d 100644
--- a/auto/Wrap/libBornAgainDevice_wrap.cpp
+++ b/auto/Wrap/libBornAgainDevice_wrap.cpp
@@ -5300,7 +5300,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/share/swig4.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/local/share/swig/4.0.2/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&
 
diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp
index f23afe6db152e8bf87a9f0e6eb6a59a12cdb6778..a11b0c980621cfb14f99bc07ea44e5afc0ab8b8f 100644
--- a/auto/Wrap/libBornAgainFit_wrap.cpp
+++ b/auto/Wrap/libBornAgainFit_wrap.cpp
@@ -5251,7 +5251,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/share/swig4.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/local/share/swig/4.0.2/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&
 
diff --git a/auto/Wrap/libBornAgainParam_wrap.cpp b/auto/Wrap/libBornAgainParam_wrap.cpp
index b5ea658d3a149c4b8a0e2381698077bde8ca0953..da859a92b9fcc7e81dc3fdb81fa1b20dcf793ba2 100644
--- a/auto/Wrap/libBornAgainParam_wrap.cpp
+++ b/auto/Wrap/libBornAgainParam_wrap.cpp
@@ -5259,7 +5259,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/share/swig4.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/local/share/swig/4.0.2/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&
 
diff --git a/auto/Wrap/libBornAgainResample_wrap.cpp b/auto/Wrap/libBornAgainResample_wrap.cpp
index b194d1503a3fe7573738d74fa371a8174a4460bc..86fd8864bff77fa0d8d52759cff9679ebd551b79 100644
--- a/auto/Wrap/libBornAgainResample_wrap.cpp
+++ b/auto/Wrap/libBornAgainResample_wrap.cpp
@@ -5243,7 +5243,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/share/swig4.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/local/share/swig/4.0.2/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&
 
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index 533a41ed333df0abe3da3b3af5e2b985c839ca3d..59ce0d847089e556be39ce35af4bb6dc36f095b0 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -3023,7 +3023,7 @@ class ISampleNode(libBornAgainBase.ICloneable, libBornAgainParam.INode):
 # Register ISampleNode in _libBornAgainSample:
 _libBornAgainSample.ISampleNode_swigregister(ISampleNode)
 
-class IBornFF(ISampleNode):
+class IFormFactor(ISampleNode):
     r"""
 
 
@@ -3031,7 +3031,7 @@ class IBornFF(ISampleNode):
 
     In contrast to the generic IReParticle, a Born form factor does not depend on the incoming and outgoing wave vectors ki and kf, except through their difference, the scattering vector q=ki-kf.
 
-    C++ includes: IBornFF.h
+    C++ includes: IFormFactor.h
 
     """
 
@@ -3040,112 +3040,112 @@ class IBornFF(ISampleNode):
 
     def __init__(self, *args):
         r"""
-        __init__(IBornFF self) -> IBornFF
-        __init__(IBornFF self, vdouble1d_t PValues) -> IBornFF
-        IBornFF::IBornFF(const std::vector< double > &PValues)
+        __init__(IFormFactor self) -> IFormFactor
+        __init__(IFormFactor self, vdouble1d_t PValues) -> IFormFactor
+        IFormFactor::IFormFactor(const std::vector< double > &PValues)
 
         """
-        if self.__class__ == IBornFF:
+        if self.__class__ == IFormFactor:
             _self = None
         else:
             _self = self
-        _libBornAgainSample.IBornFF_swiginit(self, _libBornAgainSample.new_IBornFF(_self, *args))
-    __swig_destroy__ = _libBornAgainSample.delete_IBornFF
+        _libBornAgainSample.IFormFactor_swiginit(self, _libBornAgainSample.new_IFormFactor(_self, *args))
+    __swig_destroy__ = _libBornAgainSample.delete_IFormFactor
 
     def clone(self):
         r"""
-        clone(IBornFF self) -> IBornFF
-        IBornFF* IBornFF::clone() const override=0
+        clone(IFormFactor self) -> IFormFactor
+        IFormFactor* IFormFactor::clone() const override=0
 
         Returns a clone of this  ISampleNode object. 
 
         """
-        return _libBornAgainSample.IBornFF_clone(self)
+        return _libBornAgainSample.IFormFactor_clone(self)
 
     def theFF(self, wavevectors):
         r"""
-        theFF(IBornFF self, WavevectorInfo const & wavevectors) -> complex_t
-        complex_t IBornFF::theFF(const WavevectorInfo &wavevectors) const
+        theFF(IFormFactor self, WavevectorInfo const & wavevectors) -> complex_t
+        complex_t IFormFactor::theFF(const WavevectorInfo &wavevectors) const
 
         """
-        return _libBornAgainSample.IBornFF_theFF(self, wavevectors)
+        return _libBornAgainSample.IFormFactor_theFF(self, wavevectors)
 
     def shapeName(self):
         r"""
-        shapeName(IBornFF self) -> std::string
-        std::string IBornFF::shapeName() const
+        shapeName(IFormFactor self) -> std::string
+        std::string IFormFactor::shapeName() const
 
         """
-        return _libBornAgainSample.IBornFF_shapeName(self)
+        return _libBornAgainSample.IFormFactor_shapeName(self)
 
     def bottomZ(self, rotation):
         r"""
-        bottomZ(IBornFF self, IRotation rotation) -> double
-        double IBornFF::bottomZ(const IRotation *rotation) const
+        bottomZ(IFormFactor self, IRotation rotation) -> double
+        double IFormFactor::bottomZ(const IRotation *rotation) const
 
         """
-        return _libBornAgainSample.IBornFF_bottomZ(self, rotation)
+        return _libBornAgainSample.IFormFactor_bottomZ(self, rotation)
 
     def topZ(self, rotation):
         r"""
-        topZ(IBornFF self, IRotation rotation) -> double
-        double IBornFF::topZ(const IRotation *rotation) const
+        topZ(IFormFactor self, IRotation rotation) -> double
+        double IFormFactor::topZ(const IRotation *rotation) const
 
         """
-        return _libBornAgainSample.IBornFF_topZ(self, rotation)
+        return _libBornAgainSample.IFormFactor_topZ(self, rotation)
 
     def volume(self):
         r"""
-        volume(IBornFF self) -> double
-        double IBornFF::volume() const
+        volume(IFormFactor self) -> double
+        double IFormFactor::volume() const
 
         """
-        return _libBornAgainSample.IBornFF_volume(self)
+        return _libBornAgainSample.IFormFactor_volume(self)
 
     def radialExtension(self):
         r"""
-        radialExtension(IBornFF self) -> double
-        virtual double IBornFF::radialExtension() const =0
+        radialExtension(IFormFactor self) -> double
+        virtual double IFormFactor::radialExtension() const =0
 
         Returns the (approximate in some cases) radial size of the particle of this form factor's shape. This is used for SSCA calculations 
 
         """
-        return _libBornAgainSample.IBornFF_radialExtension(self)
+        return _libBornAgainSample.IFormFactor_radialExtension(self)
 
     def formfactor_at_bottom(self, q):
         r"""
-        formfactor_at_bottom(IBornFF self, C3 q) -> complex_t
-        virtual complex_t IBornFF::formfactor_at_bottom(C3 q) const =0
+        formfactor_at_bottom(IFormFactor self, C3 q) -> complex_t
+        virtual complex_t IFormFactor::formfactor_at_bottom(C3 q) const =0
 
         """
-        return _libBornAgainSample.IBornFF_formfactor_at_bottom(self, q)
+        return _libBornAgainSample.IFormFactor_formfactor_at_bottom(self, q)
 
     def pythonConstructor(self):
         r"""
-        pythonConstructor(IBornFF self) -> std::string
-        std::string IBornFF::pythonConstructor() const
+        pythonConstructor(IFormFactor self) -> std::string
+        std::string IFormFactor::pythonConstructor() const
 
         Creates the Python constructor of this class (or derived classes) 
 
         """
-        return _libBornAgainSample.IBornFF_pythonConstructor(self)
+        return _libBornAgainSample.IFormFactor_pythonConstructor(self)
 
     def canSliceAnalytically(self, rot):
         r"""
-        canSliceAnalytically(IBornFF self, IRotation rot) -> bool
-        bool IBornFF::canSliceAnalytically(const IRotation *rot) const
+        canSliceAnalytically(IFormFactor self, IRotation rot) -> bool
+        bool IFormFactor::canSliceAnalytically(const IRotation *rot) const
 
         Default implementation only allows rotations along z-axis. 
 
         """
-        return _libBornAgainSample.IBornFF_canSliceAnalytically(self, rot)
+        return _libBornAgainSample.IFormFactor_canSliceAnalytically(self, rot)
     def __disown__(self):
         self.this.disown()
-        _libBornAgainSample.disown_IBornFF(self)
+        _libBornAgainSample.disown_IFormFactor(self)
         return weakref.proxy(self)
 
-# Register IBornFF in _libBornAgainSample:
-_libBornAgainSample.IBornFF_swigregister(IBornFF)
+# Register IFormFactor in _libBornAgainSample:
+_libBornAgainSample.IFormFactor_swigregister(IFormFactor)
 
 class IRotation(libBornAgainBase.ICloneable, libBornAgainParam.INode):
     r"""
@@ -3884,8 +3884,8 @@ class MesoCrystal(IParticle):
 
     def __init__(self, crystal, formfactor):
         r"""
-        __init__(MesoCrystal self, Crystal crystal, IBornFF formfactor) -> MesoCrystal
-        MesoCrystal::MesoCrystal(const Crystal &crystal, const IBornFF &formfactor)
+        __init__(MesoCrystal self, Crystal crystal, IFormFactor formfactor) -> MesoCrystal
+        MesoCrystal::MesoCrystal(const Crystal &crystal, const IFormFactor &formfactor)
 
         """
         _libBornAgainSample.MesoCrystal_swiginit(self, _libBornAgainSample.new_MesoCrystal(crystal, formfactor))
@@ -3919,8 +3919,8 @@ class MesoCrystal(IParticle):
 
     def outerShape(self):
         r"""
-        outerShape(MesoCrystal self) -> IBornFF
-        const IBornFF* MesoCrystal::outerShape() const
+        outerShape(MesoCrystal self) -> IFormFactor
+        const IFormFactor* MesoCrystal::outerShape() const
 
         """
         return _libBornAgainSample.MesoCrystal_outerShape(self)
@@ -3951,9 +3951,9 @@ class Particle(IParticle):
 
     def __init__(self, *args):
         r"""
-        __init__(Particle self, Material material, IBornFF formfactor) -> Particle
-        __init__(Particle self, Material material, IBornFF formfactor, IRotation rotation) -> Particle
-        Particle::Particle(Material material, const IBornFF &formfactor, const IRotation &rotation)
+        __init__(Particle self, Material material, IFormFactor formfactor) -> Particle
+        __init__(Particle self, Material material, IFormFactor formfactor, IRotation rotation) -> Particle
+        Particle::Particle(Material material, const IFormFactor &formfactor, const IRotation &rotation)
 
         """
         _libBornAgainSample.Particle_swiginit(self, _libBornAgainSample.new_Particle(*args))
@@ -3997,8 +3997,8 @@ class Particle(IParticle):
 
     def formfactor_at_bottom(self):
         r"""
-        formfactor_at_bottom(Particle self) -> IBornFF
-        const IBornFF* Particle::formfactor_at_bottom() const
+        formfactor_at_bottom(Particle self) -> IFormFactor
+        const IFormFactor* Particle::formfactor_at_bottom() const
 
         """
         return _libBornAgainSample.Particle_formfactor_at_bottom(self)
@@ -7488,7 +7488,7 @@ class RoughnessModel(object):
 # Register RoughnessModel in _libBornAgainSample:
 _libBornAgainSample.RoughnessModel_swigregister(RoughnessModel)
 
-class IFormFactorPolyhedron(IBornFF):
+class IFormFactorPolyhedron(IFormFactor):
     r"""
 
 
@@ -7560,7 +7560,7 @@ class IFormFactorPolyhedron(IBornFF):
 # Register IFormFactorPolyhedron in _libBornAgainSample:
 _libBornAgainSample.IFormFactorPolyhedron_swigregister(IFormFactorPolyhedron)
 
-class IFormFactorPrism(IBornFF):
+class IFormFactorPrism(IFormFactor):
     r"""
 
 
@@ -7634,7 +7634,7 @@ class IFormFactorPrism(IBornFF):
 # Register IFormFactorPrism in _libBornAgainSample:
 _libBornAgainSample.IFormFactorPrism_swigregister(IFormFactorPrism)
 
-class IProfileRipple(IBornFF):
+class IProfileRipple(IFormFactor):
     r"""
 
 
@@ -8122,7 +8122,7 @@ class FormFactorCantellatedCube(IFormFactorPolyhedron):
 # Register FormFactorCantellatedCube in _libBornAgainSample:
 _libBornAgainSample.FormFactorCantellatedCube_swigregister(FormFactorCantellatedCube)
 
-class FormFactorCone(IBornFF):
+class FormFactorCone(IFormFactor):
     r"""
 
 
@@ -8372,7 +8372,7 @@ class FormFactorCosineRippleLorentz(ICosineRipple):
 # Register FormFactorCosineRippleLorentz in _libBornAgainSample:
 _libBornAgainSample.FormFactorCosineRippleLorentz_swigregister(FormFactorCosineRippleLorentz)
 
-class FormFactorCylinder(IBornFF):
+class FormFactorCylinder(IFormFactor):
     r"""
 
 
@@ -8518,7 +8518,7 @@ class FormFactorDodecahedron(IFormFactorPolyhedron):
 # Register FormFactorDodecahedron in _libBornAgainSample:
 _libBornAgainSample.FormFactorDodecahedron_swigregister(FormFactorDodecahedron)
 
-class FormFactorEllipsoidalCylinder(IBornFF):
+class FormFactorEllipsoidalCylinder(IFormFactor):
     r"""
 
 
@@ -8612,7 +8612,7 @@ class FormFactorEllipsoidalCylinder(IBornFF):
 # Register FormFactorEllipsoidalCylinder in _libBornAgainSample:
 _libBornAgainSample.FormFactorEllipsoidalCylinder_swigregister(FormFactorEllipsoidalCylinder)
 
-class FormFactorFullSphere(IBornFF):
+class FormFactorFullSphere(IFormFactor):
     r"""
 
 
@@ -8706,7 +8706,7 @@ class FormFactorFullSphere(IBornFF):
 # Register FormFactorFullSphere in _libBornAgainSample:
 _libBornAgainSample.FormFactorFullSphere_swigregister(FormFactorFullSphere)
 
-class FormFactorFullSpheroid(IBornFF):
+class FormFactorFullSpheroid(IFormFactor):
     r"""
 
 
@@ -8792,7 +8792,7 @@ class FormFactorFullSpheroid(IBornFF):
 # Register FormFactorFullSpheroid in _libBornAgainSample:
 _libBornAgainSample.FormFactorFullSpheroid_swigregister(FormFactorFullSpheroid)
 
-class FormFactorHemiEllipsoid(IBornFF):
+class FormFactorHemiEllipsoid(IFormFactor):
     r"""
 
 
@@ -8886,7 +8886,7 @@ class FormFactorHemiEllipsoid(IBornFF):
 # Register FormFactorHemiEllipsoid in _libBornAgainSample:
 _libBornAgainSample.FormFactorHemiEllipsoid_swigregister(FormFactorHemiEllipsoid)
 
-class FormFactorHollowSphere(IBornFF):
+class FormFactorHollowSphere(IFormFactor):
     r"""
 
 
@@ -8956,7 +8956,7 @@ class FormFactorHollowSphere(IBornFF):
 # Register FormFactorHollowSphere in _libBornAgainSample:
 _libBornAgainSample.FormFactorHollowSphere_swigregister(FormFactorHollowSphere)
 
-class FormFactorHorizontalCylinder(IBornFF):
+class FormFactorHorizontalCylinder(IFormFactor):
     r"""
 
 
@@ -9119,7 +9119,7 @@ class FormFactorIcosahedron(IFormFactorPolyhedron):
 # Register FormFactorIcosahedron in _libBornAgainSample:
 _libBornAgainSample.FormFactorIcosahedron_swigregister(FormFactorIcosahedron)
 
-class FormFactorLongBoxGauss(IBornFF):
+class FormFactorLongBoxGauss(IFormFactor):
     r"""
 
 
@@ -9213,7 +9213,7 @@ class FormFactorLongBoxGauss(IBornFF):
 # Register FormFactorLongBoxGauss in _libBornAgainSample:
 _libBornAgainSample.FormFactorLongBoxGauss_swigregister(FormFactorLongBoxGauss)
 
-class FormFactorLongBoxLorentz(IBornFF):
+class FormFactorLongBoxLorentz(IFormFactor):
     r"""
 
 
@@ -10115,7 +10115,7 @@ class FormFactorTruncatedCube(IFormFactorPolyhedron):
 # Register FormFactorTruncatedCube in _libBornAgainSample:
 _libBornAgainSample.FormFactorTruncatedCube_swigregister(FormFactorTruncatedCube)
 
-class FormFactorTruncatedSphere(IBornFF):
+class FormFactorTruncatedSphere(IFormFactor):
     r"""
 
 
@@ -10211,7 +10211,7 @@ class FormFactorTruncatedSphere(IBornFF):
 # Register FormFactorTruncatedSphere in _libBornAgainSample:
 _libBornAgainSample.FormFactorTruncatedSphere_swigregister(FormFactorTruncatedSphere)
 
-class FormFactorTruncatedSpheroid(IBornFF):
+class FormFactorTruncatedSpheroid(IFormFactor):
     r"""
 
 
@@ -10313,7 +10313,7 @@ class FormFactorTruncatedSpheroid(IBornFF):
 # Register FormFactorTruncatedSpheroid in _libBornAgainSample:
 _libBornAgainSample.FormFactorTruncatedSpheroid_swigregister(FormFactorTruncatedSpheroid)
 
-class FormFactorGaussSphere(IBornFF):
+class FormFactorGaussSphere(IFormFactor):
     r"""
 
 
@@ -10391,7 +10391,7 @@ class FormFactorGaussSphere(IBornFF):
 # Register FormFactorGaussSphere in _libBornAgainSample:
 _libBornAgainSample.FormFactorGaussSphere_swigregister(FormFactorGaussSphere)
 
-class FormFactorSphereGaussianRadius(IBornFF):
+class FormFactorSphereGaussianRadius(IFormFactor):
     r"""
 
 
@@ -10461,7 +10461,7 @@ class FormFactorSphereGaussianRadius(IBornFF):
 # Register FormFactorSphereGaussianRadius in _libBornAgainSample:
 _libBornAgainSample.FormFactorSphereGaussianRadius_swigregister(FormFactorSphereGaussianRadius)
 
-class FormFactorSphereLogNormalRadius(IBornFF):
+class FormFactorSphereLogNormalRadius(IFormFactor):
     r"""
 
 
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index d14ceb60823152503195366252904c403668e75f..367a36f785a5d953c2fa1fcb7779969b6f853972 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -3138,9 +3138,9 @@ namespace Swig {
 #define SWIGTYPE_p_FormFactorTruncatedSpheroid swig_types[38]
 #define SWIGTYPE_p_GaussFisherPeakShape swig_types[39]
 #define SWIGTYPE_p_HexagonalLattice2D swig_types[40]
-#define SWIGTYPE_p_IBornFF swig_types[41]
-#define SWIGTYPE_p_ICloneable swig_types[42]
-#define SWIGTYPE_p_ICosineRipple swig_types[43]
+#define SWIGTYPE_p_ICloneable swig_types[41]
+#define SWIGTYPE_p_ICosineRipple swig_types[42]
+#define SWIGTYPE_p_IFormFactor swig_types[43]
 #define SWIGTYPE_p_IFormFactorPolyhedron swig_types[44]
 #define SWIGTYPE_p_IFormFactorPrism swig_types[45]
 #define SWIGTYPE_p_IInterference swig_types[46]
@@ -5358,7 +5358,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/share/swig4.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/local/share/swig/4.0.2/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&
 
@@ -7737,31 +7737,31 @@ Material const *SwigDirector_ISampleNode::material() const {
 }
 
 
-SwigDirector_IBornFF::SwigDirector_IBornFF(PyObject *self): IBornFF(), Swig::Director(self) {
-  SWIG_DIRECTOR_RGTR((IBornFF *)this, this); 
+SwigDirector_IFormFactor::SwigDirector_IFormFactor(PyObject *self): IFormFactor(), Swig::Director(self) {
+  SWIG_DIRECTOR_RGTR((IFormFactor *)this, this); 
 }
 
 
 
 
-SwigDirector_IBornFF::SwigDirector_IBornFF(PyObject *self, std::vector< double, std::allocator< double > > const &PValues): IBornFF(PValues), Swig::Director(self) {
-  SWIG_DIRECTOR_RGTR((IBornFF *)this, this); 
+SwigDirector_IFormFactor::SwigDirector_IFormFactor(PyObject *self, std::vector< double, std::allocator< double > > const &PValues): IFormFactor(PValues), Swig::Director(self) {
+  SWIG_DIRECTOR_RGTR((IFormFactor *)this, this); 
 }
 
 
 
 
-SwigDirector_IBornFF::~SwigDirector_IBornFF() {
+SwigDirector_IFormFactor::~SwigDirector_IFormFactor() {
 }
 
-IBornFF *SwigDirector_IBornFF::clone() const {
-  IBornFF *c_result = 0 ;
+IFormFactor *SwigDirector_IFormFactor::clone() const {
+  IFormFactor *c_result = 0 ;
   void *swig_argp ;
   int swig_res ;
   swig_owntype own ;
   
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
@@ -7776,22 +7776,22 @@ IBornFF *SwigDirector_IBornFF::clone() const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.clone'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.clone'");
     }
   }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_IBornFF,  0  | SWIG_POINTER_DISOWN, &own);
+  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_IFormFactor,  0  | SWIG_POINTER_DISOWN, &own);
   if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""IBornFF *""'");
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""IFormFactor *""'");
   }
-  c_result = reinterpret_cast< IBornFF * >(swig_argp);
+  c_result = reinterpret_cast< IFormFactor * >(swig_argp);
   swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (IBornFF *) c_result;
+  return (IFormFactor *) c_result;
 }
 
 
-void SwigDirector_IBornFF::transferToCPP() {
+void SwigDirector_IFormFactor::transferToCPP() {
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
@@ -7806,16 +7806,16 @@ void SwigDirector_IBornFF::transferToCPP() {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.transferToCPP'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.transferToCPP'");
     }
   }
 }
 
 
-std::string SwigDirector_IBornFF::className() const {
+std::string SwigDirector_IFormFactor::className() const {
   std::string c_result;
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 2;
@@ -7830,7 +7830,7 @@ std::string SwigDirector_IBornFF::className() const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.className'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.className'");
     }
   }
   std::string *swig_optr = 0;
@@ -7844,13 +7844,13 @@ std::string SwigDirector_IBornFF::className() const {
 }
 
 
-std::vector< ParaMeta, std::allocator< ParaMeta > > SwigDirector_IBornFF::parDefs() const {
+std::vector< ParaMeta, std::allocator< ParaMeta > > SwigDirector_IFormFactor::parDefs() const {
   void *swig_argp ;
   int swig_res = 0 ;
   
   std::vector< ParaMeta,std::allocator< ParaMeta > > c_result;
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 3;
@@ -7865,7 +7865,7 @@ std::vector< ParaMeta, std::allocator< ParaMeta > > SwigDirector_IBornFF::parDef
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.parDefs'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.parDefs'");
     }
   }
   swig_res = SWIG_ConvertPtr(result,&swig_argp,SWIGTYPE_p_std__vectorT_ParaMeta_std__allocatorT_ParaMeta_t_t,  0  | 0);
@@ -7878,10 +7878,10 @@ std::vector< ParaMeta, std::allocator< ParaMeta > > SwigDirector_IBornFF::parDef
 }
 
 
-std::vector< INode const *, std::allocator< INode const * > > SwigDirector_IBornFF::nodeChildren() const {
+std::vector< INode const *, std::allocator< INode const * > > SwigDirector_IFormFactor::nodeChildren() const {
   std::vector< INode const *,std::allocator< INode const * > > c_result;
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 4;
@@ -7896,7 +7896,7 @@ std::vector< INode const *, std::allocator< INode const * > > SwigDirector_IBorn
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.nodeChildren'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.nodeChildren'");
     }
   }
   std::vector< INode const*,std::allocator< INode const * > > *swig_optr = 0;
@@ -7910,14 +7910,14 @@ std::vector< INode const *, std::allocator< INode const * > > SwigDirector_IBorn
 }
 
 
-Material const *SwigDirector_IBornFF::material() const {
+Material const *SwigDirector_IFormFactor::material() const {
   Material *c_result = 0 ;
   void *swig_argp ;
   int swig_res ;
   swig_owntype own ;
   
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 5;
@@ -7932,7 +7932,7 @@ Material const *SwigDirector_IBornFF::material() const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.material'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.material'");
     }
   }
   swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_Material,  0  | SWIG_POINTER_DISOWN, &own);
@@ -7945,12 +7945,12 @@ Material const *SwigDirector_IBornFF::material() const {
 }
 
 
-complex_t SwigDirector_IBornFF::theFF(WavevectorInfo const &wavevectors) const {
+complex_t SwigDirector_IFormFactor::theFF(WavevectorInfo const &wavevectors) const {
   complex_t c_result;
   swig::SwigVar_PyObject obj0;
   obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(&wavevectors), SWIGTYPE_p_WavevectorInfo,  0 );
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 6;
@@ -7964,7 +7964,7 @@ complex_t SwigDirector_IBornFF::theFF(WavevectorInfo const &wavevectors) const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.theFF'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.theFF'");
     }
   }
   std::complex<double> swig_val;
@@ -7977,13 +7977,13 @@ complex_t SwigDirector_IBornFF::theFF(WavevectorInfo const &wavevectors) const {
 }
 
 
-double SwigDirector_IBornFF::bottomZ(IRotation const *rotation) const {
+double SwigDirector_IFormFactor::bottomZ(IRotation const *rotation) const {
   double c_result = SwigValueInit< double >() ;
   
   swig::SwigVar_PyObject obj0;
   obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(rotation), SWIGTYPE_p_IRotation,  0 );
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 7;
@@ -7997,7 +7997,7 @@ double SwigDirector_IBornFF::bottomZ(IRotation const *rotation) const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.bottomZ'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.bottomZ'");
     }
   }
   double swig_val;
@@ -8010,13 +8010,13 @@ double SwigDirector_IBornFF::bottomZ(IRotation const *rotation) const {
 }
 
 
-double SwigDirector_IBornFF::topZ(IRotation const *rotation) const {
+double SwigDirector_IFormFactor::topZ(IRotation const *rotation) const {
   double c_result = SwigValueInit< double >() ;
   
   swig::SwigVar_PyObject obj0;
   obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(rotation), SWIGTYPE_p_IRotation,  0 );
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 8;
@@ -8030,7 +8030,7 @@ double SwigDirector_IBornFF::topZ(IRotation const *rotation) const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.topZ'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.topZ'");
     }
   }
   double swig_val;
@@ -8043,11 +8043,11 @@ double SwigDirector_IBornFF::topZ(IRotation const *rotation) const {
 }
 
 
-double SwigDirector_IBornFF::volume() const {
+double SwigDirector_IFormFactor::volume() const {
   double c_result = SwigValueInit< double >() ;
   
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 9;
@@ -8062,7 +8062,7 @@ double SwigDirector_IBornFF::volume() const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.volume'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.volume'");
     }
   }
   double swig_val;
@@ -8075,11 +8075,11 @@ double SwigDirector_IBornFF::volume() const {
 }
 
 
-double SwigDirector_IBornFF::radialExtension() const {
+double SwigDirector_IFormFactor::radialExtension() const {
   double c_result = SwigValueInit< double >() ;
   
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 10;
@@ -8094,7 +8094,7 @@ double SwigDirector_IBornFF::radialExtension() const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.radialExtension'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.radialExtension'");
     }
   }
   double swig_val;
@@ -8107,12 +8107,12 @@ double SwigDirector_IBornFF::radialExtension() const {
 }
 
 
-complex_t SwigDirector_IBornFF::formfactor_at_bottom(C3 q) const {
+complex_t SwigDirector_IFormFactor::formfactor_at_bottom(C3 q) const {
   complex_t c_result;
   swig::SwigVar_PyObject obj0;
   obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(new C3((const C3 &)q)), SWIGTYPE_p_Vec3T_std__complexT_double_t_t, SWIG_POINTER_OWN |  0 );
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 11;
@@ -8126,7 +8126,7 @@ complex_t SwigDirector_IBornFF::formfactor_at_bottom(C3 q) const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.formfactor_at_bottom'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.formfactor_at_bottom'");
     }
   }
   std::complex<double> swig_val;
@@ -8139,10 +8139,10 @@ complex_t SwigDirector_IBornFF::formfactor_at_bottom(C3 q) const {
 }
 
 
-std::string SwigDirector_IBornFF::pythonConstructor() const {
+std::string SwigDirector_IFormFactor::pythonConstructor() const {
   std::string c_result;
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 12;
@@ -8157,7 +8157,7 @@ std::string SwigDirector_IBornFF::pythonConstructor() const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.pythonConstructor'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.pythonConstructor'");
     }
   }
   std::string *swig_optr = 0;
@@ -8171,13 +8171,13 @@ std::string SwigDirector_IBornFF::pythonConstructor() const {
 }
 
 
-bool SwigDirector_IBornFF::canSliceAnalytically(IRotation const *rot) const {
+bool SwigDirector_IFormFactor::canSliceAnalytically(IRotation const *rot) const {
   bool c_result = SwigValueInit< bool >() ;
   
   swig::SwigVar_PyObject obj0;
   obj0 = SWIG_NewPointerObj(SWIG_as_voidptr(rot), SWIGTYPE_p_IRotation,  0 );
   if (!swig_get_self()) {
-    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
+    Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 13;
@@ -8191,7 +8191,7 @@ bool SwigDirector_IBornFF::canSliceAnalytically(IRotation const *rot) const {
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.canSliceAnalytically'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.canSliceAnalytically'");
     }
   }
   bool swig_val;
@@ -37183,34 +37183,34 @@ SWIGINTERN PyObject *ISampleNode_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObje
   return SWIG_Python_InitShadowInstance(args);
 }
 
-SWIGINTERN PyObject *_wrap_new_IBornFF__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_IFormFactor__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   PyObject *arg1 = (PyObject *) 0 ;
-  IBornFF *result = 0 ;
+  IFormFactor *result = 0 ;
   
   if ((nobjs < 1) || (nobjs > 1)) SWIG_fail;
   arg1 = swig_obj[0];
   if ( arg1 != Py_None ) {
     /* subclassed */
-    result = (IBornFF *)new SwigDirector_IBornFF(arg1); 
+    result = (IFormFactor *)new SwigDirector_IFormFactor(arg1); 
   } else {
     SWIG_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor"); 
     SWIG_fail;
   }
   
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IBornFF, SWIG_POINTER_NEW |  0 );
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFormFactor, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_IBornFF__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
+SWIGINTERN PyObject *_wrap_new_IFormFactor__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   PyObject *arg1 = (PyObject *) 0 ;
   std::vector< double,std::allocator< double > > *arg2 = 0 ;
   int res2 = SWIG_OLDOBJ ;
-  IBornFF *result = 0 ;
+  IFormFactor *result = 0 ;
   
   if ((nobjs < 2) || (nobjs > 2)) SWIG_fail;
   arg1 = swig_obj[0];
@@ -37218,22 +37218,22 @@ SWIGINTERN PyObject *_wrap_new_IBornFF__SWIG_1(PyObject *SWIGUNUSEDPARM(self), P
     std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
     res2 = swig::asptr(swig_obj[1], &ptr);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_IBornFF" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_IFormFactor" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IBornFF" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFormFactor" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
     }
     arg2 = ptr;
   }
   if ( arg1 != Py_None ) {
     /* subclassed */
-    result = (IBornFF *)new SwigDirector_IBornFF(arg1,(std::vector< double,std::allocator< double > > const &)*arg2); 
+    result = (IFormFactor *)new SwigDirector_IFormFactor(arg1,(std::vector< double,std::allocator< double > > const &)*arg2); 
   } else {
     SWIG_SetErrorMsg(PyExc_RuntimeError,"accessing abstract class or protected constructor"); 
     SWIG_fail;
   }
   
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IBornFF, SWIG_POINTER_NEW |  0 );
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFormFactor, SWIG_POINTER_NEW |  0 );
   if (SWIG_IsNewObj(res2)) delete arg2;
   return resultobj;
 fail:
@@ -37242,19 +37242,19 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_new_IBornFF(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_IFormFactor(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[3] = {
     0
   };
   
-  if (!(argc = SWIG_Python_UnpackTuple(args, "new_IBornFF", 0, 2, argv))) SWIG_fail;
+  if (!(argc = SWIG_Python_UnpackTuple(args, "new_IFormFactor", 0, 2, argv))) SWIG_fail;
   --argc;
   if (argc == 1) {
     int _v;
     _v = (argv[0] != 0);
     if (_v) {
-      return _wrap_new_IBornFF__SWIG_0(self, argc, argv);
+      return _wrap_new_IFormFactor__SWIG_0(self, argc, argv);
     }
   }
   if (argc == 2) {
@@ -37264,34 +37264,34 @@ SWIGINTERN PyObject *_wrap_new_IBornFF(PyObject *self, PyObject *args) {
       int res = swig::asptr(argv[1], (std::vector< double,std::allocator< double > >**)(0));
       _v = SWIG_CheckState(res);
       if (_v) {
-        return _wrap_new_IBornFF__SWIG_1(self, argc, argv);
+        return _wrap_new_IFormFactor__SWIG_1(self, argc, argv);
       }
     }
   }
   
 fail:
-  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_IBornFF'.\n"
+  SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_IFormFactor'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    IBornFF::IBornFF()\n"
-    "    IBornFF::IBornFF(PyObject *,std::vector< double,std::allocator< double > > const &)\n");
+    "    IFormFactor::IFormFactor()\n"
+    "    IFormFactor::IFormFactor(PyObject *,std::vector< double,std::allocator< double > > const &)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_IBornFF(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_IFormFactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, SWIG_POINTER_DISOWN |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IBornFF" "', argument " "1"" of type '" "IBornFF *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IFormFactor" "', argument " "1"" of type '" "IFormFactor *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   delete arg1;
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -37300,30 +37300,30 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IBornFF_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFormFactor_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   Swig::Director *director = 0;
   bool upcall = false;
-  IBornFF *result = 0 ;
+  IFormFactor *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_clone" "', argument " "1"" of type '" "IBornFF const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_clone" "', argument " "1"" of type '" "IFormFactor const *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   director = SWIG_DIRECTOR_CAST(arg1);
   upcall = (director && (director->swig_get_self()==swig_obj[0]));
   try {
     if (upcall) {
-      Swig::DirectorPureVirtualException::raise("IBornFF::clone");
+      Swig::DirectorPureVirtualException::raise("IFormFactor::clone");
     } else {
-      result = (IBornFF *)((IBornFF const *)arg1)->clone();
+      result = (IFormFactor *)((IFormFactor const *)arg1)->clone();
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
@@ -37333,7 +37333,7 @@ SWIGINTERN PyObject *_wrap_IBornFF_clone(PyObject *SWIGUNUSEDPARM(self), PyObjec
     resultobj = director->swig_get_self();
     Py_INCREF(resultobj);
   } else {
-    resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IBornFF, 0 |  0 );
+    resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFormFactor, 0 |  0 );
   }
   if (director) {
     SWIG_AcquirePtr(resultobj, director->swig_release_ownership(SWIG_as_voidptr(result)));
@@ -37344,9 +37344,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IBornFF_theFF(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFormFactor_theFF(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   WavevectorInfo *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -37357,27 +37357,27 @@ SWIGINTERN PyObject *_wrap_IBornFF_theFF(PyObject *SWIGUNUSEDPARM(self), PyObjec
   bool upcall = false;
   complex_t result;
   
-  if (!SWIG_Python_UnpackTuple(args, "IBornFF_theFF", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "IFormFactor_theFF", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_theFF" "', argument " "1"" of type '" "IBornFF const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_theFF" "', argument " "1"" of type '" "IFormFactor const *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_WavevectorInfo,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IBornFF_theFF" "', argument " "2"" of type '" "WavevectorInfo const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactor_theFF" "', argument " "2"" of type '" "WavevectorInfo const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IBornFF_theFF" "', argument " "2"" of type '" "WavevectorInfo const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFormFactor_theFF" "', argument " "2"" of type '" "WavevectorInfo const &""'"); 
   }
   arg2 = reinterpret_cast< WavevectorInfo * >(argp2);
   director = SWIG_DIRECTOR_CAST(arg1);
   upcall = (director && (director->swig_get_self()==swig_obj[0]));
   try {
     if (upcall) {
-      result = ((IBornFF const *)arg1)->IBornFF::theFF((WavevectorInfo const &)*arg2);
+      result = ((IFormFactor const *)arg1)->IFormFactor::theFF((WavevectorInfo const &)*arg2);
     } else {
-      result = ((IBornFF const *)arg1)->theFF((WavevectorInfo const &)*arg2);
+      result = ((IFormFactor const *)arg1)->theFF((WavevectorInfo const &)*arg2);
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
@@ -37389,9 +37389,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IBornFF_shapeName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFormFactor_shapeName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -37399,12 +37399,12 @@ SWIGINTERN PyObject *_wrap_IBornFF_shapeName(PyObject *SWIGUNUSEDPARM(self), PyO
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_shapeName" "', argument " "1"" of type '" "IBornFF const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_shapeName" "', argument " "1"" of type '" "IFormFactor const *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
-  result = ((IBornFF const *)arg1)->shapeName();
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
+  result = ((IFormFactor const *)arg1)->shapeName();
   resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
@@ -37412,9 +37412,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IBornFF_bottomZ(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFormFactor_bottomZ(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   IRotation *arg2 = (IRotation *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -37425,24 +37425,24 @@ SWIGINTERN PyObject *_wrap_IBornFF_bottomZ(PyObject *SWIGUNUSEDPARM(self), PyObj
   bool upcall = false;
   double result;
   
-  if (!SWIG_Python_UnpackTuple(args, "IBornFF_bottomZ", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "IFormFactor_bottomZ", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_bottomZ" "', argument " "1"" of type '" "IBornFF const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_bottomZ" "', argument " "1"" of type '" "IFormFactor const *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_IRotation, 0 |  0 );
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IBornFF_bottomZ" "', argument " "2"" of type '" "IRotation const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactor_bottomZ" "', argument " "2"" of type '" "IRotation const *""'"); 
   }
   arg2 = reinterpret_cast< IRotation * >(argp2);
   director = SWIG_DIRECTOR_CAST(arg1);
   upcall = (director && (director->swig_get_self()==swig_obj[0]));
   try {
     if (upcall) {
-      result = (double)((IBornFF const *)arg1)->IBornFF::bottomZ((IRotation const *)arg2);
+      result = (double)((IFormFactor const *)arg1)->IFormFactor::bottomZ((IRotation const *)arg2);
     } else {
-      result = (double)((IBornFF const *)arg1)->bottomZ((IRotation const *)arg2);
+      result = (double)((IFormFactor const *)arg1)->bottomZ((IRotation const *)arg2);
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
@@ -37454,9 +37454,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IBornFF_topZ(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFormFactor_topZ(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   IRotation *arg2 = (IRotation *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -37467,24 +37467,24 @@ SWIGINTERN PyObject *_wrap_IBornFF_topZ(PyObject *SWIGUNUSEDPARM(self), PyObject
   bool upcall = false;
   double result;
   
-  if (!SWIG_Python_UnpackTuple(args, "IBornFF_topZ", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "IFormFactor_topZ", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_topZ" "', argument " "1"" of type '" "IBornFF const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_topZ" "', argument " "1"" of type '" "IFormFactor const *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_IRotation, 0 |  0 );
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IBornFF_topZ" "', argument " "2"" of type '" "IRotation const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactor_topZ" "', argument " "2"" of type '" "IRotation const *""'"); 
   }
   arg2 = reinterpret_cast< IRotation * >(argp2);
   director = SWIG_DIRECTOR_CAST(arg1);
   upcall = (director && (director->swig_get_self()==swig_obj[0]));
   try {
     if (upcall) {
-      result = (double)((IBornFF const *)arg1)->IBornFF::topZ((IRotation const *)arg2);
+      result = (double)((IFormFactor const *)arg1)->IFormFactor::topZ((IRotation const *)arg2);
     } else {
-      result = (double)((IBornFF const *)arg1)->topZ((IRotation const *)arg2);
+      result = (double)((IFormFactor const *)arg1)->topZ((IRotation const *)arg2);
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
@@ -37496,9 +37496,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IBornFF_volume(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFormFactor_volume(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -37508,18 +37508,18 @@ SWIGINTERN PyObject *_wrap_IBornFF_volume(PyObject *SWIGUNUSEDPARM(self), PyObje
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_volume" "', argument " "1"" of type '" "IBornFF const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_volume" "', argument " "1"" of type '" "IFormFactor const *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   director = SWIG_DIRECTOR_CAST(arg1);
   upcall = (director && (director->swig_get_self()==swig_obj[0]));
   try {
     if (upcall) {
-      result = (double)((IBornFF const *)arg1)->IBornFF::volume();
+      result = (double)((IFormFactor const *)arg1)->IFormFactor::volume();
     } else {
-      result = (double)((IBornFF const *)arg1)->volume();
+      result = (double)((IFormFactor const *)arg1)->volume();
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
@@ -37531,9 +37531,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IBornFF_radialExtension(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFormFactor_radialExtension(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -37543,18 +37543,18 @@ SWIGINTERN PyObject *_wrap_IBornFF_radialExtension(PyObject *SWIGUNUSEDPARM(self
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_radialExtension" "', argument " "1"" of type '" "IBornFF const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_radialExtension" "', argument " "1"" of type '" "IFormFactor const *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   director = SWIG_DIRECTOR_CAST(arg1);
   upcall = (director && (director->swig_get_self()==swig_obj[0]));
   try {
     if (upcall) {
-      Swig::DirectorPureVirtualException::raise("IBornFF::radialExtension");
+      Swig::DirectorPureVirtualException::raise("IFormFactor::radialExtension");
     } else {
-      result = (double)((IBornFF const *)arg1)->radialExtension();
+      result = (double)((IFormFactor const *)arg1)->radialExtension();
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
@@ -37566,9 +37566,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IBornFF_formfactor_at_bottom(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFormFactor_formfactor_at_bottom(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   C3 arg2 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -37579,19 +37579,19 @@ SWIGINTERN PyObject *_wrap_IBornFF_formfactor_at_bottom(PyObject *SWIGUNUSEDPARM
   bool upcall = false;
   complex_t result;
   
-  if (!SWIG_Python_UnpackTuple(args, "IBornFF_formfactor_at_bottom", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "IFormFactor_formfactor_at_bottom", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_formfactor_at_bottom" "', argument " "1"" of type '" "IBornFF const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_formfactor_at_bottom" "', argument " "1"" of type '" "IFormFactor const *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   {
     res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_Vec3T_std__complexT_double_t_t,  0  | 0);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IBornFF_formfactor_at_bottom" "', argument " "2"" of type '" "C3""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactor_formfactor_at_bottom" "', argument " "2"" of type '" "C3""'"); 
     }  
     if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IBornFF_formfactor_at_bottom" "', argument " "2"" of type '" "C3""'");
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFormFactor_formfactor_at_bottom" "', argument " "2"" of type '" "C3""'");
     } else {
       C3 * temp = reinterpret_cast< C3 * >(argp2);
       arg2 = *temp;
@@ -37602,9 +37602,9 @@ SWIGINTERN PyObject *_wrap_IBornFF_formfactor_at_bottom(PyObject *SWIGUNUSEDPARM
   upcall = (director && (director->swig_get_self()==swig_obj[0]));
   try {
     if (upcall) {
-      Swig::DirectorPureVirtualException::raise("IBornFF::formfactor_at_bottom");
+      Swig::DirectorPureVirtualException::raise("IFormFactor::formfactor_at_bottom");
     } else {
-      result = ((IBornFF const *)arg1)->formfactor_at_bottom(arg2);
+      result = ((IFormFactor const *)arg1)->formfactor_at_bottom(arg2);
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
@@ -37616,9 +37616,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IBornFF_pythonConstructor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFormFactor_pythonConstructor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
@@ -37628,18 +37628,18 @@ SWIGINTERN PyObject *_wrap_IBornFF_pythonConstructor(PyObject *SWIGUNUSEDPARM(se
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_pythonConstructor" "', argument " "1"" of type '" "IBornFF const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_pythonConstructor" "', argument " "1"" of type '" "IFormFactor const *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   director = SWIG_DIRECTOR_CAST(arg1);
   upcall = (director && (director->swig_get_self()==swig_obj[0]));
   try {
     if (upcall) {
-      result = ((IBornFF const *)arg1)->IBornFF::pythonConstructor();
+      result = ((IFormFactor const *)arg1)->IFormFactor::pythonConstructor();
     } else {
-      result = ((IBornFF const *)arg1)->pythonConstructor();
+      result = ((IFormFactor const *)arg1)->pythonConstructor();
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
@@ -37651,9 +37651,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IBornFF_canSliceAnalytically(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFormFactor_canSliceAnalytically(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   IRotation *arg2 = (IRotation *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -37664,24 +37664,24 @@ SWIGINTERN PyObject *_wrap_IBornFF_canSliceAnalytically(PyObject *SWIGUNUSEDPARM
   bool upcall = false;
   bool result;
   
-  if (!SWIG_Python_UnpackTuple(args, "IBornFF_canSliceAnalytically", 2, 2, swig_obj)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_Python_UnpackTuple(args, "IFormFactor_canSliceAnalytically", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_canSliceAnalytically" "', argument " "1"" of type '" "IBornFF const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_canSliceAnalytically" "', argument " "1"" of type '" "IFormFactor const *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   res2 = SWIG_ConvertPtr(swig_obj[1], &argp2,SWIGTYPE_p_IRotation, 0 |  0 );
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IBornFF_canSliceAnalytically" "', argument " "2"" of type '" "IRotation const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFormFactor_canSliceAnalytically" "', argument " "2"" of type '" "IRotation const *""'"); 
   }
   arg2 = reinterpret_cast< IRotation * >(argp2);
   director = SWIG_DIRECTOR_CAST(arg1);
   upcall = (director && (director->swig_get_self()==swig_obj[0]));
   try {
     if (upcall) {
-      result = (bool)((IBornFF const *)arg1)->IBornFF::canSliceAnalytically((IRotation const *)arg2);
+      result = (bool)((IFormFactor const *)arg1)->IFormFactor::canSliceAnalytically((IRotation const *)arg2);
     } else {
-      result = (bool)((IBornFF const *)arg1)->canSliceAnalytically((IRotation const *)arg2);
+      result = (bool)((IFormFactor const *)arg1)->canSliceAnalytically((IRotation const *)arg2);
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
@@ -37693,20 +37693,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_disown_IBornFF(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_disown_IFormFactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IBornFF *arg1 = (IBornFF *) 0 ;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
-  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "disown_IBornFF" "', argument " "1"" of type '" "IBornFF *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "disown_IFormFactor" "', argument " "1"" of type '" "IFormFactor *""'"); 
   }
-  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
   {
     Swig::Director *director = SWIG_DIRECTOR_CAST(arg1);
     if (director) director->swig_disown();
@@ -37719,14 +37719,14 @@ fail:
 }
 
 
-SWIGINTERN PyObject *IBornFF_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *IFormFactor_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_IBornFF, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_IFormFactor, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *IBornFF_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *IFormFactor_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   return SWIG_Python_InitShadowInstance(args);
 }
 
@@ -39986,7 +39986,7 @@ SWIGINTERN PyObject *IParticle_swigregister(PyObject *SWIGUNUSEDPARM(self), PyOb
 SWIGINTERN PyObject *_wrap_new_MesoCrystal(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   Crystal *arg1 = 0 ;
-  IBornFF *arg2 = 0 ;
+  IFormFactor *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -40003,15 +40003,15 @@ SWIGINTERN PyObject *_wrap_new_MesoCrystal(PyObject *SWIGUNUSEDPARM(self), PyObj
     SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_MesoCrystal" "', argument " "1"" of type '" "Crystal const &""'"); 
   }
   arg1 = reinterpret_cast< Crystal * >(argp1);
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_IBornFF,  0  | 0);
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_IFormFactor,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_MesoCrystal" "', argument " "2"" of type '" "IBornFF const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_MesoCrystal" "', argument " "2"" of type '" "IFormFactor const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_MesoCrystal" "', argument " "2"" of type '" "IBornFF const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_MesoCrystal" "', argument " "2"" of type '" "IFormFactor const &""'"); 
   }
-  arg2 = reinterpret_cast< IBornFF * >(argp2);
-  result = (MesoCrystal *)new MesoCrystal((Crystal const &)*arg1,(IBornFF const &)*arg2);
+  arg2 = reinterpret_cast< IFormFactor * >(argp2);
+  result = (MesoCrystal *)new MesoCrystal((Crystal const &)*arg1,(IFormFactor const &)*arg2);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MesoCrystal, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -40117,7 +40117,7 @@ SWIGINTERN PyObject *_wrap_MesoCrystal_outerShape(PyObject *SWIGUNUSEDPARM(self)
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   Swig::Director *director = 0;
-  IBornFF *result = 0 ;
+  IFormFactor *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
@@ -40126,13 +40126,13 @@ SWIGINTERN PyObject *_wrap_MesoCrystal_outerShape(PyObject *SWIGUNUSEDPARM(self)
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MesoCrystal_outerShape" "', argument " "1"" of type '" "MesoCrystal const *""'"); 
   }
   arg1 = reinterpret_cast< MesoCrystal * >(argp1);
-  result = (IBornFF *)((MesoCrystal const *)arg1)->outerShape();
+  result = (IFormFactor *)((MesoCrystal const *)arg1)->outerShape();
   director = SWIG_DIRECTOR_CAST(result);
   if (director) {
     resultobj = director->swig_get_self();
     Py_INCREF(resultobj);
   } else {
-    resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IBornFF, 0 |  0 );
+    resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFormFactor, 0 |  0 );
   }
   return resultobj;
 fail:
@@ -40177,7 +40177,7 @@ SWIGINTERN PyObject *MesoCrystal_swiginit(PyObject *SWIGUNUSEDPARM(self), PyObje
 SWIGINTERN PyObject *_wrap_new_Particle__SWIG_0(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   SwigValueWrapper< Material > arg1 ;
-  IBornFF *arg2 = 0 ;
+  IFormFactor *arg2 = 0 ;
   void *argp1 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -40198,15 +40198,15 @@ SWIGINTERN PyObject *_wrap_new_Particle__SWIG_0(PyObject *SWIGUNUSEDPARM(self),
       if (SWIG_IsNewObj(res1)) delete temp;
     }
   }
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_IBornFF,  0  | 0);
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_IFormFactor,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_Particle" "', argument " "2"" of type '" "IBornFF const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_Particle" "', argument " "2"" of type '" "IFormFactor const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "2"" of type '" "IBornFF const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "2"" of type '" "IFormFactor const &""'"); 
   }
-  arg2 = reinterpret_cast< IBornFF * >(argp2);
-  result = (Particle *)new Particle(arg1,(IBornFF const &)*arg2);
+  arg2 = reinterpret_cast< IFormFactor * >(argp2);
+  result = (Particle *)new Particle(arg1,(IFormFactor const &)*arg2);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Particle, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -40217,7 +40217,7 @@ fail:
 SWIGINTERN PyObject *_wrap_new_Particle__SWIG_1(PyObject *SWIGUNUSEDPARM(self), Py_ssize_t nobjs, PyObject **swig_obj) {
   PyObject *resultobj = 0;
   SwigValueWrapper< Material > arg1 ;
-  IBornFF *arg2 = 0 ;
+  IFormFactor *arg2 = 0 ;
   IRotation *arg3 = 0 ;
   void *argp1 ;
   int res1 = 0 ;
@@ -40241,14 +40241,14 @@ SWIGINTERN PyObject *_wrap_new_Particle__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
       if (SWIG_IsNewObj(res1)) delete temp;
     }
   }
-  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_IBornFF,  0  | 0);
+  res2 = SWIG_ConvertPtr(swig_obj[1], &argp2, SWIGTYPE_p_IFormFactor,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_Particle" "', argument " "2"" of type '" "IBornFF const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_Particle" "', argument " "2"" of type '" "IFormFactor const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "2"" of type '" "IBornFF const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "2"" of type '" "IFormFactor const &""'"); 
   }
-  arg2 = reinterpret_cast< IBornFF * >(argp2);
+  arg2 = reinterpret_cast< IFormFactor * >(argp2);
   res3 = SWIG_ConvertPtr(swig_obj[2], &argp3, SWIGTYPE_p_IRotation,  0  | 0);
   if (!SWIG_IsOK(res3)) {
     SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_Particle" "', argument " "3"" of type '" "IRotation const &""'"); 
@@ -40257,7 +40257,7 @@ SWIGINTERN PyObject *_wrap_new_Particle__SWIG_1(PyObject *SWIGUNUSEDPARM(self),
     SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_Particle" "', argument " "3"" of type '" "IRotation const &""'"); 
   }
   arg3 = reinterpret_cast< IRotation * >(argp3);
-  result = (Particle *)new Particle(arg1,(IBornFF const &)*arg2,(IRotation const &)*arg3);
+  result = (Particle *)new Particle(arg1,(IFormFactor const &)*arg2,(IRotation const &)*arg3);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Particle, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -40278,7 +40278,7 @@ SWIGINTERN PyObject *_wrap_new_Particle(PyObject *self, PyObject *args) {
     int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Material, SWIG_POINTER_NO_NULL | 0);
     _v = SWIG_CheckState(res);
     if (_v) {
-      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_IBornFF, SWIG_POINTER_NO_NULL | 0);
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_IFormFactor, SWIG_POINTER_NO_NULL | 0);
       _v = SWIG_CheckState(res);
       if (_v) {
         return _wrap_new_Particle__SWIG_0(self, argc, argv);
@@ -40290,7 +40290,7 @@ SWIGINTERN PyObject *_wrap_new_Particle(PyObject *self, PyObject *args) {
     int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_Material, SWIG_POINTER_NO_NULL | 0);
     _v = SWIG_CheckState(res);
     if (_v) {
-      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_IBornFF, SWIG_POINTER_NO_NULL | 0);
+      int res = SWIG_ConvertPtr(argv[1], 0, SWIGTYPE_p_IFormFactor, SWIG_POINTER_NO_NULL | 0);
       _v = SWIG_CheckState(res);
       if (_v) {
         int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_IRotation, SWIG_POINTER_NO_NULL | 0);
@@ -40305,8 +40305,8 @@ SWIGINTERN PyObject *_wrap_new_Particle(PyObject *self, PyObject *args) {
 fail:
   SWIG_Python_RaiseOrModifyTypeError("Wrong number or type of arguments for overloaded function 'new_Particle'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    Particle::Particle(Material,IBornFF const &)\n"
-    "    Particle::Particle(Material,IBornFF const &,IRotation const &)\n");
+    "    Particle::Particle(Material,IFormFactor const &)\n"
+    "    Particle::Particle(Material,IFormFactor const &,IRotation const &)\n");
   return 0;
 }
 
@@ -40432,7 +40432,7 @@ SWIGINTERN PyObject *_wrap_Particle_formfactor_at_bottom(PyObject *SWIGUNUSEDPAR
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
   Swig::Director *director = 0;
-  IBornFF *result = 0 ;
+  IFormFactor *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
@@ -40441,13 +40441,13 @@ SWIGINTERN PyObject *_wrap_Particle_formfactor_at_bottom(PyObject *SWIGUNUSEDPAR
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Particle_formfactor_at_bottom" "', argument " "1"" of type '" "Particle const *""'"); 
   }
   arg1 = reinterpret_cast< Particle * >(argp1);
-  result = (IBornFF *)((Particle const *)arg1)->formfactor_at_bottom();
+  result = (IFormFactor *)((Particle const *)arg1)->formfactor_at_bottom();
   director = SWIG_DIRECTOR_CAST(result);
   if (director) {
     resultobj = director->swig_get_self();
     Py_INCREF(resultobj);
   } else {
-    resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IBornFF, 0 |  0 );
+    resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFormFactor, 0 |  0 );
   }
   return resultobj;
 fail:
@@ -65921,78 +65921,78 @@ static PyMethodDef SwigMethods[] = {
 	 { "disown_ISampleNode", _wrap_disown_ISampleNode, METH_O, NULL},
 	 { "ISampleNode_swigregister", ISampleNode_swigregister, METH_O, NULL},
 	 { "ISampleNode_swiginit", ISampleNode_swiginit, METH_VARARGS, NULL},
-	 { "new_IBornFF", _wrap_new_IBornFF, METH_VARARGS, "\n"
-		"IBornFF()\n"
-		"new_IBornFF(PyObject * _self, vdouble1d_t PValues) -> IBornFF\n"
-		"IBornFF::IBornFF(const std::vector< double > &PValues)\n"
+	 { "new_IFormFactor", _wrap_new_IFormFactor, METH_VARARGS, "\n"
+		"IFormFactor()\n"
+		"new_IFormFactor(PyObject * _self, vdouble1d_t PValues) -> IFormFactor\n"
+		"IFormFactor::IFormFactor(const std::vector< double > &PValues)\n"
 		"\n"
 		""},
-	 { "delete_IBornFF", _wrap_delete_IBornFF, METH_O, "\n"
-		"delete_IBornFF(IBornFF self)\n"
-		"IBornFF::~IBornFF() override\n"
+	 { "delete_IFormFactor", _wrap_delete_IFormFactor, METH_O, "\n"
+		"delete_IFormFactor(IFormFactor self)\n"
+		"IFormFactor::~IFormFactor() override\n"
 		"\n"
 		""},
-	 { "IBornFF_clone", _wrap_IBornFF_clone, METH_O, "\n"
-		"IBornFF_clone(IBornFF self) -> IBornFF\n"
-		"IBornFF* IBornFF::clone() const override=0\n"
+	 { "IFormFactor_clone", _wrap_IFormFactor_clone, METH_O, "\n"
+		"IFormFactor_clone(IFormFactor self) -> IFormFactor\n"
+		"IFormFactor* IFormFactor::clone() const override=0\n"
 		"\n"
 		"Returns a clone of this  ISampleNode object. \n"
 		"\n"
 		""},
-	 { "IBornFF_theFF", _wrap_IBornFF_theFF, METH_VARARGS, "\n"
-		"IBornFF_theFF(IBornFF self, WavevectorInfo const & wavevectors) -> complex_t\n"
-		"complex_t IBornFF::theFF(const WavevectorInfo &wavevectors) const\n"
+	 { "IFormFactor_theFF", _wrap_IFormFactor_theFF, METH_VARARGS, "\n"
+		"IFormFactor_theFF(IFormFactor self, WavevectorInfo const & wavevectors) -> complex_t\n"
+		"complex_t IFormFactor::theFF(const WavevectorInfo &wavevectors) const\n"
 		"\n"
 		""},
-	 { "IBornFF_shapeName", _wrap_IBornFF_shapeName, METH_O, "\n"
-		"IBornFF_shapeName(IBornFF self) -> std::string\n"
-		"std::string IBornFF::shapeName() const\n"
+	 { "IFormFactor_shapeName", _wrap_IFormFactor_shapeName, METH_O, "\n"
+		"IFormFactor_shapeName(IFormFactor self) -> std::string\n"
+		"std::string IFormFactor::shapeName() const\n"
 		"\n"
 		""},
-	 { "IBornFF_bottomZ", _wrap_IBornFF_bottomZ, METH_VARARGS, "\n"
-		"IBornFF_bottomZ(IBornFF self, IRotation rotation) -> double\n"
-		"double IBornFF::bottomZ(const IRotation *rotation) const\n"
+	 { "IFormFactor_bottomZ", _wrap_IFormFactor_bottomZ, METH_VARARGS, "\n"
+		"IFormFactor_bottomZ(IFormFactor self, IRotation rotation) -> double\n"
+		"double IFormFactor::bottomZ(const IRotation *rotation) const\n"
 		"\n"
 		""},
-	 { "IBornFF_topZ", _wrap_IBornFF_topZ, METH_VARARGS, "\n"
-		"IBornFF_topZ(IBornFF self, IRotation rotation) -> double\n"
-		"double IBornFF::topZ(const IRotation *rotation) const\n"
+	 { "IFormFactor_topZ", _wrap_IFormFactor_topZ, METH_VARARGS, "\n"
+		"IFormFactor_topZ(IFormFactor self, IRotation rotation) -> double\n"
+		"double IFormFactor::topZ(const IRotation *rotation) const\n"
 		"\n"
 		""},
-	 { "IBornFF_volume", _wrap_IBornFF_volume, METH_O, "\n"
-		"IBornFF_volume(IBornFF self) -> double\n"
-		"double IBornFF::volume() const\n"
+	 { "IFormFactor_volume", _wrap_IFormFactor_volume, METH_O, "\n"
+		"IFormFactor_volume(IFormFactor self) -> double\n"
+		"double IFormFactor::volume() const\n"
 		"\n"
 		""},
-	 { "IBornFF_radialExtension", _wrap_IBornFF_radialExtension, METH_O, "\n"
-		"IBornFF_radialExtension(IBornFF self) -> double\n"
-		"virtual double IBornFF::radialExtension() const =0\n"
+	 { "IFormFactor_radialExtension", _wrap_IFormFactor_radialExtension, METH_O, "\n"
+		"IFormFactor_radialExtension(IFormFactor self) -> double\n"
+		"virtual double IFormFactor::radialExtension() const =0\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"
 		""},
-	 { "IBornFF_formfactor_at_bottom", _wrap_IBornFF_formfactor_at_bottom, METH_VARARGS, "\n"
-		"IBornFF_formfactor_at_bottom(IBornFF self, C3 q) -> complex_t\n"
-		"virtual complex_t IBornFF::formfactor_at_bottom(C3 q) const =0\n"
+	 { "IFormFactor_formfactor_at_bottom", _wrap_IFormFactor_formfactor_at_bottom, METH_VARARGS, "\n"
+		"IFormFactor_formfactor_at_bottom(IFormFactor self, C3 q) -> complex_t\n"
+		"virtual complex_t IFormFactor::formfactor_at_bottom(C3 q) const =0\n"
 		"\n"
 		""},
-	 { "IBornFF_pythonConstructor", _wrap_IBornFF_pythonConstructor, METH_O, "\n"
-		"IBornFF_pythonConstructor(IBornFF self) -> std::string\n"
-		"std::string IBornFF::pythonConstructor() const\n"
+	 { "IFormFactor_pythonConstructor", _wrap_IFormFactor_pythonConstructor, METH_O, "\n"
+		"IFormFactor_pythonConstructor(IFormFactor self) -> std::string\n"
+		"std::string IFormFactor::pythonConstructor() const\n"
 		"\n"
 		"Creates the Python constructor of this class (or derived classes) \n"
 		"\n"
 		""},
-	 { "IBornFF_canSliceAnalytically", _wrap_IBornFF_canSliceAnalytically, METH_VARARGS, "\n"
-		"IBornFF_canSliceAnalytically(IBornFF self, IRotation rot) -> bool\n"
-		"bool IBornFF::canSliceAnalytically(const IRotation *rot) const\n"
+	 { "IFormFactor_canSliceAnalytically", _wrap_IFormFactor_canSliceAnalytically, METH_VARARGS, "\n"
+		"IFormFactor_canSliceAnalytically(IFormFactor self, IRotation rot) -> bool\n"
+		"bool IFormFactor::canSliceAnalytically(const IRotation *rot) const\n"
 		"\n"
 		"Default implementation only allows rotations along z-axis. \n"
 		"\n"
 		""},
-	 { "disown_IBornFF", _wrap_disown_IBornFF, METH_O, NULL},
-	 { "IBornFF_swigregister", IBornFF_swigregister, METH_O, NULL},
-	 { "IBornFF_swiginit", IBornFF_swiginit, METH_VARARGS, NULL},
+	 { "disown_IFormFactor", _wrap_disown_IFormFactor, METH_O, NULL},
+	 { "IFormFactor_swigregister", IFormFactor_swigregister, METH_O, NULL},
+	 { "IFormFactor_swiginit", IFormFactor_swiginit, METH_VARARGS, NULL},
 	 { "IRotation_createRotation", _wrap_IRotation_createRotation, METH_O, "IRotation_createRotation(RotMatrix transform) -> IRotation"},
 	 { "IRotation_clone", _wrap_IRotation_clone, METH_O, "\n"
 		"IRotation_clone(IRotation self) -> IRotation\n"
@@ -66406,8 +66406,8 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IParticle_swigregister", IParticle_swigregister, METH_O, NULL},
 	 { "new_MesoCrystal", _wrap_new_MesoCrystal, METH_VARARGS, "\n"
-		"new_MesoCrystal(Crystal crystal, IBornFF formfactor) -> MesoCrystal\n"
-		"MesoCrystal::MesoCrystal(const Crystal &crystal, const IBornFF &formfactor)\n"
+		"new_MesoCrystal(Crystal crystal, IFormFactor formfactor) -> MesoCrystal\n"
+		"MesoCrystal::MesoCrystal(const Crystal &crystal, const IFormFactor &formfactor)\n"
 		"\n"
 		""},
 	 { "delete_MesoCrystal", _wrap_delete_MesoCrystal, METH_O, "\n"
@@ -66433,8 +66433,8 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { "MesoCrystal_outerShape", _wrap_MesoCrystal_outerShape, METH_O, "\n"
-		"MesoCrystal_outerShape(MesoCrystal self) -> IBornFF\n"
-		"const IBornFF* MesoCrystal::outerShape() const\n"
+		"MesoCrystal_outerShape(MesoCrystal self) -> IFormFactor\n"
+		"const IFormFactor* MesoCrystal::outerShape() const\n"
 		"\n"
 		""},
 	 { "MesoCrystal_particleStructure", _wrap_MesoCrystal_particleStructure, METH_O, "\n"
@@ -66445,9 +66445,9 @@ static PyMethodDef SwigMethods[] = {
 	 { "MesoCrystal_swigregister", MesoCrystal_swigregister, METH_O, NULL},
 	 { "MesoCrystal_swiginit", MesoCrystal_swiginit, METH_VARARGS, NULL},
 	 { "new_Particle", _wrap_new_Particle, METH_VARARGS, "\n"
-		"Particle(Material material, IBornFF formfactor)\n"
-		"new_Particle(Material material, IBornFF formfactor, IRotation rotation) -> Particle\n"
-		"Particle::Particle(Material material, const IBornFF &formfactor, const IRotation &rotation)\n"
+		"Particle(Material material, IFormFactor formfactor)\n"
+		"new_Particle(Material material, IFormFactor formfactor, IRotation rotation) -> Particle\n"
+		"Particle::Particle(Material material, const IFormFactor &formfactor, const IRotation &rotation)\n"
 		"\n"
 		""},
 	 { "delete_Particle", _wrap_delete_Particle, METH_O, "\n"
@@ -66480,8 +66480,8 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { "Particle_formfactor_at_bottom", _wrap_Particle_formfactor_at_bottom, METH_O, "\n"
-		"Particle_formfactor_at_bottom(Particle self) -> IBornFF\n"
-		"const IBornFF* Particle::formfactor_at_bottom() const\n"
+		"Particle_formfactor_at_bottom(Particle self) -> IFormFactor\n"
+		"const IFormFactor* Particle::formfactor_at_bottom() const\n"
 		"\n"
 		""},
 	 { "Particle_swigregister", Particle_swigregister, METH_O, NULL},
@@ -70550,6 +70550,135 @@ static void *_p_IdentityRotationTo_p_IRotation(void *x, int *SWIGUNUSEDPARM(newm
 static void *_p_RotationXTo_p_IRotation(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IRotation *)  ((RotationX *) x));
 }
+static void *_p_FormFactorPrism6To_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPrism *) ((FormFactorPrism6 *) x));
+}
+static void *_p_FormFactorHemiEllipsoidTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorHemiEllipsoid *) x));
+}
+static void *_p_FormFactorFullSpheroidTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorFullSpheroid *) x));
+}
+static void *_p_FormFactorTruncatedSpheroidTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorTruncatedSpheroid *) x));
+}
+static void *_p_IProfileRippleTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((IProfileRipple *) x));
+}
+static void *_p_ICosineRippleTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *) ((ICosineRipple *) x));
+}
+static void *_p_FormFactorLongBoxGaussTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorLongBoxGauss *) x));
+}
+static void *_p_FormFactorCosineRippleGaussTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
+}
+static void *_p_FormFactorSawtoothRippleGaussTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
+}
+static void *_p_IFormFactorPrismTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((IFormFactorPrism *) x));
+}
+static void *_p_FormFactorCantellatedCubeTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
+}
+static void *_p_FormFactorFullSphereTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorFullSphere *) x));
+}
+static void *_p_FormFactorTruncatedCubeTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
+}
+static void *_p_FormFactorTruncatedSphereTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorTruncatedSphere *) x));
+}
+static void *_p_FormFactorHorizontalCylinderTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorHorizontalCylinder *) x));
+}
+static void *_p_FormFactorEllipsoidalCylinderTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorEllipsoidalCylinder *) x));
+}
+static void *_p_FormFactorCylinderTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorCylinder *) x));
+}
+static void *_p_FormFactorBoxTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPrism *) ((FormFactorBox *) x));
+}
+static void *_p_FormFactorPlatonicTetrahedronTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorPlatonicTetrahedron *) x));
+}
+static void *_p_FormFactorPlatonicOctahedronTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorPlatonicOctahedron *) x));
+}
+static void *_p_FormFactorIcosahedronTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
+}
+static void *_p_FormFactorDodecahedronTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
+}
+static void *_p_IFormFactorPolyhedronTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((IFormFactorPolyhedron *) x));
+}
+static void *_p_FormFactorConeTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorCone *) x));
+}
+static void *_p_FormFactorSphereGaussianRadiusTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorSphereGaussianRadius *) x));
+}
+static void *_p_FormFactorSphereLogNormalRadiusTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorSphereLogNormalRadius *) x));
+}
+static void *_p_FormFactorHollowSphereTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorHollowSphere *) x));
+}
+static void *_p_FormFactorGaussSphereTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorGaussSphere *) x));
+}
+static void *_p_FormFactorPyramid2To_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorPyramid2 *) x));
+}
+static void *_p_IProfileRectangularRippleTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *) ((IProfileRectangularRipple *) x));
+}
+static void *_p_ISawtoothRippleTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *) ((ISawtoothRipple *) x));
+}
+static void *_p_FormFactorLongBoxLorentzTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *)  ((FormFactorLongBoxLorentz *) x));
+}
+static void *_p_FormFactorCosineRippleLorentzTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
+}
+static void *_p_FormFactorBarLorentzTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarLorentz *) x));
+}
+static void *_p_FormFactorPyramid3To_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorPyramid3 *) x));
+}
+static void *_p_FormFactorSawtoothRippleLorentzTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
+}
+static void *_p_FormFactorPyramid4To_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorPyramid4 *) x));
+}
+static void *_p_FormFactorBipyramid4To_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorBipyramid4 *) x));
+}
+static void *_p_FormFactorCosineRippleBoxTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
+}
+static void *_p_FormFactorPyramid6To_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPolyhedron *) ((FormFactorPyramid6 *) x));
+}
+static void *_p_FormFactorSawtoothRippleBoxTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
+}
+static void *_p_FormFactorPrism3To_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IFormFactorPrism *) ((FormFactorPrism3 *) x));
+}
+static void *_p_FormFactorBarGaussTo_p_IFormFactor(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFormFactor *) (IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarGauss *) x));
+}
 static void *_p_FormFactorDodecahedronTo_p_IFormFactorPolyhedron(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IFormFactorPolyhedron *)  ((FormFactorDodecahedron *) x));
 }
@@ -70601,44 +70730,44 @@ static void *_p_MisesFisherGaussPeakShapeTo_p_IPeakShape(void *x, int *SWIGUNUSE
 static void *_p_MisesGaussPeakShapeTo_p_IPeakShape(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IPeakShape *)  ((MisesGaussPeakShape *) x));
 }
-static void *_p_IBornFFTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *)  ((IBornFF *) x));
-}
 static void *_p_FormFactorPrism6To_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
 }
 static void *_p_FormFactorHemiEllipsoidTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorHemiEllipsoid *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorHemiEllipsoid *) x));
+}
+static void *_p_IFormFactorTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ISampleNode *)  ((IFormFactor *) x));
 }
 static void *_p_FormFactorFullSpheroidTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorFullSpheroid *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorFullSpheroid *) x));
 }
 static void *_p_FormFactorTruncatedSpheroidTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorTruncatedSpheroid *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorTruncatedSpheroid *) x));
 }
 static void *_p_ICosineRippleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *) ((ICosineRipple *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *) ((ICosineRipple *) x));
 }
 static void *_p_IProfileRippleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((IProfileRipple *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((IProfileRipple *) x));
 }
 static void *_p_FormFactorLongBoxGaussTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorLongBoxGauss *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorLongBoxGauss *) x));
 }
 static void *_p_ParticleCoreShellTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *) (IParticle *) ((ParticleCoreShell *) x));
 }
 static void *_p_FormFactorCosineRippleGaussTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
 }
 static void *_p_FormFactorSawtoothRippleGaussTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
 }
 static void *_p_LayerTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *)  ((Layer *) x));
 }
 static void *_p_IFormFactorPrismTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((IFormFactorPrism *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((IFormFactorPrism *) x));
 }
 static void *_p_CrystalTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *)  ((Crystal *) x));
@@ -70647,16 +70776,16 @@ static void *_p_MesoCrystalTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemo
     return (void *)((ISampleNode *) (IParticle *) ((MesoCrystal *) x));
 }
 static void *_p_FormFactorCantellatedCubeTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
 }
 static void *_p_FormFactorFullSphereTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorFullSphere *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorFullSphere *) x));
 }
 static void *_p_FormFactorTruncatedCubeTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
 }
 static void *_p_FormFactorTruncatedSphereTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorTruncatedSphere *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorTruncatedSphere *) x));
 }
 static void *_p_MultiLayerTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *)  ((MultiLayer *) x));
@@ -70668,100 +70797,100 @@ static void *_p_ParticleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)
     return (void *)((ISampleNode *) (IParticle *) ((Particle *) x));
 }
 static void *_p_FormFactorHorizontalCylinderTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorHorizontalCylinder *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorHorizontalCylinder *) x));
 }
 static void *_p_FormFactorEllipsoidalCylinderTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorEllipsoidalCylinder *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorEllipsoidalCylinder *) x));
 }
 static void *_p_FormFactorCylinderTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorCylinder *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorCylinder *) x));
 }
 static void *_p_FormFactorBoxTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPrism *) ((FormFactorBox *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPrism *) ((FormFactorBox *) x));
 }
 static void *_p_FormFactorDodecahedronTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
 }
 static void *_p_IFormFactorPolyhedronTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((IFormFactorPolyhedron *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((IFormFactorPolyhedron *) x));
 }
 static void *_p_FormFactorIcosahedronTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
 }
 static void *_p_FormFactorPlatonicOctahedronTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPlatonicOctahedron *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPlatonicOctahedron *) x));
 }
 static void *_p_FormFactorPlatonicTetrahedronTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPlatonicTetrahedron *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPlatonicTetrahedron *) x));
 }
 static void *_p_FormFactorConeTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorCone *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorCone *) x));
 }
 static void *_p_FormFactorSphereGaussianRadiusTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorSphereGaussianRadius *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorSphereGaussianRadius *) x));
 }
 static void *_p_FormFactorSphereLogNormalRadiusTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorSphereLogNormalRadius *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorSphereLogNormalRadius *) x));
 }
 static void *_p_FormFactorHollowSphereTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorHollowSphere *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorHollowSphere *) x));
 }
 static void *_p_FormFactorGaussSphereTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorGaussSphere *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorGaussSphere *) x));
 }
 static void *_p_LayerRoughnessTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *)  ((LayerRoughness *) x));
 }
 static void *_p_FormFactorPyramid2To_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid2 *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid2 *) x));
 }
 static void *_p_ISawtoothRippleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *) ((ISawtoothRipple *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *) ((ISawtoothRipple *) x));
 }
 static void *_p_IProfileRectangularRippleTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
 }
 static void *_p_FormFactorCosineRippleLorentzTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
 }
 static void *_p_FormFactorBarLorentzTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarLorentz *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarLorentz *) x));
 }
 static void *_p_FormFactorLongBoxLorentzTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *) ((FormFactorLongBoxLorentz *) x));
+    return (void *)((ISampleNode *) (IFormFactor *) ((FormFactorLongBoxLorentz *) x));
 }
 static void *_p_FormFactorPyramid3To_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid3 *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid3 *) x));
 }
 static void *_p_FormFactorSawtoothRippleLorentzTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
 }
 static void *_p_ParticleLayoutTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *)  ((ParticleLayout *) x));
 }
 static void *_p_FormFactorBipyramid4To_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorBipyramid4 *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorBipyramid4 *) x));
 }
 static void *_p_FormFactorPyramid4To_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid4 *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid4 *) x));
 }
 static void *_p_FormFactorCosineRippleBoxTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
 }
 static void *_p_FormFactorPyramid6To_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid6 *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid6 *) x));
 }
 static void *_p_FormFactorSawtoothRippleBoxTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
 }
 static void *_p_ParticleCompositionTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISampleNode *) (IParticle *) ((ParticleComposition *) x));
 }
 static void *_p_FormFactorPrism3To_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
 }
 static void *_p_FormFactorBarGaussTo_p_ISampleNode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ISampleNode *) (IBornFF *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarGauss *) x));
+    return (void *)((ISampleNode *) (IFormFactor *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarGauss *) x));
 }
 static void *_p_BasicLattice2DTo_p_Lattice2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((Lattice2D *)  ((BasicLattice2D *) x));
@@ -70842,16 +70971,16 @@ static void *_p_FormFactorBarLorentzTo_p_IProfileRectangularRipple(void *x, int
     return (void *)((IProfileRectangularRipple *)  ((FormFactorBarLorentz *) x));
 }
 static void *_p_FormFactorBoxTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorBox *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPrism *) ((FormFactorBox *) x));
 }
 static void *_p_MultiLayerTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *) ((MultiLayer *) x));
 }
 static void *_p_FormFactorSphereGaussianRadiusTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorSphereGaussianRadius *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorSphereGaussianRadius *) x));
 }
 static void *_p_FormFactorSphereLogNormalRadiusTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorSphereLogNormalRadius *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorSphereLogNormalRadius *) x));
 }
 static void *_p_Profile1DGateTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IProfile1D *) ((Profile1DGate *) x));
@@ -70863,10 +70992,7 @@ static void *_p_ParticleLayoutTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newme
     return (void *)((ICloneable *) (ISampleNode *) ((ParticleLayout *) x));
 }
 static void *_p_FormFactorHemiEllipsoidTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorHemiEllipsoid *) x));
-}
-static void *_p_IBornFFTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *) ((IBornFF *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorHemiEllipsoid *) x));
 }
 static void *_p_IPeakShapeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *)  ((IPeakShape *) x));
@@ -70890,46 +71016,49 @@ static void *_p_MisesGaussPeakShapeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(
     return (void *)((ICloneable *) (IPeakShape *) ((MisesGaussPeakShape *) x));
 }
 static void *_p_FormFactorPrism3To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
 }
 static void *_p_FormFactorIcosahedronTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
 }
 static void *_p_FormFactorDodecahedronTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
 }
 static void *_p_IFormFactorPolyhedronTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((IFormFactorPolyhedron *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((IFormFactorPolyhedron *) x));
 }
 static void *_p_IFormFactorPrismTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((IFormFactorPrism *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((IFormFactorPrism *) x));
 }
 static void *_p_FormFactorPlatonicOctahedronTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPlatonicOctahedron *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPlatonicOctahedron *) x));
 }
 static void *_p_FormFactorPlatonicTetrahedronTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPlatonicTetrahedron *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPlatonicTetrahedron *) x));
 }
 static void *_p_FormFactorPrism6To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
 }
 static void *_p_ParticleCoreShellTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IParticle *) ((ParticleCoreShell *) x));
 }
 static void *_p_ISawtoothRippleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((ISawtoothRipple *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *) ((ISawtoothRipple *) x));
 }
 static void *_p_IProfileRectangularRippleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
 }
 static void *_p_FormFactorFullSphereTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorFullSphere *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorFullSphere *) x));
 }
 static void *_p_FormFactorTruncatedSphereTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorTruncatedSphere *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorTruncatedSphere *) x));
+}
+static void *_p_IFormFactorTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ICloneable *) (ISampleNode *) ((IFormFactor *) x));
 }
 static void *_p_FormFactorLongBoxGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorLongBoxGauss *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorLongBoxGauss *) x));
 }
 static void *_p_InterferenceHardDiskTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IInterference *) ((InterferenceHardDisk *) x));
@@ -70947,46 +71076,46 @@ static void *_p_IRotationTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)
     return (void *)((ICloneable *)  ((IRotation *) x));
 }
 static void *_p_FormFactorPyramid2To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid2 *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid2 *) x));
 }
 static void *_p_FormFactorFullSpheroidTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorFullSpheroid *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorFullSpheroid *) x));
 }
 static void *_p_RotationXTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IRotation *) ((RotationX *) x));
 }
 static void *_p_FormFactorPyramid3To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid3 *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid3 *) x));
 }
 static void *_p_FormFactorTruncatedSpheroidTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorTruncatedSpheroid *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorTruncatedSpheroid *) x));
 }
 static void *_p_FormFactorBipyramid4To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorBipyramid4 *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorBipyramid4 *) x));
 }
 static void *_p_Profile2DGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IProfile2D *) ((Profile2DGauss *) x));
 }
 static void *_p_FormFactorCantellatedCubeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
 }
 static void *_p_RotationYTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IRotation *) ((RotationY *) x));
 }
 static void *_p_FormFactorPyramid4To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid4 *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid4 *) x));
 }
 static void *_p_FormFactorTruncatedCubeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
 }
 static void *_p_RotationZTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IRotation *) ((RotationZ *) x));
 }
 static void *_p_FormFactorPyramid6To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid6 *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid6 *) x));
 }
 static void *_p_FormFactorBarGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarGauss *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarGauss *) x));
 }
 static void *_p_InterferenceTwinTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IInterference *) ((InterferenceTwin *) x));
@@ -71013,13 +71142,13 @@ static void *_p_HexagonalLattice2DTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(n
     return (void *)((ICloneable *) (Lattice2D *) ((HexagonalLattice2D *) x));
 }
 static void *_p_FormFactorCosineRippleBoxTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
 }
 static void *_p_FormFactorConeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorCone *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorCone *) x));
 }
 static void *_p_FormFactorSawtoothRippleBoxTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
 }
 static void *_p_LayerTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *) ((Layer *) x));
@@ -71028,13 +71157,13 @@ static void *_p_Profile2DConeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmem
     return (void *)((ICloneable *) (IProfile2D *) ((Profile2DCone *) x));
 }
 static void *_p_FormFactorHorizontalCylinderTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorHorizontalCylinder *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorHorizontalCylinder *) x));
 }
 static void *_p_FormFactorEllipsoidalCylinderTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorEllipsoidalCylinder *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorEllipsoidalCylinder *) x));
 }
 static void *_p_FormFactorCylinderTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorCylinder *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorCylinder *) x));
 }
 static void *_p_ParticleCompositionTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IParticle *) ((ParticleComposition *) x));
@@ -71049,13 +71178,13 @@ static void *_p_ISampleNodeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemor
     return (void *)((ICloneable *)  ((ISampleNode *) x));
 }
 static void *_p_FormFactorCosineRippleGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
 }
 static void *_p_Profile2DVoigtTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IProfile2D *) ((Profile2DVoigt *) x));
 }
 static void *_p_FormFactorSawtoothRippleGaussTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
 }
 static void *_p_Profile1DCauchyTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IProfile1D *) ((Profile1DCauchy *) x));
@@ -71082,25 +71211,25 @@ static void *_p_CrystalTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory))
     return (void *)((ICloneable *) (ISampleNode *) ((Crystal *) x));
 }
 static void *_p_ICosineRippleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((ICosineRipple *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *) ((ICosineRipple *) x));
 }
 static void *_p_IProfileRippleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((IProfileRipple *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((IProfileRipple *) x));
 }
 static void *_p_FormFactorHollowSphereTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorHollowSphere *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorHollowSphere *) x));
 }
 static void *_p_FormFactorGaussSphereTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorGaussSphere *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorGaussSphere *) x));
 }
 static void *_p_InterferenceNoneTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IInterference *) ((InterferenceNone *) x));
 }
 static void *_p_FormFactorCosineRippleLorentzTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
 }
 static void *_p_FormFactorBarLorentzTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarLorentz *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarLorentz *) x));
 }
 static void *_p_InterferenceFinite3DLatticeTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IInterference *) ((InterferenceFinite3DLattice *) x));
@@ -71121,10 +71250,10 @@ static void *_p_Interference1DLatticeTo_p_ICloneable(void *x, int *SWIGUNUSEDPAR
     return (void *)((ICloneable *) (IInterference *) ((Interference1DLattice *) x));
 }
 static void *_p_FormFactorLongBoxLorentzTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *) ((FormFactorLongBoxLorentz *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorLongBoxLorentz *) x));
 }
 static void *_p_FormFactorSawtoothRippleLorentzTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
 }
 static void *_p_Profile1DTriangleTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (IProfile1D *) ((Profile1DTriangle *) x));
@@ -71196,16 +71325,16 @@ static void *_p_SimpleSelectionRuleTo_p_ISelectionRule(void *x, int *SWIGUNUSEDP
     return (void *)((ISelectionRule *)  ((SimpleSelectionRule *) x));
 }
 static void *_p_FormFactorBoxTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorBox *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPrism *) ((FormFactorBox *) x));
 }
 static void *_p_MultiLayerTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *) ((MultiLayer *) x));
 }
 static void *_p_FormFactorSphereGaussianRadiusTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorSphereGaussianRadius *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorSphereGaussianRadius *) x));
 }
 static void *_p_FormFactorSphereLogNormalRadiusTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorSphereLogNormalRadius *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorSphereLogNormalRadius *) x));
 }
 static void *_p_Profile1DGateTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IProfile1D *) ((Profile1DGate *) x));
@@ -71217,10 +71346,7 @@ static void *_p_ParticleLayoutTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)
     return (void *)((INode *) (ISampleNode *) ((ParticleLayout *) x));
 }
 static void *_p_FormFactorHemiEllipsoidTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorHemiEllipsoid *) x));
-}
-static void *_p_IBornFFTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *) ((IBornFF *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorHemiEllipsoid *) x));
 }
 static void *_p_IPeakShapeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((IPeakShape *) x));
@@ -71244,46 +71370,49 @@ static void *_p_MisesGaussPeakShapeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newme
     return (void *)((INode *) (IPeakShape *) ((MisesGaussPeakShape *) x));
 }
 static void *_p_FormFactorPrism3To_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPrism *) ((FormFactorPrism3 *) x));
 }
 static void *_p_FormFactorIcosahedronTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
 }
 static void *_p_FormFactorDodecahedronTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
 }
 static void *_p_IFormFactorPolyhedronTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((IFormFactorPolyhedron *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((IFormFactorPolyhedron *) x));
 }
 static void *_p_IFormFactorPrismTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((IFormFactorPrism *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((IFormFactorPrism *) x));
 }
 static void *_p_FormFactorPlatonicOctahedronTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPlatonicOctahedron *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPlatonicOctahedron *) x));
 }
 static void *_p_FormFactorPlatonicTetrahedronTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPlatonicTetrahedron *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPlatonicTetrahedron *) x));
 }
 static void *_p_FormFactorPrism6To_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPrism *) ((FormFactorPrism6 *) x));
 }
 static void *_p_ParticleCoreShellTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *)(IParticle *) ((ParticleCoreShell *) x));
 }
 static void *_p_ISawtoothRippleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((ISawtoothRipple *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *) ((ISawtoothRipple *) x));
 }
 static void *_p_IProfileRectangularRippleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *) ((IProfileRectangularRipple *) x));
 }
 static void *_p_FormFactorFullSphereTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorFullSphere *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorFullSphere *) x));
 }
 static void *_p_FormFactorTruncatedSphereTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorTruncatedSphere *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorTruncatedSphere *) x));
+}
+static void *_p_IFormFactorTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((INode *) (ISampleNode *) ((IFormFactor *) x));
 }
 static void *_p_FormFactorLongBoxGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorLongBoxGauss *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorLongBoxGauss *) x));
 }
 static void *_p_InterferenceHardDiskTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IInterference *) ((InterferenceHardDisk *) x));
@@ -71301,46 +71430,46 @@ static void *_p_IRotationTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((IRotation *) x));
 }
 static void *_p_FormFactorPyramid2To_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid2 *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid2 *) x));
 }
 static void *_p_FormFactorFullSpheroidTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorFullSpheroid *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorFullSpheroid *) x));
 }
 static void *_p_RotationXTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IRotation *) ((RotationX *) x));
 }
 static void *_p_FormFactorPyramid3To_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid3 *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid3 *) x));
 }
 static void *_p_FormFactorTruncatedSpheroidTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorTruncatedSpheroid *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorTruncatedSpheroid *) x));
 }
 static void *_p_FormFactorBipyramid4To_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorBipyramid4 *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorBipyramid4 *) x));
 }
 static void *_p_Profile2DGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IProfile2D *) ((Profile2DGauss *) x));
 }
 static void *_p_FormFactorCantellatedCubeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
 }
 static void *_p_RotationYTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IRotation *) ((RotationY *) x));
 }
 static void *_p_FormFactorPyramid4To_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid4 *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid4 *) x));
 }
 static void *_p_FormFactorTruncatedCubeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
 }
 static void *_p_RotationZTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IRotation *) ((RotationZ *) x));
 }
 static void *_p_FormFactorPyramid6To_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorPyramid6 *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IFormFactorPolyhedron *) ((FormFactorPyramid6 *) x));
 }
 static void *_p_FormFactorBarGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarGauss *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarGauss *) x));
 }
 static void *_p_InterferenceTwinTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IInterference *) ((InterferenceTwin *) x));
@@ -71367,13 +71496,13 @@ static void *_p_HexagonalLattice2DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmem
     return (void *)((INode *) (Lattice2D *) ((HexagonalLattice2D *) x));
 }
 static void *_p_FormFactorCosineRippleBoxTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
 }
 static void *_p_FormFactorConeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorCone *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorCone *) x));
 }
 static void *_p_FormFactorSawtoothRippleBoxTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
 }
 static void *_p_LayerTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *) ((Layer *) x));
@@ -71382,13 +71511,13 @@ static void *_p_Profile2DConeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory))
     return (void *)((INode *) (IProfile2D *) ((Profile2DCone *) x));
 }
 static void *_p_FormFactorHorizontalCylinderTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorHorizontalCylinder *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorHorizontalCylinder *) x));
 }
 static void *_p_FormFactorEllipsoidalCylinderTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorEllipsoidalCylinder *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorEllipsoidalCylinder *) x));
 }
 static void *_p_FormFactorCylinderTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorCylinder *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorCylinder *) x));
 }
 static void *_p_ParticleCompositionTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *)(IParticle *) ((ParticleComposition *) x));
@@ -71403,13 +71532,13 @@ static void *_p_ISampleNodeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((ISampleNode *) x));
 }
 static void *_p_FormFactorCosineRippleGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
 }
 static void *_p_Profile2DVoigtTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IProfile2D *) ((Profile2DVoigt *) x));
 }
 static void *_p_FormFactorSawtoothRippleGaussTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
 }
 static void *_p_Profile1DCauchyTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IProfile1D *) ((Profile1DCauchy *) x));
@@ -71436,28 +71565,28 @@ static void *_p_CrystalTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (ISampleNode *) ((Crystal *) x));
 }
 static void *_p_ICosineRippleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *) ((ICosineRipple *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *) ((ICosineRipple *) x));
 }
 static void *_p_IProfileRippleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((IProfileRipple *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((IProfileRipple *) x));
 }
 static void *_p_Lattice3DTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *)  ((Lattice3D *) x));
 }
 static void *_p_FormFactorHollowSphereTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorHollowSphere *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorHollowSphere *) x));
 }
 static void *_p_FormFactorGaussSphereTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorGaussSphere *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorGaussSphere *) x));
 }
 static void *_p_InterferenceNoneTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IInterference *) ((InterferenceNone *) x));
 }
 static void *_p_FormFactorCosineRippleLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
 }
 static void *_p_FormFactorBarLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarLorentz *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarLorentz *) x));
 }
 static void *_p_InterferenceFinite3DLatticeTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IInterference *) ((InterferenceFinite3DLattice *) x));
@@ -71478,10 +71607,10 @@ static void *_p_Interference1DLatticeTo_p_INode(void *x, int *SWIGUNUSEDPARM(new
     return (void *)((INode *) (IInterference *) ((Interference1DLattice *) x));
 }
 static void *_p_FormFactorLongBoxLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *) ((FormFactorLongBoxLorentz *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *) ((FormFactorLongBoxLorentz *) x));
 }
 static void *_p_FormFactorSawtoothRippleLorentzTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INode *) (ISampleNode *)(IBornFF *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
+    return (void *)((INode *) (ISampleNode *)(IFormFactor *)(IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
 }
 static void *_p_Profile1DTriangleTo_p_INode(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INode *) (IProfile1D *) ((Profile1DTriangle *) x));
@@ -71504,135 +71633,6 @@ static void *_p_Profile2DConeTo_p_IProfile2D(void *x, int *SWIGUNUSEDPARM(newmem
 static void *_p_Profile2DVoigtTo_p_IProfile2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IProfile2D *)  ((Profile2DVoigt *) x));
 }
-static void *_p_FormFactorPrism6To_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPrism *) ((FormFactorPrism6 *) x));
-}
-static void *_p_FormFactorHemiEllipsoidTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorHemiEllipsoid *) x));
-}
-static void *_p_FormFactorFullSpheroidTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorFullSpheroid *) x));
-}
-static void *_p_FormFactorTruncatedSpheroidTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorTruncatedSpheroid *) x));
-}
-static void *_p_IProfileRippleTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((IProfileRipple *) x));
-}
-static void *_p_ICosineRippleTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *) ((ICosineRipple *) x));
-}
-static void *_p_FormFactorLongBoxGaussTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorLongBoxGauss *) x));
-}
-static void *_p_FormFactorCosineRippleGaussTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleGauss *) x));
-}
-static void *_p_FormFactorSawtoothRippleGaussTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleGauss *) x));
-}
-static void *_p_IFormFactorPrismTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((IFormFactorPrism *) x));
-}
-static void *_p_FormFactorCantellatedCubeTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorCantellatedCube *) x));
-}
-static void *_p_FormFactorFullSphereTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorFullSphere *) x));
-}
-static void *_p_FormFactorTruncatedCubeTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorTruncatedCube *) x));
-}
-static void *_p_FormFactorTruncatedSphereTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorTruncatedSphere *) x));
-}
-static void *_p_FormFactorHorizontalCylinderTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorHorizontalCylinder *) x));
-}
-static void *_p_FormFactorEllipsoidalCylinderTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorEllipsoidalCylinder *) x));
-}
-static void *_p_FormFactorCylinderTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorCylinder *) x));
-}
-static void *_p_FormFactorBoxTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPrism *) ((FormFactorBox *) x));
-}
-static void *_p_FormFactorPlatonicTetrahedronTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorPlatonicTetrahedron *) x));
-}
-static void *_p_FormFactorPlatonicOctahedronTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorPlatonicOctahedron *) x));
-}
-static void *_p_FormFactorIcosahedronTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorIcosahedron *) x));
-}
-static void *_p_FormFactorDodecahedronTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorDodecahedron *) x));
-}
-static void *_p_IFormFactorPolyhedronTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((IFormFactorPolyhedron *) x));
-}
-static void *_p_FormFactorConeTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorCone *) x));
-}
-static void *_p_FormFactorSphereGaussianRadiusTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorSphereGaussianRadius *) x));
-}
-static void *_p_FormFactorSphereLogNormalRadiusTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorSphereLogNormalRadius *) x));
-}
-static void *_p_FormFactorHollowSphereTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorHollowSphere *) x));
-}
-static void *_p_FormFactorGaussSphereTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorGaussSphere *) x));
-}
-static void *_p_FormFactorPyramid2To_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorPyramid2 *) x));
-}
-static void *_p_IProfileRectangularRippleTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *) ((IProfileRectangularRipple *) x));
-}
-static void *_p_ISawtoothRippleTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *) ((ISawtoothRipple *) x));
-}
-static void *_p_FormFactorLongBoxLorentzTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *)  ((FormFactorLongBoxLorentz *) x));
-}
-static void *_p_FormFactorCosineRippleLorentzTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleLorentz *) x));
-}
-static void *_p_FormFactorBarLorentzTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarLorentz *) x));
-}
-static void *_p_FormFactorPyramid3To_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorPyramid3 *) x));
-}
-static void *_p_FormFactorSawtoothRippleLorentzTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleLorentz *) x));
-}
-static void *_p_FormFactorPyramid4To_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorPyramid4 *) x));
-}
-static void *_p_FormFactorBipyramid4To_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorBipyramid4 *) x));
-}
-static void *_p_FormFactorCosineRippleBoxTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *)(ICosineRipple *) ((FormFactorCosineRippleBox *) x));
-}
-static void *_p_FormFactorPyramid6To_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPolyhedron *) ((FormFactorPyramid6 *) x));
-}
-static void *_p_FormFactorSawtoothRippleBoxTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *)(ISawtoothRipple *) ((FormFactorSawtoothRippleBox *) x));
-}
-static void *_p_FormFactorPrism3To_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IFormFactorPrism *) ((FormFactorPrism3 *) x));
-}
-static void *_p_FormFactorBarGaussTo_p_IBornFF(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IBornFF *) (IProfileRipple *)(IProfileRectangularRipple *) ((FormFactorBarGauss *) x));
-}
 static swig_type_info _swigt__p_BasicLattice2D = {"_p_BasicLattice2D", "BasicLattice2D *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Crystal = {"_p_Crystal", "Crystal *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FormFactorBarGauss = {"_p_FormFactorBarGauss", "FormFactorBarGauss *", 0, 0, (void*)0, 0};
@@ -71674,9 +71674,9 @@ static swig_type_info _swigt__p_FormFactorTruncatedSphere = {"_p_FormFactorTrunc
 static swig_type_info _swigt__p_FormFactorTruncatedSpheroid = {"_p_FormFactorTruncatedSpheroid", "FormFactorTruncatedSpheroid *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_GaussFisherPeakShape = {"_p_GaussFisherPeakShape", "GaussFisherPeakShape *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_HexagonalLattice2D = {"_p_HexagonalLattice2D", "HexagonalLattice2D *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_IBornFF = {"_p_IBornFF", "IBornFF *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ICloneable = {"_p_ICloneable", "ICloneable *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ICosineRipple = {"_p_ICosineRipple", "ICosineRipple *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_IFormFactor = {"_p_IFormFactor", "IFormFactor *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IFormFactorPolyhedron = {"_p_IFormFactorPolyhedron", "IFormFactorPolyhedron *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IFormFactorPrism = {"_p_IFormFactorPrism", "IFormFactorPrism *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IInterference = {"_p_IInterference", "IInterference *", 0, 0, (void*)0, 0};
@@ -71844,9 +71844,9 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_FormFactorTruncatedSpheroid,
   &_swigt__p_GaussFisherPeakShape,
   &_swigt__p_HexagonalLattice2D,
-  &_swigt__p_IBornFF,
   &_swigt__p_ICloneable,
   &_swigt__p_ICosineRipple,
+  &_swigt__p_IFormFactor,
   &_swigt__p_IFormFactorPolyhedron,
   &_swigt__p_IFormFactorPrism,
   &_swigt__p_IInterference,
@@ -72014,13 +72014,13 @@ static swig_cast_info _swigc__p_FormFactorTruncatedSphere[] = {  {&_swigt__p_For
 static swig_cast_info _swigc__p_FormFactorTruncatedSpheroid[] = {  {&_swigt__p_FormFactorTruncatedSpheroid, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_GaussFisherPeakShape[] = {  {&_swigt__p_GaussFisherPeakShape, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_HexagonalLattice2D[] = {  {&_swigt__p_HexagonalLattice2D, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_IBornFF[] = {  {&_swigt__p_IBornFF, 0, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_IBornFF, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_IBornFF, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorHorizontalCylinder, _p_FormFactorHorizontalCylinderTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPlatonicTetrahedron, _p_FormFactorPlatonicTetrahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPlatonicOctahedron, _p_FormFactorPlatonicOctahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPyramid2, _p_FormFactorPyramid2To_p_IBornFF, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorBarLorentz, _p_FormFactorBarLorentzTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPyramid3, _p_FormFactorPyramid3To_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorBipyramid4, _p_FormFactorBipyramid4To_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPyramid4, _p_FormFactorPyramid4To_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPyramid6, _p_FormFactorPyramid6To_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorBarGauss, _p_FormFactorBarGaussTo_p_IBornFF, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DGate, _p_Profile1DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DGauss, _p_Profile1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_ICloneable, 0, 0},  {&_swigt__p_IBornFF, _p_IBornFFTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPlatonicTetrahedron, _p_FormFactorPlatonicTetrahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPlatonicOctahedron, _p_FormFactorPlatonicOctahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_ICloneable, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_ICloneable, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DVoigt, _p_Profile1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid2, _p_FormFactorPyramid2To_p_ICloneable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid3, _p_FormFactorPyramid3To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid4, _p_FormFactorPyramid4To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorBipyramid4, _p_FormFactorBipyramid4To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DGauss, _p_Profile2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid6, _p_FormFactorPyramid6To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorBarGauss, _p_FormFactorBarGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceTwin, _p_InterferenceTwinTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfile1D, _p_IProfile1DTo_p_ICloneable, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_ICloneable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DCone, _p_Profile2DConeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHorizontalCylinder, _p_FormFactorHorizontalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DGate, _p_Profile2DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DCosine, _p_Profile1DCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DVoigt, _p_Profile2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DCauchy, _p_Profile1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DCauchy, _p_Profile2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfile2D, _p_IProfile2DTo_p_ICloneable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceRadialParaCrystal, _p_InterferenceRadialParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DParaCrystal, _p_Interference2DParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorBarLorentz, _p_FormFactorBarLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFinite3DLattice, _p_InterferenceFinite3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference3DLattice, _p_Interference3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DTriangle, _p_Profile1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ICloneable[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_ICloneable, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DGate, _p_Profile1DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DGauss, _p_Profile1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_ICloneable, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPlatonicOctahedron, _p_FormFactorPlatonicOctahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPlatonicTetrahedron, _p_FormFactorPlatonicTetrahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_ICloneable, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_ICloneable, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DVoigt, _p_Profile1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid2, _p_FormFactorPyramid2To_p_ICloneable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid3, _p_FormFactorPyramid3To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorBipyramid4, _p_FormFactorBipyramid4To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid4, _p_FormFactorPyramid4To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DGauss, _p_Profile2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid6, _p_FormFactorPyramid6To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorBarGauss, _p_FormFactorBarGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceTwin, _p_InterferenceTwinTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfile1D, _p_IProfile1DTo_p_ICloneable, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_ICloneable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DCone, _p_Profile2DConeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHorizontalCylinder, _p_FormFactorHorizontalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_ICloneable, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DGate, _p_Profile2DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DCosine, _p_Profile1DCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DVoigt, _p_Profile2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DCauchy, _p_Profile1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile2DCauchy, _p_Profile2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfile2D, _p_IProfile2DTo_p_ICloneable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceRadialParaCrystal, _p_InterferenceRadialParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DParaCrystal, _p_Interference2DParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ICloneable, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorBarLorentz, _p_FormFactorBarLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFinite3DLattice, _p_InterferenceFinite3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference3DLattice, _p_Interference3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_Profile1DTriangle, _p_Profile1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_ICloneable, 0, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_ICloneable, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ICosineRipple[] = {  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICosineRipple, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ICosineRipple, 0, 0},  {&_swigt__p_ICosineRipple, 0, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ICosineRipple, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_IFormFactor[] = {  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactor, 0, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_IFormFactor, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IFormFactor, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorHorizontalCylinder, _p_FormFactorHorizontalCylinderTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPlatonicTetrahedron, _p_FormFactorPlatonicTetrahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPlatonicOctahedron, _p_FormFactorPlatonicOctahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPyramid2, _p_FormFactorPyramid2To_p_IFormFactor, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IFormFactor, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorBarLorentz, _p_FormFactorBarLorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPyramid3, _p_FormFactorPyramid3To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorBipyramid4, _p_FormFactorBipyramid4To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPyramid4, _p_FormFactorPyramid4To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPyramid6, _p_FormFactorPyramid6To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorBarGauss, _p_FormFactorBarGaussTo_p_IFormFactor, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormFactorPolyhedron[] = {  {&_swigt__p_IFormFactorPolyhedron, 0, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorPlatonicOctahedron, _p_FormFactorPlatonicOctahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorPlatonicTetrahedron, _p_FormFactorPlatonicTetrahedronTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorPyramid6, _p_FormFactorPyramid6To_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorPyramid2, _p_FormFactorPyramid2To_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorPyramid3, _p_FormFactorPyramid3To_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorBipyramid4, _p_FormFactorBipyramid4To_p_IFormFactorPolyhedron, 0, 0},  {&_swigt__p_FormFactorPyramid4, _p_FormFactorPyramid4To_p_IFormFactorPolyhedron, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormFactorPrism[] = {  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IFormFactorPrism, 0, 0},  {&_swigt__p_IFormFactorPrism, 0, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IFormFactorPrism, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IFormFactorPrism, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IInterference[] = {  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_IInterference, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_Interference3DLattice, _p_Interference3DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceFinite3DLattice, _p_InterferenceFinite3DLatticeTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceTwin, _p_InterferenceTwinTo_p_IInterference, 0, 0},  {&_swigt__p_IInterference, 0, 0, 0},  {&_swigt__p_Interference2DParaCrystal, _p_Interference2DParaCrystalTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceRadialParaCrystal, _p_InterferenceRadialParaCrystalTo_p_IInterference, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_IInterference, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INode, 0, 0},  {&_swigt__p_Profile1DGate, _p_Profile1DGateTo_p_INode, 0, 0},  {&_swigt__p_Profile1DGauss, _p_Profile1DGaussTo_p_INode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INode, 0, 0},  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_IBornFF, _p_IBornFFTo_p_INode, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INode, 0, 0},  {&_swigt__p_FormFactorPlatonicTetrahedron, _p_FormFactorPlatonicTetrahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPlatonicOctahedron, _p_FormFactorPlatonicOctahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_INode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_INode, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_INode, 0, 0},  {&_swigt__p_Profile1DVoigt, _p_Profile1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid2, _p_FormFactorPyramid2To_p_INode, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INode, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid3, _p_FormFactorPyramid3To_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INode, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid4, _p_FormFactorPyramid4To_p_INode, 0, 0},  {&_swigt__p_FormFactorBipyramid4, _p_FormFactorBipyramid4To_p_INode, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INode, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INode, 0, 0},  {&_swigt__p_Profile2DGauss, _p_Profile2DGaussTo_p_INode, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid6, _p_FormFactorPyramid6To_p_INode, 0, 0},  {&_swigt__p_FormFactorBarGauss, _p_FormFactorBarGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceTwin, _p_InterferenceTwinTo_p_INode, 0, 0},  {&_swigt__p_IProfile1D, _p_IProfile1DTo_p_INode, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_INode, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_INode, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_INode, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INode, 0, 0},  {&_swigt__p_Profile2DCone, _p_Profile2DConeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHorizontalCylinder, _p_FormFactorHorizontalCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INode, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INode, 0, 0},  {&_swigt__p_Profile2DGate, _p_Profile2DGateTo_p_INode, 0, 0},  {&_swigt__p_Profile1DCosine, _p_Profile1DCosineTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_INode, 0, 0},  {&_swigt__p_Profile2DVoigt, _p_Profile2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_Profile1DCauchy, _p_Profile1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_Profile2DCauchy, _p_Profile2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_IProfile2D, _p_IProfile2DTo_p_INode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INode, 0, 0},  {&_swigt__p_InterferenceRadialParaCrystal, _p_InterferenceRadialParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_Interference2DParaCrystal, _p_Interference2DParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_INode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_INode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INode, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_INode, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorBarLorentz, _p_FormFactorBarLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFinite3DLattice, _p_InterferenceFinite3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference3DLattice, _p_Interference3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Profile1DTriangle, _p_Profile1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INode, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_INode[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INode, 0, 0},  {&_swigt__p_Profile1DGate, _p_Profile1DGateTo_p_INode, 0, 0},  {&_swigt__p_Profile1DGauss, _p_Profile1DGaussTo_p_INode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INode, 0, 0},  {&_swigt__p_INode, 0, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INode, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPlatonicOctahedron, _p_FormFactorPlatonicOctahedronTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPlatonicTetrahedron, _p_FormFactorPlatonicTetrahedronTo_p_INode, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_INode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INode, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceHardDisk, _p_InterferenceHardDiskTo_p_INode, 0, 0},  {&_swigt__p_IInterference, _p_IInterferenceTo_p_INode, 0, 0},  {&_swigt__p_Profile1DVoigt, _p_Profile1DVoigtTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid2, _p_FormFactorPyramid2To_p_INode, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INode, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid3, _p_FormFactorPyramid3To_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INode, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INode, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INode, 0, 0},  {&_swigt__p_FormFactorBipyramid4, _p_FormFactorBipyramid4To_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid4, _p_FormFactorPyramid4To_p_INode, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INode, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INode, 0, 0},  {&_swigt__p_Profile2DGauss, _p_Profile2DGaussTo_p_INode, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INode, 0, 0},  {&_swigt__p_FormFactorPyramid6, _p_FormFactorPyramid6To_p_INode, 0, 0},  {&_swigt__p_FormFactorBarGauss, _p_FormFactorBarGaussTo_p_INode, 0, 0},  {&_swigt__p_InterferenceTwin, _p_InterferenceTwinTo_p_INode, 0, 0},  {&_swigt__p_IProfile1D, _p_IProfile1DTo_p_INode, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_INode, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_INode, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_INode, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_INode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INode, 0, 0},  {&_swigt__p_Profile2DCone, _p_Profile2DConeTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHorizontalCylinder, _p_FormFactorHorizontalCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INode, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INode, 0, 0},  {&_swigt__p_Profile2DGate, _p_Profile2DGateTo_p_INode, 0, 0},  {&_swigt__p_Profile1DCosine, _p_Profile1DCosineTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_INode, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_INode, 0, 0},  {&_swigt__p_Profile2DVoigt, _p_Profile2DVoigtTo_p_INode, 0, 0},  {&_swigt__p_Profile1DCauchy, _p_Profile1DCauchyTo_p_INode, 0, 0},  {&_swigt__p_Profile2DCauchy, _p_Profile2DCauchyTo_p_INode, 0, 0},  {&_swigt__p_IProfile2D, _p_IProfile2DTo_p_INode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INode, 0, 0},  {&_swigt__p_InterferenceRadialParaCrystal, _p_InterferenceRadialParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_Interference2DParaCrystal, _p_Interference2DParaCrystalTo_p_INode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_INode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_INode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INode, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_INode, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_INode, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_INode, 0, 0},  {&_swigt__p_InterferenceNone, _p_InterferenceNoneTo_p_INode, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorBarLorentz, _p_FormFactorBarLorentzTo_p_INode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFinite3DLattice, _p_InterferenceFinite3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_InterferenceFinite2DLattice, _p_InterferenceFinite2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference3DLattice, _p_Interference3DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DSuperLattice, _p_Interference2DSuperLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference2DLattice, _p_Interference2DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Interference1DLattice, _p_Interference1DLatticeTo_p_INode, 0, 0},  {&_swigt__p_Profile1DTriangle, _p_Profile1DTriangleTo_p_INode, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INode, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IParticle[] = {  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_IParticle, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_IParticle, 0, 0},  {&_swigt__p_IParticle, 0, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_IParticle, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_IParticle, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IPeakShape[] = {  {&_swigt__p_IPeakShape, 0, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_IPeakShape, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_IPeakShape, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IProfile1D[] = {  {&_swigt__p_Profile1DCauchy, _p_Profile1DCauchyTo_p_IProfile1D, 0, 0},  {&_swigt__p_Profile1DCosine, _p_Profile1DCosineTo_p_IProfile1D, 0, 0},  {&_swigt__p_Profile1DGauss, _p_Profile1DGaussTo_p_IProfile1D, 0, 0},  {&_swigt__p_Profile1DGate, _p_Profile1DGateTo_p_IProfile1D, 0, 0},  {&_swigt__p_Profile1DTriangle, _p_Profile1DTriangleTo_p_IProfile1D, 0, 0},  {&_swigt__p_IProfile1D, 0, 0, 0},  {&_swigt__p_Profile1DVoigt, _p_Profile1DVoigtTo_p_IProfile1D, 0, 0},{0, 0, 0, 0}};
@@ -72028,7 +72028,7 @@ static swig_cast_info _swigc__p_IProfile2D[] = {  {&_swigt__p_Profile2DCauchy, _
 static swig_cast_info _swigc__p_IProfileRectangularRipple[] = {  {&_swigt__p_FormFactorBarGauss, _p_FormFactorBarGaussTo_p_IProfileRectangularRipple, 0, 0},  {&_swigt__p_FormFactorBarLorentz, _p_FormFactorBarLorentzTo_p_IProfileRectangularRipple, 0, 0},  {&_swigt__p_IProfileRectangularRipple, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IProfileRipple[] = {  {&_swigt__p_FormFactorBarGauss, _p_FormFactorBarGaussTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorBarLorentz, _p_FormFactorBarLorentzTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IProfileRipple, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IProfileRipple, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IProfileRipple, 0, 0},  {&_swigt__p_IProfileRipple, 0, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_IProfileRipple, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_IProfileRipple, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IRotation[] = {  {&_swigt__p_RotationY, _p_RotationYTo_p_IRotation, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_IRotation, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_IRotation, 0, 0},  {&_swigt__p_IRotation, 0, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_IRotation, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_IRotation, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_ISampleNode[] = {  {&_swigt__p_IBornFF, _p_IBornFFTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_ISampleNode, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ISampleNode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_ISampleNode, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_ISampleNode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_ISampleNode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ISampleNode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ISampleNode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorHorizontalCylinder, _p_FormFactorHorizontalCylinderTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_ISampleNode, 0, 0},  {&_swigt__p_ISampleNode, 0, 0, 0},  {&_swigt__p_FormFactorPlatonicTetrahedron, _p_FormFactorPlatonicTetrahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPlatonicOctahedron, _p_FormFactorPlatonicOctahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPyramid2, _p_FormFactorPyramid2To_p_ISampleNode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorBarLorentz, _p_FormFactorBarLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPyramid3, _p_FormFactorPyramid3To_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorBipyramid4, _p_FormFactorBipyramid4To_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPyramid4, _p_FormFactorPyramid4To_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPyramid6, _p_FormFactorPyramid6To_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorBarGauss, _p_FormFactorBarGaussTo_p_ISampleNode, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_ISampleNode[] = {  {&_swigt__p_Layer, _p_LayerTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_ISampleNode, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ISampleNode, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_ISampleNode, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_ISampleNode, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_ISampleNode, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_ISampleNode, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ISampleNode, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorHorizontalCylinder, _p_FormFactorHorizontalCylinderTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_ISampleNode, 0, 0},  {&_swigt__p_ISampleNode, 0, 0, 0},  {&_swigt__p_FormFactorPlatonicOctahedron, _p_FormFactorPlatonicOctahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPlatonicTetrahedron, _p_FormFactorPlatonicTetrahedronTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_ISampleNode, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPyramid2, _p_FormFactorPyramid2To_p_ISampleNode, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorBarLorentz, _p_FormFactorBarLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPyramid3, _p_FormFactorPyramid3To_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorBipyramid4, _p_FormFactorBipyramid4To_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPyramid4, _p_FormFactorPyramid4To_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPyramid6, _p_FormFactorPyramid6To_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_ISampleNode, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_ISampleNode, 0, 0},  {&_swigt__p_FormFactorBarGauss, _p_FormFactorBarGaussTo_p_ISampleNode, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ISawtoothRipple[] = {  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ISawtoothRipple, 0, 0},  {&_swigt__p_ISawtoothRipple, 0, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_ISawtoothRipple, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_ISawtoothRipple, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ISelectionRule[] = {  {&_swigt__p_ISelectionRule, 0, 0, 0},  {&_swigt__p_SimpleSelectionRule, _p_SimpleSelectionRuleTo_p_ISelectionRule, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IdentityRotation[] = {  {&_swigt__p_IdentityRotation, 0, 0, 0},{0, 0, 0, 0}};
@@ -72184,9 +72184,9 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_FormFactorTruncatedSpheroid,
   _swigc__p_GaussFisherPeakShape,
   _swigc__p_HexagonalLattice2D,
-  _swigc__p_IBornFF,
   _swigc__p_ICloneable,
   _swigc__p_ICosineRipple,
+  _swigc__p_IFormFactor,
   _swigc__p_IFormFactorPolyhedron,
   _swigc__p_IFormFactorPrism,
   _swigc__p_IInterference,
diff --git a/auto/Wrap/libBornAgainSample_wrap.h b/auto/Wrap/libBornAgainSample_wrap.h
index 9fcada9a6d01f002fdccc5f4a935b5f1fdf1feb9..59f45853b19353fad632762b0b75b7b0f94586f2 100644
--- a/auto/Wrap/libBornAgainSample_wrap.h
+++ b/auto/Wrap/libBornAgainSample_wrap.h
@@ -63,13 +63,13 @@ private:
 };
 
 
-class SwigDirector_IBornFF : public IBornFF, public Swig::Director {
+class SwigDirector_IFormFactor : public IFormFactor, public Swig::Director {
 
 public:
-    SwigDirector_IBornFF(PyObject *self);
-    SwigDirector_IBornFF(PyObject *self, std::vector< double, std::allocator< double > > const &PValues);
-    virtual ~SwigDirector_IBornFF();
-    virtual IBornFF *clone() const;
+    SwigDirector_IFormFactor(PyObject *self);
+    SwigDirector_IFormFactor(PyObject *self, std::vector< double, std::allocator< double > > const &PValues);
+    virtual ~SwigDirector_IFormFactor();
+    virtual IFormFactor *clone() const;
     virtual void transferToCPP();
     virtual std::string className() const;
     virtual std::vector< ParaMeta, std::allocator< ParaMeta > > parDefs() const;
@@ -104,7 +104,7 @@ private:
         swig::SwigVar_PyObject name = SWIG_Python_str_FromChar(method_name);
         method = PyObject_GetAttr(swig_get_self(), name);
         if (!method) {
-          std::string msg = "Method in class IBornFF doesn't exist, undefined ";
+          std::string msg = "Method in class IFormFactor doesn't exist, undefined ";
           msg += method_name;
           Swig::DirectorMethodException::raise(msg.c_str());
         }
diff --git a/auto/Wrap/libBornAgainSim_wrap.cpp b/auto/Wrap/libBornAgainSim_wrap.cpp
index 7e6c92967f8a28d7b198cd2e6b88afe2991da9af..8253fdc2f4868e301ea8e45a2ddce203e673c70f 100644
--- a/auto/Wrap/libBornAgainSim_wrap.cpp
+++ b/auto/Wrap/libBornAgainSim_wrap.cpp
@@ -5292,7 +5292,7 @@ SWIG_AsVal_std_complex_Sl_double_Sg_  (PyObject *o, std::complex<double>* val)
 
 
 SWIGINTERNINLINE PyObject*
-SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/share/swig4.0/typemaps/swigmacros.swg,104,%ifcplusplus@*/
+SWIG_From_std_complex_Sl_double_Sg_  (/*@SWIG:/usr/local/share/swig/4.0.2/typemaps/swigmacros.swg,104,%ifcplusplus@*/
 
 const std::complex<double>&