diff --git a/auto/Wrap/libBornAgainParam.py b/auto/Wrap/libBornAgainParam.py
index 5d1cf6e93a32a1f047b0975c9b94fffbc4a5ace2..eb17aee0d62bc94937c889e7ee2638cb7e0787b9 100644
--- a/auto/Wrap/libBornAgainParam.py
+++ b/auto/Wrap/libBornAgainParam.py
@@ -2602,6 +2602,10 @@ class IParameterReal(object):
         """
         return _libBornAgainParam.IParameterReal_getName(self)
 
+    def handlesThisData(self, pData):
+        r"""handlesThisData(IParameterReal self, double const * pData) -> bool"""
+        return _libBornAgainParam.IParameterReal_handlesThisData(self, pData)
+
 # Register IParameterReal in _libBornAgainParam:
 _libBornAgainParam.IParameterReal_swigregister(IParameterReal)
 
@@ -2714,180 +2718,6 @@ class RealParameter(IParameterReal):
 # Register RealParameter in _libBornAgainParam:
 _libBornAgainParam.RealParameter_swigregister(RealParameter)
 
-class ParameterPool(libBornAgainBase.ICloneable):
-    r"""
-
-
-    Container with parameters for  IParametricComponent object.
-
-    C++ includes: ParameterPool.h
-
-    """
-
-    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
-    __repr__ = _swig_repr
-
-    def __init__(self):
-        r"""
-        __init__(ParameterPool self) -> ParameterPool
-        ParameterPool::ParameterPool()
-
-        Constructs an empty parameter pool. 
-
-        """
-        _libBornAgainParam.ParameterPool_swiginit(self, _libBornAgainParam.new_ParameterPool())
-    __swig_destroy__ = _libBornAgainParam.delete_ParameterPool
-
-    def clone(self):
-        r"""
-        clone(ParameterPool self) -> ParameterPool
-        ParameterPool * ParameterPool::clone() const
-
-        Returns a literal clone. 
-
-        """
-        return _libBornAgainParam.ParameterPool_clone(self)
-
-    def copyToExternalPool(self, prefix, other_pool):
-        r"""
-        copyToExternalPool(ParameterPool self, std::string const & prefix, ParameterPool other_pool)
-        void ParameterPool::copyToExternalPool(const std::string &prefix, ParameterPool *other_pool) const
-
-        Copies parameters of given pool to  other pool, prepeding  prefix to the parameter names. 
-
-        """
-        return _libBornAgainParam.ParameterPool_copyToExternalPool(self, prefix, other_pool)
-
-    def clear(self):
-        r"""
-        clear(ParameterPool self)
-        void ParameterPool::clear()
-
-        Clears the parameter map. 
-
-        """
-        return _libBornAgainParam.ParameterPool_clear(self)
-
-    def size(self):
-        r"""
-        size(ParameterPool self) -> size_t
-        size_t ParameterPool::size() const
-
-        Returns number of parameters in the pool. 
-
-        """
-        return _libBornAgainParam.ParameterPool_size(self)
-
-    def empty(self):
-        r"""
-        empty(ParameterPool self) -> bool
-        bool ParameterPool::empty() const
-
-        """
-        return _libBornAgainParam.ParameterPool_empty(self)
-
-    def addParameter(self, newPar):
-        r"""
-        addParameter(ParameterPool self, RealParameter newPar) -> RealParameter
-        RealParameter & ParameterPool::addParameter(RealParameter *newPar)
-
-        Adds parameter to the pool, and returns reference to the input pointer.
-
-        Returning the input pointer allows us to concatenate function calls like pool->addParameter( new RealParameter(...) ).setLimits(-1,+1).setFixed().setUnit("nm") 
-
-        """
-        return _libBornAgainParam.ParameterPool_addParameter(self, newPar)
-
-    def parameter(self, *args):
-        r"""
-        parameter(ParameterPool self, std::string const & name) -> RealParameter
-        parameter(ParameterPool self, std::string const & name) -> RealParameter
-        const RealParameter * ParameterPool::parameter(const std::string &name) const
-
-        Returns parameter with given  name. 
-
-        """
-        return _libBornAgainParam.ParameterPool_parameter(self, *args)
-
-    def parameters(self):
-        r"""
-        parameters(ParameterPool self) -> std::vector< RealParameter *,std::allocator< RealParameter * > > const
-        const std::vector<RealParameter*> ParameterPool::parameters() const
-
-        Returns full vector of parameters. 
-
-        """
-        return _libBornAgainParam.ParameterPool_parameters(self)
-
-    def getMatchedParameters(self, pattern):
-        r"""
-        getMatchedParameters(ParameterPool self, std::string const & pattern) -> std::vector< RealParameter *,std::allocator< RealParameter * > >
-        std::vector< RealParameter * > ParameterPool::getMatchedParameters(const std::string &pattern) const
-
-        Returns nonempty vector of parameters that match the  pattern ('*' allowed), or throws. 
-
-        """
-        return _libBornAgainParam.ParameterPool_getMatchedParameters(self, pattern)
-
-    def getUniqueMatch(self, pattern):
-        r"""
-        getUniqueMatch(ParameterPool self, std::string const & pattern) -> RealParameter
-        RealParameter * ParameterPool::getUniqueMatch(const std::string &pattern) const
-
-        Returns the one parameter that matches the  pattern (wildcards '*' allowed), or throws. 
-
-        """
-        return _libBornAgainParam.ParameterPool_getUniqueMatch(self, pattern)
-
-    def setParameterValue(self, name, value):
-        r"""
-        setParameterValue(ParameterPool self, std::string const & name, double value)
-        void ParameterPool::setParameterValue(const std::string &name, double value)
-
-        Sets parameter value. 
-
-        """
-        return _libBornAgainParam.ParameterPool_setParameterValue(self, name, value)
-
-    def setMatchedParametersValue(self, wildcards, value):
-        r"""
-        setMatchedParametersValue(ParameterPool self, std::string const & wildcards, double value) -> int
-        int ParameterPool::setMatchedParametersValue(const std::string &wildcards, double value)
-
-        Sets value of the nonzero parameters that match  pattern ('*' allowed), or throws. 
-
-        """
-        return _libBornAgainParam.ParameterPool_setMatchedParametersValue(self, wildcards, value)
-
-    def parameterNames(self):
-        r"""
-        parameterNames(ParameterPool self) -> vector_string_t
-        std::vector< std::string > ParameterPool::parameterNames() const
-
-        """
-        return _libBornAgainParam.ParameterPool_parameterNames(self)
-
-    def removeParameter(self, name):
-        r"""
-        removeParameter(ParameterPool self, std::string const & name)
-        void ParameterPool::removeParameter(const std::string &name)
-
-        Removes parameter with given name from the pool. 
-
-        """
-        return _libBornAgainParam.ParameterPool_removeParameter(self, name)
-
-    def __getitem__(self, index):
-        r"""__getitem__(ParameterPool self, size_t index) -> RealParameter"""
-        return _libBornAgainParam.ParameterPool___getitem__(self, index)
-
-    def __iter__(self):
-        return ParameterPoolIterator(self)
-
-
-# Register ParameterPool in _libBornAgainParam:
-_libBornAgainParam.ParameterPool_swigregister(ParameterPool)
-
 class IComponent(object):
     r"""
 
@@ -2929,7 +2759,7 @@ class IParametricComponent(IComponent):
     r"""
 
 
-    Manages a local parameter pool, and a tree of child pools.
+    Manages a local parameters, and a tree of child parameters.
 
     C++ includes: IParametricComponent.h
 
@@ -2952,77 +2782,25 @@ class IParametricComponent(IComponent):
         _libBornAgainParam.IParametricComponent_swiginit(self, _libBornAgainParam.new_IParametricComponent(_self, *args))
     __swig_destroy__ = _libBornAgainParam.delete_IParametricComponent
 
-    def parameterPool(self):
-        r"""
-        parameterPool(IParametricComponent self) -> ParameterPool
-        ParameterPool* IParametricComponent::parameterPool() const
-
-        Returns pointer to the parameter pool. 
-
-        """
-        return _libBornAgainParam.IParametricComponent_parameterPool(self)
-
-    def createParameterTree(self):
-        r"""
-        createParameterTree(IParametricComponent self) -> ParameterPool
-        ParameterPool * IParametricComponent::createParameterTree() const
-
-        Creates new parameter pool, with all local parameters and those of its children. 
-
-        """
-        return _libBornAgainParam.IParametricComponent_createParameterTree(self)
-
-    def parametersToString(self):
-        r"""
-        parametersToString(IParametricComponent self) -> std::string
-        std::string IParametricComponent::parametersToString() const
-
-        Returns multiline string representing available parameters. 
-
-        """
-        return _libBornAgainParam.IParametricComponent_parametersToString(self)
-
-    def registerParameter(self, name, parpointer):
-        r"""
-        registerParameter(IParametricComponent self, std::string const & name, double * parpointer) -> RealParameter
-        RealParameter & IParametricComponent::registerParameter(const std::string &name, double *parpointer)
-
-        """
-        return _libBornAgainParam.IParametricComponent_registerParameter(self, name, parpointer)
-
-    def registerVector(self, *args):
-        r"""
-        registerVector(IParametricComponent self, std::string const & base_name, kvector_t p_vec, std::string const & units="nm")
-        void IParametricComponent::registerVector(const std::string &base_name, kvector_t *p_vec, const std::string &units="nm")
-
-        """
-        return _libBornAgainParam.IParametricComponent_registerVector(self, *args)
-
-    def setParameterValue(self, name, value):
+    def setName(self, name):
         r"""
-        setParameterValue(IParametricComponent self, std::string const & name, double value)
-        void IParametricComponent::setParameterValue(const std::string &name, double value)
+        setName(IParametricComponent self, std::string const & name)
+        void IParametricComponent::setName(const std::string &name)
 
         """
-        return _libBornAgainParam.IParametricComponent_setParameterValue(self, name, value)
+        return _libBornAgainParam.IParametricComponent_setName(self, name)
 
-    def setVectorValue(self, base_name, value):
+    def getName(self):
         r"""
-        setVectorValue(IParametricComponent self, std::string const & base_name, kvector_t value)
-        void IParametricComponent::setVectorValue(const std::string &base_name, kvector_t value)
+        getName(IParametricComponent self) -> std::string const &
+        const std::string& IParametricComponent::getName() const
 
         """
-        return _libBornAgainParam.IParametricComponent_setVectorValue(self, base_name, value)
-
-    def parameter(self, name):
-        r"""
-        parameter(IParametricComponent self, std::string const & name) -> RealParameter
-        RealParameter * IParametricComponent::parameter(const std::string &name) const
-
-        Returns parameter with given 'name'. 
+        return _libBornAgainParam.IParametricComponent_getName(self)
 
-        """
-        return _libBornAgainParam.IParametricComponent_parameter(self, name)
+    def registeredParameters(self):
+        r"""registeredParameters(IParametricComponent self) -> std::vector< RealParameter *,std::allocator< RealParameter * > > const"""
+        return _libBornAgainParam.IParametricComponent_registeredParameters(self)
 
     def onChange(self):
         r"""
