diff --git a/App/src/TestFittingModule2.cpp b/App/src/TestFittingModule2.cpp
index 93d59eb2865e19322dc8304347b2c70e50b0abb5..f5e80c3de9021ac3ed005565c44240c49466fd17 100644
--- a/App/src/TestFittingModule2.cpp
+++ b/App/src/TestFittingModule2.cpp
@@ -19,7 +19,7 @@
 #include "Exceptions.h"
 #include "FitSuite.h"
 #include "FitSuiteObserverFactory.h"
-#include "IFitSuiteStrategy.h"
+#include "FitStrategyAdjustData.h"
 #include "FormFactors.h"
 #include "Simulation.h"
 #include "IIntensityFunction.h"
@@ -178,10 +178,10 @@ void TestFittingModule2::fit_example_strategies()
                                 AttLimits::fixed());
 
     // Applying fit strategy: resizing real data
-    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(3));
-    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(2));
-    m_fitSuite->addFitStrategy(new FitSuiteStrategyAdjustData(1));
-    m_fitSuite->addFitStrategy(new FitSuiteStrategyDefault());
+    m_fitSuite->addFitStrategy(new FitStrategyAdjustData(3));
+    m_fitSuite->addFitStrategy(new FitStrategyAdjustData(2));
+    m_fitSuite->addFitStrategy(new FitStrategyAdjustData(1));
+    m_fitSuite->addFitStrategy(new FitStrategyDefault());
 
     m_fitSuite->addSimulationAndRealData(*mp_simulation, *mp_real_data);
 
diff --git a/App/src/TestMesoCrystal2.cpp b/App/src/TestMesoCrystal2.cpp
index 2cfe2c10920b544feddfe0308774ea9954ab0552..6c129d6617cd3931bc354e460422aa48dc0a6322 100644
--- a/App/src/TestMesoCrystal2.cpp
+++ b/App/src/TestMesoCrystal2.cpp
@@ -17,6 +17,7 @@
 #include "AttLimits.h"
 #include "Crystal.h"
 #include "DrawHelper.h"
+#include "FitStrategyAdjustParameters.h"
 #include "FitSuite.h"
 #include "FitSuiteObserverFactory.h"
 #include "FormFactorDecoratorDebyeWaller.h"
@@ -278,21 +279,21 @@ void TestMesoCrystal2::fitsuite_config4()
     for( size_t i_plan=0; i_plan<fixplan.size(); ++i_plan) {
         std::ostringstream ostr;
         ostr << "strategy" <<i_plan;
-        FitSuiteStrategyAdjustParameters *strategy = new FitSuiteStrategyAdjustParameters(ostr.str());
+        FitStrategyAdjustParameters *strategy = new FitStrategyAdjustParameters(ostr.str());
         strategy->fix_all();
         for(size_t i_par=0; i_par<fixplan[i_plan].size(); ++i_par) {
             strategy->release(fixplan[i_plan][i_par]);
         }
         m_fitSuite->addFitStrategy(strategy);
     }
-    FitSuiteStrategyAdjustParameters *strategy_all = new FitSuiteStrategyAdjustParameters("strategy_all");
+    FitStrategyAdjustParameters *strategy_all = new FitStrategyAdjustParameters("strategy_all");
     strategy_all->release_all();
     m_fitSuite->addFitStrategy(strategy_all);
 
     // fitpreserve=1 - preserve original values
     // fitpreserve=0 - return always to previous fit values
     for(FitSuiteStrategies::iterator it = m_fitSuite->getFitStrategies()->begin(); it!= m_fitSuite->getFitStrategies()->end(); ++it) {
-        FitSuiteStrategyAdjustParameters *strategy = dynamic_cast<FitSuiteStrategyAdjustParameters *>( (*it) );
+        FitStrategyAdjustParameters *strategy = dynamic_cast<FitStrategyAdjustParameters *>( (*it) );
         assert(strategy);
         strategy->setPreserveOriginalValues( (*mp_options)["fitpreserve"].as<int>() );
     }
@@ -349,21 +350,21 @@ void TestMesoCrystal2::fitsuite_config3()
     for( size_t i_plan=0; i_plan<fixplan.size(); ++i_plan) {
         std::ostringstream ostr;
         ostr << "strategy" <<i_plan;
-        FitSuiteStrategyAdjustParameters *strategy = new FitSuiteStrategyAdjustParameters(ostr.str());
+        FitStrategyAdjustParameters *strategy = new FitStrategyAdjustParameters(ostr.str());
         strategy->fix_all();
         for(size_t i_par=0; i_par<fixplan[i_plan].size(); ++i_par) {
             strategy->release(fixplan[i_plan][i_par]);
         }
         m_fitSuite->addFitStrategy(strategy);
     }
-    FitSuiteStrategyAdjustParameters *strategy_all = new FitSuiteStrategyAdjustParameters("strategy_all");
+    FitStrategyAdjustParameters *strategy_all = new FitStrategyAdjustParameters("strategy_all");
     strategy_all->release_all();
     m_fitSuite->addFitStrategy(strategy_all);
 
     // fitpreserve=1 - preserve original values
     // fitpreserve=0 - return always to previous fit values
     for(FitSuiteStrategies::iterator it = m_fitSuite->getFitStrategies()->begin(); it!= m_fitSuite->getFitStrategies()->end(); ++it) {
-        FitSuiteStrategyAdjustParameters *strategy = dynamic_cast<FitSuiteStrategyAdjustParameters *>( (*it) );
+        FitStrategyAdjustParameters *strategy = dynamic_cast<FitStrategyAdjustParameters *>( (*it) );
         assert(strategy);
         strategy->setPreserveOriginalValues( (*mp_options)["fitpreserve"].as<int>() );
     }
@@ -421,7 +422,7 @@ void TestMesoCrystal2::fitsuite_config2()
     for( size_t i_plan=0; i_plan<fixplan.size(); ++i_plan) {
         std::ostringstream ostr;
         ostr << "strategy" <<i_plan;
-        FitSuiteStrategyAdjustParameters *strategy = new FitSuiteStrategyAdjustParameters(ostr.str());
+        FitStrategyAdjustParameters *strategy = new FitStrategyAdjustParameters(ostr.str());
         strategy->fix_all();
         strategy->setPreserveOriginalValues(true); // initial values of parameters will be restored after each fit
         for(size_t i_par=0; i_par<fixplan[i_plan].size(); ++i_par) {
@@ -429,14 +430,14 @@ void TestMesoCrystal2::fitsuite_config2()
         }
         m_fitSuite->addFitStrategy(strategy);
     }
