diff --git a/Fit/Parameters/FitParameterSet.cpp b/Core/Fitting/FitParameterSet.cpp
similarity index 95%
rename from Fit/Parameters/FitParameterSet.cpp
rename to Core/Fitting/FitParameterSet.cpp
index 46d2b2226eacad3ee8a1152ae5f966e4b0f373a0..59799b46258c6b49866e695cf3abaf0ccf2a281d 100644
--- a/Fit/Parameters/FitParameterSet.cpp
+++ b/Core/Fitting/FitParameterSet.cpp
@@ -15,6 +15,7 @@
 #include "FitParameterSet.h"
 #include "IFitParameter.h"
 #include "MinimizerUtils.h"
+#include "Parameters.h"
 #include <cmath>
 #include <iostream>
 #include <sstream>
@@ -229,6 +230,18 @@ void FitParameterSet::setCorrelationMatrix(const FitParameterSet::corr_matrix_t&
     m_corr_matrix = matrix;
 }
 
+//! Refactoring temp: returns set of new fit parameters.
+
+Fit::Parameters FitParameterSet::fitParametersNewKernel() const
+{
+    Fit::Parameters result;
+
+    for (const auto par: m_parameters)
+        result.add(Fit::Parameter(par->name(), par->value(), par->limits(), par->step()));
+
+    return result;
+}
+
 //! Returns true if parameter with such name exists.
 
 bool FitParameterSet::isExistingName(const std::string& name) const
diff --git a/Fit/Parameters/FitParameterSet.h b/Core/Fitting/FitParameterSet.h
similarity index 96%
rename from Fit/Parameters/FitParameterSet.h
rename to Core/Fitting/FitParameterSet.h
index f42003dc7bedb9babc3e0c693d4f0f872771c89d..f1ad2188ec40134fad42a62f1e90b64536637d66 100644
--- a/Fit/Parameters/FitParameterSet.h
+++ b/Core/Fitting/FitParameterSet.h
@@ -19,6 +19,8 @@
 #include <vector>
 #include <string>
 
+namespace Fit { class Parameters; }
+
 class IFitParameter;
 
 //! The set of fit parameters.
@@ -71,6 +73,8 @@ class BA_CORE_API_ FitParameterSet
     corr_matrix_t correlationMatrix() const { return m_corr_matrix; }
     void setCorrelationMatrix(const corr_matrix_t& matrix);
 
+    Fit::Parameters fitParametersNewKernel() const;
+
 private:
     bool isExistingName(const std::string& name) const;
     std::string suggestParameterName() const;
diff --git a/Core/Fitting/FitSuite.cpp b/Core/Fitting/FitSuite.cpp
index 818303514554c3ad1b0a3f72921e3e9ed692d50f..63df8faafdb45d12492d90b37837c887b405a87a 100644
--- a/Core/Fitting/FitSuite.cpp
+++ b/Core/Fitting/FitSuite.cpp
@@ -14,7 +14,6 @@
 
 #include "FitSuite.h"
 #include "FitSuiteImpl.h"
-#include "FitKernel.h"
 #include "FitSuitePrintObserver.h"
 #include "IHistogram.h"
 #include "MinimizerFactory.h"
@@ -100,11 +99,17 @@ void FitSuite::setMinimizer(IMinimizer* minimizer)
     m_impl->setMinimizer(minimizer);
 }
 
-const IMinimizer *FitSuite::minimizer() const
+std::string FitSuite::minimizerName() const
 {
-    return m_impl->kernel()->minimizer();
+    // FIXME
+    return std::string("FIXME");
 }
 
+//const IMinimizer *FitSuite::minimizer() const
+//{
+//    return m_impl->kernel()->minimizer();
+//}
+
 void FitSuite::initPrint(int print_every_nth)
 {
     std::shared_ptr<FitSuitePrintObserver> observer(new FitSuitePrintObserver(print_every_nth));
diff --git a/Core/Fitting/FitSuite.h b/Core/Fitting/FitSuite.h
index 318f7b0cc164edb5da53bf3fccfb786c583efce4..a914fdcf2653522c6f5785e5e4b7806d7109091c 100644
--- a/Core/Fitting/FitSuite.h
+++ b/Core/Fitting/FitSuite.h
@@ -100,7 +100,8 @@ public:
     void setMinimizer(IMinimizer* minimizer);
 
     //! Returns minimizer.
-    const IMinimizer *minimizer() const;
+//    const IMinimizer *minimizer() const;
+    std::string minimizerName() const;
 
     //! Initializes printing to standard output during the fitting.
     //! Prints also the summary when completed.
diff --git a/Core/Fitting/FitSuiteFunctions.cpp b/Core/Fitting/FitSuiteFunctions.cpp
deleted file mode 100644
index 8144f612d0e6128fc330acaff338db8db9be4ca6..0000000000000000000000000000000000000000
--- a/Core/Fitting/FitSuiteFunctions.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Core/Fitting/FitSuiteFunctions.cpp
-//! @brief     Implements classes FitSuiteChiSquaredFunction and FitSuiteGradientFunction.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "FitSuiteFunctions.h"
-#include "FitSuiteImpl.h"
-#include <cassert>
-#include <iostream>
-#include <stdexcept>
-
-//! evaluate chi squared value
-double FitSuiteChiSquaredFunction::evaluate(const std::vector<double> &pars)
-{
-    assert(m_kernel != nullptr);
-    if (m_kernel->isInterrupted())
-        throw std::runtime_error("Fitting was interrupted by the user.");
-
-    m_kernel->fitParameters()->setValues(pars);
-    m_kernel->fitObjects()->runSimulations();
-    double chi_squared = m_kernel->fitObjects()->getChiSquaredValue();
-    m_kernel->notifyObservers();
-    m_ncall++;
-    return chi_squared;
-}
-
-//! evaluate residual and derivative for given data element
-// (calculations are done for all dataset when index==0, when index!=0 already
-// calculated data just returned
-double FitSuiteGradientFunction::evaluate(
-    const std::vector<double>& pars, unsigned int index, std::vector<double>& gradients)
-{
-    assert(m_kernel != nullptr);
-    if (m_kernel->isInterrupted())
-        throw std::runtime_error("Fitting was interrupted by the user.");
-
-    bool parameters_changed(true);
-    if(m_ncalls_total != 0)
-        parameters_changed = m_kernel->fitParameters()->valuesDifferFrom(pars, 2.);
-
-    verify_arrays();
-    verify_minimizer_logic(parameters_changed, (int)index);
-
-    if(parameters_changed)
-        calculate_residuals(pars);
-
-    if(gradients.size()) {
-        if(index == 0 || parameters_changed ) {
-            calculate_gradients(pars);
-            m_ncalls_gradient++;
-        }
-        for(size_t i_par=0; i_par<m_npars; ++i_par)
-            gradients[i_par] = m_gradients[i_par][index];
-    }
-
-    m_ncalls_total++;
-    if(index == 0 ) {
-        m_kernel->notifyObservers();
-        m_ncall++;
-    }
-    return m_residuals[index];
-}
-
-void FitSuiteGradientFunction::verify_arrays()
-{
-    if ( m_npars == m_kernel->fitParameters()->size() &&
-         m_ndatasize == m_kernel->fitObjects()->getSizeOfDataSet() )
-        return;
-    m_npars = m_kernel->fitParameters()->size();
-    m_ndatasize = m_kernel->fitObjects()->getSizeOfDataSet();
-    m_residuals.clear();
-    m_residuals.resize(m_ndatasize, 0.0);
-    m_gradients.clear();
-    m_gradients.resize(m_npars);
-    for(size_t i_par=0; i_par<m_npars; ++i_par)
-        m_gradients[i_par].resize(m_ndatasize, 0.0);
-}
-
-void FitSuiteGradientFunction::verify_minimizer_logic(
-    bool /*parameters_have_changed*/, int current_index)
-{
-    // FIXME: only outputs warnings; is it necessary and if so, prefer exceptions?
-//    int index_difference = current_index - m_prev_index;
-//    if(index_difference != 1 && (current_index!=0 && int(m_prev_index)!= int(m_ndatasize-1) ) ) {
-//        std::cout << "FitSuiteGradientFunction::verify_minimizer_logic() -> Warning! "
-//                  << "Non sequential access to elements.";
-//        std::cout << " current_index:" << current_index
-//                  << " prev_index:" << m_prev_index;
-//    }
-//    if(parameters_have_changed && current_index != 0) {
-//        std::cout << "FitSuiteGradientFunction::verify_minimizer_logic() -> Warning! "
-//                  << "Parameters have changed while current_index!=0";
-//        std::cout << " current_index:" << current_index
-//                  << " prev_index:" << m_prev_index;
-//    }
-//    if(parameters_have_changed && current_index == m_prev_index) {
-//        std::cout << "FitSuiteGradientFunction::verify_minimizer_logic() -> Warning! "
-//                  << "Parameters have changed while index remained the same";
-//        std::cout << " current_index:" << current_index
-//                  << " prev_index:" << m_prev_index;
-//    }
-    m_prev_index = current_index;
-}
-
-void FitSuiteGradientFunction::calculate_residuals(const std::vector<double>& pars)
-{
-    runSimulation(pars);
-    for(size_t i_data=0; i_data<m_ndatasize; ++i_data)
-        m_residuals[i_data] = m_kernel->fitObjects()->getResidualValue(i_data);
-}
-
-void FitSuiteGradientFunction::calculate_gradients(const std::vector<double>& pars)
-{
-    // FIXME get kEps from outside fit_suite->getMinimizer()->getPrecision();
-    const double kEps = 1.0E-9; // Good for Fumili
-    //const double kEps = 1.0E-5;
-    for(size_t i_par=0; i_par<m_npars; ++i_par ) {
-        std::vector<double > pars_deriv = pars; // values of parameters for derivative calculation
-        pars_deriv[i_par] += kEps;
-
-        runSimulation(pars_deriv);
-
-        std::vector<double> residuals2;
-        residuals2.resize(m_ndatasize);
-        for(size_t i_data=0; i_data<m_ndatasize; ++i_data)
-            residuals2[i_data] = m_kernel->fitObjects()->getResidualValue(i_data);
-        for(size_t i_data=0; i_data <m_ndatasize; ++i_data)
-            m_gradients[i_par][i_data] = (residuals2[i_data] - m_residuals[i_data])/kEps;
-    }
-    // returning back old parameters
-    m_kernel->fitParameters()->setValues(pars);
-    runSimulation(pars);
-}
-
-void FitSuiteGradientFunction::runSimulation(const std::vector<double> &pars){
-    assert(m_kernel);
-    m_kernel->fitParameters()->setValues(pars);
-    m_kernel->fitObjects()->runSimulations();
-}
diff --git a/Core/Fitting/FitSuiteFunctions.h b/Core/Fitting/FitSuiteFunctions.h
deleted file mode 100644
index 0e259708451d96000f9d471b25cd3fe6c15dd526..0000000000000000000000000000000000000000
--- a/Core/Fitting/FitSuiteFunctions.h
+++ /dev/null
@@ -1,88 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Core/Fitting/FitSuiteFunctions.h
-//! @brief     Defines classes IFitSuiteFunction,
-//!              FitSuiteChiSquaredFunction, FitSuiteGradientFunction
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef FITSUITEFUNCTIONS_H
-#define FITSUITEFUNCTIONS_H
-
-#include "WinDllMacros.h"
-#include <vector>
-#include <cstddef>
-
-class FitSuiteImpl;
-
-//! Fitting functions interface to be used by Minimizer.
-//! @ingroup fitting_internal
-
-class BA_CORE_API_ IFitSuiteFunction
-{
- public:
-    IFitSuiteFunction() : m_kernel(0), m_ncall(0) {}
-    virtual ~IFitSuiteFunction() {}
-    virtual void init(FitSuiteImpl* fit_suite) { m_kernel = fit_suite; }
-    virtual size_t getNCalls() const { return m_ncall; }
- protected:
-    FitSuiteImpl* m_kernel;
-    size_t m_ncall;
-};
-
-
-//! Chi squared fitting function for minimizer.
-//! @ingroup fitting_internal
-
-class BA_CORE_API_ FitSuiteChiSquaredFunction : public IFitSuiteFunction
-{
- public:
-    FitSuiteChiSquaredFunction() {}
-    virtual ~FitSuiteChiSquaredFunction() {}
-    //! evaluate method for chi2 value called directly from the minimizer
-    double evaluate(const std::vector<double>& pars);
-};
-
-
-//! Gradient fitting function for minimizer.
-//! @ingroup fitting_internal
-
-class BA_CORE_API_ FitSuiteGradientFunction : public IFitSuiteFunction
-{
- public:
-    FitSuiteGradientFunction()
-        : m_npars(0), m_ndatasize(0), m_prev_index(-1),
-          m_ncalls_total(0), m_ncalls_gradient(0) {}
-    virtual ~FitSuiteGradientFunction() {}
-
-    //! evaluate method for gradients and residuals called directly from the minimizer
-    double evaluate(const std::vector<double>& pars, unsigned int index,
-                    std::vector<double>& gradients);
-
-    virtual size_t getNCallsTotal() const { return m_ncalls_total; }
-    virtual size_t getNCallsGradient() const { return m_ncalls_gradient; }
-
- private:
-    void verify_arrays();
-    void verify_minimizer_logic(bool parameters_have_changed, int current_index);
-    void calculate_residuals(const std::vector<double>& pars);
-    void calculate_gradients(const std::vector<double>& pars);
-    void runSimulation(const std::vector<double>& pars);
-
-    size_t m_npars;
-    size_t m_ndatasize;
-    int m_prev_index;
-    std::vector<double> m_residuals; // [m_ndatasize]
-    std::vector<std::vector<double>> m_gradients; // [m_npars][m_ndatasize]
-    size_t m_ncalls_total;
-    size_t m_ncalls_gradient;
-};
-
-#endif // FITSUITEFUNCTIONS_H
diff --git a/Core/Fitting/FitSuiteImpl.cpp b/Core/Fitting/FitSuiteImpl.cpp
index 438f41f6cda9f4dccd63dd5d586080bf08b387d7..97d4f4691ec1e99b315c4d1fa4c6e772c568f39b 100644
--- a/Core/Fitting/FitSuiteImpl.cpp
+++ b/Core/Fitting/FitSuiteImpl.cpp
@@ -18,18 +18,20 @@
 #include "MinimizerFactory.h"
 #include "ParameterPool.h"
 #include "IMinimizer.h"
-#include "FitKernel.h"
 #include "FitSuiteUtils.h"
+#include "Minimizer.h"
+#include "MinimizerConstants.h"
 #include <stdexcept>
 
+
 FitSuiteImpl::FitSuiteImpl(const std::function<void()>& notifyObservers)
     : m_is_last_iteration(false)
     , m_is_interrupted(false)
     , m_notifyObservers(notifyObservers)
-    , m_kernel(new FitKernel)
+    , m_new_kernel(new Fit::Minimizer)
+    , m_iteration_count(0)
+    , m_is_gradient_based(false)
 {
-    m_function_chi2.init(this);
-    m_function_gradient.init(this);
     m_fit_strategies.init(this);
 }
 
@@ -42,7 +44,6 @@ FitSuiteImpl::~FitSuiteImpl()
 void FitSuiteImpl::clear()
 {
     m_fit_objects.clear();
-    m_kernel->clear();
     m_fit_strategies.clear();
     m_is_last_iteration = false;
     m_is_interrupted = false;
@@ -63,7 +64,7 @@ FitParameter* FitSuiteImpl::addFitParameter(const std::string& pattern, double v
         step = value * getOptions().stepFactor();
 
     FitParameter* result = new FitParameter(pattern, value, limits, step);
-    m_kernel->fitParameters()->addFitParameter(result);
+    fitParameters()->addFitParameter(result);
     return result;
 }
 
@@ -73,7 +74,7 @@ FitParameter* FitSuiteImpl::addFitParameter(const FitParameter& fitPar)
     if(result->step() <= 0.0)
         result->setStep(result->value() * getOptions().stepFactor());
 
-    m_kernel->fitParameters()->addFitParameter(result);
+    fitParameters()->addFitParameter(result);
     return result;
 }
 
@@ -84,7 +85,13 @@ void FitSuiteImpl::addFitStrategy(const IFitStrategy& strategy)
 
 void FitSuiteImpl::setMinimizer(IMinimizer* minimizer)
 {
-    m_kernel->setMinimizer(minimizer);
+    if (minimizer->algorithmName() == AlgorithmNames::Fumili)
+        m_is_gradient_based = true;
+
+    if (minimizer->minimizerName() == MinimizerNames::GSLLMA)
+        m_is_gradient_based = true;
+
+    m_new_kernel->setMinimizer(minimizer);
 }
 
 void FitSuiteImpl::runFit()
@@ -107,37 +114,33 @@ void FitSuiteImpl::runFit()
 
 void FitSuiteImpl::minimize()
 {
-    objective_function_t fun_chi2 =
-        [&] (const std::vector<double>& pars) {return m_function_chi2.evaluate(pars);};
-    m_kernel->setObjectiveFunction( fun_chi2);
+    fcn_scalar_t scalar_fcn =
+        [&] (const Fit::Parameters& pars) {return scalar_func_new_kernel(pars);};
 
-    gradient_function_t fun_gradient =
-        [&] (const std::vector<double>& pars, int index, std::vector<double> &gradients)
-        {
-            return m_function_gradient.evaluate(pars, index, gradients);
-        };
-    m_kernel->setGradientFunction(
-        fun_gradient, static_cast<int>(m_fit_objects.getSizeOfDataSet()) );
+    fcn_residual_t residual_fcn =
+            [&] (const Fit::Parameters& pars) {return residual_func_new_kernel(pars);};
 
     m_fit_objects.setNfreeParameters((int)fitParameters()->freeFitParameterCount());
 
-    // minimize
-    try {
-//        m_minimizer->minimize();
-        m_kernel->minimize();
-    } catch (int) {}
+    Fit::Parameters pars = fitParameters()->fitParametersNewKernel();
 
-    m_fit_objects.runSimulations(); // we run simulation once again for best values found
+    if (m_is_gradient_based)
+        m_minimizerResult = m_new_kernel->minimize(residual_fcn, pars);
+    else
+        m_minimizerResult = m_new_kernel->minimize(scalar_fcn, pars);
+
+    m_fit_parameters.setValues(m_minimizerResult.parameters().values());
 }
 
+
 FitParameterSet* FitSuiteImpl::fitParameters() {
-    return m_kernel->fitParameters();
+    return &m_fit_parameters;
 }
 
 // get current number of minimization function calls
 size_t FitSuiteImpl::numberOfIterations() const
 {
-    return m_kernel->functionCalls();
+    return m_iteration_count;
 }
 
 size_t FitSuiteImpl::currentStrategyIndex() const
@@ -147,12 +150,7 @@ size_t FitSuiteImpl::currentStrategyIndex() const
 
 std::string FitSuiteImpl::reportResults() const
 {
-    return m_kernel->reportResults();
-}
-
-const FitKernel* FitSuiteImpl::kernel() const
-{
-    return m_kernel.get();
+    return m_minimizerResult.toString();
 }
 
 // method is not const because we have to link fit parameters with the sample,
@@ -162,7 +160,7 @@ std::string FitSuiteImpl::setupToString()
     check_prerequisites();
     link_fit_parameters();
     std::stringstream result;
-    result << FitSuiteUtils::fitParameterSettingsToString(*m_kernel->fitParameters());
+    result << FitSuiteUtils::fitParameterSettingsToString(*fitParameters());
     return result.str();
 }
 
@@ -180,7 +178,7 @@ bool FitSuiteImpl::check_prerequisites() const
 void FitSuiteImpl::link_fit_parameters()
 {
     std::unique_ptr<ParameterPool> pool(m_fit_objects.createParameterTree());
-    auto parameters = FitSuiteUtils::linkedParameters(*m_kernel->fitParameters());
+    auto parameters = FitSuiteUtils::linkedParameters(*fitParameters());
 
     if(parameters.empty())
         throw Exceptions::RuntimeErrorException("No fit Parameters defined.");
@@ -188,13 +186,42 @@ void FitSuiteImpl::link_fit_parameters()
     for (auto par: parameters)
         par->addMatchedParameters(*pool);
 
-    if(FitSuiteUtils::hasConflicts(*m_kernel->fitParameters())) {
+    if(FitSuiteUtils::hasConflicts(*fitParameters())) {
         std::ostringstream message;
         message << "FitSuite::runFit() -> Error. Fit parameters are conflicting with each other, "
                 << "meaning that one sample parameter can be controlled by "
                 << "two different fit parameters.\n";
-        message << FitSuiteUtils::fitParameterSettingsToString(*m_kernel->fitParameters());
+        message << FitSuiteUtils::fitParameterSettingsToString(*fitParameters());
         throw Exceptions::RuntimeErrorException(message.str());
     }
 
 }
+
+//! Refactoring temp: new minimizer's objective functions.
+
+double FitSuiteImpl::scalar_func_new_kernel(const Fit::Parameters& fit_pars)
+{
+    if (isInterrupted())
+        throw std::runtime_error("Fitting was interrupted by the user.");
+
+    ++m_iteration_count;
+    fitParameters()->setValues(fit_pars.values());
+    fitObjects()->runSimulations();
+    double chi_squared = fitObjects()->getChiSquaredValue();
+    notifyObservers();
+    return chi_squared;
+}
+
+std::vector<double> FitSuiteImpl::residual_func_new_kernel(const Fit::Parameters& fit_pars)
+{
+    if (isInterrupted())
+        throw std::runtime_error("Fitting was interrupted by the user.");
+
+    ++m_iteration_count;
+
+    fitParameters()->setValues(fit_pars.values());
+    fitObjects()->runSimulations();
+    notifyObservers();
+
+    return fitObjects()->residuals();
+}
diff --git a/Core/Fitting/FitSuiteImpl.h b/Core/Fitting/FitSuiteImpl.h
index 49d698313266407ff734d68870d4e2073ad1a64e..9b8aa80a4b4a41782d38ab2309de9ddd08470c0d 100644
--- a/Core/Fitting/FitSuiteImpl.h
+++ b/Core/Fitting/FitSuiteImpl.h
@@ -16,10 +16,12 @@
 #define FITSUITEIMPL_H
 
 #include "FitOptions.h"
-#include "FitSuiteFunctions.h"
 #include "FitSuiteObjects.h"
 #include "FitParameterSet.h"
 #include "FitSuiteStrategies.h"
+#include "KernelTypes.h"
+#include "Parameters.h"
+#include "MinimizerResult.h"
 #include <functional>
 #ifndef SWIG
 #include <atomic>
@@ -28,9 +30,10 @@
 class AttLimits;
 class Simulation;
 class IMinimizer;
-class FitKernel;
 class FitParameter;
 
+namespace Fit { class Minimizer; }
+
 //! Fitting kernel for FitSuite.
 //! @ingroup fitting_internal
 
@@ -103,8 +106,6 @@ class BA_CORE_API_ FitSuiteImpl
     void resetInterrupt() { m_is_interrupted = false; }
     bool isInterrupted() const { return m_is_interrupted; }
 
-    const FitKernel* kernel() const;
-
     //! Returns multiline string representing fit setup
     std::string setupToString();
 
@@ -112,17 +113,23 @@ private:
     bool check_prerequisites() const;
     void link_fit_parameters();
 
+    double scalar_func_new_kernel(const Fit::Parameters& fit_pars);
+    std::vector<double> residual_func_new_kernel(const Fit::Parameters& fit_pars);
+
     FitOptions m_fit_options;
     FitSuiteObjects m_fit_objects;
     FitSuiteStrategies m_fit_strategies;
-    FitSuiteChiSquaredFunction m_function_chi2;
-    FitSuiteGradientFunction m_function_gradient;
     bool m_is_last_iteration;
 #ifndef SWIG
     std::atomic<bool> m_is_interrupted;
 #endif
     std::function<void()> m_notifyObservers;
-    std::unique_ptr<FitKernel> m_kernel;
+    std::unique_ptr<Fit::Minimizer> m_new_kernel;
+    size_t m_iteration_count;
+    Fit::MinimizerResult m_minimizerResult;
+    FitParameterSet m_fit_parameters;
+    bool m_is_gradient_based;
+
 };
 
 #endif // FITSUITEIMPL_H
diff --git a/Core/Fitting/FitSuiteObjects.cpp b/Core/Fitting/FitSuiteObjects.cpp
index 264aedcfaf6eb5ab8539e43908b99fcc57a5188a..ffe803df94d780dbe596fbf7b365a78cc74d76c1 100644
--- a/Core/Fitting/FitSuiteObjects.cpp
+++ b/Core/Fitting/FitSuiteObjects.cpp
@@ -109,6 +109,19 @@ double FitSuiteObjects::getResidualValue(size_t global_index)
     return m_fit_elements[global_index].getResidual();
 }
 