@@ -3034,52 +2812,13 @@ class IParametricComponent(IComponent):
         """
         return _libBornAgainParam.IParametricComponent_onChange(self)
 
-    def removeParameter(self, name):
-        r"""
-        removeParameter(IParametricComponent self, std::string const & name)
-        void IParametricComponent::removeParameter(const std::string &name)
-
-        """
-        return _libBornAgainParam.IParametricComponent_removeParameter(self, name)
-
-    def removeVector(self, base_name):
-        r"""
-        removeVector(IParametricComponent self, std::string const & base_name)
-        void IParametricComponent::removeVector(const std::string &base_name)
-
-        """
-        return _libBornAgainParam.IParametricComponent_removeVector(self, base_name)
-
-    @staticmethod
-    def XComponentName(base_name):
-        r"""XComponentName(std::string const & base_name) -> std::string"""
-        return _libBornAgainParam.IParametricComponent_XComponentName(base_name)
-
-    @staticmethod
-    def YComponentName(base_name):
-        r"""YComponentName(std::string const & base_name) -> std::string"""
-        return _libBornAgainParam.IParametricComponent_YComponentName(base_name)
-
-    @staticmethod
-    def ZComponentName(base_name):
-        r"""ZComponentName(std::string const & base_name) -> std::string"""
-        return _libBornAgainParam.IParametricComponent_ZComponentName(base_name)
-
-    def setName(self, name):
-        r"""
-        setName(IParametricComponent self, std::string const & name)
-        void IParametricComponent::setName(const std::string &name)
-
-        """
-        return _libBornAgainParam.IParametricComponent_setName(self, name)
+    def registeredParameter(self, pattern):
+        r"""registeredParameter(IParametricComponent self, std::string const & pattern) -> RealParameter"""
+        return _libBornAgainParam.IParametricComponent_registeredParameter(self, pattern)
 
-    def getName(self):
-        r"""
-        getName(IParametricComponent self) -> std::string const &
-        const std::string& IParametricComponent::getName() const
-
-        """
-        return _libBornAgainParam.IParametricComponent_getName(self)
+    def fullQualifiedParameters(self):
+        r"""fullQualifiedParameters(IParametricComponent self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"""
+        return _libBornAgainParam.IParametricComponent_fullQualifiedParameters(self)
     def __disown__(self):
         self.this.disown()
         _libBornAgainParam.disown_IParametricComponent(self)
@@ -3088,18 +2827,6 @@ class IParametricComponent(IComponent):
 # Register IParametricComponent in _libBornAgainParam:
 _libBornAgainParam.IParametricComponent_swigregister(IParametricComponent)
 
-def IParametricComponent_XComponentName(base_name):
-    r"""IParametricComponent_XComponentName(std::string const & base_name) -> std::string"""
-    return _libBornAgainParam.IParametricComponent_XComponentName(base_name)
-
-def IParametricComponent_YComponentName(base_name):
-    r"""IParametricComponent_YComponentName(std::string const & base_name) -> std::string"""
-    return _libBornAgainParam.IParametricComponent_YComponentName(base_name)
-
-def IParametricComponent_ZComponentName(base_name):
-    r"""IParametricComponent_ZComponentName(std::string const & base_name) -> std::string"""
-    return _libBornAgainParam.IParametricComponent_ZComponentName(base_name)
-
 class ParaMeta(object):
     r"""
 
@@ -3214,16 +2941,6 @@ class INode(IParametricComponent):
         """
         return _libBornAgainParam.INode_accept(self, visitor)
 
-    def treeToString(self):
-        r"""
-        treeToString(INode self) -> std::string
-        std::string INode::treeToString() const
-
-        Returns multiline string representing tree structure below the node. 
-
-        """
-        return _libBornAgainParam.INode_treeToString(self)
-
     def registerChild(self, node):
         r"""
         registerChild(INode self, INode node)
@@ -3289,15 +3006,9 @@ class INode(IParametricComponent):
         """
         return _libBornAgainParam.INode_displayName(self)
 
-    def createParameterTree(self):
-        r"""
-        createParameterTree(INode self) -> ParameterPool
-        ParameterPool * INode::createParameterTree() const
-
-        Creates new parameter pool, with all local parameters and those of its children. 
-
-        """
-        return _libBornAgainParam.INode_createParameterTree(self)
+    def fullQualifiedParameters(self):
+        r"""fullQualifiedParameters(INode self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"""
+        return _libBornAgainParam.INode_fullQualifiedParameters(self)
     def __disown__(self):
         self.this.disown()
         _libBornAgainParam.disown_INode(self)
@@ -3655,6 +3366,14 @@ class DistributionGate(IDistribution1D):
         """
         return _libBornAgainParam.DistributionGate_upperBound(self)
 
+    def parameterMin(self):
+        r"""parameterMin(DistributionGate self) -> RealParameter"""
+        return _libBornAgainParam.DistributionGate_parameterMin(self)
+
+    def parameterMax(self):
+        r"""parameterMax(DistributionGate self) -> RealParameter"""
+        return _libBornAgainParam.DistributionGate_parameterMax(self)
+
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionGate self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
@@ -3941,6 +3660,14 @@ class DistributionLogNormal(IDistribution1D):
         """
         return _libBornAgainParam.DistributionLogNormal_getScalePar(self)
 
+    def parameterMedian(self):
+        r"""parameterMedian(DistributionLogNormal self) -> RealParameter"""
+        return _libBornAgainParam.DistributionLogNormal_parameterMedian(self)
+
+    def parameterScaleParameter(self):
+        r"""parameterScaleParameter(DistributionLogNormal self) -> RealParameter"""
+        return _libBornAgainParam.DistributionLogNormal_parameterScaleParameter(self)
+
     def equidistantPoints(self, *args):
         r"""
         equidistantPoints(DistributionLogNormal self, size_t nbr_samples, double sigma_factor, RealLimits const & limits=RealLimits()) -> vdouble1d_t
@@ -4731,23 +4458,3 @@ class ParameterSampleVector(object):
 _libBornAgainParam.ParameterSampleVector_swigregister(ParameterSampleVector)
 
 
-class ParameterPoolIterator(object):
-
-    def __init__(self, pool):
-        self.pool = pool
-        self.index = -1
-
-    def __iter__(self):
-        return self
-
-    def next(self):
-        self.index += 1
-        if self.index < self.pool.size():
-            return self.pool[self.index]
-        else:
-            raise StopIteration
-
-    def __next__(self):
-        return self.next()
-
-
diff --git a/auto/Wrap/libBornAgainParam_wrap.cpp b/auto/Wrap/libBornAgainParam_wrap.cpp
index 968a67d3bfa31fe43d5cf59fe83068c9c647cec6..c71b1e40d9cf03112b3e60c9eabd4d0b48a664de 100644
--- a/auto/Wrap/libBornAgainParam_wrap.cpp
+++ b/auto/Wrap/libBornAgainParam_wrap.cpp
@@ -7531,7 +7531,7 @@ std::vector< INode const *, std::allocator< INode const * > > SwigDirector_INode
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call INode.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 4;
+  const size_t swig_method_index = 3;
   const char *const swig_method_name = "getChildren";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -7564,7 +7564,7 @@ void SwigDirector_INode::setParent(INode const *newParent) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call INode.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 5;
+  const size_t swig_method_index = 4;
   const char *const swig_method_name = "setParent";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -34397,63 +34397,89 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IParametricComponent_registeredParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IParametricComponent_setName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IParametricComponent *arg1 = (IParametricComponent *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject *swig_obj[2] ;
+  
+  if (!SWIG_Python_UnpackTuple(args, "IParametricComponent_setName", 2, 2, swig_obj)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IParametricComponent, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_setName" "', argument " "1"" of type '" "IParametricComponent *""'"); 
+  }
+  arg1 = reinterpret_cast< IParametricComponent * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_AsPtr_std_string(swig_obj[1], &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IParametricComponent_setName" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IParametricComponent_setName" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  (arg1)->setName((std::string const &)*arg2);
+  resultobj = SWIG_Py_Void();
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IParametricComponent_getName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IParametricComponent *arg1 = (IParametricComponent *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  SwigValueWrapper< std::vector< RealParameter *,std::allocator< RealParameter * > > > result;
+  std::string *result = 0 ;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IParametricComponent, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_registeredParameters" "', argument " "1"" of type '" "IParametricComponent const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_getName" "', argument " "1"" of type '" "IParametricComponent const *""'"); 
   }
   arg1 = reinterpret_cast< IParametricComponent * >(argp1);
-  result = ((IParametricComponent const *)arg1)->registeredParameters();
-  resultobj = SWIG_NewPointerObj((new std::vector< RealParameter *,std::allocator< RealParameter * > >(static_cast< const std::vector< RealParameter *,std::allocator< RealParameter * > >& >(result))), SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t, SWIG_POINTER_OWN |  0 );
+  result = (std::string *) &((IParametricComponent const *)arg1)->getName();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(*result));
   return resultobj;
 fail:
   return NULL;
 }
 
-SWIGINTERN PyObject *_wrap_IParametricComponent_onChange(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+
+SWIGINTERN PyObject *_wrap_IParametricComponent_registeredParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IParametricComponent *arg1 = (IParametricComponent *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  Swig::Director *director = 0;
-  bool upcall = false;
+  SwigValueWrapper< std::vector< RealParameter *,std::allocator< RealParameter * > > > result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IParametricComponent, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_onChange" "', argument " "1"" of type '" "IParametricComponent *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_registeredParameters" "', argument " "1"" of type '" "IParametricComponent const *""'"); 
   }
   arg1 = reinterpret_cast< IParametricComponent * >(argp1);
-  director = SWIG_DIRECTOR_CAST(arg1);
-  upcall = (director && (director->swig_get_self()==swig_obj[0]));
-  try {
-    if (upcall) {
-      (arg1)->IParametricComponent::onChange();
-    } else {
-      (arg1)->onChange();
-    }
-  } catch (Swig::DirectorException&) {
-    SWIG_fail;
-  }
-  resultobj = SWIG_Py_Void();
+  result = ((IParametricComponent const *)arg1)->registeredParameters();
+  resultobj = SWIG_NewPointerObj((new std::vector< RealParameter *,std::allocator< RealParameter * > >(static_cast< const std::vector< RealParameter *,std::allocator< RealParameter * > >& >(result))), SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_IParametricComponent_fullQualifiedParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IParametricComponent_onChange(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IParametricComponent *arg1 = (IParametricComponent *) 0 ;
   void *argp1 = 0 ;
@@ -34461,40 +34487,33 @@ SWIGINTERN PyObject *_wrap_IParametricComponent_fullQualifiedParameters(PyObject
   PyObject *swig_obj[1] ;
   Swig::Director *director = 0;
   bool upcall = false;
-  SwigDirector_IParametricComponent *darg = 0;
-  SwigValueWrapper< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > > result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IParametricComponent, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_fullQualifiedParameters" "', argument " "1"" of type '" "IParametricComponent const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_onChange" "', argument " "1"" of type '" "IParametricComponent *""'"); 
   }
   arg1 = reinterpret_cast< IParametricComponent * >(argp1);
   director = SWIG_DIRECTOR_CAST(arg1);
-  if (!director || !(director->swig_get_inner("fullQualifiedParameters"))) {
-    SWIG_SetErrorMsg(PyExc_RuntimeError,"accessing protected member fullQualifiedParameters");
-    SWIG_fail;
-  }
   upcall = (director && (director->swig_get_self()==swig_obj[0]));
   try {
-    darg = dynamic_cast<SwigDirector_IParametricComponent *>(arg1);
     if (upcall) {
-      result = ((SwigDirector_IParametricComponent const *)darg)->fullQualifiedParametersSwigPublic();
+      (arg1)->IParametricComponent::onChange();
     } else {
-      result = ((SwigDirector_IParametricComponent const *)darg)->fullQualifiedParameters();
+      (arg1)->onChange();
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
   }
-  resultobj = SWIG_NewPointerObj((new std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >(static_cast< const std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >& >(result))), SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t, SWIG_POINTER_OWN |  0 );
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_IParametricComponent_setName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IParametricComponent_registeredParameter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IParametricComponent *arg1 = (IParametricComponent *) 0 ;
   std::string *arg2 = 0 ;
@@ -34502,26 +34521,27 @@ SWIGINTERN PyObject *_wrap_IParametricComponent_setName(PyObject *SWIGUNUSEDPARM
   int res1 = 0 ;
   int res2 = SWIG_OLDOBJ ;
   PyObject *swig_obj[2] ;
+  RealParameter *result = 0 ;
   
-  if (!SWIG_Python_UnpackTuple(args, "IParametricComponent_setName", 2, 2, swig_obj)) SWIG_fail;
+  if (!SWIG_Python_UnpackTuple(args, "IParametricComponent_registeredParameter", 2, 2, swig_obj)) SWIG_fail;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IParametricComponent, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_setName" "', argument " "1"" of type '" "IParametricComponent *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_registeredParameter" "', argument " "1"" of type '" "IParametricComponent const *""'"); 
   }
   arg1 = reinterpret_cast< IParametricComponent * >(argp1);
   {
     std::string *ptr = (std::string *)0;
     res2 = SWIG_AsPtr_std_string(swig_obj[1], &ptr);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IParametricComponent_setName" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IParametricComponent_registeredParameter" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IParametricComponent_setName" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IParametricComponent_registeredParameter" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
-  (arg1)->setName((std::string const &)*arg2);
-  resultobj = SWIG_Py_Void();
+  result = (RealParameter *)((IParametricComponent const *)arg1)->registeredParameter((std::string const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_RealParameter, 0 |  0 );
   if (SWIG_IsNewObj(res2)) delete arg2;
   return resultobj;
 fail:
@@ -34530,23 +34550,41 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IParametricComponent_getName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IParametricComponent_fullQualifiedParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IParametricComponent *arg1 = (IParametricComponent *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject *swig_obj[1] ;
-  std::string *result = 0 ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  SwigDirector_IParametricComponent *darg = 0;
+  SwigValueWrapper< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > > result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
   res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IParametricComponent, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_getName" "', argument " "1"" of type '" "IParametricComponent const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IParametricComponent_fullQualifiedParameters" "', argument " "1"" of type '" "IParametricComponent const *""'"); 
   }
   arg1 = reinterpret_cast< IParametricComponent * >(argp1);
-  result = (std::string *) &((IParametricComponent const *)arg1)->getName();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(*result));
+  director = SWIG_DIRECTOR_CAST(arg1);
+  if (!director || !(director->swig_get_inner("fullQualifiedParameters"))) {
+    SWIG_SetErrorMsg(PyExc_RuntimeError,"accessing protected member fullQualifiedParameters");
+    SWIG_fail;
+  }
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    darg = dynamic_cast<SwigDirector_IParametricComponent *>(arg1);
+    if (upcall) {
+      result = ((SwigDirector_IParametricComponent const *)darg)->fullQualifiedParametersSwigPublic();
+    } else {
+      result = ((SwigDirector_IParametricComponent const *)darg)->fullQualifiedParameters();
+    }
+  } catch (Swig::DirectorException&) {
+    SWIG_fail;
+  }
+  resultobj = SWIG_NewPointerObj((new std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >(static_cast< const std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >& >(result))), SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -49780,15 +49818,6 @@ static PyMethodDef SwigMethods[] = {
 		"IParametricComponent::~IParametricComponent()\n"
 		"\n"
 		""},
-	 { "IParametricComponent_registeredParameters", _wrap_IParametricComponent_registeredParameters, METH_O, "IParametricComponent_registeredParameters(IParametricComponent self) -> std::vector< RealParameter *,std::allocator< RealParameter * > > const"},
-	 { "IParametricComponent_onChange", _wrap_IParametricComponent_onChange, METH_O, "\n"
-		"IParametricComponent_onChange(IParametricComponent self)\n"
-		"virtual void IParametricComponent::onChange()\n"
-		"\n"
-		"Action to be taken in inherited class when a parameter has changed. \n"
-		"\n"
-		""},
-	 { "IParametricComponent_fullQualifiedParameters", _wrap_IParametricComponent_fullQualifiedParameters, METH_O, "IParametricComponent_fullQualifiedParameters(IParametricComponent self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"},
 	 { "IParametricComponent_setName", _wrap_IParametricComponent_setName, METH_VARARGS, "\n"
 		"IParametricComponent_setName(IParametricComponent self, std::string const & name)\n"
 		"void IParametricComponent::setName(const std::string &name)\n"
@@ -49799,6 +49828,16 @@ static PyMethodDef SwigMethods[] = {
 		"const std::string& IParametricComponent::getName() const\n"
 		"\n"
 		""},
+	 { "IParametricComponent_registeredParameters", _wrap_IParametricComponent_registeredParameters, METH_O, "IParametricComponent_registeredParameters(IParametricComponent self) -> std::vector< RealParameter *,std::allocator< RealParameter * > > const"},
+	 { "IParametricComponent_onChange", _wrap_IParametricComponent_onChange, METH_O, "\n"
+		"IParametricComponent_onChange(IParametricComponent self)\n"
+		"virtual void IParametricComponent::onChange()\n"
+		"\n"
+		"Action to be taken in inherited class when a parameter has changed. \n"
+		"\n"
+		""},
+	 { "IParametricComponent_registeredParameter", _wrap_IParametricComponent_registeredParameter, METH_VARARGS, "IParametricComponent_registeredParameter(IParametricComponent self, std::string const & pattern) -> RealParameter"},
+	 { "IParametricComponent_fullQualifiedParameters", _wrap_IParametricComponent_fullQualifiedParameters, METH_O, "IParametricComponent_fullQualifiedParameters(IParametricComponent self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"},
 	 { "disown_IParametricComponent", _wrap_disown_IParametricComponent, METH_O, NULL},
 	 { "IParametricComponent_swigregister", IParametricComponent_swigregister, METH_O, NULL},
 	 { "IParametricComponent_swiginit", IParametricComponent_swiginit, METH_VARARGS, NULL},
diff --git a/auto/Wrap/libBornAgainParam_wrap.h b/auto/Wrap/libBornAgainParam_wrap.h
index 516904751187d27c53274272fa192194317f40b1..8d6b7eae7eaf7b43026d3866ef68c9253332dee0 100644
--- a/auto/Wrap/libBornAgainParam_wrap.h
+++ b/auto/Wrap/libBornAgainParam_wrap.h
@@ -126,7 +126,7 @@ private:
       return method;
     }
 private:
-    mutable swig::SwigVar_PyObject vtable[6];
+    mutable swig::SwigVar_PyObject vtable[5];
 #endif
 
 };
diff --git a/auto/Wrap/libBornAgainSample.py b/auto/Wrap/libBornAgainSample.py
index 14ec3197cb4be552ee10a152abb4709f7008f34d..2cf9bac15bee9633cae093f6c892c1f5e328f410 100644
--- a/auto/Wrap/libBornAgainSample.py
+++ b/auto/Wrap/libBornAgainSample.py
@@ -3342,6 +3342,10 @@ class ISampleNode(libBornAgainBase.ICloneable, libBornAgainParam.INode):
         _libBornAgainSample.disown_ISampleNode(self)
         return weakref.proxy(self)
 
+    def fullQualifiedParameters(self):
+        r"""fullQualifiedParameters(ISampleNode self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"""
+        return _libBornAgainSample.ISampleNode_fullQualifiedParameters(self)
+
 # Register ISampleNode in _libBornAgainSample:
 _libBornAgainSample.ISampleNode_swigregister(ISampleNode)
 
@@ -3466,6 +3470,10 @@ class IFormFactor(ISampleNode):
         _libBornAgainSample.disown_IFormFactor(self)
         return weakref.proxy(self)
 
+    def fullQualifiedParameters(self):
+        r"""fullQualifiedParameters(IFormFactor self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"""
+        return _libBornAgainSample.IFormFactor_fullQualifiedParameters(self)
+
 # Register IFormFactor in _libBornAgainSample:
 _libBornAgainSample.IFormFactor_swigregister(IFormFactor)
 
@@ -3598,6 +3606,10 @@ class IBornFF(IFormFactor):
         _libBornAgainSample.disown_IBornFF(self)
         return weakref.proxy(self)
 
+    def fullQualifiedParameters(self):
+        r"""fullQualifiedParameters(IBornFF self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"""
+        return _libBornAgainSample.IBornFF_fullQualifiedParameters(self)
+
     def sliceFormFactor(self, limits, rot, translation):
         r"""sliceFormFactor(IBornFF self, ZLimits limits, IRotation rot, kvector_t translation) -> IFormFactor"""
         return _libBornAgainSample.IBornFF_sliceFormFactor(self, limits, rot, translation)
@@ -5570,6 +5582,10 @@ class IFTDistribution1D(libBornAgainBase.ICloneable, libBornAgainParam.INode):
 
         """
         return _libBornAgainSample.IFTDistribution1D_qSecondDerivative(self)
+
+    def parameterOmega(self):
+        r"""parameterOmega(IFTDistribution1D self) -> RealParameter *"""
+        return _libBornAgainSample.IFTDistribution1D_parameterOmega(self)
     __swig_destroy__ = _libBornAgainSample.delete_IFTDistribution1D
 
 # Register IFTDistribution1D in _libBornAgainSample:
@@ -8224,6 +8240,18 @@ class LayerRoughness(ISampleNode):
 
         """
         return _libBornAgainSample.LayerRoughness_getLatteralCorrLength(self)
+
+    def parameterSigma(self):
+        r"""parameterSigma(LayerRoughness self) -> RealParameter *"""
+        return _libBornAgainSample.LayerRoughness_parameterSigma(self)
+
+    def parameterHurst(self):
+        r"""parameterHurst(LayerRoughness self) -> RealParameter *"""
+        return _libBornAgainSample.LayerRoughness_parameterHurst(self)
+
+    def parameterCorrLength(self):
+        r"""parameterCorrLength(LayerRoughness self) -> RealParameter *"""
+        return _libBornAgainSample.LayerRoughness_parameterCorrLength(self)
     __swig_destroy__ = _libBornAgainSample.delete_LayerRoughness
 
 # Register LayerRoughness in _libBornAgainSample:
@@ -8539,6 +8567,10 @@ class MultiLayer(ISampleNode):
         """
         return _libBornAgainSample.MultiLayer_getChildren(self)
 
+    def parameterCrossCorrLength(self):
+        r"""parameterCrossCorrLength(MultiLayer self) -> RealParameter *"""
+        return _libBornAgainSample.MultiLayer_parameterCrossCorrLength(self)
+
 # Register MultiLayer in _libBornAgainSample:
 _libBornAgainSample.MultiLayer_swigregister(MultiLayer)
 
@@ -11767,26 +11799,6 @@ class ISampleBuilder(libBornAgainParam.IParametricComponent):
         """
         return _libBornAgainSample.ISampleBuilder_size(self)
 
-    def registerParameter(self, name, parpointer):
-        r"""registerParameter(ISampleBuilder self, std::string const & name, int64_t parpointer) -> RealParameter *"""
-        return _libBornAgainSample.ISampleBuilder_registerParameter(self, name, parpointer)
-
-    def setParameterValue(self, name, value):
-        r"""setParameterValue(ISampleBuilder self, std::string const & name, double value)"""
-        return _libBornAgainSample.ISampleBuilder_setParameterValue(self, name, value)
-
-    def parametersToString(self):
-        r"""parametersToString(ISampleBuilder self) -> std::string"""
-        return _libBornAgainSample.ISampleBuilder_parametersToString(self)
-
-    def createParameterTree(self):
-        r"""createParameterTree(ISampleBuilder self) -> ParameterPool"""
-        return _libBornAgainSample.ISampleBuilder_createParameterTree(self)
-
-    def parameterPool(self):
-        r"""parameterPool(ISampleBuilder self) -> ParameterPool"""
-        return _libBornAgainSample.ISampleBuilder_parameterPool(self)
-
     def onChange(self):
         r"""onChange(ISampleBuilder self)"""
         return _libBornAgainSample.ISampleBuilder_onChange(self)
@@ -11795,6 +11807,10 @@ class ISampleBuilder(libBornAgainParam.IParametricComponent):
         _libBornAgainSample.disown_ISampleBuilder(self)
         return weakref.proxy(self)
 
+    def fullQualifiedParameters(self):
+        r"""fullQualifiedParameters(ISampleBuilder self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"""
+        return _libBornAgainSample.ISampleBuilder_fullQualifiedParameters(self)
+
 # Register ISampleBuilder in _libBornAgainSample:
 _libBornAgainSample.ISampleBuilder_swigregister(ISampleBuilder)
 
diff --git a/auto/Wrap/libBornAgainSample_wrap.cpp b/auto/Wrap/libBornAgainSample_wrap.cpp
index e45e94969e4e704a57748a38c1bb3546d2fcc5c2..94353944d0dc1d8ae74b250d6f26e832c4c68676 100644
--- a/auto/Wrap/libBornAgainSample_wrap.cpp
+++ b/auto/Wrap/libBornAgainSample_wrap.cpp
@@ -3214,78 +3214,78 @@ namespace Swig {
 #define SWIGTYPE_p_MultiLayer swig_types[114]
 #define SWIGTYPE_p_NodeMeta swig_types[115]
 #define SWIGTYPE_p_ParameterDistribution swig_types[116]
-#define SWIGTYPE_p_ParameterPool swig_types[117]
-#define SWIGTYPE_p_Particle swig_types[118]
-#define SWIGTYPE_p_ParticleComposition swig_types[119]
-#define SWIGTYPE_p_ParticleCoreShell swig_types[120]
-#define SWIGTYPE_p_ParticleLayout swig_types[121]
-#define SWIGTYPE_p_ParticleLimits swig_types[122]
-#define SWIGTYPE_p_RealParameter swig_types[123]
-#define SWIGTYPE_p_RotationEuler swig_types[124]
-#define SWIGTYPE_p_RotationX swig_types[125]
-#define SWIGTYPE_p_RotationY swig_types[126]
-#define SWIGTYPE_p_RotationZ swig_types[127]
-#define SWIGTYPE_p_RoughnessModelWrap swig_types[128]
-#define SWIGTYPE_p_RoughnessModelWrap__RoughnessModel swig_types[129]
-#define SWIGTYPE_p_SafePointerVectorT_IParticle_t swig_types[130]
-#define SWIGTYPE_p_SampleBuilderFactory swig_types[131]
-#define SWIGTYPE_p_SimpleSelectionRule swig_types[132]
-#define SWIGTYPE_p_SimulationOptions swig_types[133]
-#define SWIGTYPE_p_SlicedParticle swig_types[134]
-#define SWIGTYPE_p_SlicingEffects swig_types[135]
-#define SWIGTYPE_p_SquareLattice2D swig_types[136]
-#define SWIGTYPE_p_ThreadInfo swig_types[137]
-#define SWIGTYPE_p_Transform3D swig_types[138]
-#define SWIGTYPE_p_WavevectorInfo swig_types[139]
-#define SWIGTYPE_p_ZLimits swig_types[140]
-#define SWIGTYPE_p_allocator_type swig_types[141]
-#define SWIGTYPE_p_char swig_types[142]
-#define SWIGTYPE_p_difference_type swig_types[143]
-#define SWIGTYPE_p_double swig_types[144]
-#define SWIGTYPE_p_first_type swig_types[145]
-#define SWIGTYPE_p_int swig_types[146]
-#define SWIGTYPE_p_key_type swig_types[147]
-#define SWIGTYPE_p_long_long swig_types[148]
-#define SWIGTYPE_p_mapped_type swig_types[149]
-#define SWIGTYPE_p_p_PyObject swig_types[150]
-#define SWIGTYPE_p_second_type swig_types[151]
-#define SWIGTYPE_p_short swig_types[152]
-#define SWIGTYPE_p_signed_char swig_types[153]
-#define SWIGTYPE_p_size_type swig_types[154]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[155]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[156]
-#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[157]
-#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[158]
-#define SWIGTYPE_p_std__allocatorT_INode_p_t swig_types[159]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[160]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[161]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[162]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[163]
-#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[164]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[165]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[166]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[167]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[168]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[169]
-#define SWIGTYPE_p_std__functionT_ISampleBuilder_pfF_t swig_types[170]
-#define SWIGTYPE_p_std__invalid_argument swig_types[171]
-#define SWIGTYPE_p_std__lessT_std__string_t swig_types[172]
-#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[173]
-#define SWIGTYPE_p_std__ostream swig_types[174]
-#define SWIGTYPE_p_std__pairT_double_double_t swig_types[175]
-#define SWIGTYPE_p_std__shared_ptrT_ISampleBuilder_t swig_types[176]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[177]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[178]
-#define SWIGTYPE_p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t swig_types[179]
-#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[180]
-#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[181]
-#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[182]
-#define SWIGTYPE_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t swig_types[183]
-#define SWIGTYPE_p_std__vectorT_ParticleLayout_const_p_std__allocatorT_ParticleLayout_const_p_t_t swig_types[184]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[185]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[186]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[187]
-#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[188]
+#define SWIGTYPE_p_Particle swig_types[117]
+#define SWIGTYPE_p_ParticleComposition swig_types[118]
+#define SWIGTYPE_p_ParticleCoreShell swig_types[119]
+#define SWIGTYPE_p_ParticleLayout swig_types[120]
+#define SWIGTYPE_p_ParticleLimits swig_types[121]
+#define SWIGTYPE_p_RealParameter swig_types[122]
+#define SWIGTYPE_p_RotationEuler swig_types[123]
+#define SWIGTYPE_p_RotationX swig_types[124]
+#define SWIGTYPE_p_RotationY swig_types[125]
+#define SWIGTYPE_p_RotationZ swig_types[126]
+#define SWIGTYPE_p_RoughnessModelWrap swig_types[127]
+#define SWIGTYPE_p_RoughnessModelWrap__RoughnessModel swig_types[128]
+#define SWIGTYPE_p_SafePointerVectorT_IParticle_t swig_types[129]
+#define SWIGTYPE_p_SampleBuilderFactory swig_types[130]
+#define SWIGTYPE_p_SimpleSelectionRule swig_types[131]
+#define SWIGTYPE_p_SimulationOptions swig_types[132]
+#define SWIGTYPE_p_SlicedParticle swig_types[133]
+#define SWIGTYPE_p_SlicingEffects swig_types[134]
+#define SWIGTYPE_p_SquareLattice2D swig_types[135]
+#define SWIGTYPE_p_ThreadInfo swig_types[136]
+#define SWIGTYPE_p_Transform3D swig_types[137]
+#define SWIGTYPE_p_WavevectorInfo swig_types[138]
+#define SWIGTYPE_p_ZLimits swig_types[139]
+#define SWIGTYPE_p_allocator_type swig_types[140]
+#define SWIGTYPE_p_char swig_types[141]
+#define SWIGTYPE_p_difference_type swig_types[142]
+#define SWIGTYPE_p_double swig_types[143]
+#define SWIGTYPE_p_first_type swig_types[144]
+#define SWIGTYPE_p_int swig_types[145]
+#define SWIGTYPE_p_key_type swig_types[146]
+#define SWIGTYPE_p_long_long swig_types[147]
+#define SWIGTYPE_p_mapped_type swig_types[148]
+#define SWIGTYPE_p_p_PyObject swig_types[149]
+#define SWIGTYPE_p_second_type swig_types[150]
+#define SWIGTYPE_p_short swig_types[151]
+#define SWIGTYPE_p_signed_char swig_types[152]
+#define SWIGTYPE_p_size_type swig_types[153]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[154]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[155]
+#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[156]
+#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[157]
+#define SWIGTYPE_p_std__allocatorT_INode_p_t swig_types[158]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[159]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[160]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[161]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_double_double_t_t swig_types[162]
+#define SWIGTYPE_p_std__allocatorT_std__pairT_std__string_const_double_t_t swig_types[163]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[164]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[165]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[166]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[167]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[168]
+#define SWIGTYPE_p_std__functionT_ISampleBuilder_pfF_t swig_types[169]
+#define SWIGTYPE_p_std__invalid_argument swig_types[170]
+#define SWIGTYPE_p_std__lessT_std__string_t swig_types[171]
+#define SWIGTYPE_p_std__mapT_std__string_double_std__lessT_std__string_t_std__allocatorT_std__pairT_std__string_const_double_t_t_t swig_types[172]
+#define SWIGTYPE_p_std__ostream swig_types[173]
+#define SWIGTYPE_p_std__pairT_double_double_t swig_types[174]
+#define SWIGTYPE_p_std__shared_ptrT_ISampleBuilder_t swig_types[175]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[176]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[177]
+#define SWIGTYPE_p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t swig_types[178]
+#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[179]
+#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[180]
+#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[181]
+#define SWIGTYPE_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t swig_types[182]
+#define SWIGTYPE_p_std__vectorT_ParticleLayout_const_p_std__allocatorT_ParticleLayout_const_p_t_t swig_types[183]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[184]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[185]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[186]
+#define SWIGTYPE_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t swig_types[187]
+#define SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t swig_types[188]
 #define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[189]
 #define SWIGTYPE_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t swig_types[190]
 #define SWIGTYPE_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t swig_types[191]
@@ -7452,19 +7452,6 @@ SWIG_AsVal_unsigned_SS_int (PyObject * obj, unsigned int *val)
   return res;
 }
 
-SWIGINTERN RealParameter *ISampleBuilder_registerParameter(ISampleBuilder *self,std::string const &name,int64_t parpointer){
-        return &((self)->IParametricComponent::registerParameter(name, (double*)parpointer)); }
-SWIGINTERN void ISampleBuilder_setParameterValue(ISampleBuilder *self,std::string const &name,double value){
-        (self)->IParametricComponent::setParameterValue(name, value); }
-SWIGINTERN std::string ISampleBuilder_parametersToString(ISampleBuilder const *self){
-        return (self)->IParametricComponent::parametersToString();
-        }
-SWIGINTERN ParameterPool *ISampleBuilder_createParameterTree(ISampleBuilder const *self){
-        return (self)->IParametricComponent::createParameterTree();
-        }
-SWIGINTERN ParameterPool *ISampleBuilder_parameterPool(ISampleBuilder const *self){
-        return (self)->IParametricComponent::parameterPool();
-    }
 SWIGINTERN void ISampleBuilder_onChange(ISampleBuilder *self){
         return (self)->IParametricComponent::onChange();
     }
@@ -7551,61 +7538,62 @@ void SwigDirector_ISampleNode::transferToCPP() {
 }
 
 
-ParameterPool *SwigDirector_ISampleNode::createParameterTree() const {
-  ParameterPool *c_result = 0 ;
-  void *swig_argp ;
-  int swig_res ;
-  swig_owntype own ;
-  
+void SwigDirector_ISampleNode::onChange() {
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ISampleNode.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 2;
-  const char *const swig_method_name = "createParameterTree";
+  const char *const swig_method_name = "onChange";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
   swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
 #else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("createParameterTree");
+  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("onChange");
   swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
 #endif
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'ISampleNode.createParameterTree'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'ISampleNode.onChange'");
     }
   }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_ParameterPool,  0  | SWIG_POINTER_DISOWN, &own);
-  if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""ParameterPool *""'");
-  }
-  c_result = reinterpret_cast< ParameterPool * >(swig_argp);
-  swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (ParameterPool *) c_result;
 }
 
 
-void SwigDirector_ISampleNode::onChange() {
+std::vector< std::pair< std::string, RealParameter * >, std::allocator< std::pair< std::string, RealParameter * > > > SwigDirector_ISampleNode::fullQualifiedParameters() const {
+  void *swig_argp ;
+  int swig_res = 0 ;
+  
+  std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > c_result;
+  swig_set_inner("fullQualifiedParameters", true);
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ISampleNode.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 3;
-  const char *const swig_method_name = "onChange";
+  const char *const swig_method_name = "fullQualifiedParameters";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
   swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
 #else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("onChange");
+  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("fullQualifiedParameters");
   swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
 #endif
+  swig_set_inner("fullQualifiedParameters", false);
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'ISampleNode.onChange'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'ISampleNode.fullQualifiedParameters'");
     }
   }
+  swig_res = SWIG_ConvertPtr(result,&swig_argp,SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t,  0  | 0);
+  if (!SWIG_IsOK(swig_res)) {
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >""'");
+  }
+  c_result = *(reinterpret_cast< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > * >(swig_argp));
+  if (SWIG_IsNewObj(swig_res)) delete reinterpret_cast< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > * >(swig_argp);
+  return (std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >) c_result;
 }
 
 
@@ -7639,7 +7627,7 @@ std::vector< INode const *, std::allocator< INode const * > > SwigDirector_ISamp
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ISampleNode.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 6;
+  const size_t swig_method_index = 5;
   const char *const swig_method_name = "getChildren";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -7672,7 +7660,7 @@ void SwigDirector_ISampleNode::setParent(INode const *newParent) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ISampleNode.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 7;
+  const size_t swig_method_index = 6;
   const char *const swig_method_name = "setParent";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -7699,7 +7687,7 @@ Material const *SwigDirector_ISampleNode::material() const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ISampleNode.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 8;
+  const size_t swig_method_index = 7;
   const char *const swig_method_name = "material";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -7799,61 +7787,62 @@ void SwigDirector_IFormFactor::transferToCPP() {
 }
 
 
-ParameterPool *SwigDirector_IFormFactor::createParameterTree() const {
-  ParameterPool *c_result = 0 ;
-  void *swig_argp ;
-  int swig_res ;
-  swig_owntype own ;
-  
+void SwigDirector_IFormFactor::onChange() {
   if (!swig_get_self()) {
     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;
-  const char *const swig_method_name = "createParameterTree";
+  const char *const swig_method_name = "onChange";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
   swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
 #else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("createParameterTree");
+  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("onChange");
   swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
 #endif
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.createParameterTree'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.onChange'");
     }
   }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_ParameterPool,  0  | SWIG_POINTER_DISOWN, &own);
-  if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""ParameterPool *""'");
-  }
-  c_result = reinterpret_cast< ParameterPool * >(swig_argp);
-  swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (ParameterPool *) c_result;
 }
 
 