-    FitSuiteStrategyAdjustParameters *strategy_all = new FitSuiteStrategyAdjustParameters("strategy_all");
+    FitStrategyAdjustParameters *strategy_all = new FitStrategyAdjustParameters("strategy_all");
     strategy_all->release_all();
     m_fitSuite->addFitStrategy(strategy_all);
 
     // fitpreserve=1 - preserve original values
     // fitpreserve=0 - return always to previous fit values
     for(FitSuiteStrategies::iterator it = m_fitSuite->getFitStrategies()->begin(); it!= m_fitSuite->getFitStrategies()->end(); ++it) {
-        FitSuiteStrategyAdjustParameters *strategy = dynamic_cast<FitSuiteStrategyAdjustParameters *>( (*it) );
+        FitStrategyAdjustParameters *strategy = dynamic_cast<FitStrategyAdjustParameters *>( (*it) );
         assert(strategy);
         strategy->setPreserveOriginalValues( (*mp_options)["fitpreserve"].as<int>() );
     }
@@ -483,7 +484,7 @@ void TestMesoCrystal2::fitsuite_config1()
     for( size_t i_plan=0; i_plan<fixplan.size(); ++i_plan) {
         std::ostringstream ostr;
         ostr << "strategy" <<i_plan;
-        FitSuiteStrategyAdjustParameters *strategy = new FitSuiteStrategyAdjustParameters(ostr.str());
+        FitStrategyAdjustParameters *strategy = new FitStrategyAdjustParameters(ostr.str());
         strategy->fix_all();
         strategy->setPreserveOriginalValues(true); // initial values of parameters will be restored after each fit
         for(size_t i_par=0; i_par<fixplan[i_plan].size(); ++i_par) {
@@ -491,14 +492,14 @@ void TestMesoCrystal2::fitsuite_config1()
         }
         m_fitSuite->addFitStrategy(strategy);
     }
-    FitSuiteStrategyAdjustParameters *strategy_all = new FitSuiteStrategyAdjustParameters("strategy_all");
+    FitStrategyAdjustParameters *strategy_all = new FitStrategyAdjustParameters("strategy_all");
     strategy_all->release_all();
     m_fitSuite->addFitStrategy(strategy_all);
 
     // fitpreserve=1 - preserve original values
     // fitpreserve=0 - return always to previous fit values
     for(FitSuiteStrategies::iterator it = m_fitSuite->getFitStrategies()->begin(); it!= m_fitSuite->getFitStrategies()->end(); ++it) {
-        FitSuiteStrategyAdjustParameters *strategy = dynamic_cast<FitSuiteStrategyAdjustParameters *>( (*it) );
+        FitStrategyAdjustParameters *strategy = dynamic_cast<FitStrategyAdjustParameters *>( (*it) );
         assert(strategy);
         strategy->setPreserveOriginalValues( (*mp_options)["fitpreserve"].as<int>() );
     }
