diff --git a/source/branches/SL3/include/FabricationPlant.hxx b/source/branches/SL3/include/FabricationPlant.hxx
index f13c5b5d0dc74681b18528f822e025327a49c759..9dbe015c17eb821af433a2438d609dd12b625586 100644
--- a/source/branches/SL3/include/FabricationPlant.hxx
+++ b/source/branches/SL3/include/FabricationPlant.hxx
@@ -7,8 +7,6 @@
  @version 2.0
  */
 
-
-
 #include <vector>
 #include <map>
 
@@ -25,25 +23,27 @@
 using namespace std;
 typedef long long int cSecond;
 
-//-----------------------------------------------------------------------------//
+//_________________________________________________________________________________________________________
 //! CLASS object to build the fresh fuel (do chemical separation) & store it until core loading
-
 /*!
- Define a FabricationPLant.
- The aim of these class is to manage the manufacturing of reprocessed fuel.
- It includes the fabrication of the fuel from a stock of material, using the appropriate
- algrorithm, and the storage of the fresh fuel until reactor loading.
- The parameters used for the fuel fabrication are recover from a PhysicsModels.
- The PhysicsModels MUST include an EquivalenceModel to build the fuel.
-Some EquivalenceModel are available in the CLASS package, but an user can make his own.
-
-Once the fuel is built, the FabricationPlant store the corresponding EvolutionData 
- generated using the PhysicsModels.
+ 	Define a FabricationPLant.
+ 	 The aim of these class is to manage the manufacturing of reprocessed fuel.
+ 	 It includes the fabrication of the fuel from a stock of material, using the appropriate
+ 	 algrorithm, and the storage of the fresh fuel until reactor loading.
+ 	 The parameters used for the fuel fabrication are recover from a PhysicsModels.
+ 	 The PhysicsModels MUST include an EquivalenceModel to build the fuel.
+	 Some EquivalenceModel are available in the CLASS package, but an user can make his own.
+
+	Once the fuel is built, the FabricationPlant store the corresponding EvolutionData 
+ 	generated using the PhysicsModels.
+ 
  @see PhysicsModels.hxx
  @see EquivalenceModel.hxx
  
  @author BaM
  @author BLG
+ @author FaC
+ 
  @version 2.0
  */
 //________________________________________________________________________
@@ -79,7 +79,6 @@ public :
 
 	FabricationPlant();	///< Normal constructor
 
-
 	//{
 	/// Special Constructor.
 	/*!
@@ -93,9 +92,6 @@ public :
 	~FabricationPlant(); 	///< Normal Destructor.
 
 	//@}
-
-
-
 	
 //********* Set Method *********//
 
@@ -104,31 +100,36 @@ public :
 	 */
 	//@{
 
-#ifndef __CINT__
 	void SetDecayDataBank(DecayDataBank* decayDB) {fDecayDataBase = decayDB;}	//! Set the Decay DataBank
 
-	void SetFiFo(bool bval = true)	{ if(bval) fStorageManagement=kpFiFo; else fStorageManagement=kpLiFo ;}	//!< Set the chronological priority (true for chronological, false instead).Equivalent to SetStorageManagement(kpFiFo) or SetStorageManagement(kpLiFo)
-	void SetStorageManagement(StorageManagement SM){fStorageManagement = SM ;} //!<  The storage management : either kpFiFo, kpLiFo , kpMix or kpRand
+    void SetFiFo(bool bval = true)	{ if(bval) fStorageManagement=kpFiFo; else fStorageManagement=kpLiFo ;}	//!< Set the chronological priority (true for chronological, false instead).Equivalent to SetStorageManagement(kpFiFo) or SetStorageManagement(kpLiFo)
+    void SetStorageManagement(StorageManagement SM){fStorageManagement = SM ;} //!<  The storage management : either kpFiFo, kpLiFo , kpMix or kpRand
 
+	void SetSubstitutionMaterialFromIV(string keyword, IsotopicVector SubstitutionIV) 						//!< If the construction fails : it creates a substitution material according to the IV defined by the user
+		{fSubstitutionMaterialFromIV[keyword] = true; fSubstitutionIV[keyword]= SubstitutionIV;} 	
+	
+	void SetSubstitutionFuel(EvolutionData fuel);											//!< To use a substitution fuel if the fabrication fail (not enough material in stock)
 
-	void SetSubstitutionFuel(EvolutionData fuel, bool ReplaceTheStock = false);					//!< To use a substitution fuel if the fabrication fail (not enough material in stock) 
-	void SetSubstitutionFissile(IsotopicVector IV);					//!< To use a substitution fissile if the fabrication fail (not enough material in stock) the composition of the fissile is given normalize to 1 by IV.
-
-	void SetSeparationManagement(bool bval = true)	{ fIsSeparationManagement = bval;}				//!< Set the separation managmeent for the fabrication plant
+    void SetSeparationManagement(bool bval = true)	{ fIsSeparationManagement = bval;}				//!< Set the separation managmeent for the fabrication plant
 
 	void AddReactor(int reactorid, double creationtime)