-void SwigDirector_IFormFactor::onChange() {
+std::vector< std::pair< std::string, RealParameter * >, std::allocator< std::pair< std::string, RealParameter * > > > SwigDirector_IFormFactor::fullQualifiedParameters() const {
+  void *swig_argp ;
+  int swig_res = 0 ;
+  
+  std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > c_result;
+  swig_set_inner("fullQualifiedParameters", true);
   if (!swig_get_self()) {
     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;
-  const char *const swig_method_name = "onChange";
+  const char *const swig_method_name = "fullQualifiedParameters";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
   swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
 #else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("onChange");
+  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("fullQualifiedParameters");
   swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
 #endif
+  swig_set_inner("fullQualifiedParameters", false);
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.onChange'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IFormFactor.fullQualifiedParameters'");
     }
   }
+  swig_res = SWIG_ConvertPtr(result,&swig_argp,SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t,  0  | 0);
+  if (!SWIG_IsOK(swig_res)) {
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >""'");
+  }
+  c_result = *(reinterpret_cast< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > * >(swig_argp));
+  if (SWIG_IsNewObj(swig_res)) delete reinterpret_cast< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > * >(swig_argp);
+  return (std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >) c_result;
 }
 
 
@@ -7887,7 +7876,7 @@ std::vector< INode const *, std::allocator< INode const * > > SwigDirector_IForm
     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;
