diff --git a/Core/Fitting/AdjustMinimizerStrategy.cpp b/Core/Fitting/AdjustMinimizerStrategy.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..eff1b62629bc0ef7808998596865d301f6552eca
--- /dev/null
+++ b/Core/Fitting/AdjustMinimizerStrategy.cpp
@@ -0,0 +1,76 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Core/Fitting/AdjustMinimizerStrategy.cpp
+//! @brief     Implements class AdjustMinimizerStrategy.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2015
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#include "AdjustMinimizerStrategy.h"
+#include "FitSuiteImp.h"
+#include "IMinimizer.h"
+#include "MinimizerFactory.h"
+
+AdjustMinimizerStrategy::AdjustMinimizerStrategy()
+    : IFitStrategy("FitStrategy/AdjustMinimizer")
+{
+}
+
+AdjustMinimizerStrategy::AdjustMinimizerStrategy(const std::string &minimizerName,
+                                                       const std::string &algorithmName,
+                                                       const std::string &optionString)
+    : IFitStrategy("FitStrategy/AdjustMinimizer")
+    , m_minimizerName(minimizerName)
+    , m_algorithmName(algorithmName)
+    , m_optionString(optionString)
+{
+    setMinimizer(minimizerName, algorithmName, optionString);
+}
+
+
+AdjustMinimizerStrategy* AdjustMinimizerStrategy::clone() const
+{
+    AdjustMinimizerStrategy* result = new AdjustMinimizerStrategy(*this);
+    return result;
+}
+
+void AdjustMinimizerStrategy::setMinimizer(const std::string &minimizerName,
+                                              const std::string &algorithmName,
+                                              const std::string &optionString)
+{
+    m_minimizerName = minimizerName;
+    m_algorithmName = algorithmName;
+    m_optionString = optionString;
+}
+
+void AdjustMinimizerStrategy::execute()
+{
+    m_kernel->setMinimizer(
+        MinimizerFactory::createMinimizer(m_minimizerName, m_algorithmName, m_optionString));
+    m_kernel->minimize();
+}
+
+std::string AdjustMinimizerStrategy::toString() const
+{
+    std::ostringstream ostr;
+    ostr << "FitStrategy/AdjustMinimizer ("
+         << m_minimizerName << ", "
+         << m_algorithmName << ", "
+         << m_optionString << ")";
+    return ostr.str();
+}
+
+AdjustMinimizerStrategy::AdjustMinimizerStrategy(const AdjustMinimizerStrategy &other)
+    : IFitStrategy(other)
+{
+    m_minimizerName = other.m_minimizerName;
+    m_algorithmName = other.m_algorithmName;
+    m_optionString = other.m_optionString;
+}
diff --git a/Core/Fitting/AdjustMinimizerStrategy.h b/Core/Fitting/AdjustMinimizerStrategy.h
new file mode 100644
index 0000000000000000000000000000000000000000..65d153facd31037c4ed757f0111668347fee9a66
--- /dev/null
+++ b/Core/Fitting/AdjustMinimizerStrategy.h
@@ -0,0 +1,52 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Core/Fitting/AdjustMinimizerStrategy.h
+//! @brief     Defines class AdjustMinimizerStrategy
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2015
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#ifndef FITSTRATEGYADJUSTMINIMIZER_H
+#define FITSTRATEGYADJUSTMINIMIZER_H
+
+#include "IFitStrategy.h"
+
+//! @class AdjustMinimizerStrategy
+//! @ingroup fitting
+//! @brief Strategy modifies mimimizer settings before running minimization round.
+
+class BA_CORE_API_ AdjustMinimizerStrategy : public IFitStrategy
+{
+public:
+    AdjustMinimizerStrategy();
+
+    AdjustMinimizerStrategy(const std::string& minimizerName,
+                               const std::string& algorithmName = std::string(),
+                               const std::string& optionString=std::string());
+
+    virtual AdjustMinimizerStrategy* clone() const;
+
+    void setMinimizer(const std::string& minimizerName,
+                      const std::string& algorithmName = std::string(),
+                      const std::string& optionString=std::string());
+
+    virtual void execute();
+
+protected:
+    virtual std::string toString() const;
+    AdjustMinimizerStrategy(const AdjustMinimizerStrategy &other);
+
+private:
+    std::string m_minimizerName;
+    std::string m_algorithmName;
+    std::string m_optionString;
+};
+
+#endif
diff --git a/Core/Fitting/FitStrategyAdjustMinimizer.cpp b/Core/Fitting/FitStrategyAdjustMinimizer.cpp
deleted file mode 100644
index dcd4bde8145002b78c58902bc54ebf32cedf3975..0000000000000000000000000000000000000000
--- a/Core/Fitting/FitStrategyAdjustMinimizer.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Core/Fitting/FitStrategyAdjustMinimizer.cpp
-//! @brief     Implements class FitStrategyAdjustMinimizer.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2015
-//! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
-//
-// ************************************************************************** //
-
-#include "FitStrategyAdjustMinimizer.h"
-#include "FitSuiteImp.h"
-#include "IMinimizer.h"
-#include "MinimizerFactory.h"
-
-FitStrategyAdjustMinimizer::FitStrategyAdjustMinimizer()
-    : IFitStrategy("FitStrategyAdjustMinimizer"), m_minimizer(nullptr)
-{
-}
-
-FitStrategyAdjustMinimizer::FitStrategyAdjustMinimizer(const std::string &minimizer_name,
-                                                       const std::string &algorithm_name,
-                                                       const std::string &minimizer_options)
-    : IFitStrategy("FitStrategyAdjustMinimizer"), m_minimizer(nullptr)
-{
-    setMinimizer(minimizer_name, algorithm_name, minimizer_options);
-}
-
-FitStrategyAdjustMinimizer::~FitStrategyAdjustMinimizer()
-{
-    delete m_minimizer;
-}
-
-// partial clone
-FitStrategyAdjustMinimizer* FitStrategyAdjustMinimizer::clone() const
-{
-    FitStrategyAdjustMinimizer* result = new FitStrategyAdjustMinimizer();
-    result->setName(getName());
-    result->setMinimizer( MinimizerFactory::createMinimizer(m_minimizer));
-    return result;
-}
-
-IMinimizer* FitStrategyAdjustMinimizer::getMinimizer()
-{
-    return m_minimizer;
-}
-
-void FitStrategyAdjustMinimizer::setMinimizer(IMinimizer* minimizer)
-{
-    m_minimizer = minimizer;
-}
-
-void FitStrategyAdjustMinimizer::setMinimizer(const std::string &minimizer_name,
-                                              const std::string &algorithm_name,
-                                              const std::string &minimizer_options)
-{
-    setMinimizer(MinimizerFactory::createMinimizer(
-                     minimizer_name, algorithm_name, minimizer_options));
-}
-
-void FitStrategyAdjustMinimizer::execute()
-{
-
-    m_kernel->setMinimizer( MinimizerFactory::createMinimizer(m_minimizer) );
-
-    m_kernel->minimize();
-
-    //m_fit_suite->printResults();
-}
-
-ObsoleteMinimizerOptions* FitStrategyAdjustMinimizer::getMinimizerOptions()
-{
-//    if(!m_minimizer)
-//        return nullptr;
-//    return m_minimizer->getOptions();
-    assert(0);
-    return nullptr;
-}
-
-void FitStrategyAdjustMinimizer::print(std::ostream &ostr) const
-{
-    assert(0);
-    ostr << "FitStrategy/AdjustMinimizer: ";
-//    if(m_minimizer) {
-//        ostr << m_minimizer->getMinimizerName();
-//        if(m_minimizer->getAlgorithmName().size())
-//            ostr << "(" << m_minimizer->getAlgorithmName() << ")";
-//    }
-}
diff --git a/Core/Fitting/FitStrategyAdjustMinimizer.h b/Core/Fitting/FitStrategyAdjustMinimizer.h
deleted file mode 100644
index 8664790f68d00cd95fa26fbdf5f9eff6cb71d9b3..0000000000000000000000000000000000000000
--- a/Core/Fitting/FitStrategyAdjustMinimizer.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Core/Fitting/FitStrategyAdjustMinimizer.h
-//! @brief     Defines class FitStrategyAdjustMinimizer
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2015
-//! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
-//
-// ************************************************************************** //
-
-#ifndef FITSTRATEGYADJUSTMINIMIZER_H
-#define FITSTRATEGYADJUSTMINIMIZER_H
-
-#include "IFitStrategy.h"
-
-class IMinimizer;
-class ObsoleteMinimizerOptions;
-
-//! @class FitStrategyAdjustMinimizer
-//! @ingroup fitting
-//! @brief Strategy modifies mimimizer settings before running minimization round
-
-class BA_CORE_API_ FitStrategyAdjustMinimizer : public IFitStrategy
-{
-public:
-    FitStrategyAdjustMinimizer();
-
-    FitStrategyAdjustMinimizer(const std::string& minimizer_name,
-                               const std::string& algorithm_name = std::string(),
-                               const std::string& minimizer_options=std::string());
-
-    virtual ~FitStrategyAdjustMinimizer();
-
-    virtual FitStrategyAdjustMinimizer* clone() const;
-
-    IMinimizer* getMinimizer();
-    void setMinimizer(IMinimizer* minimizer);
-
-    void setMinimizer(const std::string& minimizer_name,
-                      const std::string& algorithm_name = std::string(),
-                      const std::string& minimizer_options=std::string());
-
-    virtual void execute();
-
-    virtual ObsoleteMinimizerOptions* getMinimizerOptions();
-
-protected:
-    virtual void print(std::ostream &ostr) const;
-
-private:
-    IMinimizer* m_minimizer;
-};
-
-#endif // FITSTRATEGYADJUSTMINIMIZER_H
diff --git a/Core/Fitting/FitSuite.cpp b/Core/Fitting/FitSuite.cpp
index 022e8e41642bb42fe617a6ee1daac1fdab388f40..d31eaab26d081c88afd942fe1f67065ea63bd4c8 100644
--- a/Core/Fitting/FitSuite.cpp
+++ b/Core/Fitting/FitSuite.cpp
@@ -19,6 +19,7 @@
 #include "FitSuitePrintObserver.h"
 #include "IHistogram.h"
 #include "MinimizerFactory.h"
+#include <iostream>
 
 FitSuite::FitSuite()
     : m_impl(new FitSuiteImp(std::bind(&FitSuite::notifyObservers, this)))
diff --git a/Core/Fitting/FitSuiteFunctions.cpp b/Core/Fitting/FitSuiteFunctions.cpp
index ae9a9e71c9e82298d2275ed4c0c3ced874cfb7df..3fb0268572cdfdd578f1da7d93c73045701a679b 100644
--- a/Core/Fitting/FitSuiteFunctions.cpp
+++ b/Core/Fitting/FitSuiteFunctions.cpp
@@ -65,7 +65,6 @@ double FitSuiteGradientFunction::evaluate(
 
     m_ncalls_total++;
     if(index == 0 ) {
-    //if(index == 0 && !gradients) {
         m_kernel->notifyObservers();
         m_ncall++;
     }
diff --git a/Core/Fitting/FitSuiteFunctions.h b/Core/Fitting/FitSuiteFunctions.h
index 3b1bd1c6c9fad8e89ff1e02bfe2eb9ab8f32332d..c3daf39603fd85db4eb2136fbaefb2fad81b4762 100644
--- a/Core/Fitting/FitSuiteFunctions.h
+++ b/Core/Fitting/FitSuiteFunctions.h
@@ -19,7 +19,7 @@
 
 #include "WinDllMacros.h"
 #include <vector>
-using std::size_t;
+#include <cstddef>
 
 class FitSuiteImp;
 
@@ -50,7 +50,6 @@ class BA_CORE_API_ FitSuiteChiSquaredFunction : public IFitSuiteFunction
     FitSuiteChiSquaredFunction() {}
     virtual ~FitSuiteChiSquaredFunction() {}
     //! evaluate method for chi2 value called directly from the minimizer
-//    double evaluate(const double* pars);
     double evaluate(const std::vector<double> &pars);
 };
 
@@ -66,8 +65,8 @@ class BA_CORE_API_ FitSuiteGradientFunction : public IFitSuiteFunction
         : 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 double* pars, unsigned int index, double* gradients);
     double evaluate(const std::vector<double> &pars, unsigned int index,
                     std::vector<double>& gradients);
 
diff --git a/Core/Fitting/FitSuiteImp.cpp b/Core/Fitting/FitSuiteImp.cpp
index 55b8a4f089c703cf84cbd48d0fe91f0ac22beb9e..189d89ded869a3bea8c4906e9ad99f9c637218d3 100644
--- a/Core/Fitting/FitSuiteImp.cpp
+++ b/Core/Fitting/FitSuiteImp.cpp
@@ -25,7 +25,6 @@
 #include <stdexcept>
 
 FitSuiteImp::FitSuiteImp(const std::function<void()>& notifyObservers)
-//    : m_minimizer(MinimizerFactory::createMinimizer("Minuit2", "Migrad"))
     : m_is_last_iteration(false)
     , m_is_interrupted(false)
     , m_notifyObservers(notifyObservers)
@@ -45,7 +44,7 @@ FitSuiteImp::~FitSuiteImp()
 void FitSuiteImp::clear()
 {
     m_fit_objects.clear();
-//    m_fit_parameters.clear();
+    m_kernel->clear();
     m_fit_strategies.clear();
     m_is_last_iteration = false;
     m_is_interrupted = false;
@@ -63,7 +62,7 @@ FitParameterLinked *FitSuiteImp::addFitParameter(const std::string& name, double
                                   const AttLimits& limits, double step)
 {
     if(step <=0.0)
-        step = value * getOptions().getStepFactor();
+        step = value * getOptions().stepFactor();
 
     FitParameterLinked *result = new FitParameterLinked(name, value, limits, step);
     m_kernel->fitParameters()->addFitParameter(result);
@@ -72,15 +71,11 @@ FitParameterLinked *FitSuiteImp::addFitParameter(const std::string& name, double
 
 void FitSuiteImp::addFitStrategy(const IFitStrategy& strategy)
 {
-    m_fit_strategies.addStrategy(strategy.clone());
+    m_fit_strategies.addStrategy(strategy);
 }
 
 void FitSuiteImp::setMinimizer(IMinimizer* minimizer)
 {
-    if(!minimizer)
-        throw std::runtime_error(
-            "FitSuite::setMinimizer() -> Error. Attempt to set nullptr minimizer");
-//    m_minimizer.reset(minimizer);
     m_kernel->setMinimizer(minimizer);
 }
 
@@ -104,11 +99,6 @@ void FitSuiteImp::runFit()
 
 void FitSuiteImp::minimize()
 {
-    // initialize minimizer with fitting functions
-//    IMinimizer::function_chi2_t fun_chi2 =
-//        [&] (const double* pars) {return m_function_chi2.evaluate(pars);};
-//    m_minimizer->setChiSquaredFunction( fun_chi2, m_fit_parameters.size());
-
     objective_function_t fun_chi2 =
         [&] (const std::vector<double>& pars) {return m_function_chi2.evaluate(pars);};
     m_kernel->setObjectiveFunction( fun_chi2);
@@ -121,11 +111,6 @@ void FitSuiteImp::minimize()
     m_kernel->setGradientFunction(
         fun_gradient, m_fit_objects.getSizeOfDataSet() );
 
-    // initialize minimizer's parameters with the list of local fit parameters
-//    m_minimizer->setParameters(m_fit_parameters);
-
-    // setting number of free parameters for proper chi2 normalization
-//    m_fit_objects.setNfreeParameters((int)m_fit_parameters.numberOfFreeFitParameters());
     m_fit_objects.setNfreeParameters((int)fitParameters()->freeFitParameterCount());
 
     // minimize
@@ -134,9 +119,6 @@ void FitSuiteImp::minimize()
         m_kernel->minimize();
     } catch (int) {}
 
-    // set found values to the parameters
-//    m_minimizer->propagateResults(m_fit_parameters);
-
     m_fit_objects.runSimulations(); // we run simulation once again for best values found
 }
 
@@ -147,35 +129,16 @@ FitParameterSet *FitSuiteImp::fitParameters() {
 // get current number of minimization function calls
 size_t FitSuiteImp::numberOfIterations() const
 {
-    //return m_minimizer->getNCalls();
-    // I don't know which function Minimizer calls (chi2 or gradient)
-    return m_function_chi2.getNCalls() ?
-        m_function_chi2.getNCalls() : m_function_gradient.getNCalls();
+    return m_kernel->functionCalls();
 }
 
 size_t FitSuiteImp::currentStrategyIndex() const
 {
-    return m_fit_strategies.getCurrentStrategyIndex();
+    return m_fit_strategies.currentStrategyIndex();
 }
 
 std::string FitSuiteImp::reportResults() const
 {
-//    std::ostringstream result;
-
-//     result << std::endl;
-//     result
-//         << "--- FitSuite::printResults -----------------------------------------------------\n";
-//     result << " Chi2:" << std::scientific << std::setprecision(8)
-//               << m_fit_objects.getChiSquaredValue()
-//               << "    chi2.NCall:" << m_function_chi2.getNCalls()
-//               << "  grad.NCall:" << m_function_gradient.getNCalls() << ","
-//               << m_function_gradient.getNCallsGradient() << ","
-//               << m_function_gradient.getNCallsTotal() << " (neval, ngrad, total)" << std::endl;
-
-//     result << m_minimizer->reportResults();
-//     result << m_fit_parameters.reportResults();
-
-//     return result.str();
     return m_kernel->reportResults();
 }
 
@@ -184,19 +147,10 @@ const FitKernel *FitSuiteImp::kernel() const
    return m_kernel.get();
 }
 
-//FitKernel *FitSuiteImp::kernel()
-//{
-//   return m_kernel.get();
-//}
-
 bool FitSuiteImp::check_prerequisites() const
 {
-//    if( !m_minimizer ) throw Exceptions::LogicErrorException(
-//        "FitSuite::check_prerequisites() -> Error! No minimizer found.");
     if( !m_fit_objects.getNumberOfFitObjects() ) throw Exceptions::LogicErrorException(
         "FitSuite::check_prerequisites() -> Error! No simulation/data description defined");
-//    if( !m_fit_parameters.size() ) throw Exceptions::LogicErrorException(
-//        "FitSuite::check_prerequisites() -> Error! No fit parameters defined");
     if( m_fit_objects.getSizeOfDataSet() == 0) throw Exceptions::LogicErrorException(
         "FitSuite::check_prerequisites() -> Error! No elements to fit. "
         "Looks like whole detector is masked.");
@@ -217,17 +171,3 @@ void FitSuiteImp::link_fit_parameters()
     msglog(MSG::DEBUG2) << "FitSuite::link_fit_parameters() -> Parameter pool:";
     msglog(MSG::DEBUG2) << *pool;
 }
-
-//void FitSuiteKernel::link_fit_parameters()
-//{
-//    const std::unique_ptr<ParameterPool> pool(m_fit_objects.createParameterTree());
-//    for (auto par: m_fit_parameters.getFitParameters()) {
-//        FitParameterLinked* linkedPar = dynamic_cast<FitParameterLinked*>(par);
-//        if( !linkedPar )
-//            throw std::runtime_error(
-//                "FitKernel::link_fit_parameters() -> Error! Can't cast to FitParameterLinked.");
-//        linkedPar->addMatchedParametersFromPool(pool.get());
-//    }
-//    msglog(MSG::DEBUG2) << "FitSuite::link_fit_parameters() -> Parameter pool:";
-//    msglog(MSG::DEBUG2) << *pool;
-//}
diff --git a/Core/Fitting/FitSuitePrintObserver.cpp b/Core/Fitting/FitSuitePrintObserver.cpp
index addabff36f219896a6a59ef21e285cf985f70246..451cb6f105fb57cbe72a7048ea6171288f1d1424 100644
--- a/Core/Fitting/FitSuitePrintObserver.cpp
+++ b/Core/Fitting/FitSuitePrintObserver.cpp
@@ -17,13 +17,14 @@
 #include "FitSuite.h"
 #include "FitParameterSet.h"
 #include "FitSuiteStrategies.h"
-
+#include "MinimizerUtils.h"
+#include <iostream>
+#include <iomanip>
 
 FitSuitePrintObserver::FitSuitePrintObserver(int print_every_nth)
     : IFitObserver(print_every_nth)
     , m_fit_suite(0)
 {
-    m_last_call_time = boost::posix_time::second_clock::local_time();
 }
 
 void FitSuitePrintObserver::update(FitSuite* fit_suite)
@@ -31,16 +32,14 @@ void FitSuitePrintObserver::update(FitSuite* fit_suite)
     m_fit_suite = fit_suite;
 
     if(fit_suite->numberOfIterations()== 0) {
-        m_start_time = boost::posix_time::second_clock::local_time();
-        m_last_call_time = boost::posix_time::second_clock::local_time();
+        m_run_time.start();
+        m_last_call_time.start();
     }
 
     if(m_strategy_has_changed) {
-        std::cout <<
-            "-------------------------------------------------------------------------------\n";
-        std::cout << (*m_fit_suite->fitStrategies()->getCurrentStrategy()) << std::endl;
-        std::cout <<
-            "-------------------------------------------------------------------------------\n";
+        std::cout << MinimizerUtils::sectionString() << "\n";
+        std::cout << (*m_fit_suite->fitStrategies()->currentStrategy()) << std::endl;
+        std::cout << MinimizerUtils::sectionString() << "\n";
     }
 
     printIterationHeader();
@@ -62,12 +61,10 @@ void FitSuitePrintObserver::printIterationHeader()
 
 void FitSuitePrintObserver::printWallTime()
 {
-    boost::posix_time::time_duration diff = boost::posix_time::microsec_clock::local_time() -
-            m_last_call_time;
-    std::cout << "Wall time since last call:"
-              << std::fixed << std::setprecision(2)
-              << diff.total_milliseconds()/1000. << " sec." <<std::endl;
-    m_last_call_time = boost::posix_time::microsec_clock::local_time();
+    m_last_call_time.stop();
+    std::cout << "Wall time since last call:" << std::fixed << std::setprecision(2)
+              << m_last_call_time.runTime() << std::endl;
+    m_last_call_time.start();
 }
 
 void FitSuitePrintObserver::printParameters()
@@ -78,11 +75,9 @@ void FitSuitePrintObserver::printParameters()
 void FitSuitePrintObserver::printFitResults()
 {
     std::cout << "This was the last iteration." << std::endl;
+    m_run_time.stop();
     m_fit_suite->printResults();
-    boost::posix_time::time_duration  diff = boost::posix_time::second_clock::local_time() -
-            m_start_time;
-    std::cout << "Total time spend: "
-              << std::fixed << std::setprecision(2)
-              << diff.total_milliseconds()/1000. << " sec." <<std::endl;
+    std::cout << "Total time spend: " << std::fixed << std::setprecision(2)
+              << m_run_time.runTime() << " sec." <<std::endl;
     std::cout << std::endl;
 }
diff --git a/Core/Fitting/FitSuitePrintObserver.h b/Core/Fitting/FitSuitePrintObserver.h
index 5f704b30334ce938f0d127ad6780764f51fac044..e17a79bba97f3248b02961746b9c134d2b001af6 100644
--- a/Core/Fitting/FitSuitePrintObserver.h
+++ b/Core/Fitting/FitSuitePrintObserver.h
@@ -17,7 +17,7 @@
 #define FITSUITEPRINTOBSERVER_H
 
 #include "IFitObserver.h"
-#include <boost/date_time/posix_time/posix_time.hpp>
+#include "TimeInterval.h"
 
 //! @class FitSuitePrintObserver
 //! @ingroup fitting_internal
@@ -38,8 +38,8 @@ protected:
     void printFitResults();
 
     FitSuite* m_fit_suite;
-    boost::posix_time::ptime m_start_time;
-    boost::posix_time::ptime m_last_call_time;
+    TimeInterval m_run_time;
+    TimeInterval m_last_call_time;
 };
 
 #endif // FITSUITEPRINTOBSERVER_H
diff --git a/Core/Fitting/FitSuiteStrategies.cpp b/Core/Fitting/FitSuiteStrategies.cpp
index 139a5f92766eef4ee467458ae939ec1733cd9bc5..5627961529e39261c575584721bf0e8ad13cf585 100644
--- a/Core/Fitting/FitSuiteStrategies.cpp
+++ b/Core/Fitting/FitSuiteStrategies.cpp
@@ -14,8 +14,8 @@
 // ************************************************************************** //
 
 #include "FitSuiteStrategies.h"
-#include <cassert>
 #include "FitSuiteImp.h"
+#include <stdexcept>
 
 FitSuiteStrategies::FitSuiteStrategies()
     : m_kernel(nullptr), m_current_strategy_index(0)
@@ -33,18 +33,19 @@ void FitSuiteStrategies::clear()
     m_current_strategy_index = 0;
 }
 
-IFitStrategy *FitSuiteStrategies::getCurrentStrategy()
+IFitStrategy *FitSuiteStrategies::currentStrategy()
 {
-    assert(m_current_strategy_index < m_strategies.size());
+    if(m_current_strategy_index >= m_strategies.size())
+        throw std::runtime_error("FitSuiteStrategies::currentStrategy() -> Error in index.");
 
     return m_strategies[m_current_strategy_index];
 }
 
-void FitSuiteStrategies::addStrategy(IFitStrategy* strategy)
+void FitSuiteStrategies::addStrategy(const IFitStrategy &strategy)
 {
-    assert(m_kernel);
-    strategy->init(m_kernel);
-    m_strategies.push_back(strategy);
+    IFitStrategy *clone = strategy.clone();
+    clone->init(m_kernel);
+    m_strategies.push_back(clone);
 }
 
 void FitSuiteStrategies::minimize()
diff --git a/Core/Fitting/FitSuiteStrategies.h b/Core/Fitting/FitSuiteStrategies.h
index 4b67af448db299648bc5b2ea14e20f15777010aa..f338940dc99d6fd3cdeb6f8c2b834a90ab8869ca 100644
--- a/Core/Fitting/FitSuiteStrategies.h
+++ b/Core/Fitting/FitSuiteStrategies.h
@@ -19,7 +19,6 @@
 #include "IFitStrategy.h"
 #include "SafePointerVector.h"
 
-
 //! @class FitSuiteStrategies
 //! @ingroup fitting_internal
 //! @brief Collection of strategies to fit
@@ -29,20 +28,22 @@ class BA_CORE_API_ FitSuiteStrategies
 public:
     FitSuiteStrategies();
     virtual ~FitSuiteStrategies();