+std::vector<double> FitSuiteObjects::residuals() const
+{
+    std::vector<double> result;
+    result.resize(m_fit_elements.size());
+    size_t index(0);
+    for(const auto& element: m_fit_elements) {
+        result[index] = element.getResidual();
+        ++index;
+    }
+
+    return result;
+}
+
 void FitSuiteObjects::clear()
 {
     m_fit_objects.clear();
diff --git a/Core/Fitting/FitSuiteObjects.h b/Core/Fitting/FitSuiteObjects.h
index 8541998444ba6de719d785905a90a4dc5c40821d..5b476d2a3c7b3a20ed716f109397bd745bc5bb09 100644
--- a/Core/Fitting/FitSuiteObjects.h
+++ b/Core/Fitting/FitSuiteObjects.h
@@ -66,6 +66,8 @@ public:
     //! @param global_index index across all element in FitElement vector
     double getResidualValue(size_t global_index);
 
+    std::vector<double> residuals() const;
+
     void setNfreeParameters(int nfree_parameters) { m_nfree_parameters = nfree_parameters; }
 
     //! clear all data
diff --git a/Fit/Parameters/IFitParameter.cpp b/Core/Fitting/IFitParameter.cpp
similarity index 100%
rename from Fit/Parameters/IFitParameter.cpp
rename to Core/Fitting/IFitParameter.cpp
diff --git a/Fit/Parameters/IFitParameter.h b/Core/Fitting/IFitParameter.h
similarity index 100%
rename from Fit/Parameters/IFitParameter.h
rename to Core/Fitting/IFitParameter.h
diff --git a/Fit/CMakeLists.txt b/Fit/CMakeLists.txt
index a8dd56af4688e06e4fbd89998742c2e8bb657061..29cb9a1a55cd176fd14cc0d1f896d68a77ed48a5 100644
--- a/Fit/CMakeLists.txt
+++ b/Fit/CMakeLists.txt
@@ -10,7 +10,6 @@ endif()
 
 # --- source and include files ------
 set(FIT_SOURCE_DIRS
-    ${CMAKE_CURRENT_SOURCE_DIR}/NewKernel
     ${CMAKE_CURRENT_SOURCE_DIR}/Kernel
     ${CMAKE_CURRENT_SOURCE_DIR}/Minimizer
     ${CMAKE_CURRENT_SOURCE_DIR}/Options
diff --git a/Fit/Kernel/FitKernel.cpp b/Fit/Kernel/FitKernel.cpp
deleted file mode 100644
index d47641532c4033dd0c1d5408810add38a7a9ffbc..0000000000000000000000000000000000000000
--- a/Fit/Kernel/FitKernel.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Fit/Kernel/FitKernel.cpp
-//! @brief     Implements class FitKernel.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "FitKernel.h"
-#include "FitKernelImpl.h"
-#include "MinimizerFactory.h"
-#include "IFitParameter.h"
-
-namespace {
-    const std::string default_minimizer = "Minuit2";
-    const std::string default_algorithm = "Migrad";
-}
-
-FitKernel::FitKernel()
-    : m_impl(new FitKernelImpl)
-{
-    setMinimizer(default_minimizer, default_algorithm);
-}
-
-FitKernel::~FitKernel() {}
-
-void FitKernel::clear()
-{
-    m_impl->clear();
-}
-
-//! Sets minimizer with given name and algorithm type.
-//! @param minimizerName The name of the minimizer
-//! @param algorithmName Optional name of the minimizer's algorithm
-void FitKernel::setMinimizer(const std::string& minimizerName, const std::string& algorithmName)
-{
-    m_impl->setMinimizer(MinimizerFactory::createMinimizer(minimizerName, algorithmName));
-}
-
-void FitKernel::setMinimizer(IMinimizer* minimizer)
-{
-    if(!minimizer)
-        throw std::runtime_error("FitKernel::setMinimizer() -> Error. Nullptr minimizer");
-
-    m_impl->setMinimizer(minimizer);
-}
-
-//! Returns the minimizer.
-const IMinimizer* FitKernel::minimizer() const
-{
-    return m_impl->minimizer();
-}
-
-//! Adds fit parameter
-void FitKernel::addFitParameter(
-    const std::string& name, double value, const AttLimits& limits, double step)
-{
-    if(step <= 0.0)
-        throw std::runtime_error("FitKernel::addFitParameter() -> Error. Step can't be <= 0.0.");
-
-    m_impl->addFitParameter(new IFitParameter(name, value, limits, step));
-}
-
-
-void FitKernel::setObjectiveFunction(objective_function_t func)
-{
-    m_impl->setObjectiveFunction(func);
-}
-
-void FitKernel::setGradientFunction(gradient_function_t func, int ndatasize)
-{
-    m_impl->setGradientFunction(func, ndatasize);
-}
-
-void FitKernel::minimize()
-{
-    m_impl->minimize();
-}
-
-//! Returns multi-line string to report results of minimization.
-std::string FitKernel::reportResults() const
-{
-    return m_impl->reportResults();
-}
-
-FitParameterSet* FitKernel::fitParameters()
-{
-    return const_cast<FitParameterSet*>(static_cast<const FitKernel*>(this)->fitParameters());
-}
-
-const FitParameterSet* FitKernel::fitParameters() const
-{
-    return m_impl->fitParameters();
-}
-
-//! Returns number of objective function calls.
-int FitKernel::functionCalls() const
-{
-    return m_impl->functionCalls();
-}
diff --git a/Fit/Kernel/FitKernel.h b/Fit/Kernel/FitKernel.h
deleted file mode 100644
index fb7090e47dd8c7188b178c4682f6420d4a19d4c5..0000000000000000000000000000000000000000
--- a/Fit/Kernel/FitKernel.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Fit/Kernel/FitKernel.h
-//! @brief     Defines class FitKernel.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef FITKERNEL_H
-#define FITKERNEL_H
-
-#include "WinDllMacros.h"
-#include "KernelTypes.h"
-#include <memory>
-#include <string>
-
-class FitKernelImpl;
-class AttLimits;
-class FitParameterSet;
-class IMinimizer;
-
-//! Main class to setup and run a minimization. Implemented in pimpl idiom.
-//! @ingroup fitting_internal
-
-class BA_CORE_API_ FitKernel
-{
-public:
-    FitKernel();
-    ~FitKernel();
-
-    void clear();
-
-    void setMinimizer(const std::string& minimizerName, const std::string& algorithmName = "");
-    void setMinimizer(IMinimizer* minimizer);
-
-    const IMinimizer* minimizer() const;
-
-    void addFitParameter(
-        const std::string& name, double value, const AttLimits& limits, double step);
-
-    void setObjectiveFunction(objective_function_t func);
-
-    void setGradientFunction(gradient_function_t func, int ndatasize);
-
-    void minimize();
-
-    //! Returns multi-line string to report results of minimization.
-    std::string reportResults() const;
-
-    FitParameterSet* fitParameters();
-    const FitParameterSet* fitParameters() const;
-
-    //! Returns number of objective function calls.
-    int functionCalls() const;
-
-private:
-    std::unique_ptr<FitKernelImpl> m_impl; //!< Pointer to implementation.
-};
-
-#endif // FITKERNEL_H
diff --git a/Fit/Kernel/FitKernelImpl.cpp b/Fit/Kernel/FitKernelImpl.cpp
deleted file mode 100644
index 8268c5f98154f09f057e4beaa287f4f7f0f3a85d..0000000000000000000000000000000000000000
--- a/Fit/Kernel/FitKernelImpl.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Fit/Kernel/FitKernelImpl.cpp
-//! @brief     Declares class FitKernelImpl.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "FitKernelImpl.h"
-#include "IMinimizer.h"
-#include "MinimizerResultsHelper.h"
-#include "MinimizerUtils.h"
-#include <sstream>
-
-FitKernelImpl::FitKernelImpl() {}
-
-FitKernelImpl::~FitKernelImpl() {}
-
-void FitKernelImpl::clear()
-{
-    m_fit_parameters.clear();
-    m_minimizer.reset();
-}
-
-void FitKernelImpl::setMinimizer(IMinimizer* minimizer)
-{
-    m_minimizer.reset(minimizer);
-}
-
-void FitKernelImpl::addFitParameter(IFitParameter* par)
-{
-    m_fit_parameters.addFitParameter(par);
-}
-
-void FitKernelImpl::setObjectiveFunction(objective_function_t func)
-{
-    m_objective_function.setObjectiveFunction(func);
-}
-
-void FitKernelImpl::setGradientFunction(gradient_function_t func, int ndatasize)
-{
-    m_objective_function.setGradientFunction(func, ndatasize);
-}
-
-void FitKernelImpl::minimize()
-{
-    if(!m_minimizer)
-        throw std::runtime_error("FitKernelImpl::minimize() -> Error. Minimizer is not defined.");
-
-    if(m_fit_parameters.size() == 0)
-        return;
-
-    m_time_interval.start();
-
-    objective_function_t func =
-        [&](const std::vector<double> &pars) { return m_objective_function.evaluate(pars); };
-    m_minimizer->setObjectiveFunction(func);
-
-    gradient_function_t gradient_func =
-        [&](const std::vector<double>& pars, int index, std::vector<double>& gradients)
-    {
-        return m_objective_function.evaluate_gradient(pars, index, gradients);
-    };
-    m_minimizer->setGradientFunction(gradient_func, m_objective_function.sizeOfData());
-
-    m_minimizer->setParameters(m_fit_parameters);
-
-    m_minimizer->minimize();
-
-    // set found values to the parameters
-    m_minimizer->propagateResults(m_fit_parameters);
-
-    m_time_interval.stop();
-}
-
-std::string FitKernelImpl::reportResults() const
-{
-    std::ostringstream result;
-    result << std::endl;
-    result << MinimizerUtils::sectionString("FitSuite::printResults");
-    result << "functionCalls: " << m_objective_function.functionCalls()
-           << " (" << m_time_interval.runTime() << " sec total)" << "\n";
-    result << m_minimizer->reportOutcome();
-    result << MinimizerResultsHelper().reportParameters(&m_fit_parameters);
-    return result.str();
-}
-
-FitParameterSet* FitKernelImpl::fitParameters()
-{
-    return &m_fit_parameters;
-}
-
-IMinimizer* FitKernelImpl::minimizer()
-{
-    return m_minimizer.get();
-}
-
-int FitKernelImpl::functionCalls() const
-{
-    return m_objective_function.functionCalls();
-}
diff --git a/Fit/Kernel/FitKernelImpl.h b/Fit/Kernel/FitKernelImpl.h
deleted file mode 100644
index 88392f918429ed3ac47fb0413cc7f2291a212bfa..0000000000000000000000000000000000000000
--- a/Fit/Kernel/FitKernelImpl.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Fit/Kernel/FitKernelImpl.h
-//! @brief     Defines class FitKernelImpl.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef FITKERNELIMPL_H
-#define FITKERNELIMPL_H
-
-#include "WinDllMacros.h"
-#include "KernelTypes.h"
-#include "FitParameterSet.h"
-#include "ObjectiveFunction.h"
-#include "TimeInterval.h"
-#include <memory>
-
-class IMinimizer;
-class IFitParameter;
-
-//! The implementation of class FitKernel.
-//! @ingroup fitting_internal
-
-class BA_CORE_API_ FitKernelImpl
-{
-public:
-    FitKernelImpl();
-    ~FitKernelImpl();
-
-    void clear();
-
-    //! Sets minimizer
-    void setMinimizer(IMinimizer* minimizer);
-
-    //! Adds fit parameter
-    void addFitParameter(IFitParameter* par);
-
-    void setObjectiveFunction(objective_function_t func);
-
-    void setGradientFunction(gradient_function_t func, int ndatasize);
-
-    void minimize();
-
-    //! Reports results of minimization in the form of multi-line string.
-    std::string reportResults() const;
-
-    FitParameterSet* fitParameters();
-
-    IMinimizer* minimizer();
-
-    //! Number of objective function calls.
-    int functionCalls() const;
-
-private:
-    FitParameterSet m_fit_parameters;
-    std::unique_ptr<IMinimizer> m_minimizer;
-    ObjectiveFunction m_objective_function;
-    TimeInterval m_time_interval;
-};
-
-#endif // FITKERNELIMPL_H
diff --git a/Fit/NewKernel/IFunctionAdapter.cpp b/Fit/Kernel/IFunctionAdapter.cpp
similarity index 100%
rename from Fit/NewKernel/IFunctionAdapter.cpp
rename to Fit/Kernel/IFunctionAdapter.cpp
diff --git a/Fit/NewKernel/IFunctionAdapter.h b/Fit/Kernel/IFunctionAdapter.h
similarity index 100%
rename from Fit/NewKernel/IFunctionAdapter.h
rename to Fit/Kernel/IFunctionAdapter.h
diff --git a/Fit/NewKernel/Kernel.cpp b/Fit/Kernel/Kernel.cpp
similarity index 95%
rename from Fit/NewKernel/Kernel.cpp
rename to Fit/Kernel/Kernel.cpp
index 4a467cb557835e3155630b3f9062f25040c331e1..32dc53f5275cf4a77dbd226c9f07426c3bd27299 100644
--- a/Fit/NewKernel/Kernel.cpp
+++ b/Fit/Kernel/Kernel.cpp
@@ -36,6 +36,11 @@ void Kernel::setMinimizer(const std::string& minimizerName, const std::string& a
     m_minimizer.reset(MinimizerFactory::createMinimizer(minimizerName, algorithmName, options));
 }
 
+void Kernel::setMinimizer(IMinimizer* minimizer)
+{
+    m_minimizer.reset(minimizer);
+}
+
 MinimizerResult Kernel::minimize(fcn_scalar_t fcn, const Parameters& parameters)
 {
     setParameters(parameters);
diff --git a/Fit/NewKernel/Kernel.h b/Fit/Kernel/Kernel.h
similarity index 96%
rename from Fit/NewKernel/Kernel.h
rename to Fit/Kernel/Kernel.h
index 03af0819a978a908dd8d53404567fbaff7da8370..8573905afd827ec3f2517e57782a1eb0558bee76 100644
--- a/Fit/NewKernel/Kernel.h
+++ b/Fit/Kernel/Kernel.h
@@ -40,6 +40,8 @@ public:
     void setMinimizer(const std::string& minimizerName, const std::string& algorithmName = "",
                       const std::string& options = "");
 
+    void setMinimizer(IMinimizer* minimizer);
+
     MinimizerResult minimize(fcn_scalar_t fcn, const Parameters& parameters);
     MinimizerResult minimize(fcn_residual_t fcn, const Parameters& parameters);
 
diff --git a/Fit/NewKernel/Minimizer.cpp b/Fit/Kernel/Minimizer.cpp
similarity index 95%
rename from Fit/NewKernel/Minimizer.cpp
rename to Fit/Kernel/Minimizer.cpp
index 404102197b5f6c256572331028fcce11b7eb8e9f..e3636fe9a98c2045f2a3b1c8c0d827cacbdac826 100644
--- a/Fit/NewKernel/Minimizer.cpp
+++ b/Fit/Kernel/Minimizer.cpp
@@ -30,6 +30,11 @@ void Minimizer::setMinimizer(const std::string& minimizerName, const std::string
     m_kernel->setMinimizer(minimizerName, algorithmName, options);
 }
 
+void Minimizer::setMinimizer(IMinimizer* minimizer)
+{
+    m_kernel->setMinimizer(minimizer);
+}
+
 Minimizer::~Minimizer() = default;
 
 MinimizerResult Minimizer::minimize(fcn_scalar_t fcn, const Parameters& parameters)
diff --git a/Fit/NewKernel/Minimizer.h b/Fit/Kernel/Minimizer.h
similarity index 95%
rename from Fit/NewKernel/Minimizer.h
rename to Fit/Kernel/Minimizer.h
index a97e2abfc184574c48e286a4bc6b8ae09f0b1a10..f131f07b677365659757c93e4a0ae13d05185e7b 100644
--- a/Fit/NewKernel/Minimizer.h
+++ b/Fit/Kernel/Minimizer.h
@@ -25,6 +25,7 @@
 #include <memory>
 
 class PyCallback;
+class IMinimizer;
 
 namespace Fit {
 
@@ -42,6 +43,8 @@ public:
     void setMinimizer(const std::string& minimizerName, const std::string& algorithmName = "",
                       const std::string& options = "");
 
+    void setMinimizer(IMinimizer* minimizer);
+
 #ifndef SWIG
     MinimizerResult minimize(fcn_scalar_t fcn, const Parameters& parameters);
 
diff --git a/Fit/NewKernel/MinimizerResult.cpp b/Fit/Kernel/MinimizerResult.cpp
similarity index 100%
rename from Fit/NewKernel/MinimizerResult.cpp
rename to Fit/Kernel/MinimizerResult.cpp
diff --git a/Fit/NewKernel/MinimizerResult.h b/Fit/Kernel/MinimizerResult.h
similarity index 100%
rename from Fit/NewKernel/MinimizerResult.h
rename to Fit/Kernel/MinimizerResult.h
diff --git a/Fit/Kernel/ObjectiveFunction.cpp b/Fit/Kernel/ObjectiveFunction.cpp
deleted file mode 100644
index 0b20ff82be34b83b2f7e97cda69663b0688c3938..0000000000000000000000000000000000000000
--- a/Fit/Kernel/ObjectiveFunction.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Fit/Kernel/ObjectiveFunction.cpp
-//! @brief     Declares class ObjectiveFunction
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "ObjectiveFunction.h"
-#include <stdexcept>
-
-ObjectiveFunction::ObjectiveFunction()
-    : m_ncalls(0)
-    , m_ndatasize(0)
-{
-
-}
-
-void ObjectiveFunction::setObjectiveFunction(objective_function_t func)
-{
-    m_objective_function = func;
-}
-
-void ObjectiveFunction::setGradientFunction(gradient_function_t func, int ndatasize)
-{
-    m_gradient_function = func;
-    m_ndatasize = ndatasize;
-}
-
-//! Evaluates the value of the function for given vector of function parameters using
-//! callback mechanism.
-
-double ObjectiveFunction::evaluate(const std::vector<double> &pars)
-{
-    if(!m_objective_function)
-        throw std::runtime_error("ObjectiveFunction::evaluate() -> Error. "
-                                 "Objective function is not set");
-
-    double result = m_objective_function(pars);
-    ++m_ncalls;
-    return result;
-}
-
-//! Evaluates residual and gradients of the function for given vector of function parameters
-//! and index of dataelement using callback mechanism.
-
-double ObjectiveFunction::evaluate_gradient(const std::vector<double>& pars, int index,
-                                            std::vector<double> &gradient)
-{
-    if(!m_gradient_function)
-        throw std::runtime_error("ObjectiveFunction::evaluate() -> Error. "
-                                 "Gradient function is not set");
-
-    double result = m_gradient_function(pars, index, gradient);
-
-    if(index == 0)
-        ++m_ncalls;
-
-    return result;
-}
diff --git a/Fit/Kernel/ObjectiveFunction.h b/Fit/Kernel/ObjectiveFunction.h
deleted file mode 100644
index 6bb24ed21066433d42afc30878f2c11759447839..0000000000000000000000000000000000000000
--- a/Fit/Kernel/ObjectiveFunction.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Fit/Kernel/ObjectiveFunction.h
-//! @brief     Declares class ObjectiveFunction
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef OBJECTIVEFUNCTION_H
-#define OBJECTIVEFUNCTION_H
-
-#include "WinDllMacros.h"
-#include "KernelTypes.h"
-
-//! Information about an objective function, i.e. a function that shall be minimized.
-//! @ingroup fitting_internal
-
-class BA_CORE_API_ ObjectiveFunction
-{
-public:
-    ObjectiveFunction();
-
-    void setObjectiveFunction(objective_function_t func);
-    void setGradientFunction(gradient_function_t func, int ndatasize);
-
-    double evaluate(const std::vector<double>& pars);
-
-    double evaluate_gradient(const std::vector<double>& pars, int index,
-                             std::vector<double> &gradient);
-
-    int functionCalls() const { return m_ncalls; }
-
-    int sizeOfData() const { return m_ndatasize; }
-
-private:
-    objective_function_t m_objective_function;
-    gradient_function_t m_gradient_function;
-    int m_ncalls;
-    int m_ndatasize;
-};
-
-#endif // OBJECTIVEFUNCTION_H
diff --git a/Fit/NewKernel/ObjectiveFunctionAdapter.cpp b/Fit/Kernel/ObjectiveFunctionAdapter.cpp
similarity index 90%
rename from Fit/NewKernel/ObjectiveFunctionAdapter.cpp
rename to Fit/Kernel/ObjectiveFunctionAdapter.cpp
index b41c4e8750212af240e3ca9cc396b6a6ab0cb5b2..e16254922ba110b3e2031f292e9646c38c9234f4 100644
--- a/Fit/NewKernel/ObjectiveFunctionAdapter.cpp
+++ b/Fit/Kernel/ObjectiveFunctionAdapter.cpp
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Fit/RootAdapter/RootObjectiveFuncAdapter.cpp
-//! @brief     Implements class RootObjectiveFunctionAdapter.
+//! @file      Fit/RootAdapter/ObjectiveFunctionAdapter.cpp
+//! @brief     Implements class ObjectiveFunctionAdapter.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -14,7 +14,7 @@
 
 #include "ObjectiveFunctionAdapter.h"
 #include "ResidualFunctionAdapter.h"
-#include "RootMinimizerFunctions.h"
+#include "RootScalarFunction.h"
 #include "RootResidualFunction.h"
 #include "ScalarFunctionAdapter.h"
 
@@ -24,7 +24,7 @@ ObjectiveFunctionAdapter::ObjectiveFunctionAdapter() = default;
 
 ObjectiveFunctionAdapter::~ObjectiveFunctionAdapter() = default;
 
-const RootObjectiveFunction*
+const RootScalarFunction*
 ObjectiveFunctionAdapter::rootObjectiveFunction(fcn_scalar_t fcn, const Parameters& parameters)
 {
     std::unique_ptr<ScalarFunctionAdapter> temp_adapter(new ScalarFunctionAdapter(fcn, parameters));
diff --git a/Fit/NewKernel/ObjectiveFunctionAdapter.h b/Fit/Kernel/ObjectiveFunctionAdapter.h
similarity index 86%
rename from Fit/NewKernel/ObjectiveFunctionAdapter.h
rename to Fit/Kernel/ObjectiveFunctionAdapter.h
index 5806ba3f8f259fc09e94c5dcc2032a3c859326f7..044ed2426fbec2eebe44ef1d52af691217d72362 100644
--- a/Fit/NewKernel/ObjectiveFunctionAdapter.h
+++ b/Fit/Kernel/ObjectiveFunctionAdapter.h
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Fit/RootAdapter/RootObjectiveFuncAdapter.h
-//! @brief     Declares class RootObjectiveFunctionAdapter.
+//! @file      Fit/RootAdapter/ObjectiveFunctionAdapter.h
+//! @brief     Declares class ObjectiveFunctionAdapter.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -19,7 +19,7 @@
 #include "KernelTypes.h"
 #include <memory>
 
-class RootObjectiveFunction;
+class RootScalarFunction;
 class RootResidualFunction;
 
 namespace Fit {
@@ -35,7 +35,7 @@ public:
     ObjectiveFunctionAdapter();
     ~ObjectiveFunctionAdapter();
 
-    const RootObjectiveFunction* rootObjectiveFunction(fcn_scalar_t fcn,
+    const RootScalarFunction* rootObjectiveFunction(fcn_scalar_t fcn,
                                                        const Parameters& parameters);
 
     const RootResidualFunction* rootResidualFunction(fcn_residual_t fcn,
diff --git a/Fit/NewKernel/Parameter.cpp b/Fit/Kernel/Parameter.cpp
similarity index 100%
rename from Fit/NewKernel/Parameter.cpp
rename to Fit/Kernel/Parameter.cpp
diff --git a/Fit/NewKernel/Parameter.h b/Fit/Kernel/Parameter.h
similarity index 100%
rename from Fit/NewKernel/Parameter.h
rename to Fit/Kernel/Parameter.h
diff --git a/Fit/NewKernel/Parameters.cpp b/Fit/Kernel/Parameters.cpp
similarity index 90%
rename from Fit/NewKernel/Parameters.cpp
rename to Fit/Kernel/Parameters.cpp
index 7c262556543c5fffd8fcd6a3813f026c0cb3bcea..d935d63810760b535b984d465665e7318971cf14 100644
--- a/Fit/NewKernel/Parameters.cpp
+++ b/Fit/Kernel/Parameters.cpp
@@ -113,6 +113,19 @@ const Parameter& Parameters::operator[](size_t index) const
     return m_parameters[check_index(index)];
 }
 
+Parameters::corr_matrix_t Parameters::correlationMatrix() const
+{
+    return m_corr_matrix;
+}
+
+void Parameters::setCorrelationMatrix(const Parameters::corr_matrix_t& matrix)
+{
+    if(matrix.size() != size())
+        throw std::runtime_error("Parameters::setCorrelationMatrix() -> Error. Wrong "
+                                 "dimension of correlation matrix.");
+    m_corr_matrix = matrix;
+}
+
 bool Parameters::exists(const std::string& name) const
 {
     for (const auto& par: m_parameters)
diff --git a/Fit/NewKernel/Parameters.h b/Fit/Kernel/Parameters.h
similarity index 88%
rename from Fit/NewKernel/Parameters.h
rename to Fit/Kernel/Parameters.h
index f768164e8e7dd823710cf7e43084a8b5e544c5ee..f7a08d2dbb62f812d3d23e38e0322036c2b68590 100644
--- a/Fit/NewKernel/Parameters.h
+++ b/Fit/Kernel/Parameters.h
@@ -30,6 +30,7 @@ public:
     using parameters_t = std::vector<Parameter>;
     using const_iterator = parameters_t::const_iterator;
     using iterator = parameters_t::iterator;
+    using corr_matrix_t = std::vector<std::vector<double>>;
 
     Parameters() = default;
 
@@ -52,12 +53,16 @@ public:
     const Parameter& operator[](const std::string& name) const;
     const Parameter& operator[](size_t index) const;
 
+    corr_matrix_t correlationMatrix() const;
+    void setCorrelationMatrix(const corr_matrix_t& matrix);
+
 private:
     bool exists(const std::string& parameter_name) const;
     void check_array_size(const std::vector<double>& values) const;
     size_t check_index(size_t index) const;
 
     parameters_t m_parameters;
+    corr_matrix_t m_corr_matrix; //!< correlation matrix
 };
 
 }  // namespace Fit
diff --git a/Fit/NewKernel/PyCallback.cpp b/Fit/Kernel/PyCallback.cpp
similarity index 100%
rename from Fit/NewKernel/PyCallback.cpp
rename to Fit/Kernel/PyCallback.cpp
diff --git a/Fit/NewKernel/PyCallback.h b/Fit/Kernel/PyCallback.h
similarity index 100%
rename from Fit/NewKernel/PyCallback.h
rename to Fit/Kernel/PyCallback.h
diff --git a/Fit/NewKernel/ResidualFunctionAdapter.cpp b/Fit/Kernel/ResidualFunctionAdapter.cpp
similarity index 100%
rename from Fit/NewKernel/ResidualFunctionAdapter.cpp
rename to Fit/Kernel/ResidualFunctionAdapter.cpp
diff --git a/Fit/NewKernel/ResidualFunctionAdapter.h b/Fit/Kernel/ResidualFunctionAdapter.h
similarity index 100%
rename from Fit/NewKernel/ResidualFunctionAdapter.h
rename to Fit/Kernel/ResidualFunctionAdapter.h
diff --git a/Fit/NewKernel/ScalarFunctionAdapter.cpp b/Fit/Kernel/ScalarFunctionAdapter.cpp
similarity index 85%
rename from Fit/NewKernel/ScalarFunctionAdapter.cpp
rename to Fit/Kernel/ScalarFunctionAdapter.cpp
index ce4428a62f381780363e112f8e96424a322f6dc9..477d2951ee53236c9988a490cddfa9d6c3ed144a 100644
--- a/Fit/NewKernel/ScalarFunctionAdapter.cpp
+++ b/Fit/Kernel/ScalarFunctionAdapter.cpp
@@ -14,7 +14,7 @@
 
 #include "ScalarFunctionAdapter.h"
 #include "KernelTypes.h"
-#include "RootMinimizerFunctions.h"
+#include "RootScalarFunction.h"
 
 using namespace Fit;
 
@@ -23,7 +23,7 @@ ScalarFunctionAdapter::ScalarFunctionAdapter(fcn_scalar_t func, const Parameters
 {
 }
 
-const RootObjectiveFunction* ScalarFunctionAdapter::rootObjectiveFunction()
+const RootScalarFunction* ScalarFunctionAdapter::rootObjectiveFunction()
 {
     root_objective_t rootfun = [&](const double* pars) {
         std::vector<double> vec;
@@ -35,6 +35,6 @@ const RootObjectiveFunction* ScalarFunctionAdapter::rootObjectiveFunction()
     };
 
     m_root_objective.reset(
-        new RootObjectiveFunction(rootfun, static_cast<int>(m_parameters.size())));
+        new RootScalarFunction(rootfun, static_cast<int>(m_parameters.size())));
     return m_root_objective.get();
 }
diff --git a/Fit/NewKernel/ScalarFunctionAdapter.h b/Fit/Kernel/ScalarFunctionAdapter.h
similarity index 90%
rename from Fit/NewKernel/ScalarFunctionAdapter.h
rename to Fit/Kernel/ScalarFunctionAdapter.h
index 37cea3d5a7e35a3789b9b11701e02300c7b4d97b..7803c3dcf1aa28584299831a3f6edf42661233ef 100644
--- a/Fit/NewKernel/ScalarFunctionAdapter.h
+++ b/Fit/Kernel/ScalarFunctionAdapter.h
@@ -22,7 +22,7 @@
 #include <vector>
 #include <memory>
 
-class RootObjectiveFunction;
+class RootScalarFunction;
 
 namespace Fit {
 
@@ -36,12 +36,12 @@ class ScalarFunctionAdapter : public IFunctionAdapter {
 public:
     ScalarFunctionAdapter(fcn_scalar_t func, const Parameters& parameters);
 
-    const RootObjectiveFunction* rootObjectiveFunction();
+    const RootScalarFunction* rootObjectiveFunction();
 
 private:
     fcn_scalar_t m_fcn; // user function to minimize
     Parameters m_parameters;
-    std::unique_ptr<RootObjectiveFunction> m_root_objective;
+    std::unique_ptr<RootScalarFunction> m_root_objective;
 };
 
 } //  namespace Fit
diff --git a/Fit/Minimizer/IMinimizer.cpp b/Fit/Minimizer/IMinimizer.cpp
index 989d50dd0b9cfc6df3e7892cc96c5ee755032797..fdbbb55f24a95eede92962b57ef7a95df28ba417 100644
--- a/Fit/Minimizer/IMinimizer.cpp
+++ b/Fit/Minimizer/IMinimizer.cpp
@@ -29,16 +29,6 @@ double IMinimizer::minValue() const
     throw std::runtime_error("IMinimizer::minValue() -> Not implemented.");
 }
 
-void IMinimizer::propagateResults(FitParameterSet&)
-{
-    throw std::runtime_error("IMinimizer::propagateResults() -> Not implemented.");
-}
-
-void IMinimizer::propagateResults(Fit::Parameters&)
-{
-    throw std::runtime_error("IMinimizer::propagateResults() -> Not implemented.");
-}
-
 void IMinimizer::setOptions(const std::string&)
 {
     throw std::runtime_error("IMinimizer::setOptions() -> Not implemented.");
diff --git a/Fit/Minimizer/IMinimizer.h b/Fit/Minimizer/IMinimizer.h
index 163cc3213accc23613a02227cbf4224924e7d2ee..38f2f6d27e787f1b074fc73f0815be0fddf350a3 100644
--- a/Fit/Minimizer/IMinimizer.h
+++ b/Fit/Minimizer/IMinimizer.h
@@ -20,7 +20,6 @@
 #include "MinimizerResult.h"
 #include <string>
 
-class FitParameterSet;
 namespace Fit {class Parameters;}
 
 //! Pure virtual interface for all kind minimizers.
@@ -42,29 +41,15 @@ class BA_CORE_API_ IMinimizer
     virtual std::string algorithmName() const =0;
 
     //! run minimization
-    virtual void minimize() =0;
     virtual Fit::MinimizerResult minimize_scalar(fcn_scalar_t, Fit::Parameters);
     virtual Fit::MinimizerResult minimize_residual(fcn_residual_t, Fit::Parameters);
 
     //! clear resources (parameters) for consecutives minimizations
     virtual void clear() {}
 
-    //! Sets internal minimizer parameters using external parameter list
-    virtual void setParameters(const FitParameterSet& parameters) =0;
-
-    virtual void setObjectiveFunction(objective_function_t ) {}
-
-    virtual void setGradientFunction(gradient_function_t, int ) {}
-
     //! Returns minimum function value
     virtual double minValue() const;
 
-    virtual std::string reportOutcome() const =0;
-
-    //! Propagates results of minimization to fit parameter set
-    virtual void propagateResults(FitParameterSet& parameters);
-    virtual void propagateResults(Fit::Parameters& parameters);
-
     //! Sets option string to the minimizer
     virtual void setOptions(const std::string& options);
 };
diff --git a/Fit/Kernel/MinimizerCatalogue.cpp b/Fit/Minimizer/MinimizerCatalogue.cpp
similarity index 100%
rename from Fit/Kernel/MinimizerCatalogue.cpp
rename to Fit/Minimizer/MinimizerCatalogue.cpp
diff --git a/Fit/Kernel/MinimizerCatalogue.h b/Fit/Minimizer/MinimizerCatalogue.h
similarity index 100%
rename from Fit/Kernel/MinimizerCatalogue.h
rename to Fit/Minimizer/MinimizerCatalogue.h
diff --git a/Fit/Kernel/MinimizerFactory.cpp b/Fit/Minimizer/MinimizerFactory.cpp
similarity index 100%
rename from Fit/Kernel/MinimizerFactory.cpp
rename to Fit/Minimizer/MinimizerFactory.cpp
diff --git a/Fit/Kernel/MinimizerFactory.h b/Fit/Minimizer/MinimizerFactory.h
similarity index 100%
rename from Fit/Kernel/MinimizerFactory.h
rename to Fit/Minimizer/MinimizerFactory.h
diff --git a/Fit/Minimizer/TestMinimizer.cpp b/Fit/Minimizer/TestMinimizer.cpp
index 3ac0c17f07fa68961e2df79def77fe84226fed7f..e4b590cbfa5a7548967330bb02494f69875fb713 100644
--- a/Fit/Minimizer/TestMinimizer.cpp
+++ b/Fit/Minimizer/TestMinimizer.cpp
@@ -14,7 +14,6 @@
 
 #include "TestMinimizer.h"
 #include "MinimizerConstants.h"
-#include "FitParameterSet.h"
 #include "Parameters.h"
 #include <sstream>
 
@@ -25,35 +24,6 @@ std::string TestMinimizer::minimizerName() const
     return std::string(MinimizerNames::Test);
 }
 
-//! run minimization
-void TestMinimizer::minimize()
-{
-    m_min_value = m_fcn(m_parameter_values);
-}
-
-void TestMinimizer::setParameters(const FitParameterSet& parameters)
-{
-    m_parameter_values = parameters.values();
-}
-
-void TestMinimizer::setObjectiveFunction(objective_function_t func)
-{
-    m_fcn = func;
-}
-
-std::string TestMinimizer::reportOutcome() const
-{
-    std::ostringstream result;
-    result << "TestMinimizer::printOutcome() -> Done. Objective function value = "
-           << m_min_value << std::endl;
-    return result.str();
-}
-
-void TestMinimizer::propagateResults(FitParameterSet &)
-{
-    // nothing to do
-}
-
 MinimizerResult TestMinimizer::minimize_scalar(fcn_scalar_t fcn, Fit::Parameters parameters)
 {
     // calling user function once
diff --git a/Fit/Minimizer/TestMinimizer.h b/Fit/Minimizer/TestMinimizer.h
index ab0e2d05cbbd963847bfcbc7d4500298eb714deb..83008daf7aa7c818ed355ee6022e0f0e28748e77 100644
--- a/Fit/Minimizer/TestMinimizer.h
+++ b/Fit/Minimizer/TestMinimizer.h
@@ -16,7 +16,6 @@
 #define TESTMINIMIZER_H
 
 #include "IMinimizer.h"
-class FitParameterSet;
 
 //! A trivial minimizer that calls the objective function once. Used to test the whole chain.
 
@@ -29,17 +28,6 @@ class BA_CORE_API_ TestMinimizer : public IMinimizer
     std::string minimizerName() const final;
     std::string algorithmName() const final { return ""; }
 
-    void minimize() override;
-
-    void setParameters(const FitParameterSet& parameters) override;
-
-    void setObjectiveFunction(objective_function_t func) override;
-
-    std::string reportOutcome() const override;
-
-    using IMinimizer::propagateResults;
-    void propagateResults(FitParameterSet&) override;
-
     Fit::MinimizerResult minimize_scalar(fcn_scalar_t fcn, Fit::Parameters parameters) override;
 
  private:
diff --git a/Fit/RootAdapter/GeneticMinimizer.cpp b/Fit/RootAdapter/GeneticMinimizer.cpp
index 2c2641bd4493918c8ba349bb2956f31cc2f4d1fa..c42f04057c1ba95b634f78855479853eccf0ccb8 100644
--- a/Fit/RootAdapter/GeneticMinimizer.cpp
+++ b/Fit/RootAdapter/GeneticMinimizer.cpp
@@ -13,7 +13,6 @@
 // ************************************************************************** //
 
 #include "GeneticMinimizer.h"
-#include "IFitParameter.h"
 #include "MinimizerConstants.h"
 #include "Math/GeneticMinimizer.h"
 #include "Parameter.h"
@@ -106,21 +105,6 @@ int GeneticMinimizer::randomSeed() const
     return optionValue<int>(OptionNames::RandomSeed);
 }
 
-//! Sets minimizer parameter. Overload is required to check that parameter is properly limited.
-
-void GeneticMinimizer::setParameter(size_t index, const IFitParameter *par)
-{
-    if( !par->limits().isFixed() && !par->limits().isLimited()) {
-        std::ostringstream ostr;
-        ostr << "GeneticMinimizer::setParameter() -> Error! "
-             << "Genetic minimizer requires either fixed or "
-             << "limited AttLimits::limited(left,right) parameter. "
-             << " Parameter name '" << par->name() << "', limits:" << par->limits().toString();
-        throw std::runtime_error(ostr.str());
-    }
-    RootMinimizerAdapter::setParameter(index, par);
-}
-
 void GeneticMinimizer::setParameter(unsigned int index, const Fit::Parameter& par)
 {
     if( !par.limits().isFixed() && !par.limits().isLimited()) {
diff --git a/Fit/RootAdapter/GeneticMinimizer.h b/Fit/RootAdapter/GeneticMinimizer.h
index 683a35c14e5fc643968283937aa08b53a2839e3a..7f2c1892d623fb0ff4bbc13aa4b2762cd6938390 100644
--- a/Fit/RootAdapter/GeneticMinimizer.h
+++ b/Fit/RootAdapter/GeneticMinimizer.h
@@ -58,7 +58,6 @@ protected:
     const root_minimizer_t* rootMinimizer() const override;
 
     using RootMinimizerAdapter::setParameter;
-    void setParameter(size_t index, const IFitParameter* par) override;
     void setParameter(unsigned int index, const Fit::Parameter& par) override;
 
 private:
diff --git a/Fit/RootAdapter/MinimizerResultsHelper.cpp b/Fit/RootAdapter/MinimizerResultsHelper.cpp
index bb8686e1fbe4e8988b42efbc562fb6e2111813c5..cc62709ffa90dd811048fb297af2fc479e0dbed2 100644
--- a/Fit/RootAdapter/MinimizerResultsHelper.cpp
+++ b/Fit/RootAdapter/MinimizerResultsHelper.cpp
@@ -14,8 +14,6 @@
 
 #include "MinimizerResultsHelper.h"
 #include "RootMinimizerAdapter.h"
-#include "FitParameterSet.h"
-#include "IFitParameter.h"
 #include "MinimizerUtils.h"
 #include "Parameters.h"
 #include <boost/format.hpp>
@@ -51,7 +49,8 @@ std::string MinimizerResultsHelper::reportOutcome(const RootMinimizerAdapter* mi
     return result.str();
 }
 
-std::string MinimizerResultsHelper::reportParameters(const FitParameterSet* parameters)
+
+std::string MinimizerResultsHelper::reportParameters(const Fit::Parameters& parameters)
 {
     std::ostringstream result;
 
@@ -59,16 +58,17 @@ std::string MinimizerResultsHelper::reportParameters(const FitParameterSet* para
 
     result << "Name       StartValue  Limits                FitValue  Error" << std::endl;
 
-    for(const IFitParameter* par : *parameters) {
+    for(const auto& par : parameters) {
         result << boost::format("# %-8s %-7.4f     %-20s  %-6.4f    %5.4f \n")
-                  % par->name()
-                  % par->startValue()
-                  % par->limits().toString()
-                  % par->value()
-                  % par->error();
+                  % par.name()
+                  % par.startValue()
+                  % par.limits().toString()
+                  % par.value()
+                  % par.error();
     }
 
-    FitParameterSet::corr_matrix_t matrix = parameters->correlationMatrix();
+
+    Fit::Parameters::corr_matrix_t matrix = parameters.correlationMatrix();
     if(matrix.size()) {
         result << MinimizerUtils::sectionString("Correlations");
         for(size_t i=0; i<matrix.size(); ++i) {
@@ -83,26 +83,6 @@ std::string MinimizerResultsHelper::reportParameters(const FitParameterSet* para
     return result.str();
 }
 
-std::string MinimizerResultsHelper::reportParameters(const Fit::Parameters& parameters)
-{
-    std::ostringstream result;
-
-    result << MinimizerUtils::sectionString("FitParameters");
-
-    result << "Name       StartValue  Limits                FitValue  Error" << std::endl;
-
-    for(const auto& par : parameters) {
-        result << boost::format("# %-8s %-7.4f     %-20s  %-6.4f    %5.4f \n")
-                  % par.name()
-                  % par.startValue()
-                  % par.limits().toString()
-                  % par.value()
-                  % par.error();
-    }
-
-    return result.str();
-}
-
 std::string MinimizerResultsHelper::reportDescription(const RootMinimizerAdapter* minimizer)
 {
     std::ostringstream result;
diff --git a/Fit/RootAdapter/MinimizerResultsHelper.h b/Fit/RootAdapter/MinimizerResultsHelper.h
index 5aeab32b57fbe9c8c26ce3a22877892589ad299e..3860ec72d7fbef340b00efb4b5132ed8dee633d2 100644
--- a/Fit/RootAdapter/MinimizerResultsHelper.h
+++ b/Fit/RootAdapter/MinimizerResultsHelper.h
@@ -19,7 +19,6 @@
 #include <string>
 
 class RootMinimizerAdapter;
-class FitParameterSet;
 namespace Fit { class Parameters; }
 
 //! Contains all logic to generate reports with the result of minimization.
@@ -33,7 +32,6 @@ public:
     static std::string reportOutcome(const RootMinimizerAdapter* minimizer);
 
     //! Reports fit parameters settings and final results
-    static std::string reportParameters(const FitParameterSet* parameters);
     static std::string reportParameters(const Fit::Parameters& parameters);
 
 private:
diff --git a/Fit/RootAdapter/RootMinimizerAdapter.cpp b/Fit/RootAdapter/RootMinimizerAdapter.cpp
index 3eb74b94efb74b3e17edccbfb0df4383504b2adb..a0f5f93d447d6bbf69a8bf25bfb2f48e3baf48d8 100644
--- a/Fit/RootAdapter/RootMinimizerAdapter.cpp
+++ b/Fit/RootAdapter/RootMinimizerAdapter.cpp
@@ -13,12 +13,9 @@
 // ************************************************************************** //
 
 #include "RootMinimizerAdapter.h"
-#include "IFitParameter.h"
-#include "FitParameterSet.h"
 #include "Math/Minimizer.h"
 #include "MinimizerResultsHelper.h"
-#include "RootMinimizerFunctions.h"
-#include "RootObjectiveFuncAdapter.h"
+#include "RootScalarFunction.h"
 #include "StringUtils.h"
 #include "Parameter.h"
 #include "Parameters.h"
@@ -29,19 +26,12 @@ using namespace Fit;
 
 RootMinimizerAdapter::RootMinimizerAdapter(const MinimizerInfo &minimizerInfo)
     :  m_minimizerInfo(minimizerInfo)
-    , m_obj_func(new RootObjectiveFunctionAdapter)
     , m_adapter(new Fit::ObjectiveFunctionAdapter)
     , m_status(false)
 {}
 
 RootMinimizerAdapter::~RootMinimizerAdapter() {}
 
-void RootMinimizerAdapter::minimize()
-{
-    propagateOptions();
-    m_status = rootMinimizer()->Minimize();
-}
-
 MinimizerResult RootMinimizerAdapter::minimize_scalar(fcn_scalar_t fcn,
                                     Parameters parameters)
 {
@@ -56,7 +46,7 @@ MinimizerResult RootMinimizerAdapter::minimize_scalar(fcn_scalar_t fcn,
     MinimizerResult result;
     result.setParameters(parameters);
     result.setMinValue(minValue());
-    result.setReport(reportOutcome());
+    result.setReport( MinimizerResultsHelper().reportOutcome(this));
     result.setNumberOfCalls(m_adapter->numberOfCalls());
 
     return result;
@@ -75,7 +65,7 @@ MinimizerResult RootMinimizerAdapter::minimize_residual(fcn_residual_t fcn, Para
     MinimizerResult result;
     result.setParameters(parameters);
     result.setMinValue(minValue());
-    result.setReport(reportOutcome());
+    result.setReport(MinimizerResultsHelper().reportOutcome(this));
     result.setNumberOfCalls(m_adapter->numberOfCalls());
     result.setNumberOfGradientCalls(m_adapter->numberOfGradientCalls());
 
@@ -92,30 +82,6 @@ std::string RootMinimizerAdapter::algorithmName() const
     return m_minimizerInfo.algorithmName();
 }
 
-void RootMinimizerAdapter::setParameters(const FitParameterSet &parameters)
-{
-    m_obj_func->setNumberOfParameters(static_cast<int>(parameters.size()));
-
-    // Genetic minimizer requires SetFunction before setParameters, others don't care
-    if( isGradientBasedAgorithm() ) {
-        rootMinimizer()->SetFunction(*m_obj_func->rootGradientFunction());
-    } else {
-        rootMinimizer()->SetFunction(*m_obj_func->rootChiSquaredFunction());
-    }
-
-    size_t index(0);
-    for (auto par: parameters)
-        setParameter(index++, par );
-
-    if( parameters.size() != fitDimension())  {
-        std::ostringstream ostr;
-        ostr << "BasicMinimizer::setParameters() -> Error! Unconsistency in fit parameter number: ";
-        ostr << "fitParameterCount = " << fitDimension() << ",";
-        ostr << "parameters.size = " << parameters.size();
-        throw std::runtime_error(ostr.str());
-    }
-}
-
 void RootMinimizerAdapter::setParameters(const Fit::Parameters& parameters)
 {
     unsigned int index(0);
@@ -123,26 +89,11 @@ void RootMinimizerAdapter::setParameters(const Fit::Parameters& parameters)
         setParameter(index++, par );
 }
 
-void RootMinimizerAdapter::setObjectiveFunction(objective_function_t func)
-{
-    m_obj_func->setObjectiveCallback(func);
-}
-
-void RootMinimizerAdapter::setGradientFunction(gradient_function_t func, int ndatasize)
-{
-    m_obj_func->setGradientCallback(func, ndatasize);
-}
-
 double RootMinimizerAdapter::minValue() const
 {
     return rootMinimizer()->MinValue();
 }
 
-std::string RootMinimizerAdapter::reportOutcome() const
-{
-    return MinimizerResultsHelper().reportOutcome(this);
-}
-
 std::string RootMinimizerAdapter::statusToString() const
 {
     return m_status ? std::string("Minimum found") : std::string("Error in solving");
@@ -168,15 +119,20 @@ std::map<std::string, std::string> RootMinimizerAdapter::statusMap() const
     return result;
 }
 
-void RootMinimizerAdapter::propagateResults(FitParameterSet &parameters)
+void RootMinimizerAdapter::setOptions(const std::string &optionString)
+{
+    options().setOptionString(optionString);
+}
+
+//! Propagates results of minimization to fit parameter set
+
+void RootMinimizerAdapter::propagateResults(Fit::Parameters& parameters)
 {
-    // sets values and errors found
     parameters.setValues(parValuesAtMinimum());
     parameters.setErrors(parErrorsAtMinimum());
-
     // sets correlation matrix
     if(providesError()) {
-        FitParameterSet::corr_matrix_t matrix;
+        Fit::Parameters::corr_matrix_t matrix;
         matrix.resize(fitDimension());
 
         for(unsigned i=0; i<(size_t)fitDimension(); ++i) {
@@ -188,64 +144,6 @@ void RootMinimizerAdapter::propagateResults(FitParameterSet &parameters)
     }
 }
 
-void RootMinimizerAdapter::propagateResults(Fit::Parameters& parameters)
-{
-    parameters.setValues(parValuesAtMinimum());
-    parameters.setErrors(parErrorsAtMinimum());
-}
-
-void RootMinimizerAdapter::setOptions(const std::string &optionString)
-{
-    options().setOptionString(optionString);
-}
-
-//! Propagate fit parameter down to ROOT minimizer.
-
-void RootMinimizerAdapter::setParameter(size_t index, const IFitParameter *par)
-{
-    bool success;
-    if (par->limits().isFixed()) {
-        success = rootMinimizer()->SetFixedVariable((int)index, par->name().c_str(),
-                                                    par->value());
-
-    }
-
-    else if (par->limits().isLimited()) {
-        success = rootMinimizer()->SetLimitedVariable((int)index, par->name().c_str(),
-                                                      par->value(), par->step(),
-                                                      par->limits().lowerLimit(),
-                                                      par->limits().upperLimit());
-    }
-
-    else if (par->limits().isLowerLimited()) {
-        success = rootMinimizer()->SetLowerLimitedVariable((int)index, par->name().c_str(),
-                                                           par->value(), par->step(),
-                                                           par->limits().lowerLimit());
-    }
-
-    else if (par->limits().isUpperLimited()) {
-        success = rootMinimizer()->SetUpperLimitedVariable((int)index, par->name().c_str(),
-                                                           par->value(), par->step(),
-                                                           par->limits().upperLimit());
-    }
-
-    else if (par->limits().isLimitless()) {
-        success = rootMinimizer()->SetVariable((int)index, par->name().c_str(), par->value(),
-                                               par->step());
-    }
-
-    else {
-        throw std::runtime_error("BasicMinimizer::setParameter() -> Error! Unexpected parameter.");
-    }
-
-    if( !success ) {
-        std::ostringstream ostr;
-        ostr << "BasicMinimizer::setParameter() -> Error! Can't set minimizer's fit parameter";
-        ostr << "Index:" << index << " name '" << par->name() << "'";
-        throw std::runtime_error(ostr.str());
-    }
-}
-
 void RootMinimizerAdapter::setParameter(unsigned int index, const Fit::Parameter& par)
 {
     bool success;
diff --git a/Fit/RootAdapter/RootMinimizerAdapter.h b/Fit/RootAdapter/RootMinimizerAdapter.h
index 27df7ffb5765b5c4c6c04f17f451482d745e2c50..209b36ad64c60ebb16eb7e0b546c65a9f5f0756e 100644
--- a/Fit/RootAdapter/RootMinimizerAdapter.h
+++ b/Fit/RootAdapter/RootMinimizerAdapter.h
@@ -21,8 +21,6 @@
 #include <string>
 #include <memory>
 
-class RootObjectiveFunctionAdapter;
-class IFitParameter;
 namespace Fit {
     class Parameters; class Parameter; class ObjectiveFunctionAdapter; class MinimizerResult;
 }
@@ -38,7 +36,6 @@ public:
 
     virtual ~RootMinimizerAdapter();
 
-    void minimize() override;
     Fit::MinimizerResult minimize_scalar(fcn_scalar_t fcn, Fit::Parameters parameters) override;
     Fit::MinimizerResult minimize_residual(fcn_residual_t fcn, Fit::Parameters parameters) override;
 
@@ -48,17 +45,10 @@ public:
     //! Returns name of the minimization algorithm.
     std::string algorithmName() const override final;
 
-    void setParameters(const FitParameterSet& parameters) override final;
     void setParameters(const Fit::Parameters& parameters);
 
-    void setObjectiveFunction(objective_function_t func) override final;
-
-    void setGradientFunction(gradient_function_t func, int ndatasize) override final;
-
     double minValue() const override final;
 
-    std::string reportOutcome() const override final;
-
     MinimizerOptions& options() { return m_options; }
     const MinimizerOptions& options() const { return m_options; }
 
@@ -71,18 +61,15 @@ public:
     //! Returns map of string representing different minimizer statuses
     virtual std::map<std::string, std::string> statusMap() const;
 
-    //! Propagates results of minimization to fit parameter set
-    void propagateResults(FitParameterSet& parameters) override;
-    void propagateResults(Fit::Parameters& parameters) override;
-
     //! Sets option string to the minimizer
     void setOptions(const std::string& optionString) override final;
 
 protected:
     RootMinimizerAdapter(const MinimizerInfo& minimizerInfo);
 
+    void propagateResults(Fit::Parameters& parameters);
+
     virtual bool isGradientBasedAgorithm() { return false;}
-    virtual void setParameter(size_t index, const IFitParameter *par);
     virtual void setParameter(unsigned int index, const Fit::Parameter& par);
     size_t fitDimension() const;
     std::vector<double> parValuesAtMinimum() const;
@@ -105,7 +92,6 @@ protected:
 private:
     MinimizerOptions m_options;
     MinimizerInfo m_minimizerInfo;
-    std::unique_ptr<RootObjectiveFunctionAdapter> m_obj_func;
     std::unique_ptr<Fit::ObjectiveFunctionAdapter> m_adapter;
     bool m_status;
 };
diff --git a/Fit/RootAdapter/RootMinimizerFunctions.h b/Fit/RootAdapter/RootMinimizerFunctions.h
deleted file mode 100644
index caa323ed9c0b6c1d6b0fbbb819ef4e4e19b9fca5..0000000000000000000000000000000000000000
--- a/Fit/RootAdapter/RootMinimizerFunctions.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Fit/RootAdapter/RootMinimizerFunctions.h
-//! @brief     Defines classes RootObjectiveFunction and RootGradientFunction
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef ROOTMINIMIZERFUNCTIONS_H
-#define ROOTMINIMIZERFUNCTIONS_H
-
-#include "KernelTypes.h"
-
-#ifdef _WIN32
-#include "Math/Functor.h"
-#include "Math/FitMethodFunction.h"
-#else
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#include "Math/Functor.h"
-#include "Math/FitMethodFunction.h"
-#pragma GCC diagnostic pop
-#endif
-
-//! The chi2 function for use in minimizers.
-//! @ingroup fitting_internal
-
-class RootObjectiveFunction : public ROOT::Math::Functor
-{
- public:
-    RootObjectiveFunction(root_objective_t fcn, int ndims )
-        : ROOT::Math::Functor(fcn, ndims) {}
-};
-
-//! Minimizer function with access to single data element residuals,
-//! required by Fumili, Fumili2 and GSLMultiMin minimizers.
-//! @ingroup fitting_internal
-
-class RootGradientFunction : public ROOT::Math::FitMethodFunction
-{
- public:
-    typedef ROOT::Math::BasicFitMethodFunction<ROOT::Math::IMultiGenFunction>::Type_t Type_t;
-
-    RootGradientFunction(root_gradient_t fun_gradient, size_t npars, size_t ndatasize)
-        : ROOT::Math::FitMethodFunction((int)npars, (int)ndatasize)
-        , m_fun_gradient(fun_gradient) { }
-
-    Type_t Type() const { return ROOT::Math::FitMethodFunction::kLeastSquare; }
-
-    ROOT::Math::IMultiGenFunction* Clone() const {
-        return new RootGradientFunction(m_fun_gradient, NDim(), NPoints()); }
-
-    //! evaluation of single data element residual
-    double DataElement(const double* pars, unsigned int i_data, double* gradient = 0) const {
-        return m_fun_gradient(pars, i_data, gradient);
-    }
-
- private:
-    //! evaluation of chi2
-    double DoEval(const double* pars) const {
-        double chi2 = 0.0;
-        for(size_t i_data=0; i_data<NPoints(); ++i_data) {
-            double  res = DataElement(pars, (unsigned)i_data);
-            chi2 += res*res;
-        }
-        return chi2/double(NPoints());
-    }
-
-    root_gradient_t m_fun_gradient;
-};
-
-#endif // ROOTMINIMIZERFUNCTIONS_H
diff --git a/Fit/RootAdapter/RootObjectiveFuncAdapter.cpp b/Fit/RootAdapter/RootObjectiveFuncAdapter.cpp
deleted file mode 100644
index faf5965a73c5e71c4865d4a39646fa63e4bde1b3..0000000000000000000000000000000000000000
--- a/Fit/RootAdapter/RootObjectiveFuncAdapter.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Fit/RootAdapter/RootObjectiveFuncAdapter.cpp
-//! @brief     Implements class RootObjectiveFunctionAdapter.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "RootObjectiveFuncAdapter.h"
-#include "RootMinimizerFunctions.h"
-#include "IMinimizer.h"
-#include <stdexcept>
-
-RootObjectiveFunctionAdapter::RootObjectiveFunctionAdapter()
-    : m_nparameters(0)
-    , m_ndatasize(0)
-{}
-
-//! Sets the function which will be used for finding objective function minimum value
-
-void RootObjectiveFunctionAdapter::setObjectiveCallback(objective_function_t func)
-{
-    m_objective_callback = func;
-}
-
-//! Sets the function which will be used for gradient calculations.
-
-void RootObjectiveFunctionAdapter::setGradientCallback(gradient_function_t func, int ndatasize)
-{
-    m_gradient_callback = func;
-    m_ndatasize = ndatasize;
-}
-
-//! Sets number of fit parameters (needed to construct correct ROOT's functions).
-
-void RootObjectiveFunctionAdapter::setNumberOfParameters(int nparameters)
-{
-    m_nparameters = nparameters;
-}
-
-//! Creates and returns objective function suitable for ROOT minimizers.
-
-const RootObjectiveFunction*
-    RootObjectiveFunctionAdapter::rootChiSquaredFunction()
-{
-    if(!m_objective_callback)
-        throw std::runtime_error("RootObjectiveFunctionAdapter::rootChiSquaredFunction() -> Error. "
-                                 "Objective function is not set.");
-
-    if(m_nparameters <= 0)
-        throw std::runtime_error("RootObjectiveFunctionAdapter::rootChiSquaredFunction() -> Error. "
-                                 "Number of parameters must be >0");
-
-    root_objective_t rootfun =
-        [&] (const double* pars) {return evaluate(pars); };
-
-    m_root_objective_function.reset(new RootObjectiveFunction(rootfun, m_nparameters));
-
-    return m_root_objective_function.get();
-}
-
-//! Creates and returns gradient function suitable for ROOT minimizers.
-
-const RootGradientFunction* RootObjectiveFunctionAdapter::rootGradientFunction()
-{
-    if(!m_gradient_callback)
-        throw std::runtime_error("RootObjectiveFunctionAdapter::rootGradientFunction() -> Error. "
-                                 "Objective function is not set.");
-
-    if(m_nparameters <= 0)
-        throw std::runtime_error("RootObjectiveFunctionAdapter::rootGradientFunction() -> Error. "
-                                 "Number of parameters must be >0");
-
-    if(m_ndatasize <= 0)
-        throw std::runtime_error("RootObjectiveFunctionAdapter::rootGradientFunction() -> Error. "
-                                 "Number of data elements is not defined.");
-
-    root_gradient_t rootfun =
-        [&] (const double* pars, unsigned int index, double* gradients)
-        { return evaluate_gradient(pars, index, gradients); };
-
-    m_root_gradient_function.reset(new RootGradientFunction(rootfun, m_nparameters,
-                                                                     m_ndatasize));
-
-    return m_root_gradient_function.get();
-}
-
-//! Transfers call of root's pointer based objective function to our callback
-
-double RootObjectiveFunctionAdapter::evaluate(const double* pars)
-{
-    std::vector<double> vec;
-    vec.resize(m_nparameters, 0.0);
-    std::copy(pars, pars+m_nparameters, vec.begin());
-    return m_objective_callback(vec);
-}
-
-//! Transfers call of root's pointer based gradient function to our callback
-
-double RootObjectiveFunctionAdapter::evaluate_gradient(
-    const double* pars, unsigned int index, double* gradients)
-{
-    std::vector<double> vec;
-    vec.resize(m_nparameters, 0.0);
-    std::copy(pars, pars+m_nparameters, vec.begin());
-
-    std::vector<double> vec_gradients;
-
-    if(gradients)
-        vec_gradients.resize(m_nparameters);
-
-    double result = m_gradient_callback(vec, index, vec_gradients);
-
-    if(gradients)
-        for(int i=0; i<(int)m_nparameters; ++i) gradients[i] = vec_gradients[i];
-
-    return result;
-}
diff --git a/Fit/RootAdapter/RootObjectiveFuncAdapter.h b/Fit/RootAdapter/RootObjectiveFuncAdapter.h
deleted file mode 100644
index b7b1d4dad6abb6736330bc4f88a5388b9a9e328a..0000000000000000000000000000000000000000
--- a/Fit/RootAdapter/RootObjectiveFuncAdapter.h
+++ /dev/null
@@ -1,57 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Fit/RootAdapter/RootObjectiveFuncAdapter.h
-//! @brief     Declares class RootObjectiveFunctionAdapter.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef ROOTOBJECTIVEFUNCADAPTER_H
-#define ROOTOBJECTIVEFUNCADAPTER_H
-
-#include "WinDllMacros.h"
-#include "KernelTypes.h"
-#include <memory>
-#include <vector>
-
-class RootObjectiveFunction;
-class RootGradientFunction;
-
-//! Adapts our objective functions to ROOT.
-//! @ingroup fitting_internal
-
-class BA_CORE_API_ RootObjectiveFunctionAdapter
-{
-public:
-    RootObjectiveFunctionAdapter();
-
-    void setObjectiveCallback(objective_function_t func);
-    void setGradientCallback(gradient_function_t func, int ndatasize);
-
-    void setNumberOfParameters(int nparameters);
-
-    const RootObjectiveFunction* rootChiSquaredFunction();
-
-    const RootGradientFunction* rootGradientFunction();
-
-private:
-    double evaluate(const double* pars);
-    double evaluate_gradient(const double* pars, unsigned int index, double* gradients);
-
-    objective_function_t m_objective_callback;
-    gradient_function_t m_gradient_callback;
-
-    std::unique_ptr<RootObjectiveFunction> m_root_objective_function;
-    std::unique_ptr<RootGradientFunction> m_root_gradient_function;
-
-    int m_nparameters;
-    int m_ndatasize;
-};
-
-#endif // ROOTOBJECTIVEFUNCADAPTER_H
diff --git a/Tests/Functional/Fit/FitKernel/main.cpp b/Fit/RootAdapter/RootScalarFunction.cpp
similarity index 60%
rename from Tests/Functional/Fit/FitKernel/main.cpp
rename to Fit/RootAdapter/RootScalarFunction.cpp
index af87f23a1bb6ba2ac058a95bf158c20f12ea9014..303ffd6d27830309d96a4f9f2d9b41e21140df46 100644
--- a/Tests/Functional/Fit/FitKernel/main.cpp
+++ b/Fit/RootAdapter/RootScalarFunction.cpp
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Tests/Functional/Fit/main.cpp
-//! @brief     Implements program FitTest to run fit functional tests
+//! @file      Fit/RootAdapter/RootScalarFunction.h
+//! @brief     Implements class RootScalarFunction
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -12,12 +12,7 @@
 //
 // ************************************************************************** //
 
-#include "TestService.h"
-#include "FitKernelTestFactory.h"
+#include "RootScalarFunction.h"
 
-//! Runs functional tests.
-
-int main(int argc, char **argv)
-{
-    return TestService<FitKernelTestFactory>().execute(argc, argv) ? 0 : 1;
-}
+RootScalarFunction::RootScalarFunction(root_objective_t fcn, int ndims)
+    : ROOT::Math::Functor(fcn, ndims) {}
diff --git a/Fit/RootAdapter/RootScalarFunction.h b/Fit/RootAdapter/RootScalarFunction.h
new file mode 100644
index 0000000000000000000000000000000000000000..986a787247aea16453c7079040fb8455406ad133
--- /dev/null
+++ b/Fit/RootAdapter/RootScalarFunction.h
@@ -0,0 +1,38 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Fit/RootAdapter/RootScalarFunction.h
+//! @brief     Defines classes RootScalarFunction
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+// ************************************************************************** //
+
+#ifndef ROOTSCALARFUNCTION_H
+#define ROOTSCALARFUNCTION_H
+
+#include "KernelTypes.h"
+
+#ifdef _WIN32
+#include "Math/Functor.h"
+#else
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#include "Math/Functor.h"
+#pragma GCC diagnostic pop
+#endif
+
+//! The chi2 function for use in minimizers.
+//! @ingroup fitting_internal
+
+class RootScalarFunction : public ROOT::Math::Functor
+{
+ public:
+    RootScalarFunction(root_objective_t fcn, int ndims);
+};
+
+#endif // ROOTSCALARFUNCTION_H
diff --git a/Tests/Functional/Fit/CMakeLists.txt b/Tests/Functional/Fit/CMakeLists.txt
index ff5639a3773ab05bd5d404073db31f3d0d9e61b4..69c48ad3b61c140fde808bab39cfcfd341d49740 100644
--- a/Tests/Functional/Fit/CMakeLists.txt
+++ b/Tests/Functional/Fit/CMakeLists.txt
@@ -2,12 +2,9 @@
 # Tests/Functional/Core/CMakeLists.txt
 ############################################################################
 
-# fitting via FitSuite
+# testing fitting via FitSuite
 add_subdirectory(FitSuite)
 
-# fitting via FitKernel
-add_subdirectory(FitKernel)
-
-# fitting via new Kernel machinery
+# testing standalone fitting of arbitrary objective functions
 add_subdirectory(Minimizer)
 
diff --git a/Tests/Functional/Fit/FitKernel/CMakeLists.txt b/Tests/Functional/Fit/FitKernel/CMakeLists.txt
deleted file mode 100644
index cbbe35e27a553bdf53d90ca0a7309442927fcebd..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/FitKernel/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-set(test TestFitKernel)
-
-set(test_cases
-    StandaloneFit
-)
-
-include_directories(${RootMinimizers_INCLUDE_DIRS})
-
-file(GLOB source_files "*.cpp")
-file(GLOB include_files "*.h")
-
-add_executable(${test} ${include_files} ${source_files})
-target_link_libraries(${test} BornAgainCore BornAgainTestMachinery)
-
-foreach(test_case ${test_cases})
-    add_test(${test}/${test_case} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test} ${test_case})
-endforeach()
diff --git a/Tests/Functional/Fit/FitKernel/FitKernelTestFactory.cpp b/Tests/Functional/Fit/FitKernel/FitKernelTestFactory.cpp
deleted file mode 100644
index 61dfc9616ca48d482065aca4e72e5f82c00e6e81..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/FitKernel/FitKernelTestFactory.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Fit/StandardFitsFactory.cpp
-//! @brief     Implements class StandardFitsFactory
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "FitKernelTestFactory.h"
-#include "StandaloneFitTest.h"
-
-FitKernelTestFactory::FitKernelTestFactory()
-{
-    registerItem(
-        "StandaloneFit",
-        create_new<StandaloneFitTest>,
-                "Test of standalone fit of arbitrary functions");
-}
diff --git a/Tests/Functional/Fit/FitKernel/FitKernelTestFactory.h b/Tests/Functional/Fit/FitKernel/FitKernelTestFactory.h
deleted file mode 100644
index 214c9d848b29c5e0d9e59bd977a3a61c9685fc1f..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/FitKernel/FitKernelTestFactory.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Fit/FitKernelTestFactory.h
-//! @brief     Defines class FitKernelTestFactory
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef FITKERNELTESTFACTORY_H
-#define FITKERNELTESTFACTORY_H
-
-#include "FunctionalTestFactory.h"
-
-//! Factory to generate standalone fit tests.
-
-class FitKernelTestFactory : public FunctionalTestFactory
-{
-public:
-    FitKernelTestFactory();
-};
-
-#endif // FITKERNELTESTFACTORY_H
diff --git a/Tests/Functional/Fit/FitKernel/ObjectiveFunctionPlan.cpp b/Tests/Functional/Fit/FitKernel/ObjectiveFunctionPlan.cpp
deleted file mode 100644
index a6804ed0c5381cf9e9e2c961986a913648bd330e..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/FitKernel/ObjectiveFunctionPlan.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Fit/ObjectiveFunctionPlan.cpp
-//! @brief     Declares classes to define plans for testing objective functions.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "ObjectiveFunctionPlan.h"
-#include "ObjectiveTestFunctions.h"
-
-ObjectiveFunctionPlan::ObjectiveFunctionPlan(const std::string &name, objective_function_t func,
-                                             double , double )
-    : m_name(name)
-    , m_objective_function(func)
-{
-
-}
-
-ObjectiveFunctionPlan::~ObjectiveFunctionPlan()
-{
-    for(auto par : m_parameters)
-        delete par;
-
-}
-
-void ObjectiveFunctionPlan::addParameter(double start_value, double expected_value,
-                                         const AttLimits &limits, double step)
-{
-    std::string name = "par"+std::to_string(m_parameters.size());
-    m_parameters.push_back(new FitParameterPlan(name, start_value, expected_value, limits, step));
-}
-
-std::vector<const FitParameterPlan*> ObjectiveFunctionPlan::parameterPlan() const
-{
-    std::vector<const FitParameterPlan*> result{m_parameters.begin(), m_parameters.end()};
-    return result;
-}
-
-//! Plan for finding rosenbrock function minimum
-//! start point: F(-1.2,1.0) = 24.20
-//! minimum    : F(1.0,1.0)  = 0.
-
-Rosenbrock1::Rosenbrock1()
-    : ObjectiveFunctionPlan("Rosenbrock1", TestFunctions::RosenBrock, 0.0)
-{
-    addParameter(-1.2, 1.0, AttLimits::limited(-5.0, 5.0), 0.01);
-    addParameter(1.0,  1.0, AttLimits::limited(-5.0, 5.0), 0.01);
-}
-
-//! Plan for WoodFour function
-//!   start point: F(-3,-1,-3,-1) = 19192
-//!   minimum    : F(1,1,1,1)  =   0.
-
-WoodFour::WoodFour()
-    : ObjectiveFunctionPlan("WoodFour", TestFunctions::WoodFour, 0.0)
-{
-    addParameter(-3.0, 1.0, AttLimits::limited(-5.0, 5.0), 0.01);
-    addParameter(-1.0, 1.0, AttLimits::limited(-5.0, 5.0), 0.01);
-    addParameter(-3.0, 1.0, AttLimits::limited(-5.0, 5.0), 0.01);
-    addParameter(-1.0, 1.0, AttLimits::limited(-5.0, 5.0), 0.01);
-}
-
diff --git a/Tests/Functional/Fit/FitKernel/ObjectiveFunctionPlan.h b/Tests/Functional/Fit/FitKernel/ObjectiveFunctionPlan.h
deleted file mode 100644
index ba090fccdcef9437b333fee9c6ed00207481672c..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/FitKernel/ObjectiveFunctionPlan.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Fit/ObjectiveFunctionPlan.h
-//! @brief     Declares classes to define plans for testing objective functions.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef OBJECTIVEFUNCTIONPLAN_H
-#define OBJECTIVEFUNCTIONPLAN_H
-
-#include <memory>
-#include "KernelTypes.h"
-#include "FitParameterPlan.h"
-
-//! @class ObjectiveFunctionPlan
-//! @ingroup standard_samples
-//! @brief The ObjectiveFunctionPlan defines objective function to fit and its fit parameters.
-
-class ObjectiveFunctionPlan
-{
-public:
-    ObjectiveFunctionPlan(const std::string &name, objective_function_t func, double expected_minimum,
-                          double threshold = 0.01);
-
-    virtual ~ObjectiveFunctionPlan();
-
-    void addParameter(double start_value, double expected_value,
-                      const AttLimits &limits, double step);
-
-    objective_function_t objectiveFunction() const { return m_objective_function; }
-
-    std::vector<const FitParameterPlan*> parameterPlan() const;
-
-    std::string name() const { return m_name; }
-private:
-    std::string m_name;
-    objective_function_t m_objective_function;
-    std::vector<FitParameterPlan*> m_parameters;
-};
-
-//! @class Rosenbrock1
-//! @ingroup standard_samples
-//! @brief Setting for standalone fit of rosenbrock function.
-
-class Rosenbrock1 : public ObjectiveFunctionPlan
-{
-public:
-    Rosenbrock1();
-};
-
-//! @class Rosenbrock1
-//! @ingroup standard_samples
-//! @brief Setting for standalone fit of Wood4 function.
-
-class WoodFour : public ObjectiveFunctionPlan
-{
-public:
-    WoodFour();
-};
-
-#endif // OBJECTIVEFUNCTIONPLAN_H
diff --git a/Tests/Functional/Fit/FitKernel/README b/Tests/Functional/Fit/FitKernel/README
deleted file mode 100644
index 7d6e1c8329ee2b5f20fb6c5d20da01b10d730418..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/FitKernel/README
+++ /dev/null
@@ -1,9 +0,0 @@
-Collection of functional tests (C++)
-
-Collection of standalone fitting tests using various minimizers and objective functions.
-No BornAgain simulation involved.
-
-Tests are compiled and executed automatically when user builds
-the whole project with 'check' target cmake; make check
-
-One can run tests manually by running in the build directory ./bin/FitKernel
diff --git a/Tests/Functional/Fit/FitKernel/StandaloneFitPlan.cpp b/Tests/Functional/Fit/FitKernel/StandaloneFitPlan.cpp
deleted file mode 100644
index 33e5d16b06b4dd10866664dd3a55f31d874ac46d..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/FitKernel/StandaloneFitPlan.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Fit/StandaloneFitPlan.cpp
-//! @brief     Implements classes to define plans for testing standalone fit.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "StandaloneFitPlan.h"
-#include "ObjectiveFunctionPlan.h"
-#include <iostream>
-#include <boost/format.hpp>
-#include <cmath>
-
-
-StandaloneFitPlan::StandaloneFitPlan(const std::string &minimizerName,
-                                     const std::string &algorithmName,
-                                     ObjectiveFunctionPlan *plan)
-    : m_minimizerName(minimizerName)
-    , m_algorithmName(algorithmName)
-    , m_plan(plan){}
-
-StandaloneFitPlan::~StandaloneFitPlan()
-{
-
-}
-
-std::string StandaloneFitPlan::functionPlanName() const
-{
-    return m_plan->name();
-}
-
-objective_function_t StandaloneFitPlan::objectiveFunction() const
-{
-    return m_plan->objectiveFunction();
-}
-
-std::vector<const FitParameterPlan*> StandaloneFitPlan::parameterPlan() const
-{
-    return m_plan->parameterPlan();
-}
-
-//! Returns true if found values coincide with FitParameterPlan
-
-bool StandaloneFitPlan::planSucceeded(const std::vector<double> &foundParValues)
-{
-    bool success(true);
-
-    if(parameterPlan().size() != foundParValues.size())
-        throw std::runtime_error("StandaloneFitPlan::planSucceeded() -> Error. Sizes differ.");
-
-    for(size_t i=0; i<foundParValues.size(); ++i) {
-        double expected_value = parameterPlan()[i]->expectedValue();
-        double diff = std::abs(foundParValues[i] - expected_value)/expected_value;
-        if (diff > parameterPlan()[i]->tolerance())
-            success = false;
-
-        std::string name = "par"+std::to_string(i);
-        std::cout << boost::format("%|12t| %-10s : %-6.4f (diff %6.4g) %s\n") %
-            name % foundParValues[i] % diff %
-            (success ? "OK" : "FAILED");
-
-    }
-
-    return success;
-}
-
-
diff --git a/Tests/Functional/Fit/FitKernel/StandaloneFitPlan.h b/Tests/Functional/Fit/FitKernel/StandaloneFitPlan.h
deleted file mode 100644
index 073292b8df799ed0fe45424c5c6e593b6246f634..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/FitKernel/StandaloneFitPlan.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Fit/StandaloneFitPlan.h
-//! @brief     Declares classes to define plans for testing standalone fit.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef STANDALONEFITPLAN_H
-#define STANDALONEFITPLAN_H
-
-#include "FitParameterPlan.h"
-#include "KernelTypes.h"
-#include <string>
-#include <memory>
-class ObjectiveFunctionPlan;
-
-//! @class StandaloneFitPlan
-//! @ingroup standard_samples
-//! @brief Represent FitKernel setting for testing arbitrary objective functions.
-
-class StandaloneFitPlan
-{
-public:
-    StandaloneFitPlan(const std::string &minimizerName, const std::string &algorithmName,
-                      ObjectiveFunctionPlan *plan);
-    ~StandaloneFitPlan();
-
-    std::string minimizerName() const { return m_minimizerName; }
-    std::string algorithmName() const { return m_algorithmName; }
-    std::string functionPlanName() const;
-
-    objective_function_t objectiveFunction() const;
-
-    std::vector<const FitParameterPlan*> parameterPlan() const;
-
-    bool planSucceeded(const std::vector<double> &foundParValues);
-
-private:
-    std::string m_minimizerName;
-    std::string m_algorithmName;
-    std::unique_ptr<ObjectiveFunctionPlan> m_plan;
-};
-
-#endif // STANDALONEFITPLAN_H
diff --git a/Tests/Functional/Fit/FitKernel/StandaloneFitTest.cpp b/Tests/Functional/Fit/FitKernel/StandaloneFitTest.cpp
deleted file mode 100644
index 67445fc3a5631d0b2579fda6deaa3446544136ed..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/FitKernel/StandaloneFitTest.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Fit/StandaloneFitTest.cpp
-//! @brief     Implements class StandaloneFitTest.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "StandaloneFitTest.h"
-#include "FitKernel.h"
-#include "AttLimits.h"
-#include "ObjectiveFunctionPlan.h"
-#include "FitParameterSet.h"
-#include <iostream>
-
-StandaloneFitTest::StandaloneFitTest()
-    : IFunctionalTest("StandaloneFit", "Collection of standalone tests for fitting library")
-{
-    addTest<Rosenbrock1>("Minuit2", "Migrad");
-    addTest<WoodFour>("Minuit2", "Migrad");
-    addTest<Rosenbrock1>("GSLMultiMin", "BFGS2");
-}
-
-bool StandaloneFitTest::runTest()
-{
-    bool success(true);
-    for(auto plan: m_plans) {
-        std::cout << plan->minimizerName()
-                  << " " << plan->algorithmName()
-                  << " " << plan->functionPlanName() << std::endl;
-
-        success &= runPlan(plan);
-    }
-
-    std::cout << "StandaloneFitTest::runTest() -> " << (success ? "OK" : "FAILED") << std::endl;
-
-    return success;
-}
-
-bool StandaloneFitTest::runPlan(std::shared_ptr<StandaloneFitPlan> plan)
-{
-    bool success(true);
-
-    std::unique_ptr<FitKernel> fitKernel(new FitKernel);
-    fitKernel->setMinimizer(plan->minimizerName(), plan->algorithmName());
-
-    // TODO refactor fitKernel to add IFitParameter directly, similar to FitSuite
-    int index(0);
-    for(auto p : plan->parameterPlan())
-        fitKernel->addFitParameter("par"+std::to_string(index++), p->fitParameter().startValue(),
-                                   p->fitParameter().limits(), p->fitParameter().step());
-
-    fitKernel->setObjectiveFunction(plan->objectiveFunction());
-    fitKernel->minimize();
-    std::cout << fitKernel->reportResults() << std::endl;
-
-    std::vector<double> foundValues = fitKernel->fitParameters()->values();
-
-    if(!plan->planSucceeded(foundValues))
-        success = false;
-
-    return success;
-}
diff --git a/Tests/Functional/Fit/FitKernel/StandaloneFitTest.h b/Tests/Functional/Fit/FitKernel/StandaloneFitTest.h
deleted file mode 100644
index b1d4ef24ff8f3f17fab5eb1e09666b96ea667f18..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/FitKernel/StandaloneFitTest.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Fit/StandaloneFitTest.h
-//! @brief     Declares class StandaloneFitTest.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef STANDALONEFITTEST_H
-#define STANDALONEFITTEST_H
-
-#include "IFunctionalTest.h"
-#include "StandaloneFitPlan.h"
-
-//! @class StandaloneFitTest
-//! @ingroup standard_samples
-//! @brief Collection of standalone tests for fitting library.
-
-class StandaloneFitTest : public IFunctionalTest
-{
-public:
-    StandaloneFitTest();
-
-    bool runTest();
-
-    template<typename T>
-    void addTest(const std::string &minimizerName, const std::string &algorithmName);
-
-private:
-    bool runPlan(std::shared_ptr<StandaloneFitPlan> plan);
-
-    std::vector<std::shared_ptr<StandaloneFitPlan>> m_plans;
-};
-
-template<typename T>
-void StandaloneFitTest::addTest(const std::string &minimizerName, const std::string &algorithmName)
-{
-    m_plans.push_back(
-        std::shared_ptr<StandaloneFitPlan>(new StandaloneFitPlan(minimizerName, algorithmName, new T()))
-    );
-}
-
-#endif // STANDALONEFITTEST_H
diff --git a/Wrap/python/plot_utils.py b/Wrap/python/plot_utils.py
index a613090a87da1fe0bfeaab54e2527a25dddf17f6..621b0b52f9654c3296757ceff044ac2e2ed80b16 100644
--- a/Wrap/python/plot_utils.py
+++ b/Wrap/python/plot_utils.py
@@ -260,7 +260,7 @@ class PlotterGISAS(Plotter):
         plt.title('Parameters')
         plt.axis('off')
         plt.text(0.01, 0.85, "Iterations  " + '{:d}     {:s}'.
-                 format(fit_suite.numberOfIterations(), fit_suite.minimizer().minimizerName()))
+                 format(fit_suite.numberOfIterations(), fit_suite.minimizerName()))
         plt.text(0.01, 0.75, "Chi2       " + '{:8.4f}'.format(fit_suite.getChi2()))
         for index, fitPar in enumerate(fit_suite.fitParameters()):
             plt.text(0.01, 0.55 - index * 0.1, '{:30.30s}: {:6.3f}'.format(fitPar.name(), fitPar.value()))
@@ -314,7 +314,7 @@ class PlotterSpecular(Plotter):
         trunc_length = 9  # max string field width in the table
         n_digits = 1  # number of decimal digits to print
         n_iterations = fit_suite.numberOfIterations()  # number of iterations
-        minimizer = fit_suite.minimizer().minimizerName()
+        minimizer = fit_suite.minimizerName()
         rel_dif = fit_suite.relativeDifference().array().max()  # maximum relative difference
         fitted_parameters = fit_suite.fitParameters()
 
diff --git a/Wrap/swig/extendCore.i b/Wrap/swig/extendCore.i
index 14b94e07c3902481e458ab00d635fb9b6c841830..14007d6f2976b1fdab94b2c13833d6c874c8da85 100644
--- a/Wrap/swig/extendCore.i
+++ b/Wrap/swig/extendCore.i
@@ -114,3 +114,46 @@ class ParameterPoolIterator(object):
 };
 
 
+// FitParameterSet iterator
+
+%pythoncode %{
+class FitParameterSetIterator(object):
+
+    def __init__(self, fitParameters):
+        self.fitParameters = fitParameters
+        self.index = -1
+
+    def __iter__(self):
+        return self
+
+    def next(self):
+        self.index += 1
+        if self.index < self.fitParameters.size():
+            return self.fitParameters[self.index]
+        else:
+            raise StopIteration
+
+    def __next__(self):
+        return self.next()
+%}
+
+// FitParameterSet accessors
+
+%extend FitParameterSet {
+    const IFitParameter* __getitem__(std::string name) const
+    {
+        return (*($self))[name];
+    }
+    const IFitParameter* __getitem__(size_t index) const
+    {
+        return (*($self))[index];
+    }
+
+%pythoncode {
+    def __iter__(self):
+        return FitParameterSetIterator(self)
+}
+};
+
+
+
diff --git a/Wrap/swig/extendFit.i b/Wrap/swig/extendFit.i
index a30ee82bd8a6c052ebb45022cb50d04cd04038c0..c99b66b30fe195d425cc2b08607324b53a98e1e2 100644
--- a/Wrap/swig/extendFit.i
+++ b/Wrap/swig/extendFit.i
@@ -1,46 +1,3 @@
-
-// FitParameterSet iterator
-
-%pythoncode %{
-class FitParameterSetIterator(object):
-
-    def __init__(self, fitParameters):
-        self.fitParameters = fitParameters
-        self.index = -1
-
-    def __iter__(self):
-        return self
-
-    def next(self):
-        self.index += 1
-        if self.index < self.fitParameters.size():
-            return self.fitParameters[self.index]
-        else:
-            raise StopIteration
-
-    def __next__(self):
-        return self.next()
-%}
-
-// FitParameterSet accessors
-
-%extend FitParameterSet {
-    const IFitParameter* __getitem__(std::string name) const
-    {
-        return (*($self))[name];
-    }
-    const IFitParameter* __getitem__(size_t index) const
-    {
-        return (*($self))[index];
-    }
-
-%pythoncode {
-    def __iter__(self):
-        return FitParameterSetIterator(self)
-}
-};
-
-
 %pythoncode %{
 class ParametersIterator(object):
 
diff --git a/Wrap/swig/libBornAgainCore.i b/Wrap/swig/libBornAgainCore.i
index 101d94a4064d5fb2b24c48573b993753a884ae72..59935f810ee08597c1092f05140fd1bb9cfdbbce 100644
--- a/Wrap/swig/libBornAgainCore.i
+++ b/Wrap/swig/libBornAgainCore.i
@@ -90,11 +90,12 @@
 #include "FTDistributions2D.h"
 #include "FitObject.h"
 #include "FitOptions.h"
+#include "IFitParameter.h"
+#include "FitParameterSet.h"
 #include "FitParameter.h"
 #include "FitSuite.h"
 #include "FitSuiteImpl.h"
 #include "FitSuiteObjects.h"
-#include "FitParameterSet.h"
 #include "FixedBinAxis.h"
 #include "FootprintFactorGaussian.h"
 #include "FootprintFactorSquare.h"
@@ -244,7 +245,6 @@
 %import(module="libBornAgainFit") "AttLimits.h"
 %import(module="libBornAgainFit") "Attributes.h"
 %import(module="libBornAgainFit") "RealLimits.h"
-%import(module="libBornAgainFit") "IFitParameter.h"
 
 %include "BAVersion.h"
 %include "BasicVector3D.h"
@@ -292,6 +292,8 @@
 %include "ChiSquaredModule.h"
 %include "FitObject.h"
 %include "FitOptions.h"
+%include "IFitParameter.h"
+%include "FitParameterSet.h"
 %include "FitParameter.h"
 %include "FitSuite.h"
 %include "FitSuiteObjects.h"
diff --git a/Wrap/swig/libBornAgainFit.i b/Wrap/swig/libBornAgainFit.i
index 2c2462077d98f99b4f46c45c34fc7fe4f47f662e..46356fdaa08e7ba1ef723ab9597e8df6ac19edf3 100644
--- a/Wrap/swig/libBornAgainFit.i
+++ b/Wrap/swig/libBornAgainFit.i
@@ -66,8 +66,6 @@ import_array();
 #include "AttLimits.h"
 #include "Parameter.h"
 #include "Parameters.h"
-#include "IFitParameter.h"
-#include "FitParameterSet.h"
 #include "IMinimizer.h"
 #include "MinimizerCatalogue.h"
 #include "MinimizerFactory.h"
@@ -90,8 +88,6 @@ import_array();
 %include "Parameter.h"
 %include "Parameters.h"
 %include "IMinimizer.h"
-%include "IFitParameter.h"
-%include "FitParameterSet.h"
 %include "MinimizerCatalogue.h"
 %include "MinimizerFactory.h"
 
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 369feaaa2765faec10c7266085493897babc5048..a0a902ad7604e078bfe9d414537aa503b98c279c 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -244,6 +244,26 @@ class ParameterPoolIterator(object):
     def __next__(self):
         return self.next()
 
+
+class FitParameterSetIterator(object):
+
+    def __init__(self, fitParameters):
+        self.fitParameters = fitParameters
+        self.index = -1
+
+    def __iter__(self):
+        return self
+
+    def next(self):
+        self.index += 1
+        if self.index < self.fitParameters.size():
+            return self.fitParameters[self.index]
+        else:
+            raise StopIteration
+
+    def __next__(self):
+        return self.next()
+
 class vdouble1d_t(_object):
     """Proxy of C++ std::vector<(double)> class."""
 
@@ -6465,7 +6485,276 @@ class FitOptions(_object):
 FitOptions_swigregister = _libBornAgainCore.FitOptions_swigregister
 FitOptions_swigregister(FitOptions)
 
-class FitParameter(libBornAgainFit.IFitParameter):
+class IFitParameter(_object):
+    """Proxy of C++ IFitParameter class."""
+
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, IFitParameter, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, IFitParameter, name)
+    __repr__ = _swig_repr
+
+    def __init__(self, *args):
+        """
+        __init__(IFitParameter self) -> IFitParameter
+        __init__(IFitParameter self, std::string const & name, double value, AttLimits limits, double step=0.0) -> IFitParameter
+        __init__(IFitParameter self, std::string const & name, double value, AttLimits limits) -> IFitParameter
+        __init__(IFitParameter self, std::string const & name, double value) -> IFitParameter
+        """
+        this = _libBornAgainCore.new_IFitParameter(*args)
+        try:
+            self.this.append(this)
+        except __builtin__.Exception:
+            self.this = this
+    __swig_destroy__ = _libBornAgainCore.delete_IFitParameter
+    __del__ = lambda self: None
+
+    def clone(self):
+        """clone(IFitParameter self) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_clone(self)
+
+
+    def name(self):
+        """name(IFitParameter self) -> std::string"""
+        return _libBornAgainCore.IFitParameter_name(self)
+
+
+    def setName(self, name):
+        """setName(IFitParameter self, std::string const & name) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_setName(self, name)
+
+
+    def startValue(self):
+        """startValue(IFitParameter self) -> double"""
+        return _libBornAgainCore.IFitParameter_startValue(self)
+
+
+    def setStartValue(self, value):
+        """setStartValue(IFitParameter self, double value)"""
+        return _libBornAgainCore.IFitParameter_setStartValue(self, value)
+
+
+    def value(self):
+        """value(IFitParameter self) -> double"""
+        return _libBornAgainCore.IFitParameter_value(self)
+
+
+    def setValue(self, value):
+        """setValue(IFitParameter self, double value)"""
+        return _libBornAgainCore.IFitParameter_setValue(self, value)
+
+
+    def addPattern(self, pattern):
+        """addPattern(IFitParameter self, std::string const & pattern) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_addPattern(self, pattern)
+
+
+    def step(self):
+        """step(IFitParameter self) -> double"""
+        return _libBornAgainCore.IFitParameter_step(self)
+
+
+    def setStep(self, value):
+        """setStep(IFitParameter self, double value) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_setStep(self, value)
+
+
+    def error(self):
+        """error(IFitParameter self) -> double"""
+        return _libBornAgainCore.IFitParameter_error(self)
+
+
+    def setError(self, value):
+        """setError(IFitParameter self, double value)"""
+        return _libBornAgainCore.IFitParameter_setError(self, value)
+
+
+    def limits(self, *args):
+        """
+        limits(IFitParameter self) -> AttLimits
+        limits(IFitParameter self) -> AttLimits
+        """
+        return _libBornAgainCore.IFitParameter_limits(self, *args)
+
+
+    def setLimits(self, limits):
+        """setLimits(IFitParameter self, AttLimits limits) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_setLimits(self, limits)
+
+
+    def setLowerLimited(self, bound_value):
+        """setLowerLimited(IFitParameter self, double bound_value) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_setLowerLimited(self, bound_value)
+
+
+    def setPositive(self):
+        """setPositive(IFitParameter self) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_setPositive(self)
+
+
+    def setNonnegative(self):
+        """setNonnegative(IFitParameter self) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_setNonnegative(self)
+
+
+    def setUpperLimited(self, bound_value):
+        """setUpperLimited(IFitParameter self, double bound_value) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_setUpperLimited(self, bound_value)
+
+
+    def setLimited(self, left_bound_value, right_bound_value):
+        """setLimited(IFitParameter self, double left_bound_value, double right_bound_value) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_setLimited(self, left_bound_value, right_bound_value)
+
+
+    def setFixed(self):
+        """setFixed(IFitParameter self) -> IFitParameter"""
+        return _libBornAgainCore.IFitParameter_setFixed(self)
+
+
+    def toString(self):
+        """toString(IFitParameter self) -> std::string"""
+        return _libBornAgainCore.IFitParameter_toString(self)
+
+IFitParameter_swigregister = _libBornAgainCore.IFitParameter_swigregister
+IFitParameter_swigregister(IFitParameter)
+
+class FitParameterSet(_object):
+    """Proxy of C++ FitParameterSet class."""
+
+    __swig_setmethods__ = {}
+    __setattr__ = lambda self, name, value: _swig_setattr(self, FitParameterSet, name, value)
+    __swig_getmethods__ = {}
+    __getattr__ = lambda self, name: _swig_getattr(self, FitParameterSet, name)
+    __repr__ = _swig_repr
+
+    def __init__(self):
+        """__init__(FitParameterSet self) -> FitParameterSet"""
+        this = _libBornAgainCore.new_FitParameterSet()
+        try:
+            self.this.append(this)
+        except __builtin__.Exception:
+            self.this = this
+    __swig_destroy__ = _libBornAgainCore.delete_FitParameterSet
+    __del__ = lambda self: None
+
+    def clear(self):
+        """clear(FitParameterSet self)"""
+        return _libBornAgainCore.FitParameterSet_clear(self)
+
+
+    def size(self):
+        """size(FitParameterSet self) -> size_t"""
+        return _libBornAgainCore.FitParameterSet_size(self)
+
+
+    def begin(self, *args):
+        """
+        begin(FitParameterSet self) -> FitParameterSet::iterator
+        begin(FitParameterSet self) -> FitParameterSet::const_iterator
+        """
+        return _libBornAgainCore.FitParameterSet_begin(self, *args)
+
+
+    def end(self, *args):
+        """
+        end(FitParameterSet self) -> FitParameterSet::iterator
+        end(FitParameterSet self) -> FitParameterSet::const_iterator
+        """
+        return _libBornAgainCore.FitParameterSet_end(self, *args)
+
+
+    def addFitParameter(self, par):
+        """addFitParameter(FitParameterSet self, IFitParameter par)"""
+        return _libBornAgainCore.FitParameterSet_addFitParameter(self, par)
+
+
+    def fitParameter(self, *args):
+        """
+        fitParameter(FitParameterSet self, std::string const & name) -> IFitParameter
+        fitParameter(FitParameterSet self, std::string const & name) -> IFitParameter
+        """
+        return _libBornAgainCore.FitParameterSet_fitParameter(self, *args)
+
+
+    def values(self):
+        """values(FitParameterSet self) -> vdouble1d_t"""
+        return _libBornAgainCore.FitParameterSet_values(self)
+
+
+    def setValues(self, pars_values):
+        """setValues(FitParameterSet self, vdouble1d_t pars_values)"""
+        return _libBornAgainCore.FitParameterSet_setValues(self, pars_values)
+
+
+    def valuesDifferFrom(self, par_values, tolerance=2.0):
+        """
+        valuesDifferFrom(FitParameterSet self, vdouble1d_t par_values, double tolerance=2.0) -> bool
+        valuesDifferFrom(FitParameterSet self, vdouble1d_t par_values) -> bool
+        """
+        return _libBornAgainCore.FitParameterSet_valuesDifferFrom(self, par_values, tolerance)
+
+
+    def errors(self):
+        """errors(FitParameterSet self) -> vdouble1d_t"""
+        return _libBornAgainCore.FitParameterSet_errors(self)
+
+
+    def setErrors(self, pars_errors):
+        """setErrors(FitParameterSet self, vdouble1d_t pars_errors)"""
+        return _libBornAgainCore.FitParameterSet_setErrors(self, pars_errors)
+
+
+    def freeFitParameterCount(self):
+        """freeFitParameterCount(FitParameterSet self) -> size_t"""
+        return _libBornAgainCore.FitParameterSet_freeFitParameterCount(self)
+
+
+    def fixAll(self):
+        """fixAll(FitParameterSet self)"""
+        return _libBornAgainCore.FitParameterSet_fixAll(self)
+
+
+    def releaseAll(self):
+        """releaseAll(FitParameterSet self)"""
+        return _libBornAgainCore.FitParameterSet_releaseAll(self)
+
+
+    def setFixed(self, pars, is_fixed):
+        """setFixed(FitParameterSet self, vector_string_t pars, bool is_fixed)"""
+        return _libBornAgainCore.FitParameterSet_setFixed(self, pars, is_fixed)
+
+
+    def correlationMatrix(self):
+        """correlationMatrix(FitParameterSet self) -> vdouble2d_t"""
+        return _libBornAgainCore.FitParameterSet_correlationMatrix(self)
+
+
+    def setCorrelationMatrix(self, matrix):
+        """setCorrelationMatrix(FitParameterSet self, vdouble2d_t matrix)"""
+        return _libBornAgainCore.FitParameterSet_setCorrelationMatrix(self, matrix)
+
+
+    def fitParametersNewKernel(self):
+        """fitParametersNewKernel(FitParameterSet self) -> Fit::Parameters"""
+        return _libBornAgainCore.FitParameterSet_fitParametersNewKernel(self)
+
+
+    def __getitem__(self, *args):
+        """
+        __getitem__(FitParameterSet self, std::string name) -> IFitParameter
+        __getitem__(FitParameterSet self, size_t index) -> IFitParameter
+        """
+        return _libBornAgainCore.FitParameterSet___getitem__(self, *args)
+
+
+    def __iter__(self):
+        return FitParameterSetIterator(self)
+
+FitParameterSet_swigregister = _libBornAgainCore.FitParameterSet_swigregister
+FitParameterSet_swigregister(FitParameterSet)
+
+class FitParameter(IFitParameter):
     """
 
 
@@ -6476,11 +6765,11 @@ class FitParameter(libBornAgainFit.IFitParameter):
     """
 
     __swig_setmethods__ = {}
-    for _s in [libBornAgainFit.IFitParameter]:
+    for _s in [IFitParameter]:
         __swig_setmethods__.update(getattr(_s, '__swig_setmethods__', {}))
     __setattr__ = lambda self, name, value: _swig_setattr(self, FitParameter, name, value)
     __swig_getmethods__ = {}
-    for _s in [libBornAgainFit.IFitParameter]:
+    for _s in [IFitParameter]:
         __swig_getmethods__.update(getattr(_s, '__swig_getmethods__', {}))
     __getattr__ = lambda self, name: _swig_getattr(self, FitParameter, name)
     __repr__ = _swig_repr
@@ -6726,16 +7015,9 @@ class FitSuite(IObservable):
         return _libBornAgainCore.FitSuite_setMinimizer(self, *args)
 
 
-    def minimizer(self):
-        """
-        minimizer(FitSuite self) -> IMinimizer const *
-
-        const IMinimizer * FitSuite::minimizer() const
-
-        Returns minimizer. 
-
-        """
-        return _libBornAgainCore.FitSuite_minimizer(self)
+    def minimizerName(self):
+        """minimizerName(FitSuite self) -> std::string"""
+        return _libBornAgainCore.FitSuite_minimizerName(self)
 
 
     def initPrint(self, print_every_nth):
@@ -6794,7 +7076,7 @@ class FitSuite(IObservable):
 
     def fitParameters(self):
         """
-        fitParameters(FitSuite self) -> FitParameterSet *
+        fitParameters(FitSuite self) -> FitParameterSet
 
         FitParameterSet * FitSuite::fitParameters()
 
@@ -7200,6 +7482,11 @@ class FitSuiteObjects(INode):
         return _libBornAgainCore.FitSuiteObjects_getResidualValue(self, global_index)
 
 
+    def residuals(self):
+        """residuals(FitSuiteObjects self) -> vdouble1d_t"""
+        return _libBornAgainCore.FitSuiteObjects_residuals(self)
+
+
     def setNfreeParameters(self, nfree_parameters):
         """
         setNfreeParameters(FitSuiteObjects self, int nfree_parameters)
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index 4ffa0032486a484958b4d0e238229ae3f4fca398..a2a0fe1bd2d9a2fa6ff3c3190f84b9dad83eaa6e 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -3513,269 +3513,274 @@ namespace Swig {
 #define SWIGTYPE_p_FitSuiteImpl swig_types[59]
 #define SWIGTYPE_p_FitSuiteObjects swig_types[60]
 #define SWIGTYPE_p_FitSuiteStrategies swig_types[61]
-#define SWIGTYPE_p_FixedBinAxis swig_types[62]
-#define SWIGTYPE_p_FootprintFactorGaussian swig_types[63]
-#define SWIGTYPE_p_FootprintFactorSquare swig_types[64]
-#define SWIGTYPE_p_FormFactorAnisoPyramid swig_types[65]
-#define SWIGTYPE_p_FormFactorBox swig_types[66]
-#define SWIGTYPE_p_FormFactorCone swig_types[67]
-#define SWIGTYPE_p_FormFactorCone6 swig_types[68]
-#define SWIGTYPE_p_FormFactorCoreShell swig_types[69]
-#define SWIGTYPE_p_FormFactorCrystal swig_types[70]
-#define SWIGTYPE_p_FormFactorCuboctahedron swig_types[71]
-#define SWIGTYPE_p_FormFactorCylinder swig_types[72]
-#define SWIGTYPE_p_FormFactorDWBA swig_types[73]
-#define SWIGTYPE_p_FormFactorDWBAPol swig_types[74]
-#define SWIGTYPE_p_FormFactorDecoratorDebyeWaller swig_types[75]
-#define SWIGTYPE_p_FormFactorDecoratorMaterial swig_types[76]
-#define SWIGTYPE_p_FormFactorDecoratorPositionFactor swig_types[77]
-#define SWIGTYPE_p_FormFactorDecoratorRotation swig_types[78]
-#define SWIGTYPE_p_FormFactorDodecahedron swig_types[79]
-#define SWIGTYPE_p_FormFactorDot swig_types[80]
-#define SWIGTYPE_p_FormFactorEllipsoidalCylinder swig_types[81]
-#define SWIGTYPE_p_FormFactorFullSphere swig_types[82]
-#define SWIGTYPE_p_FormFactorFullSpheroid swig_types[83]
-#define SWIGTYPE_p_FormFactorGauss swig_types[84]
-#define SWIGTYPE_p_FormFactorHemiEllipsoid swig_types[85]
-#define SWIGTYPE_p_FormFactorIcosahedron swig_types[86]
-#define SWIGTYPE_p_FormFactorLongBoxGauss swig_types[87]
-#define SWIGTYPE_p_FormFactorLongBoxLorentz swig_types[88]
-#define SWIGTYPE_p_FormFactorLongRipple1Gauss swig_types[89]
-#define SWIGTYPE_p_FormFactorLongRipple1Lorentz swig_types[90]
-#define SWIGTYPE_p_FormFactorLongRipple2Gauss swig_types[91]
-#define SWIGTYPE_p_FormFactorLongRipple2Lorentz swig_types[92]
-#define SWIGTYPE_p_FormFactorLorentz swig_types[93]
-#define SWIGTYPE_p_FormFactorPolygonalPrism swig_types[94]
-#define SWIGTYPE_p_FormFactorPolygonalSurface swig_types[95]
-#define SWIGTYPE_p_FormFactorPolyhedron swig_types[96]
-#define SWIGTYPE_p_FormFactorPrism3 swig_types[97]
-#define SWIGTYPE_p_FormFactorPrism6 swig_types[98]
-#define SWIGTYPE_p_FormFactorPyramid swig_types[99]
-#define SWIGTYPE_p_FormFactorRipple1 swig_types[100]
-#define SWIGTYPE_p_FormFactorRipple2 swig_types[101]
-#define SWIGTYPE_p_FormFactorSphereGaussianRadius swig_types[102]
-#define SWIGTYPE_p_FormFactorSphereLogNormalRadius swig_types[103]
-#define SWIGTYPE_p_FormFactorSphereUniformRadius swig_types[104]
-#define SWIGTYPE_p_FormFactorTetrahedron swig_types[105]
-#define SWIGTYPE_p_FormFactorTruncatedCube swig_types[106]
-#define SWIGTYPE_p_FormFactorTruncatedSphere swig_types[107]
-#define SWIGTYPE_p_FormFactorTruncatedSpheroid swig_types[108]
-#define SWIGTYPE_p_FormFactorWeighted swig_types[109]
-#define SWIGTYPE_p_GISASSimulation swig_types[110]
-#define SWIGTYPE_p_HexagonalLattice swig_types[111]
-#define SWIGTYPE_p_Histogram1D swig_types[112]
-#define SWIGTYPE_p_Histogram2D swig_types[113]
-#define SWIGTYPE_p_HorizontalLine swig_types[114]
-#define SWIGTYPE_p_IAbstractParticle swig_types[115]
-#define SWIGTYPE_p_IAxis swig_types[116]
-#define SWIGTYPE_p_IBackground swig_types[117]
-#define SWIGTYPE_p_IChiSquaredModule swig_types[118]
-#define SWIGTYPE_p_ICloneable swig_types[119]
-#define SWIGTYPE_p_IClusteredParticles swig_types[120]
-#define SWIGTYPE_p_IDetector swig_types[121]
-#define SWIGTYPE_p_IDetector2D swig_types[122]
-#define SWIGTYPE_p_IDetectorResolution swig_types[123]
-#define SWIGTYPE_p_IDistribution1D swig_types[124]
-#define SWIGTYPE_p_IFTDecayFunction1D swig_types[125]
-#define SWIGTYPE_p_IFTDecayFunction2D swig_types[126]
-#define SWIGTYPE_p_IFTDistribution1D swig_types[127]
-#define SWIGTYPE_p_IFTDistribution2D swig_types[128]
-#define SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t swig_types[129]
-#define SWIGTYPE_p_IFactoryT_std__string_Simulation_t swig_types[130]
-#define SWIGTYPE_p_IFitObserver swig_types[131]
-#define SWIGTYPE_p_IFitParameter swig_types[132]
-#define SWIGTYPE_p_IFitStrategy swig_types[133]
-#define SWIGTYPE_p_IFootprintFactor swig_types[134]
-#define SWIGTYPE_p_IFormFactor swig_types[135]
-#define SWIGTYPE_p_IFormFactorBorn swig_types[136]
-#define SWIGTYPE_p_IFormFactorDecorator swig_types[137]
-#define SWIGTYPE_p_IHistogram swig_types[138]
-#define SWIGTYPE_p_IIntensityFunction swig_types[139]
-#define SWIGTYPE_p_IIntensityNormalizer swig_types[140]
-#define SWIGTYPE_p_IInterferenceFunction swig_types[141]
-#define SWIGTYPE_p_ILayout swig_types[142]
-#define SWIGTYPE_p_IMinimizer swig_types[143]
-#define SWIGTYPE_p_IMultiLayerBuilder swig_types[144]
-#define SWIGTYPE_p_INamed swig_types[145]
-#define SWIGTYPE_p_INode swig_types[146]
-#define SWIGTYPE_p_INodeVisitor swig_types[147]
-#define SWIGTYPE_p_IObservable swig_types[148]
-#define SWIGTYPE_p_IObserver swig_types[149]
-#define SWIGTYPE_p_IParameterT_double_t swig_types[150]
-#define SWIGTYPE_p_IParameterized swig_types[151]
-#define SWIGTYPE_p_IParticle swig_types[152]
-#define SWIGTYPE_p_IPixel swig_types[153]
-#define SWIGTYPE_p_IResolutionFunction2D swig_types[154]
-#define SWIGTYPE_p_IRotation swig_types[155]
-#define SWIGTYPE_p_ISample swig_types[156]
-#define SWIGTYPE_p_ISelectionRule swig_types[157]
-#define SWIGTYPE_p_IShape2D swig_types[158]
-#define SWIGTYPE_p_ISquaredFunction swig_types[159]
-#define SWIGTYPE_p_IUnitConverter swig_types[160]
-#define SWIGTYPE_p_IdentityRotation swig_types[161]
-#define SWIGTYPE_p_Instrument swig_types[162]
-#define SWIGTYPE_p_IntensityDataIOFactory swig_types[163]
-#define SWIGTYPE_p_IntensityFunctionLog swig_types[164]
-#define SWIGTYPE_p_IntensityFunctionSqrt swig_types[165]
-#define SWIGTYPE_p_IntensityNormalizer swig_types[166]
-#define SWIGTYPE_p_IntensityScaleAndShiftNormalizer swig_types[167]
-#define SWIGTYPE_p_InterferenceFunction1DLattice swig_types[168]
-#define SWIGTYPE_p_InterferenceFunction2DLattice swig_types[169]
-#define SWIGTYPE_p_InterferenceFunction2DParaCrystal swig_types[170]
-#define SWIGTYPE_p_InterferenceFunction2DSuperLattice swig_types[171]
-#define SWIGTYPE_p_InterferenceFunctionFinite2DLattice swig_types[172]
-#define SWIGTYPE_p_InterferenceFunctionNone swig_types[173]
-#define SWIGTYPE_p_InterferenceFunctionRadialParaCrystal swig_types[174]
-#define SWIGTYPE_p_IsGISAXSDetector swig_types[175]
-#define SWIGTYPE_p_Lattice swig_types[176]
-#define SWIGTYPE_p_Lattice1DParameters swig_types[177]
-#define SWIGTYPE_p_Lattice2D swig_types[178]
-#define SWIGTYPE_p_Lattice2D__ReciprocalBases swig_types[179]
-#define SWIGTYPE_p_Layer swig_types[180]
-#define SWIGTYPE_p_LayerInterface swig_types[181]
-#define SWIGTYPE_p_LayerRoughness swig_types[182]
-#define SWIGTYPE_p_Line swig_types[183]
-#define SWIGTYPE_p_Material swig_types[184]
-#define SWIGTYPE_p_MesoCrystal swig_types[185]
-#define SWIGTYPE_p_MultiLayer swig_types[186]
-#define SWIGTYPE_p_OffSpecSimulation swig_types[187]
-#define SWIGTYPE_p_OutputDataIteratorT_double_OutputDataT_double_t_t swig_types[188]
-#define SWIGTYPE_p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t swig_types[189]
-#define SWIGTYPE_p_OutputDataT_CumulativeValue_t swig_types[190]
-#define SWIGTYPE_p_OutputDataT_bool_t swig_types[191]
-#define SWIGTYPE_p_OutputDataT_double_t swig_types[192]
-#define SWIGTYPE_p_ParameterDistribution swig_types[193]
-#define SWIGTYPE_p_ParameterPool swig_types[194]
-#define SWIGTYPE_p_ParameterSample swig_types[195]
-#define SWIGTYPE_p_Particle swig_types[196]
-#define SWIGTYPE_p_ParticleComposition swig_types[197]
-#define SWIGTYPE_p_ParticleCoreShell swig_types[198]
-#define SWIGTYPE_p_ParticleDistribution swig_types[199]
-#define SWIGTYPE_p_ParticleLayout swig_types[200]
-#define SWIGTYPE_p_ParticleLimits swig_types[201]
-#define SWIGTYPE_p_PoissonNoiseBackground swig_types[202]
-#define SWIGTYPE_p_Polygon swig_types[203]
-#define SWIGTYPE_p_PolygonPrivate swig_types[204]
-#define SWIGTYPE_p_PolygonalTopology swig_types[205]
-#define SWIGTYPE_p_PolyhedralEdge swig_types[206]
-#define SWIGTYPE_p_PolyhedralFace swig_types[207]
-#define SWIGTYPE_p_PolyhedralTopology swig_types[208]
-#define SWIGTYPE_p_ProgressHandler__Callback_t swig_types[209]
-#define SWIGTYPE_p_RealLimits swig_types[210]
-#define SWIGTYPE_p_RealParameter swig_types[211]
-#define SWIGTYPE_p_Rectangle swig_types[212]
-#define SWIGTYPE_p_RectangularDetector swig_types[213]
-#define SWIGTYPE_p_RectangularPixel swig_types[214]
-#define SWIGTYPE_p_RegionOfInterest swig_types[215]
-#define SWIGTYPE_p_ResolutionFunction2DGaussian swig_types[216]
-#define SWIGTYPE_p_RotationEuler swig_types[217]
-#define SWIGTYPE_p_RotationX swig_types[218]
-#define SWIGTYPE_p_RotationY swig_types[219]
-#define SWIGTYPE_p_RotationZ swig_types[220]
-#define SWIGTYPE_p_SafePointerVectorT_FitObject_t__iterator swig_types[221]
-#define SWIGTYPE_p_SafePointerVectorT_IParticle_const_t swig_types[222]
-#define SWIGTYPE_p_SafePointerVectorT_IParticle_t swig_types[223]
-#define SWIGTYPE_p_SafePointerVectorT_Layer_t swig_types[224]
-#define SWIGTYPE_p_SampleBuilderFactory swig_types[225]
-#define SWIGTYPE_p_SimpleSelectionRule swig_types[226]
-#define SWIGTYPE_p_Simulation swig_types[227]
-#define SWIGTYPE_p_Simulation2D swig_types[228]
-#define SWIGTYPE_p_SimulationFactory swig_types[229]
-#define SWIGTYPE_p_SimulationOptions swig_types[230]
-#define SWIGTYPE_p_SimulationResult swig_types[231]
-#define SWIGTYPE_p_SlicedParticle swig_types[232]
-#define SWIGTYPE_p_SlicingEffects swig_types[233]
-#define SWIGTYPE_p_SpecularDetector1D swig_types[234]
-#define SWIGTYPE_p_SpecularSimulation swig_types[235]
-#define SWIGTYPE_p_SphericalDetector swig_types[236]
-#define SWIGTYPE_p_SphericalPixel swig_types[237]
-#define SWIGTYPE_p_SquareLattice swig_types[238]
-#define SWIGTYPE_p_SquaredFunctionDefault swig_types[239]
-#define SWIGTYPE_p_SquaredFunctionGaussianError swig_types[240]
-#define SWIGTYPE_p_SquaredFunctionMeanSquaredError swig_types[241]
-#define SWIGTYPE_p_SquaredFunctionSimError swig_types[242]
-#define SWIGTYPE_p_SquaredFunctionSystematicError swig_types[243]
-#define SWIGTYPE_p_ThreadInfo swig_types[244]
-#define SWIGTYPE_p_Transform3D swig_types[245]
-#define SWIGTYPE_p_VariableBinAxis swig_types[246]
-#define SWIGTYPE_p_VerticalLine swig_types[247]
-#define SWIGTYPE_p_WavevectorInfo swig_types[248]
-#define SWIGTYPE_p_ZLimits swig_types[249]
-#define SWIGTYPE_p_allocator_type swig_types[250]
-#define SWIGTYPE_p_bool swig_types[251]
-#define SWIGTYPE_p_char swig_types[252]
-#define SWIGTYPE_p_const_iterator swig_types[253]
-#define SWIGTYPE_p_const_reference swig_types[254]
-#define SWIGTYPE_p_difference_type swig_types[255]
-#define SWIGTYPE_p_double swig_types[256]
-#define SWIGTYPE_p_int swig_types[257]
-#define SWIGTYPE_p_iterator swig_types[258]
-#define SWIGTYPE_p_long_long swig_types[259]
-#define SWIGTYPE_p_observer_t swig_types[260]
-#define SWIGTYPE_p_observerlist_t swig_types[261]
-#define SWIGTYPE_p_p_PyObject swig_types[262]
-#define SWIGTYPE_p_reference swig_types[263]
-#define SWIGTYPE_p_short swig_types[264]
-#define SWIGTYPE_p_signed_char swig_types[265]
-#define SWIGTYPE_p_size_type swig_types[266]
-#define SWIGTYPE_p_std__allocatorT_AxisInfo_t swig_types[267]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[268]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[269]
-#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[270]
-#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[271]
-#define SWIGTYPE_p_std__allocatorT_INode_p_t swig_types[272]
-#define SWIGTYPE_p_std__allocatorT_ParameterSample_t swig_types[273]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[274]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[275]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[276]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[277]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[278]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[279]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[280]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[281]
-#define SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t swig_types[282]
-#define SWIGTYPE_p_std__functionT_Simulation_pfF_t swig_types[283]
-#define SWIGTYPE_p_std__functionT_void_fF_t swig_types[284]
-#define SWIGTYPE_p_std__functionT_void_fSimulationAreaIterator_const_RF_t swig_types[285]
-#define SWIGTYPE_p_std__invalid_argument swig_types[286]
-#define SWIGTYPE_p_std__mapT_std__string_std__string_t__const_iterator swig_types[287]
-#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[288]
-#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[289]
-#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[290]
-#define SWIGTYPE_p_std__vectorT_AxesUnitsWrap__AxesUnits_std__allocatorT_AxesUnitsWrap__AxesUnits_t_t swig_types[291]
-#define SWIGTYPE_p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t swig_types[292]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[293]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[294]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t swig_types[295]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator swig_types[296]
-#define SWIGTYPE_p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t swig_types[297]
-#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[298]
-#define SWIGTYPE_p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t swig_types[299]
-#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[300]
-#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[301]
-#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[302]
-#define SWIGTYPE_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t swig_types[303]
-#define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[304]
-#define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[305]
-#define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[306]
-#define SWIGTYPE_p_std__vectorT_SimulationElement_std__allocatorT_SimulationElement_t_t swig_types[307]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[308]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[309]
-#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[310]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[311]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[312]
-#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[313]
-#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[314]
-#define SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t swig_types[315]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[316]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[317]
-#define SWIGTYPE_p_unsigned_char swig_types[318]
-#define SWIGTYPE_p_unsigned_int swig_types[319]
-#define SWIGTYPE_p_unsigned_long_long swig_types[320]
-#define SWIGTYPE_p_unsigned_short swig_types[321]
-#define SWIGTYPE_p_value_type swig_types[322]
-static swig_type_info *swig_types[324];
-static swig_module_info swig_module = {swig_types, 323, 0, 0, 0, 0};
+#define SWIGTYPE_p_Fit__Parameters swig_types[62]
+#define SWIGTYPE_p_FixedBinAxis swig_types[63]
+#define SWIGTYPE_p_FootprintFactorGaussian swig_types[64]
+#define SWIGTYPE_p_FootprintFactorSquare swig_types[65]
+#define SWIGTYPE_p_FormFactorAnisoPyramid swig_types[66]
+#define SWIGTYPE_p_FormFactorBox swig_types[67]
+#define SWIGTYPE_p_FormFactorCone swig_types[68]
+#define SWIGTYPE_p_FormFactorCone6 swig_types[69]
+#define SWIGTYPE_p_FormFactorCoreShell swig_types[70]
+#define SWIGTYPE_p_FormFactorCrystal swig_types[71]
+#define SWIGTYPE_p_FormFactorCuboctahedron swig_types[72]
+#define SWIGTYPE_p_FormFactorCylinder swig_types[73]
+#define SWIGTYPE_p_FormFactorDWBA swig_types[74]
+#define SWIGTYPE_p_FormFactorDWBAPol swig_types[75]
+#define SWIGTYPE_p_FormFactorDecoratorDebyeWaller swig_types[76]
+#define SWIGTYPE_p_FormFactorDecoratorMaterial swig_types[77]
+#define SWIGTYPE_p_FormFactorDecoratorPositionFactor swig_types[78]
+#define SWIGTYPE_p_FormFactorDecoratorRotation swig_types[79]
+#define SWIGTYPE_p_FormFactorDodecahedron swig_types[80]
+#define SWIGTYPE_p_FormFactorDot swig_types[81]
+#define SWIGTYPE_p_FormFactorEllipsoidalCylinder swig_types[82]
+#define SWIGTYPE_p_FormFactorFullSphere swig_types[83]
+#define SWIGTYPE_p_FormFactorFullSpheroid swig_types[84]
+#define SWIGTYPE_p_FormFactorGauss swig_types[85]
+#define SWIGTYPE_p_FormFactorHemiEllipsoid swig_types[86]
+#define SWIGTYPE_p_FormFactorIcosahedron swig_types[87]
+#define SWIGTYPE_p_FormFactorLongBoxGauss swig_types[88]
+#define SWIGTYPE_p_FormFactorLongBoxLorentz swig_types[89]
+#define SWIGTYPE_p_FormFactorLongRipple1Gauss swig_types[90]
+#define SWIGTYPE_p_FormFactorLongRipple1Lorentz swig_types[91]
+#define SWIGTYPE_p_FormFactorLongRipple2Gauss swig_types[92]
+#define SWIGTYPE_p_FormFactorLongRipple2Lorentz swig_types[93]
+#define SWIGTYPE_p_FormFactorLorentz swig_types[94]
+#define SWIGTYPE_p_FormFactorPolygonalPrism swig_types[95]
+#define SWIGTYPE_p_FormFactorPolygonalSurface swig_types[96]
+#define SWIGTYPE_p_FormFactorPolyhedron swig_types[97]
+#define SWIGTYPE_p_FormFactorPrism3 swig_types[98]
+#define SWIGTYPE_p_FormFactorPrism6 swig_types[99]
+#define SWIGTYPE_p_FormFactorPyramid swig_types[100]
+#define SWIGTYPE_p_FormFactorRipple1 swig_types[101]
+#define SWIGTYPE_p_FormFactorRipple2 swig_types[102]
+#define SWIGTYPE_p_FormFactorSphereGaussianRadius swig_types[103]
+#define SWIGTYPE_p_FormFactorSphereLogNormalRadius swig_types[104]
+#define SWIGTYPE_p_FormFactorSphereUniformRadius swig_types[105]
+#define SWIGTYPE_p_FormFactorTetrahedron swig_types[106]
+#define SWIGTYPE_p_FormFactorTruncatedCube swig_types[107]
+#define SWIGTYPE_p_FormFactorTruncatedSphere swig_types[108]
+#define SWIGTYPE_p_FormFactorTruncatedSpheroid swig_types[109]
+#define SWIGTYPE_p_FormFactorWeighted swig_types[110]
+#define SWIGTYPE_p_GISASSimulation swig_types[111]
+#define SWIGTYPE_p_HexagonalLattice swig_types[112]
+#define SWIGTYPE_p_Histogram1D swig_types[113]
+#define SWIGTYPE_p_Histogram2D swig_types[114]
+#define SWIGTYPE_p_HorizontalLine swig_types[115]
+#define SWIGTYPE_p_IAbstractParticle swig_types[116]
+#define SWIGTYPE_p_IAxis swig_types[117]
+#define SWIGTYPE_p_IBackground swig_types[118]
+#define SWIGTYPE_p_IChiSquaredModule swig_types[119]
+#define SWIGTYPE_p_ICloneable swig_types[120]
+#define SWIGTYPE_p_IClusteredParticles swig_types[121]
+#define SWIGTYPE_p_IDetector swig_types[122]
+#define SWIGTYPE_p_IDetector2D swig_types[123]
+#define SWIGTYPE_p_IDetectorResolution swig_types[124]
+#define SWIGTYPE_p_IDistribution1D swig_types[125]
+#define SWIGTYPE_p_IFTDecayFunction1D swig_types[126]
+#define SWIGTYPE_p_IFTDecayFunction2D swig_types[127]
+#define SWIGTYPE_p_IFTDistribution1D swig_types[128]
+#define SWIGTYPE_p_IFTDistribution2D swig_types[129]
+#define SWIGTYPE_p_IFactoryT_std__string_IMultiLayerBuilder_t swig_types[130]
+#define SWIGTYPE_p_IFactoryT_std__string_Simulation_t swig_types[131]
+#define SWIGTYPE_p_IFitObserver swig_types[132]
+#define SWIGTYPE_p_IFitParameter swig_types[133]
+#define SWIGTYPE_p_IFitStrategy swig_types[134]
+#define SWIGTYPE_p_IFootprintFactor swig_types[135]
+#define SWIGTYPE_p_IFormFactor swig_types[136]
+#define SWIGTYPE_p_IFormFactorBorn swig_types[137]
+#define SWIGTYPE_p_IFormFactorDecorator swig_types[138]
+#define SWIGTYPE_p_IHistogram swig_types[139]
+#define SWIGTYPE_p_IIntensityFunction swig_types[140]
+#define SWIGTYPE_p_IIntensityNormalizer swig_types[141]
+#define SWIGTYPE_p_IInterferenceFunction swig_types[142]
+#define SWIGTYPE_p_ILayout swig_types[143]
+#define SWIGTYPE_p_IMinimizer swig_types[144]
+#define SWIGTYPE_p_IMultiLayerBuilder swig_types[145]
+#define SWIGTYPE_p_INamed swig_types[146]
+#define SWIGTYPE_p_INode swig_types[147]
+#define SWIGTYPE_p_INodeVisitor swig_types[148]
+#define SWIGTYPE_p_IObservable swig_types[149]
+#define SWIGTYPE_p_IObserver swig_types[150]
+#define SWIGTYPE_p_IParameterT_double_t swig_types[151]
+#define SWIGTYPE_p_IParameterized swig_types[152]
+#define SWIGTYPE_p_IParticle swig_types[153]
+#define SWIGTYPE_p_IPixel swig_types[154]
+#define SWIGTYPE_p_IResolutionFunction2D swig_types[155]
+#define SWIGTYPE_p_IRotation swig_types[156]
+#define SWIGTYPE_p_ISample swig_types[157]
+#define SWIGTYPE_p_ISelectionRule swig_types[158]
+#define SWIGTYPE_p_IShape2D swig_types[159]
+#define SWIGTYPE_p_ISquaredFunction swig_types[160]
+#define SWIGTYPE_p_IUnitConverter swig_types[161]
+#define SWIGTYPE_p_IdentityRotation swig_types[162]
+#define SWIGTYPE_p_Instrument swig_types[163]
+#define SWIGTYPE_p_IntensityDataIOFactory swig_types[164]
+#define SWIGTYPE_p_IntensityFunctionLog swig_types[165]
+#define SWIGTYPE_p_IntensityFunctionSqrt swig_types[166]
+#define SWIGTYPE_p_IntensityNormalizer swig_types[167]
+#define SWIGTYPE_p_IntensityScaleAndShiftNormalizer swig_types[168]
+#define SWIGTYPE_p_InterferenceFunction1DLattice swig_types[169]
+#define SWIGTYPE_p_InterferenceFunction2DLattice swig_types[170]
+#define SWIGTYPE_p_InterferenceFunction2DParaCrystal swig_types[171]
+#define SWIGTYPE_p_InterferenceFunction2DSuperLattice swig_types[172]
+#define SWIGTYPE_p_InterferenceFunctionFinite2DLattice swig_types[173]
+#define SWIGTYPE_p_InterferenceFunctionNone swig_types[174]
+#define SWIGTYPE_p_InterferenceFunctionRadialParaCrystal swig_types[175]
+#define SWIGTYPE_p_IsGISAXSDetector swig_types[176]
+#define SWIGTYPE_p_Lattice swig_types[177]
+#define SWIGTYPE_p_Lattice1DParameters swig_types[178]
+#define SWIGTYPE_p_Lattice2D swig_types[179]
+#define SWIGTYPE_p_Lattice2D__ReciprocalBases swig_types[180]
+#define SWIGTYPE_p_Layer swig_types[181]
+#define SWIGTYPE_p_LayerInterface swig_types[182]
+#define SWIGTYPE_p_LayerRoughness swig_types[183]
+#define SWIGTYPE_p_Line swig_types[184]
+#define SWIGTYPE_p_Material swig_types[185]
+#define SWIGTYPE_p_MesoCrystal swig_types[186]
+#define SWIGTYPE_p_MultiLayer swig_types[187]
+#define SWIGTYPE_p_OffSpecSimulation swig_types[188]
+#define SWIGTYPE_p_OutputDataIteratorT_double_OutputDataT_double_t_t swig_types[189]
+#define SWIGTYPE_p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t swig_types[190]
+#define SWIGTYPE_p_OutputDataT_CumulativeValue_t swig_types[191]
+#define SWIGTYPE_p_OutputDataT_bool_t swig_types[192]
+#define SWIGTYPE_p_OutputDataT_double_t swig_types[193]
+#define SWIGTYPE_p_ParameterDistribution swig_types[194]
+#define SWIGTYPE_p_ParameterPool swig_types[195]
+#define SWIGTYPE_p_ParameterSample swig_types[196]
+#define SWIGTYPE_p_Particle swig_types[197]
+#define SWIGTYPE_p_ParticleComposition swig_types[198]
+#define SWIGTYPE_p_ParticleCoreShell swig_types[199]
+#define SWIGTYPE_p_ParticleDistribution swig_types[200]
+#define SWIGTYPE_p_ParticleLayout swig_types[201]
+#define SWIGTYPE_p_ParticleLimits swig_types[202]
+#define SWIGTYPE_p_PoissonNoiseBackground swig_types[203]
+#define SWIGTYPE_p_Polygon swig_types[204]
+#define SWIGTYPE_p_PolygonPrivate swig_types[205]
+#define SWIGTYPE_p_PolygonalTopology swig_types[206]
+#define SWIGTYPE_p_PolyhedralEdge swig_types[207]
+#define SWIGTYPE_p_PolyhedralFace swig_types[208]
+#define SWIGTYPE_p_PolyhedralTopology swig_types[209]
+#define SWIGTYPE_p_ProgressHandler__Callback_t swig_types[210]
+#define SWIGTYPE_p_RealLimits swig_types[211]
+#define SWIGTYPE_p_RealParameter swig_types[212]
+#define SWIGTYPE_p_Rectangle swig_types[213]
+#define SWIGTYPE_p_RectangularDetector swig_types[214]
+#define SWIGTYPE_p_RectangularPixel swig_types[215]
+#define SWIGTYPE_p_RegionOfInterest swig_types[216]
+#define SWIGTYPE_p_ResolutionFunction2DGaussian swig_types[217]
+#define SWIGTYPE_p_RotationEuler swig_types[218]
+#define SWIGTYPE_p_RotationX swig_types[219]
+#define SWIGTYPE_p_RotationY swig_types[220]
+#define SWIGTYPE_p_RotationZ swig_types[221]
+#define SWIGTYPE_p_SafePointerVectorT_FitObject_t__iterator swig_types[222]
+#define SWIGTYPE_p_SafePointerVectorT_IParticle_const_t swig_types[223]
+#define SWIGTYPE_p_SafePointerVectorT_IParticle_t swig_types[224]
+#define SWIGTYPE_p_SafePointerVectorT_Layer_t swig_types[225]
+#define SWIGTYPE_p_SampleBuilderFactory swig_types[226]
+#define SWIGTYPE_p_SimpleSelectionRule swig_types[227]
+#define SWIGTYPE_p_Simulation swig_types[228]
+#define SWIGTYPE_p_Simulation2D swig_types[229]
+#define SWIGTYPE_p_SimulationFactory swig_types[230]
+#define SWIGTYPE_p_SimulationOptions swig_types[231]
+#define SWIGTYPE_p_SimulationResult swig_types[232]
+#define SWIGTYPE_p_SlicedParticle swig_types[233]
+#define SWIGTYPE_p_SlicingEffects swig_types[234]
+#define SWIGTYPE_p_SpecularDetector1D swig_types[235]
+#define SWIGTYPE_p_SpecularSimulation swig_types[236]
+#define SWIGTYPE_p_SphericalDetector swig_types[237]
+#define SWIGTYPE_p_SphericalPixel swig_types[238]
+#define SWIGTYPE_p_SquareLattice swig_types[239]
+#define SWIGTYPE_p_SquaredFunctionDefault swig_types[240]
+#define SWIGTYPE_p_SquaredFunctionGaussianError swig_types[241]
+#define SWIGTYPE_p_SquaredFunctionMeanSquaredError swig_types[242]
+#define SWIGTYPE_p_SquaredFunctionSimError swig_types[243]
+#define SWIGTYPE_p_SquaredFunctionSystematicError swig_types[244]
+#define SWIGTYPE_p_ThreadInfo swig_types[245]
+#define SWIGTYPE_p_Transform3D swig_types[246]
+#define SWIGTYPE_p_VariableBinAxis swig_types[247]
+#define SWIGTYPE_p_VerticalLine swig_types[248]
+#define SWIGTYPE_p_WavevectorInfo swig_types[249]
+#define SWIGTYPE_p_ZLimits swig_types[250]
+#define SWIGTYPE_p_allocator_type swig_types[251]
+#define SWIGTYPE_p_bool swig_types[252]
+#define SWIGTYPE_p_char swig_types[253]
+#define SWIGTYPE_p_const_iterator swig_types[254]
+#define SWIGTYPE_p_const_reference swig_types[255]
+#define SWIGTYPE_p_container_t swig_types[256]
+#define SWIGTYPE_p_corr_matrix_t swig_types[257]
+#define SWIGTYPE_p_difference_type swig_types[258]
+#define SWIGTYPE_p_double swig_types[259]
+#define SWIGTYPE_p_int swig_types[260]
+#define SWIGTYPE_p_iterator swig_types[261]
+#define SWIGTYPE_p_long_long swig_types[262]
+#define SWIGTYPE_p_observer_t swig_types[263]
+#define SWIGTYPE_p_observerlist_t swig_types[264]
+#define SWIGTYPE_p_p_PyObject swig_types[265]
+#define SWIGTYPE_p_reference swig_types[266]
+#define SWIGTYPE_p_short swig_types[267]
+#define SWIGTYPE_p_signed_char swig_types[268]
+#define SWIGTYPE_p_size_type swig_types[269]
+#define SWIGTYPE_p_std__allocatorT_AxisInfo_t swig_types[270]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[271]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[272]
+#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[273]
+#define SWIGTYPE_p_std__allocatorT_INode_const_p_t swig_types[274]
+#define SWIGTYPE_p_std__allocatorT_INode_p_t swig_types[275]
+#define SWIGTYPE_p_std__allocatorT_ParameterSample_t swig_types[276]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[277]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[278]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[279]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[280]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[281]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_int_std__allocatorT_int_t_t_t swig_types[282]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[283]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[284]
+#define SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t swig_types[285]
+#define SWIGTYPE_p_std__functionT_Simulation_pfF_t swig_types[286]
+#define SWIGTYPE_p_std__functionT_void_fF_t swig_types[287]
+#define SWIGTYPE_p_std__functionT_void_fSimulationAreaIterator_const_RF_t swig_types[288]
+#define SWIGTYPE_p_std__invalid_argument swig_types[289]
+#define SWIGTYPE_p_std__mapT_std__string_std__string_t__const_iterator swig_types[290]
+#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[291]
+#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[292]
+#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[293]
+#define SWIGTYPE_p_std__vectorT_AxesUnitsWrap__AxesUnits_std__allocatorT_AxesUnitsWrap__AxesUnits_t_t swig_types[294]
+#define SWIGTYPE_p_std__vectorT_AxisInfo_std__allocatorT_AxisInfo_t_t swig_types[295]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[296]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[297]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t swig_types[298]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator swig_types[299]
+#define SWIGTYPE_p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t swig_types[300]
+#define SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator swig_types[301]
+#define SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator swig_types[302]
+#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[303]
+#define SWIGTYPE_p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t swig_types[304]
+#define SWIGTYPE_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t swig_types[305]
+#define SWIGTYPE_p_std__vectorT_INode_p_std__allocatorT_INode_p_t_t swig_types[306]
+#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[307]
+#define SWIGTYPE_p_std__vectorT_Material_const_p_std__allocatorT_Material_const_p_t_t swig_types[308]
+#define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[309]
+#define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[310]
+#define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[311]
+#define SWIGTYPE_p_std__vectorT_SimulationElement_std__allocatorT_SimulationElement_t_t swig_types[312]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[313]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[314]
+#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[315]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[316]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[317]
+#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[318]
+#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[319]
+#define SWIGTYPE_p_std__vectorT_unsigned_int_std__allocatorT_unsigned_int_t_t swig_types[320]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[321]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[322]
+#define SWIGTYPE_p_unsigned_char swig_types[323]
+#define SWIGTYPE_p_unsigned_int swig_types[324]
+#define SWIGTYPE_p_unsigned_long_long swig_types[325]
+#define SWIGTYPE_p_unsigned_short swig_types[326]
+#define SWIGTYPE_p_value_type swig_types[327]
+static swig_type_info *swig_types[329];
+static swig_module_info swig_module = {swig_types, 328, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -6674,11 +6679,12 @@ SWIGINTERN void std_vector_Sl_std_string_Sg__insert__SWIG_1(std::vector< std::st
 #include "FTDistributions2D.h"
 #include "FitObject.h"
 #include "FitOptions.h"
+#include "IFitParameter.h"
+#include "FitParameterSet.h"
 #include "FitParameter.h"
 #include "FitSuite.h"
 #include "FitSuiteImpl.h"
 #include "FitSuiteObjects.h"
-#include "FitParameterSet.h"
 #include "FixedBinAxis.h"
 #include "FootprintFactorGaussian.h"
 #include "FootprintFactorSquare.h"
@@ -7383,6 +7389,26 @@ struct SWIG_null_deleter {
 
 #define SWIG_NO_NULL_DELETER_SWIG_BUILTIN_INIT
 
+
+SWIGINTERN int
+SWIG_AsVal_bool (PyObject *obj, bool *val)
+{
+  int r;
+  if (!PyBool_Check(obj))
+    return SWIG_ERROR;
+  r = PyObject_IsTrue(obj);
+  if (r == -1)
+    return SWIG_ERROR;
+  if (val) *val = r ? true : false;
+  return SWIG_OK;
+}
+
+SWIGINTERN IFitParameter const *FitParameterSet___getitem____SWIG_0(FitParameterSet const *self,std::string name){
+        return (*(self))[name];
+    }
+SWIGINTERN IFitParameter const *FitParameterSet___getitem____SWIG_1(FitParameterSet const *self,size_t index){
+        return (*(self))[index];
+    }
 SWIGINTERN RealParameter *IMultiLayerBuilder_registerParameter(IMultiLayerBuilder *self,std::string const &name,int64_t parpointer){
         return &((self)->IParameterized::registerParameter(name, (double*)parpointer)); }
 SWIGINTERN void IMultiLayerBuilder_setParameterValue(IMultiLayerBuilder *self,std::string const &name,double value){
@@ -7401,20 +7427,6 @@ SWIGINTERN void IMultiLayerBuilder_onChange(IMultiLayerBuilder *self){
     }
 SWIGINTERN bool IMultiLayerBuilder_isPythonBuilder(){
         return true; }
-
-SWIGINTERN int
-SWIG_AsVal_bool (PyObject *obj, bool *val)
-{
-  int r;
-  if (!PyBool_Check(obj))
-    return SWIG_ERROR;
-  r = PyObject_IsTrue(obj);
-  if (r == -1)
-    return SWIG_ERROR;
-  if (val) *val = r ? true : false;
-  return SWIG_OK;
-}
-
 SWIGINTERN double FixedBinAxis___getitem__(FixedBinAxis *self,unsigned int i){ return (*(self))[i]; }
 
   namespace swig {
@@ -44905,6 +44917,1882 @@ SWIGINTERN PyObject *FitOptions_swigregister(PyObject *SWIGUNUSEDPARM(self), PyO
   return SWIG_Py_Void();
 }
 
+SWIGINTERN PyObject *_wrap_new_IFitParameter__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_IFitParameter")) SWIG_fail;
+  result = (IFitParameter *)new IFitParameter();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_IFitParameter__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  double arg2 ;
+  AttLimits *arg3 = 0 ;
+  double arg4 ;
+  int res1 = SWIG_OLDOBJ ;
+  double val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  double val4 ;
+  int ecode4 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  PyObject * obj3 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_IFitParameter",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_IFitParameter" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_AttLimits,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_IFitParameter" "', argument " "3"" of type '" "AttLimits const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFitParameter" "', argument " "3"" of type '" "AttLimits const &""'"); 
+  }
+  arg3 = reinterpret_cast< AttLimits * >(argp3);
+  ecode4 = SWIG_AsVal_double(obj3, &val4);
+  if (!SWIG_IsOK(ecode4)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_IFitParameter" "', argument " "4"" of type '" "double""'");
+  } 
+  arg4 = static_cast< double >(val4);
+  result = (IFitParameter *)new IFitParameter((std::string const &)*arg1,arg2,(AttLimits const &)*arg3,arg4);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, SWIG_POINTER_NEW |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_IFitParameter__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  double arg2 ;
+  AttLimits *arg3 = 0 ;
+  int res1 = SWIG_OLDOBJ ;
+  double val2 ;
+  int ecode2 = 0 ;
+  void *argp3 = 0 ;
+  int res3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_IFitParameter",&obj0,&obj1,&obj2)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_IFitParameter" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_AttLimits,  0  | 0);
+  if (!SWIG_IsOK(res3)) {
+    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_IFitParameter" "', argument " "3"" of type '" "AttLimits const &""'"); 
+  }
+  if (!argp3) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFitParameter" "', argument " "3"" of type '" "AttLimits const &""'"); 
+  }
+  arg3 = reinterpret_cast< AttLimits * >(argp3);
+  result = (IFitParameter *)new IFitParameter((std::string const &)*arg1,arg2,(AttLimits const &)*arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, SWIG_POINTER_NEW |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_IFitParameter__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string *arg1 = 0 ;
+  double arg2 ;
+  int res1 = SWIG_OLDOBJ ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_IFitParameter",&obj0,&obj1)) SWIG_fail;
+  {
+    std::string *ptr = (std::string *)0;
+    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
+    }
+    arg1 = ptr;
+  }
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_IFitParameter" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (IFitParameter *)new IFitParameter((std::string const &)*arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, SWIG_POINTER_NEW |  0 );
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res1)) delete arg1;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_new_IFitParameter(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[5] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 4) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 0) {
+    return _wrap_new_IFitParameter__SWIG_0(self, args);
+  }
+  if (argc == 2) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_new_IFitParameter__SWIG_3(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_AttLimits, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          return _wrap_new_IFitParameter__SWIG_2(self, args);
+        }
+      }
+    }
+  }
+  if (argc == 4) {
+    int _v;
+    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_double(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_AttLimits, 0);
+        _v = SWIG_CheckState(res);
+        if (_v) {
+          {
+            int res = SWIG_AsVal_double(argv[3], NULL);
+            _v = SWIG_CheckState(res);
+          }
+          if (_v) {
+            return _wrap_new_IFitParameter__SWIG_1(self, args);
+          }
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_IFitParameter'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    IFitParameter::IFitParameter()\n"
+    "    IFitParameter::IFitParameter(std::string const &,double,AttLimits const &,double)\n"
+    "    IFitParameter::IFitParameter(std::string const &,double,AttLimits const &)\n"
+    "    IFitParameter::IFitParameter(std::string const &,double)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_IFitParameter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_IFitParameter",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IFitParameter" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_clone",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_clone" "', argument " "1"" of type '" "IFitParameter const *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = (IFitParameter *)((IFitParameter const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  std::string result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_name",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_name" "', argument " "1"" of type '" "IFitParameter const *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = ((IFitParameter const *)arg1)->name();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setName",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setName" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFitParameter_setName" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFitParameter_setName" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  result = (IFitParameter *) &(arg1)->setName((std::string const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_startValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_startValue",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_startValue" "', argument " "1"" of type '" "IFitParameter const *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = (double)((IFitParameter const *)arg1)->startValue();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setStartValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setStartValue",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setStartValue" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setStartValue" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->setStartValue(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_value",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_value" "', argument " "1"" of type '" "IFitParameter const *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = (double)((IFitParameter const *)arg1)->value();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setValue",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setValue" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setValue" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->setValue(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_addPattern(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_addPattern",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_addPattern" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFitParameter_addPattern" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFitParameter_addPattern" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  result = (IFitParameter *) &(arg1)->addPattern((std::string const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_step(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_step",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_step" "', argument " "1"" of type '" "IFitParameter const *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = (double)((IFitParameter const *)arg1)->step();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setStep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setStep",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setStep" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setStep" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (IFitParameter *) &(arg1)->setStep(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_error(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  double result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_error",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_error" "', argument " "1"" of type '" "IFitParameter const *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = (double)((IFitParameter const *)arg1)->error();
+  resultobj = SWIG_From_double(static_cast< double >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setError(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setError",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setError" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setError" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  (arg1)->setError(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_limits__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  AttLimits *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_limits",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_limits" "', argument " "1"" of type '" "IFitParameter const *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = (AttLimits *) &((IFitParameter const *)arg1)->limits();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AttLimits, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_limits__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  AttLimits *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_limits",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_limits" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = (AttLimits *) &(arg1)->limits();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AttLimits, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_limits(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[2] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 1) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_IFitParameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_IFitParameter_limits__SWIG_1(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_IFitParameter, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_IFitParameter_limits__SWIG_0(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'IFitParameter_limits'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    IFitParameter::limits() const\n"
+    "    IFitParameter::limits()\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setLimits(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  AttLimits *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setLimits",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setLimits" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_AttLimits,  0  | 0);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFitParameter_setLimits" "', argument " "2"" of type '" "AttLimits const &""'"); 
+  }
+  if (!argp2) {
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFitParameter_setLimits" "', argument " "2"" of type '" "AttLimits const &""'"); 
+  }
+  arg2 = reinterpret_cast< AttLimits * >(argp2);
+  result = (IFitParameter *) &(arg1)->setLimits((AttLimits const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setLowerLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setLowerLimited",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setLowerLimited" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setLowerLimited" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (IFitParameter *) &(arg1)->setLowerLimited(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setPositive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_setPositive",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setPositive" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = (IFitParameter *) &(arg1)->setPositive();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setNonnegative(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_setNonnegative",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setNonnegative" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = (IFitParameter *) &(arg1)->setNonnegative();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setUpperLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  double arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setUpperLimited",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setUpperLimited" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setUpperLimited" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  result = (IFitParameter *) &(arg1)->setUpperLimited(arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  double arg2 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  double val2 ;
+  int ecode2 = 0 ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:IFitParameter_setLimited",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setLimited" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  ecode2 = SWIG_AsVal_double(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setLimited" "', argument " "2"" of type '" "double""'");
+  } 
+  arg2 = static_cast< double >(val2);
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "IFitParameter_setLimited" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (IFitParameter *) &(arg1)->setLimited(arg2,arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_setFixed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_setFixed",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setFixed" "', argument " "1"" of type '" "IFitParameter *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = (IFitParameter *) &(arg1)->setFixed();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_IFitParameter_toString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  IFitParameter *arg1 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  std::string result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_toString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_toString" "', argument " "1"" of type '" "IFitParameter const *""'"); 
+  }
+  arg1 = reinterpret_cast< IFitParameter * >(argp1);
+  result = ((IFitParameter const *)arg1)->toString();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *IFitParameter_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_IFitParameter, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_FitParameterSet(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)":new_FitParameterSet")) SWIG_fail;
+  result = (FitParameterSet *)new FitParameterSet();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FitParameterSet, SWIG_POINTER_NEW |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_delete_FitParameterSet(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_FitParameterSet",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, SWIG_POINTER_DISOWN |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_FitParameterSet" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_clear",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_clear" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  (arg1)->clear();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_size",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_size" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  result = ((FitParameterSet const *)arg1)->size();
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_begin__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  SwigValueWrapper< std::vector< IFitParameter *,std::allocator< IFitParameter * > >::iterator > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_begin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_begin" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  result = (arg1)->begin();
+  resultobj = SWIG_NewPointerObj((new FitParameterSet::iterator(static_cast< const FitParameterSet::iterator& >(result))), SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_begin__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  SwigValueWrapper< std::vector< IFitParameter *,std::allocator< IFitParameter * > >::const_iterator > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_begin",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_begin" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  result = ((FitParameterSet const *)arg1)->begin();
+  resultobj = SWIG_NewPointerObj((new FitParameterSet::const_iterator(static_cast< const FitParameterSet::const_iterator& >(result))), SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_begin(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[2] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 1) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_FitParameterSet_begin__SWIG_0(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_FitParameterSet_begin__SWIG_1(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitParameterSet_begin'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    FitParameterSet::begin()\n"
+    "    FitParameterSet::begin() const\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_end__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  SwigValueWrapper< std::vector< IFitParameter *,std::allocator< IFitParameter * > >::iterator > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_end",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_end" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  result = (arg1)->end();
+  resultobj = SWIG_NewPointerObj((new FitParameterSet::iterator(static_cast< const FitParameterSet::iterator& >(result))), SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_end__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  SwigValueWrapper< std::vector< IFitParameter *,std::allocator< IFitParameter * > >::const_iterator > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_end",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_end" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  result = ((FitParameterSet const *)arg1)->end();
+  resultobj = SWIG_NewPointerObj((new FitParameterSet::const_iterator(static_cast< const FitParameterSet::const_iterator& >(result))), SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_end(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[2] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 1) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_FitParameterSet_end__SWIG_0(self, args);
+    }
+  }
+  if (argc == 1) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      return _wrap_FitParameterSet_end__SWIG_1(self, args);
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitParameterSet_end'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    FitParameterSet::end()\n"
+    "    FitParameterSet::end() const\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_addFitParameter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  IFitParameter *arg2 = (IFitParameter *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_addFitParameter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_addFitParameter" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_addFitParameter" "', argument " "2"" of type '" "IFitParameter *""'"); 
+  }
+  arg2 = reinterpret_cast< IFitParameter * >(argp2);
+  (arg1)->addFitParameter(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_fitParameter__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_fitParameter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_fitParameter" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_fitParameter" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_fitParameter" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  result = (IFitParameter *)((FitParameterSet const *)arg1)->fitParameter((std::string const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_fitParameter__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_fitParameter",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_fitParameter" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_fitParameter" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_fitParameter" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  result = (IFitParameter *)(arg1)->fitParameter((std::string const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_fitParameter(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[3] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 2) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_FitParameterSet_fitParameter__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_FitParameterSet_fitParameter__SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitParameterSet_fitParameter'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    FitParameterSet::fitParameter(std::string const &) const\n"
+    "    FitParameterSet::fitParameter(std::string const &)\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_values(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  std::vector< double,std::allocator< double > > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_values",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_values" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  result = ((FitParameterSet const *)arg1)->values();
+  resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_setValues(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  std::vector< double,std::allocator< double > > *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_setValues",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_setValues" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    res2 = swig::asptr(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_setValues" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_setValues" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  (arg1)->setValues((std::vector< double,std::allocator< double > > 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_FitParameterSet_valuesDifferFrom__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  std::vector< double,std::allocator< double > > *arg2 = 0 ;
+  double arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  double val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:FitParameterSet_valuesDifferFrom",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    res2 = swig::asptr(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_double(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "3"" of type '" "double""'");
+  } 
+  arg3 = static_cast< double >(val3);
+  result = (bool)((FitParameterSet const *)arg1)->valuesDifferFrom((std::vector< double,std::allocator< double > > const &)*arg2,arg3);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_valuesDifferFrom__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  std::vector< double,std::allocator< double > > *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  bool result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_valuesDifferFrom",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    res2 = swig::asptr(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  result = (bool)((FitParameterSet const *)arg1)->valuesDifferFrom((std::vector< double,std::allocator< double > > const &)*arg2);
+  resultobj = SWIG_From_bool(static_cast< bool >(result));
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return resultobj;
+fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_valuesDifferFrom(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[4] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 3) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = swig::asptr(argv[1], (std::vector< double,std::allocator< double > >**)(0));
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_FitParameterSet_valuesDifferFrom__SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 3) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = swig::asptr(argv[1], (std::vector< double,std::allocator< double > >**)(0));
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        {
+          int res = SWIG_AsVal_double(argv[2], NULL);
+          _v = SWIG_CheckState(res);
+        }
+        if (_v) {
+          return _wrap_FitParameterSet_valuesDifferFrom__SWIG_0(self, args);
+        }
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitParameterSet_valuesDifferFrom'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    FitParameterSet::valuesDifferFrom(std::vector< double,std::allocator< double > > const &,double) const\n"
+    "    FitParameterSet::valuesDifferFrom(std::vector< double,std::allocator< double > > const &) const\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_errors(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  std::vector< double,std::allocator< double > > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_errors",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_errors" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  result = ((FitParameterSet const *)arg1)->errors();
+  resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_setErrors(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  std::vector< double,std::allocator< double > > *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_setErrors",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_setErrors" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  {
+    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
+    res2 = swig::asptr(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_setErrors" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_setErrors" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  (arg1)->setErrors((std::vector< double,std::allocator< double > > 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_FitParameterSet_freeFitParameterCount(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  size_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_freeFitParameterCount",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_freeFitParameterCount" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  result = ((FitParameterSet const *)arg1)->freeFitParameterCount();
+  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_fixAll(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_fixAll",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_fixAll" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  (arg1)->fixAll();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_releaseAll(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_releaseAll",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_releaseAll" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  (arg1)->releaseAll();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_setFixed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  std::vector< std::string,std::allocator< std::string > > *arg2 = 0 ;
+  bool arg3 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  bool val3 ;
+  int ecode3 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  PyObject * obj2 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OOO:FitParameterSet_setFixed",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_setFixed" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  {
+    std::vector< std::string,std::allocator< std::string > > *ptr = (std::vector< std::string,std::allocator< std::string > > *)0;
+    res2 = swig::asptr(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_setFixed" "', argument " "2"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_setFixed" "', argument " "2"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  ecode3 = SWIG_AsVal_bool(obj2, &val3);
+  if (!SWIG_IsOK(ecode3)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "FitParameterSet_setFixed" "', argument " "3"" of type '" "bool""'");
+  } 
+  arg3 = static_cast< bool >(val3);
+  (arg1)->setFixed((std::vector< std::string,std::allocator< 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_FitParameterSet_correlationMatrix(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  FitParameterSet::corr_matrix_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_correlationMatrix",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_correlationMatrix" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  result = ((FitParameterSet const *)arg1)->correlationMatrix();
+  resultobj = swig::from(static_cast< std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet_setCorrelationMatrix(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  FitParameterSet::corr_matrix_t *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_setCorrelationMatrix",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_setCorrelationMatrix" "', argument " "1"" of type '" "FitParameterSet *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  {
+    std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *ptr = (std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *)0;
+    res2 = swig::asptr(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_setCorrelationMatrix" "', argument " "2"" of type '" "FitParameterSet::corr_matrix_t const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_setCorrelationMatrix" "', argument " "2"" of type '" "FitParameterSet::corr_matrix_t const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  (arg1)->setCorrelationMatrix((FitParameterSet::corr_matrix_t 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_FitParameterSet_fitParametersNewKernel(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  Fit::Parameters result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_fitParametersNewKernel",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_fitParametersNewKernel" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  result = ((FitParameterSet const *)arg1)->fitParametersNewKernel();
+  resultobj = SWIG_NewPointerObj((new Fit::Parameters(static_cast< const Fit::Parameters& >(result))), SWIGTYPE_p_Fit__Parameters, SWIG_POINTER_OWN |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  std::string arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet___getitem__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet___getitem__" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    int res = SWIG_AsPtr_std_string(obj1, &ptr);
+    if (!SWIG_IsOK(res) || !ptr) {
+      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "FitParameterSet___getitem__" "', argument " "2"" of type '" "std::string""'"); 
+    }
+    arg2 = *ptr;
+    if (SWIG_IsNewObj(res)) delete ptr;
+  }
+  result = (IFitParameter *)FitParameterSet___getitem____SWIG_0((FitParameterSet const *)arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
+  size_t arg2 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  size_t val2 ;
+  int ecode2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  IFitParameter *result = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet___getitem__",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet___getitem__" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
+  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
+  if (!SWIG_IsOK(ecode2)) {
+    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "FitParameterSet___getitem__" "', argument " "2"" of type '" "size_t""'");
+  } 
+  arg2 = static_cast< size_t >(val2);
+  result = (IFitParameter *)FitParameterSet___getitem____SWIG_1((FitParameterSet const *)arg1,arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_FitParameterSet___getitem__(PyObject *self, PyObject *args) {
+  Py_ssize_t argc;
+  PyObject *argv[3] = {
+    0
+  };
+  Py_ssize_t ii;
+  
+  if (!PyTuple_Check(args)) SWIG_fail;
+  argc = args ? PyObject_Length(args) : 0;
+  for (ii = 0; (ii < 2) && (ii < argc); ii++) {
+    argv[ii] = PyTuple_GET_ITEM(args,ii);
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      {
+        int res = SWIG_AsVal_size_t(argv[1], NULL);
+        _v = SWIG_CheckState(res);
+      }
+      if (_v) {
+        return _wrap_FitParameterSet___getitem____SWIG_1(self, args);
+      }
+    }
+  }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_FitParameterSet___getitem____SWIG_0(self, args);
+      }
+    }
+  }
+  
+fail:
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitParameterSet___getitem__'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    FitParameterSet::__getitem__(std::string) const\n"
+    "    FitParameterSet::__getitem__(size_t) const\n");
+  return 0;
+}
+
+
+SWIGINTERN PyObject *FitParameterSet_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_FitParameterSet, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
 SWIGINTERN PyObject *_wrap_new_FitParameter__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FitParameter *result = 0 ;
@@ -46884,22 +48772,22 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FitSuite_minimizer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_FitSuite_minimizerName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FitSuite *arg1 = (FitSuite *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  IMinimizer *result = 0 ;
+  std::string result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:FitSuite_minimizer",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:FitSuite_minimizerName",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitSuite, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitSuite_minimizer" "', argument " "1"" of type '" "FitSuite const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitSuite_minimizerName" "', argument " "1"" of type '" "FitSuite const *""'"); 
   }
   arg1 = reinterpret_cast< FitSuite * >(argp1);
-  result = (IMinimizer *)((FitSuite const *)arg1)->minimizer();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IMinimizer, 0 |  0 );
+  result = ((FitSuite const *)arg1)->minimizerName();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
@@ -48263,6 +50151,28 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_FitSuiteObjects_residuals(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  FitSuiteObjects *arg1 = (FitSuiteObjects *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  std::vector< double,std::allocator< double > > result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:FitSuiteObjects_residuals",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitSuiteObjects, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitSuiteObjects_residuals" "', argument " "1"" of type '" "FitSuiteObjects const *""'"); 
+  }
+  arg1 = reinterpret_cast< FitSuiteObjects * >(argp1);
+  result = ((FitSuiteObjects const *)arg1)->residuals();
+  resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_FitSuiteObjects_setNfreeParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FitSuiteObjects *arg1 = (FitSuiteObjects *) 0 ;
@@ -119842,6 +121752,75 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FitOptions_stepFactor", _wrap_FitOptions_stepFactor, METH_VARARGS, (char *)"FitOptions_stepFactor(FitOptions self) -> double"},
 	 { (char *)"FitOptions_setStepFactor", _wrap_FitOptions_setStepFactor, METH_VARARGS, (char *)"FitOptions_setStepFactor(FitOptions self, double step_factor)"},
 	 { (char *)"FitOptions_swigregister", FitOptions_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_IFitParameter", _wrap_new_IFitParameter, METH_VARARGS, (char *)"\n"
+		"IFitParameter()\n"
+		"IFitParameter(std::string const & name, double value, AttLimits limits, double step=0.0)\n"
+		"IFitParameter(std::string const & name, double value, AttLimits limits)\n"
+		"new_IFitParameter(std::string const & name, double value) -> IFitParameter\n"
+		""},
+	 { (char *)"delete_IFitParameter", _wrap_delete_IFitParameter, METH_VARARGS, (char *)"delete_IFitParameter(IFitParameter self)"},
+	 { (char *)"IFitParameter_clone", _wrap_IFitParameter_clone, METH_VARARGS, (char *)"IFitParameter_clone(IFitParameter self) -> IFitParameter"},
+	 { (char *)"IFitParameter_name", _wrap_IFitParameter_name, METH_VARARGS, (char *)"IFitParameter_name(IFitParameter self) -> std::string"},
+	 { (char *)"IFitParameter_setName", _wrap_IFitParameter_setName, METH_VARARGS, (char *)"IFitParameter_setName(IFitParameter self, std::string const & name) -> IFitParameter"},
+	 { (char *)"IFitParameter_startValue", _wrap_IFitParameter_startValue, METH_VARARGS, (char *)"IFitParameter_startValue(IFitParameter self) -> double"},
+	 { (char *)"IFitParameter_setStartValue", _wrap_IFitParameter_setStartValue, METH_VARARGS, (char *)"IFitParameter_setStartValue(IFitParameter self, double value)"},
+	 { (char *)"IFitParameter_value", _wrap_IFitParameter_value, METH_VARARGS, (char *)"IFitParameter_value(IFitParameter self) -> double"},
+	 { (char *)"IFitParameter_setValue", _wrap_IFitParameter_setValue, METH_VARARGS, (char *)"IFitParameter_setValue(IFitParameter self, double value)"},
+	 { (char *)"IFitParameter_addPattern", _wrap_IFitParameter_addPattern, METH_VARARGS, (char *)"IFitParameter_addPattern(IFitParameter self, std::string const & pattern) -> IFitParameter"},
+	 { (char *)"IFitParameter_step", _wrap_IFitParameter_step, METH_VARARGS, (char *)"IFitParameter_step(IFitParameter self) -> double"},
+	 { (char *)"IFitParameter_setStep", _wrap_IFitParameter_setStep, METH_VARARGS, (char *)"IFitParameter_setStep(IFitParameter self, double value) -> IFitParameter"},
+	 { (char *)"IFitParameter_error", _wrap_IFitParameter_error, METH_VARARGS, (char *)"IFitParameter_error(IFitParameter self) -> double"},
+	 { (char *)"IFitParameter_setError", _wrap_IFitParameter_setError, METH_VARARGS, (char *)"IFitParameter_setError(IFitParameter self, double value)"},
+	 { (char *)"IFitParameter_limits", _wrap_IFitParameter_limits, METH_VARARGS, (char *)"\n"
+		"limits() -> AttLimits\n"
+		"IFitParameter_limits(IFitParameter self) -> AttLimits\n"
+		""},
+	 { (char *)"IFitParameter_setLimits", _wrap_IFitParameter_setLimits, METH_VARARGS, (char *)"IFitParameter_setLimits(IFitParameter self, AttLimits limits) -> IFitParameter"},
+	 { (char *)"IFitParameter_setLowerLimited", _wrap_IFitParameter_setLowerLimited, METH_VARARGS, (char *)"IFitParameter_setLowerLimited(IFitParameter self, double bound_value) -> IFitParameter"},
+	 { (char *)"IFitParameter_setPositive", _wrap_IFitParameter_setPositive, METH_VARARGS, (char *)"IFitParameter_setPositive(IFitParameter self) -> IFitParameter"},
+	 { (char *)"IFitParameter_setNonnegative", _wrap_IFitParameter_setNonnegative, METH_VARARGS, (char *)"IFitParameter_setNonnegative(IFitParameter self) -> IFitParameter"},
+	 { (char *)"IFitParameter_setUpperLimited", _wrap_IFitParameter_setUpperLimited, METH_VARARGS, (char *)"IFitParameter_setUpperLimited(IFitParameter self, double bound_value) -> IFitParameter"},
+	 { (char *)"IFitParameter_setLimited", _wrap_IFitParameter_setLimited, METH_VARARGS, (char *)"IFitParameter_setLimited(IFitParameter self, double left_bound_value, double right_bound_value) -> IFitParameter"},
+	 { (char *)"IFitParameter_setFixed", _wrap_IFitParameter_setFixed, METH_VARARGS, (char *)"IFitParameter_setFixed(IFitParameter self) -> IFitParameter"},
+	 { (char *)"IFitParameter_toString", _wrap_IFitParameter_toString, METH_VARARGS, (char *)"IFitParameter_toString(IFitParameter self) -> std::string"},
+	 { (char *)"IFitParameter_swigregister", IFitParameter_swigregister, METH_VARARGS, NULL},
+	 { (char *)"new_FitParameterSet", _wrap_new_FitParameterSet, METH_VARARGS, (char *)"new_FitParameterSet() -> FitParameterSet"},
+	 { (char *)"delete_FitParameterSet", _wrap_delete_FitParameterSet, METH_VARARGS, (char *)"delete_FitParameterSet(FitParameterSet self)"},
+	 { (char *)"FitParameterSet_clear", _wrap_FitParameterSet_clear, METH_VARARGS, (char *)"FitParameterSet_clear(FitParameterSet self)"},
+	 { (char *)"FitParameterSet_size", _wrap_FitParameterSet_size, METH_VARARGS, (char *)"FitParameterSet_size(FitParameterSet self) -> size_t"},
+	 { (char *)"FitParameterSet_begin", _wrap_FitParameterSet_begin, METH_VARARGS, (char *)"\n"
+		"begin() -> FitParameterSet::iterator\n"
+		"FitParameterSet_begin(FitParameterSet self) -> FitParameterSet::const_iterator\n"
+		""},
+	 { (char *)"FitParameterSet_end", _wrap_FitParameterSet_end, METH_VARARGS, (char *)"\n"
+		"end() -> FitParameterSet::iterator\n"
+		"FitParameterSet_end(FitParameterSet self) -> FitParameterSet::const_iterator\n"
+		""},
+	 { (char *)"FitParameterSet_addFitParameter", _wrap_FitParameterSet_addFitParameter, METH_VARARGS, (char *)"FitParameterSet_addFitParameter(FitParameterSet self, IFitParameter par)"},
+	 { (char *)"FitParameterSet_fitParameter", _wrap_FitParameterSet_fitParameter, METH_VARARGS, (char *)"\n"
+		"fitParameter(std::string const & name) -> IFitParameter\n"
+		"FitParameterSet_fitParameter(FitParameterSet self, std::string const & name) -> IFitParameter\n"
+		""},
+	 { (char *)"FitParameterSet_values", _wrap_FitParameterSet_values, METH_VARARGS, (char *)"FitParameterSet_values(FitParameterSet self) -> vdouble1d_t"},
+	 { (char *)"FitParameterSet_setValues", _wrap_FitParameterSet_setValues, METH_VARARGS, (char *)"FitParameterSet_setValues(FitParameterSet self, vdouble1d_t pars_values)"},
+	 { (char *)"FitParameterSet_valuesDifferFrom", _wrap_FitParameterSet_valuesDifferFrom, METH_VARARGS, (char *)"\n"
+		"valuesDifferFrom(vdouble1d_t par_values, double tolerance=2.0) -> bool\n"
+		"FitParameterSet_valuesDifferFrom(FitParameterSet self, vdouble1d_t par_values) -> bool\n"
+		""},
+	 { (char *)"FitParameterSet_errors", _wrap_FitParameterSet_errors, METH_VARARGS, (char *)"FitParameterSet_errors(FitParameterSet self) -> vdouble1d_t"},
+	 { (char *)"FitParameterSet_setErrors", _wrap_FitParameterSet_setErrors, METH_VARARGS, (char *)"FitParameterSet_setErrors(FitParameterSet self, vdouble1d_t pars_errors)"},
+	 { (char *)"FitParameterSet_freeFitParameterCount", _wrap_FitParameterSet_freeFitParameterCount, METH_VARARGS, (char *)"FitParameterSet_freeFitParameterCount(FitParameterSet self) -> size_t"},
+	 { (char *)"FitParameterSet_fixAll", _wrap_FitParameterSet_fixAll, METH_VARARGS, (char *)"FitParameterSet_fixAll(FitParameterSet self)"},
+	 { (char *)"FitParameterSet_releaseAll", _wrap_FitParameterSet_releaseAll, METH_VARARGS, (char *)"FitParameterSet_releaseAll(FitParameterSet self)"},
+	 { (char *)"FitParameterSet_setFixed", _wrap_FitParameterSet_setFixed, METH_VARARGS, (char *)"FitParameterSet_setFixed(FitParameterSet self, vector_string_t pars, bool is_fixed)"},
+	 { (char *)"FitParameterSet_correlationMatrix", _wrap_FitParameterSet_correlationMatrix, METH_VARARGS, (char *)"FitParameterSet_correlationMatrix(FitParameterSet self) -> vdouble2d_t"},
+	 { (char *)"FitParameterSet_setCorrelationMatrix", _wrap_FitParameterSet_setCorrelationMatrix, METH_VARARGS, (char *)"FitParameterSet_setCorrelationMatrix(FitParameterSet self, vdouble2d_t matrix)"},
+	 { (char *)"FitParameterSet_fitParametersNewKernel", _wrap_FitParameterSet_fitParametersNewKernel, METH_VARARGS, (char *)"FitParameterSet_fitParametersNewKernel(FitParameterSet self) -> Fit::Parameters"},
+	 { (char *)"FitParameterSet___getitem__", _wrap_FitParameterSet___getitem__, METH_VARARGS, (char *)"\n"
+		"__getitem__(std::string name) -> IFitParameter\n"
+		"FitParameterSet___getitem__(FitParameterSet self, size_t index) -> IFitParameter\n"
+		""},
+	 { (char *)"FitParameterSet_swigregister", FitParameterSet_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_FitParameter", _wrap_new_FitParameter, METH_VARARGS, (char *)"\n"
 		"FitParameter()\n"
 		"FitParameter(std::string const & pattern, double value, AttLimits lim, double step=0.0)\n"
@@ -120000,14 +121979,7 @@ static PyMethodDef SwigMethods[] = {
 		"Sets minimizer. \n"
 		"\n"
 		""},
-	 { (char *)"FitSuite_minimizer", _wrap_FitSuite_minimizer, METH_VARARGS, (char *)"\n"
-		"FitSuite_minimizer(FitSuite self) -> IMinimizer const *\n"
-		"\n"
-		"const IMinimizer * FitSuite::minimizer() const\n"
-		"\n"
-		"Returns minimizer. \n"
-		"\n"
-		""},
+	 { (char *)"FitSuite_minimizerName", _wrap_FitSuite_minimizerName, METH_VARARGS, (char *)"FitSuite_minimizerName(FitSuite self) -> std::string"},
 	 { (char *)"FitSuite_initPrint", _wrap_FitSuite_initPrint, METH_VARARGS, (char *)"\n"
 		"FitSuite_initPrint(FitSuite self, int print_every_nth)\n"
 		"\n"
@@ -120047,7 +122019,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"FitSuite_fitParameters", _wrap_FitSuite_fitParameters, METH_VARARGS, (char *)"\n"
-		"FitSuite_fitParameters(FitSuite self) -> FitParameterSet *\n"
+		"FitSuite_fitParameters(FitSuite self) -> FitParameterSet\n"
 		"\n"
 		"FitParameterSet * FitSuite::fitParameters()\n"
 		"\n"
@@ -120322,6 +122294,7 @@ static PyMethodDef SwigMethods[] = {
 		"index across all element in  FitElement vector \n"
 		"\n"
 		""},
+	 { (char *)"FitSuiteObjects_residuals", _wrap_FitSuiteObjects_residuals, METH_VARARGS, (char *)"FitSuiteObjects_residuals(FitSuiteObjects self) -> vdouble1d_t"},
 	 { (char *)"FitSuiteObjects_setNfreeParameters", _wrap_FitSuiteObjects_setNfreeParameters, METH_VARARGS, (char *)"\n"
 		"FitSuiteObjects_setNfreeParameters(FitSuiteObjects self, int nfree_parameters)\n"
 		"\n"
@@ -134172,6 +136145,7 @@ static swig_type_info _swigt__p_FitSuite = {"_p_FitSuite", "FitSuite *", 0, 0, (
 static swig_type_info _swigt__p_FitSuiteImpl = {"_p_FitSuiteImpl", "FitSuiteImpl *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FitSuiteObjects = {"_p_FitSuiteObjects", "FitSuiteObjects *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FitSuiteStrategies = {"_p_FitSuiteStrategies", "FitSuiteStrategies *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_Fit__Parameters = {"_p_Fit__Parameters", "Fit::Parameters *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FixedBinAxis = {"_p_FixedBinAxis", "FixedBinAxis *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FootprintFactorGaussian = {"_p_FootprintFactorGaussian", "FootprintFactorGaussian *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FootprintFactorSquare = {"_p_FootprintFactorSquare", "FootprintFactorSquare *", 0, 0, (void*)0, 0};
@@ -134365,6 +136339,8 @@ static swig_type_info _swigt__p_bool = {"_p_bool", "bool *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_const_iterator = {"_p_const_iterator", "const_iterator *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_const_reference = {"_p_const_reference", "const_reference *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_container_t = {"_p_container_t", "container_t *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_corr_matrix_t = {"_p_corr_matrix_t", "corr_matrix_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_difference_type = {"_p_difference_type", "difference_type *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_double = {"_p_double", "double *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_int = {"_p_int", "intptr_t *|int *|int_least32_t *|int_fast32_t *|int32_t *|int_fast16_t *", 0, 0, (void*)0, 0};
@@ -134408,6 +136384,8 @@ static swig_type_info _swigt__p_std__vectorT_BasicVector3DT_std__complexT_double
 static swig_type_info _swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t = {"_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t", "std::vector< FitElement,std::allocator< FitElement > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator = {"_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator", "std::vector< FitElement,std::allocator< FitElement > >::iterator *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t = {"_p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t", "std::vector< HomogeneousRegion,std::allocator< HomogeneousRegion > > *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator = {"_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator", "FitParameterSet::const_iterator *|std::vector< IFitParameter *,std::allocator< IFitParameter * > >::const_iterator *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator = {"_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator", "FitParameterSet::iterator *|std::vector< IFitParameter *,std::allocator< IFitParameter * > >::iterator *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t = {"_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t", "std::vector< IFormFactor *,std::allocator< IFormFactor * > > *|std::vector< IFormFactor * > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t = {"_p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t", "std::vector< ILayout const *,std::allocator< ILayout const * > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t = {"_p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t", "std::vector< INode const *,std::allocator< INode const * > > *|std::vector< INode const * > *", 0, 0, (void*)0, 0};
@@ -134497,6 +136475,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_FitSuiteImpl,
   &_swigt__p_FitSuiteObjects,
   &_swigt__p_FitSuiteStrategies,
+  &_swigt__p_Fit__Parameters,
   &_swigt__p_FixedBinAxis,
   &_swigt__p_FootprintFactorGaussian,
   &_swigt__p_FootprintFactorSquare,
@@ -134690,6 +136669,8 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_char,
   &_swigt__p_const_iterator,
   &_swigt__p_const_reference,
+  &_swigt__p_container_t,
+  &_swigt__p_corr_matrix_t,
   &_swigt__p_difference_type,
   &_swigt__p_double,
   &_swigt__p_int,
@@ -134733,6 +136714,8 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t,
   &_swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator,
   &_swigt__p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t,
+  &_swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator,
+  &_swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator,
   &_swigt__p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t,
   &_swigt__p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t,
   &_swigt__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t,
@@ -134822,6 +136805,7 @@ static swig_cast_info _swigc__p_FitSuite[] = {  {&_swigt__p_FitSuite, 0, 0, 0},{
 static swig_cast_info _swigc__p_FitSuiteImpl[] = {  {&_swigt__p_FitSuiteImpl, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FitSuiteObjects[] = {  {&_swigt__p_FitSuiteObjects, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FitSuiteStrategies[] = {  {&_swigt__p_FitSuiteStrategies, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_Fit__Parameters[] = {  {&_swigt__p_Fit__Parameters, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FixedBinAxis[] = {  {&_swigt__p_FixedBinAxis, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FootprintFactorGaussian[] = {  {&_swigt__p_FootprintFactorGaussian, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FootprintFactorSquare[] = {  {&_swigt__p_FootprintFactorSquare, 0, 0, 0},{0, 0, 0, 0}};
@@ -135015,6 +136999,8 @@ static swig_cast_info _swigc__p_bool[] = {  {&_swigt__p_bool, 0, 0, 0},{0, 0, 0,
 static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_const_iterator[] = {  {&_swigt__p_const_iterator, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_const_reference[] = {  {&_swigt__p_const_reference, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_container_t[] = {  {&_swigt__p_container_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_corr_matrix_t[] = {  {&_swigt__p_corr_matrix_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_difference_type[] = {  {&_swigt__p_difference_type, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_double[] = {  {&_swigt__p_double, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_int[] = {  {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
@@ -135058,6 +137044,8 @@ static swig_cast_info _swigc__p_std__vectorT_BasicVector3DT_std__complexT_double
 static swig_cast_info _swigc__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t[] = {  {&_swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator[] = {  {&_swigt__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t[] = {  {&_swigt__p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator[] = {  {&_swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator, 0, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator[] = {  {&_swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t[] = {  {&_swigt__p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t[] = {  {&_swigt__p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t[] = {  {&_swigt__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -135147,6 +137135,7 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_FitSuiteImpl,
   _swigc__p_FitSuiteObjects,
   _swigc__p_FitSuiteStrategies,
+  _swigc__p_Fit__Parameters,
   _swigc__p_FixedBinAxis,
   _swigc__p_FootprintFactorGaussian,
   _swigc__p_FootprintFactorSquare,
@@ -135340,6 +137329,8 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_char,
   _swigc__p_const_iterator,
   _swigc__p_const_reference,
+  _swigc__p_container_t,
+  _swigc__p_corr_matrix_t,
   _swigc__p_difference_type,
   _swigc__p_double,
   _swigc__p_int,
@@ -135383,6 +137374,8 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t,
   _swigc__p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator,
   _swigc__p_std__vectorT_HomogeneousRegion_std__allocatorT_HomogeneousRegion_t_t,
+  _swigc__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator,
+  _swigc__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator,
   _swigc__p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t,
   _swigc__p_std__vectorT_ILayout_const_p_std__allocatorT_ILayout_const_p_t_t,
   _swigc__p_std__vectorT_INode_const_p_std__allocatorT_INode_const_p_t_t,
diff --git a/auto/Wrap/libBornAgainFit.py b/auto/Wrap/libBornAgainFit.py
index 4bf93a03f23d63f7c64d77cdf6fc31ab60a51c59..ab843a33bcbd7b51110398afc7cf5c4d0b3ef914 100644
--- a/auto/Wrap/libBornAgainFit.py
+++ b/auto/Wrap/libBornAgainFit.py
@@ -2209,6 +2209,16 @@ class Parameters(_object):
         return _libBornAgainFit.Parameters_setErrors(self, errors)
 
 
+    def correlationMatrix(self):
+        """correlationMatrix(Parameters self) -> vdouble2d_t"""
+        return _libBornAgainFit.Parameters_correlationMatrix(self)
+
+
+    def setCorrelationMatrix(self, matrix):
+        """setCorrelationMatrix(Parameters self, vdouble2d_t matrix)"""
+        return _libBornAgainFit.Parameters_setCorrelationMatrix(self, matrix)
+
+
     def __getitem__(self, *args):
         """
         __getitem__(Parameters self, std::string name) -> Parameter
@@ -2270,18 +2280,6 @@ class IMinimizer(_object):
         return _libBornAgainFit.IMinimizer_algorithmName(self)
 
 
-    def minimize(self):
-        """
-        minimize(IMinimizer self)
-
-        virtual void IMinimizer::minimize()=0
-
-        run minimization 
-
-        """
-        return _libBornAgainFit.IMinimizer_minimize(self)
-
-
     def minimize_scalar(self, arg2, arg3):
         """
         minimize_scalar(IMinimizer self, fcn_scalar_t arg2, Parameters arg3) -> MinimizerResult
@@ -2314,38 +2312,6 @@ class IMinimizer(_object):
         return _libBornAgainFit.IMinimizer_clear(self)
 
 
-    def setParameters(self, parameters):
-        """
-        setParameters(IMinimizer self, FitParameterSet parameters)
-
-        virtual void IMinimizer::setParameters(const FitParameterSet &parameters)=0
-
-        Sets internal minimizer parameters using external parameter list. 
-
-        """
-        return _libBornAgainFit.IMinimizer_setParameters(self, parameters)
-
-
-    def setObjectiveFunction(self, arg2):
-        """
-        setObjectiveFunction(IMinimizer self, objective_function_t arg2)
-
-        virtual void IMinimizer::setObjectiveFunction(objective_function_t)
-
-        """
-        return _libBornAgainFit.IMinimizer_setObjectiveFunction(self, arg2)
-
-
-    def setGradientFunction(self, arg2, arg3):
-        """
-        setGradientFunction(IMinimizer self, gradient_function_t arg2, int arg3)
-
-        virtual void IMinimizer::setGradientFunction(gradient_function_t, int)
-
-        """
-        return _libBornAgainFit.IMinimizer_setGradientFunction(self, arg2, arg3)
-
-
     def minValue(self):
         """
         minValue(IMinimizer self) -> double
@@ -2358,27 +2324,6 @@ class IMinimizer(_object):
         return _libBornAgainFit.IMinimizer_minValue(self)
 
 
-    def reportOutcome(self):
-        """
-        reportOutcome(IMinimizer self) -> std::string
-
-        virtual std::string IMinimizer::reportOutcome() const =0
-
-        """
-        return _libBornAgainFit.IMinimizer_reportOutcome(self)
-
-
-    def propagateResults(self, *args):
-        """
-        propagateResults(IMinimizer self, FitParameterSet parameters)
-        propagateResults(IMinimizer self, Parameters parameters)
-
-        void IMinimizer::propagateResults(Fit::Parameters &parameters)
-
-        """
-        return _libBornAgainFit.IMinimizer_propagateResults(self, *args)
-
-
     def setOptions(self, options):
         """
         setOptions(IMinimizer self, std::string const & options)
@@ -2393,498 +2338,6 @@ class IMinimizer(_object):
 IMinimizer_swigregister = _libBornAgainFit.IMinimizer_swigregister
 IMinimizer_swigregister(IMinimizer)
 
-class IFitParameter(_object):
-    """
-
-
-    A fittable parameter with value, error, step, and limits.
-
-    C++ includes: IFitParameter.h
-
-    """
-
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, IFitParameter, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, IFitParameter, name)
-    __repr__ = _swig_repr
-
-    def __init__(self, *args):
-        """
-        __init__(IFitParameter self) -> IFitParameter
-        __init__(IFitParameter self, std::string const & name, double value, AttLimits limits, double step=0.0) -> IFitParameter
-        __init__(IFitParameter self, std::string const & name, double value, AttLimits limits) -> IFitParameter
-        __init__(IFitParameter self, std::string const & name, double value) -> IFitParameter
-
-        IFitParameter::IFitParameter(const std::string &name, double value, const AttLimits &limits=AttLimits::limitless(), double step=0.0)
-
-        """
-        this = _libBornAgainFit.new_IFitParameter(*args)
-        try:
-            self.this.append(this)
-        except __builtin__.Exception:
-            self.this = this
-    __swig_destroy__ = _libBornAgainFit.delete_IFitParameter
-    __del__ = lambda self: None
-
-    def clone(self):
-        """
-        clone(IFitParameter self) -> IFitParameter
-
-        IFitParameter * IFitParameter::clone() const 
-
-        """
-        return _libBornAgainFit.IFitParameter_clone(self)
-
-
-    def name(self):
-        """
-        name(IFitParameter self) -> std::string
-
-        std::string IFitParameter::name() const 
-
-        """
-        return _libBornAgainFit.IFitParameter_name(self)
-
-
-    def setName(self, name):
-        """
-        setName(IFitParameter self, std::string const & name) -> IFitParameter
-
-        IFitParameter & IFitParameter::setName(const std::string &name)
-
-        """
-        return _libBornAgainFit.IFitParameter_setName(self, name)
-
-
-    def startValue(self):
-        """
-        startValue(IFitParameter self) -> double
-
-        double IFitParameter::startValue() const 
-
-        """
-        return _libBornAgainFit.IFitParameter_startValue(self)
-
-
-    def setStartValue(self, value):
-        """
-        setStartValue(IFitParameter self, double value)
-
-        void IFitParameter::setStartValue(double value)
-
-        """
-        return _libBornAgainFit.IFitParameter_setStartValue(self, value)
-
-
-    def value(self):
-        """
-        value(IFitParameter self) -> double
-
-        double IFitParameter::value() const 
-
-        """
-        return _libBornAgainFit.IFitParameter_value(self)
-
-
-    def setValue(self, value):
-        """
-        setValue(IFitParameter self, double value)
-
-        void IFitParameter::setValue(double value)
-
-        """
-        return _libBornAgainFit.IFitParameter_setValue(self, value)
-
-
-    def addPattern(self, pattern):
-        """
-        addPattern(IFitParameter self, std::string const & pattern) -> IFitParameter
-
-        IFitParameter & IFitParameter::addPattern(const std::string &pattern)
-
-        """
-        return _libBornAgainFit.IFitParameter_addPattern(self, pattern)
-
-
-    def step(self):
-        """
-        step(IFitParameter self) -> double
-
-        double IFitParameter::step() const 
-
-        """
-        return _libBornAgainFit.IFitParameter_step(self)
-
-
-    def setStep(self, value):
-        """
-        setStep(IFitParameter self, double value) -> IFitParameter
-
-        IFitParameter & IFitParameter::setStep(double value)
-
-        """
-        return _libBornAgainFit.IFitParameter_setStep(self, value)
-
-
-    def error(self):
-        """
-        error(IFitParameter self) -> double
-
-        double IFitParameter::error() const 
-
-        """
-        return _libBornAgainFit.IFitParameter_error(self)
-
-
-    def setError(self, value):
-        """
-        setError(IFitParameter self, double value)
-
-        void IFitParameter::setError(double value)
-
-        """
-        return _libBornAgainFit.IFitParameter_setError(self, value)
-
-
-    def limits(self, *args):
-        """
-        limits(IFitParameter self) -> AttLimits
-        limits(IFitParameter self) -> AttLimits
-
-        AttLimits & IFitParameter::limits()
-
-        """
-        return _libBornAgainFit.IFitParameter_limits(self, *args)
-
-
-    def setLimits(self, limits):
-        """
-        setLimits(IFitParameter self, AttLimits limits) -> IFitParameter
-
-        IFitParameter & IFitParameter::setLimits(const AttLimits &limits)
-
-        """
-        return _libBornAgainFit.IFitParameter_setLimits(self, limits)
-
-
-    def setLowerLimited(self, bound_value):
-        """
-        setLowerLimited(IFitParameter self, double bound_value) -> IFitParameter
-
-        IFitParameter & IFitParameter::setLowerLimited(double bound_value)
-
-        """
-        return _libBornAgainFit.IFitParameter_setLowerLimited(self, bound_value)
-
-
-    def setPositive(self):
-        """
-        setPositive(IFitParameter self) -> IFitParameter
-
-        IFitParameter & IFitParameter::setPositive()
-
-        """
-        return _libBornAgainFit.IFitParameter_setPositive(self)
-
-
-    def setNonnegative(self):
-        """
-        setNonnegative(IFitParameter self) -> IFitParameter
-
-        IFitParameter & IFitParameter::setNonnegative()
-
-        """
-        return _libBornAgainFit.IFitParameter_setNonnegative(self)
-
-
-    def setUpperLimited(self, bound_value):
-        """
-        setUpperLimited(IFitParameter self, double bound_value) -> IFitParameter
-
-        IFitParameter & IFitParameter::setUpperLimited(double bound_value)
-
-        """
-        return _libBornAgainFit.IFitParameter_setUpperLimited(self, bound_value)
-
-
-    def setLimited(self, left_bound_value, right_bound_value):
-        """
-        setLimited(IFitParameter self, double left_bound_value, double right_bound_value) -> IFitParameter
-
-        IFitParameter & IFitParameter::setLimited(double left_bound_value, double right_bound_value)
-
-        """
-        return _libBornAgainFit.IFitParameter_setLimited(self, left_bound_value, right_bound_value)
-
-
-    def setFixed(self):
-        """
-        setFixed(IFitParameter self) -> IFitParameter
-
-        IFitParameter & IFitParameter::setFixed()
-
-        """
-        return _libBornAgainFit.IFitParameter_setFixed(self)
-
-
-    def toString(self):
-        """
-        toString(IFitParameter self) -> std::string
-
-        std::string IFitParameter::toString() const 
-
-        """
-        return _libBornAgainFit.IFitParameter_toString(self)
-
-IFitParameter_swigregister = _libBornAgainFit.IFitParameter_swigregister
-IFitParameter_swigregister(IFitParameter)
-
-class FitParameterSet(_object):
-    """
-
-
-    The set of fit parameters.
-
-    C++ includes: FitParameterSet.h
-
-    """
-
-    __swig_setmethods__ = {}
-    __setattr__ = lambda self, name, value: _swig_setattr(self, FitParameterSet, name, value)
-    __swig_getmethods__ = {}
-    __getattr__ = lambda self, name: _swig_getattr(self, FitParameterSet, name)
-    __repr__ = _swig_repr
-
-    def __init__(self):
-        """
-        __init__(FitParameterSet self) -> FitParameterSet
-
-        FitParameterSet::FitParameterSet()
-
-        """
-        this = _libBornAgainFit.new_FitParameterSet()
-        try:
-            self.this.append(this)
-        except __builtin__.Exception:
-            self.this = this
-    __swig_destroy__ = _libBornAgainFit.delete_FitParameterSet
-    __del__ = lambda self: None
-
-    def clear(self):
-        """
-        clear(FitParameterSet self)
-
-        void FitParameterSet::clear()
-
-        Clears all defined parameters. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_clear(self)
-
-
-    def size(self):
-        """
-        size(FitParameterSet self) -> size_t
-
-        size_t FitParameterSet::size() const
-
-        Returns number of parameters. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_size(self)
-
-
-    def begin(self, *args):
-        """
-        begin(FitParameterSet self) -> FitParameterSet::iterator
-        begin(FitParameterSet self) -> FitParameterSet::const_iterator
-
-        FitParameterSet::const_iterator FitParameterSet::begin() const 
-
-        """
-        return _libBornAgainFit.FitParameterSet_begin(self, *args)
-
-
-    def end(self, *args):
-        """
-        end(FitParameterSet self) -> FitParameterSet::iterator
-        end(FitParameterSet self) -> FitParameterSet::const_iterator
-
-        FitParameterSet::const_iterator FitParameterSet::end() const 
-
-        """
-        return _libBornAgainFit.FitParameterSet_end(self, *args)
-
-
-    def addFitParameter(self, par):
-        """
-        addFitParameter(FitParameterSet self, IFitParameter par)
-
-        void FitParameterSet::addFitParameter(IFitParameter *par)
-
-        Adds fit parameter. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_addFitParameter(self, par)
-
-
-    def fitParameter(self, *args):
-        """
-        fitParameter(FitParameterSet self, std::string const & name) -> IFitParameter
-        fitParameter(FitParameterSet self, std::string const & name) -> IFitParameter
-
-        IFitParameter * FitParameterSet::fitParameter(const std::string &name)
-
-        """
-        return _libBornAgainFit.FitParameterSet_fitParameter(self, *args)
-
-
-    def values(self):
-        """
-        values(FitParameterSet self) -> vdouble1d_t
-
-        std::vector< double > FitParameterSet::values() const
-
-        Returns values of all defined parameters. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_values(self)
-
-
-    def setValues(self, pars_values):
-        """
-        setValues(FitParameterSet self, vdouble1d_t pars_values)
-
-        void FitParameterSet::setValues(const std::vector< double > &pars_values)
-
-        Sets values for all defined parameters. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_setValues(self, pars_values)
-
-
-    def valuesDifferFrom(self, par_values, tolerance=2.0):
-        """
-        valuesDifferFrom(FitParameterSet self, vdouble1d_t par_values, double tolerance=2.0) -> bool
-        valuesDifferFrom(FitParameterSet self, vdouble1d_t par_values) -> bool
-
-        bool FitParameterSet::valuesDifferFrom(const std::vector< double > &par_values, double tolerance=2.0) const
-
-        Returns true if parameters already have the given values. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_valuesDifferFrom(self, par_values, tolerance)
-
-
-    def errors(self):
-        """
-        errors(FitParameterSet self) -> vdouble1d_t
-
-        std::vector< double > FitParameterSet::errors() const
-
-        Returns errors of all defined parameters. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_errors(self)
-
-
-    def setErrors(self, pars_errors):
-        """
-        setErrors(FitParameterSet self, vdouble1d_t pars_errors)
-
-        void FitParameterSet::setErrors(const std::vector< double > &pars_errors)
-
-        Sets errors to all parameters. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_setErrors(self, pars_errors)
-
-
-    def freeFitParameterCount(self):
-        """
-        freeFitParameterCount(FitParameterSet self) -> size_t
-
-        size_t FitParameterSet::freeFitParameterCount() const
-
-        Returns number of free parameters. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_freeFitParameterCount(self)
-
-
-    def fixAll(self):
-        """
-        fixAll(FitParameterSet self)
-
-        void FitParameterSet::fixAll()
-
-        Fix all parameters. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_fixAll(self)
-
-
-    def releaseAll(self):
-        """
-        releaseAll(FitParameterSet self)
-
-        void FitParameterSet::releaseAll()
-
-        Release all parameters. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_releaseAll(self)
-
-
-    def setFixed(self, pars, is_fixed):
-        """
-        setFixed(FitParameterSet self, vector_string_t pars, bool is_fixed)
-
-        void FitParameterSet::setFixed(const std::vector< std::string > &pars, bool is_fixed)
-
-        Set fixed flag for parameters from the list. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_setFixed(self, pars, is_fixed)
-
-
-    def correlationMatrix(self):
-        """
-        correlationMatrix(FitParameterSet self) -> vdouble2d_t
-
-        corr_matrix_t FitParameterSet::correlationMatrix() const 
-
-        """
-        return _libBornAgainFit.FitParameterSet_correlationMatrix(self)
-
-
-    def setCorrelationMatrix(self, matrix):
-        """
-        setCorrelationMatrix(FitParameterSet self, vdouble2d_t matrix)
-
-        void FitParameterSet::setCorrelationMatrix(const corr_matrix_t &matrix)
-
-        Sets resulting correlation matrix. 
-
-        """
-        return _libBornAgainFit.FitParameterSet_setCorrelationMatrix(self, matrix)
-
-
-    def __getitem__(self, *args):
-        """
-        __getitem__(FitParameterSet self, std::string name) -> IFitParameter
-        __getitem__(FitParameterSet self, size_t index) -> IFitParameter
-        """
-        return _libBornAgainFit.FitParameterSet___getitem__(self, *args)
-
-
-    def __iter__(self):
-        return FitParameterSetIterator(self)
-
-FitParameterSet_swigregister = _libBornAgainFit.FitParameterSet_swigregister
-FitParameterSet_swigregister(FitParameterSet)
-
 class MinimizerCatalogue(_object):
     """
 
@@ -3328,6 +2781,7 @@ class Minimizer(_object):
         setMinimizer(Minimizer self, std::string const & minimizerName, std::string const & algorithmName, std::string const & options)
         setMinimizer(Minimizer self, std::string const & minimizerName, std::string const & algorithmName)
         setMinimizer(Minimizer self, std::string const & minimizerName)
+        setMinimizer(Minimizer self, IMinimizer minimizer)
 
         void Minimizer::setMinimizer(const std::string &minimizerName, const std::string &algorithmName="", const std::string &options="")
 
@@ -3368,26 +2822,6 @@ Minimizer_swigregister = _libBornAgainFit.Minimizer_swigregister
 Minimizer_swigregister(Minimizer)
 
 
-class FitParameterSetIterator(object):
-
-    def __init__(self, fitParameters):
-        self.fitParameters = fitParameters
-        self.index = -1
-
-    def __iter__(self):
-        return self
-
-    def next(self):
-        self.index += 1
-        if self.index < self.fitParameters.size():
-            return self.fitParameters[self.index]
-        else:
-            raise StopIteration
-
-    def __next__(self):
-        return self.next()
-
-
 class ParametersIterator(object):
 
     def __init__(self, parameters):
diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp
index 22f1f429dae63fb3344950a0e5dad98f43ea4942..b2f9a3477c205952eb35217d230f4ba855acf9ce 100644
--- a/auto/Wrap/libBornAgainFit_wrap.cpp
+++ b/auto/Wrap/libBornAgainFit_wrap.cpp
@@ -3452,64 +3452,57 @@ namespace Swig {
 /* -------- TYPES TABLE (BEGIN) -------- */
 
 #define SWIGTYPE_p_AttLimits swig_types[0]
-#define SWIGTYPE_p_FitParameterSet swig_types[1]
-#define SWIGTYPE_p_Fit__Minimizer swig_types[2]
-#define SWIGTYPE_p_Fit__MinimizerResult swig_types[3]
-#define SWIGTYPE_p_Fit__Parameter swig_types[4]
-#define SWIGTYPE_p_Fit__Parameters swig_types[5]
-#define SWIGTYPE_p_IFitParameter swig_types[6]
-#define SWIGTYPE_p_IMinimizer swig_types[7]
-#define SWIGTYPE_p_MinimizerCatalogue swig_types[8]
-#define SWIGTYPE_p_MinimizerFactory swig_types[9]
-#define SWIGTYPE_p_MinimizerInfo swig_types[10]
-#define SWIGTYPE_p_PyCallback swig_types[11]
-#define SWIGTYPE_p_RealLimits swig_types[12]
-#define SWIGTYPE_p_allocator_type swig_types[13]
-#define SWIGTYPE_p_char swig_types[14]
-#define SWIGTYPE_p_const_iterator swig_types[15]
-#define SWIGTYPE_p_container_t swig_types[16]
-#define SWIGTYPE_p_corr_matrix_t swig_types[17]
-#define SWIGTYPE_p_difference_type swig_types[18]
-#define SWIGTYPE_p_fcn_residual_t swig_types[19]
-#define SWIGTYPE_p_fcn_scalar_t swig_types[20]
-#define SWIGTYPE_p_gradient_function_t swig_types[21]
-#define SWIGTYPE_p_int swig_types[22]
-#define SWIGTYPE_p_iterator swig_types[23]
-#define SWIGTYPE_p_long_long swig_types[24]
-#define SWIGTYPE_p_objective_function_t swig_types[25]
-#define SWIGTYPE_p_p_PyObject swig_types[26]
-#define SWIGTYPE_p_parameters_t swig_types[27]
-#define SWIGTYPE_p_short swig_types[28]
-#define SWIGTYPE_p_signed_char swig_types[29]
-#define SWIGTYPE_p_size_type swig_types[30]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[31]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[32]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[33]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[34]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[35]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[36]
-#define SWIGTYPE_p_std__invalid_argument swig_types[37]
-#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[38]
-#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[39]
-#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[40]
-#define SWIGTYPE_p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__const_iterator swig_types[41]
-#define SWIGTYPE_p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__iterator swig_types[42]
-#define SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator swig_types[43]
-#define SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator swig_types[44]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[45]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[46]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[47]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[48]
-#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[49]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[50]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[51]
-#define SWIGTYPE_p_unsigned_char swig_types[52]
-#define SWIGTYPE_p_unsigned_int swig_types[53]
-#define SWIGTYPE_p_unsigned_long_long swig_types[54]
-#define SWIGTYPE_p_unsigned_short swig_types[55]
-#define SWIGTYPE_p_value_type swig_types[56]
-static swig_type_info *swig_types[58];
-static swig_module_info swig_module = {swig_types, 57, 0, 0, 0, 0};
+#define SWIGTYPE_p_Fit__Minimizer swig_types[1]
+#define SWIGTYPE_p_Fit__MinimizerResult swig_types[2]
+#define SWIGTYPE_p_Fit__Parameter swig_types[3]
+#define SWIGTYPE_p_Fit__Parameters swig_types[4]
+#define SWIGTYPE_p_IMinimizer swig_types[5]
+#define SWIGTYPE_p_MinimizerCatalogue swig_types[6]
+#define SWIGTYPE_p_MinimizerFactory swig_types[7]
+#define SWIGTYPE_p_MinimizerInfo swig_types[8]
+#define SWIGTYPE_p_PyCallback swig_types[9]
+#define SWIGTYPE_p_RealLimits swig_types[10]
+#define SWIGTYPE_p_allocator_type swig_types[11]
+#define SWIGTYPE_p_char swig_types[12]
+#define SWIGTYPE_p_const_iterator swig_types[13]
+#define SWIGTYPE_p_corr_matrix_t swig_types[14]
+#define SWIGTYPE_p_difference_type swig_types[15]
+#define SWIGTYPE_p_fcn_residual_t swig_types[16]
+#define SWIGTYPE_p_fcn_scalar_t swig_types[17]
+#define SWIGTYPE_p_int swig_types[18]
+#define SWIGTYPE_p_iterator swig_types[19]
+#define SWIGTYPE_p_long_long swig_types[20]
+#define SWIGTYPE_p_p_PyObject swig_types[21]
+#define SWIGTYPE_p_parameters_t swig_types[22]
+#define SWIGTYPE_p_short swig_types[23]
+#define SWIGTYPE_p_signed_char swig_types[24]
+#define SWIGTYPE_p_size_type swig_types[25]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[26]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[27]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[28]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[29]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[30]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[31]
+#define SWIGTYPE_p_std__invalid_argument swig_types[32]
+#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[33]
+#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[34]
+#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[35]
+#define SWIGTYPE_p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__const_iterator swig_types[36]
+#define SWIGTYPE_p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__iterator swig_types[37]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[38]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[39]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[40]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[41]
+#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[42]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[43]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[44]
+#define SWIGTYPE_p_unsigned_char swig_types[45]
+#define SWIGTYPE_p_unsigned_int swig_types[46]
+#define SWIGTYPE_p_unsigned_long_long swig_types[47]
+#define SWIGTYPE_p_unsigned_short swig_types[48]
+#define SWIGTYPE_p_value_type swig_types[49]
+static swig_type_info *swig_types[51];
+static swig_module_info swig_module = {swig_types, 50, 0, 0, 0, 0};
 #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
 #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
 
@@ -6290,8 +6283,6 @@ SWIGINTERN void std_vector_Sl_std_string_Sg__insert__SWIG_1(std::vector< std::st
 #include "AttLimits.h"
 #include "Parameter.h"
 #include "Parameters.h"
-#include "IFitParameter.h"
-#include "FitParameterSet.h"
 #include "IMinimizer.h"
 #include "MinimizerCatalogue.h"
 #include "MinimizerFactory.h"
@@ -6320,12 +6311,6 @@ SWIGINTERN Fit::Parameter const &Fit_Parameters___getitem____SWIG_0(Fit::Paramet
 SWIGINTERN Fit::Parameter const &Fit_Parameters___getitem____SWIG_1(Fit::Parameters const *self,size_t index){
         return (*(self))[index];
     }
-SWIGINTERN IFitParameter const *FitParameterSet___getitem____SWIG_0(FitParameterSet const *self,std::string name){
-        return (*(self))[name];
-    }
-SWIGINTERN IFitParameter const *FitParameterSet___getitem____SWIG_1(FitParameterSet const *self,size_t index){
-        return (*(self))[index];
-    }
 
 
 /* ---------------------------------------------------
@@ -20779,6 +20764,65 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_Parameters_correlationMatrix(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Fit::Parameters *arg1 = (Fit::Parameters *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  Fit::Parameters::corr_matrix_t result;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:Parameters_correlationMatrix",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Fit__Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Parameters_correlationMatrix" "', argument " "1"" of type '" "Fit::Parameters const *""'"); 
+  }
+  arg1 = reinterpret_cast< Fit::Parameters * >(argp1);
+  result = ((Fit::Parameters const *)arg1)->correlationMatrix();
+  resultobj = swig::from(static_cast< std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_Parameters_setCorrelationMatrix(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Fit::Parameters *arg1 = (Fit::Parameters *) 0 ;
+  Fit::Parameters::corr_matrix_t *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:Parameters_setCorrelationMatrix",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Fit__Parameters, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Parameters_setCorrelationMatrix" "', argument " "1"" of type '" "Fit::Parameters *""'"); 
+  }
+  arg1 = reinterpret_cast< Fit::Parameters * >(argp1);
+  {
+    std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *ptr = (std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *)0;
+    res2 = swig::asptr(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Parameters_setCorrelationMatrix" "', argument " "2"" of type '" "Fit::Parameters::corr_matrix_t const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Parameters_setCorrelationMatrix" "', argument " "2"" of type '" "Fit::Parameters::corr_matrix_t const &""'"); 
+    }
+    arg2 = ptr;
+  }
+  (arg1)->setCorrelationMatrix((Fit::Parameters::corr_matrix_t 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_Parameters___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   Fit::Parameters *arg1 = (Fit::Parameters *) 0 ;
@@ -20986,27 +21030,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IMinimizer_minimize(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IMinimizer *arg1 = (IMinimizer *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IMinimizer_minimize",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IMinimizer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_minimize" "', argument " "1"" of type '" "IMinimizer *""'"); 
-  }
-  arg1 = reinterpret_cast< IMinimizer * >(argp1);
-  (arg1)->minimize();
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_IMinimizer_minimize_scalar(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IMinimizer *arg1 = (IMinimizer *) 0 ;
@@ -21140,2325 +21163,215 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IMinimizer_setParameters(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IMinimizer_minValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IMinimizer *arg1 = (IMinimizer *) 0 ;
-  FitParameterSet *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
   PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
+  double result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:IMinimizer_setParameters",&obj0,&obj1)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:IMinimizer_minValue",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IMinimizer, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_setParameters" "', argument " "1"" of type '" "IMinimizer *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_minValue" "', argument " "1"" of type '" "IMinimizer const *""'"); 
   }
   arg1 = reinterpret_cast< IMinimizer * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_FitParameterSet,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IMinimizer_setParameters" "', argument " "2"" of type '" "FitParameterSet const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IMinimizer_setParameters" "', argument " "2"" of type '" "FitParameterSet const &""'"); 
-  }
-  arg2 = reinterpret_cast< FitParameterSet * >(argp2);
-  (arg1)->setParameters((FitParameterSet const &)*arg2);
-  resultobj = SWIG_Py_Void();
+  result = (double)((IMinimizer const *)arg1)->minValue();
+  resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_IMinimizer_setObjectiveFunction(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IMinimizer_setOptions(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IMinimizer *arg1 = (IMinimizer *) 0 ;
-  objective_function_t arg2 ;
+  std::string *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:IMinimizer_setObjectiveFunction",&obj0,&obj1)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OO:IMinimizer_setOptions",&obj0,&obj1)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IMinimizer, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_setObjectiveFunction" "', argument " "1"" of type '" "IMinimizer *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_setOptions" "', argument " "1"" of type '" "IMinimizer *""'"); 
   }
   arg1 = reinterpret_cast< IMinimizer * >(argp1);
   {
-    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_objective_function_t,  0  | 0);
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
     if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IMinimizer_setObjectiveFunction" "', argument " "2"" of type '" "objective_function_t""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IMinimizer_setObjectiveFunction" "', argument " "2"" of type '" "objective_function_t""'");
-    } else {
-      objective_function_t * temp = reinterpret_cast< objective_function_t * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IMinimizer_setOptions" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IMinimizer_setOptions" "', argument " "2"" of type '" "std::string const &""'"); 
     }
+    arg2 = ptr;
   }
-  (arg1)->setObjectiveFunction(arg2);
+  (arg1)->setOptions((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_IMinimizer_setGradientFunction(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *IMinimizer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *obj;
+  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
+  SWIG_TypeNewClientData(SWIGTYPE_p_IMinimizer, SWIG_NewClientData(obj));
+  return SWIG_Py_Void();
+}
+
+SWIGINTERN PyObject *_wrap_new_MinimizerCatalogue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IMinimizer *arg1 = (IMinimizer *) 0 ;
-  gradient_function_t arg2 ;
-  int arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 ;
-  int res2 = 0 ;
-  int val3 ;
-  int ecode3 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
+  MinimizerCatalogue *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOO:IMinimizer_setGradientFunction",&obj0,&obj1,&obj2)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IMinimizer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_setGradientFunction" "', argument " "1"" of type '" "IMinimizer *""'"); 
-  }
-  arg1 = reinterpret_cast< IMinimizer * >(argp1);
-  {
-    res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_gradient_function_t,  0  | 0);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IMinimizer_setGradientFunction" "', argument " "2"" of type '" "gradient_function_t""'"); 
-    }  
-    if (!argp2) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IMinimizer_setGradientFunction" "', argument " "2"" of type '" "gradient_function_t""'");
-    } else {
-      gradient_function_t * temp = reinterpret_cast< gradient_function_t * >(argp2);
-      arg2 = *temp;
-      if (SWIG_IsNewObj(res2)) delete temp;
-    }
-  }
-  ecode3 = SWIG_AsVal_int(obj2, &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "IMinimizer_setGradientFunction" "', argument " "3"" of type '" "int""'");
-  } 
-  arg3 = static_cast< int >(val3);
-  (arg1)->setGradientFunction(arg2,arg3);
-  resultobj = SWIG_Py_Void();
+  if (!PyArg_ParseTuple(args,(char *)":new_MinimizerCatalogue")) SWIG_fail;
+  result = (MinimizerCatalogue *)new MinimizerCatalogue();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MinimizerCatalogue, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_IMinimizer_minValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MinimizerCatalogue_toString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IMinimizer *arg1 = (IMinimizer *) 0 ;
+  MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  double result;
+  std::string result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:IMinimizer_minValue",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IMinimizer, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:MinimizerCatalogue_toString",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_minValue" "', argument " "1"" of type '" "IMinimizer const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MinimizerCatalogue_toString" "', argument " "1"" of type '" "MinimizerCatalogue const *""'"); 
   }
-  arg1 = reinterpret_cast< IMinimizer * >(argp1);
-  result = (double)((IMinimizer const *)arg1)->minValue();
-  resultobj = SWIG_From_double(static_cast< double >(result));
+  arg1 = reinterpret_cast< MinimizerCatalogue * >(argp1);
+  result = ((MinimizerCatalogue const *)arg1)->toString();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_IMinimizer_reportOutcome(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MinimizerCatalogue_minimizerNames(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IMinimizer *arg1 = (IMinimizer *) 0 ;
+  MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  std::string result;
+  std::vector< std::string,std::allocator< std::string > > result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:IMinimizer_reportOutcome",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IMinimizer, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:MinimizerCatalogue_minimizerNames",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_reportOutcome" "', argument " "1"" of type '" "IMinimizer const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MinimizerCatalogue_minimizerNames" "', argument " "1"" of type '" "MinimizerCatalogue const *""'"); 
   }
-  arg1 = reinterpret_cast< IMinimizer * >(argp1);
-  result = ((IMinimizer const *)arg1)->reportOutcome();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  arg1 = reinterpret_cast< MinimizerCatalogue * >(argp1);
+  result = ((MinimizerCatalogue const *)arg1)->minimizerNames();
+  resultobj = swig::from(static_cast< std::vector< std::string,std::allocator< std::string > > >(result));
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_IMinimizer_propagateResults__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MinimizerCatalogue_algorithmNames(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IMinimizer *arg1 = (IMinimizer *) 0 ;
-  FitParameterSet *arg2 = 0 ;
+  MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ;
+  std::string *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
+  std::vector< std::string,std::allocator< std::string > > result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:IMinimizer_propagateResults",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IMinimizer, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:MinimizerCatalogue_algorithmNames",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_propagateResults" "', argument " "1"" of type '" "IMinimizer *""'"); 
-  }
-  arg1 = reinterpret_cast< IMinimizer * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_FitParameterSet,  0 );
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IMinimizer_propagateResults" "', argument " "2"" of type '" "FitParameterSet &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MinimizerCatalogue_algorithmNames" "', argument " "1"" of type '" "MinimizerCatalogue const *""'"); 
   }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IMinimizer_propagateResults" "', argument " "2"" of type '" "FitParameterSet &""'"); 
+  arg1 = reinterpret_cast< MinimizerCatalogue * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MinimizerCatalogue_algorithmNames" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MinimizerCatalogue_algorithmNames" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    arg2 = ptr;
   }
-  arg2 = reinterpret_cast< FitParameterSet * >(argp2);
-  (arg1)->propagateResults(*arg2);
-  resultobj = SWIG_Py_Void();
+  result = ((MinimizerCatalogue const *)arg1)->algorithmNames((std::string const &)*arg2);
+  resultobj = swig::from(static_cast< std::vector< std::string,std::allocator< std::string > > >(result));
+  if (SWIG_IsNewObj(res2)) delete arg2;
   return resultobj;
 fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_IMinimizer_propagateResults__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_MinimizerCatalogue_algorithmDescriptions(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  IMinimizer *arg1 = (IMinimizer *) 0 ;
-  Fit::Parameters *arg2 = 0 ;
+  MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ;
+  std::string *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
+  std::vector< std::string,std::allocator< std::string > > result;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:IMinimizer_propagateResults",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IMinimizer, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:MinimizerCatalogue_algorithmDescriptions",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_propagateResults" "', argument " "1"" of type '" "IMinimizer *""'"); 
-  }
-  arg1 = reinterpret_cast< IMinimizer * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_Fit__Parameters,  0 );
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IMinimizer_propagateResults" "', argument " "2"" of type '" "Fit::Parameters &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MinimizerCatalogue_algorithmDescriptions" "', argument " "1"" of type '" "MinimizerCatalogue const *""'"); 
   }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IMinimizer_propagateResults" "', argument " "2"" of type '" "Fit::Parameters &""'"); 
+  arg1 = reinterpret_cast< MinimizerCatalogue * >(argp1);
+  {
+    std::string *ptr = (std::string *)0;
+    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MinimizerCatalogue_algorithmDescriptions" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    if (!ptr) {
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MinimizerCatalogue_algorithmDescriptions" "', argument " "2"" of type '" "std::string const &""'"); 
+    }
+    arg2 = ptr;
   }
-  arg2 = reinterpret_cast< Fit::Parameters * >(argp2);
-  (arg1)->propagateResults(*arg2);
-  resultobj = SWIG_Py_Void();
+  result = ((MinimizerCatalogue const *)arg1)->algorithmDescriptions((std::string const &)*arg2);
+  resultobj = swig::from(static_cast< std::vector< std::string,std::allocator< std::string > > >(result));
+  if (SWIG_IsNewObj(res2)) delete arg2;
   return resultobj;
 fail:
+  if (SWIG_IsNewObj(res2)) delete arg2;
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_IMinimizer_propagateResults(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[3] = {
-    0
-  };
-  Py_ssize_t ii;
-  
-  if (!PyTuple_Check(args)) SWIG_fail;
-  argc = args ? PyObject_Length(args) : 0;
-  for (ii = 0; (ii < 2) && (ii < argc); ii++) {
-    argv[ii] = PyTuple_GET_ITEM(args,ii);
-  }
-  if (argc == 2) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_IMinimizer, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      void *vptr = 0;
-      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        return _wrap_IMinimizer_propagateResults__SWIG_0(self, args);
-      }
-    }
-  }
-  if (argc == 2) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_IMinimizer, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      void *vptr = 0;
-      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_Fit__Parameters, 0);
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        return _wrap_IMinimizer_propagateResults__SWIG_1(self, args);
-      }
-    }
-  }
-  
-fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'IMinimizer_propagateResults'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    IMinimizer::propagateResults(FitParameterSet &)\n"
-    "    IMinimizer::propagateResults(Fit::Parameters &)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_IMinimizer_setOptions(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IMinimizer *arg1 = (IMinimizer *) 0 ;
-  std::string *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IMinimizer_setOptions",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IMinimizer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_setOptions" "', argument " "1"" of type '" "IMinimizer *""'"); 
-  }
-  arg1 = reinterpret_cast< IMinimizer * >(argp1);
-  {
-    std::string *ptr = (std::string *)0;
-    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IMinimizer_setOptions" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IMinimizer_setOptions" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  (arg1)->setOptions((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 *IMinimizer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_IMinimizer, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *_wrap_new_IFitParameter__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)":new_IFitParameter")) SWIG_fail;
-  result = (IFitParameter *)new IFitParameter();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_IFitParameter__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  std::string *arg1 = 0 ;
-  double arg2 ;
-  AttLimits *arg3 = 0 ;
-  double arg4 ;
-  int res1 = SWIG_OLDOBJ ;
-  double val2 ;
-  int ecode2 = 0 ;
-  void *argp3 = 0 ;
-  int res3 = 0 ;
-  double val4 ;
-  int ecode4 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
-  PyObject * obj3 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OOOO:new_IFitParameter",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
-  {
-    std::string *ptr = (std::string *)0;
-    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    arg1 = ptr;
-  }
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_IFitParameter" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_AttLimits,  0  | 0);
-  if (!SWIG_IsOK(res3)) {
-    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_IFitParameter" "', argument " "3"" of type '" "AttLimits const &""'"); 
-  }
-  if (!argp3) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFitParameter" "', argument " "3"" of type '" "AttLimits const &""'"); 
-  }
-  arg3 = reinterpret_cast< AttLimits * >(argp3);
-  ecode4 = SWIG_AsVal_double(obj3, &val4);
-  if (!SWIG_IsOK(ecode4)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "new_IFitParameter" "', argument " "4"" of type '" "double""'");
-  } 
-  arg4 = static_cast< double >(val4);
-  result = (IFitParameter *)new IFitParameter((std::string const &)*arg1,arg2,(AttLimits const &)*arg3,arg4);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, SWIG_POINTER_NEW |  0 );
-  if (SWIG_IsNewObj(res1)) delete arg1;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res1)) delete arg1;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_IFitParameter__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  std::string *arg1 = 0 ;
-  double arg2 ;
-  AttLimits *arg3 = 0 ;
-  int res1 = SWIG_OLDOBJ ;
-  double val2 ;
-  int ecode2 = 0 ;
-  void *argp3 = 0 ;
-  int res3 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OOO:new_IFitParameter",&obj0,&obj1,&obj2)) SWIG_fail;
-  {
-    std::string *ptr = (std::string *)0;
-    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    arg1 = ptr;
-  }
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_IFitParameter" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  res3 = SWIG_ConvertPtr(obj2, &argp3, SWIGTYPE_p_AttLimits,  0  | 0);
-  if (!SWIG_IsOK(res3)) {
-    SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_IFitParameter" "', argument " "3"" of type '" "AttLimits const &""'"); 
-  }
-  if (!argp3) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFitParameter" "', argument " "3"" of type '" "AttLimits const &""'"); 
-  }
-  arg3 = reinterpret_cast< AttLimits * >(argp3);
-  result = (IFitParameter *)new IFitParameter((std::string const &)*arg1,arg2,(AttLimits const &)*arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, SWIG_POINTER_NEW |  0 );
-  if (SWIG_IsNewObj(res1)) delete arg1;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res1)) delete arg1;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_IFitParameter__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  std::string *arg1 = 0 ;
-  double arg2 ;
-  int res1 = SWIG_OLDOBJ ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:new_IFitParameter",&obj0,&obj1)) SWIG_fail;
-  {
-    std::string *ptr = (std::string *)0;
-    res1 = SWIG_AsPtr_std_string(obj0, &ptr);
-    if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_IFitParameter" "', argument " "1"" of type '" "std::string const &""'"); 
-    }
-    arg1 = ptr;
-  }
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "new_IFitParameter" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (IFitParameter *)new IFitParameter((std::string const &)*arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, SWIG_POINTER_NEW |  0 );
-  if (SWIG_IsNewObj(res1)) delete arg1;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res1)) delete arg1;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_new_IFitParameter(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[5] = {
-    0
-  };
-  Py_ssize_t ii;
-  
-  if (!PyTuple_Check(args)) SWIG_fail;
-  argc = args ? PyObject_Length(args) : 0;
-  for (ii = 0; (ii < 4) && (ii < argc); ii++) {
-    argv[ii] = PyTuple_GET_ITEM(args,ii);
-  }
-  if (argc == 0) {
-    return _wrap_new_IFitParameter__SWIG_0(self, args);
-  }
-  if (argc == 2) {
-    int _v;
-    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_double(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        return _wrap_new_IFitParameter__SWIG_3(self, args);
-      }
-    }
-  }
-  if (argc == 3) {
-    int _v;
-    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_double(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_AttLimits, 0);
-        _v = SWIG_CheckState(res);
-        if (_v) {
-          return _wrap_new_IFitParameter__SWIG_2(self, args);
-        }
-      }
-    }
-  }
-  if (argc == 4) {
-    int _v;
-    int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_double(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        int res = SWIG_ConvertPtr(argv[2], 0, SWIGTYPE_p_AttLimits, 0);
-        _v = SWIG_CheckState(res);
-        if (_v) {
-          {
-            int res = SWIG_AsVal_double(argv[3], NULL);
-            _v = SWIG_CheckState(res);
-          }
-          if (_v) {
-            return _wrap_new_IFitParameter__SWIG_1(self, args);
-          }
-        }
-      }
-    }
-  }
-  
-fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_IFitParameter'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    IFitParameter::IFitParameter()\n"
-    "    IFitParameter::IFitParameter(std::string const &,double,AttLimits const &,double)\n"
-    "    IFitParameter::IFitParameter(std::string const &,double,AttLimits const &)\n"
-    "    IFitParameter::IFitParameter(std::string const &,double)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_IFitParameter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_IFitParameter",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IFitParameter" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_clone",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_clone" "', argument " "1"" of type '" "IFitParameter const *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = (IFitParameter *)((IFitParameter const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_name(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  std::string result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_name",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_name" "', argument " "1"" of type '" "IFitParameter const *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = ((IFitParameter const *)arg1)->name();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setName(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  std::string *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setName",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setName" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  {
-    std::string *ptr = (std::string *)0;
-    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFitParameter_setName" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFitParameter_setName" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  result = (IFitParameter *) &(arg1)->setName((std::string const &)*arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_startValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  double result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_startValue",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_startValue" "', argument " "1"" of type '" "IFitParameter const *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = (double)((IFitParameter const *)arg1)->startValue();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setStartValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setStartValue",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setStartValue" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setStartValue" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  (arg1)->setStartValue(arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_value(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  double result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_value",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_value" "', argument " "1"" of type '" "IFitParameter const *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = (double)((IFitParameter const *)arg1)->value();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setValue",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setValue" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setValue" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  (arg1)->setValue(arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_addPattern(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  std::string *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_addPattern",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_addPattern" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  {
-    std::string *ptr = (std::string *)0;
-    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFitParameter_addPattern" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFitParameter_addPattern" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  result = (IFitParameter *) &(arg1)->addPattern((std::string const &)*arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_step(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  double result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_step",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_step" "', argument " "1"" of type '" "IFitParameter const *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = (double)((IFitParameter const *)arg1)->step();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setStep(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setStep",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setStep" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setStep" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (IFitParameter *) &(arg1)->setStep(arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_error(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  double result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_error",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_error" "', argument " "1"" of type '" "IFitParameter const *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = (double)((IFitParameter const *)arg1)->error();
-  resultobj = SWIG_From_double(static_cast< double >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setError(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setError",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setError" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setError" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  (arg1)->setError(arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_limits__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  AttLimits *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_limits",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_limits" "', argument " "1"" of type '" "IFitParameter const *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = (AttLimits *) &((IFitParameter const *)arg1)->limits();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AttLimits, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_limits__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  AttLimits *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_limits",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_limits" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = (AttLimits *) &(arg1)->limits();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AttLimits, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_limits(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[2] = {
-    0
-  };
-  Py_ssize_t ii;
-  
-  if (!PyTuple_Check(args)) SWIG_fail;
-  argc = args ? PyObject_Length(args) : 0;
-  for (ii = 0; (ii < 1) && (ii < argc); ii++) {
-    argv[ii] = PyTuple_GET_ITEM(args,ii);
-  }
-  if (argc == 1) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_IFitParameter, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_IFitParameter_limits__SWIG_1(self, args);
-    }
-  }
-  if (argc == 1) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_IFitParameter, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_IFitParameter_limits__SWIG_0(self, args);
-    }
-  }
-  
-fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'IFitParameter_limits'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    IFitParameter::limits() const\n"
-    "    IFitParameter::limits()\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setLimits(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  AttLimits *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setLimits",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setLimits" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_AttLimits,  0  | 0);
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "IFitParameter_setLimits" "', argument " "2"" of type '" "AttLimits const &""'"); 
-  }
-  if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "IFitParameter_setLimits" "', argument " "2"" of type '" "AttLimits const &""'"); 
-  }
-  arg2 = reinterpret_cast< AttLimits * >(argp2);
-  result = (IFitParameter *) &(arg1)->setLimits((AttLimits const &)*arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setLowerLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setLowerLimited",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setLowerLimited" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setLowerLimited" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (IFitParameter *) &(arg1)->setLowerLimited(arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setPositive(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_setPositive",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setPositive" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = (IFitParameter *) &(arg1)->setPositive();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setNonnegative(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_setNonnegative",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setNonnegative" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = (IFitParameter *) &(arg1)->setNonnegative();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setUpperLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  double arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:IFitParameter_setUpperLimited",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setUpperLimited" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setUpperLimited" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  result = (IFitParameter *) &(arg1)->setUpperLimited(arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setLimited(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  double arg2 ;
-  double arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  double val2 ;
-  int ecode2 = 0 ;
-  double val3 ;
-  int ecode3 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OOO:IFitParameter_setLimited",&obj0,&obj1,&obj2)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setLimited" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  ecode2 = SWIG_AsVal_double(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "IFitParameter_setLimited" "', argument " "2"" of type '" "double""'");
-  } 
-  arg2 = static_cast< double >(val2);
-  ecode3 = SWIG_AsVal_double(obj2, &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "IFitParameter_setLimited" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (IFitParameter *) &(arg1)->setLimited(arg2,arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_setFixed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_setFixed",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_setFixed" "', argument " "1"" of type '" "IFitParameter *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = (IFitParameter *) &(arg1)->setFixed();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_IFitParameter_toString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IFitParameter *arg1 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  std::string result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitParameter_toString",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitParameter_toString" "', argument " "1"" of type '" "IFitParameter const *""'"); 
-  }
-  arg1 = reinterpret_cast< IFitParameter * >(argp1);
-  result = ((IFitParameter const *)arg1)->toString();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *IFitParameter_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_IFitParameter, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *_wrap_new_FitParameterSet(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)":new_FitParameterSet")) SWIG_fail;
-  result = (FitParameterSet *)new FitParameterSet();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FitParameterSet, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_delete_FitParameterSet(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_FitParameterSet",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, SWIG_POINTER_DISOWN |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_FitParameterSet" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_clear(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_clear",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_clear" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  (arg1)->clear();
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_size(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  size_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_size",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_size" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  result = ((FitParameterSet const *)arg1)->size();
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_begin__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  SwigValueWrapper< std::vector< IFitParameter *,std::allocator< IFitParameter * > >::iterator > result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_begin",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_begin" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  result = (arg1)->begin();
-  resultobj = SWIG_NewPointerObj((new FitParameterSet::iterator(static_cast< const FitParameterSet::iterator& >(result))), SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_begin__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  SwigValueWrapper< std::vector< IFitParameter *,std::allocator< IFitParameter * > >::const_iterator > result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_begin",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_begin" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  result = ((FitParameterSet const *)arg1)->begin();
-  resultobj = SWIG_NewPointerObj((new FitParameterSet::const_iterator(static_cast< const FitParameterSet::const_iterator& >(result))), SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_begin(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[2] = {
-    0
-  };
-  Py_ssize_t ii;
-  
-  if (!PyTuple_Check(args)) SWIG_fail;
-  argc = args ? PyObject_Length(args) : 0;
-  for (ii = 0; (ii < 1) && (ii < argc); ii++) {
-    argv[ii] = PyTuple_GET_ITEM(args,ii);
-  }
-  if (argc == 1) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_FitParameterSet_begin__SWIG_0(self, args);
-    }
-  }
-  if (argc == 1) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_FitParameterSet_begin__SWIG_1(self, args);
-    }
-  }
-  
-fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitParameterSet_begin'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    FitParameterSet::begin()\n"
-    "    FitParameterSet::begin() const\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_end__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  SwigValueWrapper< std::vector< IFitParameter *,std::allocator< IFitParameter * > >::iterator > result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_end",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_end" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  result = (arg1)->end();
-  resultobj = SWIG_NewPointerObj((new FitParameterSet::iterator(static_cast< const FitParameterSet::iterator& >(result))), SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_end__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  SwigValueWrapper< std::vector< IFitParameter *,std::allocator< IFitParameter * > >::const_iterator > result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_end",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_end" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  result = ((FitParameterSet const *)arg1)->end();
-  resultobj = SWIG_NewPointerObj((new FitParameterSet::const_iterator(static_cast< const FitParameterSet::const_iterator& >(result))), SWIGTYPE_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator, SWIG_POINTER_OWN |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_end(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[2] = {
-    0
-  };
-  Py_ssize_t ii;
-  
-  if (!PyTuple_Check(args)) SWIG_fail;
-  argc = args ? PyObject_Length(args) : 0;
-  for (ii = 0; (ii < 1) && (ii < argc); ii++) {
-    argv[ii] = PyTuple_GET_ITEM(args,ii);
-  }
-  if (argc == 1) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_FitParameterSet_end__SWIG_0(self, args);
-    }
-  }
-  if (argc == 1) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_FitParameterSet_end__SWIG_1(self, args);
-    }
-  }
-  
-fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitParameterSet_end'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    FitParameterSet::end()\n"
-    "    FitParameterSet::end() const\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_addFitParameter(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  IFitParameter *arg2 = (IFitParameter *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  void *argp2 = 0 ;
-  int res2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_addFitParameter",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_addFitParameter" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_addFitParameter" "', argument " "2"" of type '" "IFitParameter *""'"); 
-  }
-  arg2 = reinterpret_cast< IFitParameter * >(argp2);
-  (arg1)->addFitParameter(arg2);
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_fitParameter__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  std::string *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_fitParameter",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_fitParameter" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  {
-    std::string *ptr = (std::string *)0;
-    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_fitParameter" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_fitParameter" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  result = (IFitParameter *)((FitParameterSet const *)arg1)->fitParameter((std::string const &)*arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_fitParameter__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  std::string *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_fitParameter",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_fitParameter" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  {
-    std::string *ptr = (std::string *)0;
-    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_fitParameter" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_fitParameter" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  result = (IFitParameter *)(arg1)->fitParameter((std::string const &)*arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_fitParameter(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[3] = {
-    0
-  };
-  Py_ssize_t ii;
-  
-  if (!PyTuple_Check(args)) SWIG_fail;
-  argc = args ? PyObject_Length(args) : 0;
-  for (ii = 0; (ii < 2) && (ii < argc); ii++) {
-    argv[ii] = PyTuple_GET_ITEM(args,ii);
-  }
-  if (argc == 2) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        return _wrap_FitParameterSet_fitParameter__SWIG_1(self, args);
-      }
-    }
-  }
-  if (argc == 2) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        return _wrap_FitParameterSet_fitParameter__SWIG_0(self, args);
-      }
-    }
-  }
-  
-fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitParameterSet_fitParameter'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    FitParameterSet::fitParameter(std::string const &) const\n"
-    "    FitParameterSet::fitParameter(std::string const &)\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_values(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  std::vector< double,std::allocator< double > > result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_values",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_values" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  result = ((FitParameterSet const *)arg1)->values();
-  resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_setValues(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  std::vector< double,std::allocator< double > > *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_setValues",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_setValues" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    res2 = swig::asptr(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_setValues" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_setValues" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  (arg1)->setValues((std::vector< double,std::allocator< double > > 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_FitParameterSet_valuesDifferFrom__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  std::vector< double,std::allocator< double > > *arg2 = 0 ;
-  double arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  double val3 ;
-  int ecode3 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
-  bool result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OOO:FitParameterSet_valuesDifferFrom",&obj0,&obj1,&obj2)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    res2 = swig::asptr(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  ecode3 = SWIG_AsVal_double(obj2, &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "3"" of type '" "double""'");
-  } 
-  arg3 = static_cast< double >(val3);
-  result = (bool)((FitParameterSet const *)arg1)->valuesDifferFrom((std::vector< double,std::allocator< double > > const &)*arg2,arg3);
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_valuesDifferFrom__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  std::vector< double,std::allocator< double > > *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  bool result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_valuesDifferFrom",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    res2 = swig::asptr(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_valuesDifferFrom" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  result = (bool)((FitParameterSet const *)arg1)->valuesDifferFrom((std::vector< double,std::allocator< double > > const &)*arg2);
-  resultobj = SWIG_From_bool(static_cast< bool >(result));
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_valuesDifferFrom(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[4] = {
-    0
-  };
-  Py_ssize_t ii;
-  
-  if (!PyTuple_Check(args)) SWIG_fail;
-  argc = args ? PyObject_Length(args) : 0;
-  for (ii = 0; (ii < 3) && (ii < argc); ii++) {
-    argv[ii] = PyTuple_GET_ITEM(args,ii);
-  }
-  if (argc == 2) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      int res = swig::asptr(argv[1], (std::vector< double,std::allocator< double > >**)(0));
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        return _wrap_FitParameterSet_valuesDifferFrom__SWIG_1(self, args);
-      }
-    }
-  }
-  if (argc == 3) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      int res = swig::asptr(argv[1], (std::vector< double,std::allocator< double > >**)(0));
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        {
-          int res = SWIG_AsVal_double(argv[2], NULL);
-          _v = SWIG_CheckState(res);
-        }
-        if (_v) {
-          return _wrap_FitParameterSet_valuesDifferFrom__SWIG_0(self, args);
-        }
-      }
-    }
-  }
-  
-fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitParameterSet_valuesDifferFrom'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    FitParameterSet::valuesDifferFrom(std::vector< double,std::allocator< double > > const &,double) const\n"
-    "    FitParameterSet::valuesDifferFrom(std::vector< double,std::allocator< double > > const &) const\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_errors(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  std::vector< double,std::allocator< double > > result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_errors",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_errors" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  result = ((FitParameterSet const *)arg1)->errors();
-  resultobj = swig::from(static_cast< std::vector< double,std::allocator< double > > >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_setErrors(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  std::vector< double,std::allocator< double > > *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_setErrors",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_setErrors" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  {
-    std::vector< double,std::allocator< double > > *ptr = (std::vector< double,std::allocator< double > > *)0;
-    res2 = swig::asptr(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_setErrors" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_setErrors" "', argument " "2"" of type '" "std::vector< double,std::allocator< double > > const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  (arg1)->setErrors((std::vector< double,std::allocator< double > > 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_FitParameterSet_freeFitParameterCount(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  size_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_freeFitParameterCount",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_freeFitParameterCount" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  result = ((FitParameterSet const *)arg1)->freeFitParameterCount();
-  resultobj = SWIG_From_size_t(static_cast< size_t >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_fixAll(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_fixAll",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_fixAll" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  (arg1)->fixAll();
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_releaseAll(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_releaseAll",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_releaseAll" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  (arg1)->releaseAll();
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_setFixed(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  std::vector< std::string,std::allocator< std::string > > *arg2 = 0 ;
-  bool arg3 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  bool val3 ;
-  int ecode3 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  PyObject * obj2 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OOO:FitParameterSet_setFixed",&obj0,&obj1,&obj2)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_setFixed" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  {
-    std::vector< std::string,std::allocator< std::string > > *ptr = (std::vector< std::string,std::allocator< std::string > > *)0;
-    res2 = swig::asptr(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_setFixed" "', argument " "2"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_setFixed" "', argument " "2"" of type '" "std::vector< std::string,std::allocator< std::string > > const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  ecode3 = SWIG_AsVal_bool(obj2, &val3);
-  if (!SWIG_IsOK(ecode3)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode3), "in method '" "FitParameterSet_setFixed" "', argument " "3"" of type '" "bool""'");
-  } 
-  arg3 = static_cast< bool >(val3);
-  (arg1)->setFixed((std::vector< std::string,std::allocator< 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_FitParameterSet_correlationMatrix(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  FitParameterSet::corr_matrix_t result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitParameterSet_correlationMatrix",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_correlationMatrix" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  result = ((FitParameterSet const *)arg1)->correlationMatrix();
-  resultobj = swig::from(static_cast< std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet_setCorrelationMatrix(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  FitParameterSet::corr_matrix_t *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet_setCorrelationMatrix",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet_setCorrelationMatrix" "', argument " "1"" of type '" "FitParameterSet *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  {
-    std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *ptr = (std::vector< std::vector< double,std::allocator< double > >,std::allocator< std::vector< double,std::allocator< double > > > > *)0;
-    res2 = swig::asptr(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitParameterSet_setCorrelationMatrix" "', argument " "2"" of type '" "FitParameterSet::corr_matrix_t const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitParameterSet_setCorrelationMatrix" "', argument " "2"" of type '" "FitParameterSet::corr_matrix_t const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  (arg1)->setCorrelationMatrix((FitParameterSet::corr_matrix_t 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_FitParameterSet___getitem____SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  std::string arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet___getitem__",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet___getitem__" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  {
-    std::string *ptr = (std::string *)0;
-    int res = SWIG_AsPtr_std_string(obj1, &ptr);
-    if (!SWIG_IsOK(res) || !ptr) {
-      SWIG_exception_fail(SWIG_ArgError((ptr ? res : SWIG_TypeError)), "in method '" "FitParameterSet___getitem__" "', argument " "2"" of type '" "std::string""'"); 
-    }
-    arg2 = *ptr;
-    if (SWIG_IsNewObj(res)) delete ptr;
-  }
-  result = (IFitParameter *)FitParameterSet___getitem____SWIG_0((FitParameterSet const *)arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet___getitem____SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitParameterSet *arg1 = (FitParameterSet *) 0 ;
-  size_t arg2 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  size_t val2 ;
-  int ecode2 = 0 ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  IFitParameter *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:FitParameterSet___getitem__",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitParameterSet, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitParameterSet___getitem__" "', argument " "1"" of type '" "FitParameterSet const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitParameterSet * >(argp1);
-  ecode2 = SWIG_AsVal_size_t(obj1, &val2);
-  if (!SWIG_IsOK(ecode2)) {
-    SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "FitParameterSet___getitem__" "', argument " "2"" of type '" "size_t""'");
-  } 
-  arg2 = static_cast< size_t >(val2);
-  result = (IFitParameter *)FitParameterSet___getitem____SWIG_1((FitParameterSet const *)arg1,arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitParameter, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitParameterSet___getitem__(PyObject *self, PyObject *args) {
-  Py_ssize_t argc;
-  PyObject *argv[3] = {
-    0
-  };
-  Py_ssize_t ii;
-  
-  if (!PyTuple_Check(args)) SWIG_fail;
-  argc = args ? PyObject_Length(args) : 0;
-  for (ii = 0; (ii < 2) && (ii < argc); ii++) {
-    argv[ii] = PyTuple_GET_ITEM(args,ii);
-  }
-  if (argc == 2) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      {
-        int res = SWIG_AsVal_size_t(argv[1], NULL);
-        _v = SWIG_CheckState(res);
-      }
-      if (_v) {
-        return _wrap_FitParameterSet___getitem____SWIG_1(self, args);
-      }
-    }
-  }
-  if (argc == 2) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitParameterSet, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
-      _v = SWIG_CheckState(res);
-      if (_v) {
-        return _wrap_FitParameterSet___getitem____SWIG_0(self, args);
-      }
-    }
-  }
-  
-fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitParameterSet___getitem__'.\n"
-    "  Possible C/C++ prototypes are:\n"
-    "    FitParameterSet::__getitem__(std::string) const\n"
-    "    FitParameterSet::__getitem__(size_t) const\n");
-  return 0;
-}
-
-
-SWIGINTERN PyObject *FitParameterSet_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_FitParameterSet, SWIG_NewClientData(obj));
-  return SWIG_Py_Void();
-}
-
-SWIGINTERN PyObject *_wrap_new_MinimizerCatalogue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MinimizerCatalogue *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)":new_MinimizerCatalogue")) SWIG_fail;
-  result = (MinimizerCatalogue *)new MinimizerCatalogue();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MinimizerCatalogue, SWIG_POINTER_NEW |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MinimizerCatalogue_toString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  std::string result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MinimizerCatalogue_toString",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MinimizerCatalogue_toString" "', argument " "1"" of type '" "MinimizerCatalogue const *""'"); 
-  }
-  arg1 = reinterpret_cast< MinimizerCatalogue * >(argp1);
-  result = ((MinimizerCatalogue const *)arg1)->toString();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MinimizerCatalogue_minimizerNames(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  std::vector< std::string,std::allocator< std::string > > result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MinimizerCatalogue_minimizerNames",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MinimizerCatalogue_minimizerNames" "', argument " "1"" of type '" "MinimizerCatalogue const *""'"); 
-  }
-  arg1 = reinterpret_cast< MinimizerCatalogue * >(argp1);
-  result = ((MinimizerCatalogue const *)arg1)->minimizerNames();
-  resultobj = swig::from(static_cast< std::vector< std::string,std::allocator< std::string > > >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MinimizerCatalogue_algorithmNames(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ;
-  std::string *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  std::vector< std::string,std::allocator< std::string > > result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MinimizerCatalogue_algorithmNames",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MinimizerCatalogue_algorithmNames" "', argument " "1"" of type '" "MinimizerCatalogue const *""'"); 
-  }
-  arg1 = reinterpret_cast< MinimizerCatalogue * >(argp1);
-  {
-    std::string *ptr = (std::string *)0;
-    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MinimizerCatalogue_algorithmNames" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MinimizerCatalogue_algorithmNames" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  result = ((MinimizerCatalogue const *)arg1)->algorithmNames((std::string const &)*arg2);
-  resultobj = swig::from(static_cast< std::vector< std::string,std::allocator< std::string > > >(result));
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MinimizerCatalogue_algorithmDescriptions(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ;
-  std::string *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  std::vector< std::string,std::allocator< std::string > > result;
-  
-  if (!PyArg_ParseTuple(args,(char *)"OO:MinimizerCatalogue_algorithmDescriptions",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MinimizerCatalogue_algorithmDescriptions" "', argument " "1"" of type '" "MinimizerCatalogue const *""'"); 
-  }
-  arg1 = reinterpret_cast< MinimizerCatalogue * >(argp1);
-  {
-    std::string *ptr = (std::string *)0;
-    res2 = SWIG_AsPtr_std_string(obj1, &ptr);
-    if (!SWIG_IsOK(res2)) {
-      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MinimizerCatalogue_algorithmDescriptions" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "MinimizerCatalogue_algorithmDescriptions" "', argument " "2"" of type '" "std::string const &""'"); 
-    }
-    arg2 = ptr;
-  }
-  result = ((MinimizerCatalogue const *)arg1)->algorithmDescriptions((std::string const &)*arg2);
-  resultobj = swig::from(static_cast< std::vector< std::string,std::allocator< std::string > > >(result));
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return resultobj;
-fail:
-  if (SWIG_IsNewObj(res2)) delete arg2;
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MinimizerCatalogue_minimizerInfo(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ;
-  std::string *arg2 = 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  int res2 = SWIG_OLDOBJ ;
-  PyObject * obj0 = 0 ;
-  PyObject * obj1 = 0 ;
-  MinimizerInfo *result = 0 ;
+SWIGINTERN PyObject *_wrap_MinimizerCatalogue_minimizerInfo(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  MinimizerCatalogue *arg1 = (MinimizerCatalogue *) 0 ;
+  std::string *arg2 = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 = SWIG_OLDOBJ ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  MinimizerInfo *result = 0 ;
   
   if (!PyArg_ParseTuple(args,(char *)"OO:MinimizerCatalogue_minimizerInfo",&obj0,&obj1)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MinimizerCatalogue, 0 |  0 );
@@ -24563,6 +22476,36 @@ fail:
 }
 
 
+SWIGINTERN PyObject *_wrap_Minimizer_setMinimizer__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  Fit::Minimizer *arg1 = (Fit::Minimizer *) 0 ;
+  IMinimizer *arg2 = (IMinimizer *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:Minimizer_setMinimizer",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Fit__Minimizer, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Minimizer_setMinimizer" "', argument " "1"" of type '" "Fit::Minimizer *""'"); 
+  }
+  arg1 = reinterpret_cast< Fit::Minimizer * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_IMinimizer, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Minimizer_setMinimizer" "', argument " "2"" of type '" "IMinimizer *""'"); 
+  }
+  arg2 = reinterpret_cast< IMinimizer * >(argp2);
+  (arg1)->setMinimizer(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_Minimizer_setMinimizer(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[5] = {
@@ -24575,6 +22518,20 @@ SWIGINTERN PyObject *_wrap_Minimizer_setMinimizer(PyObject *self, PyObject *args
   for (ii = 0; (ii < 4) && (ii < argc); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
+  if (argc == 2) {
+    int _v;
+    void *vptr = 0;
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_Fit__Minimizer, 0);
+    _v = SWIG_CheckState(res);
+    if (_v) {
+      void *vptr = 0;
+      int res = SWIG_ConvertPtr(argv[1], &vptr, SWIGTYPE_p_IMinimizer, 0);
+      _v = SWIG_CheckState(res);
+      if (_v) {
+        return _wrap_Minimizer_setMinimizer__SWIG_3(self, args);
+      }
+    }
+  }
   if (argc == 2) {
     int _v;
     void *vptr = 0;
@@ -24632,7 +22589,8 @@ fail:
     "  Possible C/C++ prototypes are:\n"
     "    Fit::Minimizer::setMinimizer(std::string const &,std::string const &,std::string const &)\n"
     "    Fit::Minimizer::setMinimizer(std::string const &,std::string const &)\n"
-    "    Fit::Minimizer::setMinimizer(std::string const &)\n");
+    "    Fit::Minimizer::setMinimizer(std::string const &)\n"
+    "    Fit::Minimizer::setMinimizer(IMinimizer *)\n");
   return 0;
 }
 
@@ -25442,6 +23400,8 @@ static PyMethodDef SwigMethods[] = {
 		"void Parameters::setErrors(const std::vector< double > &errors)\n"
 		"\n"
 		""},
+	 { (char *)"Parameters_correlationMatrix", _wrap_Parameters_correlationMatrix, METH_VARARGS, (char *)"Parameters_correlationMatrix(Parameters self) -> vdouble2d_t"},
+	 { (char *)"Parameters_setCorrelationMatrix", _wrap_Parameters_setCorrelationMatrix, METH_VARARGS, (char *)"Parameters_setCorrelationMatrix(Parameters self, vdouble2d_t matrix)"},
 	 { (char *)"Parameters___getitem__", _wrap_Parameters___getitem__, METH_VARARGS, (char *)"\n"
 		"__getitem__(std::string name) -> Parameter\n"
 		"Parameters___getitem__(Parameters self, size_t index) -> Parameter\n"
@@ -25470,14 +23430,6 @@ static PyMethodDef SwigMethods[] = {
 		"return name of the minimization algorithm \n"
 		"\n"
 		""},
-	 { (char *)"IMinimizer_minimize", _wrap_IMinimizer_minimize, METH_VARARGS, (char *)"\n"
-		"IMinimizer_minimize(IMinimizer self)\n"
-		"\n"
-		"virtual void IMinimizer::minimize()=0\n"
-		"\n"
-		"run minimization \n"
-		"\n"
-		""},
 	 { (char *)"IMinimizer_minimize_scalar", _wrap_IMinimizer_minimize_scalar, METH_VARARGS, (char *)"\n"
 		"IMinimizer_minimize_scalar(IMinimizer self, fcn_scalar_t arg3, Parameters arg4) -> MinimizerResult\n"
 		"\n"
@@ -25498,26 +23450,6 @@ static PyMethodDef SwigMethods[] = {
 		"clear resources (parameters) for consecutives minimizations \n"
 		"\n"
 		""},
-	 { (char *)"IMinimizer_setParameters", _wrap_IMinimizer_setParameters, METH_VARARGS, (char *)"\n"
-		"IMinimizer_setParameters(IMinimizer self, FitParameterSet parameters)\n"
-		"\n"
-		"virtual void IMinimizer::setParameters(const FitParameterSet &parameters)=0\n"
-		"\n"
-		"Sets internal minimizer parameters using external parameter list. \n"
-		"\n"
-		""},
-	 { (char *)"IMinimizer_setObjectiveFunction", _wrap_IMinimizer_setObjectiveFunction, METH_VARARGS, (char *)"\n"
-		"IMinimizer_setObjectiveFunction(IMinimizer self, objective_function_t arg3)\n"
-		"\n"
-		"virtual void IMinimizer::setObjectiveFunction(objective_function_t)\n"
-		"\n"
-		""},
-	 { (char *)"IMinimizer_setGradientFunction", _wrap_IMinimizer_setGradientFunction, METH_VARARGS, (char *)"\n"
-		"IMinimizer_setGradientFunction(IMinimizer self, gradient_function_t arg3, int arg4)\n"
-		"\n"
-		"virtual void IMinimizer::setGradientFunction(gradient_function_t, int)\n"
-		"\n"
-		""},
 	 { (char *)"IMinimizer_minValue", _wrap_IMinimizer_minValue, METH_VARARGS, (char *)"\n"
 		"IMinimizer_minValue(IMinimizer self) -> double\n"
 		"\n"
@@ -25526,19 +23458,6 @@ static PyMethodDef SwigMethods[] = {
 		"Returns minimum function value. \n"
 		"\n"
 		""},
-	 { (char *)"IMinimizer_reportOutcome", _wrap_IMinimizer_reportOutcome, METH_VARARGS, (char *)"\n"
-		"IMinimizer_reportOutcome(IMinimizer self) -> std::string\n"
-		"\n"
-		"virtual std::string IMinimizer::reportOutcome() const =0\n"
-		"\n"
-		""},
-	 { (char *)"IMinimizer_propagateResults", _wrap_IMinimizer_propagateResults, METH_VARARGS, (char *)"\n"
-		"propagateResults(FitParameterSet parameters)\n"
-		"IMinimizer_propagateResults(IMinimizer self, Parameters parameters)\n"
-		"\n"
-		"void IMinimizer::propagateResults(Fit::Parameters &parameters)\n"
-		"\n"
-		""},
 	 { (char *)"IMinimizer_setOptions", _wrap_IMinimizer_setOptions, METH_VARARGS, (char *)"\n"
 		"IMinimizer_setOptions(IMinimizer self, std::string const & options)\n"
 		"\n"
@@ -25548,298 +23467,6 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"IMinimizer_swigregister", IMinimizer_swigregister, METH_VARARGS, NULL},
-	 { (char *)"new_IFitParameter", _wrap_new_IFitParameter, METH_VARARGS, (char *)"\n"
-		"IFitParameter()\n"
-		"IFitParameter(std::string const & name, double value, AttLimits limits, double step=0.0)\n"
-		"IFitParameter(std::string const & name, double value, AttLimits limits)\n"
-		"new_IFitParameter(std::string const & name, double value) -> IFitParameter\n"
-		"\n"
-		"IFitParameter::IFitParameter(const std::string &name, double value, const AttLimits &limits=AttLimits::limitless(), double step=0.0)\n"
-		"\n"
-		""},
-	 { (char *)"delete_IFitParameter", _wrap_delete_IFitParameter, METH_VARARGS, (char *)"\n"
-		"delete_IFitParameter(IFitParameter self)\n"
-		"\n"
-		"virtual IFitParameter::~IFitParameter()\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_clone", _wrap_IFitParameter_clone, METH_VARARGS, (char *)"\n"
-		"IFitParameter_clone(IFitParameter self) -> IFitParameter\n"
-		"\n"
-		"IFitParameter * IFitParameter::clone() const \n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_name", _wrap_IFitParameter_name, METH_VARARGS, (char *)"\n"
-		"IFitParameter_name(IFitParameter self) -> std::string\n"
-		"\n"
-		"std::string IFitParameter::name() const \n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setName", _wrap_IFitParameter_setName, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setName(IFitParameter self, std::string const & name) -> IFitParameter\n"
-		"\n"
-		"IFitParameter & IFitParameter::setName(const std::string &name)\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_startValue", _wrap_IFitParameter_startValue, METH_VARARGS, (char *)"\n"
-		"IFitParameter_startValue(IFitParameter self) -> double\n"
-		"\n"
-		"double IFitParameter::startValue() const \n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setStartValue", _wrap_IFitParameter_setStartValue, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setStartValue(IFitParameter self, double value)\n"
-		"\n"
-		"void IFitParameter::setStartValue(double value)\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_value", _wrap_IFitParameter_value, METH_VARARGS, (char *)"\n"
-		"IFitParameter_value(IFitParameter self) -> double\n"
-		"\n"
-		"double IFitParameter::value() const \n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setValue", _wrap_IFitParameter_setValue, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setValue(IFitParameter self, double value)\n"
-		"\n"
-		"void IFitParameter::setValue(double value)\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_addPattern", _wrap_IFitParameter_addPattern, METH_VARARGS, (char *)"\n"
-		"IFitParameter_addPattern(IFitParameter self, std::string const & pattern) -> IFitParameter\n"
-		"\n"
-		"IFitParameter & IFitParameter::addPattern(const std::string &pattern)\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_step", _wrap_IFitParameter_step, METH_VARARGS, (char *)"\n"
-		"IFitParameter_step(IFitParameter self) -> double\n"
-		"\n"
-		"double IFitParameter::step() const \n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setStep", _wrap_IFitParameter_setStep, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setStep(IFitParameter self, double value) -> IFitParameter\n"
-		"\n"
-		"IFitParameter & IFitParameter::setStep(double value)\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_error", _wrap_IFitParameter_error, METH_VARARGS, (char *)"\n"
-		"IFitParameter_error(IFitParameter self) -> double\n"
-		"\n"
-		"double IFitParameter::error() const \n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setError", _wrap_IFitParameter_setError, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setError(IFitParameter self, double value)\n"
-		"\n"
-		"void IFitParameter::setError(double value)\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_limits", _wrap_IFitParameter_limits, METH_VARARGS, (char *)"\n"
-		"limits() -> AttLimits\n"
-		"IFitParameter_limits(IFitParameter self) -> AttLimits\n"
-		"\n"
-		"AttLimits & IFitParameter::limits()\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setLimits", _wrap_IFitParameter_setLimits, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setLimits(IFitParameter self, AttLimits limits) -> IFitParameter\n"
-		"\n"
-		"IFitParameter & IFitParameter::setLimits(const AttLimits &limits)\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setLowerLimited", _wrap_IFitParameter_setLowerLimited, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setLowerLimited(IFitParameter self, double bound_value) -> IFitParameter\n"
-		"\n"
-		"IFitParameter & IFitParameter::setLowerLimited(double bound_value)\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setPositive", _wrap_IFitParameter_setPositive, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setPositive(IFitParameter self) -> IFitParameter\n"
-		"\n"
-		"IFitParameter & IFitParameter::setPositive()\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setNonnegative", _wrap_IFitParameter_setNonnegative, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setNonnegative(IFitParameter self) -> IFitParameter\n"
-		"\n"
-		"IFitParameter & IFitParameter::setNonnegative()\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setUpperLimited", _wrap_IFitParameter_setUpperLimited, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setUpperLimited(IFitParameter self, double bound_value) -> IFitParameter\n"
-		"\n"
-		"IFitParameter & IFitParameter::setUpperLimited(double bound_value)\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setLimited", _wrap_IFitParameter_setLimited, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setLimited(IFitParameter self, double left_bound_value, double right_bound_value) -> IFitParameter\n"
-		"\n"
-		"IFitParameter & IFitParameter::setLimited(double left_bound_value, double right_bound_value)\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_setFixed", _wrap_IFitParameter_setFixed, METH_VARARGS, (char *)"\n"
-		"IFitParameter_setFixed(IFitParameter self) -> IFitParameter\n"
-		"\n"
-		"IFitParameter & IFitParameter::setFixed()\n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_toString", _wrap_IFitParameter_toString, METH_VARARGS, (char *)"\n"
-		"IFitParameter_toString(IFitParameter self) -> std::string\n"
-		"\n"
-		"std::string IFitParameter::toString() const \n"
-		"\n"
-		""},
-	 { (char *)"IFitParameter_swigregister", IFitParameter_swigregister, METH_VARARGS, NULL},
-	 { (char *)"new_FitParameterSet", _wrap_new_FitParameterSet, METH_VARARGS, (char *)"\n"
-		"new_FitParameterSet() -> FitParameterSet\n"
-		"\n"
-		"FitParameterSet::FitParameterSet()\n"
-		"\n"
-		""},
-	 { (char *)"delete_FitParameterSet", _wrap_delete_FitParameterSet, METH_VARARGS, (char *)"\n"
-		"delete_FitParameterSet(FitParameterSet self)\n"
-		"\n"
-		"FitParameterSet::~FitParameterSet()\n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_clear", _wrap_FitParameterSet_clear, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_clear(FitParameterSet self)\n"
-		"\n"
-		"void FitParameterSet::clear()\n"
-		"\n"
-		"Clears all defined parameters. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_size", _wrap_FitParameterSet_size, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_size(FitParameterSet self) -> size_t\n"
-		"\n"
-		"size_t FitParameterSet::size() const\n"
-		"\n"
-		"Returns number of parameters. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_begin", _wrap_FitParameterSet_begin, METH_VARARGS, (char *)"\n"
-		"begin() -> FitParameterSet::iterator\n"
-		"FitParameterSet_begin(FitParameterSet self) -> FitParameterSet::const_iterator\n"
-		"\n"
-		"FitParameterSet::const_iterator FitParameterSet::begin() const \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_end", _wrap_FitParameterSet_end, METH_VARARGS, (char *)"\n"
-		"end() -> FitParameterSet::iterator\n"
-		"FitParameterSet_end(FitParameterSet self) -> FitParameterSet::const_iterator\n"
-		"\n"
-		"FitParameterSet::const_iterator FitParameterSet::end() const \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_addFitParameter", _wrap_FitParameterSet_addFitParameter, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_addFitParameter(FitParameterSet self, IFitParameter par)\n"
-		"\n"
-		"void FitParameterSet::addFitParameter(IFitParameter *par)\n"
-		"\n"
-		"Adds fit parameter. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_fitParameter", _wrap_FitParameterSet_fitParameter, METH_VARARGS, (char *)"\n"
-		"fitParameter(std::string const & name) -> IFitParameter\n"
-		"FitParameterSet_fitParameter(FitParameterSet self, std::string const & name) -> IFitParameter\n"
-		"\n"
-		"IFitParameter * FitParameterSet::fitParameter(const std::string &name)\n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_values", _wrap_FitParameterSet_values, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_values(FitParameterSet self) -> vdouble1d_t\n"
-		"\n"
-		"std::vector< double > FitParameterSet::values() const\n"
-		"\n"
-		"Returns values of all defined parameters. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_setValues", _wrap_FitParameterSet_setValues, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_setValues(FitParameterSet self, vdouble1d_t pars_values)\n"
-		"\n"
-		"void FitParameterSet::setValues(const std::vector< double > &pars_values)\n"
-		"\n"
-		"Sets values for all defined parameters. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_valuesDifferFrom", _wrap_FitParameterSet_valuesDifferFrom, METH_VARARGS, (char *)"\n"
-		"valuesDifferFrom(vdouble1d_t par_values, double tolerance=2.0) -> bool\n"
-		"FitParameterSet_valuesDifferFrom(FitParameterSet self, vdouble1d_t par_values) -> bool\n"
-		"\n"
-		"bool FitParameterSet::valuesDifferFrom(const std::vector< double > &par_values, double tolerance=2.0) const\n"
-		"\n"
-		"Returns true if parameters already have the given values. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_errors", _wrap_FitParameterSet_errors, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_errors(FitParameterSet self) -> vdouble1d_t\n"
-		"\n"
-		"std::vector< double > FitParameterSet::errors() const\n"
-		"\n"
-		"Returns errors of all defined parameters. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_setErrors", _wrap_FitParameterSet_setErrors, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_setErrors(FitParameterSet self, vdouble1d_t pars_errors)\n"
-		"\n"
-		"void FitParameterSet::setErrors(const std::vector< double > &pars_errors)\n"
-		"\n"
-		"Sets errors to all parameters. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_freeFitParameterCount", _wrap_FitParameterSet_freeFitParameterCount, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_freeFitParameterCount(FitParameterSet self) -> size_t\n"
-		"\n"
-		"size_t FitParameterSet::freeFitParameterCount() const\n"
-		"\n"
-		"Returns number of free parameters. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_fixAll", _wrap_FitParameterSet_fixAll, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_fixAll(FitParameterSet self)\n"
-		"\n"
-		"void FitParameterSet::fixAll()\n"
-		"\n"
-		"Fix all parameters. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_releaseAll", _wrap_FitParameterSet_releaseAll, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_releaseAll(FitParameterSet self)\n"
-		"\n"
-		"void FitParameterSet::releaseAll()\n"
-		"\n"
-		"Release all parameters. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_setFixed", _wrap_FitParameterSet_setFixed, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_setFixed(FitParameterSet self, vector_string_t pars, bool is_fixed)\n"
-		"\n"
-		"void FitParameterSet::setFixed(const std::vector< std::string > &pars, bool is_fixed)\n"
-		"\n"
-		"Set fixed flag for parameters from the list. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_correlationMatrix", _wrap_FitParameterSet_correlationMatrix, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_correlationMatrix(FitParameterSet self) -> vdouble2d_t\n"
-		"\n"
-		"corr_matrix_t FitParameterSet::correlationMatrix() const \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet_setCorrelationMatrix", _wrap_FitParameterSet_setCorrelationMatrix, METH_VARARGS, (char *)"\n"
-		"FitParameterSet_setCorrelationMatrix(FitParameterSet self, vdouble2d_t matrix)\n"
-		"\n"
-		"void FitParameterSet::setCorrelationMatrix(const corr_matrix_t &matrix)\n"
-		"\n"
-		"Sets resulting correlation matrix. \n"
-		"\n"
-		""},
-	 { (char *)"FitParameterSet___getitem__", _wrap_FitParameterSet___getitem__, METH_VARARGS, (char *)"\n"
-		"__getitem__(std::string name) -> IFitParameter\n"
-		"FitParameterSet___getitem__(FitParameterSet self, size_t index) -> IFitParameter\n"
-		""},
-	 { (char *)"FitParameterSet_swigregister", FitParameterSet_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_MinimizerCatalogue", _wrap_new_MinimizerCatalogue, METH_VARARGS, (char *)"\n"
 		"new_MinimizerCatalogue() -> MinimizerCatalogue\n"
 		"\n"
@@ -26041,7 +23668,8 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"Minimizer_setMinimizer", _wrap_Minimizer_setMinimizer, METH_VARARGS, (char *)"\n"
 		"setMinimizer(std::string const & minimizerName, std::string const & algorithmName, std::string const & options)\n"
 		"setMinimizer(std::string const & minimizerName, std::string const & algorithmName)\n"
-		"Minimizer_setMinimizer(Minimizer self, std::string const & minimizerName)\n"
+		"setMinimizer(std::string const & minimizerName)\n"
+		"Minimizer_setMinimizer(Minimizer self, IMinimizer minimizer)\n"
 		"\n"
 		"void Minimizer::setMinimizer(const std::string &minimizerName, const std::string &algorithmName=\"\", const std::string &options=\"\")\n"
 		"\n"
@@ -26062,12 +23690,10 @@ static PyMethodDef SwigMethods[] = {
 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
 
 static swig_type_info _swigt__p_AttLimits = {"_p_AttLimits", "AttLimits *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_FitParameterSet = {"_p_FitParameterSet", "FitParameterSet *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Fit__Minimizer = {"_p_Fit__Minimizer", "Fit::Minimizer *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Fit__MinimizerResult = {"_p_Fit__MinimizerResult", "Fit::MinimizerResult *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Fit__Parameter = {"_p_Fit__Parameter", "Fit::Parameter *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Fit__Parameters = {"_p_Fit__Parameters", "Fit::Parameters *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_IFitParameter = {"_p_IFitParameter", "IFitParameter *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_IMinimizer = {"_p_IMinimizer", "IMinimizer *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_MinimizerCatalogue = {"_p_MinimizerCatalogue", "MinimizerCatalogue *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_MinimizerFactory = {"_p_MinimizerFactory", "MinimizerFactory *", 0, 0, (void*)0, 0};
@@ -26077,16 +23703,13 @@ static swig_type_info _swigt__p_RealLimits = {"_p_RealLimits", "RealLimits *", 0
 static swig_type_info _swigt__p_allocator_type = {"_p_allocator_type", "allocator_type *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_const_iterator = {"_p_const_iterator", "const_iterator *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_container_t = {"_p_container_t", "container_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_corr_matrix_t = {"_p_corr_matrix_t", "corr_matrix_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_difference_type = {"_p_difference_type", "difference_type *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_fcn_residual_t = {"_p_fcn_residual_t", "fcn_residual_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_fcn_scalar_t = {"_p_fcn_scalar_t", "fcn_scalar_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_gradient_function_t = {"_p_gradient_function_t", "gradient_function_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_int = {"_p_int", "intptr_t *|int *|int_least32_t *|int_fast32_t *|int32_t *|int_fast16_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_iterator = {"_p_iterator", "iterator *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_long_long = {"_p_long_long", "int_least64_t *|int_fast64_t *|int64_t *|long long *|intmax_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_objective_function_t = {"_p_objective_function_t", "objective_function_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_p_PyObject = {"_p_p_PyObject", "PyObject **", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_parameters_t = {"_p_parameters_t", "parameters_t *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_short = {"_p_short", "short *|int_least16_t *|int16_t *", 0, 0, (void*)0, 0};
@@ -26104,8 +23727,6 @@ static swig_type_info _swigt__p_std__shared_ptrT_IMultiLayerBuilder_t = {"_p_std
 static swig_type_info _swigt__p_std__shared_ptrT_IObserver_t = {"_p_std__shared_ptrT_IObserver_t", "std::shared_ptr< IObserver > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__const_iterator = {"_p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__const_iterator", "std::vector< Fit::Parameter,std::allocator< Fit::Parameter > >::const_iterator *|Fit::Parameters::const_iterator *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__iterator = {"_p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__iterator", "std::vector< Fit::Parameter,std::allocator< Fit::Parameter > >::iterator *|Fit::Parameters::iterator *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator = {"_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator", "FitParameterSet::const_iterator *|std::vector< IFitParameter *,std::allocator< IFitParameter * > >::const_iterator *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator = {"_p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator", "FitParameterSet::iterator *|std::vector< IFitParameter *,std::allocator< IFitParameter * > >::iterator *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_std__vectorT_double_std__allocatorT_double_t_t = {"_p_std__vectorT_double_std__allocatorT_double_t_t", "std::vector< double,std::allocator< double > > *|std::vector< double > *", 0, 0, (void*)0, 0};
 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};
@@ -26121,12 +23742,10 @@ static swig_type_info _swigt__p_value_type = {"_p_value_type", "value_type *", 0
 
 static swig_type_info *swig_type_initial[] = {
   &_swigt__p_AttLimits,
-  &_swigt__p_FitParameterSet,
   &_swigt__p_Fit__Minimizer,
   &_swigt__p_Fit__MinimizerResult,
   &_swigt__p_Fit__Parameter,
   &_swigt__p_Fit__Parameters,
-  &_swigt__p_IFitParameter,
   &_swigt__p_IMinimizer,
   &_swigt__p_MinimizerCatalogue,
   &_swigt__p_MinimizerFactory,
@@ -26136,16 +23755,13 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_allocator_type,
   &_swigt__p_char,
   &_swigt__p_const_iterator,
-  &_swigt__p_container_t,
   &_swigt__p_corr_matrix_t,
   &_swigt__p_difference_type,
   &_swigt__p_fcn_residual_t,
   &_swigt__p_fcn_scalar_t,
-  &_swigt__p_gradient_function_t,
   &_swigt__p_int,
   &_swigt__p_iterator,
   &_swigt__p_long_long,
-  &_swigt__p_objective_function_t,
   &_swigt__p_p_PyObject,
   &_swigt__p_parameters_t,
   &_swigt__p_short,
@@ -26163,8 +23779,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_std__shared_ptrT_IObserver_t,
   &_swigt__p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__const_iterator,
   &_swigt__p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__iterator,
-  &_swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator,
-  &_swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator,
   &_swigt__p_std__vectorT_double_std__allocatorT_double_t_t,
   &_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,
@@ -26180,12 +23794,10 @@ static swig_type_info *swig_type_initial[] = {
 };
 
 static swig_cast_info _swigc__p_AttLimits[] = {  {&_swigt__p_AttLimits, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_FitParameterSet[] = {  {&_swigt__p_FitParameterSet, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Fit__Minimizer[] = {  {&_swigt__p_Fit__Minimizer, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Fit__MinimizerResult[] = {  {&_swigt__p_Fit__MinimizerResult, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Fit__Parameter[] = {  {&_swigt__p_Fit__Parameter, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Fit__Parameters[] = {  {&_swigt__p_Fit__Parameters, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_IFitParameter[] = {  {&_swigt__p_IFitParameter, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IMinimizer[] = {  {&_swigt__p_IMinimizer, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_MinimizerCatalogue[] = {  {&_swigt__p_MinimizerCatalogue, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_MinimizerFactory[] = {  {&_swigt__p_MinimizerFactory, 0, 0, 0},{0, 0, 0, 0}};
@@ -26195,16 +23807,13 @@ static swig_cast_info _swigc__p_RealLimits[] = {  {&_swigt__p_RealLimits, 0, 0,
 static swig_cast_info _swigc__p_allocator_type[] = {  {&_swigt__p_allocator_type, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_char[] = {  {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_const_iterator[] = {  {&_swigt__p_const_iterator, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_container_t[] = {  {&_swigt__p_container_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_corr_matrix_t[] = {  {&_swigt__p_corr_matrix_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_difference_type[] = {  {&_swigt__p_difference_type, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_fcn_residual_t[] = {  {&_swigt__p_fcn_residual_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_fcn_scalar_t[] = {  {&_swigt__p_fcn_scalar_t, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_gradient_function_t[] = {  {&_swigt__p_gradient_function_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_int[] = {  {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_iterator[] = {  {&_swigt__p_iterator, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_long_long[] = {  {&_swigt__p_long_long, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_objective_function_t[] = {  {&_swigt__p_objective_function_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_p_PyObject[] = {  {&_swigt__p_p_PyObject, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_parameters_t[] = {  {&_swigt__p_parameters_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_short[] = {  {&_swigt__p_short, 0, 0, 0},{0, 0, 0, 0}};
@@ -26222,8 +23831,6 @@ static swig_cast_info _swigc__p_std__shared_ptrT_IMultiLayerBuilder_t[] = {  {&_
 static swig_cast_info _swigc__p_std__shared_ptrT_IObserver_t[] = {  {&_swigt__p_std__shared_ptrT_IObserver_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__const_iterator[] = {  {&_swigt__p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__const_iterator, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__iterator[] = {  {&_swigt__p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__iterator, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator[] = {  {&_swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator[] = {  {&_swigt__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_std__vectorT_double_std__allocatorT_double_t_t[] = {  {&_swigt__p_std__vectorT_double_std__allocatorT_double_t_t, 0, 0, 0},{0, 0, 0, 0}};
 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}};
@@ -26239,12 +23846,10 @@ static swig_cast_info _swigc__p_value_type[] = {  {&_swigt__p_value_type, 0, 0,
 
 static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_AttLimits,
-  _swigc__p_FitParameterSet,
   _swigc__p_Fit__Minimizer,
   _swigc__p_Fit__MinimizerResult,
   _swigc__p_Fit__Parameter,
   _swigc__p_Fit__Parameters,
-  _swigc__p_IFitParameter,
   _swigc__p_IMinimizer,
   _swigc__p_MinimizerCatalogue,
   _swigc__p_MinimizerFactory,
@@ -26254,16 +23859,13 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_allocator_type,
   _swigc__p_char,
   _swigc__p_const_iterator,
-  _swigc__p_container_t,
   _swigc__p_corr_matrix_t,
   _swigc__p_difference_type,
   _swigc__p_fcn_residual_t,
   _swigc__p_fcn_scalar_t,
-  _swigc__p_gradient_function_t,
   _swigc__p_int,
   _swigc__p_iterator,
   _swigc__p_long_long,
-  _swigc__p_objective_function_t,
   _swigc__p_p_PyObject,
   _swigc__p_parameters_t,
   _swigc__p_short,
@@ -26281,8 +23883,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_std__shared_ptrT_IObserver_t,
   _swigc__p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__const_iterator,
   _swigc__p_std__vectorT_Fit__Parameter_std__allocatorT_Fit__Parameter_t_t__iterator,
-  _swigc__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__const_iterator,
-  _swigc__p_std__vectorT_IFitParameter_p_std__allocatorT_IFitParameter_p_t_t__iterator,
   _swigc__p_std__vectorT_double_std__allocatorT_double_t_t,
   _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,