+  const size_t swig_method_index = 5;
   const char *const swig_method_name = "getChildren";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -7920,7 +7909,7 @@ void SwigDirector_IFormFactor::setParent(INode const *newParent) {
     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;
+  const size_t swig_method_index = 6;
   const char *const swig_method_name = "setParent";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -7947,7 +7936,7 @@ Material const *SwigDirector_IFormFactor::material() const {
     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;
+  const size_t swig_method_index = 7;
   const char *const swig_method_name = "material";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -7979,7 +7968,7 @@ void SwigDirector_IFormFactor::setAmbientMaterial(Material const &arg0) {
     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;
+  const size_t swig_method_index = 8;
   const char *const swig_method_name = "setAmbientMaterial";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8004,7 +7993,7 @@ complex_t SwigDirector_IFormFactor::evaluate(WavevectorInfo const &wavevectors)
     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;
+  const size_t swig_method_index = 9;
   const char *const swig_method_name = "evaluate";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8035,7 +8024,7 @@ double SwigDirector_IFormFactor::volume() const {
     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;
+  const size_t swig_method_index = 10;
   const char *const swig_method_name = "volume";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -8067,7 +8056,7 @@ double SwigDirector_IFormFactor::radialExtension() const {
     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;
+  const size_t swig_method_index = 11;
   const char *const swig_method_name = "radialExtension";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -8101,7 +8090,7 @@ double SwigDirector_IFormFactor::bottomZ(IRotation const &rotation) const {
     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;
+  const size_t swig_method_index = 12;
   const char *const swig_method_name = "bottomZ";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8134,7 +8123,7 @@ double SwigDirector_IFormFactor::topZ(IRotation const &rotation) const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 14;
+  const size_t swig_method_index = 13;
   const char *const swig_method_name = "topZ";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8168,7 +8157,7 @@ bool SwigDirector_IFormFactor::canSliceAnalytically(IRotation const &rot) const
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 15;
+  const size_t swig_method_index = 14;
   const char *const swig_method_name = "canSliceAnalytically";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8210,7 +8199,7 @@ IFormFactor *SwigDirector_IFormFactor::sliceFormFactor(ZLimits limits, IRotation
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IFormFactor.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 16;
+  const size_t swig_method_index = 15;
   const char *const swig_method_name = "sliceFormFactor";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0,(PyObject *)obj1,(PyObject *)obj2, NULL);
@@ -8310,61 +8299,62 @@ void SwigDirector_IBornFF::transferToCPP() {
 }
 
 
-ParameterPool *SwigDirector_IBornFF::createParameterTree() const {
-  ParameterPool *c_result = 0 ;
-  void *swig_argp ;
-  int swig_res ;
-  swig_owntype own ;
-  
+void SwigDirector_IBornFF::onChange() {
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 2;
-  const char *const swig_method_name = "createParameterTree";
+  const char *const swig_method_name = "onChange";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
   swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
 #else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("createParameterTree");
+  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("onChange");
   swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
 #endif
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.createParameterTree'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.onChange'");
     }
   }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_ParameterPool,  0  | SWIG_POINTER_DISOWN, &own);
-  if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""ParameterPool *""'");
-  }
-  c_result = reinterpret_cast< ParameterPool * >(swig_argp);
-  swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (ParameterPool *) c_result;
 }
 
 
-void SwigDirector_IBornFF::onChange() {
+std::vector< std::pair< std::string, RealParameter * >, std::allocator< std::pair< std::string, RealParameter * > > > SwigDirector_IBornFF::fullQualifiedParameters() const {
+  void *swig_argp ;
+  int swig_res = 0 ;
+  
+  std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > c_result;
+  swig_set_inner("fullQualifiedParameters", true);
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 3;
-  const char *const swig_method_name = "onChange";
+  const char *const swig_method_name = "fullQualifiedParameters";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
   swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
 #else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("onChange");
+  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("fullQualifiedParameters");
   swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
 #endif
+  swig_set_inner("fullQualifiedParameters", false);
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.onChange'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'IBornFF.fullQualifiedParameters'");
     }
   }
+  swig_res = SWIG_ConvertPtr(result,&swig_argp,SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t,  0  | 0);
+  if (!SWIG_IsOK(swig_res)) {
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >""'");
+  }
+  c_result = *(reinterpret_cast< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > * >(swig_argp));
+  if (SWIG_IsNewObj(swig_res)) delete reinterpret_cast< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > * >(swig_argp);
+  return (std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >) c_result;
 }
 
 
@@ -8398,7 +8388,7 @@ std::vector< INode const *, std::allocator< INode const * > > SwigDirector_IBorn
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 6;
+  const size_t swig_method_index = 5;
   const char *const swig_method_name = "getChildren";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -8431,7 +8421,7 @@ void SwigDirector_IBornFF::setParent(INode const *newParent) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 7;
+  const size_t swig_method_index = 6;
   const char *const swig_method_name = "setParent";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8458,7 +8448,7 @@ Material const *SwigDirector_IBornFF::material() const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 8;
+  const size_t swig_method_index = 7;
   const char *const swig_method_name = "material";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -8490,7 +8480,7 @@ void SwigDirector_IBornFF::setAmbientMaterial(Material const &arg0) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 9;
+  const size_t swig_method_index = 8;
   const char *const swig_method_name = "setAmbientMaterial";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8515,7 +8505,7 @@ complex_t SwigDirector_IBornFF::evaluate(WavevectorInfo const &wavevectors) cons
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 10;
+  const size_t swig_method_index = 9;
   const char *const swig_method_name = "evaluate";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8546,7 +8536,7 @@ double SwigDirector_IBornFF::volume() const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 11;
+  const size_t swig_method_index = 10;
   const char *const swig_method_name = "volume";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -8578,7 +8568,7 @@ double SwigDirector_IBornFF::radialExtension() const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 12;
+  const size_t swig_method_index = 11;
   const char *const swig_method_name = "radialExtension";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
@@ -8612,7 +8602,7 @@ double SwigDirector_IBornFF::bottomZ(IRotation const &rotation) const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 13;
+  const size_t swig_method_index = 12;
   const char *const swig_method_name = "bottomZ";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8645,7 +8635,7 @@ double SwigDirector_IBornFF::topZ(IRotation const &rotation) const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 14;
+  const size_t swig_method_index = 13;
   const char *const swig_method_name = "topZ";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8679,7 +8669,7 @@ bool SwigDirector_IBornFF::canSliceAnalytically(IRotation const &rot) const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 15;
+  const size_t swig_method_index = 14;
   const char *const swig_method_name = "canSliceAnalytically";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8721,7 +8711,7 @@ IFormFactor *SwigDirector_IBornFF::sliceFormFactor(ZLimits limits, IRotation con
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 16;
+  const size_t swig_method_index = 15;
   const char *const swig_method_name = "sliceFormFactor";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0,(PyObject *)obj1,(PyObject *)obj2, NULL);
@@ -8754,7 +8744,7 @@ complex_t SwigDirector_IBornFF::evaluate_for_q(cvector_t q) const {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call IBornFF.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
-  const size_t swig_method_index = 17;
+  const size_t swig_method_index = 16;
   const char *const swig_method_name = "evaluate_for_q";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject result = PyObject_CallFunctionObjArgs(method ,(PyObject *)obj0, NULL);
@@ -8788,61 +8778,62 @@ SwigDirector_ISampleBuilder::SwigDirector_ISampleBuilder(PyObject *self): ISampl
 SwigDirector_ISampleBuilder::~SwigDirector_ISampleBuilder() {
 }
 
-ParameterPool *SwigDirector_ISampleBuilder::createParameterTree() const {
-  ParameterPool *c_result = 0 ;
-  void *swig_argp ;
-  int swig_res ;
-  swig_owntype own ;
-  
+void SwigDirector_ISampleBuilder::onChange() {
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ISampleBuilder.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 0;
-  const char *const swig_method_name = "createParameterTree";
+  const char *const swig_method_name = "onChange";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
   swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
 #else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("createParameterTree");
+  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("onChange");
   swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
 #endif
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'ISampleBuilder.createParameterTree'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'ISampleBuilder.onChange'");
     }
   }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_ParameterPool,  0  | SWIG_POINTER_DISOWN, &own);
-  if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""ParameterPool *""'");
-  }
-  c_result = reinterpret_cast< ParameterPool * >(swig_argp);
-  swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (ParameterPool *) c_result;
 }
 
 