+    FitSuiteStrategies(const FitSuiteStrategies &other) = delete;
+    FitSuiteStrategies& operator=(const FitSuiteStrategies &other) = delete;
 
     void init(FitSuiteImp* fit_suite) { m_kernel = fit_suite; }
 
-    void addStrategy(IFitStrategy* strategy);
+    void addStrategy(const IFitStrategy& strategy);
 
     void minimize();
 
-    size_t getCurrentStrategyIndex() const { return m_current_strategy_index; }
+    size_t currentStrategyIndex() const { return m_current_strategy_index; }
 
     size_t size() const { return m_strategies.size(); }
 
     void clear();
 
-    IFitStrategy* getCurrentStrategy();
+    IFitStrategy* currentStrategy();
 
 private:
     SafePointerVector<IFitStrategy> m_strategies;
diff --git a/Core/Fitting/IFitStrategy.cpp b/Core/Fitting/IFitStrategy.cpp
index 33e7199dcce41af0173749b00513fb499f63590e..6f1e64d4280f95e9289fa0e1332318496e0d0bb4 100644
--- a/Core/Fitting/IFitStrategy.cpp
+++ b/Core/Fitting/IFitStrategy.cpp
@@ -15,12 +15,7 @@
 
 #include "IFitStrategy.h"
 #include "FitSuiteImp.h"
-#include "Exceptions.h"
-
-IFitStrategy::IFitStrategy()
-    : m_kernel(nullptr)
-{
-}
+#include <stdexcept>
 
 IFitStrategy::IFitStrategy(const std::string &name)
     : INamed(name), m_kernel(nullptr)
@@ -32,9 +27,9 @@ void IFitStrategy::init(FitSuiteImp* fit_suite)
     m_kernel = fit_suite;
 }
 
-void IFitStrategy::print(std::ostream &ostr) const
+std::string IFitStrategy::toString() const
 {
-    ostr << getName();
+    return getName();
 }
 
 IFitStrategy::IFitStrategy(const IFitStrategy &other)
@@ -50,17 +45,21 @@ FitStrategyDefault::FitStrategyDefault()
 {
 }
 
-IFitStrategy* FitStrategyDefault::clone() const
+FitStrategyDefault *FitStrategyDefault::clone() const
 {
-    return new FitStrategyDefault();
+    return new FitStrategyDefault(*this);
 }
 
 void FitStrategyDefault::execute()
 {
     if( !m_kernel )
-        throw Exceptions::NullPointerException(
-            "FitStrategyDefault::execute() -> FitSuite doesn't exists");
+        throw std::runtime_error("FitStrategyDefault::execute() -> FitSuite doesn't exists");
 
-    // calling minimization
     m_kernel->minimize();
 }
+
+FitStrategyDefault::FitStrategyDefault(const FitStrategyDefault &other)
+    : IFitStrategy(other)
+{
+
+}
diff --git a/Core/Fitting/IFitStrategy.h b/Core/Fitting/IFitStrategy.h
index 8da04cd4bbbf69d6da4eaee732df629423db6a18..d839040e21491ddfee0c803fc0e47fdce81b44e0 100644
--- a/Core/Fitting/IFitStrategy.h
+++ b/Core/Fitting/IFitStrategy.h
@@ -29,28 +29,25 @@ class FitSuiteImp;
 class BA_CORE_API_ IFitStrategy : public INamed
 {
 public:
-    IFitStrategy();
-    IFitStrategy(const std::string& name);
+    explicit IFitStrategy(const std::string& name);
+    IFitStrategy& operator=(const IFitStrategy &other) = delete;
+    virtual ~IFitStrategy() {}
+
     virtual IFitStrategy* clone() const = 0;
 
-    virtual ~IFitStrategy() {};
     virtual void init(FitSuiteImp* fit_suite);
     virtual void execute() = 0;
 
     friend std::ostream &operator<<(std::ostream &ostr, const IFitStrategy &m)
     {
-        m.print(ostr);
-        return ostr;
+        ostr << m.toString(); return ostr;
     }
 
 protected:
-    virtual void print(std::ostream &ostr) const;
-
-    FitSuiteImp* m_kernel;
     IFitStrategy(const IFitStrategy &other);
 
-private:
-    IFitStrategy& operator=(const IFitStrategy& );
+    virtual std::string toString() const;
+    FitSuiteImp* m_kernel;
 };
 
 
@@ -60,10 +57,13 @@ private:
 
 class BA_CORE_API_ FitStrategyDefault : public IFitStrategy
 {
- public:
+public:
     FitStrategyDefault();
-    virtual IFitStrategy* clone() const;
+    virtual FitStrategyDefault* clone() const;
     virtual void execute();
+
+protected:
+    FitStrategyDefault(const FitStrategyDefault &other);
 };
 
 #endif // IFITSTRATEGY_H