diff --git a/Fit/FitKernel/inc/FitStrategyAdjustData.h b/Fit/FitKernel/inc/FitStrategyAdjustData.h
new file mode 100644
index 0000000000000000000000000000000000000000..c8546ec33d7f2ee9c5c47f8a7d9ad9844763a85c
--- /dev/null
+++ b/Fit/FitKernel/inc/FitStrategyAdjustData.h
@@ -0,0 +1,57 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      FitKernel/inc/FitStrategyAdjustData.h
+//! @brief     Defines class FitStrategyAdjustData
+//!
+//! @homepage  http://apps.jcns.fz-juelich.de/BornAgain
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2013
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#ifndef FITSTRATEGYADJUSTDATA_H
+#define FITSTRATEGYADJUSTDATA_H
+
+#include "IFitStrategy.h"
+
+//! @class FitStrategyAdjustData
+//! @ingroup fitting
+//! @brief Strategy modifies data before running minimization round
+
+class BA_CORE_API_ FitStrategyAdjustData : public IFitStrategy
+{
+public:
+    FitStrategyAdjustData(int power_of_two = 1,
+            bool preserve_original=true, bool call_minimize=true)
+        : IFitStrategy("FitStrategyAdjustData")
+        , m_power_of_two(power_of_two)
+        , m_preserve_original_data(preserve_original)
+        , m_call_minimize(call_minimize) { }
+
+    virtual FitStrategyAdjustData *clone() const { return new FitStrategyAdjustData(*this); }
+
+    void setPreserveOriginalData(bool preserve_original) {
+        m_preserve_original_data = preserve_original;
+    }
+    void setCallMinimize(bool call_minimize) {
+        m_call_minimize = call_minimize;
+    }
+    virtual void execute();
+protected:
+    FitStrategyAdjustData(const FitStrategyAdjustData &other);
+
+    size_t m_power_of_two;
+    //! if it is true, strategy will restore original data in FitSuite
+    //! before exiting
+    bool m_preserve_original_data;
+    //! if it's true, modify data and then call FitSuite's minimizer,
+    //! if false - simply modify the data
+    bool m_call_minimize;
+};
+
+#endif // FITSTRATEGYADJUSTDATA_H
+
diff --git a/Fit/FitKernel/inc/FitStrategyAdjustMinimizer.h b/Fit/FitKernel/inc/FitStrategyAdjustMinimizer.h
new file mode 100644
index 0000000000000000000000000000000000000000..aa3645f1dca5d5de4e28c0e03204fc5775bde222
--- /dev/null
+++ b/Fit/FitKernel/inc/FitStrategyAdjustMinimizer.h
@@ -0,0 +1,31 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      FitKernel/inc/FitStrategyAdjustMinimizer.h
+//! @brief     Defines class FitStrategyAdjustMinimizer
+//!
+//! @homepage  http://apps.jcns.fz-juelich.de/BornAgain
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2013
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#ifndef FITSTRATEGYADJUSTMINIMIZER_H
+#define FITSTRATEGYADJUSTMINIMIZER_H
+
+#include "IFitStrategy.h"
+
+//! @class FitStrategyAdjustMinimizer
+//! @ingroup fitting
+//! @brief Strategy modifies mimimizer settings before running minimization round
+
+class BA_CORE_API_ FitStrategyAdjustMinimizer : public IFitStrategy
+{
+public:
+};
+
+#endif // FITSTRATEGYADJUSTMINIMIZER_H
+
diff --git a/Fit/FitKernel/inc/FitStrategyAdjustParameters.h b/Fit/FitKernel/inc/FitStrategyAdjustParameters.h
new file mode 100644
index 0000000000000000000000000000000000000000..0fdf4e58d50a9ff704c367a8c9d51a553a059a20
--- /dev/null
+++ b/Fit/FitKernel/inc/FitStrategyAdjustParameters.h
@@ -0,0 +1,74 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      FitKernel/inc/FitStrategyAdjustParameters.h
+//! @brief     Defines classes FitStrategyAdjustParameters and related
+//!
+//! @homepage  http://apps.jcns.fz-juelich.de/BornAgain
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2013
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#ifndef FITSTRATEGYADJUSTPARAMETERS_H
+#define FITSTRATEGYADJUSTPARAMETERS_H
+
+#include "IFitStrategy.h"
+
+//! @class FitStrategyAdjustParameters
+//! @ingroup fitting_internal
+//! @brief Strategy which fixes/releases fit parameters and call minimizer
+
+class BA_CORE_API_ FitStrategyAdjustParameters : public IFitStrategy
+{
+public:
+    FitStrategyAdjustParameters(const std::string& name)
+        : IFitStrategy(name)
+        , m_fix_all(false)
+        , m_release_all(false)
+        , m_preserve_original_values(false) { }
+    FitStrategyAdjustParameters()
+        : IFitStrategy("FitSuiteStrategyAdjustParameters")
+        , m_fix_all(false)
+        , m_release_all(false)
+        , m_preserve_original_values(false)  { }    
+    virtual ~FitStrategyAdjustParameters(){}
+
+    virtual FitStrategyAdjustParameters *clone() const { return new FitStrategyAdjustParameters(*this); }
+
+    virtual void execute();
+    FitStrategyAdjustParameters& fix_all() {
+        m_fix_all = true; return *this;
+    }
+    FitStrategyAdjustParameters& release_all() {
+        m_release_all = true; return *this;
+    }
+    FitStrategyAdjustParameters& fix(std::string parname ) {
+        m_pars_to_fix.push_back(parname);
+        return *this;
+    }
+    FitStrategyAdjustParameters& release(std::string parname ) {
+        m_pars_to_release.push_back(parname);
+        return *this;
+    }
+    void setPreserveOriginalValues(bool preserve_values) {
+        m_preserve_original_values = preserve_values;
+    }
+
+protected:
+    FitStrategyAdjustParameters(const FitStrategyAdjustParameters &other);
+
+    bool m_fix_all;
+    bool m_release_all;
+    std::vector<std::string > m_pars_to_fix;
+    std::vector<std::string > m_pars_to_release;
+    //! if it's true, strategy will set back values of parameters as they were
+    //! before minimization round
+    bool m_preserve_original_values;
+};
+
+
+#endif  // FITSTRATEGYADJUSTPARAMETERS_H
diff --git a/Fit/FitKernel/inc/FitSuite.h b/Fit/FitKernel/inc/FitSuite.h
index 0a44f14ccf96c6f35e1d9e52c77b9f5fd1ae9406..72ebf07fd3e259f62c247ba83b8d58aa8dff493a 100644
--- a/Fit/FitKernel/inc/FitSuite.h
+++ b/Fit/FitKernel/inc/FitSuite.h
@@ -53,7 +53,8 @@ class BA_CORE_API_ FitSuite : public IObservable
     void addFitParameter(const std::string& name, double value, const AttLimits& attlim=AttLimits::limitless(), double error=0.0);
 
     //! Adds fit strategy
-    void addFitStrategy(IFitSuiteStrategy *strategy);
+    void addFitStrategy(IFitStrategy *strategy);
+    void addFitStrategy(const IFitStrategy &strategy);
 
     //! Sets minimizer
     void setMinimizer(IMinimizer *minimizer) { delete m_minimizer;  m_minimizer = minimizer; }
diff --git a/Fit/FitKernel/inc/FitSuiteStrategies.h b/Fit/FitKernel/inc/FitSuiteStrategies.h
index d03ddb62f14d29b7317b4e51482728a8f9491fc8..01b713289432597ba9caf98869846b21afe24bfa 100644
--- a/Fit/FitKernel/inc/FitSuiteStrategies.h
+++ b/Fit/FitKernel/inc/FitSuiteStrategies.h
@@ -17,7 +17,7 @@
 #define FITSUITESTRATEGIES_H
 
 #include "SafePointerVector.h"
-#include "IFitSuiteStrategy.h"
+#include "IFitStrategy.h"
 
 class FitSuite;
 