-void SwigDirector_ISampleBuilder::onChange() {
+std::vector< std::pair< std::string, RealParameter * >, std::allocator< std::pair< std::string, RealParameter * > > > SwigDirector_ISampleBuilder::fullQualifiedParameters() const {
+  void *swig_argp ;
+  int swig_res = 0 ;
+  
+  std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > c_result;
+  swig_set_inner("fullQualifiedParameters", true);
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ISampleBuilder.__init__.");
   }
 #if defined(SWIG_PYTHON_DIRECTOR_VTABLE)
   const size_t swig_method_index = 1;
-  const char *const swig_method_name = "onChange";
+  const char *const swig_method_name = "fullQualifiedParameters";
   PyObject *method = swig_get_method(swig_method_index, swig_method_name);
   swig::SwigVar_PyObject args = PyTuple_New(0);
   swig::SwigVar_PyObject result = PyObject_Call(method, (PyObject *) args, NULL);
 #else
-  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("onChange");
+  swig::SwigVar_PyObject swig_method_name = SWIG_Python_str_FromChar("fullQualifiedParameters");
   swig::SwigVar_PyObject result = PyObject_CallMethodObjArgs(swig_get_self(), (PyObject *) swig_method_name, NULL);
 #endif
+  swig_set_inner("fullQualifiedParameters", false);
   if (!result) {
     PyObject *error = PyErr_Occurred();
     if (error) {
-      Swig::DirectorMethodException::raise("Error detected when calling 'ISampleBuilder.onChange'");
+      Swig::DirectorMethodException::raise("Error detected when calling 'ISampleBuilder.fullQualifiedParameters'");
     }
   }
+  swig_res = SWIG_ConvertPtr(result,&swig_argp,SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t,  0  | 0);
+  if (!SWIG_IsOK(swig_res)) {
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >""'");
+  }
+  c_result = *(reinterpret_cast< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > * >(swig_argp));
+  if (SWIG_IsNewObj(swig_res)) delete reinterpret_cast< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > * >(swig_argp);
+  return (std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >) c_result;
 }
 
 