diff --git a/Core/Parametrization/ParameterPool.cpp b/Core/Parametrization/ParameterPool.cpp
index 75af9abc67314e38f626a0d24cbc51149f7ab5f4..952a9973aa966e94e194f86a591e925dedefdda4 100644
--- a/Core/Parametrization/ParameterPool.cpp
+++ b/Core/Parametrization/ParameterPool.cpp
@@ -117,7 +117,7 @@ std::vector<RealParameter*> ParameterPool::getMatchedParameters(const std::strin
     std::vector<RealParameter*> selected_parameters;
     // loop over all parameters in the pool
     for (auto* par: m_params)
-        if( StringUtils::matchesPattern( par->getName(), pattern ) )
+        if( Utils::String::matchesPattern( par->getName(), pattern ) )
             selected_parameters.push_back(par);
     if( selected_parameters.empty() )
         report_find_matched_parameters_error(pattern);
@@ -145,7 +145,7 @@ int ParameterPool::setMatchedParametersValue(const std::string& pattern, double
 {
     int npars(0);
     for (auto* par: m_params) {
-        if( StringUtils::matchesPattern( par->getName(), pattern ) ) {
+        if( Utils::String::matchesPattern( par->getName(), pattern ) ) {
             try {
                 par->setValue(value);
                 npars++;
diff --git a/Core/Tools/Utils.cpp b/Core/Tools/Utils.cpp
index 63926cd01891ded2489b8f5dbeacf986932d8a02..e2a109c5d51c47fd7d61f136d6b0ce97a0d70764 100644
--- a/Core/Tools/Utils.cpp
+++ b/Core/Tools/Utils.cpp
@@ -14,7 +14,6 @@
 // ************************************************************************** //
 
 #include "Utils.h"
-#include <boost/algorithm/string.hpp>
 #include <boost/date_time/posix_time/posix_time.hpp>
 #include <thread>
 
@@ -23,32 +22,6 @@
 #endif
 #endif
 
-//! Returns token vector obtained by splitting string at delimiters.
-
-std::vector<std::string> Utils::String::split(const std::string& text, const std::string& delimiter)
-{
-    std::vector<std::string> tokens;
-    boost::split(tokens, text, boost::is_any_of(delimiter));
-    return tokens;
-}
-
-void Utils::String::replaceItemsFromString(
-    std::string& text, const std::vector<std::string>& items, const std::string& replacement)
-{
-    for(size_t i=0; i<items.size(); ++i)
-        boost::replace_all(text, items[i], replacement);
-}
-
-std::string Utils::String::join(const std::vector<std::string>& joinable, const std::string& joint)
-{
-    std::string result;
-    size_t n = joinable.size();
-    for(size_t i=0; i<n-1; ++i)
-        result += joinable[i] + joint;
-    result += joinable[n-1];
-    return result;
-}
-
 int Utils::System::getThreadHardwareConcurrency()
 {
     return std::thread::hardware_concurrency();
diff --git a/Core/Tools/Utils.h b/Core/Tools/Utils.h
index 2d3593595dabc853fd21baac186d4c7c0131fde2..d361cf6be419beb89522a7ad3d01e38e122813b5 100644
--- a/Core/Tools/Utils.h
+++ b/Core/Tools/Utils.h
@@ -17,29 +17,12 @@
 #define UTILS_H
 
 #include "WinDllMacros.h"
+#include "StringUtils.h"
 #include <string>
 #include <vector>
 
 namespace Utils {
 
-//! Collection of utilities for std::string.
-//! @ingroup tools_internal
-
-class BA_CORE_API_ String
-{
-public:
-    //! Split string into vector of string using delimeter.
-    static std::vector<std::string> split(const std::string& text, const std::string& delimeter);
-
-    //! replace all occurences of items from string text with delimeter
-    static void replaceItemsFromString(std::string& text, const std::vector<std::string>& items,
-                                       const std::string& replacement=std::string(""));
-
-    //! Returns string obtain by joining vector elements
-    static std::string join(const std::vector<std::string>& joinable, const std::string& joint);
-};
-
-
 class BA_CORE_API_ System
 {
 public:
diff --git a/Examples/python/fitting/ex06_FitStrategies/FitStrategyAdjustMinimizer.py b/Examples/python/fitting/ex06_FitStrategies/FitStrategyAdjustMinimizer.py
index 4d038460d91844a45adbfe6c278202fc1b322778..1adc65d8e36847635e3f89c35ca0fb6228d06e81 100644
--- a/Examples/python/fitting/ex06_FitStrategies/FitStrategyAdjustMinimizer.py
+++ b/Examples/python/fitting/ex06_FitStrategies/FitStrategyAdjustMinimizer.py
@@ -96,23 +96,22 @@ def run_fitting():
     # setting fitting parameters with starting values
     # Here we select starting values being quite far from true values
     # to puzzle our minimizer's as much as possible
-    fit_suite.addFitParameter(
-        "*Height", 1.*nm, ba.RealLimits.limited(0.01, 30.), 0.04*nm)
-    fit_suite.addFitParameter(
-        "*Radius", 20.*nm, ba.RealLimits.limited(0.01, 30.), 0.06*nm)
+    fit_suite.addFitParameter("*Height", 1.*nm).setLimited(0.01, 30.)\
+        .setStep(0.05*nm)
+    fit_suite.addFitParameter("*Radius", 20.*nm).setLimited(0.01, 30.)\
+        .setStep(0.05*nm)
 
     # Now we create first fig strategy which will run first minimization round
     # using the Genetic minimizer.
     # The Genetic minimizer is able to explore large parameter space
     # without being trapped by some local minima.
-    strategy1 = ba.FitStrategyAdjustMinimizer("Genetic")
-    strategy1.getMinimizerOptions().setMaxIterations(3)
+    strategy1 = ba.AdjustMinimizerStrategy("Genetic", "", "MaxIterations=1")
     fit_suite.addFitStrategy(strategy1)
 
     # Second fit strategy will use another minimizer.
     # It starts from best parameters found in previous minimization
     # and then continues until fit converges.
-    strategy2 = ba.FitStrategyAdjustMinimizer("Minuit2", "Migrad")
+    strategy2 = ba.AdjustMinimizerStrategy("Minuit2", "Migrad")
     fit_suite.addFitStrategy(strategy2)
 
     # running fit
@@ -120,9 +119,8 @@ def run_fitting():
 
     print("Fitting completed.")
     print("chi2:", fit_suite.getChi2())
-    fitpars = fit_suite.getFitParameters()
-    for i in range(0, fitpars.size()):
-        print(fitpars[i].getName(), fitpars[i].getValue(), fitpars[i].getError())
+    for fitPar in fit_suite.fitParameters():
+        print(fitPar.name(), fitPar.value(), fitPar.error())
 
 
 if __name__ == '__main__':
diff --git a/Examples/python/fitting/ex10_FitGALAXIData/FitGALAXIData.py b/Examples/python/fitting/ex10_FitGALAXIData/FitGALAXIData.py
index cde1ee93b72cfc17e3dae00dc1359e35e5a2f534..4af8736786ef049e0b352ae213354e58169f0e8a 100644
--- a/Examples/python/fitting/ex10_FitGALAXIData/FitGALAXIData.py
+++ b/Examples/python/fitting/ex10_FitGALAXIData/FitGALAXIData.py
@@ -83,13 +83,12 @@ def run_fitting():
 
     use_two_minimizers_strategy = False
     if use_two_minimizers_strategy:
-        strategy1 = ba.FitStrategyAdjustMinimizer("Genetic")
-        strategy1.getMinimizerOptions().setMaxIterations(3)
+        strategy1 = ba.AdjustMinimizerStrategy("Genetic")
         fit_suite.addFitStrategy(strategy1)
 
         # Second fit strategy will use another algorithm.
         # It will use best parameters found from previous minimization round.
-        strategy2 = ba.FitStrategyAdjustMinimizer("Minuit2", "Migrad")
+        strategy2 = ba.AdjustMinimizerStrategy("Minuit2", "Migrad")
         fit_suite.addFitStrategy(strategy2)
 
     # running fit
diff --git a/Fit/Kernel/FitKernel.cpp b/Fit/Kernel/FitKernel.cpp
index fee3e139c273d20d05eb764cf47b68fb41f5cec1..e0b4cc78cc147ed7b808c43a28a0d5150a2b7039 100644
--- a/Fit/Kernel/FitKernel.cpp
+++ b/Fit/Kernel/FitKernel.cpp
@@ -34,6 +34,11 @@ FitKernel::~FitKernel()
 
 }
 
+void FitKernel::clear()
+{
+    m_impl->clear();
+}
+
 void FitKernel::setMinimizer(const std::string &minimizerName, const std::string &algorithmName)
 {
     m_impl->setMinimizer(MinimizerFactory::createMinimizer(minimizerName, algorithmName));
@@ -41,6 +46,9 @@ void FitKernel::setMinimizer(const std::string &minimizerName, const std::string
 
 void FitKernel::setMinimizer(IMinimizer *minimizer)
 {
+    if(!minimizer)
+        throw std::runtime_error("FitKernel::setMinimizer() -> Error. Nullptr minimizer");
+
     m_impl->setMinimizer(minimizer);
 }
 
@@ -88,3 +96,8 @@ const FitParameterSet *FitKernel::fitParameters() const
 {
     return m_impl->fitParameters();
 }
+
+int FitKernel::functionCalls() const
+{
+    return m_impl->functionCalls();
+}
diff --git a/Fit/Kernel/FitKernel.h b/Fit/Kernel/FitKernel.h
index 78af1f34ac95070871d6943180b86eebe143d786..6bfe93f87f74791b8e15951945c4d1e2794a6709 100644
--- a/Fit/Kernel/FitKernel.h
+++ b/Fit/Kernel/FitKernel.h
@@ -36,6 +36,8 @@ public:
     FitKernel();
     ~FitKernel();
 
+    void 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
@@ -63,6 +65,8 @@ public:
     FitParameterSet* fitParameters();
     const FitParameterSet* fitParameters() const;
 
+    //! Number of objective function calls.
+    int functionCalls() const;
 private:
     std::unique_ptr<FitKernelImp> m_impl;
 };
diff --git a/Fit/Kernel/FitKernelImp.cpp b/Fit/Kernel/FitKernelImp.cpp
index e4f2dac7d2e9a39d0ecd35c19a21cc6b347c600c..21293f0a3baa02279593789feb27b78881293cd8 100644
--- a/Fit/Kernel/FitKernelImp.cpp
+++ b/Fit/Kernel/FitKernelImp.cpp
@@ -28,6 +28,12 @@ FitKernelImp::~FitKernelImp()
 
 }
 
+void FitKernelImp::clear()
+{
+    m_fit_parameters.clear();
+    m_minimizer.reset();
+}
+
 void FitKernelImp::setMinimizer(IMinimizer *minimizer)
 {
     m_minimizer.reset(minimizer);
@@ -50,6 +56,12 @@ void FitKernelImp::setGradientFunction(gradient_function_t func, int ndatasize)
 
 void FitKernelImp::minimize()
 {
+    if(!m_minimizer)
+        throw std::runtime_error("FitKernelImp::minimize() -> Error. Minimizer is not defined.");
+
+    if(m_fit_parameters.size() == 0)
+        throw std::runtime_error("FitKernelImp::minimize() -> Error. No fit parameters defined.");
+
     m_time_interval.start();
 
     objective_function_t func =
@@ -65,10 +77,7 @@ void FitKernelImp::minimize()
 
     m_minimizer->setParameters(m_fit_parameters);
 
-    // minimize
-    try {
-        m_minimizer->minimize();
-    } catch (int) {}
+    m_minimizer->minimize();
 
     // set found values to the parameters
     m_minimizer->propagateResults(m_fit_parameters);
@@ -97,3 +106,8 @@ IMinimizer *FitKernelImp::minimizer()
 {
     return m_minimizer.get();
 }
+
+int FitKernelImp::functionCalls() const
+{
+    return m_objective_function.functionCalls();
+}
diff --git a/Fit/Kernel/FitKernelImp.h b/Fit/Kernel/FitKernelImp.h
index efd2221ce7bd5d8c843471daabf8d69bff6a77ad..794c101083101d4fdce4c4fde80c4f92bf80b212 100644
--- a/Fit/Kernel/FitKernelImp.h
+++ b/Fit/Kernel/FitKernelImp.h
@@ -36,6 +36,8 @@ public:
     FitKernelImp();
     ~FitKernelImp();
 
+    void clear();
+
     //! Sets minimizer
     void setMinimizer(IMinimizer* minimizer);
 
@@ -55,6 +57,8 @@ public:
 
     IMinimizer *minimizer();
 
+    //! Number of objective function calls.
+    int functionCalls() const;
 private:
     FitParameterSet m_fit_parameters;
     std::unique_ptr<IMinimizer> m_minimizer;
diff --git a/Fit/Kernel/FitOptions.h b/Fit/Kernel/FitOptions.h
index de519647eb57afca57c03746d91f9faeaac80ed9..20f4382038258b00e347c02a3f0cc56614698af1 100644
--- a/Fit/Kernel/FitOptions.h
+++ b/Fit/Kernel/FitOptions.h
@@ -28,10 +28,10 @@ class BA_CORE_API_ FitOptions
     FitOptions();
     ~FitOptions(){}
 
-    double getDerivEpsilon() const;
+    double derivEpsilon() const;
     void setDerivEpsilon(double deriv_epsilon);
 
-    double getStepFactor() const;
+    double stepFactor() const;
     void setStepFactor(double step_factor);
 
  private:
@@ -45,7 +45,7 @@ inline FitOptions::FitOptions()
 {
 }
 
-inline double FitOptions::getDerivEpsilon() const
+inline double FitOptions::derivEpsilon() const
 {
     return m_deriv_epsilon;
 }
@@ -55,7 +55,7 @@ inline void FitOptions::setDerivEpsilon(double deriv_epsilon)
     m_deriv_epsilon = deriv_epsilon;
 }
 
-inline double FitOptions::getStepFactor() const
+inline double FitOptions::stepFactor() const
 {
     return m_step_factor;
 }
@@ -65,8 +65,6 @@ inline void FitOptions::setStepFactor(double step_factor)
     m_step_factor = step_factor;
 }
 
-
-
 #endif // FITOPTIONS_H
 
 
diff --git a/Fit/Kernel/IMinimizer.cpp b/Fit/Kernel/IMinimizer.cpp
index 9053c928bccf8daa633e10d60378a7939f902d37..aa8eda5665756ef77a8bcc35d48690606646ee06 100644
--- a/Fit/Kernel/IMinimizer.cpp
+++ b/Fit/Kernel/IMinimizer.cpp
@@ -40,9 +40,9 @@ void IMinimizer::setParameters(const FitParameterSet & /*parameters*/)
     throw std::runtime_error("IMinimizer::setParameters() -> Not implemented.");
 }
 
-double IMinimizer::getMinValue() const
+double IMinimizer::minValue() const
 {
-    throw std::runtime_error("IMinimizer::getMinValue() -> Not implemented.");
+    throw std::runtime_error("IMinimizer::minValue() -> Not implemented.");
 }
 
 std::string IMinimizer::reportResults() const
@@ -53,6 +53,10 @@ std::string IMinimizer::reportResults() const
 
 void IMinimizer::propagateResults(FitParameterSet &/*parameters*/)
 {
-    throw std::runtime_error("IMinimizer::propagateResults() -> Not implemented.");
+    throw std::runtime_error("IMinimizer::propagateResults() -> Not implemented.");    
+}
 
+void IMinimizer::setOptions(const std::string &/*options*/)
+{
+    throw std::runtime_error("IMinimizer::setOptions() -> Not implemented.");
 }
diff --git a/Fit/Kernel/IMinimizer.h b/Fit/Kernel/IMinimizer.h
index da590095ee8d65e25b10e7536542fa5a80f983d0..b9b91c2c4cc9192f09d5fe8853a827cbad85c16b 100644
--- a/Fit/Kernel/IMinimizer.h
+++ b/Fit/Kernel/IMinimizer.h
@@ -32,6 +32,9 @@ class BA_CORE_API_ IMinimizer
     IMinimizer() { }
     virtual ~IMinimizer() { }
 
+    IMinimizer(const IMinimizer &other) = delete;
+    IMinimizer & operator=(const IMinimizer &other) = delete;
+
     //! return name of the minimizer
     virtual std::string minimizerName() const;
 
@@ -52,13 +55,16 @@ class BA_CORE_API_ IMinimizer
     virtual void setGradientFunction(gradient_function_t, int ){}
 
     //! Returns minimum function value
-    virtual double getMinValue() const;
+    virtual double minValue() const;
 
     //! Prints fit results
     virtual std::string reportResults() const;
 
     //! Propagates results of minimization to fit parameter set
     virtual void propagateResults(FitParameterSet& parameters);
+
+    //! Sets option string to the minimizer
+    virtual void setOptions(const std::string &options);
 };
 
 #endif
diff --git a/Fit/Kernel/MinimizerFactory.cpp b/Fit/Kernel/MinimizerFactory.cpp
index 0228f4292eaa0ed5acf0eafe58ca9fad39a3faf8..ee660ffa9214512221e8a9d60c7b2de9c0a0bacd 100644
--- a/Fit/Kernel/MinimizerFactory.cpp
+++ b/Fit/Kernel/MinimizerFactory.cpp
@@ -26,7 +26,7 @@
 
 IMinimizer* MinimizerFactory::createMinimizer(const std::string& minimizerName,
                                               const std::string& algorithmType,
-                                              const std::string& )
+                                              const std::string& optionString)
 {
     IMinimizer* result(0);
 
@@ -61,6 +61,9 @@ IMinimizer* MinimizerFactory::createMinimizer(const std::string& minimizerName,
         throw std::runtime_error(ostr.str());
     }
 
+    if(!optionString.empty())
+        result->setOptions(optionString);
+
     return result;
 }
 
@@ -74,18 +77,6 @@ std::string MinimizerFactory::catalogueToString()
     return catalogue().toString();
 }
 
-//! Create minimizer using existing one. Only minimizer type and minimizer settings are propagated.
-//! This method serves as a kind of 'shallow' clone for minimizer.
-//! The reason why the minimizer doesn't have own clone method is because of complicate structure of
-//! ROOT minimizer internals.
-IMinimizer* MinimizerFactory::createMinimizer(const IMinimizer* other)
-{
-    IMinimizer *result = createMinimizer(other->minimizerName(), other->algorithmName());
-//    if(other->getOptions())
-//        result->setOptions(*other->getOptions());
-    return result;
-}
-
 const MinimizerCatalogue& MinimizerFactory::catalogue()
 {
     static MinimizerCatalogue s_catalogue = MinimizerCatalogue();
diff --git a/Fit/Kernel/MinimizerFactory.h b/Fit/Kernel/MinimizerFactory.h
index e0e07f16d826b61ea55256b86f69349fed2b3af8..82701b51b7801b3f4e5e3a49c46e5b966dca4de9 100644
--- a/Fit/Kernel/MinimizerFactory.h
+++ b/Fit/Kernel/MinimizerFactory.h
@@ -43,16 +43,13 @@ class BA_CORE_API_ MinimizerFactory
 {
  public:
     static IMinimizer* createMinimizer(const std::string& minimizerName,
-        const std::string& algorithmType="",
-        const std::string& ="");
+                                       const std::string& algorithmType = std::string(),
+                                       const std::string& optionString  = std::string());
 
     static void printCatalogue();
 
     static std::string catalogueToString();
 
-    //! Returns copy of minimizer type and settings. No full clone, would be too heavy!
-    static IMinimizer* createMinimizer(const IMinimizer* other);
-
     static const MinimizerCatalogue& catalogue();
 };
 
diff --git a/Fit/Kernel/MinimizerOptions.cpp b/Fit/Kernel/MinimizerOptions.cpp
index 0e9a22517e8595ced6b22eb3e887ddcb944cf8a2..146dba29c4c15862b9af795e11ee03b3f280017e 100644
--- a/Fit/Kernel/MinimizerOptions.cpp
+++ b/Fit/Kernel/MinimizerOptions.cpp
@@ -14,9 +14,16 @@
 // ************************************************************************** //
 
 #include "MinimizerOptions.h"
+#include "StringUtils.h"
 #include <sstream>
+#include <iostream>
+#include <stdexcept>
 
-std::string MinimizerOptions::toOptionString(const std::string &delimeter) const
+namespace {
+const std::string delimeter(";");
+}
+
+std::string MinimizerOptions::toOptionString() const
 {
     std::ostringstream result;
     for(auto option: m_options) {
@@ -25,3 +32,37 @@ std::string MinimizerOptions::toOptionString(const std::string &delimeter) const
     return result.str();
 }
 
+void MinimizerOptions::setOptionString(const std::string &options)
+{
+    // splits multiple option string "Strategy=1;Tolerance=0.01;"
+    std::vector<std::string> tokens = Utils::String::split(options, delimeter);
+    try {
+        for(std::string opt : tokens)
+            if(opt.size())
+                    processCommand(opt);
+    } catch(std::exception &ex) {
+        std::ostringstream ostr;
+        ostr << "MinimizerOptions::setOptions() -> Error. Can't parse option string '"
+             << options << "'.\n, error message '"
+             << ex.what() << "'";
+        throw std::runtime_error(ostr.str());
+    }
+}
+
+//! Process single option string 'Tolerance=0.01' and sets the value
+//! to corresponding MultiOption
+
+void MinimizerOptions::processCommand(const std::string &command)
+{
+    std::vector<std::string> tokens = Utils::String::split(command, "=");
+    if(tokens.size() != 2)
+        throw std::runtime_error("MinimizerOptions::processOption() -> Can't parse option '"+
+                                 command+"'");
+
+    std::string name = tokens[0];
+    std::string value = tokens[1];
+
+    OptionContainer::option_t opt = option(name);
+    opt->setFromString(value);
+}
+
diff --git a/Fit/Kernel/MinimizerOptions.h b/Fit/Kernel/MinimizerOptions.h
index afbfefb20dbee419aee6df04f706be3113283a1d..bc8071b4667115be5888237e419bac679af5f3f0 100644
--- a/Fit/Kernel/MinimizerOptions.h
+++ b/Fit/Kernel/MinimizerOptions.h
@@ -25,9 +25,14 @@
 class BA_CORE_API_ MinimizerOptions : public OptionContainer {
 public:
 
-    //! Returns string with all options using given delimeter
-    std::string toOptionString(const std::string &delimeter=";") const;
+    //! Returns string with all options (i.e. "Strategy=1;Tolerance=0.01;")
+    std::string toOptionString() const;
 
+    //! Set options from their string representation
+    void setOptionString(const std::string &options);
+
+private:
+    void processCommand(const std::string &command);
 };
 
 #endif
diff --git a/Fit/Kernel/MultiOption.cpp b/Fit/Kernel/MultiOption.cpp
index 7790432f77a50f6e58d2863e1e99f281a3884893..82641611fc3cc3f864fa30e018d7f9bff033734d 100644
--- a/Fit/Kernel/MultiOption.cpp
+++ b/Fit/Kernel/MultiOption.cpp
@@ -14,6 +14,7 @@
 // ************************************************************************** //
 
 #include "MultiOption.h"
+#include <boost/lexical_cast.hpp>
 
 MultiOption::MultiOption(const std::string &name)
     : m_name(name)
@@ -45,3 +46,20 @@ MultiOption::variant_t& MultiOption::defaultValue()
 {
     return m_default_value;
 }
+
+//! Sets the value of option from string.
+//! TODO find more elegant way (without if/else and boost::lexical_cast
+
+void MultiOption::setFromString(const std::string &value)
+{
+    if(m_value.which() == 0) {
+        m_value = boost::lexical_cast<int>(value);
+    }
+
+    else if(m_value.which() == 1) {
+        m_value = boost::lexical_cast<double>(value);
+
+    } else {
+        m_value = value;
+    }
+}
diff --git a/Fit/Kernel/MultiOption.h b/Fit/Kernel/MultiOption.h
index a622efe24ea8012830c1912f0f5e4383c19d21ce..ab887d3e7687efb6e759731e6730f4ab6bcdf28d 100644
--- a/Fit/Kernel/MultiOption.h
+++ b/Fit/Kernel/MultiOption.h
@@ -54,6 +54,8 @@ public:
     template<typename T>
     T getDefault() const;
 
+    void setFromString(const std::string &value);
+
 private:
     std::string m_name;
     std::string m_description;
diff --git a/Fit/RootAdapter/RootMinimizerAdapter.cpp b/Fit/RootAdapter/RootMinimizerAdapter.cpp
index 2699da77b229c25d2cc908f91df86ea7880c2d4d..ab66be1f34c3bdb4376643914e3aa011ab926176 100644
--- a/Fit/RootAdapter/RootMinimizerAdapter.cpp
+++ b/Fit/RootAdapter/RootMinimizerAdapter.cpp
@@ -85,6 +85,11 @@ void RootMinimizerAdapter::setGradientFunction(gradient_function_t func, int nda
     m_obj_func->setGradientCallback(func, ndatasize);
 }
 
+double RootMinimizerAdapter::minValue() const
+{
+    return rootMinimizer()->MinValue();
+}
+
 std::string RootMinimizerAdapter::reportResults() const
 {
     MinimizerResultsHelper reporter;
@@ -112,7 +117,7 @@ std::map<std::string, std::string> RootMinimizerAdapter::statusMap() const
         result["ProvidesError"] = "Doesn't provide error calculation";
     }
 
-    result["MinValue"] = to_string_scientific(rootMinimizer()->MinValue());
+    result["MinValue"] = to_string_scientific(minValue());
 
     return result;
 }
@@ -138,6 +143,11 @@ void RootMinimizerAdapter::propagateResults(FitParameterSet &parameters)
     }
 }
 
+void RootMinimizerAdapter::setOptions(const std::string &optionString)
+{
+    options().setOptionString(optionString);
+}
+
 //! Propagate fit parameter down to ROOT minimizer.
 
 void RootMinimizerAdapter::setParameter(size_t index, const FitParameter *par)
diff --git a/Fit/RootAdapter/RootMinimizerAdapter.h b/Fit/RootAdapter/RootMinimizerAdapter.h
index 065dfc627d92e017246bd54e4f5b300eddd5c9b3..04b9eb8ea3ac546b08c0207d9e92dee5f00a3fd7 100644
--- a/Fit/RootAdapter/RootMinimizerAdapter.h
+++ b/Fit/RootAdapter/RootMinimizerAdapter.h
@@ -52,6 +52,8 @@ public:
 
     void setGradientFunction(gradient_function_t func, int ndatasize) override final;
 
+    double minValue() const override final;
+
     std::string reportResults() const override final;
 
     MinimizerOptions& options() { return m_options; }
@@ -69,6 +71,9 @@ public:
     //! Propagates results of minimization to fit parameter set
     void propagateResults(FitParameterSet& parameters) override;
 
+    //! Sets option string to the minimizer
+    void setOptions(const std::string &optionString) override final;
+
 protected:
     RootMinimizerAdapter(const MinimizerInfo &minimizerInfo);
 
diff --git a/Fit/Utils/StringUtils.cpp b/Fit/Utils/StringUtils.cpp
index 698f96c4f2158d0df6fe1c2bd6dffd5043d26908..c2f778db68450401aa024eaf388852a1209b74d3 100644
--- a/Fit/Utils/StringUtils.cpp
+++ b/Fit/Utils/StringUtils.cpp
@@ -19,7 +19,7 @@
 
 //! Returns true if text matches pattern with wildcards '*' and '?'.
 
-bool StringUtils::matchesPattern(const std::string& text, const std::string& wildcardPattern)
+bool Utils::String::matchesPattern(const std::string& text, const std::string& wildcardPattern)
 {
     bool caseSensitive(true);
 
@@ -52,9 +52,35 @@ bool StringUtils::matchesPattern(const std::string& text, const std::string& wil
 
 //! Returns string right-padded with blanks.
 
-std::string StringUtils::padRight(const std::string& name, int length)
+std::string Utils::String::padRight(const std::string& name, int length)
 {
     std::string result = name;
     result.resize(length,' ');
     return result;
 }
+
+//! Returns token vector obtained by splitting string at delimiters.
+
+std::vector<std::string> Utils::String::split(const std::string& text, const std::string& delimiter)
+{
+    std::vector<std::string> tokens;
+    boost::split(tokens, text, boost::is_any_of(delimiter));
+    return tokens;
+}
+
+void Utils::String::replaceItemsFromString(
+    std::string& text, const std::vector<std::string>& items, const std::string& replacement)
+{
+    for(size_t i=0; i<items.size(); ++i)
+        boost::replace_all(text, items[i], replacement);
+}
+
+std::string Utils::String::join(const std::vector<std::string>& joinable, const std::string& joint)
+{
+    std::string result;
+    size_t n = joinable.size();
+    for(size_t i=0; i<n-1; ++i)
+        result += joinable[i] + joint;
+    result += joinable[n-1];
+    return result;
+}
diff --git a/Fit/Utils/StringUtils.h b/Fit/Utils/StringUtils.h
index 8075caf00ca08248a3c47d4bfc03c8218aac9fdf..ec787543261715d879e9845e34e2115e2bc78e38 100644
--- a/Fit/Utils/StringUtils.h
+++ b/Fit/Utils/StringUtils.h
@@ -20,13 +20,26 @@
 #include <string>
 #include <vector>
 
-namespace StringUtils {
+namespace Utils {
 
-    //! Returns true if text matches pattern with wildcards '*' and '?'.
-    BA_CORE_API_ bool matchesPattern(const std::string& text, const std::string& wildcardPattern);
+namespace String {
 
-    BA_CORE_API_ std::string padRight(const std::string& name, int length);
+//! Returns true if text matches pattern with wildcards '*' and '?'.
+BA_CORE_API_ bool matchesPattern(const std::string& text, const std::string& wildcardPattern);
 
-} // namespace StringUtils
+BA_CORE_API_ std::string padRight(const std::string& name, int length);
 
-#endif // STRINGUTILS_H
+//! Split string into vector of string using delimeter.
+BA_CORE_API_ std::vector<std::string> split(const std::string& text, const std::string& delimeter);
+
+//! replace all occurences of items from string text with delimeter
+BA_CORE_API_ void replaceItemsFromString(std::string& text, const std::vector<std::string>& items,
+                                         const std::string& replacement=std::string(""));
+
+//! Returns string obtain by joining vector elements
+BA_CORE_API_ std::string join(const std::vector<std::string>& joinable, const std::string& joint);
+
+}
+}
+
+#endif
diff --git a/Fit/Utils/TimeInterval.cpp b/Fit/Utils/TimeInterval.cpp
index ae1b56f16822446f6968dd14052a2b0ddee29ff0..ee9aadc5d4fca89dbc8ea575a03fac7bb359edb7 100644
--- a/Fit/Utils/TimeInterval.cpp
+++ b/Fit/Utils/TimeInterval.cpp
@@ -21,6 +21,8 @@ class TimeIntervalImp
 public:
     boost::posix_time::ptime m_start_time;
     boost::posix_time::ptime m_end_time;
+    bool m_is_running;
+    TimeIntervalImp() : m_is_running(false){}
 };
 
 TimeInterval::TimeInterval()
@@ -36,16 +38,23 @@ TimeInterval::~TimeInterval()
 
 void TimeInterval::start()
 {
+    m_imp->m_is_running = true;
     m_imp->m_start_time = boost::posix_time::microsec_clock::local_time();
 }
 
 void TimeInterval::stop()
 {
+    m_imp->m_is_running = false;
     m_imp->m_end_time = boost::posix_time::microsec_clock::local_time();
 }
 
 double TimeInterval::runTime() const
 {
-    boost::posix_time::time_duration diff = m_imp->m_end_time - m_imp->m_start_time;
+    boost::posix_time::time_duration diff ;
+    if(m_imp->m_is_running) {
+        diff = boost::posix_time::microsec_clock::local_time() - m_imp->m_start_time;
+    } else {
+        diff = m_imp->m_end_time - m_imp->m_start_time;
+    }
     return diff.total_milliseconds()/1000.;
 }
diff --git a/GUI/coregui/Models/DomainFittingBuilder.cpp b/GUI/coregui/Models/DomainFittingBuilder.cpp
index e2f68a3623f2e9ce70d064d94c7165060c0c11ac..930a5749d4c372bea2daa4608f7a85766b7b5d72 100644
--- a/GUI/coregui/Models/DomainFittingBuilder.cpp
+++ b/GUI/coregui/Models/DomainFittingBuilder.cpp
@@ -48,8 +48,7 @@ std::shared_ptr<FitSuite> DomainFittingBuilder::createFitSuite(JobItem *jobItem)
             QString link = linkItem->getItemValue(FitParameterLinkItem::P_LINK).toString();
             std::string domainPath = "*" + ModelPath::translateParameterName(jobItem->getMultiLayerItem()->parent(), link);
             linkItem->setItemValue(FitParameterLinkItem::P_DOMAIN, QString::fromStdString(domainPath));
-//            result->addFitParameter(domainPath, value, parItem->getLimits());
-            assert(0);
+            result->addFitParameter(domainPath, value, parItem->getAttLimits());
             //FIXME only link is possible at the time due to limitations in FitCore
             break;
         }
diff --git a/GUI/coregui/Models/FitParameterItems.cpp b/GUI/coregui/Models/FitParameterItems.cpp
index 24ffdb08b4d59fed8e509a5b37161474760412f0..57259be649509278b60480ed3a87d84d2f2ea2f3 100644
--- a/GUI/coregui/Models/FitParameterItems.cpp
+++ b/GUI/coregui/Models/FitParameterItems.cpp
@@ -112,18 +112,31 @@ void FitParameterItem::initMinMaxValues(const RealLimits &limits)
 
 //! Constructs Limits correspodning to current GUI settings.
 
-RealLimits FitParameterItem::getLimits()
+AttLimits FitParameterItem::getAttLimits()
 {
-    if(isLimited())
-        return RealLimits::limited(getItemValue(P_MIN).toDouble(), getItemValue(P_MAX).toDouble());
+    if(isFixed()) {
+        return AttLimits::fixed();
+    }
 
-    if(isLowerLimited())
-        return RealLimits::lowerLimited(getItemValue(P_MIN).toDouble());
+    else if(isLimited()) {
+        return AttLimits::limited(getItemValue(P_MIN).toDouble(), getItemValue(P_MAX).toDouble());
+    }
 
-    if(isUpperLimited())
-        return RealLimits::upperLimited(getItemValue(P_MAX).toDouble());
+    else if(isLowerLimited()) {
+        return AttLimits::lowerLimited(getItemValue(P_MIN).toDouble());
+    }
 
-    return RealLimits::limitless();
+    else if(isUpperLimited()) {
+        return AttLimits::upperLimited(getItemValue(P_MAX).toDouble());
+    }
+
+    else if(isFree()) {
+        return AttLimits::limitless();
+    }
+
+    else {
+        throw GUIHelpers::Error("FitParameterItem::getLimits() -> Error. Unknown limit type");
+    }
 }
 
 //! Enables/disables min, max properties on FitParameterItem's type
diff --git a/GUI/coregui/Models/FitParameterItems.h b/GUI/coregui/Models/FitParameterItems.h
index 2e51e175e35efa2770356449f6c6c615c034a018..412bf27c378c20e92b33cfd3444fd945bb7fbf64 100644
--- a/GUI/coregui/Models/FitParameterItems.h
+++ b/GUI/coregui/Models/FitParameterItems.h
@@ -17,7 +17,7 @@
 #define FITPARAMETERITEMS_H
 
 #include "SessionItem.h"
-
+#include "AttLimits.h"
 
 //! FitParameterItems is a collection of items to define fit parameters in GUI.
 
@@ -48,7 +48,7 @@ public:
 
     void initMinMaxValues(const RealLimits &limits);
 
-    RealLimits getLimits();
+    AttLimits getAttLimits();
 
 private:
     void onTypeChange();
diff --git a/Tests/Functional/Fit/AdjustMinimizerStrategyTest.cpp b/Tests/Functional/Fit/AdjustMinimizerStrategyTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fc92b196026758dc46829ddb844a5d1a33b105b7
--- /dev/null
+++ b/Tests/Functional/Fit/AdjustMinimizerStrategyTest.cpp
@@ -0,0 +1,55 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Tests/Functional/Fit/AdjustMinimizerStrategyTest.cpp
+//! @brief     Implements class AdjustMinimizerStrategyTest.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2015
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#include "AdjustMinimizerStrategyTest.h"
+#include "Units.h"
+#include "FitSuite.h"
+#include "MinimizerFactory.h"
+#include "AdjustMinimizerStrategy.h"
+#include "MinimizerConstants.h"
+
+
+AdjustMinimizerStrategyTest::AdjustMinimizerStrategyTest()
+    : IMinimizerTest("undefined", "undefined")
+{}
+
+void AdjustMinimizerStrategyTest::initParameterPlan()
+{
+    m_parameters.clear();
+    m_parameters.push_back(FitParameterPlan("*Height", 2.0 * Units::nanometer,
+                                            5.0 * Units::nanometer,
+                                            AttLimits::limited(0.01, 30.0), 0.05));
+    m_parameters.push_back(FitParameterPlan("*Radius", 10.0 * Units::nanometer,
+                                            5.0 * Units::nanometer,
+                                            AttLimits::limited(0.01, 30.0), 0.05));
+
+}
+
+std::unique_ptr<FitSuite> AdjustMinimizerStrategyTest::createFitSuite() {
+  std::unique_ptr<FitSuite> result(new FitSuite());
+  result->initPrint(50);
+
+  result->addFitStrategy(AdjustMinimizerStrategy(
+      MinimizerNames::Genetic, std::string(), "MaxIterations=2;RandomSeed=1"));
+
+  result->addFitStrategy(AdjustMinimizerStrategy(MinimizerNames::Minuit2,
+                                                    AlgorithmNames::Migrad));
+
+  for (size_t i = 0; i < m_parameters.size(); ++i)
+    result->addFitParameter(m_parameters[i].m_name,
+                            m_parameters[i].m_start_value,
+                            m_parameters[i].m_limits, m_parameters[i].m_step);
+  return result;
+}
diff --git a/Tests/Functional/Fit/ExperimentalFitTest.h b/Tests/Functional/Fit/AdjustMinimizerStrategyTest.h
similarity index 61%
rename from Tests/Functional/Fit/ExperimentalFitTest.h
rename to Tests/Functional/Fit/AdjustMinimizerStrategyTest.h
index 5df4e31ee004697f0a9d9e7c87cc1d948f5f8da5..80afc93156d8c2dfbacf1e519bddfb924a71f4f9 100644
--- a/Tests/Functional/Fit/ExperimentalFitTest.h
+++ b/Tests/Functional/Fit/AdjustMinimizerStrategyTest.h
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Tests/Functional/Fit/ExperimentalFitTest.h
-//! @brief     Declares class ExperimentalFitTest.
+//! @file      Tests/Functional/Fit/MinimizerStrategyTest.h
+//! @brief     Declares class MinimizerStrategyTest.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -18,18 +18,18 @@
 
 #include "IMinimizerTest.h"
 
-//! @class ExperimentalFitTest
+//! @class AdjustMinimizerStrategyTest
 //! @ingroup standard_samples
-//! @brief Experimental test on the way to refactored minimizers
+//! @brief The AdjustMinimizerStrategyTest verifies fitting with the chain of minimizers.
 
-class ExperimentalFitTest : public IMinimizerTest
+class AdjustMinimizerStrategyTest : public IMinimizerTest
 {
 public:
-    ExperimentalFitTest();
+    AdjustMinimizerStrategyTest();
 
 protected:
-    virtual std::unique_ptr<FitSuite> createFitSuite();
-
+    void initParameterPlan() override;
+    std::unique_ptr<FitSuite> createFitSuite() override;
 };
 
-#endif // EXPERIMENTALFITTEST_H
+#endif
diff --git a/Tests/Functional/Fit/CMakeLists.txt b/Tests/Functional/Fit/CMakeLists.txt
index 22253d01748272b293fad133464663f53fb7725c..c06585d09c0b385cf10be7e4cd4f241ca482af1c 100644
--- a/Tests/Functional/Fit/CMakeLists.txt
+++ b/Tests/Functional/Fit/CMakeLists.txt
@@ -11,7 +11,7 @@ set(test_cases
     Minuit2_Fumili
     Minuit2_Migrad
     RectDetectorFit
-    ExperimentalFit
+    AdjustMinimizerStrategy
     StandaloneFit
 )
 
diff --git a/Tests/Functional/Fit/ExperimentalFitTest.cpp b/Tests/Functional/Fit/ExperimentalFitTest.cpp
deleted file mode 100644
index bceb8e90d6f0f3c86ca334fbdc4a56705fefb595..0000000000000000000000000000000000000000
--- a/Tests/Functional/Fit/ExperimentalFitTest.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Fit/ExperimentalFitTest.cpp
-//! @brief     Implements class ExperimentalFitTest.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2015
-//! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, M. Ganeva, G. Pospelov, W. Van Herck, J. Wuttke
-//
-// ************************************************************************** //
-
-#include "ExperimentalFitTest.h"
-#include "Minuit2Minimizer.h"
-#include "FitSuite.h"
-
-ExperimentalFitTest::ExperimentalFitTest()
-    : IMinimizerTest("Minuit2", "Migrad")
-{}
-
-std::unique_ptr<FitSuite> ExperimentalFitTest::createFitSuite()
-{
-    std::unique_ptr<FitSuite> result(new FitSuite());
-    result->initPrint(10);
-    result->setMinimizer( new Minuit2Minimizer() );
-    for (const auto& par: m_parameters)
-        result->addFitParameter(
-            par.m_name, par.m_start_value,
-            AttLimits::lowerLimited(0.01), par.m_start_value/100.);
-    return result;
-}
diff --git a/Tests/Functional/Fit/FitParameterPlan.cpp b/Tests/Functional/Fit/FitParameterPlan.cpp
index e7c08b08ac492e7e47767260292e5cd1d495222c..0f2c8a79a2becf2716b94e7aa553a5d92d70e44d 100644
--- a/Tests/Functional/Fit/FitParameterPlan.cpp
+++ b/Tests/Functional/Fit/FitParameterPlan.cpp
@@ -15,9 +15,22 @@
 
 #include "FitParameterPlan.h"
 
-FitParameterPlan::FitParameterPlan(double start_value, double expected_value,
+FitParameterPlan::FitParameterPlan()
+    : m_name(std::string())
+    , m_start_value(0.0)
+    , m_expected_value(0.0)
+    , m_limits(AttLimits::limitless())
+    , m_step(0.0)
+    , m_threshold(0.0)
+{
+
+}
+
+FitParameterPlan::FitParameterPlan(const std::string &name, double start_value,
+                                   double expected_value,
                                    const AttLimits &limits, double step)
-    : m_start_value(start_value)
+    : m_name(name)
+    , m_start_value(start_value)
     , m_expected_value(expected_value)
     , m_limits(limits)
     , m_step(step)
@@ -25,8 +38,3 @@ FitParameterPlan::FitParameterPlan(double start_value, double expected_value,
 {
 
 }
-
-FitParameterPlan::~FitParameterPlan()
-{
-
-}
diff --git a/Tests/Functional/Fit/FitParameterPlan.h b/Tests/Functional/Fit/FitParameterPlan.h
index d86c610f08cc65926ed800ccef0b06f56dd8b5ba..9910206e28d7d344bc4a72ecc9a8e60fadcaa37b 100644
--- a/Tests/Functional/Fit/FitParameterPlan.h
+++ b/Tests/Functional/Fit/FitParameterPlan.h
@@ -26,10 +26,11 @@
 class FitParameterPlan
 {
 public:
-    FitParameterPlan(double start_value, double expected_value,
+    FitParameterPlan();
+    FitParameterPlan(const std::string &name, double start_value, double expected_value,
                      const AttLimits &limits, double step);
-    ~FitParameterPlan();
 
+    std::string m_name;
     double m_start_value; //!< starting value of fit parameter
     double m_expected_value; //!< expected value to find in the fit
     AttLimits m_limits; //!< limits of fit parameter
diff --git a/Tests/Functional/Fit/IMinimizerTest.cpp b/Tests/Functional/Fit/IMinimizerTest.cpp
index 360173f724e494abda468b480c1894df5a0b3d6f..3d0b746cb1d55306094c2a2d93c75a4ab9e46ad1 100644
--- a/Tests/Functional/Fit/IMinimizerTest.cpp
+++ b/Tests/Functional/Fit/IMinimizerTest.cpp
@@ -25,13 +25,13 @@
 #include <boost/format.hpp>
 #include <memory>
 
-IMinimizerTest::TestParameter::TestParameter(const std::string &name,
-                                             double real_value,
-                                             double start_value)
-    : m_name(name)
-    , m_real_value(real_value)
-    , m_start_value(start_value)
-    , m_found_value(0.0) {}
+//IMinimizerTest::TestParameter::TestParameter(const std::string &name,
+//                                             double real_value,
+//                                             double start_value)
+//    : m_name(name)
+//    , m_real_value(real_value)
+//    , m_start_value(start_value)
+//    , m_found_value(0.0) {}
 
 IMinimizerTest::IMinimizerTest(const std::string& minimizer_name,
                                const std::string& minimizer_algorithm)
@@ -41,18 +41,14 @@ IMinimizerTest::IMinimizerTest(const std::string& minimizer_name,
     , m_sample_builder_name("CylindersInBABuilder")
     , m_parameter_tolerance(0.01)
 {
-    m_parameters.push_back(
-        TestParameter("*Height", 5.0 * Units::nanometer, 4.5 * Units::nanometer));
-    m_parameters.push_back(
-        TestParameter("*Radius", 5.0 * Units::nanometer, 5.5 * Units::nanometer));
 }
 
 
 bool IMinimizerTest::runTest()
 {
+    initParameterPlan();
+
     std::unique_ptr<MultiLayer> sample(createSample());
-    for (size_t i = 0; i < m_parameters.size(); ++i)
-        sample->setParameterValue(m_parameters[i].m_name, m_parameters[i].m_real_value);
 
     std::unique_ptr<GISASSimulation> simulation(createSimulation());
     simulation->setSample(*sample.get());
@@ -67,34 +63,46 @@ bool IMinimizerTest::runTest()
     fitSuite->runFit();
 
     std::vector<double> valuesAtMinimum = fitSuite->fitParameters()->values();
-    for (size_t i = 0; i < m_parameters.size(); ++i)
-        m_parameters[i].m_found_value = valuesAtMinimum[i];
 
     // analyze results
     bool success = true;
     for (size_t i = 0; i < m_parameters.size(); ++i) {
-        double diff = std::abs(m_parameters[i].m_found_value - m_parameters[i].m_real_value)
-                      / m_parameters[i].m_real_value;
+        double foundValue = valuesAtMinimum[i];
+        double diff = std::abs(foundValue - m_parameters[i].m_expected_value)
+                      / m_parameters[i].m_expected_value;
         if (diff > m_parameter_tolerance)
             success = false;
         std::cout << boost::format("%|12t| %-10s : %-6.4f (diff %6.4g) %s\n") %
-            m_parameters[i].m_name % m_parameters[i].m_found_value % diff %
+            m_parameters[i].m_name % foundValue % diff %
             (success ? "OK" : "FAILED");
     }
     return success;
 }
 
+//! Creates plan with initial/real values of fit parameters.
+
+void IMinimizerTest::initParameterPlan() {
+  m_parameters.clear();
+  m_parameters.push_back(FitParameterPlan("*Height", 4.5 * Units::nanometer,
+                                          5.0 * Units::nanometer,
+                                          AttLimits::lowerLimited(0.01), 0.01));
+  m_parameters.push_back(FitParameterPlan("*Radius", 5.5 * Units::nanometer,
+                                          5.0 * Units::nanometer,
+                                          AttLimits::lowerLimited(0.01), 0.01));
+}
+
 std::unique_ptr<FitSuite> IMinimizerTest::createFitSuite()
 {
     std::unique_ptr<FitSuite> result(new FitSuite());
     result->initPrint(10);
     IMinimizer* minimizer = MinimizerFactory::createMinimizer(
-        m_minimizer_name, m_minimizer_algorithm);
+                m_minimizer_name, m_minimizer_algorithm);
     result->setMinimizer(minimizer);
+
     for (size_t i = 0; i < m_parameters.size(); ++i)
         result->addFitParameter(
             m_parameters[i].m_name, m_parameters[i].m_start_value,
-            AttLimits::lowerLimited(0.01), m_parameters[i].m_start_value / 100.);
+            m_parameters[i].m_limits, m_parameters[i].m_start_value / 100.);
     return result;
 }
 
@@ -102,6 +110,8 @@ std::unique_ptr<MultiLayer> IMinimizerTest::createSample()
 {
     SampleBuilderFactory builderFactory;
     std::unique_ptr<MultiLayer> result(builderFactory.createSample(m_sample_builder_name));
+    for (size_t i = 0; i < m_parameters.size(); ++i)
+        result->setParameterValue(m_parameters[i].m_name, m_parameters[i].m_expected_value);
     return result;
 }
 
diff --git a/Tests/Functional/Fit/IMinimizerTest.h b/Tests/Functional/Fit/IMinimizerTest.h
index 95ec49cb61ac890a2710ce0ced9b974d68411ee1..af82f67f50f575f559b0a1729b80543fc762238c 100644
--- a/Tests/Functional/Fit/IMinimizerTest.h
+++ b/Tests/Functional/Fit/IMinimizerTest.h
@@ -18,6 +18,7 @@
 
 #include "IFunctionalTest.h"
 #include "OutputData.h"
+#include "FitParameterPlan.h"
 #include <memory>
 
 class FitSuite;
@@ -37,25 +38,16 @@ public:
 
     bool runTest() final;
 
-    class TestParameter
-    {
-    public:
-        TestParameter(const std::string &name, double real_value, double start_value);
-        std::string m_name;   //!< sample parameter name
-        double m_real_value;  //!< real value to construct the sample
-        double m_start_value; //!< starting value for the minimizer
-        double m_found_value; //!< the value found during the fit
-    };
-
     void setParameterTolerance(double value) { m_parameter_tolerance = value; }
 
 protected:
+    virtual void initParameterPlan();
     virtual std::unique_ptr<FitSuite> createFitSuite();
     virtual std::unique_ptr<MultiLayer> createSample();
     virtual std::unique_ptr<GISASSimulation> createSimulation();
     virtual std::unique_ptr<OutputData<double>> createOutputData(const GISASSimulation* simulation);
 
-    std::vector<TestParameter> m_parameters;
+    std::vector<FitParameterPlan> m_parameters;
     std::string m_minimizer_name;
     std::string m_minimizer_algorithm;
     std::string m_simulation_name;
diff --git a/Tests/Functional/Fit/ObjectiveFunctionPlan.cpp b/Tests/Functional/Fit/ObjectiveFunctionPlan.cpp
index d8b5f63609ffbae690442df0799bc11cb4f0a2c5..cccc0353028a834807657fefad5a667bb7613291 100644
--- a/Tests/Functional/Fit/ObjectiveFunctionPlan.cpp
+++ b/Tests/Functional/Fit/ObjectiveFunctionPlan.cpp
@@ -29,7 +29,8 @@ ObjectiveFunctionPlan::ObjectiveFunctionPlan(const std::string &name, objective_
 void ObjectiveFunctionPlan::addParameter(double start_value, double expected_value,
                                          const AttLimits &limits, double step)
 {
-    m_parameters.push_back(FitParameterPlan(start_value, expected_value, limits, step));
+    std::string name = "par"+std::to_string(m_parameters.size());
+    m_parameters.push_back(FitParameterPlan(name, start_value, expected_value, limits, step));
 }
 
 //! Plan for finding rosenbrock function minimum
diff --git a/Tests/Functional/Fit/StandardFitsFactory.cpp b/Tests/Functional/Fit/StandardFitsFactory.cpp
index dabd05c54e8d4738598708e2ab5ad0acad7dbcbc..d505c3a0303faa248cdfd24c9dcb03bb69cc2712 100644
--- a/Tests/Functional/Fit/StandardFitsFactory.cpp
+++ b/Tests/Functional/Fit/StandardFitsFactory.cpp
@@ -16,7 +16,7 @@
 #include "StandardFitsFactory.h"
 #include "MinimizerTests.h"
 #include "RectDetectorFitTest.h"
-#include "ExperimentalFitTest.h"
+#include "AdjustMinimizerStrategyTest.h"
 #include "StandaloneFitTest.h"
 #include <boost/format.hpp>
 
@@ -63,9 +63,9 @@ StandardFitsFactory::StandardFitsFactory()
         "Fit of rectangular detector, with crop and masks applied");
 
     registerItem(
-        "ExperimentalFit",
-        create_new<ExperimentalFitTest>,
-        "Experimental fit on the way to refactoring");
+        "AdjustMinimizerStrategy",
+        create_new<AdjustMinimizerStrategyTest>,
+        "Test of minimizer chain: genetic -> minuit2");
 
     registerItem(
         "StandaloneFit",
diff --git a/Tests/Functional/TestMachinery/StandardSimulationsRegistry.cpp b/Tests/Functional/TestMachinery/StandardSimulationsRegistry.cpp
index 22c7625f04ba961adef73c6876080e47b80d4037..33acf4264f6b219b2c64df008b1f607137b41c23 100644
--- a/Tests/Functional/TestMachinery/StandardSimulationsRegistry.cpp
+++ b/Tests/Functional/TestMachinery/StandardSimulationsRegistry.cpp
@@ -365,8 +365,8 @@ void StandardSimulationsRegistry::printCatalogue(std::ostream& ostr) const
 {
     for(auto it = m_catalogue.begin(); it != m_catalogue.end(); ++it) {
         SimulationInfo info = it->second;
-        ostr << StringUtils::padRight(info.m_test_name, 20) << " | ";
-        ostr << StringUtils::padRight(info.m_test_description, 40) << " | ";
+        ostr << Utils::String::padRight(info.m_test_name, 20) << " | ";
+        ostr << Utils::String::padRight(info.m_test_description, 40) << " | ";
         ostr << info.m_simulation_name << ", ";
         ostr << info.m_sample_builder_name << ", ";
         ostr << info.m_subtest_type;
diff --git a/Tests/UnitTests/Fit/0/MinimizerOptionsTest.h b/Tests/UnitTests/Fit/0/MinimizerOptionsTest.h
new file mode 100644
index 0000000000000000000000000000000000000000..ab6b6a4b6484ad16b90b4591c8e53c339f4e065e
--- /dev/null
+++ b/Tests/UnitTests/Fit/0/MinimizerOptionsTest.h
@@ -0,0 +1,49 @@
+#ifndef MINIMIZEROPTIONSTEST_H
+#define MINIMIZEROPTIONSTEST_H
+
+#include "MinimizerOptions.h"
+#include "gtest/gtest.h"
+#include <exception>
+
+class MinimizerOptionsTest : public ::testing::Test {
+protected:
+    MinimizerOptionsTest(){}
+};
+
+TEST_F(MinimizerOptionsTest, toOptionString)
+{
+    MinimizerOptions options;
+
+    options.addOption("option_1", 99);
+    options.addOption("option_2", 1.1);
+    options.addOption("option_3", "xxx");
+
+    EXPECT_EQ(options.toOptionString(), "option_1=99;option_2=1.1;option_3=xxx;");
+}
+
+
+TEST_F(MinimizerOptionsTest, setOptionsFromString)
+{
+    MinimizerOptions options;
+
+    options.addOption("Strategy", 1);
+    options.addOption("Tolerance", 0.01);
+    options.addOption("Algorithm", "Default");
+    EXPECT_EQ(1, options.optionValue<int>("Strategy"));
+    EXPECT_EQ(0.01, options.optionValue<double>("Tolerance"));
+
+    options.setOptionString("Strategy=2;");
+    EXPECT_EQ(2, options.optionValue<int>("Strategy"));
+    options.setOptionString("Strategy=3");
+    EXPECT_EQ(3, options.optionValue<int>("Strategy"));
+    EXPECT_EQ(0.01, options.optionValue<double>("Tolerance"));
+
+    options.setOptionString("Strategy=5;Tolerance=0.0001;Algorithm=Unknown");
+    EXPECT_EQ(5, options.optionValue<int>("Strategy"));
+    EXPECT_EQ(0.0001, options.optionValue<double>("Tolerance"));
+    EXPECT_EQ("Unknown", options.optionValue<std::string>("Algorithm"));
+
+    EXPECT_THROW(options.setOptionString("Strategy=5;XXX=y;Tolerance=0.0001;"), std::runtime_error);
+}
+
+#endif
diff --git a/Tests/UnitTests/Fit/0/MultiOptionTest.h b/Tests/UnitTests/Fit/0/MultiOptionTest.h
index dd3e0b22f4264abe44ef53714257dcc6e362a72d..efa4942812fad74140603735264ca5d35fa78794 100644
--- a/Tests/UnitTests/Fit/0/MultiOptionTest.h
+++ b/Tests/UnitTests/Fit/0/MultiOptionTest.h
@@ -84,4 +84,22 @@ TEST_F(MultiOptionTest, Assignment)
     EXPECT_EQ(double_value, copy.getDefault<double>());
 }
 
+TEST_F(MultiOptionTest, SetFromString)
+{
+    MultiOption opt("name", 2.0);
+    opt.setFromString("2.1");
+    EXPECT_EQ(2.1, opt.get<double>());
+    opt.setFromString("2");
+    EXPECT_EQ(2.0, opt.get<double>());
+
+    MultiOption opt2("name", 99);
+    opt2.setFromString("100");
+    EXPECT_EQ(100, opt2.get<int>());
+
+    MultiOption opt3("name", "xxx");
+    opt3.setFromString("yyy");
+    EXPECT_EQ("yyy", opt3.get<std::string>());
+}
+
+
 #endif
diff --git a/Tests/UnitTests/Fit/0/OptionContainerTest.h b/Tests/UnitTests/Fit/0/OptionContainerTest.h
index 8ec636870b514661f0035cfa4514bd6aa6556a68..516cc27dd9bd380f8dac501117661c6bd0b6600c 100644
--- a/Tests/UnitTests/Fit/0/OptionContainerTest.h
+++ b/Tests/UnitTests/Fit/0/OptionContainerTest.h
@@ -68,7 +68,6 @@ TEST_F(OptionContainerTest, setOptionValue)
 
     // setting wrong type to the option
     EXPECT_THROW(test.setOptionValue("option #1", 99.0), std::runtime_error);
-
 }
 
 TEST_F(OptionContainerTest, Copying)
diff --git a/Tests/UnitTests/Fit/0/testlist.h b/Tests/UnitTests/Fit/0/testlist.h
index fa102bbe5157d07f202bdef5d73ebe062f69b5a2..0723625645c832a27ed7d0d8be0cb8c3fb6d067d 100644
--- a/Tests/UnitTests/Fit/0/testlist.h
+++ b/Tests/UnitTests/Fit/0/testlist.h
@@ -6,6 +6,7 @@
 #include "FitParameterSetTest.h"
 #include "FitParameterTest.h"
 #include "FitSuiteTest.h"
+#include "MinimizerOptionsTest.h"
 #include "MultiOptionTest.h"
 #include "OptionContainerTest.h"
 #include "RealLimitsTest.h"
diff --git a/Wrap/swig/libBornAgainCore.i b/Wrap/swig/libBornAgainCore.i
index f2fe3c4a1a6d1cf25d637ce6ba5228e79229f459..6bc1550f3187e79c96a5390ed7c1f9c1a1dd067d 100644
--- a/Wrap/swig/libBornAgainCore.i
+++ b/Wrap/swig/libBornAgainCore.i
@@ -218,7 +218,7 @@
 #include "IIntensityNormalizer.h"
 #include "ISquaredFunction.h"
 #include "MathFunctions.h"
-#include "FitStrategyAdjustMinimizer.h"
+#include "AdjustMinimizerStrategy.h"
 %}
 
 // ownership
@@ -290,8 +290,7 @@
 %include "FitSuite.h"
 %include "FitSuiteObjects.h"
 %include "MathFunctions.h"
-%include "FitStrategyAdjustMinimizer.h"
-
+%include "AdjustMinimizerStrategy.h"
 %include "IFactory.h"
 %include "IMultiLayerBuilder.h"
 %include "ISampleVisitor.h"
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index b349aa0d34e91842ce09b7ddb89e78975bde9b88..016f36642889a1334ea892c5bd612d3e74ad416f 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -4643,6 +4643,8 @@ class IFitStrategy(INamed):
     def __init__(self, *args, **kwargs):
         raise AttributeError("No constructor defined - class is abstract")
     __repr__ = _swig_repr
+    __swig_destroy__ = _libBornAgainCore.delete_IFitStrategy
+    __del__ = lambda self: None
 
     def clone(self):
         """
@@ -4653,8 +4655,6 @@ class IFitStrategy(INamed):
         """
         return _libBornAgainCore.IFitStrategy_clone(self)
 
-    __swig_destroy__ = _libBornAgainCore.delete_IFitStrategy
-    __del__ = lambda self: None
 
     def init(self, fit_suite):
         """
@@ -4713,7 +4713,7 @@ class FitStrategyDefault(IFitStrategy):
 
     def clone(self):
         """
-        clone(FitStrategyDefault self) -> IFitStrategy
+        clone(FitStrategyDefault self) -> FitStrategyDefault
 
         IFitStrategy * FitStrategyDefault::clone() const 
 
@@ -5687,9 +5687,9 @@ class FitOptions(_object):
     __swig_destroy__ = _libBornAgainCore.delete_FitOptions
     __del__ = lambda self: None
 
-    def getDerivEpsilon(self):
-        """getDerivEpsilon(FitOptions self) -> double"""
-        return _libBornAgainCore.FitOptions_getDerivEpsilon(self)
+    def derivEpsilon(self):
+        """derivEpsilon(FitOptions self) -> double"""
+        return _libBornAgainCore.FitOptions_derivEpsilon(self)
 
 
     def setDerivEpsilon(self, deriv_epsilon):
@@ -5697,9 +5697,9 @@ class FitOptions(_object):
         return _libBornAgainCore.FitOptions_setDerivEpsilon(self, deriv_epsilon)
 
 
-    def getStepFactor(self):
-        """getStepFactor(FitOptions self) -> double"""
-        return _libBornAgainCore.FitOptions_getStepFactor(self)
+    def stepFactor(self):
+        """stepFactor(FitOptions self) -> double"""
+        return _libBornAgainCore.FitOptions_stepFactor(self)
 
 
     def setStepFactor(self, step_factor):
@@ -6542,98 +6542,64 @@ def GenerateNormalRandom(average, std_dev):
 
     """
     return _libBornAgainCore.GenerateNormalRandom(average, std_dev)
-class FitStrategyAdjustMinimizer(IFitStrategy):
-    """
-
-
-    Strategy modifies mimimizer settings before running minimization round.
-
-    C++ includes: FitStrategyAdjustMinimizer.h
-
-    """
+class AdjustMinimizerStrategy(IFitStrategy):
+    """Proxy of C++ AdjustMinimizerStrategy class."""
 
     __swig_setmethods__ = {}
     for _s in [IFitStrategy]:
         __swig_setmethods__.update(getattr(_s, '__swig_setmethods__', {}))
-    __setattr__ = lambda self, name, value: _swig_setattr(self, FitStrategyAdjustMinimizer, name, value)
+    __setattr__ = lambda self, name, value: _swig_setattr(self, AdjustMinimizerStrategy, name, value)
     __swig_getmethods__ = {}
     for _s in [IFitStrategy]:
         __swig_getmethods__.update(getattr(_s, '__swig_getmethods__', {}))
-    __getattr__ = lambda self, name: _swig_getattr(self, FitStrategyAdjustMinimizer, name)
+    __getattr__ = lambda self, name: _swig_getattr(self, AdjustMinimizerStrategy, name)
     __repr__ = _swig_repr
 
     def __init__(self, *args):
         """
-        __init__(FitStrategyAdjustMinimizer self) -> FitStrategyAdjustMinimizer
-        __init__(FitStrategyAdjustMinimizer self, std::string const & minimizer_name, std::string const & algorithm_name, std::string const & minimizer_options) -> FitStrategyAdjustMinimizer
-        __init__(FitStrategyAdjustMinimizer self, std::string const & minimizer_name, std::string const & algorithm_name) -> FitStrategyAdjustMinimizer
-        __init__(FitStrategyAdjustMinimizer self, std::string const & minimizer_name) -> FitStrategyAdjustMinimizer
-
-        FitStrategyAdjustMinimizer::FitStrategyAdjustMinimizer(const std::string &minimizer_name, const std::string &algorithm_name=std::string(), const std::string &minimizer_options=std::string())
-
+        __init__(AdjustMinimizerStrategy self) -> AdjustMinimizerStrategy
+        __init__(AdjustMinimizerStrategy self, std::string const & minimizerName, std::string const & algorithmName, std::string const & optionString) -> AdjustMinimizerStrategy
+        __init__(AdjustMinimizerStrategy self, std::string const & minimizerName, std::string const & algorithmName) -> AdjustMinimizerStrategy
+        __init__(AdjustMinimizerStrategy self, std::string const & minimizerName) -> AdjustMinimizerStrategy
         """
-        this = _libBornAgainCore.new_FitStrategyAdjustMinimizer(*args)
+        this = _libBornAgainCore.new_AdjustMinimizerStrategy(*args)
         try:
             self.this.append(this)
         except Exception:
             self.this = this
-    __swig_destroy__ = _libBornAgainCore.delete_FitStrategyAdjustMinimizer
-    __del__ = lambda self: None
 
     def clone(self):
         """
-        clone(FitStrategyAdjustMinimizer self) -> FitStrategyAdjustMinimizer
-
-        FitStrategyAdjustMinimizer * FitStrategyAdjustMinimizer::clone() const 
-
-        """
-        return _libBornAgainCore.FitStrategyAdjustMinimizer_clone(self)
-
-
-    def getMinimizer(self):
-        """
-        getMinimizer(FitStrategyAdjustMinimizer self) -> IMinimizer *
+        clone(AdjustMinimizerStrategy self) -> AdjustMinimizerStrategy
 
-        IMinimizer * FitStrategyAdjustMinimizer::getMinimizer()
+        virtual IFitStrategy* IFitStrategy::clone() const =0
 
         """
-        return _libBornAgainCore.FitStrategyAdjustMinimizer_getMinimizer(self)
+        return _libBornAgainCore.AdjustMinimizerStrategy_clone(self)
 
 
     def setMinimizer(self, *args):
         """
-        setMinimizer(FitStrategyAdjustMinimizer self, IMinimizer * minimizer)
-        setMinimizer(FitStrategyAdjustMinimizer self, std::string const & minimizer_name, std::string const & algorithm_name, std::string const & minimizer_options)
-        setMinimizer(FitStrategyAdjustMinimizer self, std::string const & minimizer_name, std::string const & algorithm_name)
-        setMinimizer(FitStrategyAdjustMinimizer self, std::string const & minimizer_name)
-
-        void FitStrategyAdjustMinimizer::setMinimizer(const std::string &minimizer_name, const std::string &algorithm_name=std::string(), const std::string &minimizer_options=std::string())
-
+        setMinimizer(AdjustMinimizerStrategy self, std::string const & minimizerName, std::string const & algorithmName, std::string const & optionString)
+        setMinimizer(AdjustMinimizerStrategy self, std::string const & minimizerName, std::string const & algorithmName)
+        setMinimizer(AdjustMinimizerStrategy self, std::string const & minimizerName)
         """
-        return _libBornAgainCore.FitStrategyAdjustMinimizer_setMinimizer(self, *args)
+        return _libBornAgainCore.AdjustMinimizerStrategy_setMinimizer(self, *args)
 
 
     def execute(self):
         """
-        execute(FitStrategyAdjustMinimizer self)
-
-        void FitStrategyAdjustMinimizer::execute()
+        execute(AdjustMinimizerStrategy self)
 
-        """
-        return _libBornAgainCore.FitStrategyAdjustMinimizer_execute(self)
-
-
-    def getMinimizerOptions(self):
-        """
-        getMinimizerOptions(FitStrategyAdjustMinimizer self) -> ObsoleteMinimizerOptions *
-
-        ObsoleteMinimizerOptions * FitStrategyAdjustMinimizer::getMinimizerOptions()
+        virtual void IFitStrategy::execute()=0
 
         """
-        return _libBornAgainCore.FitStrategyAdjustMinimizer_getMinimizerOptions(self)
+        return _libBornAgainCore.AdjustMinimizerStrategy_execute(self)
 
-FitStrategyAdjustMinimizer_swigregister = _libBornAgainCore.FitStrategyAdjustMinimizer_swigregister
-FitStrategyAdjustMinimizer_swigregister(FitStrategyAdjustMinimizer)
+    __swig_destroy__ = _libBornAgainCore.delete_AdjustMinimizerStrategy
+    __del__ = lambda self: None
+AdjustMinimizerStrategy_swigregister = _libBornAgainCore.AdjustMinimizerStrategy_swigregister
+AdjustMinimizerStrategy_swigregister(AdjustMinimizerStrategy)
 
 class IMultiLayerBuilder(IParameterized):
     """
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index c26f72d91c7a3e3433a4e2e36d27aed855947c1d..13903c1cb0c4e20edbb731137e3358afe3a44a83 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -3454,55 +3454,55 @@ namespace Swig {
 
 /* -------- TYPES TABLE (BEGIN) -------- */
 
-#define SWIGTYPE_p_AngularPixelMap swig_types[0]
-#define SWIGTYPE_p_AttLimits swig_types[1]
-#define SWIGTYPE_p_Attributes swig_types[2]
-#define SWIGTYPE_p_BasicVector3DT_double_t swig_types[3]
-#define SWIGTYPE_p_BasicVector3DT_int_t swig_types[4]
-#define SWIGTYPE_p_BasicVector3DT_std__complexT_double_t_t swig_types[5]
-#define SWIGTYPE_p_Beam swig_types[6]
-#define SWIGTYPE_p_Bin1D swig_types[7]
-#define SWIGTYPE_p_Bin1DCVector swig_types[8]
-#define SWIGTYPE_p_Bin1DKVector swig_types[9]
-#define SWIGTYPE_p_CallbackMap_t swig_types[10]
-#define SWIGTYPE_p_ChiSquaredModule swig_types[11]
-#define SWIGTYPE_p_ConstKBinAxis swig_types[12]
-#define SWIGTYPE_p_CreateItemCallback swig_types[13]
-#define SWIGTYPE_p_Crystal swig_types[14]
-#define SWIGTYPE_p_CustomBinAxis swig_types[15]
-#define SWIGTYPE_p_DescriptionMap_t swig_types[16]
-#define SWIGTYPE_p_DetectorMask swig_types[17]
-#define SWIGTYPE_p_DistributionCosine swig_types[18]
-#define SWIGTYPE_p_DistributionGate swig_types[19]
-#define SWIGTYPE_p_DistributionGaussian swig_types[20]
-#define SWIGTYPE_p_DistributionHandler swig_types[21]
-#define SWIGTYPE_p_DistributionLogNormal swig_types[22]
-#define SWIGTYPE_p_DistributionLorentz swig_types[23]
-#define SWIGTYPE_p_FTDecayFunction1DCauchy swig_types[24]
-#define SWIGTYPE_p_FTDecayFunction1DGauss swig_types[25]
-#define SWIGTYPE_p_FTDecayFunction1DTriangle swig_types[26]
-#define SWIGTYPE_p_FTDecayFunction1DVoigt swig_types[27]
-#define SWIGTYPE_p_FTDecayFunction2DCauchy swig_types[28]
-#define SWIGTYPE_p_FTDecayFunction2DGauss swig_types[29]
-#define SWIGTYPE_p_FTDecayFunction2DVoigt swig_types[30]
-#define SWIGTYPE_p_FTDistribution1DCauchy swig_types[31]
-#define SWIGTYPE_p_FTDistribution1DCosine swig_types[32]
-#define SWIGTYPE_p_FTDistribution1DGate swig_types[33]
-#define SWIGTYPE_p_FTDistribution1DGauss swig_types[34]
-#define SWIGTYPE_p_FTDistribution1DTriangle swig_types[35]
-#define SWIGTYPE_p_FTDistribution1DVoigt swig_types[36]
-#define SWIGTYPE_p_FTDistribution2DCauchy swig_types[37]
-#define SWIGTYPE_p_FTDistribution2DCone swig_types[38]
-#define SWIGTYPE_p_FTDistribution2DGate swig_types[39]
-#define SWIGTYPE_p_FTDistribution2DGauss swig_types[40]
-#define SWIGTYPE_p_FTDistribution2DVoigt swig_types[41]
-#define SWIGTYPE_p_FitObject swig_types[42]
-#define SWIGTYPE_p_FitObjects_t swig_types[43]
-#define SWIGTYPE_p_FitOptions swig_types[44]
-#define SWIGTYPE_p_FitParameter swig_types[45]
-#define SWIGTYPE_p_FitParameterLinked swig_types[46]
-#define SWIGTYPE_p_FitParameterSet swig_types[47]
-#define SWIGTYPE_p_FitStrategyAdjustMinimizer swig_types[48]
+#define SWIGTYPE_p_AdjustMinimizerStrategy swig_types[0]
+#define SWIGTYPE_p_AngularPixelMap swig_types[1]
+#define SWIGTYPE_p_AttLimits swig_types[2]
+#define SWIGTYPE_p_Attributes swig_types[3]
+#define SWIGTYPE_p_BasicVector3DT_double_t swig_types[4]
+#define SWIGTYPE_p_BasicVector3DT_int_t swig_types[5]
+#define SWIGTYPE_p_BasicVector3DT_std__complexT_double_t_t swig_types[6]
+#define SWIGTYPE_p_Beam swig_types[7]
+#define SWIGTYPE_p_Bin1D swig_types[8]
+#define SWIGTYPE_p_Bin1DCVector swig_types[9]
+#define SWIGTYPE_p_Bin1DKVector swig_types[10]
+#define SWIGTYPE_p_CallbackMap_t swig_types[11]
+#define SWIGTYPE_p_ChiSquaredModule swig_types[12]
+#define SWIGTYPE_p_ConstKBinAxis swig_types[13]
+#define SWIGTYPE_p_CreateItemCallback swig_types[14]
+#define SWIGTYPE_p_Crystal swig_types[15]
+#define SWIGTYPE_p_CustomBinAxis swig_types[16]
+#define SWIGTYPE_p_DescriptionMap_t swig_types[17]
+#define SWIGTYPE_p_DetectorMask swig_types[18]
+#define SWIGTYPE_p_DistributionCosine swig_types[19]
+#define SWIGTYPE_p_DistributionGate swig_types[20]
+#define SWIGTYPE_p_DistributionGaussian swig_types[21]
+#define SWIGTYPE_p_DistributionHandler swig_types[22]
+#define SWIGTYPE_p_DistributionLogNormal swig_types[23]
+#define SWIGTYPE_p_DistributionLorentz swig_types[24]
+#define SWIGTYPE_p_FTDecayFunction1DCauchy swig_types[25]
+#define SWIGTYPE_p_FTDecayFunction1DGauss swig_types[26]
+#define SWIGTYPE_p_FTDecayFunction1DTriangle swig_types[27]
+#define SWIGTYPE_p_FTDecayFunction1DVoigt swig_types[28]
+#define SWIGTYPE_p_FTDecayFunction2DCauchy swig_types[29]
+#define SWIGTYPE_p_FTDecayFunction2DGauss swig_types[30]
+#define SWIGTYPE_p_FTDecayFunction2DVoigt swig_types[31]
+#define SWIGTYPE_p_FTDistribution1DCauchy swig_types[32]
+#define SWIGTYPE_p_FTDistribution1DCosine swig_types[33]
+#define SWIGTYPE_p_FTDistribution1DGate swig_types[34]
+#define SWIGTYPE_p_FTDistribution1DGauss swig_types[35]
+#define SWIGTYPE_p_FTDistribution1DTriangle swig_types[36]
+#define SWIGTYPE_p_FTDistribution1DVoigt swig_types[37]
+#define SWIGTYPE_p_FTDistribution2DCauchy swig_types[38]
+#define SWIGTYPE_p_FTDistribution2DCone swig_types[39]
+#define SWIGTYPE_p_FTDistribution2DGate swig_types[40]
+#define SWIGTYPE_p_FTDistribution2DGauss swig_types[41]
+#define SWIGTYPE_p_FTDistribution2DVoigt swig_types[42]
+#define SWIGTYPE_p_FitObject swig_types[43]
+#define SWIGTYPE_p_FitObjects_t swig_types[44]
+#define SWIGTYPE_p_FitOptions swig_types[45]
+#define SWIGTYPE_p_FitParameter swig_types[46]
+#define SWIGTYPE_p_FitParameterLinked swig_types[47]
+#define SWIGTYPE_p_FitParameterSet swig_types[48]
 #define SWIGTYPE_p_FitStrategyDefault swig_types[49]
 #define SWIGTYPE_p_FitSuite swig_types[50]
 #define SWIGTYPE_p_FitSuiteImp swig_types[51]
@@ -3635,121 +3635,120 @@ namespace Swig {
 #define SWIGTYPE_p_MesoCrystal swig_types[178]
 #define SWIGTYPE_p_MultiLayer swig_types[179]
 #define SWIGTYPE_p_MultiLayerRTCoefficients_t swig_types[180]
-#define SWIGTYPE_p_ObsoleteMinimizerOptions swig_types[181]
-#define SWIGTYPE_p_OffSpecSimulation swig_types[182]
-#define SWIGTYPE_p_OutputDataIteratorT_double_OutputDataT_double_t_t swig_types[183]
-#define SWIGTYPE_p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t swig_types[184]
-#define SWIGTYPE_p_OutputDataT_CumulativeValue_t swig_types[185]
-#define SWIGTYPE_p_OutputDataT_bool_t swig_types[186]
-#define SWIGTYPE_p_OutputDataT_double_t swig_types[187]
-#define SWIGTYPE_p_OutputDataT_std__complexT_double_t_t swig_types[188]
-#define SWIGTYPE_p_ParameterDistribution swig_types[189]
-#define SWIGTYPE_p_ParameterPool swig_types[190]
-#define SWIGTYPE_p_ParameterSample swig_types[191]
-#define SWIGTYPE_p_Particle swig_types[192]
-#define SWIGTYPE_p_ParticleComposition swig_types[193]
-#define SWIGTYPE_p_ParticleCoreShell swig_types[194]
-#define SWIGTYPE_p_ParticleDistribution swig_types[195]
-#define SWIGTYPE_p_ParticleLayout swig_types[196]
-#define SWIGTYPE_p_PolygonalTopology swig_types[197]
-#define SWIGTYPE_p_PolyhedralEdge swig_types[198]
-#define SWIGTYPE_p_PolyhedralFace swig_types[199]
-#define SWIGTYPE_p_PolyhedralTopology swig_types[200]
-#define SWIGTYPE_p_ProgressHandler__Callback_t swig_types[201]
-#define SWIGTYPE_p_RealLimits swig_types[202]
-#define SWIGTYPE_p_RealParameter swig_types[203]
-#define SWIGTYPE_p_RectPixelMap swig_types[204]
-#define SWIGTYPE_p_RectangularDetector swig_types[205]
-#define SWIGTYPE_p_ResolutionFunction2DGaussian swig_types[206]
-#define SWIGTYPE_p_RotationEuler swig_types[207]
-#define SWIGTYPE_p_RotationX swig_types[208]
-#define SWIGTYPE_p_RotationY swig_types[209]
-#define SWIGTYPE_p_RotationZ swig_types[210]
-#define SWIGTYPE_p_SafePointerVectorT_IParticle_const_t swig_types[211]
-#define SWIGTYPE_p_SimpleSelectionRule swig_types[212]
-#define SWIGTYPE_p_Simulation swig_types[213]
-#define SWIGTYPE_p_SimulationOptions swig_types[214]
-#define SWIGTYPE_p_SpecularSimulation swig_types[215]
-#define SWIGTYPE_p_SphericalDetector swig_types[216]
-#define SWIGTYPE_p_SquaredFunctionDefault swig_types[217]
-#define SWIGTYPE_p_SquaredFunctionGaussianError swig_types[218]
-#define SWIGTYPE_p_SquaredFunctionMeanSquaredError swig_types[219]
-#define SWIGTYPE_p_SquaredFunctionSimError swig_types[220]
-#define SWIGTYPE_p_SquaredFunctionSystematicError swig_types[221]
-#define SWIGTYPE_p_ThreadInfo swig_types[222]
-#define SWIGTYPE_p_Transform3D swig_types[223]
-#define SWIGTYPE_p_VariableBinAxis swig_types[224]
-#define SWIGTYPE_p_WavevectorInfo swig_types[225]
-#define SWIGTYPE_p__object swig_types[226]
-#define SWIGTYPE_p_allocator_type swig_types[227]
-#define SWIGTYPE_p_bool swig_types[228]
-#define SWIGTYPE_p_char swig_types[229]
-#define SWIGTYPE_p_const_iterator swig_types[230]
-#define SWIGTYPE_p_const_reference swig_types[231]
-#define SWIGTYPE_p_difference_type swig_types[232]
-#define SWIGTYPE_p_double swig_types[233]
-#define SWIGTYPE_p_int swig_types[234]
-#define SWIGTYPE_p_iterator swig_types[235]
-#define SWIGTYPE_p_long_long swig_types[236]
-#define SWIGTYPE_p_observer_t swig_types[237]
-#define SWIGTYPE_p_observerlist_t swig_types[238]
-#define SWIGTYPE_p_p__object swig_types[239]
-#define SWIGTYPE_p_reference swig_types[240]
-#define SWIGTYPE_p_short swig_types[241]
-#define SWIGTYPE_p_signed_char swig_types[242]
-#define SWIGTYPE_p_size_type swig_types[243]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[244]
-#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[245]
-#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[246]
-#define SWIGTYPE_p_std__allocatorT_ISample_const_p_t swig_types[247]
-#define SWIGTYPE_p_std__allocatorT_ISample_p_t swig_types[248]
-#define SWIGTYPE_p_std__allocatorT_double_t swig_types[249]
-#define SWIGTYPE_p_std__allocatorT_int_t swig_types[250]
-#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[251]
-#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[252]
-#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[253]
-#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[254]
-#define SWIGTYPE_p_std__complexT_double_t swig_types[255]
-#define SWIGTYPE_p_std__functionT_GISASSimulation_pfF_t swig_types[256]
-#define SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t swig_types[257]
-#define SWIGTYPE_p_std__functionT_void_fF_t swig_types[258]
-#define SWIGTYPE_p_std__invalid_argument swig_types[259]
-#define SWIGTYPE_p_std__mapT_std__string_std__string_t__const_iterator swig_types[260]
-#define SWIGTYPE_p_std__ostream swig_types[261]
-#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[262]
-#define SWIGTYPE_p_std__shared_ptrT_ILayerRTCoefficients_const_t swig_types[263]
-#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[264]
-#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[265]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[266]
-#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[267]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t swig_types[268]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator swig_types[269]
-#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator swig_types[270]
-#define SWIGTYPE_p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t swig_types[271]
-#define SWIGTYPE_p_std__vectorT_IFTDistribution2D_const_p_std__allocatorT_IFTDistribution2D_const_p_t_t swig_types[272]
-#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[273]
-#define SWIGTYPE_p_std__vectorT_IMaterial_const_p_std__allocatorT_IMaterial_const_p_t_t swig_types[274]
-#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[275]
-#define SWIGTYPE_p_std__vectorT_ISample_const_p_std__allocatorT_ISample_const_p_t_t swig_types[276]
-#define SWIGTYPE_p_std__vectorT_ISample_p_std__allocatorT_ISample_p_t_t swig_types[277]
-#define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[278]
-#define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[279]
-#define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[280]
-#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[281]
-#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[282]
-#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[283]
-#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[284]
-#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[285]
-#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[286]
-#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[287]
-#define SWIGTYPE_p_swig__SwigPyIterator swig_types[288]
-#define SWIGTYPE_p_unsigned_char swig_types[289]
-#define SWIGTYPE_p_unsigned_int swig_types[290]
-#define SWIGTYPE_p_unsigned_long_long swig_types[291]
-#define SWIGTYPE_p_unsigned_short swig_types[292]
-#define SWIGTYPE_p_value_type swig_types[293]
-static swig_type_info *swig_types[295];
-static swig_module_info swig_module = {swig_types, 294, 0, 0, 0, 0};
+#define SWIGTYPE_p_OffSpecSimulation swig_types[181]
+#define SWIGTYPE_p_OutputDataIteratorT_double_OutputDataT_double_t_t swig_types[182]
+#define SWIGTYPE_p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t swig_types[183]
+#define SWIGTYPE_p_OutputDataT_CumulativeValue_t swig_types[184]
+#define SWIGTYPE_p_OutputDataT_bool_t swig_types[185]
+#define SWIGTYPE_p_OutputDataT_double_t swig_types[186]
+#define SWIGTYPE_p_OutputDataT_std__complexT_double_t_t swig_types[187]
+#define SWIGTYPE_p_ParameterDistribution swig_types[188]
+#define SWIGTYPE_p_ParameterPool swig_types[189]
+#define SWIGTYPE_p_ParameterSample swig_types[190]
+#define SWIGTYPE_p_Particle swig_types[191]
+#define SWIGTYPE_p_ParticleComposition swig_types[192]
+#define SWIGTYPE_p_ParticleCoreShell swig_types[193]
+#define SWIGTYPE_p_ParticleDistribution swig_types[194]
+#define SWIGTYPE_p_ParticleLayout swig_types[195]
+#define SWIGTYPE_p_PolygonalTopology swig_types[196]
+#define SWIGTYPE_p_PolyhedralEdge swig_types[197]
+#define SWIGTYPE_p_PolyhedralFace swig_types[198]
+#define SWIGTYPE_p_PolyhedralTopology swig_types[199]
+#define SWIGTYPE_p_ProgressHandler__Callback_t swig_types[200]
+#define SWIGTYPE_p_RealLimits swig_types[201]
+#define SWIGTYPE_p_RealParameter swig_types[202]
+#define SWIGTYPE_p_RectPixelMap swig_types[203]
+#define SWIGTYPE_p_RectangularDetector swig_types[204]
+#define SWIGTYPE_p_ResolutionFunction2DGaussian swig_types[205]
+#define SWIGTYPE_p_RotationEuler swig_types[206]
+#define SWIGTYPE_p_RotationX swig_types[207]
+#define SWIGTYPE_p_RotationY swig_types[208]
+#define SWIGTYPE_p_RotationZ swig_types[209]
+#define SWIGTYPE_p_SafePointerVectorT_IParticle_const_t swig_types[210]
+#define SWIGTYPE_p_SimpleSelectionRule swig_types[211]
+#define SWIGTYPE_p_Simulation swig_types[212]
+#define SWIGTYPE_p_SimulationOptions swig_types[213]
+#define SWIGTYPE_p_SpecularSimulation swig_types[214]
+#define SWIGTYPE_p_SphericalDetector swig_types[215]
+#define SWIGTYPE_p_SquaredFunctionDefault swig_types[216]
+#define SWIGTYPE_p_SquaredFunctionGaussianError swig_types[217]
+#define SWIGTYPE_p_SquaredFunctionMeanSquaredError swig_types[218]
+#define SWIGTYPE_p_SquaredFunctionSimError swig_types[219]
+#define SWIGTYPE_p_SquaredFunctionSystematicError swig_types[220]
+#define SWIGTYPE_p_ThreadInfo swig_types[221]
+#define SWIGTYPE_p_Transform3D swig_types[222]
+#define SWIGTYPE_p_VariableBinAxis swig_types[223]
+#define SWIGTYPE_p_WavevectorInfo swig_types[224]
+#define SWIGTYPE_p__object swig_types[225]
+#define SWIGTYPE_p_allocator_type swig_types[226]
+#define SWIGTYPE_p_bool swig_types[227]
+#define SWIGTYPE_p_char swig_types[228]
+#define SWIGTYPE_p_const_iterator swig_types[229]
+#define SWIGTYPE_p_const_reference swig_types[230]
+#define SWIGTYPE_p_difference_type swig_types[231]
+#define SWIGTYPE_p_double swig_types[232]
+#define SWIGTYPE_p_int swig_types[233]
+#define SWIGTYPE_p_iterator swig_types[234]
+#define SWIGTYPE_p_long_long swig_types[235]
+#define SWIGTYPE_p_observer_t swig_types[236]
+#define SWIGTYPE_p_observerlist_t swig_types[237]
+#define SWIGTYPE_p_p__object swig_types[238]
+#define SWIGTYPE_p_reference swig_types[239]
+#define SWIGTYPE_p_short swig_types[240]
+#define SWIGTYPE_p_signed_char swig_types[241]
+#define SWIGTYPE_p_size_type swig_types[242]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_double_t_t swig_types[243]
+#define SWIGTYPE_p_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t swig_types[244]
+#define SWIGTYPE_p_std__allocatorT_IFormFactor_p_t swig_types[245]
+#define SWIGTYPE_p_std__allocatorT_ISample_const_p_t swig_types[246]
+#define SWIGTYPE_p_std__allocatorT_ISample_p_t swig_types[247]
+#define SWIGTYPE_p_std__allocatorT_double_t swig_types[248]
+#define SWIGTYPE_p_std__allocatorT_int_t swig_types[249]
+#define SWIGTYPE_p_std__allocatorT_std__complexT_double_t_t swig_types[250]
+#define SWIGTYPE_p_std__allocatorT_std__string_t swig_types[251]
+#define SWIGTYPE_p_std__allocatorT_std__vectorT_double_std__allocatorT_double_t_t_t swig_types[252]
+#define SWIGTYPE_p_std__allocatorT_unsigned_long_t swig_types[253]
+#define SWIGTYPE_p_std__complexT_double_t swig_types[254]
+#define SWIGTYPE_p_std__functionT_GISASSimulation_pfF_t swig_types[255]
+#define SWIGTYPE_p_std__functionT_IMultiLayerBuilder_pfF_t swig_types[256]
+#define SWIGTYPE_p_std__functionT_void_fF_t swig_types[257]
+#define SWIGTYPE_p_std__invalid_argument swig_types[258]
+#define SWIGTYPE_p_std__mapT_std__string_std__string_t__const_iterator swig_types[259]
+#define SWIGTYPE_p_std__ostream swig_types[260]
+#define SWIGTYPE_p_std__shared_ptrT_IFitObserver_t swig_types[261]
+#define SWIGTYPE_p_std__shared_ptrT_ILayerRTCoefficients_const_t swig_types[262]
+#define SWIGTYPE_p_std__shared_ptrT_IMultiLayerBuilder_t swig_types[263]
+#define SWIGTYPE_p_std__shared_ptrT_IObserver_t swig_types[264]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_double_t_std__allocatorT_BasicVector3DT_double_t_t_t swig_types[265]
+#define SWIGTYPE_p_std__vectorT_BasicVector3DT_std__complexT_double_t_t_std__allocatorT_BasicVector3DT_std__complexT_double_t_t_t_t swig_types[266]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t swig_types[267]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__const_iterator swig_types[268]
+#define SWIGTYPE_p_std__vectorT_FitElement_std__allocatorT_FitElement_t_t__iterator swig_types[269]
+#define SWIGTYPE_p_std__vectorT_IDetector2D__EAxesUnits_std__allocatorT_IDetector2D__EAxesUnits_t_t swig_types[270]
+#define SWIGTYPE_p_std__vectorT_IFTDistribution2D_const_p_std__allocatorT_IFTDistribution2D_const_p_t_t swig_types[271]
+#define SWIGTYPE_p_std__vectorT_IFormFactor_p_std__allocatorT_IFormFactor_p_t_t swig_types[272]
+#define SWIGTYPE_p_std__vectorT_IMaterial_const_p_std__allocatorT_IMaterial_const_p_t_t swig_types[273]
+#define SWIGTYPE_p_std__vectorT_IParticle_const_p_std__allocatorT_IParticle_const_p_t_t swig_types[274]
+#define SWIGTYPE_p_std__vectorT_ISample_const_p_std__allocatorT_ISample_const_p_t_t swig_types[275]
+#define SWIGTYPE_p_std__vectorT_ISample_p_std__allocatorT_ISample_p_t_t swig_types[276]
+#define SWIGTYPE_p_std__vectorT_ParameterSample_std__allocatorT_ParameterSample_t_t swig_types[277]
+#define SWIGTYPE_p_std__vectorT_PolygonalTopology_std__allocatorT_PolygonalTopology_t_t swig_types[278]
+#define SWIGTYPE_p_std__vectorT_RealParameter_p_std__allocatorT_RealParameter_p_t_t swig_types[279]
+#define SWIGTYPE_p_std__vectorT_double_std__allocatorT_double_t_t swig_types[280]
+#define SWIGTYPE_p_std__vectorT_int_std__allocatorT_int_t_t swig_types[281]
+#define SWIGTYPE_p_std__vectorT_size_t_std__allocatorT_size_t_t_t swig_types[282]
+#define SWIGTYPE_p_std__vectorT_std__complexT_double_t_std__allocatorT_std__complexT_double_t_t_t swig_types[283]
+#define SWIGTYPE_p_std__vectorT_std__string_std__allocatorT_std__string_t_t swig_types[284]
+#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[285]
+#define SWIGTYPE_p_std__vectorT_unsigned_long_std__allocatorT_unsigned_long_t_t swig_types[286]
+#define SWIGTYPE_p_swig__SwigPyIterator swig_types[287]
+#define SWIGTYPE_p_unsigned_char swig_types[288]
+#define SWIGTYPE_p_unsigned_int swig_types[289]
+#define SWIGTYPE_p_unsigned_long_long swig_types[290]
+#define SWIGTYPE_p_unsigned_short swig_types[291]
+#define SWIGTYPE_p_value_type swig_types[292]
+static swig_type_info *swig_types[294];
+static swig_module_info swig_module = {swig_types, 293, 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)
 
@@ -6486,7 +6485,7 @@ SWIGINTERN void std_vector_Sl_std_string_Sg__insert__SWIG_1(std::vector< std::st
 #include "IIntensityNormalizer.h"
 #include "ISquaredFunction.h"
 #include "MathFunctions.h"
-#include "FitStrategyAdjustMinimizer.h"
+#include "AdjustMinimizerStrategy.h"
 
 SWIGINTERN BasicVector3D< double > BasicVector3D_Sl_double_Sg____add__(BasicVector3D< double > const *self,BasicVector3D< double > const &rhs){
         return *(self) + rhs; }
@@ -35969,43 +35968,43 @@ SWIGINTERN PyObject *IFitObserver_swigregister(PyObject *SWIGUNUSEDPARM(self), P
   return SWIG_Py_Void();
 }
 
-SWIGINTERN PyObject *_wrap_IFitStrategy_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_IFitStrategy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFitStrategy *arg1 = (IFitStrategy *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  IFitStrategy *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:IFitStrategy_clone",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitStrategy, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_IFitStrategy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitStrategy, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitStrategy_clone" "', argument " "1"" of type '" "IFitStrategy const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IFitStrategy" "', argument " "1"" of type '" "IFitStrategy *""'"); 
   }
   arg1 = reinterpret_cast< IFitStrategy * >(argp1);
-  result = (IFitStrategy *)((IFitStrategy const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitStrategy, 0 |  0 );
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_IFitStrategy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IFitStrategy_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IFitStrategy *arg1 = (IFitStrategy *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
+  IFitStrategy *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_IFitStrategy",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitStrategy, SWIG_POINTER_DISOWN |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:IFitStrategy_clone",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_IFitStrategy, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_IFitStrategy" "', argument " "1"" of type '" "IFitStrategy *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IFitStrategy_clone" "', argument " "1"" of type '" "IFitStrategy const *""'"); 
   }
   arg1 = reinterpret_cast< IFitStrategy * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  result = (IFitStrategy *)((IFitStrategy const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitStrategy, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -36089,7 +36088,7 @@ SWIGINTERN PyObject *_wrap_FitStrategyDefault_clone(PyObject *SWIGUNUSEDPARM(sel
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  IFitStrategy *result = 0 ;
+  FitStrategyDefault *result = 0 ;
   
   if (!PyArg_ParseTuple(args,(char *)"O:FitStrategyDefault_clone",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitStrategyDefault, 0 |  0 );
@@ -36097,8 +36096,8 @@ SWIGINTERN PyObject *_wrap_FitStrategyDefault_clone(PyObject *SWIGUNUSEDPARM(sel
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitStrategyDefault_clone" "', argument " "1"" of type '" "FitStrategyDefault const *""'"); 
   }
   arg1 = reinterpret_cast< FitStrategyDefault * >(argp1);
-  result = (IFitStrategy *)((FitStrategyDefault const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IFitStrategy, 0 |  0 );
+  result = (FitStrategyDefault *)((FitStrategyDefault const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FitStrategyDefault, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -38783,7 +38782,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FitOptions_getDerivEpsilon(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_FitOptions_derivEpsilon(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FitOptions *arg1 = (FitOptions *) 0 ;
   void *argp1 = 0 ;
@@ -38791,13 +38790,13 @@ SWIGINTERN PyObject *_wrap_FitOptions_getDerivEpsilon(PyObject *SWIGUNUSEDPARM(s
   PyObject * obj0 = 0 ;
   double result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:FitOptions_getDerivEpsilon",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:FitOptions_derivEpsilon",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitOptions, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitOptions_getDerivEpsilon" "', argument " "1"" of type '" "FitOptions const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitOptions_derivEpsilon" "', argument " "1"" of type '" "FitOptions const *""'"); 
   }
   arg1 = reinterpret_cast< FitOptions * >(argp1);
-  result = (double)((FitOptions const *)arg1)->getDerivEpsilon();
+  result = (double)((FitOptions const *)arg1)->derivEpsilon();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -38835,7 +38834,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FitOptions_getStepFactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_FitOptions_stepFactor(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   FitOptions *arg1 = (FitOptions *) 0 ;
   void *argp1 = 0 ;
@@ -38843,13 +38842,13 @@ SWIGINTERN PyObject *_wrap_FitOptions_getStepFactor(PyObject *SWIGUNUSEDPARM(sel
   PyObject * obj0 = 0 ;
   double result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:FitOptions_getStepFactor",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:FitOptions_stepFactor",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitOptions, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitOptions_getStepFactor" "', argument " "1"" of type '" "FitOptions const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitOptions_stepFactor" "', argument " "1"" of type '" "FitOptions const *""'"); 
   }
   arg1 = reinterpret_cast< FitOptions * >(argp1);
-  result = (double)((FitOptions const *)arg1)->getStepFactor();
+  result = (double)((FitOptions const *)arg1)->stepFactor();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -42776,20 +42775,20 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_AdjustMinimizerStrategy__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  FitStrategyAdjustMinimizer *result = 0 ;
+  AdjustMinimizerStrategy *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)":new_FitStrategyAdjustMinimizer")) SWIG_fail;
-  result = (FitStrategyAdjustMinimizer *)new FitStrategyAdjustMinimizer();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FitStrategyAdjustMinimizer, SWIG_POINTER_NEW |  0 );
+  if (!PyArg_ParseTuple(args,(char *)":new_AdjustMinimizerStrategy")) SWIG_fail;
+  result = (AdjustMinimizerStrategy *)new AdjustMinimizerStrategy();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AdjustMinimizerStrategy, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_AdjustMinimizerStrategy__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   std::string *arg1 = 0 ;
   std::string *arg2 = 0 ;
@@ -42800,17 +42799,17 @@ SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer__SWIG_1(PyObject *SWIG
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
   PyObject * obj2 = 0 ;
-  FitStrategyAdjustMinimizer *result = 0 ;
+  AdjustMinimizerStrategy *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOO:new_FitStrategyAdjustMinimizer",&obj0,&obj1,&obj2)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OOO:new_AdjustMinimizerStrategy",&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_FitStrategyAdjustMinimizer" "', argument " "1"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_AdjustMinimizerStrategy" "', argument " "1"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_FitStrategyAdjustMinimizer" "', argument " "1"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_AdjustMinimizerStrategy" "', argument " "1"" of type '" "std::string const &""'"); 
     }
     arg1 = ptr;
   }
@@ -42818,10 +42817,10 @@ SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer__SWIG_1(PyObject *SWIG
     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 '" "new_FitStrategyAdjustMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_AdjustMinimizerStrategy" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_FitStrategyAdjustMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_AdjustMinimizerStrategy" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
@@ -42829,15 +42828,15 @@ SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer__SWIG_1(PyObject *SWIG
     std::string *ptr = (std::string *)0;
     res3 = SWIG_AsPtr_std_string(obj2, &ptr);
     if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_FitStrategyAdjustMinimizer" "', argument " "3"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "new_AdjustMinimizerStrategy" "', argument " "3"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_FitStrategyAdjustMinimizer" "', argument " "3"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_AdjustMinimizerStrategy" "', argument " "3"" of type '" "std::string const &""'"); 
     }
     arg3 = ptr;
   }
-  result = (FitStrategyAdjustMinimizer *)new FitStrategyAdjustMinimizer((std::string const &)*arg1,(std::string const &)*arg2,(std::string const &)*arg3);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FitStrategyAdjustMinimizer, SWIG_POINTER_NEW |  0 );
+  result = (AdjustMinimizerStrategy *)new AdjustMinimizerStrategy((std::string const &)*arg1,(std::string const &)*arg2,(std::string const &)*arg3);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AdjustMinimizerStrategy, SWIG_POINTER_NEW |  0 );
   if (SWIG_IsNewObj(res1)) delete arg1;
   if (SWIG_IsNewObj(res2)) delete arg2;
   if (SWIG_IsNewObj(res3)) delete arg3;
@@ -42850,7 +42849,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_AdjustMinimizerStrategy__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   std::string *arg1 = 0 ;
   std::string *arg2 = 0 ;
@@ -42858,17 +42857,17 @@ SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer__SWIG_2(PyObject *SWIG
   int res2 = SWIG_OLDOBJ ;
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
-  FitStrategyAdjustMinimizer *result = 0 ;
+  AdjustMinimizerStrategy *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:new_FitStrategyAdjustMinimizer",&obj0,&obj1)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"OO:new_AdjustMinimizerStrategy",&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_FitStrategyAdjustMinimizer" "', argument " "1"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_AdjustMinimizerStrategy" "', argument " "1"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_FitStrategyAdjustMinimizer" "', argument " "1"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_AdjustMinimizerStrategy" "', argument " "1"" of type '" "std::string const &""'"); 
     }
     arg1 = ptr;
   }
@@ -42876,15 +42875,15 @@ SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer__SWIG_2(PyObject *SWIG
     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 '" "new_FitStrategyAdjustMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "new_AdjustMinimizerStrategy" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_FitStrategyAdjustMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_AdjustMinimizerStrategy" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
-  result = (FitStrategyAdjustMinimizer *)new FitStrategyAdjustMinimizer((std::string const &)*arg1,(std::string const &)*arg2);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FitStrategyAdjustMinimizer, SWIG_POINTER_NEW |  0 );
+  result = (AdjustMinimizerStrategy *)new AdjustMinimizerStrategy((std::string const &)*arg1,(std::string const &)*arg2);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AdjustMinimizerStrategy, SWIG_POINTER_NEW |  0 );
   if (SWIG_IsNewObj(res1)) delete arg1;
   if (SWIG_IsNewObj(res2)) delete arg2;
   return resultobj;
@@ -42895,27 +42894,27 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_AdjustMinimizerStrategy__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   std::string *arg1 = 0 ;
   int res1 = SWIG_OLDOBJ ;
   PyObject * obj0 = 0 ;
-  FitStrategyAdjustMinimizer *result = 0 ;
+  AdjustMinimizerStrategy *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:new_FitStrategyAdjustMinimizer",&obj0)) SWIG_fail;
+  if (!PyArg_ParseTuple(args,(char *)"O:new_AdjustMinimizerStrategy",&obj0)) 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_FitStrategyAdjustMinimizer" "', argument " "1"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_AdjustMinimizerStrategy" "', argument " "1"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_FitStrategyAdjustMinimizer" "', argument " "1"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_AdjustMinimizerStrategy" "', argument " "1"" of type '" "std::string const &""'"); 
     }
     arg1 = ptr;
   }
-  result = (FitStrategyAdjustMinimizer *)new FitStrategyAdjustMinimizer((std::string const &)*arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FitStrategyAdjustMinimizer, SWIG_POINTER_NEW |  0 );
+  result = (AdjustMinimizerStrategy *)new AdjustMinimizerStrategy((std::string const &)*arg1);
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AdjustMinimizerStrategy, SWIG_POINTER_NEW |  0 );
   if (SWIG_IsNewObj(res1)) delete arg1;
   return resultobj;
 fail:
@@ -42924,7 +42923,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_new_AdjustMinimizerStrategy(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[4] = {
     0
@@ -42937,14 +42936,14 @@ SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer(PyObject *self, PyObje
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
   if (argc == 0) {
-    return _wrap_new_FitStrategyAdjustMinimizer__SWIG_0(self, args);
+    return _wrap_new_AdjustMinimizerStrategy__SWIG_0(self, args);
   }
   if (argc == 1) {
     int _v;
     int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
     _v = SWIG_CheckState(res);
     if (_v) {
-      return _wrap_new_FitStrategyAdjustMinimizer__SWIG_3(self, args);
+      return _wrap_new_AdjustMinimizerStrategy__SWIG_3(self, args);
     }
   }
   if (argc == 2) {
@@ -42955,7 +42954,7 @@ SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer(PyObject *self, PyObje
       int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
       _v = SWIG_CheckState(res);
       if (_v) {
-        return _wrap_new_FitStrategyAdjustMinimizer__SWIG_2(self, args);
+        return _wrap_new_AdjustMinimizerStrategy__SWIG_2(self, args);
       }
     }
   }
@@ -42970,121 +42969,48 @@ SWIGINTERN PyObject *_wrap_new_FitStrategyAdjustMinimizer(PyObject *self, PyObje
         int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0));
         _v = SWIG_CheckState(res);
         if (_v) {
-          return _wrap_new_FitStrategyAdjustMinimizer__SWIG_1(self, args);
+          return _wrap_new_AdjustMinimizerStrategy__SWIG_1(self, args);
         }
       }
     }
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_FitStrategyAdjustMinimizer'.\n"
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_AdjustMinimizerStrategy'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    FitStrategyAdjustMinimizer::FitStrategyAdjustMinimizer()\n"
-    "    FitStrategyAdjustMinimizer::FitStrategyAdjustMinimizer(std::string const &,std::string const &,std::string const &)\n"
-    "    FitStrategyAdjustMinimizer::FitStrategyAdjustMinimizer(std::string const &,std::string const &)\n"
-    "    FitStrategyAdjustMinimizer::FitStrategyAdjustMinimizer(std::string const &)\n");
+    "    AdjustMinimizerStrategy::AdjustMinimizerStrategy()\n"
+    "    AdjustMinimizerStrategy::AdjustMinimizerStrategy(std::string const &,std::string const &,std::string const &)\n"
+    "    AdjustMinimizerStrategy::AdjustMinimizerStrategy(std::string const &,std::string const &)\n"
+    "    AdjustMinimizerStrategy::AdjustMinimizerStrategy(std::string const &)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_delete_FitStrategyAdjustMinimizer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AdjustMinimizerStrategy_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  FitStrategyAdjustMinimizer *arg1 = (FitStrategyAdjustMinimizer *) 0 ;
+  AdjustMinimizerStrategy *arg1 = (AdjustMinimizerStrategy *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
+  AdjustMinimizerStrategy *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:delete_FitStrategyAdjustMinimizer",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitStrategyAdjustMinimizer, SWIG_POINTER_DISOWN |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:AdjustMinimizerStrategy_clone",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AdjustMinimizerStrategy, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_FitStrategyAdjustMinimizer" "', argument " "1"" of type '" "FitStrategyAdjustMinimizer *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AdjustMinimizerStrategy_clone" "', argument " "1"" of type '" "AdjustMinimizerStrategy const *""'"); 
   }
-  arg1 = reinterpret_cast< FitStrategyAdjustMinimizer * >(argp1);
-  delete arg1;
-  resultobj = SWIG_Py_Void();
+  arg1 = reinterpret_cast< AdjustMinimizerStrategy * >(argp1);
+  result = (AdjustMinimizerStrategy *)((AdjustMinimizerStrategy const *)arg1)->clone();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_AdjustMinimizerStrategy, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_clone(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AdjustMinimizerStrategy_setMinimizer__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  FitStrategyAdjustMinimizer *arg1 = (FitStrategyAdjustMinimizer *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  FitStrategyAdjustMinimizer *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitStrategyAdjustMinimizer_clone",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitStrategyAdjustMinimizer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitStrategyAdjustMinimizer_clone" "', argument " "1"" of type '" "FitStrategyAdjustMinimizer const *""'"); 
-  }
-  arg1 = reinterpret_cast< FitStrategyAdjustMinimizer * >(argp1);
-  result = (FitStrategyAdjustMinimizer *)((FitStrategyAdjustMinimizer const *)arg1)->clone();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_FitStrategyAdjustMinimizer, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_getMinimizer(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitStrategyAdjustMinimizer *arg1 = (FitStrategyAdjustMinimizer *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  IMinimizer *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:FitStrategyAdjustMinimizer_getMinimizer",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitStrategyAdjustMinimizer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitStrategyAdjustMinimizer_getMinimizer" "', argument " "1"" of type '" "FitStrategyAdjustMinimizer *""'"); 
-  }
-  arg1 = reinterpret_cast< FitStrategyAdjustMinimizer * >(argp1);
-  result = (IMinimizer *)(arg1)->getMinimizer();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IMinimizer, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitStrategyAdjustMinimizer *arg1 = (FitStrategyAdjustMinimizer *) 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:FitStrategyAdjustMinimizer_setMinimizer",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitStrategyAdjustMinimizer, 0 |  0 );
-  if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "1"" of type '" "FitStrategyAdjustMinimizer *""'"); 
-  }
-  arg1 = reinterpret_cast< FitStrategyAdjustMinimizer * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_IMinimizer, 0 |  0 );
-  if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "FitStrategyAdjustMinimizer_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_FitStrategyAdjustMinimizer_setMinimizer__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  FitStrategyAdjustMinimizer *arg1 = (FitStrategyAdjustMinimizer *) 0 ;
+  AdjustMinimizerStrategy *arg1 = (AdjustMinimizerStrategy *) 0 ;
   std::string *arg2 = 0 ;
   std::string *arg3 = 0 ;
   std::string *arg4 = 0 ;
@@ -43098,20 +43024,20 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_1(PyObj
   PyObject * obj2 = 0 ;
   PyObject * obj3 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOOO:FitStrategyAdjustMinimizer_setMinimizer",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitStrategyAdjustMinimizer, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OOOO:AdjustMinimizerStrategy_setMinimizer",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AdjustMinimizerStrategy, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "1"" of type '" "FitStrategyAdjustMinimizer *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "1"" of type '" "AdjustMinimizerStrategy *""'"); 
   }
-  arg1 = reinterpret_cast< FitStrategyAdjustMinimizer * >(argp1);
+  arg1 = reinterpret_cast< AdjustMinimizerStrategy * >(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 '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
@@ -43119,10 +43045,10 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_1(PyObj
     std::string *ptr = (std::string *)0;
     res3 = SWIG_AsPtr_std_string(obj2, &ptr);
     if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "3"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "3"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "3"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "3"" of type '" "std::string const &""'"); 
     }
     arg3 = ptr;
   }
@@ -43130,10 +43056,10 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_1(PyObj
     std::string *ptr = (std::string *)0;
     res4 = SWIG_AsPtr_std_string(obj3, &ptr);
     if (!SWIG_IsOK(res4)) {
-      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "4"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "4"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "4"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "4"" of type '" "std::string const &""'"); 
     }
     arg4 = ptr;
   }
@@ -43151,9 +43077,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AdjustMinimizerStrategy_setMinimizer__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  FitStrategyAdjustMinimizer *arg1 = (FitStrategyAdjustMinimizer *) 0 ;
+  AdjustMinimizerStrategy *arg1 = (AdjustMinimizerStrategy *) 0 ;
   std::string *arg2 = 0 ;
   std::string *arg3 = 0 ;
   void *argp1 = 0 ;
@@ -43164,20 +43090,20 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_2(PyObj
   PyObject * obj1 = 0 ;
   PyObject * obj2 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OOO:FitStrategyAdjustMinimizer_setMinimizer",&obj0,&obj1,&obj2)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitStrategyAdjustMinimizer, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OOO:AdjustMinimizerStrategy_setMinimizer",&obj0,&obj1,&obj2)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AdjustMinimizerStrategy, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "1"" of type '" "FitStrategyAdjustMinimizer *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "1"" of type '" "AdjustMinimizerStrategy *""'"); 
   }
-  arg1 = reinterpret_cast< FitStrategyAdjustMinimizer * >(argp1);
+  arg1 = reinterpret_cast< AdjustMinimizerStrategy * >(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 '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
@@ -43185,10 +43111,10 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_2(PyObj
     std::string *ptr = (std::string *)0;
     res3 = SWIG_AsPtr_std_string(obj2, &ptr);
     if (!SWIG_IsOK(res3)) {
-      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "3"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "3"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "3"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "3"" of type '" "std::string const &""'"); 
     }
     arg3 = ptr;
   }
@@ -43204,9 +43130,9 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AdjustMinimizerStrategy_setMinimizer__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  FitStrategyAdjustMinimizer *arg1 = (FitStrategyAdjustMinimizer *) 0 ;
+  AdjustMinimizerStrategy *arg1 = (AdjustMinimizerStrategy *) 0 ;
   std::string *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
@@ -43214,20 +43140,20 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_3(PyObj
   PyObject * obj0 = 0 ;
   PyObject * obj1 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"OO:FitStrategyAdjustMinimizer_setMinimizer",&obj0,&obj1)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitStrategyAdjustMinimizer, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"OO:AdjustMinimizerStrategy_setMinimizer",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AdjustMinimizerStrategy, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "1"" of type '" "FitStrategyAdjustMinimizer *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "1"" of type '" "AdjustMinimizerStrategy *""'"); 
   }
-  arg1 = reinterpret_cast< FitStrategyAdjustMinimizer * >(argp1);
+  arg1 = reinterpret_cast< AdjustMinimizerStrategy * >(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 '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     if (!ptr) {
-      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "FitStrategyAdjustMinimizer_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
+      SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "AdjustMinimizerStrategy_setMinimizer" "', argument " "2"" of type '" "std::string const &""'"); 
     }
     arg2 = ptr;
   }