@@ -28,7 +28,7 @@ class FitSuite;
 class BA_CORE_API_  FitSuiteStrategies
 {
  public:
-    typedef SafePointerVector<IFitSuiteStrategy > strategies_t;
+    typedef SafePointerVector<IFitStrategy > strategies_t;
     typedef strategies_t::iterator iterator;
 
     FitSuiteStrategies();
@@ -36,7 +36,7 @@ class BA_CORE_API_  FitSuiteStrategies
 
     void init(FitSuite *fit_suite) { m_fit_suite = fit_suite; }
 
-    void addStrategy(IFitSuiteStrategy *strategy);
+    void addStrategy(IFitStrategy *strategy);
 
     void minimize();
 
diff --git a/Fit/FitKernel/inc/IFitStrategy.h b/Fit/FitKernel/inc/IFitStrategy.h
new file mode 100644
index 0000000000000000000000000000000000000000..bf59228e274aa02b2452cbaaaf59a92202dbb36d
--- /dev/null
+++ b/Fit/FitKernel/inc/IFitStrategy.h
@@ -0,0 +1,74 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      FitKernel/inc/IFitStrategy.h
+//! @brief     Defines interface class IFitStrategy
+//!
+//! @homepage  http://apps.jcns.fz-juelich.de/BornAgain
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2013
+//! @authors   Scientific Computing Group at MLZ Garching
+//! @authors   C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke
+//
+// ************************************************************************** //
+
+#ifndef IFITSTRATEGY_H
+#define IFITSTRATEGY_H
+
+#include "INamed.h"
+#include "Types.h"
+#include "OutputData.h"
+class FitSuite;
+
+#include <string>
+#include <vector>
+#include <map>
+
+
+//! @class IFitStrategy
+//! @ingroup fitting_internal
+//! @brief Interface to concrete fit strategy.
+//!
+//!  Concrete implementation should manipulate with fit parameters/data
+//!  and then call minimizer.
+
+class BA_CORE_API_ IFitStrategy : public INamed
+{
+public:
+    IFitStrategy() : m_fit_suite(0) {}
+    IFitStrategy(const std::string& name) : INamed(name), m_fit_suite(0) {}
+    virtual IFitStrategy *clone() const = 0;
+
+    virtual ~IFitStrategy(){}
+    virtual void init(FitSuite *fit_suite) { m_fit_suite = fit_suite; }
+    virtual void execute() = 0;
+protected:
+    FitSuite *m_fit_suite;
+    IFitStrategy(const IFitStrategy &other) : INamed(other)
+    {
+        m_fit_suite = other.m_fit_suite;
+    }
+
+private:
+    IFitStrategy& operator=(const IFitStrategy& );
+
+};
+
+
+//! @class FitStrategyDefault
+//! @ingroup fitting
+//! @brief Default fit strategy just let FitSuite to run it's minimization round
+
+class BA_CORE_API_ FitStrategyDefault : public IFitStrategy
+{
+ public:
+    FitStrategyDefault() : IFitStrategy("FitStrategyDefault") { }
+    virtual IFitStrategy *clone() const { return new FitStrategyDefault(); }
+    virtual void execute();
+};
+
+
+#endif // FITSTRATEGY_H
+
+
diff --git a/Fit/FitKernel/inc/IFitSuiteStrategy.h b/Fit/FitKernel/inc/IFitSuiteStrategy.h
deleted file mode 100644
index 0ee01764e56016f80216abc1008dcd58f7b8523e..0000000000000000000000000000000000000000
--- a/Fit/FitKernel/inc/IFitSuiteStrategy.h
+++ /dev/null
@@ -1,194 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      FitKernel/inc/IFitSuiteStrategy.h
-//! @brief     Defines classes IFitSuiteStrategy
-//!
-//! @homepage  http://apps.jcns.fz-juelich.de/BornAgain
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2013
-//! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke
-//
-// ************************************************************************** //
-
-#ifndef FITSUITESTRATEGY_H
-#define FITSUITESTRATEGY_H
-
-#include "INamed.h"
-#include "Types.h"
-#include "OutputData.h"
-class FitSuite;
-
-#include <string>
-#include <vector>
-#include <map>
-
-
-//! @class IFitSuiteStrategy
-//! @ingroup fitting_internal
-//! @brief Interface to concrete fit strategy.
-//!
-//!  Concrete implementation should manipulate with fit parameters/data
-//!  and then call minimizer.
-
-class BA_CORE_API_ IFitSuiteStrategy : public INamed
-{
- public:
-    // TODO refactor all strategies (decorator, policies?) to change the way
-    // of calling FitSuite's minimizer: simple call, clear parameters/matrices
-    // before the call, no call at all, see FitSuiteStrategyAdjustData
-
-    IFitSuiteStrategy() : m_fit_suite(0) {}
-    IFitSuiteStrategy(const std::string& name) : INamed(name), m_fit_suite(0) {}
-	virtual IFitSuiteStrategy *clone() const {
-	    throw NotImplementedException("IFitSuiteStrategy::clone() ->"
-	            " Error! Not implemented");
-	}
-
-    virtual ~IFitSuiteStrategy(){}
-    virtual void init(FitSuite *fit_suite) { m_fit_suite = fit_suite; }
-    virtual void execute() = 0;
- protected:
-    FitSuite *m_fit_suite;
-};
-
-
-//! @class FitSuiteStrategyDefault
-//! @ingroup fitting_internal
-//! @brief Default fit strategy just let FitSuite to run it's minimization round
-
-class BA_CORE_API_ FitSuiteStrategyDefault : public IFitSuiteStrategy
-{
- public:
-    FitSuiteStrategyDefault() : IFitSuiteStrategy("FitSuiteStrategyDefault") { }
-    virtual void execute();
-};
-
-
-//! @class FitSuiteStrategyAdjustData
-//! @ingroup fitting_internal
-//! @brief Strategy modifies data before running minimization round
-
-class BA_CORE_API_ FitSuiteStrategyAdjustData : public IFitSuiteStrategy
-{
- public:
-    FitSuiteStrategyAdjustData(int power_of_two = 1,
-            bool preserve_original=true, bool call_minimize=true)
-        : IFitSuiteStrategy("FitSuiteStrategyAdjustData")
-        , m_power_of_two(power_of_two)
-        , m_preserve_original_data(preserve_original)
-        , m_call_minimize(call_minimize) { }
-    void setPreserveOriginalData(bool preserve_original) {
-        m_preserve_original_data = preserve_original;
-    }
-    void setCallMinimize(bool call_minimize) {
-        m_call_minimize = call_minimize;
-    }
-    virtual void execute();
- private:
-    size_t m_power_of_two;
-    //! if it is true, strategy will restore original data in FitSuite
-    //! before exiting
-    bool m_preserve_original_data;
-    //! if it's true, modify data and then call FitSuite's minimizer,
-    //! if false - simply modify the data
-    bool m_call_minimize;
-};
-
-
-//! @class FitSuiteStrategyAdjustParameters
-//! @ingroup fitting_internal
-//! @brief Strategy which fixes/releases fit parameters and call minimizer
-
-class BA_CORE_API_ FitSuiteStrategyAdjustParameters : public IFitSuiteStrategy
-{
- public:
-    FitSuiteStrategyAdjustParameters(const std::string& name)
-        : IFitSuiteStrategy(name)
-        , m_fix_all(false)
-        , m_release_all(false)
-        , m_preserve_original_values(false) { }
-    FitSuiteStrategyAdjustParameters()
-        : IFitSuiteStrategy("FitSuiteStrategyAdjustParameters")
-        , m_fix_all(false)
-        , m_release_all(false)
-        , m_preserve_original_values(false)  { }
-    virtual ~FitSuiteStrategyAdjustParameters(){}
-    virtual void execute();
-    FitSuiteStrategyAdjustParameters& fix_all() {
-        m_fix_all = true; return *this;
-    }
-    FitSuiteStrategyAdjustParameters& release_all() {
-        m_release_all = true; return *this;
-    }
-    FitSuiteStrategyAdjustParameters& fix(std::string parname ) {
-        m_pars_to_fix.push_back(parname);
-        return *this;
-    }
-    FitSuiteStrategyAdjustParameters& release(std::string parname ) {
-        m_pars_to_release.push_back(parname);
-        return *this;
-    }
-    void setPreserveOriginalValues(bool preserve_values) {
-        m_preserve_original_values = preserve_values;
-    }
- private:
-    bool m_fix_all;
-    bool m_release_all;
-    std::vector<std::string > m_pars_to_fix;
-    std::vector<std::string > m_pars_to_release;
-    //! if it's true, strategy will set back values of parameters as they were
-    //! before minimization round
-    bool m_preserve_original_values;
-};
-
-
-//! @class FitSuiteStrategyBootstrap
-//! @ingroup fitting_internal
-//! @brief Helps minimizer get out of local minima by disturbing real data
-
-class BA_CORE_API_ FitSuiteStrategyBootstrap : public IFitSuiteStrategy
-{
- public:
-    FitSuiteStrategyBootstrap(int n_iterations = 5)
-        : IFitSuiteStrategy("FitStrategyBootstrap")
-        , m_n_iterations(n_iterations) { }
-    virtual ~FitSuiteStrategyBootstrap(){}
-    virtual void execute();
-
-    // to save results of minimization rounds
-    class FitResult {
-    public:
-        int niter;
-        double chi2_last;
-        double chi2_noisy;
-        double chi2_current;
-        vdouble1d_t param_values;
-        vdouble1d_t param_values_noisy;
-        vdouble1d_t param_values_last;
-        bool takethis;
-        void clear()
-        {
-            niter=-1;
-            chi2_last=0;
-            chi2_noisy=0;
-            chi2_current=0;
-            param_values.clear();
-            param_values_noisy.clear();
-            param_values_last.clear();
-        }
-    };
-
-    //! generate noisy data
-    OutputData<double> *generateNoisyData(double noise_factor,
-            const OutputData<double>& source) const;
-
- private:
-    int m_n_iterations;
-};
-
-#endif // FITSTRATEGY_H
-
-
diff --git a/Fit/FitKernel/src/FitStrategyAdjustData.cpp b/Fit/FitKernel/src/FitStrategyAdjustData.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b4e696ed96d82aa30a9992c6375aabfc10b142e0
--- /dev/null
+++ b/Fit/FitKernel/src/FitStrategyAdjustData.cpp
@@ -0,0 +1,65 @@
+#include "FitStrategyAdjustData.h"
+#include "FitSuite.h"
+#include "OutputDataFunctions.h"
+#include "MessageService.h"
+
+
+
+FitStrategyAdjustData::FitStrategyAdjustData(const FitStrategyAdjustData &other)
+    : IFitStrategy(other)
+    , m_power_of_two(other.m_power_of_two)
+    , m_preserve_original_data(other.m_preserve_original_data)
+    , m_call_minimize(other.m_call_minimize)
+{
+
+}
+
+
+//! adjust (rebin) data before running fit suite minimization round
+void FitStrategyAdjustData::execute()
+{
+    if( !m_fit_suite ) throw NullPointerException("FitStrategyAdjustData::execute() -> FitSuite doesn't exists");
+
+    // if no data rediction was requested, just call FitSuite's minimization
+    if( m_power_of_two == 0 ) {
+        if(m_call_minimize) {
+            m_fit_suite->minimize();
+        }
+        return;
+    }
+
+    // adjusting real data for every simulation defined
+    std::vector<OutputData<double > *> original_data_collection;
+    for(size_t i_exp = 0; i_exp<m_fit_suite->getFitObjects()->size(); ++i_exp) {
+        // saving original data
+        OutputData<double > *orig_data = m_fit_suite->getFitObjects()->getRealData()->clone();
+        original_data_collection.push_back(orig_data);
+
+        // create adjusted data which will have doubled (2,4,8,...) bin size
+        OutputData<double> *adjusted_data = orig_data;
+        for(size_t i=0; i<m_power_of_two; ++i) {
+            OutputData<double> *new_data = OutputDataFunctions::doubleBinSize(*adjusted_data);
+            if(i!=0) {
+                delete adjusted_data;
+            }
+            adjusted_data = new_data;
+        }
+        m_fit_suite->getFitObjects()->setRealData(*adjusted_data, i_exp);
+        delete adjusted_data;
+    }
+
+    // calling minimization
+    if(m_call_minimize) {
+        m_fit_suite->getMinimizer()->clear(); // clear minimizer's parameters and error matrixes
+        m_fit_suite->minimize();
+    }
+
+    // setting back original data
+    if(m_preserve_original_data) {
+        msglog(MSG::INFO) << "FitSuiteStrategyAdjustData::execute() -> Returning original data back ";
+        for(size_t i_exp = 0; i_exp<m_fit_suite->getFitObjects()->size(); ++i_exp) {
+            m_fit_suite->getFitObjects()->setRealData(*original_data_collection[i_exp], i_exp);
+            delete original_data_collection[i_exp];
+        }
+    }
+}
diff --git a/Fit/FitKernel/src/FitStrategyAdjustMinimizer.cpp b/Fit/FitKernel/src/FitStrategyAdjustMinimizer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6ceafc542c4a6423f226ece7023e3dd1bb43826b
--- /dev/null
+++ b/Fit/FitKernel/src/FitStrategyAdjustMinimizer.cpp
@@ -0,0 +1,2 @@
+#include "FitStrategyAdjustMinimizer.h"
+#include "FitSuite.h"
diff --git a/Fit/FitKernel/src/FitStrategyAdjustParameters.cpp b/Fit/FitKernel/src/FitStrategyAdjustParameters.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d4c385d0ab6601ab67c43a379ed3b1022dbcb9a4
--- /dev/null
+++ b/Fit/FitKernel/src/FitStrategyAdjustParameters.cpp
@@ -0,0 +1,63 @@
+#include "FitStrategyAdjustParameters.h"
+#include "FitSuite.h"
+#include "MessageService.h"
+
+
+FitStrategyAdjustParameters::FitStrategyAdjustParameters(const FitStrategyAdjustParameters &other)
+    : IFitStrategy(other)
+    , m_fix_all(other.m_fix_all)
+    , m_release_all(other.m_release_all)
+    , m_pars_to_fix(other.m_pars_to_fix)
+    , m_pars_to_release(other.m_pars_to_release)
+    , m_preserve_original_values(other.m_preserve_original_values)
+{
+
+}
+
+
+//! strategy which fixes/releases fit parameters and then call minimizer
+void FitStrategyAdjustParameters::execute()
+{
+    if( !m_fit_suite ) throw NullPointerException("FitSuiteStrategyAdjustParameters::execute() -> FitSuite doesn't exists");
+    FitSuiteParameters *fitParameters = m_fit_suite->getFitParameters();
+
+    // fixing all parameters at they current values
+    if( m_fix_all ) {
+        for(FitSuiteParameters::iterator it = fitParameters->begin(); it!=fitParameters->end(); ++it) {
+            (*it)->setFixed(true);
+        }
+    }
+
+    // releasing all parameters
+    if( m_release_all ) {
+        for(FitSuiteParameters::iterator it = fitParameters->begin(); it!=fitParameters->end(); ++it) {
+            msglog(MSG::DEBUG) << "FitSuiteStrategyAdjustParameters::execute() -> releasing " << (*it)->getName();
+            (*it)->setFixed(false);
+        }
+    }
+
+    // fixing dedicated list of fit parameters
+    for(std::vector<std::string >::iterator it = m_pars_to_fix.begin(); it!= m_pars_to_fix.end(); ++it) {
+        msglog(MSG::DEBUG) << "FitSuiteStrategyAdjustParameters::execute() -> fixing " << (*it);
+        fitParameters->getParameter((*it))->setFixed(true);
+    }
+
+    // releasing dedicated list of fit parameters
+    for(std::vector<std::string >::iterator it = m_pars_to_release.begin(); it!= m_pars_to_release.end(); ++it) {
+        msglog(MSG::DEBUG) << "FitSuiteStrategyAdjustParameters::execute() -> releasing " << (*it);
+        fitParameters->getParameter((*it))->setFixed(false);
+    }
+
+    // saving original param values
+    std::vector<double > original_param_values = fitParameters->getValues();
+
+    // calling minimization
+    m_fit_suite->minimize();
+
+    // returning parameters to original values as they were before minimization
+    if(m_preserve_original_values) {
+        fitParameters->setValues(original_param_values);
+    }
+}
+
+
diff --git a/Fit/FitKernel/src/FitSuite.cpp b/Fit/FitKernel/src/FitSuite.cpp
index 208d87cd34dfe392b78a39edb53634dc4b80e1cb..9bb29627b5e4f5c66810ff634bb3c5a933abfddd 100644
--- a/Fit/FitKernel/src/FitSuite.cpp
+++ b/Fit/FitKernel/src/FitSuite.cpp
@@ -66,11 +66,17 @@ void FitSuite::addFitParameter(const std::string& name, double value, const AttL
 }
 
 //! Adds fit strategy
-void FitSuite::addFitStrategy(IFitSuiteStrategy *strategy)
+void FitSuite::addFitStrategy(IFitStrategy *strategy)
 {
     m_fit_strategies.addStrategy(strategy);
 }
 
+void FitSuite::addFitStrategy(const IFitStrategy &strategy)
+{
+    addFitStrategy(strategy.clone());
+}
+
+
 //! link FitMultiParameters with simulation parameters
 void FitSuite::link_fit_parameters()
 {
@@ -102,16 +108,14 @@ void FitSuite::runFit()
     // running minimization using strategies
     m_fit_strategies.minimize();
 
-    // setting parameters to the optimum values found by the minimizer
+    // setting found values to the parameters (FIXME move to strategies)
     m_fit_parameters.setValues(m_minimizer->getValueOfVariablesAtMinimum());
+    m_fit_parameters.setErrors(m_minimizer->getErrorOfVariables());
 
     // calling observers to let them to get results
     m_is_last_iteration = true;
     notifyObservers();
 
-    // setting the error
-    m_fit_parameters.setErrors(m_minimizer->getErrorOfVariables());
-
 }
 
 
diff --git a/Fit/FitKernel/src/FitSuiteStrategies.cpp b/Fit/FitKernel/src/FitSuiteStrategies.cpp
index 55c943e01813c54caf3534b7593e0ee37ebb3ad2..69a39c7de9c7181af84387191c622ec0c240f53a 100644
--- a/Fit/FitKernel/src/FitSuiteStrategies.cpp
+++ b/Fit/FitKernel/src/FitSuiteStrategies.cpp
@@ -33,7 +33,7 @@ void FitSuiteStrategies::clear()
     m_current_strategy_index = 0;
 }
 