@@ -39073,6 +39064,47 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_ISampleNode_fullQualifiedParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  ISampleNode *arg1 = (ISampleNode *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  SwigDirector_ISampleNode *darg = 0;
+  SwigValueWrapper< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > > result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_ISampleNode, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISampleNode_fullQualifiedParameters" "', argument " "1"" of type '" "ISampleNode const *""'"); 
+  }
+  arg1 = reinterpret_cast< ISampleNode * >(argp1);
+  director = SWIG_DIRECTOR_CAST(arg1);
+  if (!director || !(director->swig_get_inner("fullQualifiedParameters"))) {
+    SWIG_SetErrorMsg(PyExc_RuntimeError,"accessing protected member fullQualifiedParameters");
+    SWIG_fail;
+  }
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    darg = dynamic_cast<SwigDirector_ISampleNode *>(arg1);
+    if (upcall) {
+      result = ((SwigDirector_ISampleNode const *)darg)->fullQualifiedParametersSwigPublic();
+    } else {
+      result = ((SwigDirector_ISampleNode const *)darg)->fullQualifiedParameters();
+    }
+  } catch (Swig::DirectorException&) {
+    SWIG_fail;
+  }
+  resultobj = SWIG_NewPointerObj((new std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >(static_cast< const std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >& >(result))), SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *ISampleNode_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
@@ -39750,6 +39782,47 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_IFormFactor_fullQualifiedParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFormFactor *arg1 = (IFormFactor *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  SwigDirector_IFormFactor *darg = 0;
+  SwigValueWrapper< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > > result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFormFactor, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFormFactor_fullQualifiedParameters" "', argument " "1"" of type '" "IFormFactor const *""'"); 
+  }
+  arg1 = reinterpret_cast< IFormFactor * >(argp1);
+  director = SWIG_DIRECTOR_CAST(arg1);
+  if (!director || !(director->swig_get_inner("fullQualifiedParameters"))) {
+    SWIG_SetErrorMsg(PyExc_RuntimeError,"accessing protected member fullQualifiedParameters");
+    SWIG_fail;
+  }
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    darg = dynamic_cast<SwigDirector_IFormFactor *>(arg1);
+    if (upcall) {
+      result = ((SwigDirector_IFormFactor const *)darg)->fullQualifiedParametersSwigPublic();
+    } else {
+      result = ((SwigDirector_IFormFactor const *)darg)->fullQualifiedParameters();
+    }
+  } catch (Swig::DirectorException&) {
+    SWIG_fail;
+  }
+  resultobj = SWIG_NewPointerObj((new std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >(static_cast< const std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >& >(result))), SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *IFormFactor_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
@@ -40445,6 +40518,47 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_IBornFF_fullQualifiedParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IBornFF *arg1 = (IBornFF *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  SwigDirector_IBornFF *darg = 0;
+  SwigValueWrapper< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > > result;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IBornFF, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IBornFF_fullQualifiedParameters" "', argument " "1"" of type '" "IBornFF const *""'"); 
+  }
+  arg1 = reinterpret_cast< IBornFF * >(argp1);
+  director = SWIG_DIRECTOR_CAST(arg1);
+  if (!director || !(director->swig_get_inner("fullQualifiedParameters"))) {
+    SWIG_SetErrorMsg(PyExc_RuntimeError,"accessing protected member fullQualifiedParameters");
+    SWIG_fail;
+  }
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    darg = dynamic_cast<SwigDirector_IBornFF *>(arg1);
+    if (upcall) {
+      result = ((SwigDirector_IBornFF const *)darg)->fullQualifiedParametersSwigPublic();
+    } else {
+      result = ((SwigDirector_IBornFF const *)darg)->fullQualifiedParameters();
+    }
+  } catch (Swig::DirectorException&) {
+    SWIG_fail;
+  }
+  resultobj = SWIG_NewPointerObj((new std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >(static_cast< const std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >& >(result))), SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_IBornFF_sliceFormFactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IBornFF *arg1 = (IBornFF *) 0 ;
@@ -47565,6 +47679,29 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_IFTDistribution1D_parameterOmega(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFTDistribution1D *arg1 = (IFTDistribution1D *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  RealParameter *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IFTDistribution1D, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFTDistribution1D_parameterOmega" "', argument " "1"" of type '" "IFTDistribution1D const *""'"); 
+  }
+  arg1 = reinterpret_cast< IFTDistribution1D * >(argp1);
+  result = (RealParameter *)((IFTDistribution1D const *)arg1)->parameterOmega();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_RealParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_delete_IFTDistribution1D(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFTDistribution1D *arg1 = (IFTDistribution1D *) 0 ;
@@ -56330,6 +56467,75 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_LayerRoughness_parameterSigma(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  LayerRoughness *arg1 = (LayerRoughness *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  RealParameter *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LayerRoughness, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LayerRoughness_parameterSigma" "', argument " "1"" of type '" "LayerRoughness const *""'"); 
+  }
+  arg1 = reinterpret_cast< LayerRoughness * >(argp1);
+  result = (RealParameter *)((LayerRoughness const *)arg1)->parameterSigma();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_RealParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_LayerRoughness_parameterHurst(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  LayerRoughness *arg1 = (LayerRoughness *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  RealParameter *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LayerRoughness, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LayerRoughness_parameterHurst" "', argument " "1"" of type '" "LayerRoughness const *""'"); 
+  }
+  arg1 = reinterpret_cast< LayerRoughness * >(argp1);
+  result = (RealParameter *)((LayerRoughness const *)arg1)->parameterHurst();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_RealParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_LayerRoughness_parameterCorrLength(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  LayerRoughness *arg1 = (LayerRoughness *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  RealParameter *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_LayerRoughness, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "LayerRoughness_parameterCorrLength" "', argument " "1"" of type '" "LayerRoughness const *""'"); 
+  }
+  arg1 = reinterpret_cast< LayerRoughness * >(argp1);
+  result = (RealParameter *)((LayerRoughness const *)arg1)->parameterCorrLength();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_RealParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_delete_LayerRoughness(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   LayerRoughness *arg1 = (LayerRoughness *) 0 ;
@@ -57388,6 +57594,29 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_MultiLayer_parameterCrossCorrLength(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MultiLayer *arg1 = (MultiLayer *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject *swig_obj[1] ;
+  RealParameter *result = 0 ;
+  
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
+  res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_MultiLayer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MultiLayer_parameterCrossCorrLength" "', argument " "1"" of type '" "MultiLayer const *""'"); 
+  }
+  arg1 = reinterpret_cast< MultiLayer * >(argp1);
+  result = (RealParameter *)((MultiLayer const *)arg1)->parameterCrossCorrLength();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_RealParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *MultiLayer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!SWIG_Python_UnpackTuple(args, "swigregister", 1, 1, &obj)) return NULL;
@@ -68969,27 +69198,22 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_ISampleBuilder_registerParameter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_ISampleBuilder_onChange(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   ISampleBuilder *arg1 = (ISampleBuilder *) 0 ;
-  std::string *arg2 = 0 ;
-  int64_t arg3 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   std::shared_ptr< ISampleBuilder > tempshared1 ;
   std::shared_ptr< ISampleBuilder > *smartarg1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  long long val3 ;
-  int ecode3 = 0 ;
-  PyObject *swig_obj[3] ;
-  RealParameter *result = 0 ;
+  PyObject *swig_obj[1] ;
   
-  if (!SWIG_Python_UnpackTuple(args, "ISampleBuilder_registerParameter", 3, 3, swig_obj)) SWIG_fail;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
   {
     int newmem = 0;
     res1 = SWIG_ConvertPtrAndOwn(swig_obj[0], &argp1, SWIGTYPE_p_std__shared_ptrT_ISampleBuilder_t, 0 |  0 , &newmem);
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISampleBuilder_registerParameter" "', argument " "1"" of type '" "ISampleBuilder *""'");
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISampleBuilder_onChange" "', argument " "1"" of type '" "ISampleBuilder *""'");
     }
     if (newmem & SWIG_CAST_NEW_MEMORY) {
       tempshared1 = *reinterpret_cast< std::shared_ptr<  ISampleBuilder > * >(argp1);
@@ -69000,52 +69224,30 @@ SWIGINTERN PyObject *_wrap_ISampleBuilder_registerParameter(PyObject *SWIGUNUSED
       arg1 = const_cast< ISampleBuilder * >((smartarg1 ? smartarg1->get() : 0));
     }
   }
-  {
-    std::string *ptr = (std::string *)0;
-    res2 = SWIG_AsPtr_std_string(swig_obj[1], &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ISampleBuilder_registerParameter" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "ISampleBuilder_registerParameter" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  ecode3 = SWIG_AsVal_long_SS_long(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "ISampleBuilder_registerParameter" "', argument " "3"" of type '" "int64_t""'");
-  } 
-  arg3 = static_cast< int64_t >(val3);
-  result = (RealParameter *)ISampleBuilder_registerParameter(arg1,(std::string const &)*arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_RealParameter, 0 |  0 );
-  if (SWIG_IsNewObj(res2)) delete arg2;
+  ISampleBuilder_onChange(arg1);
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_ISampleBuilder_setParameterValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_disown_ISampleBuilder(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   ISampleBuilder *arg1 = (ISampleBuilder *) 0 ;
-  std::string *arg2 = 0 ;
-  double arg3 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   std::shared_ptr< ISampleBuilder > tempshared1 ;
   std::shared_ptr< ISampleBuilder > *smartarg1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  double val3 ;
-  int ecode3 = 0 ;
-  PyObject *swig_obj[3] ;
+  PyObject *swig_obj[1] ;
   
-  if (!SWIG_Python_UnpackTuple(args, "ISampleBuilder_setParameterValue", 3, 3, swig_obj)) SWIG_fail;
+  if (!args) SWIG_fail;
+  swig_obj[0] = args;
   {
     int newmem = 0;
     res1 = SWIG_ConvertPtrAndOwn(swig_obj[0], &argp1, SWIGTYPE_p_std__shared_ptrT_ISampleBuilder_t, 0 |  0 , &newmem);
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISampleBuilder_setParameterValue" "', argument " "1"" of type '" "ISampleBuilder *""'");
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "disown_ISampleBuilder" "', argument " "1"" of type '" "ISampleBuilder *""'");
     }
     if (newmem & SWIG_CAST_NEW_MEMORY) {
       tempshared1 = *reinterpret_cast< std::shared_ptr<  ISampleBuilder > * >(argp1);
@@ -69057,102 +69259,18 @@ SWIGINTERN PyObject *_wrap_ISampleBuilder_setParameterValue(PyObject *SWIGUNUSED
     }
   }
   {
-    std::string *ptr = (std::string *)0;
-    res2 = SWIG_AsPtr_std_string(swig_obj[1], &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "ISampleBuilder_setParameterValue" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "ISampleBuilder_setParameterValue" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  ecode3 = SWIG_AsVal_double(swig_obj[2], &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "ISampleBuilder_setParameterValue" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  ISampleBuilder_setParameterValue(arg1,(std::string const &)*arg2,arg3);
-  resultobj = SWIG_Py_Void();
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_ISampleBuilder_parametersToString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  ISampleBuilder *arg1 = (ISampleBuilder *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  std::shared_ptr< ISampleBuilder const > tempshared1 ;
-  std::shared_ptr< ISampleBuilder const > *smartarg1 = 0 ;
-  PyObject *swig_obj[1] ;
-  std::string result;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  {
-    int newmem = 0;
-    res1 = SWIG_ConvertPtrAndOwn(swig_obj[0], &argp1, SWIGTYPE_p_std__shared_ptrT_ISampleBuilder_t, 0 |  0 , &newmem);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISampleBuilder_parametersToString" "', argument " "1"" of type '" "ISampleBuilder const *""'");
-    }
-    if (newmem & SWIG_CAST_NEW_MEMORY) {
-      tempshared1 = *reinterpret_cast< std::shared_ptr< const ISampleBuilder > * >(argp1);
-      delete reinterpret_cast< std::shared_ptr< const ISampleBuilder > * >(argp1);
-      arg1 = const_cast< ISampleBuilder * >(tempshared1.get());
-    } else {
-      smartarg1 = reinterpret_cast< std::shared_ptr< const ISampleBuilder > * >(argp1);
-      arg1 = const_cast< ISampleBuilder * >((smartarg1 ? smartarg1->get() : 0));
-    }
+    Swig::Director *director = SWIG_DIRECTOR_CAST(arg1);
+    if (director) director->swig_disown();
   }
-  result = ISampleBuilder_parametersToString((ISampleBuilder const *)arg1);
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_ISampleBuilder_createParameterTree(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  ISampleBuilder *arg1 = (ISampleBuilder *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  std::shared_ptr< ISampleBuilder const > tempshared1 ;
-  std::shared_ptr< ISampleBuilder const > *smartarg1 = 0 ;
-  PyObject *swig_obj[1] ;
-  ParameterPool *result = 0 ;
   
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  {
-    int newmem = 0;
-    res1 = SWIG_ConvertPtrAndOwn(swig_obj[0], &argp1, SWIGTYPE_p_std__shared_ptrT_ISampleBuilder_t, 0 |  0 , &newmem);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISampleBuilder_createParameterTree" "', argument " "1"" of type '" "ISampleBuilder const *""'");
-    }
-    if (newmem & SWIG_CAST_NEW_MEMORY) {
-      tempshared1 = *reinterpret_cast< std::shared_ptr< const ISampleBuilder > * >(argp1);
-      delete reinterpret_cast< std::shared_ptr< const ISampleBuilder > * >(argp1);
-      arg1 = const_cast< ISampleBuilder * >(tempshared1.get());
-    } else {
-      smartarg1 = reinterpret_cast< std::shared_ptr< const ISampleBuilder > * >(argp1);
-      arg1 = const_cast< ISampleBuilder * >((smartarg1 ? smartarg1->get() : 0));
-    }
-  }
-  result = (ParameterPool *)ISampleBuilder_createParameterTree((ISampleBuilder const *)arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ParameterPool, 0 |  0 );
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_ISampleBuilder_parameterPool(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_ISampleBuilder_fullQualifiedParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   ISampleBuilder *arg1 = (ISampleBuilder *) 0 ;
   void *argp1 = 0 ;
@@ -69160,7 +69278,10 @@ SWIGINTERN PyObject *_wrap_ISampleBuilder_parameterPool(PyObject *SWIGUNUSEDPARM
   std::shared_ptr< ISampleBuilder const > tempshared1 ;
   std::shared_ptr< ISampleBuilder const > *smartarg1 = 0 ;
   PyObject *swig_obj[1] ;
-  ParameterPool *result = 0 ;
+  Swig::Director *director = 0;
+  bool upcall = false;
+  SwigDirector_ISampleBuilder *darg = 0;
+  SwigValueWrapper< std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > > result;
   
   if (!args) SWIG_fail;
   swig_obj[0] = args;
@@ -69168,7 +69289,7 @@ SWIGINTERN PyObject *_wrap_ISampleBuilder_parameterPool(PyObject *SWIGUNUSEDPARM
     int newmem = 0;
     res1 = SWIG_ConvertPtrAndOwn(swig_obj[0], &argp1, SWIGTYPE_p_std__shared_ptrT_ISampleBuilder_t, 0 |  0 , &newmem);
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISampleBuilder_parameterPool" "', argument " "1"" of type '" "ISampleBuilder const *""'");
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISampleBuilder_fullQualifiedParameters" "', argument " "1"" of type '" "ISampleBuilder const *""'");
     }
     if (newmem & SWIG_CAST_NEW_MEMORY) {
       tempshared1 = *reinterpret_cast< std::shared_ptr< const ISampleBuilder > * >(argp1);
@@ -69179,80 +69300,23 @@ SWIGINTERN PyObject *_wrap_ISampleBuilder_parameterPool(PyObject *SWIGUNUSEDPARM
       arg1 = const_cast< ISampleBuilder * >((smartarg1 ? smartarg1->get() : 0));
     }
   }
-  result = (ParameterPool *)ISampleBuilder_parameterPool((ISampleBuilder const *)arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ParameterPool, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_ISampleBuilder_onChange(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  ISampleBuilder *arg1 = (ISampleBuilder *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  std::shared_ptr< ISampleBuilder > tempshared1 ;
-  std::shared_ptr< ISampleBuilder > *smartarg1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  {
-    int newmem = 0;
-    res1 = SWIG_ConvertPtrAndOwn(swig_obj[0], &argp1, SWIGTYPE_p_std__shared_ptrT_ISampleBuilder_t, 0 |  0 , &newmem);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "ISampleBuilder_onChange" "', argument " "1"" of type '" "ISampleBuilder *""'");
-    }
-    if (newmem & SWIG_CAST_NEW_MEMORY) {
-      tempshared1 = *reinterpret_cast< std::shared_ptr<  ISampleBuilder > * >(argp1);
-      delete reinterpret_cast< std::shared_ptr<  ISampleBuilder > * >(argp1);
-      arg1 = const_cast< ISampleBuilder * >(tempshared1.get());
-    } else {
-      smartarg1 = reinterpret_cast< std::shared_ptr<  ISampleBuilder > * >(argp1);
-      arg1 = const_cast< ISampleBuilder * >((smartarg1 ? smartarg1->get() : 0));
-    }
+  director = SWIG_DIRECTOR_CAST(arg1);
+  if (!director || !(director->swig_get_inner("fullQualifiedParameters"))) {
+    SWIG_SetErrorMsg(PyExc_RuntimeError,"accessing protected member fullQualifiedParameters");
+    SWIG_fail;
   }
-  ISampleBuilder_onChange(arg1);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_disown_ISampleBuilder(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  ISampleBuilder *arg1 = (ISampleBuilder *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  std::shared_ptr< ISampleBuilder > tempshared1 ;
-  std::shared_ptr< ISampleBuilder > *smartarg1 = 0 ;
-  PyObject *swig_obj[1] ;
-  
-  if (!args) SWIG_fail;
-  swig_obj[0] = args;
-  {
-    int newmem = 0;
-    res1 = SWIG_ConvertPtrAndOwn(swig_obj[0], &argp1, SWIGTYPE_p_std__shared_ptrT_ISampleBuilder_t, 0 |  0 , &newmem);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "disown_ISampleBuilder" "', argument " "1"" of type '" "ISampleBuilder *""'");
-    }
-    if (newmem & SWIG_CAST_NEW_MEMORY) {
-      tempshared1 = *reinterpret_cast< std::shared_ptr<  ISampleBuilder > * >(argp1);
-      delete reinterpret_cast< std::shared_ptr<  ISampleBuilder > * >(argp1);
-      arg1 = const_cast< ISampleBuilder * >(tempshared1.get());
+  upcall = (director && (director->swig_get_self()==swig_obj[0]));
+  try {
+    darg = dynamic_cast<SwigDirector_ISampleBuilder *>(arg1);
+    if (upcall) {
+      result = ((SwigDirector_ISampleBuilder const *)darg)->fullQualifiedParametersSwigPublic();
     } else {
-      smartarg1 = reinterpret_cast< std::shared_ptr<  ISampleBuilder > * >(argp1);
-      arg1 = const_cast< ISampleBuilder * >((smartarg1 ? smartarg1->get() : 0));
+      result = ((SwigDirector_ISampleBuilder const *)darg)->fullQualifiedParameters();
     }
+  } catch (Swig::DirectorException&) {
+    SWIG_fail;
   }
-  {
-    Swig::Director *director = SWIG_DIRECTOR_CAST(arg1);
-    if (director) director->swig_disown();
-  }
-  
-  resultobj = SWIG_Py_Void();
+  resultobj = SWIG_NewPointerObj((new std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >(static_cast< const std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >& >(result))), SWIGTYPE_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t, SWIG_POINTER_OWN |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -70610,6 +70674,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "delete_ISampleNode", _wrap_delete_ISampleNode, METH_O, "delete_ISampleNode(ISampleNode self)"},
 	 { "disown_ISampleNode", _wrap_disown_ISampleNode, METH_O, NULL},
+	 { "ISampleNode_fullQualifiedParameters", _wrap_ISampleNode_fullQualifiedParameters, METH_O, "ISampleNode_fullQualifiedParameters(ISampleNode self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"},
 	 { "ISampleNode_swigregister", ISampleNode_swigregister, METH_O, NULL},
 	 { "ISampleNode_swiginit", ISampleNode_swiginit, METH_VARARGS, NULL},
 	 { "new_IFormFactor", _wrap_new_IFormFactor, METH_VARARGS, "\n"
@@ -70682,6 +70747,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "IFormFactor_canSliceAnalytically", _wrap_IFormFactor_canSliceAnalytically, METH_VARARGS, "IFormFactor_canSliceAnalytically(IFormFactor self, IRotation rot) -> bool"},
 	 { "IFormFactor_sliceFormFactor", _wrap_IFormFactor_sliceFormFactor, METH_VARARGS, "IFormFactor_sliceFormFactor(IFormFactor self, ZLimits limits, IRotation rot, kvector_t translation) -> IFormFactor"},
 	 { "disown_IFormFactor", _wrap_disown_IFormFactor, METH_O, NULL},
+	 { "IFormFactor_fullQualifiedParameters", _wrap_IFormFactor_fullQualifiedParameters, METH_O, "IFormFactor_fullQualifiedParameters(IFormFactor self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"},
 	 { "IFormFactor_swigregister", IFormFactor_swigregister, METH_O, NULL},
 	 { "IFormFactor_swiginit", IFormFactor_swiginit, METH_VARARGS, NULL},
 	 { "SlicingEffects_position_set", _wrap_SlicingEffects_position_set, METH_VARARGS, "SlicingEffects_position_set(SlicingEffects self, kvector_t position)"},
@@ -70757,6 +70823,7 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { "IBornFF_canSliceAnalytically", _wrap_IBornFF_canSliceAnalytically, METH_VARARGS, "IBornFF_canSliceAnalytically(IBornFF self, IRotation rot) -> bool"},
 	 { "disown_IBornFF", _wrap_disown_IBornFF, METH_O, NULL},
+	 { "IBornFF_fullQualifiedParameters", _wrap_IBornFF_fullQualifiedParameters, METH_O, "IBornFF_fullQualifiedParameters(IBornFF self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"},
 	 { "IBornFF_sliceFormFactor", _wrap_IBornFF_sliceFormFactor, METH_VARARGS, "IBornFF_sliceFormFactor(IBornFF self, ZLimits limits, IRotation rot, kvector_t translation) -> IFormFactor"},
 	 { "IBornFF_swigregister", IBornFF_swigregister, METH_O, NULL},
 	 { "IBornFF_swiginit", IBornFF_swiginit, METH_VARARGS, NULL},
@@ -71867,6 +71934,7 @@ static PyMethodDef SwigMethods[] = {
 		"Returns the negative of the second order derivative in q space around q=0. \n"
 		"\n"
 		""},
+	 { "IFTDistribution1D_parameterOmega", _wrap_IFTDistribution1D_parameterOmega, METH_O, "IFTDistribution1D_parameterOmega(IFTDistribution1D self) -> RealParameter *"},
 	 { "delete_IFTDistribution1D", _wrap_delete_IFTDistribution1D, METH_O, "delete_IFTDistribution1D(IFTDistribution1D self)"},
 	 { "IFTDistribution1D_swigregister", IFTDistribution1D_swigregister, METH_O, NULL},
 	 { "new_FTDistribution1DCauchy", _wrap_new_FTDistribution1DCauchy, METH_VARARGS, "\n"
@@ -73449,6 +73517,9 @@ static PyMethodDef SwigMethods[] = {
 		"Returns lateral correlation length. \n"
 		"\n"
 		""},
+	 { "LayerRoughness_parameterSigma", _wrap_LayerRoughness_parameterSigma, METH_O, "LayerRoughness_parameterSigma(LayerRoughness self) -> RealParameter *"},
+	 { "LayerRoughness_parameterHurst", _wrap_LayerRoughness_parameterHurst, METH_O, "LayerRoughness_parameterHurst(LayerRoughness self) -> RealParameter *"},
+	 { "LayerRoughness_parameterCorrLength", _wrap_LayerRoughness_parameterCorrLength, METH_O, "LayerRoughness_parameterCorrLength(LayerRoughness self) -> RealParameter *"},
 	 { "delete_LayerRoughness", _wrap_delete_LayerRoughness, METH_O, "delete_LayerRoughness(LayerRoughness self)"},
 	 { "LayerRoughness_swigregister", LayerRoughness_swigregister, METH_O, NULL},
 	 { "LayerRoughness_swiginit", LayerRoughness_swiginit, METH_VARARGS, NULL},
@@ -73651,6 +73722,7 @@ static PyMethodDef SwigMethods[] = {
 		"std::vector< const INode * > MultiLayer::getChildren() const override\n"
 		"\n"
 		""},
+	 { "MultiLayer_parameterCrossCorrLength", _wrap_MultiLayer_parameterCrossCorrLength, METH_O, "MultiLayer_parameterCrossCorrLength(MultiLayer self) -> RealParameter *"},
 	 { "MultiLayer_swigregister", MultiLayer_swigregister, METH_O, NULL},
 	 { "MultiLayer_swiginit", MultiLayer_swiginit, METH_VARARGS, NULL},
 	 { "delete_RoughnessModel", _wrap_delete_RoughnessModel, METH_O, "delete_RoughnessModel(RoughnessModel self)"},
@@ -75392,13 +75464,9 @@ static PyMethodDef SwigMethods[] = {
 		"virtual size_t ISampleBuilder::size()\n"
 		"\n"
 		""},
-	 { "ISampleBuilder_registerParameter", _wrap_ISampleBuilder_registerParameter, METH_VARARGS, "ISampleBuilder_registerParameter(ISampleBuilder self, std::string const & name, int64_t parpointer) -> RealParameter *"},
-	 { "ISampleBuilder_setParameterValue", _wrap_ISampleBuilder_setParameterValue, METH_VARARGS, "ISampleBuilder_setParameterValue(ISampleBuilder self, std::string const & name, double value)"},
-	 { "ISampleBuilder_parametersToString", _wrap_ISampleBuilder_parametersToString, METH_O, "ISampleBuilder_parametersToString(ISampleBuilder self) -> std::string"},
-	 { "ISampleBuilder_createParameterTree", _wrap_ISampleBuilder_createParameterTree, METH_O, "ISampleBuilder_createParameterTree(ISampleBuilder self) -> ParameterPool"},
-	 { "ISampleBuilder_parameterPool", _wrap_ISampleBuilder_parameterPool, METH_O, "ISampleBuilder_parameterPool(ISampleBuilder self) -> ParameterPool"},
 	 { "ISampleBuilder_onChange", _wrap_ISampleBuilder_onChange, METH_O, "ISampleBuilder_onChange(ISampleBuilder self)"},
 	 { "disown_ISampleBuilder", _wrap_disown_ISampleBuilder, METH_O, NULL},
+	 { "ISampleBuilder_fullQualifiedParameters", _wrap_ISampleBuilder_fullQualifiedParameters, METH_O, "ISampleBuilder_fullQualifiedParameters(ISampleBuilder self) -> std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > >"},
 	 { "ISampleBuilder_swigregister", ISampleBuilder_swigregister, METH_O, NULL},
 	 { "ISampleBuilder_swiginit", ISampleBuilder_swiginit, METH_VARARGS, NULL},
 	 { "new_SampleBuilderFactory", _wrap_new_SampleBuilderFactory, METH_NOARGS, "\n"
@@ -76128,9 +76196,6 @@ static void *_p_FTDistribution1DCauchyTo_p_ICloneable(void *x, int *SWIGUNUSEDPA
 static void *_p_IInterferenceFunctionTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *) ((IInterferenceFunction *) x));
 }
-static void *_p_ParameterPoolTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *)  ((ParameterPool *) x));
-}
 static void *_p_FormFactorCone6To_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *)(IBornFF *)(IFormFactorPolyhedron *) ((FormFactorCone6 *) x));
 }
@@ -76149,12 +76214,12 @@ static void *_p_InterferenceFunctionRadialParaCrystalTo_p_ICloneable(void *x, in
 static void *_p_InterferenceFunction2DParaCrystalTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IInterferenceFunction *) ((InterferenceFunction2DParaCrystal *) x));
 }
-static void *_p_FormFactorCrystalTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorCrystal *) x));
-}
 static void *_p_CrystalTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *) ((Crystal *) x));
 }
+static void *_p_FormFactorCrystalTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((ICloneable *) (ISampleNode *)(IFormFactor *) ((FormFactorCrystal *) x));
+}
 static void *_p_MesoCrystalTo_p_ICloneable(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ICloneable *) (ISampleNode *)(IAbstractParticle *)(IParticle *) ((MesoCrystal *) x));
 }