@@ -43241,7 +43167,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer(PyObject *self, PyObject *args) {
+SWIGINTERN PyObject *_wrap_AdjustMinimizerStrategy_setMinimizer(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[5] = {
     0
@@ -43256,34 +43182,20 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer(PyObject *sel
   if (argc == 2) {
     int _v;
     void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitStrategyAdjustMinimizer, 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_FitStrategyAdjustMinimizer_setMinimizer__SWIG_0(self, args);
-      }
-    }
-  }
-  if (argc == 2) {
-    int _v;
-    void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitStrategyAdjustMinimizer, 0);
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_AdjustMinimizerStrategy, 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_FitStrategyAdjustMinimizer_setMinimizer__SWIG_3(self, args);
+        return _wrap_AdjustMinimizerStrategy_setMinimizer__SWIG_2(self, args);
       }
     }
   }
   if (argc == 3) {
     int _v;
     void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitStrategyAdjustMinimizer, 0);
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_AdjustMinimizerStrategy, 0);
     _v = SWIG_CheckState(res);
     if (_v) {
       int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
@@ -43292,7 +43204,7 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer(PyObject *sel
         int res = SWIG_AsPtr_std_string(argv[2], (std::string**)(0));
         _v = SWIG_CheckState(res);
         if (_v) {
-          return _wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_2(self, args);
+          return _wrap_AdjustMinimizerStrategy_setMinimizer__SWIG_1(self, args);
         }
       }
     }
