diff --git a/source/branches/BaM/Model/Equivalence/EQM_FBR_BakerRoss_MOX.hxx b/source/branches/BaM/Model/Equivalence/EQM_FBR_BakerRoss_MOX.hxx
index b6125293b66db4003ca6ba660820480af6629256..12b6acd626c9ca6d6621ad094a79de63285d0151 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_FBR_BakerRoss_MOX.hxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_FBR_BakerRoss_MOX.hxx
@@ -26,6 +26,7 @@ using namespace std;
  @f$\alpha_{i} = \bar{\nu_{i}}\cdot\sigma_{i}^{fis} - \sigma_{i}^{abs}@f$
 
  @author BLG
+ @author BaM
  @version 3.0
  */
 //________________________________________________________________________
diff --git a/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.cxx b/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.cxx
index 871f5efa44c0e412e50671aad5fd76693d9f2cfe..e7be2ad893ee3ac922586e7ebc0150f36986713a 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.cxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.cxx
@@ -35,7 +35,9 @@ EQM_MLP_Kinf::EQM_MLP_Kinf(string WeightPathAlpha0, string WeightPathAlpha1, str
 	fInformationFile = InformationFile;
 	LoadKeyword();
 	ReadNFO();//Getting information from fInformationFile
-	
+
+    InitialiseTMVAReader();
+
 	fNumberOfBatch = NumOfBatch;
 	fKThreshold = CriticalityThreshold ;
 	SetBurnUpPrecision(0.005);//1 % of the targeted burnup
@@ -274,7 +276,7 @@ void EQM_MLP_Kinf::InitialiseTMVAReader()
 
     // 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;
+    InputTMVA;
     for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
         InputTMVA.push_back(0);
     Float_t Time;
@@ -300,6 +302,9 @@ void EQM_MLP_Kinf::UpdateInputComposition(IsotopicVector TheFreshfuel, double Th
 
     IsotopicVector IVAccordingToUserInfoFile = TheFreshfuel.GetThisComposition(IVInputTMVA);
 
+    double Ntot = IVAccordingToUserInfoFile.GetSumOfAll();
+
+    IVAccordingToUserInfoFile *= 1/Ntot;
 
     map<ZAI,string>::iterator it;
     int j = 0;
diff --git a/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.hxx b/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.hxx
index 43f9e384b92bc16c9b05a5573d58ebdf90de1609..68791a5305c74a13d7655fb5541c4aefdf0d0e4d 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.hxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_MLP_Kinf.hxx
@@ -32,7 +32,8 @@ Where @f$k_{Threshold}@f$ is the criticality threshold which take into account l
 in non simulated devices such as control rods and mixing grid.
 
  @author BLG
- @version 1.0
+ @author BaM
+@version 1.0
  */
 //________________________________________________________________________
 
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 c59b624f98379fd7e062d61974821d616647dc7c..413bc0b1fca316a6930c3f28915638dd516cbc56 100644
--- a/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX.hxx
+++ b/source/branches/BaM/Model/Equivalence/EQM_PWR_MLP_MOX.hxx
@@ -15,6 +15,7 @@ using namespace std;
  based on a  Multi layer perceptron
 
  @author BLG
+ @author BaM
  @version 3.0
  */
 //________________________________________________________________________
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 d919a3e9830f26e557ec8ab33b57d84ba494000e..f1da6c5bec2cab3857b06a89a9373e8ce0c81ade 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
@@ -16,6 +16,7 @@ using namespace std;
  based on a  Multi layer perceptron
 
  @author BLG
+ @author BaM
  @version 3.0
  */
 //________________________________________________________________________
diff --git a/source/branches/BaM/Model/XS/XSM_MLP.cxx b/source/branches/BaM/Model/XS/XSM_MLP.cxx
index c79d574930e679199353a6087d3d491d8ee68307..d9c7ce23bf27f02df800277896fc8a234620750d 100644
--- a/source/branches/BaM/Model/XS/XSM_MLP.cxx
+++ b/source/branches/BaM/Model/XS/XSM_MLP.cxx
@@ -5,7 +5,6 @@
 #include "CLASSMethod.hxx"
 #include "StringLine.hxx"
 
-#include "TMVA/Reader.h"
 #include "TMVA/Tools.h"
 #include "TMVA/MethodCuts.h"
 
@@ -49,7 +48,9 @@ XSM_MLP::XSM_MLP(string TMVA_Weight_Directory,string InformationFile, bool IsTim
 	
 	LoadKeyword();
 	ReadNFO();
-	
+
+    InitialiseTMVAReader();
+
 }
 
 //________________________________________________________________________
@@ -69,7 +70,9 @@ XSM_MLP::XSM_MLP(CLASSLogger* Log,string TMVA_Weight_Directory,string Informatio
 	
 	LoadKeyword();
 	ReadNFO();
-	
+
+    InitialiseTMVAReader();
+
 }
 
 //________________________________________________________________________
@@ -227,76 +230,62 @@ void XSM_MLP::ReadWeightFile(string Filename, int &Z, int &A, int &I, int &React
 	
 }
 //________________________________________________________________________
-TTree* XSM_MLP::CreateTMVAInputTree(IsotopicVector isotopicvector,int TimeStep)
+void XSM_MLP::UpdateInputComposition(IsotopicVector TheFreshfuel,int TimeStep)
 {
-	/******Create Input data tree to be interpreted by TMVA::Reader***/
-	TTree*   InputTree = new TTree("InTMP", "InTMP");
-	
-	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( !fIsStepTime)
-		InputTree->Branch(	"Time"	,&Time	,"Time/F"	);
 	
-	IsotopicVector IVAccordingToUserInfoFile = isotopicvector.GetThisComposition(IVInputTMVA);
-	
-	double Ntot = IVAccordingToUserInfoFile.GetSumOfAll();
-	
-	IVAccordingToUserInfoFile = IVAccordingToUserInfoFile/Ntot;
+    IsotopicVector IVAccordingToUserInfoFile = TheFreshfuel.GetThisComposition(IVInputTMVA);
+
+    double Ntot = IVAccordingToUserInfoFile.GetSumOfAll();
+
+    IVAccordingToUserInfoFile *= 1/Ntot;
 	
-	j = 0;
+
+    DBGV("INPUT TMVA");
+
+    int j = 0;
 	map<ZAI ,string >::iterator it2;
-	DBGV("INPUT TMVA");
+
 	for( it2 = fMapOfTMVAVariableNames.begin() ; it2 != fMapOfTMVAVariableNames.end() ; it2++)
 	{
-		InputTMVA[j] = IVAccordingToUserInfoFile.GetZAIIsotopicQuantity( (*it2).first ) ;
+		InputTMVA[j] = IVAccordingToUserInfoFile.GetZAIIsotopicQuantity( (*it2).first );
 		DBGV((*it2).first.Z() << " " << (*it2).first.A() << " " << InputTMVA[j]);
 		j++;
 	}
 	
 	Time = fMLP_Time[TimeStep];
-	
-	InputTree->Fill();
-	
-	return InputTree;
+
+}
+
+void XSM_MLP::InitialiseTMVAReader()
+{
+    reader = new TMVA::Reader( "Silent" );
+
+    for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
+        InputTMVA.push_back(0);
+
+
+    for(int i = 0 ; i< (int)fMapOfTMVAVariableNames.size() ; i++)
+        InputTMVA.push_back(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(!fIsStepTime)
+        reader->AddVariable( "Time" ,&Time);
 }
+
 //________________________________________________________________________
-double XSM_MLP::ExecuteTMVA(string WeightFile,TTree* InputTree)
+double XSM_MLP::ExecuteTMVA(string WeightFile, IsotopicVector isotopicvector, int TimeStep)
 {
-	DBGV( "File :" << WeightFile);
-	// --- 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(!fIsStepTime)
-		reader->AddVariable( "Time" ,&Time);
-	
+
+    UpdateInputComposition(isotopicvector, TimeStep);
+
+
+    DBGV( "File :" << WeightFile);
+
 	// --- Book the MVA methods
 	
 	string dir    = fTMVAWeightFolder;
@@ -307,22 +296,9 @@ double XSM_MLP::ExecuteTMVA(string WeightFile,TTree* InputTree)
 	TString methodName = "MLP method";
 	TString weightpath = dir + WeightFile ;
 	reader->BookMVA( methodName, weightpath );
+
+	float val = (reader->EvaluateRegression( methodName ))[0];
 	
-	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(!fIsStepTime)
-		InputTree->SetBranchAddress( "Time" ,&Time );
-	
-	InputTree->GetEntry(0);
-	Float_t val = (reader->EvaluateRegression( methodName ))[0];
-	
-	delete reader;
 	DBGL
 	
 	return (double)val;
@@ -348,29 +324,22 @@ EvolutionData XSM_MLP::GetCrossSectionsTime(IsotopicVector IV)
 		int I = -2;
 		int Reaction = -2;
 		ReadWeightFile( fWeightFiles[i], Z, A, I, Reaction);
+
 		if( Z >= GetZAIThreshold() )
 		{
-			for(int TimeStep = 0;TimeStep<int(fMLP_Time.size());TimeStep++)
+
+            TGraph* ZAIXSTGraph = new TGraph();
+
+			for(int TimeStep = 0; TimeStep < int(fMLP_Time.size()) ; TimeStep++)
 			{
-				TTree* InputTree = CreateTMVAInputTree(IV,TimeStep);
-				
-				pair< map<ZAI, TGraph*>::iterator, bool> IResult;
-				
-				IResult = ExtrapolatedXS[Reaction].insert( pair<ZAI ,TGraph* >(ZAI(Z,A,I), new TGraph()) );
-				
-				double XSValue = ExecuteTMVA(fWeightFiles[i],InputTree );
-				if(IResult.second )
-				{
-					(IResult.first)->second->SetPoint(0, (double)fMLP_Time[TimeStep], XSValue );
-					
-				}
-				else
-				{
-					(IResult.first)->second->SetPoint( (IResult.first)->second->GetN(), (double)fMLP_Time[TimeStep], XSValue );
-				}
-				
-				delete InputTree;
-			}
+				double XSValue = ExecuteTMVA(fWeightFiles[i], IV, TimeStep );
+                ZAIXSTGraph->SetPoint( ZAIXSTGraph->GetN(), (double)fMLP_Time[TimeStep], XSValue );
+            }
+
+            pair< map<ZAI, TGraph*>::iterator, bool> IResult;
+
+            IResult = ExtrapolatedXS[Reaction].insert( pair<ZAI ,TGraph* >(ZAI(Z,A,I), ZAIXSTGraph) );
+
 		}
 	}
 	
@@ -436,8 +405,7 @@ void XSM_MLP::ReadWeightFileStep(string Filename, int &Z, int &A, int &I, int &R
 EvolutionData XSM_MLP::GetCrossSectionsStep(IsotopicVector IV)
 {
 	DBGL
-	TTree* InputTree = CreateTMVAInputTree(IV);
-	
+
 	EvolutionData EvolutionDataFromMLP = EvolutionData();
 	
 	map<ZAI,TGraph*> ExtrapolatedXS[3];
@@ -467,11 +435,11 @@ EvolutionData XSM_MLP::GetCrossSectionsStep(IsotopicVector IV)
 			
 			if( IResult.second )
 			{
-				(IResult.first)->second->SetPoint(0, (double)fMLP_Time[TimeStep], ExecuteTMVA(fWeightFiles[i],InputTree) );
+				(IResult.first)->second->SetPoint(0, (double)fMLP_Time[TimeStep], ExecuteTMVA(fWeightFiles[i],IV) );
 			}
 			else
 			{
-				(IResult.first)->second->SetPoint( (IResult.first)->second->GetN(), (double)fMLP_Time[TimeStep], ExecuteTMVA(fWeightFiles[i],InputTree) );
+				(IResult.first)->second->SetPoint( (IResult.first)->second->GetN(), (double)fMLP_Time[TimeStep], ExecuteTMVA(fWeightFiles[i],IV) );
 			}
 		}
 	}
@@ -487,7 +455,6 @@ EvolutionData XSM_MLP::GetCrossSectionsStep(IsotopicVector IV)
 	EvolutionDataFromMLP.SetCaptureXS(ExtrapolatedXS[1]);
 	EvolutionDataFromMLP.Setn2nXS(ExtrapolatedXS[2]);
 	
-	delete InputTree;
 	DBGL
 	return EvolutionDataFromMLP;
 }
diff --git a/source/branches/BaM/Model/XS/XSM_MLP.hxx b/source/branches/BaM/Model/XS/XSM_MLP.hxx
index f7c748f12b35093a111c89df6551dae09a0ecdfd..fd197726bb02f559c1815decb39bf5f361b9fa8b 100644
--- a/source/branches/BaM/Model/XS/XSM_MLP.hxx
+++ b/source/branches/BaM/Model/XS/XSM_MLP.hxx
@@ -13,7 +13,11 @@
  @version 1.0
  */
 #include "XSModel.hxx"
+
 #include "TTree.h"
+#include "TMVA/Reader.h"
+
+
 #include <string>
 #include <fstream>
 #include <iostream>
@@ -38,6 +42,7 @@ typedef void (XSM_MLP::*XS_MLP_DMthPtr)( const string & ) ;
  set of Multi Layer Perceptrons (MLP)
  
  @authors BLG
+ @authors BaM
  @version 1.0
  */
 //________________________________________________________________________
@@ -127,9 +132,10 @@ class XSM_MLP : public XSModel
 	void ReadWeightFileStep(string Filename, int &Z, int &A, int &I, int &Reaction, int &TimeStep);; 	//!<  Select the reaction according to the weight file name
 	
 	
-	
-	double ExecuteTMVA(string WeightFile, TTree* InputTree);			//!<Execute the MLP according to the input tree created
-	TTree* CreateTMVAInputTree(IsotopicVector isotopicvector,int TimeStep = 0);	//!<Create input tmva tree to be read by ExecuteTMVA
+    void InitialiseTMVAReader();
+
+	double ExecuteTMVA(string WeightFile, IsotopicVector isotopicvector, int TimeStep = 0);			//!<Execute the MLP according to the input tree created
+	void UpdateInputComposition(IsotopicVector TheFreshfuel,int TimeStep = 0);	//!<Create input tmva tree to be read by ExecuteTMVA
 	
 	
 	vector<double> 	fMLP_Time;	//!<  Time vector of the data base
@@ -141,7 +147,12 @@ class XSM_MLP : public XSModel
 	bool fIsStepTime;		//!<  true if one TMVA weihgt per step time is requiered otherwise it assumes time is part of the MLP inputs
 	
 	map<ZAI,string> fMapOfTMVAVariableNames;//!<  List of TMVA input variable names (read from fMLPInformationFile ) , name depends on the training step
-	
+
+    TMVA::Reader *reader;
+    vector<float> InputTMVA;
+    IsotopicVector IVInputTMVA;
+    float Time;
+
 #ifndef __CINT__
 	map<string, XS_MLP_DMthPtr> fDKeyword;
 #endif