@@ -77574,7 +77639,6 @@ static swig_type_info _swigt__p_MisesFisherGaussPeakShape = {"_p_MisesFisherGaus
 static swig_type_info _swigt__p_MisesGaussPeakShape = {"_p_MisesGaussPeakShape", "MisesGaussPeakShape *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_MultiLayer = {"_p_MultiLayer", "MultiLayer *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_NodeMeta = {"_p_NodeMeta", "NodeMeta *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_ParameterPool = {"_p_ParameterPool", "ParameterPool *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Particle = {"_p_Particle", "Particle *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ParticleComposition = {"_p_ParticleComposition", "ParticleComposition *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_ParticleCoreShell = {"_p_ParticleCoreShell", "ParticleCoreShell *", 0, 0, (void*)0, 0};
@@ -77646,6 +77710,7 @@ static swig_type_info _swigt__p_std__vectorT_double_std__allocatorT_double_t_t =
 static swig_type_info _swigt__p_std__vectorT_int_std__allocatorT_int_t_t = {"_p_std__vectorT_int_std__allocatorT_int_t_t", "std::vector< int,std::allocator< int > > *|std::vector< int > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t = {"_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t", "std::vector< std::complex< double > > *|std::vector< std::complex< double >,std::allocator< std::complex< double > > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t = {"_p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t", "std::vector< std::pair< double,double > > *|std::vector< std::pair< double,double >,std::allocator< std::pair< double,double > > > *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t = {"_p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t", "std::vector< std::pair< std::string,RealParameter * >,std::allocator< std::pair< std::string,RealParameter * > > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t = {"_p_std__vectorT_std__string_std__allocatorT_std__string_t_t", "std::vector< std::string,std::allocator< std::string > > *|std::vector< std::string > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t = {"_p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t", "std::vector< std::vector< double > > *|std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *|std::vector< std::vector< double,std::allocator< double > > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t = {"_p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t", "std::vector< std::vector< int > > *|std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > *|std::vector< std::vector< int,std::allocator< int > > > *", 0, 0, (void*)0, 0};
@@ -77775,7 +77840,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_MultiLayer,
   &_swigt__p_NodeMeta,
   &_swigt__p_ParameterDistribution,
-  &_swigt__p_ParameterPool,
   &_swigt__p_Particle,
   &_swigt__p_ParticleComposition,
   &_swigt__p_ParticleCoreShell,
@@ -77847,6 +77911,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_std__vectorT_int_std__allocatorT_int_t_t,
   &_swigt__p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t,
   &_swigt__p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t,
+  &_swigt__p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t,
   &_swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t,
   &_swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t,
   &_swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t,
@@ -77923,7 +77988,7 @@ static swig_cast_info _swigc__p_GaussFisherPeakShape[] = {  {&_swigt__p_GaussFis
 static swig_cast_info _swigc__p_HexagonalLattice2D[] = {  {&_swigt__p_HexagonalLattice2D, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IAbstractParticle[] = {  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_IAbstractParticle, 0, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_IAbstractParticle, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_IAbstractParticle, 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_IProfileRipple, _p_IProfileRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_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_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_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_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IBornFF, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_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_FormFactorDot, _p_FormFactorDotTo_p_IBornFF, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IBornFF, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_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_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_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_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_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_FormFactorPrism3, _p_FormFactorPrism3To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_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_FTDistribution2DCone, _p_FTDistribution2DConeTo_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_InterferenceFunctionHardDisk, _p_InterferenceFunctionHardDiskTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_ICloneable, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_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_InterferenceFunctionTwin, _p_InterferenceFunctionTwinTo_p_ICloneable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_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_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_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_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_ICloneable, 0, 0},  {&_swigt__p_ParameterPool, _p_ParameterPoolTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_ICloneable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_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_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_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_IFTDistribution2D, _p_IFTDistribution2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction2DSuperLattice, _p_InterferenceFunction2DSuperLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction3DLattice, _p_InterferenceFunction3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionFinite2DLattice, _p_InterferenceFunctionFinite2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionFinite3DLattice, _p_InterferenceFunctionFinite3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_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_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_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_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_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_FormFactorPrism3, _p_FormFactorPrism3To_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_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_FTDistribution2DCone, _p_FTDistribution2DConeTo_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_InterferenceFunctionHardDisk, _p_InterferenceFunctionHardDiskTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_ICloneable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_ICloneable, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_ICloneable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_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_InterferenceFunctionTwin, _p_InterferenceFunctionTwinTo_p_ICloneable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_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_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_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_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_ICloneable, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_ICloneable, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_ICloneable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_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_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_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_IFTDistribution2D, _p_IFTDistribution2DTo_p_ICloneable, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction2DSuperLattice, _p_InterferenceFunction2DSuperLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunction3DLattice, _p_InterferenceFunction3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionFinite2DLattice, _p_InterferenceFunctionFinite2DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_InterferenceFunctionFinite3DLattice, _p_InterferenceFunctionFinite3DLatticeTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_ICloneable, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_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_ParameterDistribution[] = {{&_swigt__p_ParameterDistribution, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IComponent[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_IComponent, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_IComponent, 0, 0},  {&_swigt__p_ParameterDistribution, _p_ParameterDistributionTo_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_IComponent, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_IComponent, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_IComponent, 0, 0},  {&_swigt__p_INode, _p_INodeTo_p_IComponent, 0, 0},  {&_swigt__p_IBornFF, _p_IBornFFTo_p_IComponent, 0, 0},  {&_swigt__p_IPeakShape, _p_IPeakShapeTo_p_IComponent, 0, 0},  {&_swigt__p_IsotropicGaussPeakShape, _p_IsotropicGaussPeakShapeTo_p_IComponent, 0, 0},  {&_swigt__p_IsotropicLorentzPeakShape, _p_IsotropicLorentzPeakShapeTo_p_IComponent, 0, 0},  {&_swigt__p_GaussFisherPeakShape, _p_GaussFisherPeakShapeTo_p_IComponent, 0, 0},  {&_swigt__p_MisesGaussPeakShape, _p_MisesGaussPeakShapeTo_p_IComponent, 0, 0},  {&_swigt__p_MisesFisherGaussPeakShape, _p_MisesFisherGaussPeakShapeTo_p_IComponent, 0, 0},  {&_swigt__p_LorentzFisherPeakShape, _p_LorentzFisherPeakShapeTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IComponent, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IComponent, 0, 0},  {&_swigt__p_IFormFactorPolyhedron, _p_IFormFactorPolyhedronTo_p_IComponent, 0, 0},  {&_swigt__p_IFormFactorPrism, _p_IFormFactorPrismTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_IComponent, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_IComponent, 0, 0},  {&_swigt__p_IProfileRectangularRipple, _p_IProfileRectangularRippleTo_p_IComponent, 0, 0},  {&_swigt__p_ISawtoothRipple, _p_ISawtoothRippleTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IComponent, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunctionHardDisk, _p_InterferenceFunctionHardDiskTo_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_IComponent, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_IComponent, 0, 0},  {&_swigt__p_IdentityRotation, _p_IdentityRotationTo_p_IComponent, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_IComponent, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_IComponent, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorCantellatedCube, _p_FormFactorCantellatedCubeTo_p_IComponent, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_IComponent, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_IComponent, 0, 0},  {&_swigt__p_IComponent, 0, 0, 0},  {&_swigt__p_IParametricComponent, _p_IParametricComponentTo_p_IComponent, 0, 0},  {&_swigt__p_ISampleBuilder, _p_ISampleBuilderTo_p_IComponent, 0, 0},  {&_swigt__p_HexagonalLattice2D, _p_HexagonalLattice2DTo_p_IComponent, 0, 0},  {&_swigt__p_SquareLattice2D, _p_SquareLattice2DTo_p_IComponent, 0, 0},  {&_swigt__p_BasicLattice2D, _p_BasicLattice2DTo_p_IComponent, 0, 0},  {&_swigt__p_Lattice2D, _p_Lattice2DTo_p_IComponent, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_IComponent, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_IComponent, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_IComponent, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_IComponent, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleBox, _p_FormFactorSawtoothRippleBoxTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorCosineRippleBox, _p_FormFactorCosineRippleBoxTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunctionTwin, _p_InterferenceFunctionTwinTo_p_IComponent, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_IComponent, 0, 0},  {&_swigt__p_Material, _p_MaterialTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_IComponent, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleGauss, _p_FormFactorSawtoothRippleGaussTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorCosineRippleGauss, _p_FormFactorCosineRippleGaussTo_p_IComponent, 0, 0},  {&_swigt__p_ISampleNode, _p_ISampleNodeTo_p_IComponent, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_IComponent, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_IComponent, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_IComponent, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_IComponent, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorDot, _p_FormFactorDotTo_p_IComponent, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_IComponent, 0, 0},  {&_swigt__p_IProfileRipple, _p_IProfileRippleTo_p_IComponent, 0, 0},  {&_swigt__p_ICosineRipple, _p_ICosineRippleTo_p_IComponent, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_IComponent, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_IComponent, 0, 0},  {&_swigt__p_Lattice3D, _p_Lattice3DTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorHollowSphere, _p_FormFactorHollowSphereTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorGaussSphere, _p_FormFactorGaussSphereTo_p_IComponent, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_IComponent, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorCosineRippleLorentz, _p_FormFactorCosineRippleLorentzTo_p_IComponent, 0, 0},  {&_swigt__p_FormFactorSawtoothRippleLorentz, _p_FormFactorSawtoothRippleLorentzTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunction2DSuperLattice, _p_InterferenceFunction2DSuperLatticeTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunction3DLattice, _p_InterferenceFunction3DLatticeTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunctionFinite2DLattice, _p_InterferenceFunctionFinite2DLatticeTo_p_IComponent, 0, 0},  {&_swigt__p_InterferenceFunctionFinite3DLattice, _p_InterferenceFunctionFinite3DLatticeTo_p_IComponent, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_IComponent, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_IComponent, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_IComponent, 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}};
@@ -77976,7 +78041,6 @@ static swig_cast_info _swigc__p_MisesFisherGaussPeakShape[] = {  {&_swigt__p_Mis
 static swig_cast_info _swigc__p_MisesGaussPeakShape[] = {  {&_swigt__p_MisesGaussPeakShape, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_MultiLayer[] = {  {&_swigt__p_MultiLayer, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_NodeMeta[] = {  {&_swigt__p_NodeMeta, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_ParameterPool[] = {  {&_swigt__p_ParameterPool, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Particle[] = {  {&_swigt__p_Particle, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ParticleComposition[] = {  {&_swigt__p_ParticleComposition, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_ParticleCoreShell[] = {  {&_swigt__p_ParticleCoreShell, 0, 0, 0},{0, 0, 0, 0}};
@@ -78048,6 +78112,7 @@ static swig_cast_info _swigc__p_std__vectorT_double_std__allocatorT_double_t_t[]
 static swig_cast_info _swigc__p_std__vectorT_int_std__allocatorT_int_t_t[] = {  {&_swigt__p_std__vectorT_int_std__allocatorT_int_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t[] = {  {&_swigt__p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t[] = {  {&_swigt__p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t[] = {  {&_swigt__p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_std__string_std__allocatorT_std__string_t_t[] = {  {&_swigt__p_std__vectorT_std__string_std__allocatorT_std__string_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t[] = {  {&_swigt__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t[] = {  {&_swigt__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -78177,7 +78242,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_MultiLayer,
   _swigc__p_NodeMeta,
   _swigc__p_ParameterDistribution,
-  _swigc__p_ParameterPool,
   _swigc__p_Particle,
   _swigc__p_ParticleComposition,
   _swigc__p_ParticleCoreShell,
@@ -78249,6 +78313,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_std__vectorT_int_std__allocatorT_int_t_t,
   _swigc__p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t,
   _swigc__p_std__vectorT_std__pairT_double_double_t_std__allocatorT_std__pairT_double_double_t_t_t,
+  _swigc__p_std__vectorT_std__pairT_std__string_RealParameter_p_t_std__allocatorT_std__pairT_std__string_RealParameter_p_t_t_t,
   _swigc__p_std__vectorT_std__string_std__allocatorT_std__string_t_t,
   _swigc__p_std__vectorT_std__vectorT_double_std__allocatorT_double_t_t_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t_t,
   _swigc__p_std__vectorT_std__vectorT_int_std__allocatorT_int_t_t_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t_t,
diff --git a/auto/Wrap/libBornAgainSample_wrap.h b/auto/Wrap/libBornAgainSample_wrap.h
index 32e1b8a36f7ab09103e86c7be1ed75cd0af0d166..6eca822fdf67c24768686ab40bccd2bc189e0554 100644
--- a/auto/Wrap/libBornAgainSample_wrap.h
+++ b/auto/Wrap/libBornAgainSample_wrap.h
@@ -62,7 +62,7 @@ private:
       return method;
     }
 private:
-    mutable swig::SwigVar_PyObject vtable[9];
+    mutable swig::SwigVar_PyObject vtable[8];
 #endif
 
 };
@@ -129,7 +129,7 @@ private:
       return method;
     }
 private:
-    mutable swig::SwigVar_PyObject vtable[17];
+    mutable swig::SwigVar_PyObject vtable[16];
 #endif
 
 };
@@ -197,7 +197,7 @@ private:
       return method;
     }
 private:
-    mutable swig::SwigVar_PyObject vtable[18];
+    mutable swig::SwigVar_PyObject vtable[17];
 #endif
 
 };