diff --git a/Core/Scattering/IFormFactorBorn.cpp b/Core/Scattering/IFormFactorBorn.cpp
index 0989b00386a772d7fc836e843626f6a02ce95e8f..8eb54bf4172c3b104f97e61ad7b79ab494f2c4d9 100644
--- a/Core/Scattering/IFormFactorBorn.cpp
+++ b/Core/Scattering/IFormFactorBorn.cpp
@@ -17,12 +17,18 @@
 #include "Base/Utils/Algorithms.h"
 #include "Core/Material/WavevectorInfo.h"
 #include "Core/Scattering/Rotations.h"
+#include "Core/Shapes/IShape.h"
+
+
+IFormFactorBorn::IFormFactorBorn() = default;
 
 IFormFactorBorn::IFormFactorBorn(const NodeMeta& meta, const std::vector<double>& PValues)
     : IFormFactor(meta, PValues)
 {
 }
 
+IFormFactorBorn::~IFormFactorBorn() = default;
+
 complex_t IFormFactorBorn::evaluate(const WavevectorInfo& wavevectors) const
 {
     return evaluate_for_q(wavevectors.getQ());
diff --git a/Core/Scattering/IFormFactorBorn.h b/Core/Scattering/IFormFactorBorn.h
index 298ffad39ccd53d4a3de699fcc431883c0c59854..a846ec85d719ed03263f70957aaca658a8038e46 100644
--- a/Core/Scattering/IFormFactorBorn.h
+++ b/Core/Scattering/IFormFactorBorn.h
@@ -17,8 +17,8 @@
 
 #include "Base/Vector/Vectors3D.h"
 #include "Core/Scattering/IFormFactor.h"
-#include "Core/Shapes/IShape.h"
 
+class IShape;
 struct SlicingEffects; // defined below
 
 //! Pure virtual base class for Born form factors.
@@ -32,8 +32,9 @@ struct SlicingEffects; // defined below
 class IFormFactorBorn : public IFormFactor
 {
 public:
-    IFormFactorBorn() = default;
+    IFormFactorBorn();
     IFormFactorBorn(const NodeMeta& meta, const std::vector<double>& PValues);
+    ~IFormFactorBorn();
 
     IFormFactorBorn* clone() const override = 0;
 
diff --git a/auto/Wrap/doxygenCore.i b/auto/Wrap/doxygenCore.i
index 28ca1e46171535fa5125b93603a31f21d93f0941..415c01d751ca7f9b227162a9d52d5b06c1659cd1 100644
--- a/auto/Wrap/doxygenCore.i
+++ b/auto/Wrap/doxygenCore.i
@@ -6113,12 +6113,15 @@ In contrast to the generic  IFormFactor, a Born form factor does not depend on t
 C++ includes: IFormFactorBorn.h
 ";
 
-%feature("docstring")  IFormFactorBorn::IFormFactorBorn "IFormFactorBorn::IFormFactorBorn()=default
+%feature("docstring")  IFormFactorBorn::IFormFactorBorn "IFormFactorBorn::IFormFactorBorn()
 ";
 
 %feature("docstring")  IFormFactorBorn::IFormFactorBorn "IFormFactorBorn::IFormFactorBorn(const NodeMeta &meta, const std::vector< double > &PValues)
 ";
 
+%feature("docstring")  IFormFactorBorn::~IFormFactorBorn "IFormFactorBorn::~IFormFactorBorn()
+";
+
 %feature("docstring")  IFormFactorBorn::clone "IFormFactorBorn* IFormFactorBorn::clone() const override=0
 
 Returns a clone of this  ISample object. 
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 29b0dc1c1f14ba79dc93730aafe6675b43142960..992b42fd352908419e848f1b8bc0d485f5043c8c 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -7624,6 +7624,7 @@ class IFormFactorBorn(IFormFactor):
         else:
             _self = self
         _libBornAgainCore.IFormFactorBorn_swiginit(self, _libBornAgainCore.new_IFormFactorBorn(_self, *args))
+    __swig_destroy__ = _libBornAgainCore.delete_IFormFactorBorn
 
     def clone(self):
         r"""
@@ -7688,7 +7689,6 @@ class IFormFactorBorn(IFormFactor):
     def canSliceAnalytically(self, rot):
         r"""canSliceAnalytically(IFormFactorBorn self, IRotation rot) -> bool"""
         return _libBornAgainCore.IFormFactorBorn_canSliceAnalytically(self, rot)
-    __swig_destroy__ = _libBornAgainCore.delete_IFormFactorBorn
     def __disown__(self):
         self.this.disown()
         _libBornAgainCore.disown_IFormFactorBorn(self)
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index bcc8347ef45b0085752169fd9403214b187a5d75..86d3769f0a480530cdc678c6df8458663200a17d 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -67079,6 +67079,28 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_delete_IFormFactorBorn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFormFactorBorn *arg1 = (IFormFactorBorn *) 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_IFormFactorBorn, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IFormFactorBorn" "', argument " "1"" of type '" "IFormFactorBorn *""'"); 
+  }
+  arg1 = reinterpret_cast< IFormFactorBorn * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_IFormFactorBorn_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFormFactorBorn *arg1 = (IFormFactorBorn *) 0 ;
@@ -67408,28 +67430,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_IFormFactorBorn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFormFactorBorn *arg1 = (IFormFactorBorn *) 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_IFormFactorBorn, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IFormFactorBorn" "', argument " "1"" of type '" "IFormFactorBorn *""'"); 
-  }
-  arg1 = reinterpret_cast< IFormFactorBorn * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_disown_IFormFactorBorn(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFormFactorBorn *arg1 = (IFormFactorBorn *) 0 ;
@@ -122168,6 +122168,11 @@ static PyMethodDef SwigMethods[] = {
 		"IFormFactorBorn::IFormFactorBorn(const NodeMeta &meta, const std::vector< double > &PValues)\n"
 		"\n"
 		""},
+	 { "delete_IFormFactorBorn", _wrap_delete_IFormFactorBorn, METH_O, "\n"
+		"delete_IFormFactorBorn(IFormFactorBorn self)\n"
+		"IFormFactorBorn::~IFormFactorBorn()\n"
+		"\n"
+		""},
 	 { "IFormFactorBorn_clone", _wrap_IFormFactorBorn_clone, METH_O, "\n"
 		"IFormFactorBorn_clone(IFormFactorBorn self) -> IFormFactorBorn\n"
 		"IFormFactorBorn* IFormFactorBorn::clone() const override=0\n"
@@ -122211,7 +122216,6 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { "IFormFactorBorn_canSliceAnalytically", _wrap_IFormFactorBorn_canSliceAnalytically, METH_VARARGS, "IFormFactorBorn_canSliceAnalytically(IFormFactorBorn self, IRotation rot) -> bool"},
-	 { "delete_IFormFactorBorn", _wrap_delete_IFormFactorBorn, METH_O, "delete_IFormFactorBorn(IFormFactorBorn self)"},
 	 { "disown_IFormFactorBorn", _wrap_disown_IFormFactorBorn, METH_O, NULL},
 	 { "IFormFactorBorn_sliceFormFactor", _wrap_IFormFactorBorn_sliceFormFactor, METH_VARARGS, "IFormFactorBorn_sliceFormFactor(IFormFactorBorn self, ZLimits limits, IRotation rot, kvector_t translation) -> IFormFactor"},
 	 { "IFormFactorBorn_swigregister", IFormFactorBorn_swigregister, METH_O, NULL},