-void FitSuiteStrategies::addStrategy(IFitSuiteStrategy *strategy)
+void FitSuiteStrategies::addStrategy(IFitStrategy *strategy)
 {
     assert(m_fit_suite);
     strategy->init(m_fit_suite);
diff --git a/Fit/FitKernel/src/IFitStrategy.cpp b/Fit/FitKernel/src/IFitStrategy.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0c1329bae56dc1a1861a4ce8d245c2582d8a9f93
--- /dev/null
+++ b/Fit/FitKernel/src/IFitStrategy.cpp
@@ -0,0 +1,12 @@
+#include "IFitStrategy.h"
+#include "FitSuite.h"
+
+void FitStrategyDefault::execute()
+{
+    if( !m_fit_suite ) throw NullPointerException("FitStrategyDefault::execute() -> FitSuite doesn't exists");
+
+    // calling minimization
+    m_fit_suite->minimize();
+}
+
+
diff --git a/Fit/FitKernel/src/IFitSuiteStrategy.cpp b/Fit/FitKernel/src/IFitSuiteStrategy.cpp
deleted file mode 100644
index af713618449ec1f68abd9149cd0b900440ce9ec4..0000000000000000000000000000000000000000
--- a/Fit/FitKernel/src/IFitSuiteStrategy.cpp
+++ /dev/null
@@ -1,246 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      FitKernel/src/IFitSuiteStrategy.cpp
-//! @brief     Implements classes FitSuiteStrategy...
-//!
-//! @homepage  http://apps.jcns.fz-juelich.de/BornAgain
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2013
-//! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke
-//
-// ************************************************************************** //
-
-#include "IFitSuiteStrategy.h"
-#include "FitSuite.h"
-#include "FitSuiteParameters.h"
-#include "Exceptions.h"
-#include "OutputData.h"
-#include "Simulation.h"
-#include "Simulation.h"
-#include "IMinimizer.h"
-#include "MathFunctions.h"
-#include "OutputDataFunctions.h"
-#include "MessageService.h"
-#include <iostream>
-
-//! Default fit strategy just let FitSuite to run it's minimization round
-void FitSuiteStrategyDefault::execute()
-{
-    if( !m_fit_suite ) throw NullPointerException("FitSuiteStrategyDefault::execute() -> FitSuite doesn't exists");
-
-    // calling minimization
-    m_fit_suite->minimize();
-}
-
-//! adjust (rebin) data before running fit suite minimization round
-// TODO: refactor this all
-void FitSuiteStrategyAdjustData::execute()
-{
-    if( !m_fit_suite ) throw NullPointerException("FitSuiteStrategyAdjustData::execute() -> FitSuite doesn't exists");
-
-    // if no data rediction was requested, just call FitSuite's minimization
-    if( m_power_of_two == 0 ) {
-        if(m_call_minimize) {
-            m_fit_suite->minimize();
-        }
-        return;
-    }
-
-    // adjusting real data for every simulation defined
-    std::vector<OutputData<double > *> original_data_collection;
-    for(size_t i_exp = 0; i_exp<m_fit_suite->getFitObjects()->size(); ++i_exp) {
-        // saving original data
-        OutputData<double > *orig_data = m_fit_suite->getFitObjects()->getRealData()->clone();
-        original_data_collection.push_back(orig_data);
-
-        // create adjusted data which will have doubled (2,4,8,...) bin size
-        OutputData<double> *adjusted_data = orig_data;
-        for(size_t i=0; i<m_power_of_two; ++i) {
-            OutputData<double> *new_data = OutputDataFunctions::doubleBinSize(*adjusted_data);
-            if(i!=0) {
-                delete adjusted_data;
-            }
-            adjusted_data = new_data;
-        }
-        m_fit_suite->getFitObjects()->setRealData(*adjusted_data, i_exp);
-        delete adjusted_data;
-    }
-
-    // calling minimization
-    if(m_call_minimize) {
-        m_fit_suite->getMinimizer()->clear(); // clear minimizer's parameters and error matrixes
-        m_fit_suite->minimize();
-    }
-
-    // setting back original data
-    if(m_preserve_original_data) {
-        msglog(MSG::INFO) << "FitSuiteStrategyAdjustData::execute() -> Returning original data back ";
-        for(size_t i_exp = 0; i_exp<m_fit_suite->getFitObjects()->size(); ++i_exp) {
-            m_fit_suite->getFitObjects()->setRealData(*original_data_collection[i_exp], i_exp);
-            delete original_data_collection[i_exp];
-        }
-    }
-}
-
-
-//! strategy which fixes/releases fit parameters and then call minimizer
-void FitSuiteStrategyAdjustParameters::execute()
-{
-    if( !m_fit_suite ) throw NullPointerException("FitSuiteStrategyAdjustParameters::execute() -> FitSuite doesn't exists");
-    FitSuiteParameters *fitParameters = m_fit_suite->getFitParameters();
-
-    // fixing all parameters at they current values
-    if( m_fix_all ) {
-        for(FitSuiteParameters::iterator it = fitParameters->begin(); it!=fitParameters->end(); ++it) {
-            (*it)->setFixed(true);
-        }
-    }
-
-    // releasing all parameters
-    if( m_release_all ) {
-        for(FitSuiteParameters::iterator it = fitParameters->begin(); it!=fitParameters->end(); ++it) {
-            msglog(MSG::DEBUG) << "FitSuiteStrategyAdjustParameters::execute() -> releasing " << (*it)->getName();
-            (*it)->setFixed(false);
-        }
-    }
-
-    // fixing dedicated list of fit parameters
-    for(std::vector<std::string >::iterator it = m_pars_to_fix.begin(); it!= m_pars_to_fix.end(); ++it) {
-        msglog(MSG::DEBUG) << "FitSuiteStrategyAdjustParameters::execute() -> fixing " << (*it);
-        fitParameters->getParameter((*it))->setFixed(true);
-    }
-
-    // releasing dedicated list of fit parameters
-    for(std::vector<std::string >::iterator it = m_pars_to_release.begin(); it!= m_pars_to_release.end(); ++it) {
-        msglog(MSG::DEBUG) << "FitSuiteStrategyAdjustParameters::execute() -> releasing " << (*it);
-        fitParameters->getParameter((*it))->setFixed(false);
-    }
-
-    // saving original param values
-    std::vector<double > original_param_values = fitParameters->getValues();
-
-    // calling minimization
-    m_fit_suite->minimize();
-
-    // returning parameters to original values as they were before minimization
-    if(m_preserve_original_values) {
-        fitParameters->setValues(original_param_values);
-    }
-}
-
-//! Helps minimizer get out of local minima by disturbing real data
-void FitSuiteStrategyBootstrap::execute()
-{
-    (void)m_n_iterations;
-    throw NotImplementedException("FitSuiteStrategyBootstrap::execute()");
-
-//    if( !m_fit_suite ) throw NullPointerException("FitSuiteStrategyBootsrap::execute() -> FitSuite doesn't exists");
-
-//    std::vector<FitResult > fitHistory;
-
-//    // minimizing first time and saving initial parameters
-//    m_fit_suite->getMinimizer()->clear();
-//    m_fit_suite->minimize();
-
-//    vdouble1d_t param_values = getFitSuiteParameterValues();
-//    double chi2_last = m_fit_suite->getMinimizer()->getMinValue();
-
-//    FitResult fitResult;
-//    OutputData<double > *orig_data = m_fit_suite->getChiSquaredModule()->getRealData()->clone();
-//    for(int i_iter=0; i_iter<m_n_iterations; ++i_iter) {
-//        OutputData<double > *noisy_data = generateNoisyData(10, *orig_data);
-
-//        fitResult.clear();
-//        fitResult.niter = i_iter;
-//        fitResult.chi2_last = chi2_last;
-//        fitResult.param_values = param_values;
-
-//        std::cout << "FitSuiteStrategyBootstrap::execute() -> 1.1 Iter: " << i_iter << " chi2_last:" << chi2_last;
-//        for(size_t i=0; i<param_values.size(); ++i) std::cout << " " << param_values[i];
-//        std::cout << std::endl;
-
-//        setFitSuiteParameterValues(param_values);
-
-//        // minimizing noisy data
-//        m_fit_suite->setRealData(*noisy_data);
-//        m_fit_suite->getMinimizer()->clear();
-//        m_fit_suite->minimize();
-//        double chi2_noisy = m_fit_suite->getMinimizer()->getMinValue();
-//        std::cout << "FitSuiteStrategyBootstrap::execute() -> 1.2 Iter: " << i_iter << " chi2_noisy:" << chi2_noisy;
-//        vdouble1d_t param_values_noisy = getFitSuiteParameterValues();
-//        for(size_t i=0; i<param_values_noisy.size(); ++i) std::cout << " " << param_values_noisy[i];
-//        std::cout << std::endl;
-
-//        // minimizing original data (last parameters will be used as a starting value)
-//        m_fit_suite->setRealData(*orig_data);
-//        setFitSuiteParameterValues(param_values_noisy);
-//        m_fit_suite->getMinimizer()->clear();
-//        m_fit_suite->minimize();
-//        double chi2_current = m_fit_suite->getMinimizer()->getMinValue();
-
-//        std::cout << "FitSuiteStrategyBootstrap::execute() -> 1.3 Iter: " << i_iter << " chi2_last:" << chi2_last << " chi2_noisy:" << chi2_noisy << " chi2_current:" << chi2_current;
-//        vdouble1d_t param_values_last = getFitSuiteParameterValues();
-//        for(size_t i=0; i<param_values_last.size(); ++i) std::cout << " " << param_values_last[i];
-//        std::cout << std::endl;
-
-//        fitResult.takethis = false;
-//        if(chi2_current <= chi2_last) {
-//            param_values = getFitSuiteParameterValues();
-//            std::cout << "FitSuiteStrategyBootstrap::execute() -> 1.4 Iter: " << i_iter << " TAKING PARS:";
-//            for(size_t i=0; i<param_values.size(); ++i) std::cout << " " << param_values[i];
-//            std::cout << std::endl;
-//            fitResult.takethis = true;
-
-//        }
-
-//        fitResult.chi2_current = chi2_current;
-//        fitResult.chi2_noisy = chi2_noisy;
-//        fitResult.param_values_noisy = param_values_noisy;
-//        fitResult.param_values_last = param_values_last;
-//        fitHistory.push_back(fitResult);
-
-//        chi2_last = chi2_current;
-
-//        delete noisy_data;
-//    }
-
-//    std::cout << "FitSuiteStrategyBootstrap::execute() -> Results" << std::endl;
-//    for(size_t i=0; i<fitHistory.size(); ++i) {
-//        std::cout << "i:" << i << " niter:" << fitHistory[i].niter << std::endl;
-//        std::cout << " chi2_last   :" << fitHistory[i].chi2_last << " |  ";
-//        for(size_t j=0; j<fitHistory[i].param_values.size(); ++j) std::cout << fitHistory[i].param_values[j] << " ";
-//        std::cout << std::endl;
-
-//        std::cout << " chi2_noisy  :" << fitHistory[i].chi2_noisy << " |  ";
-//        for(size_t j=0; j<fitHistory[i].param_values_noisy.size(); ++j) std::cout << fitHistory[i].param_values_noisy[j] << " ";
-//        std::cout << std::endl;
-
-//        std::cout << " chi2_current:" << fitHistory[i].chi2_current << " |  ";
-//        for(size_t j=0; j<fitHistory[i].param_values_last.size(); ++j) std::cout << fitHistory[i].param_values_last[j] << " ";
-//        std::cout << std::endl;
-//        std::cout << " take this:" << fitHistory[i].takethis << std::endl;
-//        std::cout << "--------------" << std::endl;
-//    }
-
-}
-
-//! generate noisy data
-OutputData<double> *FitSuiteStrategyBootstrap::generateNoisyData(double noise_factor, const OutputData<double>& source) const
-{
-    OutputData<double> *p_result = source.clone();
-    OutputData<double>::iterator it = p_result->begin();
-    while (it != p_result->end()) {
-        double current = *it;
-        double sigma = noise_factor*std::sqrt(current);
-        double random = MathFunctions::GenerateNormalRandom(current, sigma);
-        if (random<0.0) random = 0.0;
-        *it = random;
-        ++it;
-    }
-    return p_result;
-}
-
-
diff --git a/Tests/FunctionalTests/TestPyFit/testfit02.py b/Tests/FunctionalTests/TestPyFit/testfit02.py
index 4caee78f393733604839a01b4c7dacaa621bae74..d27b9655bd0cb6e5011eb828fec675bc8711c848 100644
--- a/Tests/FunctionalTests/TestPyFit/testfit02.py
+++ b/Tests/FunctionalTests/TestPyFit/testfit02.py
@@ -57,7 +57,7 @@ def runTest():
     fitSuite.addFitParameter("*SampleBuilder/cylinder_ratio", 0.2, 0.1, AttLimits.fixed());
 
     chiModule = ChiSquaredModule()
-    chiModule.setChiSquaredFunction( SquaredFunctionWithSystematicError() )
+    chiModule.setChiSquaredFunction( SquaredFunctionMeanSquaredError() )
 
     fitSuite.addSimulationAndRealData(simulation, real_data, chiModule)
     fitSuite.runFit()