diff --git a/Fit/CMakeLists.txt b/Fit/CMakeLists.txt
index f93f95aa12ea8363c17cf6232a59c24217473704..1a645f659a45f1ff0c8232b352ba9939e9655d28 100644
--- a/Fit/CMakeLists.txt
+++ b/Fit/CMakeLists.txt
@@ -22,6 +22,8 @@ file(GLOB include_files
 if(NOT ROOT_FOUND)
     list(REMOVE_ITEM source_files "${CMAKE_CURRENT_SOURCE_DIR}/FitKernel/src/ROOTGeneticMinimizer.cpp")
     list(REMOVE_ITEM include_files "${CMAKE_CURRENT_SOURCE_DIR}/FitKernel/inc/ROOTGeneticMinimizer.h")
+    list(REMOVE_ITEM source_files "${CMAKE_CURRENT_SOURCE_DIR}/FitKernel/src/GeneticMinimizer.cxx")
+    list(REMOVE_ITEM include_files "${CMAKE_CURRENT_SOURCE_DIR}/FitKernel/inc/GeneticMinimizer.h")
 endif()
 
 if(BORNAGAIN_PYTHON)
@@ -71,13 +73,18 @@ target_link_libraries(
     ${GSL_LIBRARIES}
 )
 
+
 if(ROOT_FOUND)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAS_GENETIC_MINIMIZER")
     include_directories(
         ${ROOT_INCLUDE_DIR}
     )
+#    target_link_libraries(${library_name}
+#        ${ROOT_LIBRARIES} -lGenetic -lTMVA
+#    )
     target_link_libraries(${library_name}
-        ${ROOT_LIBRARIES} -lGenetic -lTMVA
+        ${ROOT_LIBRARIES} -lTMVA
+#        -L${ROOT_LIBRARY_DIR} -lTMVA
     )
 endif()
 
diff --git a/Fit/FitKernel/inc/FitSuite.h b/Fit/FitKernel/inc/FitSuite.h
index 2723416547fe9d8fd96d899d3c0aa9436de202a1..7dbe7d488f852875ed516d7ff13311b90dccc348 100644
--- a/Fit/FitKernel/inc/FitSuite.h
+++ b/Fit/FitKernel/inc/FitSuite.h
@@ -58,7 +58,7 @@ class BA_CORE_API_ FitSuite : public IObservable
     void addFitStrategy(const IFitStrategy &strategy);
 
     //! Sets minimizer
-    void setMinimizer(IMinimizer *minimizer) { delete m_minimizer;  m_minimizer = minimizer; }
+    void setMinimizer(IMinimizer *minimizer);
     //! Returns minimizer
     IMinimizer *getMinimizer() { return m_minimizer; }
 
diff --git a/Fit/FitKernel/inc/GeneticMinimizer.h b/Fit/FitKernel/inc/GeneticMinimizer.h
new file mode 100644
index 0000000000000000000000000000000000000000..46e3a0f4e5e0644c81cc43fadc380ecf695e4c1d
--- /dev/null
+++ b/Fit/FitKernel/inc/GeneticMinimizer.h
@@ -0,0 +1,112 @@
+// @(#)root/mathcore:$Id
+
+/**********************************************************************
+ *                                                                    *
+ * Copyright (c) 2006  LCG ROOT Math Team, CERN/PH-SFT                *
+ *                                                                    *
+ *                                                                    *
+ **********************************************************************/
+
+// Header file for class GeneticMinimizer
+
+#ifndef ROOT_Math_GeneticMinimizer
+#define ROOT_Math_GeneticMinimizer
+
+#include <vector>
+
+#include "Math/Minimizer.h"
+
+#include "TMVA/IFitterTarget.h"
+#include "TMVA/Interval.h"
+
+namespace ROOT { 
+   namespace Math { 
+
+
+//_______________________________________________________________________________
+/*
+  structure containing the parameters of the genetic minimizer 
+ */ 
+struct GeneticMinimizerParameters { 
+
+   Int_t fPopSize;
+   Int_t fNsteps;
+   Int_t fCycles; 
+   Int_t fSC_steps;
+   Int_t fSC_rate;
+   Double_t fSC_factor;
+   Double_t fConvCrit;
+   Int_t fSeed; 
+   
+
+   // constructor with default value
+   GeneticMinimizerParameters(); 
+};
+
+
+
+//_______________________________________________________________________________
+/** 
+   GeneticMinimizer
+
+   @ingroup MultiMin
+*/
+class GeneticMinimizer: public ROOT::Math::Minimizer {
+
+public: 
+
+   //GeneticMinimizer (int = 0);
+   GeneticMinimizer (int i = 0);
+   virtual ~GeneticMinimizer ();
+
+   virtual void Clear();
+   using ROOT::Math::Minimizer::SetFunction;
+   virtual void SetFunction(const ROOT::Math::IMultiGenFunction & func); 
+
+   virtual bool SetLimitedVariable(unsigned int , const std::string& , double , double , double, double);
+   virtual bool SetVariable(unsigned int ivar, const std::string & name, double val, double step); 
+   virtual bool SetFixedVariable(unsigned int ivar  , const std::string & name , double val); 
+
+   virtual  bool Minimize(); 
+   virtual double MinValue() const; 
+   virtual double Edm() const; 
+   virtual const double *  X() const; 
+   virtual const double *  MinGradient() const;  
+   virtual unsigned int NCalls() const;    
+
+   virtual unsigned int NDim() const;  
+   virtual unsigned int NFree() const;  
+
+   virtual bool ProvidesError() const; 
+   virtual const double * Errors() const;
+
+   virtual double CovMatrix(unsigned int i, unsigned int j) const;  
+
+   void SetParameters(const GeneticMinimizerParameters & params );
+
+   void SetRandomSeed(int seed) { fParameters.fSeed = seed; }
+
+   const GeneticMinimizerParameters & MinimizerParameters() const { return fParameters; }
+
+   virtual ROOT::Math::MinimizerOptions Options() const; 
+
+   virtual void SetOptions(const ROOT::Math::MinimizerOptions & opt);
+
+protected:
+
+   void GetGeneticOptions(ROOT::Math::MinimizerOptions & opt) const; 
+
+   std::vector<TMVA::Interval*> fRanges;
+   TMVA::IFitterTarget* fFitness;
+   double fMinValue;
+   std::vector<double> fResult;
+
+   GeneticMinimizerParameters fParameters; 
+
+}; 
+
+
+   } // end namespace Math
+} // end namespace ROOT
+
+#endif /* ROOT_Math_GeneticMinimizer */
diff --git a/Fit/FitKernel/src/FitSuite.cpp b/Fit/FitKernel/src/FitSuite.cpp
index f71c2699517563651df9658388b00351f7f178e3..f0654eb8b696eb79345cb296730fc052767e8bda 100644
--- a/Fit/FitKernel/src/FitSuite.cpp
+++ b/Fit/FitKernel/src/FitSuite.cpp
@@ -76,6 +76,14 @@ void FitSuite::addFitStrategy(const IFitStrategy &strategy)
     addFitStrategy(strategy.clone());
 }
 