-	{ fReactorNextStep.insert( pair<int,cSecond> (reactorid, (cSecond)creationtime-GetCycleTime() ) ); }	//!< Add a new reactor to be filled with the fresh fuel build by the FabricationPlant
+		{ fReactorNextStep.insert( pair<int,cSecond> (reactorid, (cSecond)creationtime-GetCycleTime() ) ); }		//!< Add a new reactor to be filled with the fresh fuel build by the FabricationPlant
 
-	void SetReUsableStorage(Storage* store) { fReUsable = store; fIsReusable = true;} //!< Set the Storage where all the separated matetial not used in the fabrication process will be sent. (if not present it goes to WASTE)
+#ifndef __CINT__
+	void SetReUsableStorage(Storage* store) { fReUsable = store; fIsReusable = true;} 					//!< Set the Storage where all the separated matetial not used in the fabrication process will be sent. (if not present it goes to WASTE)
 #endif
 
 	using CLASSFacility::SetName;
 
 	//@}
 
+#ifndef __CINT__
+		
+	void AddStorage(string keyword, Storage* Stock) {fStorage[keyword].push_back(Stock);};	//!< Fill the storage vector for a list
+	void AddInfiniteStorage(string keyword);							//!< Creates an infinite stock of this material according to the list defined in the EqM
 
-
-
+#endif
+	
 //********* Get Method *********//
 
 	/*!
@@ -137,25 +138,19 @@ public :
 	//@{
 	
 #ifndef __CINT__
-	vector<Storage*>	GetFissileStorage()		{ return fFissileStorage; }		//!< Return the Pointer to the fissile Storage
-	vector<Storage*>	GetFertileStorage()		{ return fFertileStorage; }		//!< Return the Pointer to the fertile Storage
+	map < string , vector <Storage*> > GetAllStorage() {return fStorage;}			//!< Return the map containing all the storage vectors (useful in CLASS Reactor to check list consistency)
+	
+	vector<Storage*> GetStorage(string keyword) { return fStorage[keyword]; }		//!< Return the Pointer to Storage associated to a StreamList 
 
-	EvolutionData GetReactorEvolutionDB(int ReactorId);			//!< Return the EvolutionData of Reactor ReactorId
-	IsotopicVector GetDecay(IsotopicVector isotopicvector, cSecond t);	//!< Get IsotopicVector Decay at time t
+	EvolutionData GetReactorEvolutionDB(int ReactorId);						//!< Return the EvolutionData of Reactor ReactorId
 #endif
+	IsotopicVector GetDecay(IsotopicVector isotopicvector, cSecond t);				//!< Get IsotopicVector Decay at time t
 
 	map<int, IsotopicVector >	GetReactorFuturIncome() const
-						{ return fReactorFuturIV;}	//!< Return the list of the futur fuel IV
-
-	cSecond GetFabricationTime() const	{return GetCycleTime();}
-	//@}
-
+						{ return fReactorFuturIV;}				//!< Return the list of the futur fuel IV
 
 
-#ifndef __CINT__
-	void AddFissileStorage(Storage* stock) { fFissileStorage.push_back(stock); } //!< Add a new Storage to the list of fissile material provider.
-	void AddFertileStorage(Storage* stock) { fFertileStorage.push_back(stock); } //!< Add a new Storage to the list of fertile material provider.
-#endif
+	//@}
 
 //********* Fabrication & Evolution Method *********//
 
@@ -163,18 +158,14 @@ public :
 	 \name Fabrication & Evolution Method
 	 */
 	//@{
+	void SetSeparartionEfficiencyIV(ZAI zai, double factor);					//!< Set the extraction efficiency of zai to factor (0<=factor<=1)
+	void Evolution(cSecond t);									//!< Perform the FabricationPlant evolution
+	void DumpStock(map <string , vector<double> > LambdaArray);				//!< Update the Stock status after building process
+	void TakeReactorFuel(int ReactorId) ;								//!< Remove the fuel of reactor ReactorId from stock
+	void UpdateInsideIV();										
 
-	void SetSeparartionEfficiencyIV(ZAI zai, double factor);	//!< Set the extraction efficiency of zai to factor (0<= factor<= 1)
-	void Evolution(cSecond t);					//!< Perform the FabricationPlant evolution
-	
-	void DumpStock(vector<double> lambdaArray);			//!< Update the Stock status after building process
-
-	void TakeReactorFuel(int ReactorId) ;				//!< Remove the fuel of reactor ReactorId from stock
-	void UpdateInsideIV();
-
-	IsotopicVector BuildFuelFromEqModel(vector<double> LambdaArray); //!<Build the fresh fuel for the reactor according the results of the EquivalenceModel (@see  EquivalenceModel)
-	void BuildFissileArray();					//!< virtualy extract fissile nuclei from Storage according EquivalenceModel fFissileList and make it virtually decay FabricationTime
-	void BuildFertileArray();					//!< virtualy extract fertile nuclei from Storage according EquivalenceModel fFertileList and make it virtually decay FabricationTime
+	IsotopicVector BuildFuelFromEqModel(map <string , vector<double> > LambdaArray); 	//!<Build the fresh fuel for the reactor according the results of the EquivalenceModel (@see  EquivalenceModel)
+	void BuildArray(int ReactorId);									//!< virtualy extract fissile nuclei from Storage according EquivalenceModel fStreamList and make it virtually decay FabricationTime
 
 #ifndef __CINT__
 	void BuildFuelForReactor(int ReactorId, cSecond t);			//!< Build a fuel for the reactor ReactorId