@@ -43300,7 +43212,7 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer(PyObject *sel
   if (argc == 4) {
     int _v;
     void *vptr = 0;
-    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_FitStrategyAdjustMinimizer, 0);
+    int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_AdjustMinimizerStrategy, 0);
     _v = SWIG_CheckState(res);
     if (_v) {
       int res = SWIG_AsPtr_std_string(argv[1], (std::string**)(0));
@@ -43312,7 +43224,7 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer(PyObject *sel
           int res = SWIG_AsPtr_std_string(argv[3], (std::string**)(0));
           _v = SWIG_CheckState(res);
           if (_v) {
-            return _wrap_FitStrategyAdjustMinimizer_setMinimizer__SWIG_1(self, args);
+            return _wrap_AdjustMinimizerStrategy_setMinimizer__SWIG_0(self, args);
           }
         }
       }
@@ -43320,29 +43232,28 @@ SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_setMinimizer(PyObject *sel
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'FitStrategyAdjustMinimizer_setMinimizer'.\n"
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'AdjustMinimizerStrategy_setMinimizer'.\n"
     "  Possible C/C++ prototypes are:\n"
-    "    FitStrategyAdjustMinimizer::setMinimizer(IMinimizer *)\n"
-    "    FitStrategyAdjustMinimizer::setMinimizer(std::string const &,std::string const &,std::string const &)\n"
-    "    FitStrategyAdjustMinimizer::setMinimizer(std::string const &,std::string const &)\n"
-    "    FitStrategyAdjustMinimizer::setMinimizer(std::string const &)\n");
+    "    AdjustMinimizerStrategy::setMinimizer(std::string const &,std::string const &,std::string const &)\n"
+    "    AdjustMinimizerStrategy::setMinimizer(std::string const &,std::string const &)\n"
+    "    AdjustMinimizerStrategy::setMinimizer(std::string const &)\n");
   return 0;
 }
 
 
-SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_execute(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_AdjustMinimizerStrategy_execute(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  FitStrategyAdjustMinimizer *arg1 = (FitStrategyAdjustMinimizer *) 0 ;
+  AdjustMinimizerStrategy *arg1 = (AdjustMinimizerStrategy *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:FitStrategyAdjustMinimizer_execute",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitStrategyAdjustMinimizer, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:AdjustMinimizerStrategy_execute",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AdjustMinimizerStrategy, 0 |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitStrategyAdjustMinimizer_execute" "', argument " "1"" of type '" "FitStrategyAdjustMinimizer *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "AdjustMinimizerStrategy_execute" "', argument " "1"" of type '" "AdjustMinimizerStrategy *""'"); 
   }
-  arg1 = reinterpret_cast< FitStrategyAdjustMinimizer * >(argp1);
+  arg1 = reinterpret_cast< AdjustMinimizerStrategy * >(argp1);
   (arg1)->execute();
   resultobj = SWIG_Py_Void();
   return resultobj;
@@ -43351,32 +43262,31 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_FitStrategyAdjustMinimizer_getMinimizerOptions(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_delete_AdjustMinimizerStrategy(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  FitStrategyAdjustMinimizer *arg1 = (FitStrategyAdjustMinimizer *) 0 ;
+  AdjustMinimizerStrategy *arg1 = (AdjustMinimizerStrategy *) 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  ObsoleteMinimizerOptions *result = 0 ;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:FitStrategyAdjustMinimizer_getMinimizerOptions",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_FitStrategyAdjustMinimizer, 0 |  0 );
+  if (!PyArg_ParseTuple(args,(char *)"O:delete_AdjustMinimizerStrategy",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_AdjustMinimizerStrategy, SWIG_POINTER_DISOWN |  0 );
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "FitStrategyAdjustMinimizer_getMinimizerOptions" "', argument " "1"" of type '" "FitStrategyAdjustMinimizer *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_AdjustMinimizerStrategy" "', argument " "1"" of type '" "AdjustMinimizerStrategy *""'"); 
   }
-  arg1 = reinterpret_cast< FitStrategyAdjustMinimizer * >(argp1);
-  result = (ObsoleteMinimizerOptions *)(arg1)->getMinimizerOptions();
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ObsoleteMinimizerOptions, 0 |  0 );
+  arg1 = reinterpret_cast< AdjustMinimizerStrategy * >(argp1);
+  delete arg1;
+  resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
   return NULL;
 }
 
 
-SWIGINTERN PyObject *FitStrategyAdjustMinimizer_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *AdjustMinimizerStrategy_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
   if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
-  SWIG_TypeNewClientData(SWIGTYPE_p_FitStrategyAdjustMinimizer, SWIG_NewClientData(obj));
+  SWIG_TypeNewClientData(SWIGTYPE_p_AdjustMinimizerStrategy, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
 
@@ -102441,18 +102351,18 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"delete_IFitObserver", _wrap_delete_IFitObserver, METH_VARARGS, (char *)"delete_IFitObserver(IFitObserver self)"},
 	 { (char *)"disown_IFitObserver", _wrap_disown_IFitObserver, METH_VARARGS, NULL},
 	 { (char *)"IFitObserver_swigregister", IFitObserver_swigregister, METH_VARARGS, NULL},
-	 { (char *)"IFitStrategy_clone", _wrap_IFitStrategy_clone, METH_VARARGS, (char *)"\n"
-		"IFitStrategy_clone(IFitStrategy self) -> IFitStrategy\n"
-		"\n"
-		"virtual IFitStrategy* IFitStrategy::clone() const =0\n"
-		"\n"
-		""},
 	 { (char *)"delete_IFitStrategy", _wrap_delete_IFitStrategy, METH_VARARGS, (char *)"\n"
 		"delete_IFitStrategy(IFitStrategy self)\n"
 		"\n"
 		"virtual IFitStrategy::~IFitStrategy()\n"
 		"\n"
 		""},
+	 { (char *)"IFitStrategy_clone", _wrap_IFitStrategy_clone, METH_VARARGS, (char *)"\n"
+		"IFitStrategy_clone(IFitStrategy self) -> IFitStrategy\n"
+		"\n"
+		"virtual IFitStrategy* IFitStrategy::clone() const =0\n"
+		"\n"
+		""},
 	 { (char *)"IFitStrategy_init", _wrap_IFitStrategy_init, METH_VARARGS, (char *)"\n"
 		"IFitStrategy_init(IFitStrategy self, FitSuiteImp * fit_suite)\n"
 		"\n"
@@ -102473,7 +102383,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"FitStrategyDefault_clone", _wrap_FitStrategyDefault_clone, METH_VARARGS, (char *)"\n"
-		"FitStrategyDefault_clone(FitStrategyDefault self) -> IFitStrategy\n"
+		"FitStrategyDefault_clone(FitStrategyDefault self) -> FitStrategyDefault\n"
 		"\n"
 		"IFitStrategy * FitStrategyDefault::clone() const \n"
 		"\n"
@@ -102937,9 +102847,9 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"FitObject_swigregister", FitObject_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_FitOptions", _wrap_new_FitOptions, METH_VARARGS, (char *)"new_FitOptions() -> FitOptions"},
 	 { (char *)"delete_FitOptions", _wrap_delete_FitOptions, METH_VARARGS, (char *)"delete_FitOptions(FitOptions self)"},
-	 { (char *)"FitOptions_getDerivEpsilon", _wrap_FitOptions_getDerivEpsilon, METH_VARARGS, (char *)"FitOptions_getDerivEpsilon(FitOptions self) -> double"},
+	 { (char *)"FitOptions_derivEpsilon", _wrap_FitOptions_derivEpsilon, METH_VARARGS, (char *)"FitOptions_derivEpsilon(FitOptions self) -> double"},
 	 { (char *)"FitOptions_setDerivEpsilon", _wrap_FitOptions_setDerivEpsilon, METH_VARARGS, (char *)"FitOptions_setDerivEpsilon(FitOptions self, double deriv_epsilon)"},
-	 { (char *)"FitOptions_getStepFactor", _wrap_FitOptions_getStepFactor, METH_VARARGS, (char *)"FitOptions_getStepFactor(FitOptions self) -> double"},
+	 { (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_FitParameterLinked", _wrap_new_FitParameterLinked, METH_VARARGS, (char *)"\n"
@@ -103479,55 +103389,31 @@ static PyMethodDef SwigMethods[] = {
 		"double MathFunctions::GenerateNormalRandom(double average, double std_dev)\n"
 		"\n"
 		""},
-	 { (char *)"new_FitStrategyAdjustMinimizer", _wrap_new_FitStrategyAdjustMinimizer, METH_VARARGS, (char *)"\n"
-		"FitStrategyAdjustMinimizer()\n"
-		"FitStrategyAdjustMinimizer(std::string const & minimizer_name, std::string const & algorithm_name, std::string const & minimizer_options)\n"
-		"FitStrategyAdjustMinimizer(std::string const & minimizer_name, std::string const & algorithm_name)\n"
-		"new_FitStrategyAdjustMinimizer(std::string const & minimizer_name) -> FitStrategyAdjustMinimizer\n"
-		"\n"
-		"FitStrategyAdjustMinimizer::FitStrategyAdjustMinimizer(const std::string &minimizer_name, const std::string &algorithm_name=std::string(), const std::string &minimizer_options=std::string())\n"
-		"\n"
-		""},
-	 { (char *)"delete_FitStrategyAdjustMinimizer", _wrap_delete_FitStrategyAdjustMinimizer, METH_VARARGS, (char *)"\n"
-		"delete_FitStrategyAdjustMinimizer(FitStrategyAdjustMinimizer self)\n"
-		"\n"
-		"FitStrategyAdjustMinimizer::~FitStrategyAdjustMinimizer()\n"
-		"\n"
-		""},
-	 { (char *)"FitStrategyAdjustMinimizer_clone", _wrap_FitStrategyAdjustMinimizer_clone, METH_VARARGS, (char *)"\n"
-		"FitStrategyAdjustMinimizer_clone(FitStrategyAdjustMinimizer self) -> FitStrategyAdjustMinimizer\n"
-		"\n"
-		"FitStrategyAdjustMinimizer * FitStrategyAdjustMinimizer::clone() const \n"
-		"\n"
-		""},
-	 { (char *)"FitStrategyAdjustMinimizer_getMinimizer", _wrap_FitStrategyAdjustMinimizer_getMinimizer, METH_VARARGS, (char *)"\n"
-		"FitStrategyAdjustMinimizer_getMinimizer(FitStrategyAdjustMinimizer self) -> IMinimizer *\n"
-		"\n"
-		"IMinimizer * FitStrategyAdjustMinimizer::getMinimizer()\n"
-		"\n"
+	 { (char *)"new_AdjustMinimizerStrategy", _wrap_new_AdjustMinimizerStrategy, METH_VARARGS, (char *)"\n"
+		"AdjustMinimizerStrategy()\n"
+		"AdjustMinimizerStrategy(std::string const & minimizerName, std::string const & algorithmName, std::string const & optionString)\n"
+		"AdjustMinimizerStrategy(std::string const & minimizerName, std::string const & algorithmName)\n"
+		"new_AdjustMinimizerStrategy(std::string const & minimizerName) -> AdjustMinimizerStrategy\n"
 		""},
-	 { (char *)"FitStrategyAdjustMinimizer_setMinimizer", _wrap_FitStrategyAdjustMinimizer_setMinimizer, METH_VARARGS, (char *)"\n"
-		"setMinimizer(IMinimizer * minimizer)\n"
-		"setMinimizer(std::string const & minimizer_name, std::string const & algorithm_name, std::string const & minimizer_options)\n"
-		"setMinimizer(std::string const & minimizer_name, std::string const & algorithm_name)\n"
-		"FitStrategyAdjustMinimizer_setMinimizer(FitStrategyAdjustMinimizer self, std::string const & minimizer_name)\n"
+	 { (char *)"AdjustMinimizerStrategy_clone", _wrap_AdjustMinimizerStrategy_clone, METH_VARARGS, (char *)"\n"
+		"AdjustMinimizerStrategy_clone(AdjustMinimizerStrategy self) -> AdjustMinimizerStrategy\n"
 		"\n"
-		"void FitStrategyAdjustMinimizer::setMinimizer(const std::string &minimizer_name, const std::string &algorithm_name=std::string(), const std::string &minimizer_options=std::string())\n"
+		"virtual IFitStrategy* IFitStrategy::clone() const =0\n"
 		"\n"
 		""},
-	 { (char *)"FitStrategyAdjustMinimizer_execute", _wrap_FitStrategyAdjustMinimizer_execute, METH_VARARGS, (char *)"\n"
-		"FitStrategyAdjustMinimizer_execute(FitStrategyAdjustMinimizer self)\n"
-		"\n"
-		"void FitStrategyAdjustMinimizer::execute()\n"
-		"\n"
+	 { (char *)"AdjustMinimizerStrategy_setMinimizer", _wrap_AdjustMinimizerStrategy_setMinimizer, METH_VARARGS, (char *)"\n"
+		"setMinimizer(std::string const & minimizerName, std::string const & algorithmName, std::string const & optionString)\n"
+		"setMinimizer(std::string const & minimizerName, std::string const & algorithmName)\n"
+		"AdjustMinimizerStrategy_setMinimizer(AdjustMinimizerStrategy self, std::string const & minimizerName)\n"
 		""},
-	 { (char *)"FitStrategyAdjustMinimizer_getMinimizerOptions", _wrap_FitStrategyAdjustMinimizer_getMinimizerOptions, METH_VARARGS, (char *)"\n"
-		"FitStrategyAdjustMinimizer_getMinimizerOptions(FitStrategyAdjustMinimizer self) -> ObsoleteMinimizerOptions *\n"
+	 { (char *)"AdjustMinimizerStrategy_execute", _wrap_AdjustMinimizerStrategy_execute, METH_VARARGS, (char *)"\n"
+		"AdjustMinimizerStrategy_execute(AdjustMinimizerStrategy self)\n"
 		"\n"
-		"ObsoleteMinimizerOptions * FitStrategyAdjustMinimizer::getMinimizerOptions()\n"
+		"virtual void IFitStrategy::execute()=0\n"
 		"\n"
 		""},
-	 { (char *)"FitStrategyAdjustMinimizer_swigregister", FitStrategyAdjustMinimizer_swigregister, METH_VARARGS, NULL},
+	 { (char *)"delete_AdjustMinimizerStrategy", _wrap_delete_AdjustMinimizerStrategy, METH_VARARGS, (char *)"delete_AdjustMinimizerStrategy(AdjustMinimizerStrategy self)"},
+	 { (char *)"AdjustMinimizerStrategy_swigregister", AdjustMinimizerStrategy_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_IMultiLayerBuilder", _wrap_new_IMultiLayerBuilder, METH_VARARGS, (char *)"\n"
 		"new_IMultiLayerBuilder(PyObject * arg2) -> IMultiLayerBuilder\n"
 		"\n"
@@ -113272,12 +113158,12 @@ static void *_p_RotationZTo_p_IRotation(void *x, int *SWIGUNUSEDPARM(newmemory))
 static void *_p_RotationXTo_p_IRotation(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IRotation *)  ((RotationX *) x));
 }
+static void *_p_AdjustMinimizerStrategyTo_p_IFitStrategy(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((IFitStrategy *)  ((AdjustMinimizerStrategy *) x));
+}
 static void *_p_FitStrategyDefaultTo_p_IFitStrategy(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IFitStrategy *)  ((FitStrategyDefault *) x));
 }
-static void *_p_FitStrategyAdjustMinimizerTo_p_IFitStrategy(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((IFitStrategy *)  ((FitStrategyAdjustMinimizer *) x));
-}
 static void *_p_SimpleSelectionRuleTo_p_ISelectionRule(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((ISelectionRule *)  ((SimpleSelectionRule *) x));
 }
@@ -113834,9 +113720,6 @@ static void *_p_RectPixelMapTo_p_IPixelMap(void *x, int *SWIGUNUSEDPARM(newmemor
 static void *_p_FormFactorBoxTo_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INamed *) (IParameterized *)(ISample *)(IFormFactor *)(IFormFactorBorn *) ((FormFactorBox *) x));
 }
-static void *_p_FitStrategyAdjustMinimizerTo_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemory)) {
-    return (void *)((INamed *) (IFitStrategy *) ((FitStrategyAdjustMinimizer *) x));
-}
 static void *_p_FormFactorSphereGaussianRadiusTo_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INamed *) (IParameterized *)(ISample *)(IFormFactor *)(IFormFactorBorn *) ((FormFactorSphereGaussianRadius *) x));
 }