+void FitSuite::setMinimizer(IMinimizer *minimizer)
+{
+    delete m_minimizer;
+    m_minimizer = minimizer;
+    if(!m_minimizer) {
+        msglog(MSG::WARNING) << "FitSuite::setMinimizer() -> Warning. Attempt to set NULL minimizer.";
+    }
+}
 
 //! link FitMultiParameters with simulation parameters
 void FitSuite::link_fit_parameters()
diff --git a/Fit/FitKernel/src/GeneticMinimizer.cxx b/Fit/FitKernel/src/GeneticMinimizer.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..b454194f9ddb596be685409fbe77c28f0a70e753
--- /dev/null
+++ b/Fit/FitKernel/src/GeneticMinimizer.cxx
@@ -0,0 +1,372 @@
+#include "Math/GeneticMinimizer.h"
+
+#include "TMVA/GeneticAlgorithm.h"
+#include "TMVA/IFitterTarget.h"
+
+#include "Math/IFunction.h"
+#include "Math/GenAlgoOptions.h"
+
+#include "TError.h"
+
+#include <cassert>
+
+namespace ROOT {
+namespace Math {
+   
+
+// wrapper class for TMVA interface to evaluate objective function
+class MultiGenFunctionFitness : public TMVA::IFitterTarget {
+private:
+   unsigned int fNCalls;
+   unsigned int fNFree; 
+   const ROOT::Math::IMultiGenFunction& fFunc;
+   std::vector<int> fFixedParFlag; 
+   mutable std::vector<double> fValues; 
+
+public:
+   MultiGenFunctionFitness(const ROOT::Math::IMultiGenFunction& function) : fNCalls(0), 
+                                                                            fFunc(function)
+   { fNFree = fFunc.NDim(); }
+
+   unsigned int NCalls() const { return fNCalls; }
+   unsigned int NDims() const { return fNFree; }
+
+   unsigned int NTotal() const { return fFunc.NDim(); } 
+
+   void FixParameter(unsigned int ipar, double value, bool fix = true) { 
+
+      if (fValues.size() != fFunc.NDim() ) {
+         fValues.resize(fFunc.NDim() );
+         fFixedParFlag.resize(fFunc.NDim());
+      }
+      
+      if (ipar >= fValues.size() ) return;
+
+      // first find if it has been already fixed 
+      fFixedParFlag[ipar] = fix;
+      fValues[ipar] = value;
+      // count number of fixed params
+      for (unsigned int i = 0; i < fFixedParFlag.size(); ++i)
+         if (!fFixedParFlag[i] ) fNFree++;
+              
+   }
+   
+   // transfrom from internal parameters (not fixed to external vector which include the fixed ones)
+   const std::vector<double> & Transform( const std::vector<double> & factors) const { 
+      unsigned int n = fValues.size(); 
+      if (n == 0 || fNFree == n ) 
+         return factors;
+
+      // in case of fixed parameters          
+      for (unsigned int i = 0, j = 0; i < n ; ++i) { 
+         if (!fFixedParFlag[i] ) {
+            assert (j < fNFree);
+            fValues[i] = factors[j];
+            j++;
+         } 
+      }
+      return fValues;
+   }
+
+   Double_t Evaluate(const std::vector<double> & factors ) const {
+      const std::vector<double> & x = Transform( factors); 
+      return fFunc(&x[0]);
+   }
+
+   Double_t EstimatorFunction(std::vector<double> & factors ){
+      fNCalls += 1;
+      return Evaluate( factors);
+   }
+};
+
+GeneticMinimizerParameters::GeneticMinimizerParameters() 
+{ 
+   // constructor of parameters with default values (use 100 is max iterations is not defined)
+   int defmaxiter = ROOT::Math::MinimizerOptions::DefaultMaxIterations();
+   fNsteps   =  (defmaxiter > 0) ?  defmaxiter : 100; 
+   fPopSize  =300;
+   fCycles   = 3;
+   fSC_steps =10;
+   fSC_rate  =5;
+   fSC_factor=0.95;
+   fConvCrit =10.0 * ROOT::Math::MinimizerOptions::DefaultTolerance(); // default is 0.001
+   if (fConvCrit <=0 ) fConvCrit = 0.001; 
+   fSeed=0;  // random seed
+}
+
+// genetic minimizer class 
+
+GeneticMinimizer::GeneticMinimizer(int ): 
+   fFitness(0), 
+   fMinValue(0),
+   fParameters(GeneticMinimizerParameters() )
+{
+
+   // check with default minimizer options
+   ROOT::Math::IOptions * geneticOpt = ROOT::Math::MinimizerOptions::FindDefault("Genetic");
+   if (geneticOpt) { 
+      ROOT::Math::MinimizerOptions opt; // create using default options
+      opt.SetExtraOptions(*geneticOpt);
+      this->SetOptions(opt);
+   } 
+
+   // set the parameters 
+   SetTolerance(0.1 * fParameters.fConvCrit); 
+   SetMaxIterations( fParameters.fNsteps); 
+ }
+
+GeneticMinimizer::~GeneticMinimizer()
+{
+   if ( fFitness )
+   {
+      delete fFitness;
+      fFitness = 0;
+   }
+}
+
+void GeneticMinimizer::Clear() 
+{
+   fRanges.clear();
+   fResult.clear();
+   if ( fFitness )
+   {
+      delete fFitness;
+      fFitness = 0;
+   }
+}
+
+void GeneticMinimizer::SetFunction(const ROOT::Math::IMultiGenFunction & func) 
+{
+   Clear();
+
+   fFitness = new MultiGenFunctionFitness(func);
+   fResult = std::vector<double>(func.NDim() );
+   assert(fResult.size() == NDim() );
+}  
+
+bool GeneticMinimizer::SetLimitedVariable(unsigned int , const std::string & , double , double , double lower , double upper ) 
+{ 
+   fRanges.push_back( new TMVA::Interval(lower,upper) );
+
+   return true;
+}
+
+bool GeneticMinimizer::SetVariable(unsigned int, const std::string& name, double value, double step) 
+{
+   //It does nothing! As there is no variable if it has no limits!
+   double lower = value - (50 * step);
+   double upper = value + (50 * step);
+   Info("GeneticMinimizer::SetVariable", "Variables should be limited - set automatic range to 50 times step size for %s : [%f, %f]",
+        name.c_str(),lower,upper);
+   fRanges.push_back( new TMVA::Interval(lower, upper ) );
+   
+   return true;
+}
+
+bool GeneticMinimizer::SetFixedVariable(unsigned int par, const std::string& name, double value) {
+   // set a fixed variable 
+   if (!fFitness) {
+      Error("GeneticMinimizer::SetFixedVariable", "Function has not been set - cannot set fixed variables %s",name.c_str());
+      return false;
+   }
+
+   static_cast<MultiGenFunctionFitness*>(fFitness)->FixParameter(par, value);
+   return true;
+} 
+
+
+void GeneticMinimizer::SetParameters(const GeneticMinimizerParameters & params )
+{
+   fParameters  = params; 
+   // set also the one defined in Minimizer
+   SetTolerance( 0.1 * fParameters.fConvCrit);
+   SetMaxIterations( fParameters.fNsteps );
+}
+
+ROOT::Math::MinimizerOptions GeneticMinimizer::Options() const { 
+   ROOT::Math::MinimizerOptions opt; 
+   GetGeneticOptions(opt);
+   return opt; 
+}
+
+void  GeneticMinimizer::GetGeneticOptions(ROOT::Math::MinimizerOptions & opt) const { 
+   // get  the genetic options of the class and return them in the MinimizerOptions class
+   opt.SetTolerance(fParameters.fConvCrit/10); // use a factor of 10 to have default as Minuit
+   opt.SetPrintLevel(PrintLevel() );   
+   opt.SetMaxIterations(fParameters.fNsteps);  
+   // use fixed or dammy value for the other options
+   opt.SetMinimizerType("Genetic");
+   opt.SetMaxFunctionCalls(0);
+   opt.SetStrategy(-1);
+   opt.SetErrorDef(0);
+   opt.SetPrecision(0);
+   opt.SetMinimizerAlgorithm("");
+
+   ROOT::Math::GenAlgoOptions geneticOpt; 
+   geneticOpt.SetValue("PopSize",fParameters.fPopSize);
+   geneticOpt.SetValue("Steps",fParameters.fNsteps);
+   geneticOpt.SetValue("Cycles",fParameters.fCycles);
+   geneticOpt.SetValue("SC_steps",fParameters.fSC_steps);
+   geneticOpt.SetValue("SC_rate",fParameters.fSC_rate);
+   geneticOpt.SetValue("SC_factor",fParameters.fSC_factor);
+   geneticOpt.SetValue("ConvCrit",fParameters.fConvCrit);
+   geneticOpt.SetValue("RandomSeed",fParameters.fSeed);
+
+   opt.SetExtraOptions(geneticOpt);   
+}
+
+void GeneticMinimizer::SetOptions(const ROOT::Math::MinimizerOptions & opt) 
+{
+   SetTolerance(opt.Tolerance() );
+   SetPrintLevel(opt.PrintLevel() );
+   //SetMaxFunctionCalls(opt.MaxFunctionCalls() );
+   SetMaxIterations(opt.MaxIterations() );
+
+   fParameters.fConvCrit = 10.*opt.Tolerance(); // use a factor of 10 to have default as Minuit
+
+   // set genetic parameter from minimizer options 
+   const ROOT::Math::IOptions * geneticOpt = opt.ExtraOptions(); 
+   if (!geneticOpt) { 
+      Warning("GeneticMinimizer::SetOptions", "No specific genetic minimizer options have been set"); 
+      return; 
+   }
+
+   // if options are not existing values will not be set
+   geneticOpt->GetValue("PopSize",fParameters.fPopSize);
+   geneticOpt->GetValue("Steps",fParameters.fNsteps);
+   geneticOpt->GetValue("Cycles",fParameters.fCycles);
+   geneticOpt->GetValue("SC_steps",fParameters.fSC_steps);
+   geneticOpt->GetValue("SC_rate",fParameters.fSC_rate);
+   geneticOpt->GetValue("SC_factor",fParameters.fSC_factor);
+   geneticOpt->GetValue("ConvCrit",fParameters.fConvCrit);
+   geneticOpt->GetValue("RandomSeed",fParameters.fSeed);
+
+   // use same of options in base class
+   int maxiter = opt.MaxIterations();
+   if (maxiter > 0 && fParameters.fNsteps > 0 && maxiter !=  fParameters.fNsteps  )    {
+      Warning("GeneticMinimizer::SetOptions", "max iterations value given different than  than Steps - set equal to Steps %d",fParameters.fNsteps); 
+   }
+   if (fParameters.fNsteps > 0) SetMaxIterations(fParameters.fNsteps);      
+
+}
+
+bool GeneticMinimizer::Minimize() 
+{
+
+   if (!fFitness) {
+      Error("GeneticMinimizer::Minimize","Fitness function has not been set"); 
+      return false; 
+   }
+
+   // sync parameters 
+   if (MaxIterations() > 0) fParameters.fNsteps = MaxIterations(); 
+   if (Tolerance() > 0) fParameters.fConvCrit = 10* Tolerance();
+
+   TMVA::GeneticAlgorithm mg( *fFitness, fParameters.fPopSize, fRanges, fParameters.fSeed );
+
+   if (PrintLevel() > 0) { 
+      std::cout << "GeneticMinimizer::Minimize  - Start iterating - max iterations = " <<  MaxIterations()  
+                << " conv criteria (tolerance) =  "   << fParameters.fConvCrit << std::endl;
+   }
+   
+   fStatus = 0;
+   unsigned int niter = 0; 
+   do {
+      mg.Init();
+      
+      mg.CalculateFitness();
+      
+      // Just for debugging options
+      //mg.GetGeneticPopulation().Print(0);
+      
+      mg.GetGeneticPopulation().TrimPopulation();
+      
+      mg.SpreadControl( fParameters.fSC_steps, fParameters.fSC_rate, fParameters.fSC_factor );
+
+      if (PrintLevel() > 2) { 
+         std::cout << "New Iteration " << niter << " with  parameter values :" << std::endl;
+         TMVA::GeneticGenes* genes = mg.GetGeneticPopulation().GetGenes( 0 );
+         if (genes) { 
+            std::vector<Double_t> gvec;
+            gvec = genes->GetFactors(); 
+            for (unsigned int i = 0; i < gvec.size(); ++i) {
+               std::cout << gvec[i] << "    ";
+            }
+            std::cout << std::endl;
+            std::cout << "\tFitness function value = " <<  static_cast<MultiGenFunctionFitness*>(fFitness)->Evaluate(gvec) << std::endl;
+         }                     
+      } 
+      niter++;
+      if ( niter > MaxIterations() && MaxIterations() > 0) { 
+         if (PrintLevel() > 0) { 
+            Info("GeneticMinimizer::Minimize","Max number of iterations %d reached - stop iterating",MaxIterations());
+         }
+         fStatus = 1; 
+         break;
+      }
+      
+   } while (!mg.HasConverged( fParameters.fNsteps, fParameters.fConvCrit ));  // converged if: fitness-improvement < CONVCRIT within the last CONVSTEPS loops
+   
+   TMVA::GeneticGenes* genes = mg.GetGeneticPopulation().GetGenes( 0 );
+   std::vector<Double_t> gvec;
+   gvec = genes->GetFactors();
+
+
+   // transform correctly gvec on fresult in case there are fixed parameters
+   const std::vector<double> & transVec = static_cast<MultiGenFunctionFitness*>(fFitness)->Transform(gvec); 
+   std::copy(transVec.begin(), transVec.end(), fResult.begin() );
+   fMinValue = static_cast<MultiGenFunctionFitness*>(fFitness)->Evaluate(gvec);
+
+
+   if (PrintLevel() > 0) { 
+      if (PrintLevel() > 2) std::cout << std::endl;
+          std::cout << "Finished Iteration (niter = " << niter << "  with fitness function value = " << MinValue() << std::endl;
+      for (unsigned int i = 0; i < fResult.size(); ++i) {
+         std::cout << " Parameter-" << i << "\t=\t" << fResult[i] << std::endl;
+      }
+   }
+
+   return true;
+}  
+
+double GeneticMinimizer::MinValue() const 
+{
+   return (fFitness) ? fMinValue : 0; 
+}  
+
+const double *  GeneticMinimizer::X() const { 
+   return (fFitness) ? &fResult[0] : 0; 
+}  
+
+unsigned int GeneticMinimizer::NCalls() const 
+{
+   if ( fFitness )
+      return static_cast<MultiGenFunctionFitness*>(fFitness)->NCalls();
+   else
+      return 0;
+}
+
+unsigned int GeneticMinimizer::NDim() const 
+{
+   if ( fFitness )
+      return static_cast<MultiGenFunctionFitness*>(fFitness)->NTotal();
+   else
+      return 0;
+}   
+unsigned int GeneticMinimizer::NFree() const 
+{
+   if ( fFitness )
+      return static_cast<MultiGenFunctionFitness*>(fFitness)->NDims();
+   else
+      return 0;
+}   
+
+// Functions we don't need...
+const double *  GeneticMinimizer::MinGradient() const { return 0; }   
+bool GeneticMinimizer::ProvidesError() const { return false; }  
+const double * GeneticMinimizer::Errors() const { return 0; }
+double GeneticMinimizer::Edm() const { return 0; }
+double GeneticMinimizer::CovMatrix(unsigned int, unsigned int) const { return 0; }
+
+}
+}
diff --git a/Fit/FitKernel/src/MinimizerFactory.cpp b/Fit/FitKernel/src/MinimizerFactory.cpp
index 576c004b160365c26f333a02dbf4610924ac72fd..5a3fab62a1e7e8af30674ca2ee61e377efc3f3b9 100644
--- a/Fit/FitKernel/src/MinimizerFactory.cpp
+++ b/Fit/FitKernel/src/MinimizerFactory.cpp
@@ -110,6 +110,10 @@ IMinimizer *MinimizerFactory::createMinimizer(const std::string& minimizer, cons
 #ifdef HAS_GENETIC_MINIMIZER
     } else if( minimizer == "Genetic" ) {
         result = new ROOTGeneticMinimizer(minimizer, algorithm);
+#else
+    } else if( minimizer == "Genetic" ) {
+        std::cout << "MinimizerFactory::createMinimizer() -> Error! Genetic minimizer doesn't exists (compiled without ROOT support)." << std::endl;
+        result = 0;
 #endif
 
     }