@@ -207,40 +198,38 @@ protected:
 
 
 
-	StorageManagement fStorageManagement;	//!< The storage management : either kpFiFo, kpLiFo , kpMix or kpRand
+    StorageManagement fStorageManagement;	//!< The storage management : either kpFiFo, kpLiFo , kpMix or kpRand
 
-	bool	fIsSeparationManagement; //!< Separation managment 
+    bool	fIsSeparationManagement; //!< Separation managment
 
-	bool	fSubstitutionFuel;			//!< true if a substitution fuel as been set
-	bool 	fSubstitutionFissile;		//!< true if a substitution fissile as been set
-	bool 	fIsReplaceFissileStock;		//!< If there is not enough fissile: true all the fissile comes from an infinite stock; false: just the missing Pu quantity comes from this infinite stock 
+    bool	fSubstitutionFuel;									//!< True if a substitution fuel as been set
 
-	void	FabricationPlantEvolution(cSecond t);	//!< Deal the FabricationPlant evolution
-	void 	ResetArrays();				//!< empty the fFertileArray and fFissileArray
+	void	FabricationPlantEvolution(cSecond t);							//!< Deal the FabricationPlant evolution
+	void 	ResetArrays();										//!< Empty Arrays
 
 
 #ifndef __CINT__
-	
-	vector<Storage*>	fFissileStorage;	//!< Pointer to the Storage used to get the fissile part of the fuel
-	vector<IsotopicVector>  fFissileArray;		//!< The vector of isotopicVector use as fissile material
-	vector<cSecond>		fFissileArrayTime;	//!< Time when a IsotopicVector arrives in its storage
-	vector< pair<int,int> > fFissileArrayAdress;
-	IsotopicVector		fFissileList;		//!< The list of fissile ZAI to consider
 
-	vector<Storage*>	fFertileStorage;	//!< Pointer to the Storage used to get the fertile part of the fuel
-	vector<IsotopicVector>  fFertileArray;		//!< The vector of isotopicVector used as fissile material
-	vector<cSecond>		fFertileArrayTime;	//!< Time when a IsotopicVector arrives in its storage
+	map < string , IsotopicVector>			fStreamList;					//!< contains all lists of zai needed to build a fuel (example : 2 -> fissileList+fertileList)
+																			//!< each list is identified by a keyword (example : -> "Fissil" & "Fertil") 
+
+	map < string , vector <Storage*> >			fStorage;					//!< Pointer to the Storages defined for each list
+	map < string , vector <IsotopicVector> >  	fStreamArray;				//!< The vector of isotopicVector of each material and each stock
+	map < string , vector <cSecond> >	  		fStreamArrayTime;			//!< Time when a IsotopicVector arrives in its storage
+	map < string , vector < pair<int,int> > >  	fStreamArrayAdress;
+	map < string , IsotopicVector>				fSubstitutionIV;			//!< contains the susbstitution IV defined by the user 
 
-	vector< pair<int,int> > fFertileArrayAdress;
-	IsotopicVector		fFertileList;		//!< The List of fertile ZAI to consider
+	map < string , bool > fSubstitutionMaterialFromIV;						//!< True = a substitution IV is set for this material in case of failure in fuel building 
+	map < string , bool > fInfiniteMaterialFromList;						//!< True = an infinite stock of this material is created according to the list defined in the EqM
 
-	Storage*	fReUsable;			//!< Pointer to the Storage using for storing unused material
-	bool		fIsReusable;
+	map < string , bool > fErrorOnLambda;							//!< True = lambdas haven't been well calculated for this material (not enough material in stock....)
 
-	EvolutionData	fSubstitutionEvolutionData;	//!< EvolutionData of the subtitution fuel
-	IsotopicVector 	fSubstitutionFissileIV;		//!< IsotopicVector of the subtitution fissile
+	EvolutionData	fSubstitutionEvolutionData;							//!< EvolutionData of the subtitution fuel
 
-	DecayDataBank*	fDecayDataBase;			//!< Pointer to the DecayDataBank
+	Storage*	fReUsable;									//!< Pointer to the Storage used to storing unused material
+	bool		fIsReusable;									//!< Sets a storage used to storing unused material
+
+	DecayDataBank*	fDecayDataBase;							//!< Pointer to the DecayDataBank
 
 
 	//{
@@ -255,7 +244,6 @@ protected:
 
 #endif
 
-	
 	ClassDef(FabricationPlant,3);
 
 };