diff --git a/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff.cxx b/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff.cxx
index c6998f89ec17eca1639633afe45cbbd3d3261095..bce3fb3842128368962130b97720bf4548e179a1 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff.cxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff.cxx
@@ -12,7 +12,6 @@
 #include <map>
 
 #include "TSystem.h"
-#include "TMVA/Reader.h"
 #include "TMVA/Tools.h"
 #include "TMVA/MethodCuts.h"
 
@@ -51,7 +50,9 @@ EQM_FBR_MLP_Keff::EQM_FBR_MLP_Keff(string TMVAWeightPath, double keff_target, st
 	fInformationFile = InformationFile;
 	LoadKeyword();
 	ReadNFO();//Getting information from fMLPInformationFile
-	
+
+    InitialiseTMVAReader();
+
 	if(fMaximalContent == 0 )
 	{
 		ERROR<<"Can't find the k_maxfiscontent keyword in .nfo file\n this is mandatory"<<endl;
@@ -97,7 +98,9 @@ EQM_FBR_MLP_Keff::EQM_FBR_MLP_Keff(CLASSLogger* log, string TMVAWeightPath, doub
 	fInformationFile = InformationFile;
 	LoadKeyword();
 	ReadNFO();//Getting information from fMLPInformationFile
-	
+
+    InitialiseTMVAReader();
+
 	if(fMaximalContent == 0 )
 	{
 		ERROR<<"Can't find the k_maxfiscontent keyword in .nfo file\n this is mandatory"<<endl;
@@ -124,112 +127,60 @@ EQM_FBR_MLP_Keff::EQM_FBR_MLP_Keff(CLASSLogger* log, string TMVAWeightPath, doub
 
 	DBGL
 }
-//________________________________________________________________________
-TTree* EQM_FBR_MLP_Keff::CreateTMVAInputTree(IsotopicVector TheFreshfuel, double ThisTime)
+
+void EQM_FBR_MLP_Keff::InitialiseTMVAReader()
 {
-	DBGL
 
-	/******Create Input data tree to be interpreted by TMVA::Reader***/
-	TTree*   InputTree = new TTree("InTMPKef", "InTMPKef");
+    for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
+        InputTMVA.push_back(0);
 
-	vector<float> 	InputTMVA;
-	for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
-		InputTMVA.push_back(0);
+    reader = new TMVA::Reader( "Silent" );
 
-	float Time = 0;
 
-	IsotopicVector IVInputTMVA;
-	map<ZAI ,string >::iterator it;
-	int j = 0;
+    // Create a set of variables and declare them to the reader
+    // - the variable names MUST corresponds in name and type to those given in the weight file(s) used
+    vector<float> 	InputTMVA;
+    for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
+        InputTMVA.push_back(0);
+    Float_t Time;
 
-	for( it = fMapOfTMVAVariableNames.begin()  ; it != fMapOfTMVAVariableNames.end() ; it++)
-	{
-		InputTree->Branch( ((*it).second).c_str()	,&InputTMVA[j], ((*it).second + "/F").c_str());
-		IVInputTMVA+=  ((*it).first)*1;
-		j++;
-	}
+    map<ZAI ,string >::iterator it;
+    int j = 0;
+    for( it = fMapOfTMVAVariableNames.begin()  ; it != fMapOfTMVAVariableNames.end() ; it++)
+        {
+        reader->AddVariable( ( (*it).second ).c_str(),&InputTMVA[j]);
+        IVInputTMVA +=  ((*it).first)*1;
+        j++;
+        }
 
-	if(ThisTime != -1)
-		InputTree->Branch(	"Time"	,&Time	,"Time/F"	);
+}
 
-	IsotopicVector IVAccordingToUserInfoFile = TheFreshfuel.GetThisComposition(IVInputTMVA);
+void EQM_FBR_MLP_Keff::UpdateInputComposition(IsotopicVector TheFreshfuel)
+{
 
-	double Ntot = IVAccordingToUserInfoFile.GetSumOfAll();
 
-	IVAccordingToUserInfoFile = IVAccordingToUserInfoFile/Ntot;
+    IsotopicVector IVAccordingToUserInfoFile = TheFreshfuel.GetThisComposition(IVInputTMVA);
 
-	j = 0;
-	map<ZAI ,string >::iterator it2;
 
-	for( it2 = fMapOfTMVAVariableNames.begin() ; it2 != fMapOfTMVAVariableNames.end() ; it2++)
-	{
-		InputTMVA[j] = IVAccordingToUserInfoFile.GetZAIIsotopicQuantity( (*it2).first ) ;
-		j++;
-	}
+    map<ZAI,string>::iterator it;
+    int j = 0;
 
-	Time = ThisTime;
+    for( it = fMapOfTMVAVariableNames.begin() ; it != fMapOfTMVAVariableNames.end() ; it++)
+        {
+        InputTMVA[j] = IVAccordingToUserInfoFile.GetZAIIsotopicQuantity( (*it).first ) ;
+        j++;
+        }
 
-	InputTree->Fill();
+}
 
-	DBGL
-	return InputTree;
 
-}
 //________________________________________________________________________
-double EQM_FBR_MLP_Keff::ExecuteTMVA(TTree* InputTree, bool IsTimeDependent)
+double EQM_FBR_MLP_Keff::ExecuteTMVA(IsotopicVector TheFreshfuel)
 {
 	DBGL
-
-	// --- Create the Reader object
-	TMVA::Reader *reader = new TMVA::Reader( "Silent" );
-
-	// Create a set of variables and declare them to the reader
-	// - the variable names MUST corresponds in name and type to those given in the weight file(s) used
-	vector<float> 	InputTMVA;
-	for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
-		InputTMVA.push_back(0);
-	
-	Float_t Time = 0;
-
-	
-	map<ZAI ,string >::iterator it;
-	int j = 0;
-	
-	
-	for( it = fMapOfTMVAVariableNames.begin()  ; it != fMapOfTMVAVariableNames.end() ; it++)
-	{	reader->AddVariable( ( (*it).second ).c_str(),&InputTMVA[j]);
-		j++;
-	}
-
-	if(IsTimeDependent)
-		reader->AddVariable( "Time" ,&Time);
-
-	
 	
-	// --- Book the MVA methods
+	Float_t val = (reader->EvaluateRegression( "MLP Method" ))[0];
 
-	// Book method MLP
-	TString methodName = "MLP method";
-	reader->BookMVA( methodName, fTMVAWeightPath );
-
-	map<ZAI ,string >::iterator it2;
-	j = 0;
-	for( it2 = fMapOfTMVAVariableNames.begin()  ; it2 != fMapOfTMVAVariableNames.end() ; it2++)
-	{
-		InputTree->SetBranchAddress(( (*it2).second ).c_str(),&InputTMVA[j]);
-		j++;
-	}
-
-	if(IsTimeDependent)
-		InputTree->SetBranchAddress( "Time" ,&Time );
-
-	InputTree->GetEntry(0);
-	
-	Float_t val = (reader->EvaluateRegression( methodName ))[0];
-
-	delete reader;
-
-	DBGL
 	return (double)val;	//return k_{eff}(t = Time)
 }
 //________________________________________________________________________
@@ -312,7 +263,7 @@ double EQM_FBR_MLP_Keff::GetFissileMolarFraction(IsotopicVector Fissile,Isotopic
 	double OldFissileContentPlus = fMaximalContent;
 	double PredictedKeff = 0 ;
 	IsotopicVector FreshFuel = (1-FissileContent)*(Fertile/Fertile.GetSumOfAll()) + FissileContent*(Fissile/Fissile.GetSumOfAll());
-	double OldPredictedKeff = GetKeffAtFixedTime(FreshFuel);
+	double OldPredictedKeff = ExecuteTMVA(FreshFuel);
 	
 	double Precision = fPCMprecision/1e5*fTargetKeff; //pcm to 1
 	
@@ -339,7 +290,7 @@ double EQM_FBR_MLP_Keff::GetFissileMolarFraction(IsotopicVector Fissile,Isotopic
 		
 		IsotopicVector FreshFuel = (1-FissileContent)*(Fertile/Fertile.GetSumOfAll()) + FissileContent*(Fissile/Fissile.GetSumOfAll());
 		
-		PredictedKeff = GetKeffAtFixedTime(FreshFuel);
+		PredictedKeff = ExecuteTMVA(FreshFuel);
 		
 		OldPredictedKeff = PredictedKeff;
 		count ++;
diff --git a/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff.hxx b/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff.hxx
index 9a12a9d596a9e7b803f397eed25344a0a3eb4420..2da269a8451c1ba19d9328cce4813432bd652765 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff.hxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff.hxx
@@ -4,6 +4,8 @@
 #include "EquivalenceModel.hxx"
 #include "TTree.h"
 #include "TGraph.h"
+#include "TMVA/Reader.h"
+
 #include <string>
 #include <fstream>
 #include <iostream>
@@ -100,9 +102,11 @@ class EQM_FBR_MLP_Keff : public EquivalenceModel
 	 \name TMVA related  methods
 	 */
 	//@{
-	TTree* 	CreateTMVAInputTree(IsotopicVector FreshFuel, double ThisTime);//!<Create input tmva tree to be read by ExecuteTMVA
+    void InitialiseTMVAReader();
+
+	void 	UpdateInputComposition(IsotopicVector FreshFuel);//!<Create input tmva tree to be read by ExecuteTMVA
 	
-	double 	ExecuteTMVA(TTree* theTree, bool IsTimeDependant);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree
+    double 	ExecuteTMVA(IsotopicVector TheFreshfuel);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree
 	//@}
 	
 	
@@ -177,14 +181,17 @@ class EQM_FBR_MLP_Keff : public EquivalenceModel
 	
 	double 	fTargetKeff;		//!< Use for Varying Fissile content to reach fTargetKeff at time used in the MLP Training
 	
+    TMVA::Reader *reader;
+    vector<float> InputTMVA;
+    IsotopicVector IVInputTMVA;
+    float Time;
+
 
 	/*!
 	 \name keff prediction methods & keff averaging
 	 */
 	//@{
 
-		double 	GetKeffAtFixedTime(IsotopicVector FreshFuel){TTree* Input = CreateTMVAInputTree(FreshFuel,-1);  double Keff = ExecuteTMVA( Input, false ); delete Input; return Keff;} //!<time independant since the MLP is trained for 1 time
-
 		TGraph* BuildKeffGraph(IsotopicVector FreshFuel);
 		TGraph* BuildAverageKeffGraph(TGraph* GRAPH_KEFF);
 		double 	GetKeffAt(TGraph* GRAPH_KEFF, int Step);
diff --git a/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff_BOUND.cxx b/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff_BOUND.cxx
index 47cc75a675bfe3c3cd31bcdf4c6183bae76d8f52..fdc098c95e8f33514b64324a2ffdd5ebfc32ddfb 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff_BOUND.cxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff_BOUND.cxx
@@ -11,7 +11,6 @@
 #include <cassert>
 
 #include "TSystem.h"
-#include "TMVA/Reader.h"
 #include "TMVA/Tools.h"
 #include "TMVA/MethodCuts.h"
 
@@ -52,7 +51,10 @@ EQM_FBR_MLP_Keff_BOUND::EQM_FBR_MLP_Keff_BOUND(string TMVAWeightPath,  int NumOf
 	
 	LoadKeyword();
 	ReadNFO();//Getting information from fInformationFile
-	
+
+
+    InitialiseTMVAReader();
+
 	
 	/* OTHER MODEL PARAMETERS */
 	
@@ -115,7 +117,8 @@ EQM_FBR_MLP_Keff_BOUND::EQM_FBR_MLP_Keff_BOUND(CLASSLogger* log, string TMVAWeig
 	LoadKeyword();
 	ReadNFO();//Getting information from fInformationFile
 	
-	
+    InitialiseTMVAReader();
+
 	
 	/* OTHER MODEL PARAMETERS */
 	
@@ -165,9 +168,7 @@ TGraph* EQM_FBR_MLP_Keff_BOUND::BuildKeffGraph(IsotopicVector FreshFuel)
 	TGraph * keffGraph = new TGraph();
 	for(int i = 0 ; i < (int) fMLP_Time.size() ; i++)
 	{
-		TTree *InputTree = CreateTMVAInputTree(FreshFuel,(float) fMLP_Time[i]);
-		double keff_t = ExecuteTMVA( InputTree, true );
-		delete InputTree;
+		double keff_t = ExecuteTMVA( FreshFuel, (float)fMLP_Time[i] );
 		keffGraph->SetPoint(i, (double)fMLP_Time[i], keff_t );
 	}
 	
@@ -222,106 +223,72 @@ double EQM_FBR_MLP_Keff_BOUND::GetKeffAt(TGraph* GRAPH_KEFF, int Step)
 	return Keff;
 }
 //________________________________________________________________________
-TTree* EQM_FBR_MLP_Keff_BOUND::CreateTMVAInputTree(IsotopicVector TheFreshfuel, double ThisTime)
+
+
+void EQM_FBR_MLP_Keff_BOUND::UpdateInputComposition(IsotopicVector TheFreshfuel, double ThisTime)
 {
-	DBGL
 
-	/******Create Input data tree to be interpreted by TMVA::Reader***/
-	TTree*   InputTree = new TTree("InTMPKef", "InTMPKef");
-	
-	vector<float> 	InputTMVA;
-	for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
-		InputTMVA.push_back(0);
-	
-	float Time = 0;
-	
-	IsotopicVector IVInputTMVA;
-	map<ZAI ,string >::iterator it;
-	int j = 0;
-	
-	for( it = fMapOfTMVAVariableNames.begin()  ; it != fMapOfTMVAVariableNames.end() ; it++)
-	{
-		InputTree->Branch( ((*it).second).c_str()	,&InputTMVA[j], ((*it).second + "/F").c_str());
-		IVInputTMVA+=  ((*it).first)*1;
-		j++;
-	}
-	
-	if(ThisTime != -1)
-		InputTree->Branch(	"Time"	,&Time	,"Time/F"	);
-	
-	IsotopicVector IVAccordingToUserInfoFile = TheFreshfuel.GetThisComposition(IVInputTMVA);
-	
-	double Ntot = IVAccordingToUserInfoFile.GetSumOfAll();
-	
-	IVAccordingToUserInfoFile = IVAccordingToUserInfoFile/Ntot;
-	
-	j = 0;
-	map<ZAI ,string >::iterator it2;
-	
-	for( it2 = fMapOfTMVAVariableNames.begin() ; it2 != fMapOfTMVAVariableNames.end() ; it2++)
-	{
-		InputTMVA[j] = IVAccordingToUserInfoFile.GetZAIIsotopicQuantity( (*it2).first ) ;
-		j++;
-	}
-	
-	Time = ThisTime;
-	
-	InputTree->Fill();
-	
-	DBGL
-	return InputTree;
-	
+
+    IsotopicVector IVAccordingToUserInfoFile = TheFreshfuel.GetThisComposition(IVInputTMVA);
+
+
+    map<ZAI,string>::iterator it;
+    int j = 0;
+
+    for( it = fMapOfTMVAVariableNames.begin() ; it != fMapOfTMVAVariableNames.end() ; it++)
+        {
+        InputTMVA[j] = IVAccordingToUserInfoFile.GetZAIIsotopicQuantity( (*it).first ) ;
+        j++;
+        }
+    
+    Time = ThisTime;
+    
+}
+
+
+void EQM_FBR_MLP_Keff_BOUND::InitialiseTMVAReader()
+{
+
+    for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
+        InputTMVA.push_back(0);
+
+    reader = new TMVA::Reader( "Silent" );
+
+
+    // Create a set of variables and declare them to the reader
+    // - the variable names MUST corresponds in name and type to those given in the weight file(s) used
+    vector<float> 	InputTMVA;
+    for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
+        InputTMVA.push_back(0);
+    Float_t Time;
+
+    map<ZAI ,string >::iterator it;
+    int j = 0;
+    for( it = fMapOfTMVAVariableNames.begin()  ; it != fMapOfTMVAVariableNames.end() ; it++)
+        {
+        reader->AddVariable( ( (*it).second ).c_str(),&InputTMVA[j]);
+        IVInputTMVA +=  ((*it).first)*1;
+        j++;
+        }
+
+    if(fTMVAWeightPath.size() == 1)
+        reader->AddVariable( "Time" ,&Time);
+    
+    
 }
+
 //________________________________________________________________________
-double EQM_FBR_MLP_Keff_BOUND::ExecuteTMVA(TTree* InputTree, bool IsTimeDependent)
+double EQM_FBR_MLP_Keff_BOUND::ExecuteTMVA(IsotopicVector TheFreshfuel, double ThisTime)
 {
-	DBGL
+    UpdateInputComposition(TheFreshfuel,ThisTime);
 
-	// --- Create the Reader object
-	TMVA::Reader *reader = new TMVA::Reader( "Silent" );
-	
-	// Create a set of variables and declare them to the reader
-	// - the variable names MUST corresponds in name and type to those given in the weight file(s) used
-	vector<float> 	InputTMVA;
-	for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
-		InputTMVA.push_back(0);
-	Float_t Time;
-	
-	map<ZAI ,string >::iterator it;
-	int j = 0;
-	for( it = fMapOfTMVAVariableNames.begin()  ; it != fMapOfTMVAVariableNames.end() ; it++)
-	{	reader->AddVariable( ( (*it).second ).c_str(),&InputTMVA[j]);
-		j++;
-	}
-	
-	if(IsTimeDependent)
-		reader->AddVariable( "Time" ,&Time);
-	
-	// --- Book the MVA methods
-	
-	// Book method MLP
-	TString methodName = "MLP method";
-	reader->BookMVA( methodName, fTMVAWeightPath );
-	
-	map<ZAI ,string >::iterator it2;
-	j = 0;
-	for( it2 = fMapOfTMVAVariableNames.begin()  ; it2 != fMapOfTMVAVariableNames.end() ; it2++)
-	{
-		InputTree->SetBranchAddress(( (*it2).second ).c_str(),&InputTMVA[j]);
-		j++;
-	}
-	
-	if(IsTimeDependent)
-		InputTree->SetBranchAddress( "Time" ,&Time );
-	
-	InputTree->GetEntry(0);
-	Float_t val = (reader->EvaluateRegression( methodName ))[0];
-	
-	delete reader;
-	
-	DBGL
-	return (double)val;	//return k_{eff}(t = Time)
+    reader->BookMVA( "MLP Method", fTMVAWeightPath );
+
+    Float_t val = (reader->EvaluateRegression(  "MLP Method" ))[0];
+
+    return (double)val;//retourn k_{inf}(t = Time)
 }
+
 //________________________________________________________________________
 void EQM_FBR_MLP_Keff_BOUND::LoadKeyword()
 {
diff --git a/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff_BOUND.hxx b/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff_BOUND.hxx
index e9984b5b4d4962c990c79296d8b0f3edf6ab855e..df0219738d387fe09be88211c9bb126530abbf16 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff_BOUND.hxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_FBR_MLP_Keff_BOUND.hxx
@@ -2,6 +2,8 @@
 #define _EQM_FBR_MLP_Keff_BOUND_HXX_
 
 #include "EquivalenceModel.hxx"
+
+#include "TMVA/Reader.h"
 #include "TTree.h"
 #include "TGraph.h"
 
@@ -106,9 +108,12 @@ class EQM_FBR_MLP_Keff_BOUND : public EquivalenceModel
 	 \name TMVA related  methods
 	 */
 	//@{
-	TTree* 	CreateTMVAInputTree(IsotopicVector FreshFuel, double ThisTime);//!<Create input tmva tree to be read by ExecuteTMVA
-	
-	double 	ExecuteTMVA(TTree* theTree, bool IsTimeDependant);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree
+
+    void InitialiseTMVAReader();
+
+    void UpdateInputComposition(IsotopicVector TheFreshfuel, double ThisTime);
+
+	double 	ExecuteTMVA(IsotopicVector TheFreshfuel, double ThisTime);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree
 	//@}
 	
 	
@@ -179,7 +184,11 @@ class EQM_FBR_MLP_Keff_BOUND : public EquivalenceModel
 	double 	fTargetKeff;		//!< Use for Varying Fissile content to reach fTargetKeff at time used in the MLP Training
 	
 	
-	
+    TMVA::Reader *reader;
+    vector<float> InputTMVA;
+    IsotopicVector IVInputTMVA;
+    float Time;
+
 	
 	
 	/*!
@@ -187,8 +196,10 @@ class EQM_FBR_MLP_Keff_BOUND : public EquivalenceModel
 	 */
 	//@{
 	 
-	double 	GetKeffAtFixedTime(IsotopicVector FreshFuel){TTree* Input = CreateTMVAInputTree(FreshFuel,-1);  double Keff = ExecuteTMVA( Input, false ); delete Input; return Keff;} //!<time independant since the MLP is trained for 1 time
-
+/*	double 	GetKeffAtFixedTime(IsotopicVector FreshFuel){
+        TTree* Input = CreateTMVAInputTree(FreshFuel,-1);
+        double Keff = ExecuteTMVA( Input, false ); delete Input; return Keff;} //!<time independant since the MLP is trained for 1 time
+*/
 	TGraph* BuildKeffGraph(IsotopicVector FreshFuel);
 	TGraph* BuildAverageKeffGraph(TGraph* GRAPH_KEFF);
 	
diff --git a/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.cxx b/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.cxx
index 24a8eb53f850fa68de15c5ef1bbfeef47bc7b881..871f5efa44c0e412e50671aad5fd76693d9f2cfe 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.cxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.cxx
@@ -11,7 +11,6 @@
 #include <cassert>
 
 #include "TSystem.h"
-#include "TMVA/Reader.h"
 #include "TMVA/Tools.h"
 #include "TMVA/MethodCuts.h"
 
@@ -75,7 +74,9 @@ EQM_MLP_Kinf::EQM_MLP_Kinf(CLASSLogger* log, string WeightPathAlpha0, string Wei
 	LoadKeyword();
 	ReadNFO();//Getting information from fInformationFile
 	
-	fNumberOfBatch = NumOfBatch;
+    InitialiseTMVAReader();
+
+    fNumberOfBatch = NumOfBatch;
 	fKThreshold = CriticalityThreshold ;
 	SetBurnUpPrecision(0.005);//1 % of the targeted burnup
 	SetBuildFuelFirstGuess(0.04);//First fissile content guess for the EquivalenceModel::BuildFuel algorithm
@@ -115,7 +116,9 @@ EQM_MLP_Kinf::EQM_MLP_Kinf(string TMVAWeightPath,  int NumOfBatch, string Inform
 	fInformationFile = InformationFile;
 	LoadKeyword();
 	ReadNFO();//Getting information from fInformationFile
-	
+
+    InitialiseTMVAReader();
+
 	fNumberOfBatch = NumOfBatch;
 	fKThreshold = CriticalityThreshold ;
 	SetBurnUpPrecision(0.005);//1 % of the targeted burnup
@@ -152,7 +155,9 @@ EQM_MLP_Kinf::EQM_MLP_Kinf(CLASSLogger* log, string TMVAWeightPath,  int NumOfBa
 	fInformationFile = InformationFile;
 	LoadKeyword();
 	ReadNFO();//Getting information from fMLPInformationFile
-	
+
+    InitialiseTMVAReader();
+
 	fNumberOfBatch = NumOfBatch;
 	fKThreshold = CriticalityThreshold ;
 	SetBurnUpPrecision(0.005);//1 % of the targeted burnup
@@ -257,100 +262,66 @@ void EQM_MLP_Kinf::ReadLine(string line)
 	
 	DBGL
 }
-//________________________________________________________________________
-TTree* EQM_MLP_Kinf::CreateTMVAInputTree(IsotopicVector TheFreshfuel, double ThisTime)
+
+void EQM_MLP_Kinf::InitialiseTMVAReader()
 {
-	/******Create Input data tree to be interpreted by TMVA::Reader***/
-	TTree*   InputTree = new TTree("InTMPKinf", "InTMPKinf");
-	
-	vector<float> 	InputTMVA;
-	for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
-		InputTMVA.push_back(0);
-	
-	float Time = 0;
-	
-	IsotopicVector IVInputTMVA;
-	map<ZAI ,string >::iterator it;
-	int j = 0;
-	
-	for( it = fMapOfTMVAVariableNames.begin()  ; it != fMapOfTMVAVariableNames.end() ; it++)
-	{
-		InputTree->Branch( ((*it).second).c_str()	,&InputTMVA[j], ((*it).second + "/F").c_str());
-		IVInputTMVA+=  ((*it).first)*1;
-		j++;
-	}
-	
-	if(ThisTime != -1)
-		InputTree->Branch(	"Time"	,&Time	,"Time/F"	);
-	
-	IsotopicVector IVAccordingToUserInfoFile = TheFreshfuel.GetThisComposition(IVInputTMVA);
-	
-	double Ntot = IVAccordingToUserInfoFile.GetSumOfAll();
-	
-	IVAccordingToUserInfoFile = IVAccordingToUserInfoFile/Ntot;
-	
-	j = 0;
-	map<ZAI ,string >::iterator it2;
-	
-	for( it2 = fMapOfTMVAVariableNames.begin() ; it2 != fMapOfTMVAVariableNames.end() ; it2++)
+
+    for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
+        InputTMVA.push_back(0);
+
+    reader = new TMVA::Reader( "Silent" );
+
+
+    // Create a set of variables and declare them to the reader
+    // - the variable names MUST corresponds in name and type to those given in the weight file(s) used
+    vector<float> 	InputTMVA;
+    for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
+        InputTMVA.push_back(0);
+    Float_t Time;
+
+    map<ZAI ,string >::iterator it;
+    int j = 0;
+    for( it = fMapOfTMVAVariableNames.begin()  ; it != fMapOfTMVAVariableNames.end() ; it++)
+        {
+            reader->AddVariable( ( (*it).second ).c_str(),&InputTMVA[j]);
+            IVInputTMVA +=  ((*it).first)*1;
+            j++;
+        }
+
+    if(fTMVAWeightPath.size() == 1)
+        reader->AddVariable( "Time" ,&Time);
+
+}
+
+
+void EQM_MLP_Kinf::UpdateInputComposition(IsotopicVector TheFreshfuel, double ThisTime)
+{
+
+
+    IsotopicVector IVAccordingToUserInfoFile = TheFreshfuel.GetThisComposition(IVInputTMVA);
+
+
+    map<ZAI,string>::iterator it;
+    int j = 0;
+
+	for( it = fMapOfTMVAVariableNames.begin() ; it != fMapOfTMVAVariableNames.end() ; it++)
 	{
-		InputTMVA[j] = IVAccordingToUserInfoFile.GetZAIIsotopicQuantity( (*it2).first ) ;
+		InputTMVA[j] = IVAccordingToUserInfoFile.GetZAIIsotopicQuantity( (*it).first ) ;
 		j++;
 	}
 	
 	Time = ThisTime;
-	
-	InputTree->Fill();
-	
-	return InputTree;
-	
+
 }
 //________________________________________________________________________
-double EQM_MLP_Kinf::ExecuteTMVA(TTree* InputTree,string WeightPath, bool IsTimeDependent)
+double EQM_MLP_Kinf::ExecuteTMVA(IsotopicVector TheFreshfuel, double ThisTime, string TMVAWeightPath)
 {
-	
-	// --- Create the Reader object
-	TMVA::Reader *reader = new TMVA::Reader( "Silent" );
-	
-	// Create a set of variables and declare them to the reader
-	// - the variable names MUST corresponds in name and type to those given in the weight file(s) used
-	vector<float> 	InputTMVA;
-	for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
-		InputTMVA.push_back(0);
-	Float_t Time;
-	
-	map<ZAI ,string >::iterator it;
-	int j = 0;
-	for( it = fMapOfTMVAVariableNames.begin()  ; it != fMapOfTMVAVariableNames.end() ; it++)
-	{	reader->AddVariable( ( (*it).second ).c_str(),&InputTMVA[j]);
-		j++;
-	}
-	
-	if(IsTimeDependent)
-		reader->AddVariable( "Time" ,&Time);
-	
-	// --- Book the MVA methods
-	
-	// Book method MLP
-	TString methodName = "MLP method";
-	reader->BookMVA( methodName, WeightPath );
-	
-	map<ZAI ,string >::iterator it2;
-	j = 0;
-	for( it2 = fMapOfTMVAVariableNames.begin()  ; it2 != fMapOfTMVAVariableNames.end() ; it2++)
-	{
-		InputTree->SetBranchAddress(( (*it2).second ).c_str(),&InputTMVA[j]);
-		j++;
-	}
-	
-	if(IsTimeDependent)
-		InputTree->SetBranchAddress( "Time" ,&Time );
-	
-	InputTree->GetEntry(0);
-	Float_t val = (reader->EvaluateRegression( methodName ))[0];
-	
-	delete reader;
-	
+    UpdateInputComposition(TheFreshfuel,ThisTime);
+
+    reader->BookMVA( "MLP Method", TMVAWeightPath );
+
+    Float_t val = (reader->EvaluateRegression(  "MLP Method" ))[0];
+
 	return (double)val;//retourn k_{inf}(t = Time)
 }
 //________________________________________________________________________
@@ -371,9 +342,7 @@ double EQM_MLP_Kinf::GetMaximumBurnUp_MLP(IsotopicVector TheFuel, double TargetB
 	for(int b = 0;b<fNumberOfBatch;b++)
 	{
 		float TheTime = (b+1)*TheFinalTime/fNumberOfBatch;
-		TTree* InputTree = CreateTMVAInputTree(TheFuel,TheTime);
-		OldPredictedk_av += ExecuteTMVA(InputTree,fTMVAWeightPath[0],true);
-		delete InputTree;
+        OldPredictedk_av += ExecuteTMVA(TheFuel,TheTime, fTMVAWeightPath[0]);
 	}
 	OldPredictedk_av/= fNumberOfBatch;
 	
@@ -409,9 +378,7 @@ double EQM_MLP_Kinf::GetMaximumBurnUp_MLP(IsotopicVector TheFuel, double TargetB
 		for(int b = 0;b<fNumberOfBatch;b++)
 		{
 			float TheTime = (b+1)*TheFinalTime/fNumberOfBatch;
-			TTree* InputTree = CreateTMVAInputTree(TheFuel,TheTime);
-			k_av += ExecuteTMVA(InputTree,fTMVAWeightPath[0],true);
-			delete InputTree;
+			k_av += ExecuteTMVA(TheFuel,TheTime, fTMVAWeightPath[0]);
 		}
 		k_av/= fNumberOfBatch;
 		
@@ -426,12 +393,10 @@ double EQM_MLP_Kinf::GetMaximumBurnUp_MLP(IsotopicVector TheFuel, double TargetB
 double EQM_MLP_Kinf::GetMaximumBurnUp_Pol2(IsotopicVector TheFuel,double TargetBU)
 {
 	
-	TTree* InputTree = CreateTMVAInputTree(TheFuel,-1);
-	double Alpha_0 = ExecuteTMVA(InputTree,fTMVAWeightPath[0],false);
-	double Alpha_1 = ExecuteTMVA(InputTree,fTMVAWeightPath[1],false);
-	double Alpha_2 = ExecuteTMVA(InputTree,fTMVAWeightPath[2],false);
-	delete InputTree;
-	
+	double Alpha_0 = ExecuteTMVA(TheFuel, -1, fTMVAWeightPath[0]);
+	double Alpha_1 = ExecuteTMVA(TheFuel, -1, fTMVAWeightPath[1]);
+	double Alpha_2 = ExecuteTMVA(TheFuel, -1, fTMVAWeightPath[2]);
+
 	if(Alpha_0 < fKThreshold) //not enought fissile for sure !!
 		return 0;
 	
diff --git a/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.hxx b/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.hxx
index 48e0296bb06618658cfb41c7f3e883a54b34fe4c..43f9e384b92bc16c9b05a5573d58ebdf90de1609 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.hxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.hxx
@@ -3,6 +3,8 @@
 
 #include "EquivalenceModel.hxx"
 #include "TTree.h"
+#include "TMVA/Reader.h"
+
 #include <map>
 
 using namespace std;
@@ -48,9 +50,9 @@ class EQM_MLP_Kinf : public EquivalenceModel
  	/// @f$\alpha_{0}@f$, @f$\alpha_{1}@f$, @f$\alpha_{2}@f$ are predict by 3 MLP (one for each)
  	/*!
 	 Create a EQM_MLP_Kinf 
-	 \param  TMVAWeightPath0 :  PAth to the .xml file containing neural network informations for @f$\alpha_{0}@f$ prediction : PATH/TMVAWeight.xml (total path to tmva weight)
-	 \param  TMVAWeightPath1 :  PAth to the .xml file containing neural network informations for @f$\alpha_{1}@f$ prediction: PATH/TMVAWeight.xml (total path to tmva weight)
-	 \param  TMVAWeightPath2 :  PAth to the .xml file containing neural network informations for @f$\alpha_{2}@f$ prediction: PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath0 :  Path to the .xml file containing neural network informations for @f$\alpha_{0}@f$ prediction : PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath1 :  Path to the .xml file containing neural network informations for @f$\alpha_{1}@f$ prediction: PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath2 :  Path to the .xml file containing neural network informations for @f$\alpha_{2}@f$ prediction: PATH/TMVAWeight.xml (total path to tmva weight)
 	 \param  InformationFile : Total path to the file containing time steps, fissile and ferile list (ante and post fabrication time cooling). Default is the same total path as TMVAWeightPath but extension is replaced by .nfo
 	 \param  NumOfBatch : Number of batch for the loading plan (often 3 or 4 for PWR)
 	 \param  CriticalityThreshold : Threshold for the @f$k_{\infty}@f$ (see detailed description)
@@ -63,9 +65,9 @@ class EQM_MLP_Kinf : public EquivalenceModel
 	 /*!
 	 Create a EQM_MLP_Kinf 
 	 \param log : use for log
-	 \param  TMVAWeightPath0 :  PAth to the .xml file containing neural network informations for @f$\alpha_{0}@f$ prediction : PATH/TMVAWeight.xml (total path to tmva weight)
-	 \param  TMVAWeightPath1 :  PAth to the .xml file containing neural network informations for @f$\alpha_{1}@f$ prediction: PATH/TMVAWeight.xml (total path to tmva weight)
-	 \param  TMVAWeightPath2 :  PAth to the .xml file containing neural network informations for @f$\alpha_{2}@f$ prediction: PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath0 :  Path to the .xml file containing neural network informations for @f$\alpha_{0}@f$ prediction : PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath1 :  Path to the .xml file containing neural network informations for @f$\alpha_{1}@f$ prediction: PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath2 :  Path to the .xml file containing neural network informations for @f$\alpha_{2}@f$ prediction: PATH/TMVAWeight.xml (total path to tmva weight)
 	 \param  InformationFile : Total path to the file containing time steps, fissile and ferile list (ante and post fabrication time cooling). Default is the same total path as TMVAWeightPath but extension is replaced by .nfo
 	 \param  NumOfBatch : Number of batch for the loading plan (often 3 or 4 for PWR)
 	 \param  CriticalityThreshold : Threshold for the @f$k_{\infty}@f$ (see detailed description)
@@ -76,7 +78,7 @@ class EQM_MLP_Kinf : public EquivalenceModel
 	/// Neural network predictor. The kinf(t) is predicted with a MLP 
 	/*!
 	 Create a EQM_MLP_Kinf 
-	 \param  TMVAWeightPath :  PAth to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath :  Path to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
 	 \param  NumOfBatch : Number of batch for the loading plan (often 3 or 4 for PWR)
 	 \param  InformationFile : Total path to the file containing time steps, fissile and ferile list (ante and post fabrication time cooling). Default is the same total path as TMVAWeightPath but extension is replaced by .nfo
 	 \param  CriticalityThreshold : Threshold for the @f$k_{\infty}@f$ (see detailed description)
@@ -89,7 +91,7 @@ class EQM_MLP_Kinf : public EquivalenceModel
 	/*!
 	 Create a EQM_MLP_Kinf
 	 \param log : use for log
-	 \param  TMVAWeightPath :  PAth to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath :  Path to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
 	 \param  NumOfBatch : Number of batch for the loading plan (often 3 or 4 for PWR)
 	 \param  InformationFile : Total path to the file containing time steps, fissile and ferile list (ante and post fabrication time cooling). Default is the same total path as TMVAWeightPath but extension is replaced by .nfo
 	 \param  CriticalityThreshold : Threshold for the @f$k_{\infty}@f$ (see detailed description)
@@ -137,9 +139,10 @@ class EQM_MLP_Kinf : public EquivalenceModel
 	 \name TMVA related methods
 	 */
 	//@{
+    void InitialiseTMVAReader();
 
-	TTree* CreateTMVAInputTree(IsotopicVector FreshFuel, double ThisTime);//!<Create input tmva tree to be read by ExecuteTMVA
-	double ExecuteTMVA(TTree* theTree, string WeightPath, bool IsTimeDependant);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree
+    void  UpdateInputComposition(IsotopicVector TheFreshfuel, double ThisTime );
+	double ExecuteTMVA(IsotopicVector TheFreshfuel, double ThisTime, string TMVAWeightPath);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree
 
 	//@}
 
@@ -213,6 +216,10 @@ class EQM_MLP_Kinf : public EquivalenceModel
 	double 	fBurnUpPrecision;	//!< precision on Burnup 
 	double 	fPCMprecision;		//!< precision on @f$\langle k \rangle@f$ prediction [pcm]
 			
+    TMVA::Reader *reader;
+    vector<float> InputTMVA;
+    IsotopicVector IVInputTMVA;
+    float Time;
 
 };
 
diff --git a/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX.cxx b/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX.cxx
index af3b7c820377a9c76b13ee7b95ec9339076c5ef2..82c64e0fc48643ca63c97570c6dfa1dd3ff7a544 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX.cxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX.cxx
@@ -11,7 +11,6 @@
 #include <cassert>
 
 #include "TSystem.h"
-#include "TMVA/Reader.h"
 #include "TMVA/Tools.h"
 #include "TMVA/MethodCuts.h"
 
@@ -29,6 +28,18 @@ EQM_PWR_MLP_MOX::EQM_PWR_MLP_MOX(string TMVAWeightPath):EquivalenceModel(new CLA
 {
 	fTMVAWeightPath = TMVAWeightPath;
 
+    reader = new TMVA::Reader( "Silent" );
+    reader->BookMVA( "MLP Method", fTMVAWeightPath );
+    reader->AddVariable( "BU"   		,&BU );
+    reader->AddVariable( "U5_enrichment",&U5_enrichment );
+    reader->AddVariable( "Pu8"  		,&Pu8 );
+    reader->AddVariable( "Pu9"  		,&Pu9 );
+    reader->AddVariable( "Pu10" 		,&Pu10);
+    reader->AddVariable( "Pu11" 		,&Pu11);
+    reader->AddVariable( "Pu12" 		,&Pu12);
+    reader->AddVariable( "Am1"  		,&Am1 );
+
+
 	ZAI U8(92,238,0);
 	ZAI U5(92,235,0);
 	double U5_enrich = 0.0025;
@@ -57,6 +68,19 @@ EQM_PWR_MLP_MOX::EQM_PWR_MLP_MOX(CLASSLogger* log, string TMVAWeightPath):Equiva
 {
 	fTMVAWeightPath = TMVAWeightPath;
 
+    reader = new TMVA::Reader( "Silent" );
+    reader->BookMVA( "MLP Method", fTMVAWeightPath );
+    reader->AddVariable( "BU"   		,&BU );
+    reader->AddVariable( "U5_enrichment",&U5_enrichment );
+    reader->AddVariable( "Pu8"  		,&Pu8 );
+    reader->AddVariable( "Pu9"  		,&Pu9 );
+    reader->AddVariable( "Pu10" 		,&Pu10);
+    reader->AddVariable( "Pu11" 		,&Pu11);
+    reader->AddVariable( "Pu12" 		,&Pu12);
+    reader->AddVariable( "Am1"  		,&Am1 );
+
+
+
 	ZAI U8(92,238,0);
 	ZAI U5(92,235,0);
 	double U5_enrich = 0.0025;
@@ -81,51 +105,33 @@ EQM_PWR_MLP_MOX::EQM_PWR_MLP_MOX(CLASSLogger* log, string TMVAWeightPath):Equiva
 }
 
 //________________________________________________________________________
-TTree* EQM_PWR_MLP_MOX::CreateTMVAInputTree(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp)
+void EQM_PWR_MLP_MOX::UpdateInputComposition(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp)
 {
-	TTree*   InputTree = new TTree("EQTMP", "EQTMP");
-	float Pu8   		 = 0;
-	float Pu9   		 = 0;
-	float Pu10  		 = 0;
-	float Pu11  		 = 0;
-	float Pu12  		 = 0;
-	float Am1   		 = 0;
-	float U5_enrichment  = 0;
-	float BU  			  = 0;
-
-	InputTree->Branch(	"Pu8"	,&Pu8	,"Pu8/F"	);
-	InputTree->Branch(	"Pu9"	,&Pu9	,"Pu9/F"	);
-	InputTree->Branch(	"Pu10"	,&Pu10	,"Pu10/F"	);
-	InputTree->Branch(	"Pu11"	,&Pu11	,"Pu11/F"	);
-	InputTree->Branch(	"Pu12"	,&Pu12	,"Pu12/F"	);
-	InputTree->Branch(	"Am1"	,&Am1	,"Am1/F"	);
-	InputTree->Branch(	"U5_enrichment"	,&U5_enrichment	,"U5_enrichment/F"	);
-	InputTree->Branch(	"BU"	,&BU	,"BU/F"	);
-
-
-	float U8     = Fertil.GetZAIIsotopicQuantity(92,238,0);
-	float U5     = Fertil.GetZAIIsotopicQuantity(92,235,0);
-	float U4     = Fertil.GetZAIIsotopicQuantity(92,234,0);
-
-	float UTOT = U8 + U5 + U4;
-
-	Pu8    	   = Fissil.GetZAIIsotopicQuantity(94,238,0);
-	Pu9    	   = Fissil.GetZAIIsotopicQuantity(94,239,0);
-	Pu10   	   = Fissil.GetZAIIsotopicQuantity(94,240,0);
-	Pu11   	   = Fissil.GetZAIIsotopicQuantity(94,241,0);
-	Pu12   	   = Fissil.GetZAIIsotopicQuantity(94,242,0);
-	Am1        = Fissil.GetZAIIsotopicQuantity(95,241,0);
-
-	double TOTPU = (Pu8+Pu9+Pu10+Pu11+Pu12+Am1);
-
-	Pu8 = Pu8  / TOTPU;
-	Pu9 = Pu9  / TOTPU;
-	Pu10 = Pu10 / TOTPU;
-	Pu11 = Pu11 / TOTPU;
-	Pu12 = Pu12 / TOTPU;
-	Am1 = Am1  / TOTPU;
-
-	U5_enrichment = U5 / UTOT;
+
+    
+    float U8     = Fertil.GetZAIIsotopicQuantity(92,238,0);
+    float U5     = Fertil.GetZAIIsotopicQuantity(92,235,0);
+    float U4     = Fertil.GetZAIIsotopicQuantity(92,234,0);
+
+    float UTOT = U8 + U5 + U4;
+
+    Pu8    	   = Fissil.GetZAIIsotopicQuantity(94,238,0);
+    Pu9    	   = Fissil.GetZAIIsotopicQuantity(94,239,0);
+    Pu10   	   = Fissil.GetZAIIsotopicQuantity(94,240,0);
+    Pu11   	   = Fissil.GetZAIIsotopicQuantity(94,241,0);
+    Pu12   	   = Fissil.GetZAIIsotopicQuantity(94,242,0);
+    Am1        = Fissil.GetZAIIsotopicQuantity(95,241,0);
+
+    double TOTPU = (Pu8+Pu9+Pu10+Pu11+Pu12+Am1);
+
+    Pu8 = Pu8  / TOTPU;
+    Pu9 = Pu9  / TOTPU;
+    Pu10 = Pu10 / TOTPU;
+    Pu11 = Pu11 / TOTPU;
+    Pu12 = Pu12 / TOTPU;
+    Am1 = Am1  / TOTPU;
+
+    U5_enrichment = U5 / UTOT;
 
 	BU = BurnUp;
 	if(Pu8 + Pu9 + Pu10 + Pu11 + Pu12 + Am1 > 1.00001 )//?????1.00001??? I don't know it! goes in condition if  = 1 !! may be float/double issue ...
@@ -133,53 +139,18 @@ TTree* EQM_PWR_MLP_MOX::CreateTMVAInputTree(IsotopicVector Fissil,IsotopicVector
 		ERROR << Pu8 << " " << Pu9 << " " << Pu10 << " " << Pu11 << " " << Pu12 << " " << Am1 << endl;
 		exit(0);
 	}
-	// All value are molar (!weight)
-
-	InputTree->Fill();
-	return InputTree;
 }
 //________________________________________________________________________
-double EQM_PWR_MLP_MOX::ExecuteTMVA(TTree* theTree)
+double EQM_PWR_MLP_MOX::ExecuteTMVA(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp)
 {
-	// --- Create the Reader object
-	TMVA::Reader *reader = new TMVA::Reader( "Silent" );
-	// Create a set of variables and declare them to the reader
-	// - the variable names MUST corresponds in name and type to those given in the weight file(s) used
-	Float_t Pu8,Pu9,Pu10,Pu11,Pu12,Am1,BU,U5_enrichment;
-
-	reader->AddVariable( "BU"   		,&BU );
-	reader->AddVariable( "U5_enrichment",&U5_enrichment );
-	reader->AddVariable( "Pu8"  		,&Pu8 );
-	reader->AddVariable( "Pu9"  		,&Pu9 );
-	reader->AddVariable( "Pu10" 		,&Pu10);
-	reader->AddVariable( "Pu11" 		,&Pu11);
-	reader->AddVariable( "Pu12" 		,&Pu12);
-	reader->AddVariable( "Am1"  		,&Am1 );
-
-	// --- Book the MVA methods
-
-	// Book method MLP
-	TString methodName = "MLP method";
-	reader->BookMVA( methodName, fTMVAWeightPath );
-	theTree->SetBranchAddress( "BU"   			,&BU 	);
-	theTree->SetBranchAddress( "U5_enrichment"  ,&U5_enrichment  )	;
-	theTree->SetBranchAddress( "Pu8"  			,&Pu8  );
-	theTree->SetBranchAddress( "Pu9"  			,&Pu9  );
-	theTree->SetBranchAddress( "Pu10" 			,&Pu10 );
-	theTree->SetBranchAddress( "Pu11" 			,&Pu11 );
-	theTree->SetBranchAddress( "Pu12" 			,&Pu12 );
-	theTree->SetBranchAddress( "Am1"  			,&Am1  );
-	theTree->GetEntry(0);
-
-	Float_t val = (reader->EvaluateRegression( methodName ))[0];
-
-	delete reader;
-	delete theTree;
-
-	return (double)val; //retourne teneur
+    UpdateInputComposition(Fissil, Fertil, BurnUp);
+    Float_t val = (reader->EvaluateRegression( "MLP method" ))[0];
+
+    return (double)val; //retourne teneur
+
 }
 //________________________________________________________________________
 double EQM_PWR_MLP_MOX::GetFissileMolarFraction(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp)
 {DBGL
-	return	ExecuteTMVA(CreateTMVAInputTree(Fissil,Fertil,BurnUp));
+    return	ExecuteTMVA( Fissil, Fertil, BurnUp);
 }
diff --git a/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX.hxx b/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX.hxx
index f0a9bae11880de2a034fab4b99de65deb81b15e5..c59b624f98379fd7e062d61974821d616647dc7c 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX.hxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX.hxx
@@ -2,6 +2,7 @@
 #define _EQM_PWR_MLP_MOX_HXX
 
 #include "EquivalenceModel.hxx"
+#include "TMVA/Reader.h"
 #include "TTree.h"
 
 using namespace std;
@@ -30,7 +31,7 @@ class EQM_PWR_MLP_MOX : public EquivalenceModel
 	/// normal constructor
 	/*!
 	 Create a EQM_PWR_MLP_MOX 
-	 \param  TMVAWeightPath :  PAth to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath :  Path to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
 	 */
 	EQM_PWR_MLP_MOX(string TMVAWeightPath);
 	//}
@@ -40,7 +41,7 @@ class EQM_PWR_MLP_MOX : public EquivalenceModel
 	/*!
 	 Create a EQM_PWR_MLP_MOX
 	 \param log : use for log
-	 \param  TMVAWeightPath :  PAth to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath :  Path to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
 	 */
 	EQM_PWR_MLP_MOX(CLASSLogger* log, string TMVAWeightPath);
 	//}
@@ -61,14 +62,24 @@ class EQM_PWR_MLP_MOX : public EquivalenceModel
 	 */
 	//@{
 
-		TTree* CreateTMVAInputTree(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp);//!<Create input tmva tree to be read by ExecuteTMVA
-		double ExecuteTMVA(TTree* theTree);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree
+    void UpdateInputComposition(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp);
+    double ExecuteTMVA(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree
 		
 	//@}	
 
 	private :
 
+    float Pu8;
+    float Pu9;
+    float Pu10;
+    float Pu11;
+    float Pu12;
+    float Am1;
 
+    float BU;
+    float U5_enrichment;
+
+    TMVA::Reader *reader;
 	string fTMVAWeightPath;;//!<The weight needed by TMVA to construct and execute the multilayer perceptron
 
 };
diff --git a/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX_Am.cxx b/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX_Am.cxx
index d6e914c4a8d2327902c36119d17a7f6acecbb017..eadf4a6353691df47663726e01d5c298194668e8 100755
--- a/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX_Am.cxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX_Am.cxx
@@ -11,7 +11,6 @@
 #include <cassert>
 
 #include "TSystem.h"
-#include "TMVA/Reader.h"
 #include "TMVA/Tools.h"
 #include "TMVA/MethodCuts.h"
 
@@ -29,6 +28,20 @@ EQM_PWR_MLP_MOX_AM::EQM_PWR_MLP_MOX_AM(string TMVAWeightPath):EquivalenceModel(n
 {
 	fTMVAWeightPath = TMVAWeightPath;
 
+    reader = new TMVA::Reader( "Silent" );
+    reader->BookMVA( "MLP Method", fTMVAWeightPath );
+    reader->AddVariable( "Pu8"  		,&Pu8 );
+    reader->AddVariable( "Pu9"  		,&Pu9 );
+    reader->AddVariable( "Pu10" 		,&Pu10);
+    reader->AddVariable( "Pu11" 		,&Pu11);
+    reader->AddVariable( "Pu12" 		,&Pu12);
+    reader->AddVariable( "Am1"  		,&Am1 );
+    reader->AddVariable( "Am2"          ,&Am2 );
+    reader->AddVariable( "Am3"          ,&Am3 );
+    reader->AddVariable( "BU"   		,&BU );
+    reader->AddVariable( "U5_enrichment",&U5_enrichment );
+
+
 	ZAI U8(92,238,0);
 	ZAI U5(92,235,0);
 	double U5_enrich = 0.0025;
@@ -60,6 +73,19 @@ EQM_PWR_MLP_MOX_AM::EQM_PWR_MLP_MOX_AM(CLASSLogger* log, string TMVAWeightPath):
 {
 	fTMVAWeightPath = TMVAWeightPath;
 
+    reader = new TMVA::Reader( "Silent" );
+    reader->BookMVA( "MLP Method", fTMVAWeightPath );
+    reader->AddVariable( "Pu8"  		,&Pu8 );
+    reader->AddVariable( "Pu9"  		,&Pu9 );
+    reader->AddVariable( "Pu10" 		,&Pu10);
+    reader->AddVariable( "Pu11" 		,&Pu11);
+    reader->AddVariable( "Pu12" 		,&Pu12);
+    reader->AddVariable( "Am1"  		,&Am1 );
+    reader->AddVariable( "Am2"          ,&Am2 );
+    reader->AddVariable( "Am3"          ,&Am3 );
+    reader->AddVariable( "BU"   		,&BU );
+    reader->AddVariable( "U5_enrichment",&U5_enrichment );
+
 	ZAI U8(92,238,0);
 	ZAI U5(92,235,0);
 	double U5_enrich = 0.0025;
@@ -87,31 +113,8 @@ EQM_PWR_MLP_MOX_AM::EQM_PWR_MLP_MOX_AM(CLASSLogger* log, string TMVAWeightPath):
 }
 
 //________________________________________________________________________
-TTree* EQM_PWR_MLP_MOX_AM::CreateTMVAInputTree(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp)
+void EQM_PWR_MLP_MOX_AM::UpdateInputComposition(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp)
 {
-	TTree*   InputTree = new TTree("EQTMP", "EQTMP");
-	float Pu8   		 = 0;
-	float Pu9   		 = 0;
-	float Pu10  		 = 0;
-	float Pu11  		 = 0;
-	float Pu12  		 = 0;
-	float Am1   		 = 0;
-	float Am2   		 = 0;
-	float Am3   		 = 0;
-	float U5_enrichment  = 0;
-	float BU  			  = 0;
-
-	InputTree->Branch(	"Pu8"	,&Pu8	,"Pu8/F"	);
-	InputTree->Branch(	"Pu9"	,&Pu9	,"Pu9/F"	);
-	InputTree->Branch(	"Pu10"	,&Pu10	,"Pu10/F"	);
-	InputTree->Branch(	"Pu11"	,&Pu11	,"Pu11/F"	);
-	InputTree->Branch(	"Pu12"	,&Pu12	,"Pu12/F"	);
-	InputTree->Branch(	"Am1"	,&Am1	,"Am1/F"	);
-	InputTree->Branch(	"Am2"	,&Am2	,"Am2/F"	);
-	InputTree->Branch(	"Am3"	,&Am3	,"Am3/F"	);
-	InputTree->Branch(	"U5_enrichment"	,&U5_enrichment	,"U5_enrichment/F"	);
-	InputTree->Branch(	"BU"	,&BU	,"BU/F"	);
-
 
 	float U8     = Fertil.GetZAIIsotopicQuantity(92,238,0);
 	float U5     = Fertil.GetZAIIsotopicQuantity(92,235,0);
@@ -149,55 +152,18 @@ TTree* EQM_PWR_MLP_MOX_AM::CreateTMVAInputTree(IsotopicVector Fissil,IsotopicVec
 	}
 	// All value are molar (!weight)
 
-	InputTree->Fill();
-	return InputTree;
 }
 //________________________________________________________________________
-double EQM_PWR_MLP_MOX_AM::ExecuteTMVA(TTree* theTree)
+double EQM_PWR_MLP_MOX_AM::ExecuteTMVA(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp)
 {
-	// --- Create the Reader object
-	TMVA::Reader *reader = new TMVA::Reader( "Silent" );
-	// Create a set of variables and declare them to the reader
-	// - the variable names MUST corresponds in name and type to those given in the weight file(s) used
-	Float_t Pu8,Pu9,Pu10,Pu11,Pu12,Am1, Am2,Am3,BU,U5_enrichment;
-
-	reader->AddVariable( "BU"   		,&BU );
-	reader->AddVariable( "U5_enrichment",&U5_enrichment );
-	reader->AddVariable( "Pu8"  		,&Pu8 );
-	reader->AddVariable( "Pu9"  		,&Pu9 );
-	reader->AddVariable( "Pu10" 		,&Pu10);
-	reader->AddVariable( "Pu11" 		,&Pu11);
-	reader->AddVariable( "Pu12" 		,&Pu12);
-	reader->AddVariable( "Am1"  		,&Am1 );
-	reader->AddVariable( "Am2"  		,&Am2 );
-	reader->AddVariable( "Am3"  		,&Am3 );
-
-	// --- Book the MVA methods
-
-	// Book method MLP
-	TString methodName = "MLP method";
-	reader->BookMVA( methodName, fTMVAWeightPath );
-	theTree->SetBranchAddress( "BU"   			,&BU 	);
-	theTree->SetBranchAddress( "U5_enrichment"		,&U5_enrichment  )	;
-	theTree->SetBranchAddress( "Pu8"  			,&Pu8  );
-	theTree->SetBranchAddress( "Pu9"  			,&Pu9  );
-	theTree->SetBranchAddress( "Pu10" 			,&Pu10 );
-	theTree->SetBranchAddress( "Pu11" 			,&Pu11 );
-	theTree->SetBranchAddress( "Pu12" 			,&Pu12 );
-	theTree->SetBranchAddress( "Am1"  			,&Am1  );
-	theTree->SetBranchAddress( "Am2"  			,&Am2  );
-	theTree->SetBranchAddress( "Am3"  			,&Am3  );
-	theTree->GetEntry(0);
-
-	Float_t val = (reader->EvaluateRegression( methodName ))[0];
-
-	delete reader;
-	delete theTree;
-
-	return (double)val; //retourne teneur
+
+    UpdateInputComposition(Fissil, Fertil, BurnUp);
+	Float_t val = (reader->EvaluateRegression( "MLP method" ))[0];
+
+    return (double)val; //retourne teneur
 }
 //________________________________________________________________________
 double EQM_PWR_MLP_MOX_AM::GetFissileMolarFraction(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp)
 {DBGL
-	return	ExecuteTMVA(CreateTMVAInputTree(Fissil,Fertil,BurnUp));
+	return	ExecuteTMVA( Fissil, Fertil, BurnUp);
 }
diff --git a/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX_Am.hxx b/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX_Am.hxx
index f742c922064ed8969241cce7968f7b1044ad1394..d919a3e9830f26e557ec8ab33b57d84ba494000e 100755
--- a/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX_Am.hxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX_Am.hxx
@@ -2,6 +2,8 @@
 #define _EQM_PWR_MLP_MOX_AM_HXX
 
 #include "EquivalenceModel.hxx"
+#include "TMVA/Reader.h"
+
 #include "TTree.h"
 
 using namespace std;
@@ -30,7 +32,7 @@ class EQM_PWR_MLP_MOX_AM : public EquivalenceModel
 	/// normal constructor
 	/*!
 	 Create a EQM_PWR_MLP_MOX_AM 
-	 \param  TMVAWeightPath :  PAth to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath :  Path to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
 	 */
 	EQM_PWR_MLP_MOX_AM(string TMVAWeightPath);
 	//}
@@ -40,7 +42,7 @@ class EQM_PWR_MLP_MOX_AM : public EquivalenceModel
 	/*!
 	 Create a EQM_PWR_MLP_MOX_AM
 	 \param log : use for log
-	 \param  TMVAWeightPath :  PAth to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
+	 \param  TMVAWeightPath :  Path to the .xml file containing neural network informations : PATH/TMVAWeight.xml (total path to tmva weight)
 	 */
 	EQM_PWR_MLP_MOX_AM(CLASSLogger* log, string TMVAWeightPath);
 	//}
@@ -61,14 +63,26 @@ class EQM_PWR_MLP_MOX_AM : public EquivalenceModel
 	 */
 	//@{
 
-		TTree* CreateTMVAInputTree(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp);//!<Create input tmva tree to be read by ExecuteTMVA
-		double ExecuteTMVA(TTree* theTree);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree
+		void UpdateInputComposition(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp);//!<Create input tmva tree to be read by ExecuteTMVA
+		double ExecuteTMVA(IsotopicVector Fissil,IsotopicVector Fertil,double BurnUp);//!<Execute the MLP according to the input tree created by CreateTMVAInputTree
 
 	//@}	
 
 	private :
-	
 
+    float Pu8;
+    float Pu9;
+    float Pu10;
+    float Pu11;
+    float Pu12;
+    float Am1;
+    float Am2;
+    float Am3;
+
+    float BU;
+    float U5_enrichment;
+
+    TMVA::Reader *reader;
 	string fTMVAWeightPath;;//!<The weight needed by TMVA to construct and execute the multilayer perceptron
 
 };
diff --git a/source/branches/BaM/include/PhysicsModels.hxx b/source/branches/BaM/include/PhysicsModels.hxx
index 43bfb820129f0b4fc8b8f267b2e316ae1c801b3d..a41d015ad6ab9213e5e05cb32b93a45f1ce32b11 100644
--- a/source/branches/BaM/include/PhysicsModels.hxx
+++ b/source/branches/BaM/include/PhysicsModels.hxx
@@ -102,7 +102,9 @@ class PhysicsModels : public CLASSObject
 	PhysicsModels*		GetPhysicsModels()	{return this;}//!< return the PhysicsModels
 
 
-
+    void SetXSModel(XSModel* myXSModel) { fXSModel = myXSModel;}
+    void SetEquivlalenceModel(EquivalenceModel* myEqModel) { fEquivalenceModel = myEqModel;}
+    void SetIrradiationModel(IrradiationModel* myIRModel) { fIrradiationModel = myIRModel;}