diff --git a/Fit/FitKernel/src/ROOTGeneticMinimizer.cpp b/Fit/FitKernel/src/ROOTGeneticMinimizer.cpp
index 815c76ef852c76b031c4fd8961e9707ede2853a5..7f41e0135edd43cd353cb204c957f70d878196b5 100644
--- a/Fit/FitKernel/src/ROOTGeneticMinimizer.cpp
+++ b/Fit/FitKernel/src/ROOTGeneticMinimizer.cpp
@@ -59,12 +59,6 @@ void ROOTGeneticMinimizer::propagateOptions()
 {
     ROOTMinimizer::propagateOptions();
 
-//    if( m_options.getMaxIterations() > 0 && m_options.getMaxIterations() < m_options.getIntValue("Steps")) {
-//        msglog(MSG::WARNING) << "ROOTGeneticMinimizer::propagateOptions() -> Max iterations smaller than Steps. ";
-//        msglog(MSG::WARNING) << "Setting equal to steps " << m_options.getIntValue("Steps") << ".";
-//        m_options.setMaxIterations(m_options.getIntValue("Steps"));
-//    }
-
     // setting minimizer parameters
     ROOT::Math::GeneticMinimizerParameters pars;
     pars.fPopSize = m_options.getIntValue("PopSize");
diff --git a/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp b/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp
index e2c7d32d68fb307bb5203893c611a0b4aaea3b8e..d43c3ee82c1c19d4204a7b10f0c06f302832e482 100644
--- a/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp
+++ b/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp
@@ -26,8 +26,8 @@ TestFit01::TestFit01()
 {
     m_minimizers.push_back( Minimizer("Minuit2","Migrad") );
     m_minimizers.push_back( Minimizer("Minuit2","Fumili") );
-    m_minimizers.push_back( Minimizer("GSLMultiMin","BFGS") );
-    m_minimizers.push_back( Minimizer("GSLMultiMin","SteepestDescent") );
+//    m_minimizers.push_back( Minimizer("GSLMultiMin","BFGS") );
+//    m_minimizers.push_back( Minimizer("GSLMultiMin","SteepestDescent") );
     m_minimizers.push_back( Minimizer("GSLLMA","") ); // this is Levenberg-Marquard
 //    m_minimizers.push_back( Minimizer("GSLSimAn","") );
 //    m_minimizers.push_back( Minimizer("Genetic","") );
diff --git a/ThirdParty/RootMinimizers/CMakeLists.txt b/ThirdParty/RootMinimizers/CMakeLists.txt
index d98a6e037212f404621ab277c7c0557ef7799afd..51e4c009647b85495c5980d03aa9312878d27d0a 100644
--- a/ThirdParty/RootMinimizers/CMakeLists.txt
+++ b/ThirdParty/RootMinimizers/CMakeLists.txt
@@ -23,6 +23,11 @@ file(GLOB include_files
     "src/Math/*.h"
 )
 
+#if(NOT ROOT_FOUND)
+#    list(REMOVE_ITEM include_files GeneticMinimizer.h)
+#    list(REMOVE_ITEM source_files GeneticMinimizer.cxx)
+#endif()
+
 add_definitions(-DWARNINGMSG)
 
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMATH_NO_PLUGIN_MANAGER -DHAS_MINUIT2 -DR__HAS_MATHMORE")
diff --git a/cmake/modules/FindROOT.cmake b/cmake/modules/FindROOT.cmake
index fcd453c2b768d5c954cc8c8029855ef4563a846e..7a0b262802e7ee880bfab6bac25e6f5890ce23d6 100644
--- a/cmake/modules/FindROOT.cmake
+++ b/cmake/modules/FindROOT.cmake
@@ -55,11 +55,11 @@ else()
 endif()
 
 # check if ROOT installation is complete
-if(NOT EXISTS "${ROOT_INCLUDE_DIR}/Math/GeneticMinimizer.h")
-    message("--> ROOT installation is not complete. Can't find file ${ROOT_INCLUDE_DIR}/include/Math/GeneticMinimizer.h")
-    message("--> Switching ROOT OFF")
-    set(ROOT_FOUND FALSE)
-endif()
+#if(NOT EXISTS "${ROOT_INCLUDE_DIR}/Math/GeneticMinimizer.h")
+#    message("--> ROOT installation is not complete. Can't find file ${ROOT_INCLUDE_DIR}/include/Math/GeneticMinimizer.h")
+#    message("--> Switching ROOT OFF")
+#    set(ROOT_FOUND FALSE)
+#endif()
 
 #include(CMakeMacroParseArguments)
 find_program(ROOTCINT_EXECUTABLE rootcint PATHS $ENV{ROOTSYS}/bin)
diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake
index 5ef35cf1d79d0c5207d9aaf1b24b70fe1b051108..cff04a6c0d31e5e76c3e3b8b4942caabdc011b21 100644
--- a/cmake/modules/SearchInstalledSoftware.cmake
+++ b/cmake/modules/SearchInstalledSoftware.cmake
@@ -99,8 +99,7 @@ if(BORNAGAIN_PYTHON OR BORNAGAIN_GUI)
 endif()
 
 
-
 # --- ROOT ---
 if(ROOT_SUPPORT)
-find_package(ROOT)
+    find_package(ROOT)
 endif()