@@ -114155,6 +114038,9 @@ static void *_p_FormFactorCone6To_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemor
 static void *_p_FormFactorLongRipple1GaussTo_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INamed *) (IParameterized *)(ISample *)(IFormFactor *)(IFormFactorBorn *) ((FormFactorLongRipple1Gauss *) x));
 }
+static void *_p_AdjustMinimizerStrategyTo_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemory)) {
+    return (void *)((INamed *) (IFitStrategy *) ((AdjustMinimizerStrategy *) x));
+}
 static void *_p_IFitStrategyTo_p_INamed(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((INamed *)  ((IFitStrategy *) x));
 }
@@ -115145,6 +115031,7 @@ static void *_p_FTDecayFunction2DVoigtTo_p_IFTDecayFunction2D(void *x, int *SWIG
 static void *_p_ResolutionFunction2DGaussianTo_p_IResolutionFunction2D(void *x, int *SWIGUNUSEDPARM(newmemory)) {
     return (void *)((IResolutionFunction2D *)  ((ResolutionFunction2DGaussian *) x));
 }
+static swig_type_info _swigt__p_AdjustMinimizerStrategy = {"_p_AdjustMinimizerStrategy", "AdjustMinimizerStrategy *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_AngularPixelMap = {"_p_AngularPixelMap", "AngularPixelMap *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_AttLimits = {"_p_AttLimits", "AttLimits *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Attributes = {"_p_Attributes", "Attributes *", 0, 0, (void*)0, 0};
@@ -115193,7 +115080,6 @@ static swig_type_info _swigt__p_FitOptions = {"_p_FitOptions", "FitOptions *", 0
 static swig_type_info _swigt__p_FitParameter = {"_p_FitParameter", "FitParameter *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FitParameterLinked = {"_p_FitParameterLinked", "FitParameterLinked *", 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_FitStrategyAdjustMinimizer = {"_p_FitStrategyAdjustMinimizer", "FitStrategyAdjustMinimizer *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FitStrategyDefault = {"_p_FitStrategyDefault", "FitStrategyDefault *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FitSuite = {"_p_FitSuite", "FitSuite *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_FitSuiteImp = {"_p_FitSuiteImp", "FitSuiteImp *", 0, 0, (void*)0, 0};
@@ -115326,7 +115212,6 @@ static swig_type_info _swigt__p_Mask = {"_p_Mask", "Mask *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_MesoCrystal = {"_p_MesoCrystal", "MesoCrystal *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_MultiLayer = {"_p_MultiLayer", "MultiLayer *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_MultiLayerRTCoefficients_t = {"_p_MultiLayerRTCoefficients_t", "MultiLayerRTCoefficients_t *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_ObsoleteMinimizerOptions = {"_p_ObsoleteMinimizerOptions", "ObsoleteMinimizerOptions *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_OffSpecSimulation = {"_p_OffSpecSimulation", "OffSpecSimulation *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_OutputDataIteratorT_double_OutputDataT_double_t_t = {"_p_OutputDataIteratorT_double_OutputDataT_double_t_t", "OutputData< double >::iterator *|OutputDataIterator< double,OutputData< double > > *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t = {"_p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t", "OutputDataIterator< double const,OutputData< double > const > *|OutputData< double >::const_iterator *", 0, 0, (void*)0, 0};
@@ -115441,6 +115326,7 @@ static swig_type_info _swigt__p_unsigned_short = {"_p_unsigned_short", "unsigned
 static swig_type_info _swigt__p_value_type = {"_p_value_type", "value_type *", 0, 0, (void*)0, 0};
 
 static swig_type_info *swig_type_initial[] = {
+  &_swigt__p_AdjustMinimizerStrategy,
   &_swigt__p_AngularPixelMap,
   &_swigt__p_AttLimits,
   &_swigt__p_Attributes,
@@ -115489,7 +115375,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_FitParameter,
   &_swigt__p_FitParameterLinked,
   &_swigt__p_FitParameterSet,
-  &_swigt__p_FitStrategyAdjustMinimizer,
   &_swigt__p_FitStrategyDefault,
   &_swigt__p_FitSuite,
   &_swigt__p_FitSuiteImp,
@@ -115622,7 +115507,6 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_MesoCrystal,
   &_swigt__p_MultiLayer,
   &_swigt__p_MultiLayerRTCoefficients_t,
-  &_swigt__p_ObsoleteMinimizerOptions,
   &_swigt__p_OffSpecSimulation,
   &_swigt__p_OutputDataIteratorT_double_OutputDataT_double_t_t,
   &_swigt__p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t,
@@ -115737,6 +115621,7 @@ static swig_type_info *swig_type_initial[] = {
   &_swigt__p_value_type,
 };
 
+static swig_cast_info _swigc__p_AdjustMinimizerStrategy[] = {  {&_swigt__p_AdjustMinimizerStrategy, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_AngularPixelMap[] = {  {&_swigt__p_AngularPixelMap, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_AttLimits[] = {  {&_swigt__p_AttLimits, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_Attributes[] = {  {&_swigt__p_Attributes, 0, 0, 0},{0, 0, 0, 0}};
@@ -115785,7 +115670,6 @@ static swig_cast_info _swigc__p_FitOptions[] = {  {&_swigt__p_FitOptions, 0, 0,
 static swig_cast_info _swigc__p_FitParameter[] = {  {&_swigt__p_FitParameter, 0, 0, 0},  {&_swigt__p_FitParameterLinked, _p_FitParameterLinkedTo_p_FitParameter, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FitParameterLinked[] = {  {&_swigt__p_FitParameterLinked, 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_FitStrategyAdjustMinimizer[] = {  {&_swigt__p_FitStrategyAdjustMinimizer, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FitStrategyDefault[] = {  {&_swigt__p_FitStrategyDefault, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FitSuite[] = {  {&_swigt__p_FitSuite, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_FitSuiteImp[] = {  {&_swigt__p_FitSuiteImp, 0, 0, 0},{0, 0, 0, 0}};
@@ -115865,7 +115749,7 @@ static swig_cast_info _swigc__p_IFactoryT_std__string_GISASSimulation_t[] = {  {
 static swig_cast_info _swigc__p_IFactoryT_std__string_IMultiLayerBuilder_t[] = {  {&_swigt__p_IFactoryT_std__string_IMultiLayerBuilder_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFitObserver[] = {  {&_swigt__p_IFitObserver, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFitParameter[] = {  {&_swigt__p_IFitParameter, 0, 0, 0},  {&_swigt__p_FitParameter, _p_FitParameterTo_p_IFitParameter, 0, 0},  {&_swigt__p_FitParameterLinked, _p_FitParameterLinkedTo_p_IFitParameter, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_IFitStrategy[] = {  {&_swigt__p_IFitStrategy, 0, 0, 0},  {&_swigt__p_FitStrategyDefault, _p_FitStrategyDefaultTo_p_IFitStrategy, 0, 0},  {&_swigt__p_FitStrategyAdjustMinimizer, _p_FitStrategyAdjustMinimizerTo_p_IFitStrategy, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_IFitStrategy[] = {  {&_swigt__p_IFitStrategy, 0, 0, 0},  {&_swigt__p_AdjustMinimizerStrategy, _p_AdjustMinimizerStrategyTo_p_IFitStrategy, 0, 0},  {&_swigt__p_FitStrategyDefault, _p_FitStrategyDefaultTo_p_IFitStrategy, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormFactor[] = {  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPolygonalPrism, _p_FormFactorPolygonalPrismTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactor, 0, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorRipple1, _p_FormFactorRipple1To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPolygonalSurface, _p_FormFactorPolygonalSurfaceTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorRipple2, _p_FormFactorRipple2To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLongRipple1Gauss, _p_FormFactorLongRipple1GaussTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPolyhedron, _p_FormFactorPolyhedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_IFormFactor, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorTrivial, _p_FormFactorTrivialTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorDecoratorDebyeWaller, _p_FormFactorDecoratorDebyeWallerTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLongRipple1Lorentz, _p_FormFactorLongRipple1LorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLongRipple2Lorentz, _p_FormFactorLongRipple2LorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLorentz, _p_FormFactorLorentzTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorSphereUniformRadius, _p_FormFactorSphereUniformRadiusTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorLongRipple2Gauss, _p_FormFactorLongRipple2GaussTo_p_IFormFactor, 0, 0},  {&_swigt__p_FormFactorGauss, _p_FormFactorGaussTo_p_IFormFactor, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormFactorBorn[] = {  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorPolygonalPrism, _p_FormFactorPolygonalPrismTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorRipple1, _p_FormFactorRipple1To_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorPolygonalSurface, _p_FormFactorPolygonalSurfaceTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorRipple2, _p_FormFactorRipple2To_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorLongRipple1Gauss, _p_FormFactorLongRipple1GaussTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorPolyhedron, _p_FormFactorPolyhedronTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_IFormFactorBorn, 0, 0, 0},  {&_swigt__p_FormFactorTrivial, _p_FormFactorTrivialTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorLorentz, _p_FormFactorLorentzTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorLongRipple2Lorentz, _p_FormFactorLongRipple2LorentzTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorLongRipple1Lorentz, _p_FormFactorLongRipple1LorentzTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorSphereUniformRadius, _p_FormFactorSphereUniformRadiusTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorLongRipple2Gauss, _p_FormFactorLongRipple2GaussTo_p_IFormFactorBorn, 0, 0},  {&_swigt__p_FormFactorGauss, _p_FormFactorGaussTo_p_IFormFactorBorn, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IFormFactorDecorator[] = {  {&_swigt__p_IFormFactorDecorator, 0, 0, 0},  {&_swigt__p_FormFactorDecoratorDebyeWaller, _p_FormFactorDecoratorDebyeWallerTo_p_IFormFactorDecorator, 0, 0},{0, 0, 0, 0}};
@@ -115878,7 +115762,7 @@ static swig_cast_info _swigc__p_ILayout[] = {  {&_swigt__p_ILayout, 0, 0, 0},  {
 static swig_cast_info _swigc__p_IMaterial[] = {  {&_swigt__p_IMaterial, 0, 0, 0},  {&_swigt__p_HomogeneousMaterial, _p_HomogeneousMaterialTo_p_IMaterial, 0, 0},  {&_swigt__p_HomogeneousMagneticMaterial, _p_HomogeneousMagneticMaterialTo_p_IMaterial, 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_IMultiLayerBuilder[] = {  {&_swigt__p_IMultiLayerBuilder, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_INamed[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INamed, 0, 0},  {&_swigt__p_FitStrategyAdjustMinimizer, _p_FitStrategyAdjustMinimizerTo_p_INamed, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INamed, 0, 0},  {&_swigt__p_ParameterDistribution, _p_ParameterDistributionTo_p_INamed, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__Polygon, _p_Geometry__PolygonTo_p_INamed, 0, 0},  {&_swigt__p_IDetector2D, _p_IDetector2DTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__Ellipse, _p_Geometry__EllipseTo_p_INamed, 0, 0},  {&_swigt__p_ILayout, _p_ILayoutTo_p_INamed, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INamed, 0, 0},  {&_swigt__p_IntensityScaleAndShiftNormalizer, _p_IntensityScaleAndShiftNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_IntensityNormalizer, _p_IntensityNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_IIntensityNormalizer, _p_IIntensityNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__HorizontalLine, _p_Geometry__HorizontalLineTo_p_INamed, 0, 0},  {&_swigt__p_SphericalDetector, _p_SphericalDetectorTo_p_INamed, 0, 0},  {&_swigt__p_IsGISAXSDetector, _p_IsGISAXSDetectorTo_p_INamed, 0, 0},  {&_swigt__p_RectangularDetector, _p_RectangularDetectorTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INamed, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolyhedron, _p_FormFactorPolyhedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INamed, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_INamed, 0, 0},  {&_swigt__p_Simulation, _p_SimulationTo_p_INamed, 0, 0},  {&_swigt__p_OffSpecSimulation, _p_OffSpecSimulationTo_p_INamed, 0, 0},  {&_swigt__p_SpecularSimulation, _p_SpecularSimulationTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_INamed, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INamed, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolygonalSurface, _p_FormFactorPolygonalSurfaceTo_p_INamed, 0, 0},  {&_swigt__p_ICompositeSample, _p_ICompositeSampleTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolygonalPrism, _p_FormFactorPolygonalPrismTo_p_INamed, 0, 0},  {&_swigt__p_FitSuiteObjects, _p_FitSuiteObjectsTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_INamed, 0, 0},  {&_swigt__p_DistributionLogNormal, _p_DistributionLogNormalTo_p_INamed, 0, 0},  {&_swigt__p_Instrument, _p_InstrumentTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INamed, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INamed, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__IShape2D, _p_Geometry__IShape2DTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_INamed, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__Rectangle, _p_Geometry__RectangleTo_p_INamed, 0, 0},  {&_swigt__p_FitStrategyDefault, _p_FitStrategyDefaultTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorGauss, _p_FormFactorGaussTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple2Gauss, _p_FormFactorLongRipple2GaussTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__VerticalLine, _p_Geometry__VerticalLineTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_INamed, 0, 0},  {&_swigt__p_IDetectorResolution, _p_IDetectorResolutionTo_p_INamed, 0, 0},  {&_swigt__p_IClusteredParticles, _p_IClusteredParticlesTo_p_INamed, 0, 0},  {&_swigt__p_IMultiLayerBuilder, _p_IMultiLayerBuilderTo_p_INamed, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INamed, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INamed, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTrivial, _p_FormFactorTrivialTo_p_INamed, 0, 0},  {&_swigt__p_INamed, 0, 0, 0},  {&_swigt__p_DistributionGate, _p_DistributionGateTo_p_INamed, 0, 0},  {&_swigt__p_IDistribution1D, _p_IDistribution1DTo_p_INamed, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_INamed, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorRipple1, _p_FormFactorRipple1To_p_INamed, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INamed, 0, 0},  {&_swigt__p_IMaterial, _p_IMaterialTo_p_INamed, 0, 0},  {&_swigt__p_HomogeneousMaterial, _p_HomogeneousMaterialTo_p_INamed, 0, 0},  {&_swigt__p_HomogeneousMagneticMaterial, _p_HomogeneousMagneticMaterialTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorDecoratorDebyeWaller, _p_FormFactorDecoratorDebyeWallerTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorRipple2, _p_FormFactorRipple2To_p_INamed, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INamed, 0, 0},  {&_swigt__p_IParameterT_double_t, _p_IParameterT_double_tTo_p_INamed, 0, 0},  {&_swigt__p_DistributionGaussian, _p_DistributionGaussianTo_p_INamed, 0, 0},  {&_swigt__p_ResolutionFunction2DGaussian, _p_ResolutionFunction2DGaussianTo_p_INamed, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereUniformRadius, _p_FormFactorSphereUniformRadiusTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__Line, _p_Geometry__LineTo_p_INamed, 0, 0},  {&_swigt__p_DistributionCosine, _p_DistributionCosineTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_INamed, 0, 0},  {&_swigt__p_FitObject, _p_FitObjectTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple1Gauss, _p_FormFactorLongRipple1GaussTo_p_INamed, 0, 0},  {&_swigt__p_Beam, _p_BeamTo_p_INamed, 0, 0},  {&_swigt__p_IFitStrategy, _p_IFitStrategyTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_INamed, 0, 0},  {&_swigt__p_IParameterized, _p_IParameterizedTo_p_INamed, 0, 0},  {&_swigt__p_IRoughness, _p_IRoughnessTo_p_INamed, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INamed, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_INamed, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INamed, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_INamed, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_INamed, 0, 0},  {&_swigt__p_IResolutionFunction2D, _p_IResolutionFunction2DTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_INamed, 0, 0},  {&_swigt__p_RealParameter, _p_RealParameterTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLorentz, _p_FormFactorLorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple2Lorentz, _p_FormFactorLongRipple2LorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple1Lorentz, _p_FormFactorLongRipple1LorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_INamed, 0, 0},  {&_swigt__p_DistributionLorentz, _p_DistributionLorentzTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_INamed, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INamed, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_INamed[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INamed, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INamed, 0, 0},  {&_swigt__p_ParameterDistribution, _p_ParameterDistributionTo_p_INamed, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DGauss, _p_FTDistribution1DGaussTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DGauss, _p_FTDecayFunction1DGaussTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__Polygon, _p_Geometry__PolygonTo_p_INamed, 0, 0},  {&_swigt__p_IDetector2D, _p_IDetector2DTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__Ellipse, _p_Geometry__EllipseTo_p_INamed, 0, 0},  {&_swigt__p_ILayout, _p_ILayoutTo_p_INamed, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INamed, 0, 0},  {&_swigt__p_IntensityScaleAndShiftNormalizer, _p_IntensityScaleAndShiftNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_IntensityNormalizer, _p_IntensityNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_IIntensityNormalizer, _p_IIntensityNormalizerTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__HorizontalLine, _p_Geometry__HorizontalLineTo_p_INamed, 0, 0},  {&_swigt__p_IsGISAXSDetector, _p_IsGISAXSDetectorTo_p_INamed, 0, 0},  {&_swigt__p_SphericalDetector, _p_SphericalDetectorTo_p_INamed, 0, 0},  {&_swigt__p_RectangularDetector, _p_RectangularDetectorTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INamed, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolyhedron, _p_FormFactorPolyhedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INamed, 0, 0},  {&_swigt__p_OffSpecSimulation, _p_OffSpecSimulationTo_p_INamed, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_INamed, 0, 0},  {&_swigt__p_Simulation, _p_SimulationTo_p_INamed, 0, 0},  {&_swigt__p_SpecularSimulation, _p_SpecularSimulationTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DCone, _p_FTDistribution2DConeTo_p_INamed, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INamed, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolygonalSurface, _p_FormFactorPolygonalSurfaceTo_p_INamed, 0, 0},  {&_swigt__p_ICompositeSample, _p_ICompositeSampleTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPolygonalPrism, _p_FormFactorPolygonalPrismTo_p_INamed, 0, 0},  {&_swigt__p_FitSuiteObjects, _p_FitSuiteObjectsTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DGate, _p_FTDistribution2DGateTo_p_INamed, 0, 0},  {&_swigt__p_DistributionLogNormal, _p_DistributionLogNormalTo_p_INamed, 0, 0},  {&_swigt__p_Instrument, _p_InstrumentTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DVoigt, _p_FTDecayFunction1DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DVoigt, _p_FTDistribution1DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INamed, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INamed, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__IShape2D, _p_Geometry__IShape2DTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DGauss, _p_FTDecayFunction2DGaussTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DGauss, _p_FTDistribution2DGaussTo_p_INamed, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__Rectangle, _p_Geometry__RectangleTo_p_INamed, 0, 0},  {&_swigt__p_FitStrategyDefault, _p_FitStrategyDefaultTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorGauss, _p_FormFactorGaussTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple2Gauss, _p_FormFactorLongRipple2GaussTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__VerticalLine, _p_Geometry__VerticalLineTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_INamed, 0, 0},  {&_swigt__p_IDetectorResolution, _p_IDetectorResolutionTo_p_INamed, 0, 0},  {&_swigt__p_IClusteredParticles, _p_IClusteredParticlesTo_p_INamed, 0, 0},  {&_swigt__p_IMultiLayerBuilder, _p_IMultiLayerBuilderTo_p_INamed, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INamed, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INamed, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorTrivial, _p_FormFactorTrivialTo_p_INamed, 0, 0},  {&_swigt__p_INamed, 0, 0, 0},  {&_swigt__p_DistributionGate, _p_DistributionGateTo_p_INamed, 0, 0},  {&_swigt__p_IDistribution1D, _p_IDistribution1DTo_p_INamed, 0, 0},  {&_swigt__p_IFTDecayFunction1D, _p_IFTDecayFunction1DTo_p_INamed, 0, 0},  {&_swigt__p_IFTDistribution1D, _p_IFTDistribution1DTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorRipple1, _p_FormFactorRipple1To_p_INamed, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INamed, 0, 0},  {&_swigt__p_IMaterial, _p_IMaterialTo_p_INamed, 0, 0},  {&_swigt__p_HomogeneousMaterial, _p_HomogeneousMaterialTo_p_INamed, 0, 0},  {&_swigt__p_HomogeneousMagneticMaterial, _p_HomogeneousMagneticMaterialTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorDecoratorDebyeWaller, _p_FormFactorDecoratorDebyeWallerTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorRipple2, _p_FormFactorRipple2To_p_INamed, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INamed, 0, 0},  {&_swigt__p_IParameterT_double_t, _p_IParameterT_double_tTo_p_INamed, 0, 0},  {&_swigt__p_DistributionGaussian, _p_DistributionGaussianTo_p_INamed, 0, 0},  {&_swigt__p_ResolutionFunction2DGaussian, _p_ResolutionFunction2DGaussianTo_p_INamed, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorSphereUniformRadius, _p_FormFactorSphereUniformRadiusTo_p_INamed, 0, 0},  {&_swigt__p_Geometry__Line, _p_Geometry__LineTo_p_INamed, 0, 0},  {&_swigt__p_DistributionCosine, _p_DistributionCosineTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DCosine, _p_FTDistribution1DCosineTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DGate, _p_FTDistribution1DGateTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DVoigt, _p_FTDistribution2DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DVoigt, _p_FTDecayFunction2DVoigtTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DCauchy, _p_FTDecayFunction1DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DCauchy, _p_FTDistribution1DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution2DCauchy, _p_FTDistribution2DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction2DCauchy, _p_FTDecayFunction2DCauchyTo_p_INamed, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_INamed, 0, 0},  {&_swigt__p_FitObject, _p_FitObjectTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple1Gauss, _p_FormFactorLongRipple1GaussTo_p_INamed, 0, 0},  {&_swigt__p_Beam, _p_BeamTo_p_INamed, 0, 0},  {&_swigt__p_AdjustMinimizerStrategy, _p_AdjustMinimizerStrategyTo_p_INamed, 0, 0},  {&_swigt__p_IFitStrategy, _p_IFitStrategyTo_p_INamed, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_INamed, 0, 0},  {&_swigt__p_IParameterized, _p_IParameterizedTo_p_INamed, 0, 0},  {&_swigt__p_IRoughness, _p_IRoughnessTo_p_INamed, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INamed, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_INamed, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INamed, 0, 0},  {&_swigt__p_IFTDecayFunction2D, _p_IFTDecayFunction2DTo_p_INamed, 0, 0},  {&_swigt__p_IFTDistribution2D, _p_IFTDistribution2DTo_p_INamed, 0, 0},  {&_swigt__p_IResolutionFunction2D, _p_IResolutionFunction2DTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_INamed, 0, 0},  {&_swigt__p_RealParameter, _p_RealParameterTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLorentz, _p_FormFactorLorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple2Lorentz, _p_FormFactorLongRipple2LorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongRipple1Lorentz, _p_FormFactorLongRipple1LorentzTo_p_INamed, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_INamed, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_INamed, 0, 0},  {&_swigt__p_DistributionLorentz, _p_DistributionLorentzTo_p_INamed, 0, 0},  {&_swigt__p_FTDecayFunction1DTriangle, _p_FTDecayFunction1DTriangleTo_p_INamed, 0, 0},  {&_swigt__p_FTDistribution1DTriangle, _p_FTDistribution1DTriangleTo_p_INamed, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INamed, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_INoncopyable[] = {  {&_swigt__p_FormFactorBox, _p_FormFactorBoxTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorSphereLogNormalRadius, _p_FormFactorSphereLogNormalRadiusTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorSphereGaussianRadius, _p_FormFactorSphereGaussianRadiusTo_p_INoncopyable, 0, 0},  {&_swigt__p_MultiLayer, _p_MultiLayerTo_p_INoncopyable, 0, 0},  {&_swigt__p_ParticleDistribution, _p_ParticleDistributionTo_p_INoncopyable, 0, 0},  {&_swigt__p_InterferenceFunctionNone, _p_InterferenceFunctionNoneTo_p_INoncopyable, 0, 0},  {&_swigt__p_Geometry__Polygon, _p_Geometry__PolygonTo_p_INoncopyable, 0, 0},  {&_swigt__p_Geometry__Ellipse, _p_Geometry__EllipseTo_p_INoncopyable, 0, 0},  {&_swigt__p_ILayout, _p_ILayoutTo_p_INoncopyable, 0, 0},  {&_swigt__p_ParticleLayout, _p_ParticleLayoutTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorHemiEllipsoid, _p_FormFactorHemiEllipsoidTo_p_INoncopyable, 0, 0},  {&_swigt__p_IChiSquaredModule, _p_IChiSquaredModuleTo_p_INoncopyable, 0, 0},  {&_swigt__p_ChiSquaredModule, _p_ChiSquaredModuleTo_p_INoncopyable, 0, 0},  {&_swigt__p_Geometry__HorizontalLine, _p_Geometry__HorizontalLineTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPrism3, _p_FormFactorPrism3To_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorTetrahedron, _p_FormFactorTetrahedronTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPolyhedron, _p_FormFactorPolyhedronTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorCuboctahedron, _p_FormFactorCuboctahedronTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorDodecahedron, _p_FormFactorDodecahedronTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorIcosahedron, _p_FormFactorIcosahedronTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPrism6, _p_FormFactorPrism6To_p_INoncopyable, 0, 0},  {&_swigt__p_GISASSimulation, _p_GISASSimulationTo_p_INoncopyable, 0, 0},  {&_swigt__p_Simulation, _p_SimulationTo_p_INoncopyable, 0, 0},  {&_swigt__p_OffSpecSimulation, _p_OffSpecSimulationTo_p_INoncopyable, 0, 0},  {&_swigt__p_SpecularSimulation, _p_SpecularSimulationTo_p_INoncopyable, 0, 0},  {&_swigt__p_ParticleCoreShell, _p_ParticleCoreShellTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorTruncatedSphere, _p_FormFactorTruncatedSphereTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorFullSphere, _p_FormFactorFullSphereTo_p_INoncopyable, 0, 0},  {&_swigt__p_IFormFactor, _p_IFormFactorTo_p_INoncopyable, 0, 0},  {&_swigt__p_ISample, _p_ISampleTo_p_INoncopyable, 0, 0},  {&_swigt__p_ICompositeSample, _p_ICompositeSampleTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPolygonalSurface, _p_FormFactorPolygonalSurfaceTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongBoxGauss, _p_FormFactorLongBoxGaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPolygonalPrism, _p_FormFactorPolygonalPrismTo_p_INoncopyable, 0, 0},  {&_swigt__p_FitSuiteObjects, _p_FitSuiteObjectsTo_p_INoncopyable, 0, 0},  {&_swigt__p_IRotation, _p_IRotationTo_p_INoncopyable, 0, 0},  {&_swigt__p_RotationX, _p_RotationXTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorTruncatedSpheroid, _p_FormFactorTruncatedSpheroidTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorFullSpheroid, _p_FormFactorFullSpheroidTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorTruncatedCube, _p_FormFactorTruncatedCubeTo_p_INoncopyable, 0, 0},  {&_swigt__p_RotationY, _p_RotationYTo_p_INoncopyable, 0, 0},  {&_swigt__p_Geometry__IShape2D, _p_Geometry__IShape2DTo_p_INoncopyable, 0, 0},  {&_swigt__p_RotationZ, _p_RotationZTo_p_INoncopyable, 0, 0},  {&_swigt__p_Geometry__Rectangle, _p_Geometry__RectangleTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorGauss, _p_FormFactorGaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongRipple2Gauss, _p_FormFactorLongRipple2GaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_Geometry__VerticalLine, _p_Geometry__VerticalLineTo_p_INoncopyable, 0, 0},  {&_swigt__p_IFormFactorBorn, _p_IFormFactorBornTo_p_INoncopyable, 0, 0},  {&_swigt__p_IDetectorResolution, _p_IDetectorResolutionTo_p_INoncopyable, 0, 0},  {&_swigt__p_IClusteredParticles, _p_IClusteredParticlesTo_p_INoncopyable, 0, 0},  {&_swigt__p_IAbstractParticle, _p_IAbstractParticleTo_p_INoncopyable, 0, 0},  {&_swigt__p_IParticle, _p_IParticleTo_p_INoncopyable, 0, 0},  {&_swigt__p_Particle, _p_ParticleTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorTrivial, _p_FormFactorTrivialTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorCone, _p_FormFactorConeTo_p_INoncopyable, 0, 0},  {&_swigt__p_INoncopyable, 0, 0, 0},  {&_swigt__p_FormFactorRipple1, _p_FormFactorRipple1To_p_INoncopyable, 0, 0},  {&_swigt__p_Layer, _p_LayerTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorAnisoPyramid, _p_FormFactorAnisoPyramidTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorPyramid, _p_FormFactorPyramidTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorDecoratorDebyeWaller, _p_FormFactorDecoratorDebyeWallerTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorRipple2, _p_FormFactorRipple2To_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorEllipsoidalCylinder, _p_FormFactorEllipsoidalCylinderTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorCylinder, _p_FormFactorCylinderTo_p_INoncopyable, 0, 0},  {&_swigt__p_IParameterT_double_t, _p_IParameterT_double_tTo_p_INoncopyable, 0, 0},  {&_swigt__p_ParticleComposition, _p_ParticleCompositionTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorSphereUniformRadius, _p_FormFactorSphereUniformRadiusTo_p_INoncopyable, 0, 0},  {&_swigt__p_Geometry__Line, _p_Geometry__LineTo_p_INoncopyable, 0, 0},  {&_swigt__p_IInterferenceFunction, _p_IInterferenceFunctionTo_p_INoncopyable, 0, 0},  {&_swigt__p_FitObject, _p_FitObjectTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorCone6, _p_FormFactorCone6To_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongRipple1Gauss, _p_FormFactorLongRipple1GaussTo_p_INoncopyable, 0, 0},  {&_swigt__p_IFormFactorDecorator, _p_IFormFactorDecoratorTo_p_INoncopyable, 0, 0},  {&_swigt__p_IRoughness, _p_IRoughnessTo_p_INoncopyable, 0, 0},  {&_swigt__p_LayerRoughness, _p_LayerRoughnessTo_p_INoncopyable, 0, 0},  {&_swigt__p_InterferenceFunctionRadialParaCrystal, _p_InterferenceFunctionRadialParaCrystalTo_p_INoncopyable, 0, 0},  {&_swigt__p_InterferenceFunction2DParaCrystal, _p_InterferenceFunction2DParaCrystalTo_p_INoncopyable, 0, 0},  {&_swigt__p_Crystal, _p_CrystalTo_p_INoncopyable, 0, 0},  {&_swigt__p_MesoCrystal, _p_MesoCrystalTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorCrystal, _p_FormFactorCrystalTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorWeighted, _p_FormFactorWeightedTo_p_INoncopyable, 0, 0},  {&_swigt__p_RealParameter, _p_RealParameterTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLorentz, _p_FormFactorLorentzTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongRipple2Lorentz, _p_FormFactorLongRipple2LorentzTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongRipple1Lorentz, _p_FormFactorLongRipple1LorentzTo_p_INoncopyable, 0, 0},  {&_swigt__p_FormFactorLongBoxLorentz, _p_FormFactorLongBoxLorentzTo_p_INoncopyable, 0, 0},  {&_swigt__p_InterferenceFunction1DLattice, _p_InterferenceFunction1DLatticeTo_p_INoncopyable, 0, 0},  {&_swigt__p_InterferenceFunction2DLattice, _p_InterferenceFunction2DLatticeTo_p_INoncopyable, 0, 0},  {&_swigt__p_RotationEuler, _p_RotationEulerTo_p_INoncopyable, 0, 0},  {&_swigt__p_ICloneable, _p_ICloneableTo_p_INoncopyable, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IObservable[] = {  {&_swigt__p_IObservable, 0, 0, 0},  {&_swigt__p_FitSuite, _p_FitSuiteTo_p_IObservable, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_IObserver[] = {  {&_swigt__p_IObserver, 0, 0, 0},  {&_swigt__p_IFitObserver, _p_IFitObserverTo_p_IObserver, 0, 0},{0, 0, 0, 0}};
@@ -115918,7 +115802,6 @@ static swig_cast_info _swigc__p_Mask[] = {  {&_swigt__p_Mask, 0, 0, 0},{0, 0, 0,
 static swig_cast_info _swigc__p_MesoCrystal[] = {  {&_swigt__p_MesoCrystal, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_MultiLayer[] = {  {&_swigt__p_MultiLayer, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_MultiLayerRTCoefficients_t[] = {  {&_swigt__p_MultiLayerRTCoefficients_t, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_ObsoleteMinimizerOptions[] = {  {&_swigt__p_ObsoleteMinimizerOptions, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_OffSpecSimulation[] = {  {&_swigt__p_OffSpecSimulation, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_OutputDataIteratorT_double_OutputDataT_double_t_t[] = {  {&_swigt__p_OutputDataIteratorT_double_OutputDataT_double_t_t, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t[] = {  {&_swigt__p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t, 0, 0, 0},{0, 0, 0, 0}};
@@ -116033,6 +115916,7 @@ static swig_cast_info _swigc__p_unsigned_short[] = {  {&_swigt__p_unsigned_short
 static swig_cast_info _swigc__p_value_type[] = {  {&_swigt__p_value_type, 0, 0, 0},{0, 0, 0, 0}};
 
 static swig_cast_info *swig_cast_initial[] = {
+  _swigc__p_AdjustMinimizerStrategy,
   _swigc__p_AngularPixelMap,
   _swigc__p_AttLimits,
   _swigc__p_Attributes,
@@ -116081,7 +115965,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_FitParameter,
   _swigc__p_FitParameterLinked,
   _swigc__p_FitParameterSet,
-  _swigc__p_FitStrategyAdjustMinimizer,
   _swigc__p_FitStrategyDefault,
   _swigc__p_FitSuite,
   _swigc__p_FitSuiteImp,
@@ -116214,7 +116097,6 @@ static swig_cast_info *swig_cast_initial[] = {
   _swigc__p_MesoCrystal,
   _swigc__p_MultiLayer,
   _swigc__p_MultiLayerRTCoefficients_t,
-  _swigc__p_ObsoleteMinimizerOptions,
   _swigc__p_OffSpecSimulation,
   _swigc__p_OutputDataIteratorT_double_OutputDataT_double_t_t,
   _swigc__p_OutputDataIteratorT_double_const_OutputDataT_double_t_const_t,
diff --git a/auto/Wrap/libBornAgainFit.py b/auto/Wrap/libBornAgainFit.py
index ae9711abb8c37345e0fa97f9d6c20a3e27454b60..4196daa24eff60918f5e2269f613555a1651c84b 100644
--- a/auto/Wrap/libBornAgainFit.py
+++ b/auto/Wrap/libBornAgainFit.py
@@ -1708,16 +1708,9 @@ class IMinimizer(_object):
         return _libBornAgainFit.IMinimizer_setGradientFunction(self, arg2, arg3)
 
 
-    def getMinValue(self):
-        """
-        getMinValue(IMinimizer self) -> double
-
-        double IMinimizer::getMinValue() const
-
-        Returns minimum function value. 
-
-        """
-        return _libBornAgainFit.IMinimizer_getMinValue(self)
+    def minValue(self):
+        """minValue(IMinimizer self) -> double"""
+        return _libBornAgainFit.IMinimizer_minValue(self)
 
 
     def reportResults(self):
@@ -1743,6 +1736,11 @@ class IMinimizer(_object):
         """
         return _libBornAgainFit.IMinimizer_propagateResults(self, parameters)
 
+
+    def setOptions(self, options):
+        """setOptions(IMinimizer self, std::string const & options)"""
+        return _libBornAgainFit.IMinimizer_setOptions(self, options)
+
 IMinimizer_swigregister = _libBornAgainFit.IMinimizer_swigregister
 IMinimizer_swigregister(IMinimizer)
 
@@ -2289,6 +2287,18 @@ class MinimizerFactory(_object):
     __getattr__ = lambda self, name: _swig_getattr(self, MinimizerFactory, name)
     __repr__ = _swig_repr
 
+    def createMinimizer(*args):
+        """
+        createMinimizer(std::string const & minimizerName, std::string const & algorithmType, std::string const & optionString) -> IMinimizer
+        createMinimizer(std::string const & minimizerName, std::string const & algorithmType) -> IMinimizer
+        createMinimizer(std::string const & minimizerName) -> IMinimizer
+        """
+        return _libBornAgainFit.MinimizerFactory_createMinimizer(*args)
+
+    if _newclass:
+        createMinimizer = staticmethod(createMinimizer)
+    __swig_getmethods__["createMinimizer"] = lambda x: createMinimizer
+
     def printCatalogue():
         """printCatalogue()"""
         return _libBornAgainFit.MinimizerFactory_printCatalogue()
@@ -2305,19 +2315,6 @@ class MinimizerFactory(_object):
         catalogueToString = staticmethod(catalogueToString)
     __swig_getmethods__["catalogueToString"] = lambda x: catalogueToString
 
-    def createMinimizer(*args):
-        """
-        createMinimizer(std::string const & minimizerName, std::string const & algorithmType, std::string const & arg3) -> IMinimizer
-        createMinimizer(std::string const & minimizerName, std::string const & algorithmType) -> IMinimizer
-        createMinimizer(std::string const & minimizerName) -> IMinimizer
-        createMinimizer(IMinimizer other) -> IMinimizer
-        """
-        return _libBornAgainFit.MinimizerFactory_createMinimizer(*args)
-
-    if _newclass:
-        createMinimizer = staticmethod(createMinimizer)
-    __swig_getmethods__["createMinimizer"] = lambda x: createMinimizer
-
     def catalogue():
         """catalogue() -> MinimizerCatalogue"""
         return _libBornAgainFit.MinimizerFactory_catalogue()
@@ -2351,6 +2348,14 @@ class MinimizerFactory(_object):
 MinimizerFactory_swigregister = _libBornAgainFit.MinimizerFactory_swigregister
 MinimizerFactory_swigregister(MinimizerFactory)
 
+def MinimizerFactory_createMinimizer(*args):
+    """
+    createMinimizer(std::string const & minimizerName, std::string const & algorithmType, std::string const & optionString) -> IMinimizer
+    createMinimizer(std::string const & minimizerName, std::string const & algorithmType) -> IMinimizer
+    MinimizerFactory_createMinimizer(std::string const & minimizerName) -> IMinimizer
+    """
+    return _libBornAgainFit.MinimizerFactory_createMinimizer(*args)
+
 def MinimizerFactory_printCatalogue():
     """MinimizerFactory_printCatalogue()"""
     return _libBornAgainFit.MinimizerFactory_printCatalogue()
@@ -2359,15 +2364,6 @@ def MinimizerFactory_catalogueToString():
     """MinimizerFactory_catalogueToString() -> std::string"""
     return _libBornAgainFit.MinimizerFactory_catalogueToString()
 
-def MinimizerFactory_createMinimizer(*args):
-    """
-    createMinimizer(std::string const & minimizerName, std::string const & algorithmType, std::string const & arg3) -> IMinimizer
-    createMinimizer(std::string const & minimizerName, std::string const & algorithmType) -> IMinimizer
-    createMinimizer(std::string const & minimizerName) -> IMinimizer
-    MinimizerFactory_createMinimizer(IMinimizer other) -> IMinimizer
-    """
-    return _libBornAgainFit.MinimizerFactory_createMinimizer(*args)
-
 def MinimizerFactory_catalogue():
     """MinimizerFactory_catalogue() -> MinimizerCatalogue"""
     return _libBornAgainFit.MinimizerFactory_catalogue()
diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp
index b38bbae34319a7e2ce7a2a5e8a9101a4067c40df..3f7e9e2e63523f33feeb6b4f20d36c8f522bc7c1 100644
--- a/auto/Wrap/libBornAgainFit_wrap.cpp
+++ b/auto/Wrap/libBornAgainFit_wrap.cpp
@@ -19234,7 +19234,7 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_IMinimizer_getMinValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_IMinimizer_minValue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   IMinimizer *arg1 = (IMinimizer *) 0 ;
   void *argp1 = 0 ;
@@ -19242,13 +19242,13 @@ SWIGINTERN PyObject *_wrap_IMinimizer_getMinValue(PyObject *SWIGUNUSEDPARM(self)
   PyObject * obj0 = 0 ;
   double result;
   
-  if (!PyArg_ParseTuple(args,(char *)"O:IMinimizer_getMinValue",&obj0)) 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_getMinValue" "', argument " "1"" of type '" "IMinimizer const *""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IMinimizer_minValue" "', argument " "1"" of type '" "IMinimizer const *""'"); 
   }
   arg1 = reinterpret_cast< IMinimizer * >(argp1);
-  result = (double)((IMinimizer const *)arg1)->getMinValue();
+  result = (double)((IMinimizer const *)arg1)->minValue();
   resultobj = SWIG_From_double(static_cast< double >(result));
   return resultobj;
 fail:
@@ -19311,6 +19311,43 @@ fail:
 }
 
 
+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;
@@ -21472,53 +21509,6 @@ fail:
 }
 
 
-SWIGINTERN PyObject *_wrap_MinimizerFactory_printCatalogue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  
-  if (!PyArg_ParseTuple(args,(char *)":MinimizerFactory_printCatalogue")) SWIG_fail;
-  MinimizerFactory::printCatalogue();
-  resultobj = SWIG_Py_Void();
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MinimizerFactory_catalogueToString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  std::string result;
-  
-  if (!PyArg_ParseTuple(args,(char *)":MinimizerFactory_catalogueToString")) SWIG_fail;
-  result = MinimizerFactory::catalogueToString();
-  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
-SWIGINTERN PyObject *_wrap_MinimizerFactory_createMinimizer__SWIG_3(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
-  PyObject *resultobj = 0;
-  IMinimizer *arg1 = (IMinimizer *) 0 ;
-  void *argp1 = 0 ;
-  int res1 = 0 ;
-  PyObject * obj0 = 0 ;
-  IMinimizer *result = 0 ;
-  
-  if (!PyArg_ParseTuple(args,(char *)"O:MinimizerFactory_createMinimizer",&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 '" "MinimizerFactory_createMinimizer" "', argument " "1"" of type '" "IMinimizer const *""'"); 
-  }
-  arg1 = reinterpret_cast< IMinimizer * >(argp1);
-  result = (IMinimizer *)MinimizerFactory::createMinimizer((IMinimizer const *)arg1);
-  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_IMinimizer, 0 |  0 );
-  return resultobj;
-fail:
-  return NULL;
-}
-
-
 SWIGINTERN PyObject *_wrap_MinimizerFactory_createMinimizer(PyObject *self, PyObject *args) {
   Py_ssize_t argc;
   PyObject *argv[4] = {
@@ -21531,15 +21521,6 @@ SWIGINTERN PyObject *_wrap_MinimizerFactory_createMinimizer(PyObject *self, PyOb
   for (ii = 0; (ii < 3) && (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_IMinimizer, 0);
-    _v = SWIG_CheckState(res);
-    if (_v) {
-      return _wrap_MinimizerFactory_createMinimizer__SWIG_3(self, args);
-    }
-  }
   if (argc == 1) {
     int _v;
     int res = SWIG_AsPtr_std_string(argv[0], (std::string**)(0));
@@ -21582,12 +21563,36 @@ fail:
     "  Possible C/C++ prototypes are:\n"
     "    MinimizerFactory::createMinimizer(std::string const &,std::string const &,std::string const &)\n"
     "    MinimizerFactory::createMinimizer(std::string const &,std::string const &)\n"
-    "    MinimizerFactory::createMinimizer(std::string const &)\n"
-    "    MinimizerFactory::createMinimizer(IMinimizer const *)\n");
+    "    MinimizerFactory::createMinimizer(std::string const &)\n");
   return 0;
 }
 
 
+SWIGINTERN PyObject *_wrap_MinimizerFactory_printCatalogue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  
+  if (!PyArg_ParseTuple(args,(char *)":MinimizerFactory_printCatalogue")) SWIG_fail;
+  MinimizerFactory::printCatalogue();
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_MinimizerFactory_catalogueToString(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  std::string result;
+  
+  if (!PyArg_ParseTuple(args,(char *)":MinimizerFactory_catalogueToString")) SWIG_fail;
+  result = MinimizerFactory::catalogueToString();
+  resultobj = SWIG_From_std_string(static_cast< std::string >(result));
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_MinimizerFactory_catalogue(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   MinimizerCatalogue *result = 0 ;
@@ -22123,14 +22128,7 @@ static PyMethodDef SwigMethods[] = {
 		"virtual void IMinimizer::setGradientFunction(gradient_function_t, int)\n"
 		"\n"
 		""},
-	 { (char *)"IMinimizer_getMinValue", _wrap_IMinimizer_getMinValue, METH_VARARGS, (char *)"\n"
-		"IMinimizer_getMinValue(IMinimizer self) -> double\n"
-		"\n"
-		"double IMinimizer::getMinValue() const\n"
-		"\n"
-		"Returns minimum function value. \n"
-		"\n"
-		""},
+	 { (char *)"IMinimizer_minValue", _wrap_IMinimizer_minValue, METH_VARARGS, (char *)"IMinimizer_minValue(IMinimizer self) -> double"},
 	 { (char *)"IMinimizer_reportResults", _wrap_IMinimizer_reportResults, METH_VARARGS, (char *)"\n"
 		"IMinimizer_reportResults(IMinimizer self) -> std::string\n"
 		"\n"
@@ -22147,6 +22145,7 @@ static PyMethodDef SwigMethods[] = {
 		"Propagates results of minimization to fit parameter set. \n"
 		"\n"
 		""},
+	 { (char *)"IMinimizer_setOptions", _wrap_IMinimizer_setOptions, METH_VARARGS, (char *)"IMinimizer_setOptions(IMinimizer self, std::string const & options)"},
 	 { (char *)"IMinimizer_swigregister", IMinimizer_swigregister, METH_VARARGS, NULL},
 	 { (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"},
@@ -22412,14 +22411,13 @@ static PyMethodDef SwigMethods[] = {
 		""},
 	 { (char *)"delete_MinimizerCatalogue", _wrap_delete_MinimizerCatalogue, METH_VARARGS, (char *)"delete_MinimizerCatalogue(MinimizerCatalogue self)"},
 	 { (char *)"MinimizerCatalogue_swigregister", MinimizerCatalogue_swigregister, METH_VARARGS, NULL},
-	 { (char *)"MinimizerFactory_printCatalogue", _wrap_MinimizerFactory_printCatalogue, METH_VARARGS, (char *)"MinimizerFactory_printCatalogue()"},
-	 { (char *)"MinimizerFactory_catalogueToString", _wrap_MinimizerFactory_catalogueToString, METH_VARARGS, (char *)"MinimizerFactory_catalogueToString() -> std::string"},
 	 { (char *)"MinimizerFactory_createMinimizer", _wrap_MinimizerFactory_createMinimizer, METH_VARARGS, (char *)"\n"
-		"createMinimizer(std::string const & minimizerName, std::string const & algorithmType, std::string const & arg3) -> IMinimizer\n"
+		"createMinimizer(std::string const & minimizerName, std::string const & algorithmType, std::string const & optionString) -> IMinimizer\n"
 		"createMinimizer(std::string const & minimizerName, std::string const & algorithmType) -> IMinimizer\n"
-		"createMinimizer(std::string const & minimizerName) -> IMinimizer\n"
-		"MinimizerFactory_createMinimizer(IMinimizer other) -> IMinimizer\n"
+		"MinimizerFactory_createMinimizer(std::string const & minimizerName) -> IMinimizer\n"
 		""},
+	 { (char *)"MinimizerFactory_printCatalogue", _wrap_MinimizerFactory_printCatalogue, METH_VARARGS, (char *)"MinimizerFactory_printCatalogue()"},
+	 { (char *)"MinimizerFactory_catalogueToString", _wrap_MinimizerFactory_catalogueToString, METH_VARARGS, (char *)"MinimizerFactory_catalogueToString() -> std::string"},
 	 { (char *)"MinimizerFactory_catalogue", _wrap_MinimizerFactory_catalogue, METH_VARARGS, (char *)"MinimizerFactory_catalogue() -> MinimizerCatalogue"},
 	 { (char *)"new_MinimizerFactory", _wrap_new_MinimizerFactory, METH_VARARGS, (char *)"\n"
 		"new_MinimizerFactory() -> MinimizerFactory\n"