diff --git a/source/trunk/include/EvolutionData.hxx b/source/trunk/include/EvolutionData.hxx
index 4fb36cb9b673812f6d5e038e1c975b526cd89175..3252ebb218194802e00467b325ef170bc6162c18 100755
--- a/source/trunk/include/EvolutionData.hxx
+++ b/source/trunk/include/EvolutionData.hxx
@@ -31,7 +31,10 @@ typedef long long int cSecond;
 EvolutionData operator*(EvolutionData const& evol, double F);
 EvolutionData operator*(double F, EvolutionData const& evol);
 EvolutionData operator/(EvolutionData const& evol, double F);
-EvolutionData operator+(EvolutionData const& evol1, EvolutionData const& evol2);
+//EvolutionData operator+(EvolutionData const& evol1, EvolutionData const& evol2);
+EvolutionData Sum(EvolutionData const& evol1, EvolutionData const& evol2);
+EvolutionData Multiply(EvolutionData const& evol, double F);
+EvolutionData Multiply(double F, EvolutionData const& evol);
 
 double 	Distance(IsotopicVector IV1, EvolutionData Evd1 );
 double 	Distance(EvolutionData Evd1, IsotopicVector IV1 );
diff --git a/source/trunk/src/DataBank.cxx b/source/trunk/src/DataBank.cxx
index 95acc4e18a026fb2d41789ae264dbebd6dca59cc..51b0b38078a24a3c3cd8b7b37bd9648f49cb6300 100755
--- a/source/trunk/src/DataBank.cxx
+++ b/source/trunk/src/DataBank.cxx
@@ -1321,10 +1321,9 @@ EvolutionData DataBank<IsotopicVector>::GetClosest(IsotopicVector isotopicvector
 		{
 			double D = 0;
 			D = Distance(isotopicvector.GetActinidesComposition()
-				     * evolutiondb.begin()->second.GetIsotopicVectorAt(t).GetActinidesComposition().GetSumOfAll()
+				     * (*it).second.GetIsotopicVectorAt(t).GetActinidesComposition().GetSumOfAll()
 				     / isotopicvector.GetActinidesComposition().GetSumOfAll(),
-				     evolutiondb.begin()->second);
-
+				     (*it).second);
 
 			if (D< distance)
 			{
@@ -1337,6 +1336,7 @@ EvolutionData DataBank<IsotopicVector>::GetClosest(IsotopicVector isotopicvector
 	}
 	else if (fEvolutionDataInterpolation)
 	{
+
 		map<double, EvolutionData> distance_map;
 		map<double, EvolutionData>::iterator it_distance;
 		int NClose = 64;
@@ -1345,16 +1345,25 @@ EvolutionData DataBank<IsotopicVector>::GetClosest(IsotopicVector isotopicvector
 		double SumOfDistance = 0;
 		for( it_distance = distance_map.begin(); Nstep < NClose; it_distance++)
 		{
+
+			cout << (*it_distance).first << endl;
+			if((*it_distance).first == 0 )
+			{
+				EvolInterpolate = Multiply(1,(*it_distance).second);
+				return EvolInterpolate;
+			}
 			if(Nstep == 0)
-				EvolInterpolate = 1./(*it_distance).first * (*it_distance).second;
+				EvolInterpolate = Multiply(1./(*it_distance).first, (*it_distance).second);
 			else
-				EvolInterpolate = EvolInterpolate + 1./(*it_distance).first * (*it_distance).second;
+				EvolInterpolate = Sum(EvolInterpolate,  Multiply(1./(*it_distance).first, (*it_distance).second));
 
 			SumOfDistance += 1./(*it_distance).first;
 			Nstep++;
 
 		}
-		return 1/SumOfDistance * EvolInterpolate;
+		EvolInterpolate = Multiply(1/SumOfDistance, EvolInterpolate);
+
+		return EvolInterpolate;
 
 	}
 	else
@@ -1364,21 +1373,23 @@ EvolutionData DataBank<IsotopicVector>::GetClosest(IsotopicVector isotopicvector
 				   / evolutiondb.begin()->second.GetIsotopicVectorAt(t).GetActinidesComposition().GetSumOfAll()
 				   * isotopicvector.GetActinidesComposition().GetSumOfAll(),
 				   fDistanceType, fDistanceParameter);
+		for( it = evolutiondb.begin(); it != evolutiondb.end(); it++ )
+		{
 
-
-		double D = 0;
+			double D = 0;
 
 
-		D = Distance(isotopicvector.GetActinidesComposition(),
-			     evolutiondb.begin()->second.GetIsotopicVectorAt(t).GetActinidesComposition()
-			     / evolutiondb.begin()->second.GetIsotopicVectorAt(t).GetActinidesComposition().GetSumOfAll()
-			     * isotopicvector.GetActinidesComposition().GetSumOfAll(),
-			     fDistanceType, fDistanceParameter);
+			D = Distance(isotopicvector.GetActinidesComposition(),
+				     (*it).second.GetIsotopicVectorAt(t).GetActinidesComposition()
+				     / (*it).second.GetIsotopicVectorAt(t).GetActinidesComposition().GetSumOfAll()
+				     * isotopicvector.GetActinidesComposition().GetSumOfAll(),
+				     fDistanceType, fDistanceParameter);
 
-		if (D< distance)
-		{
-			distance = D;
-			it_close = it;
+			if (D< distance)
+			{
+				distance = D;
+				it_close = it;
+			}
 		}
 		return (*it_close).second;
 
diff --git a/source/trunk/src/EvolutionData.cxx b/source/trunk/src/EvolutionData.cxx
index 52f893a3e015e26f607da29793bfb53bf1634cae..9ea942dfb07e1847f995b3826d2380d6a67671ee 100755
--- a/source/trunk/src/EvolutionData.cxx
+++ b/source/trunk/src/EvolutionData.cxx
@@ -60,8 +60,6 @@ double 	Distance(IsotopicVector IV1, EvolutionData Evd1 )
 	}
 
 
-
-
 	for( it = IVtmpIsotopicQuantity.begin(); it != IVtmpIsotopicQuantity.end(); it++)
 	{
 		double Z1 = IV1.GetZAIIsotopicQuantity( (*it).first );
@@ -71,9 +69,9 @@ double 	Distance(IsotopicVector IV1, EvolutionData Evd1 )
 			  + Evd1.GetXSForAt(0., (*it).first, 3);
 
 		d2 += pow(Z1-Z2 , 2 ) * pow(XS,2);
+
 	}
 	
-
 	return sqrt(d2)/SumOfXs;
 
 }
@@ -107,10 +105,118 @@ EvolutionData operator*(EvolutionData const& evol, double F)
 		
 	}
 	evoltmp.SetPower(evol.GetPower()*F);
+	evoltmp.SetFissionXS(evol.GetFissionXS());
+	evoltmp.SetCaptureXS(evol.GetCaptureXS());
+	evoltmp.Setn2nXS(evol.Getn2nXS());
+
+
 	return evoltmp;
 	
 }
-EvolutionData operator+(EvolutionData const& evol1, EvolutionData const& evol2)
+//________________________________________________________________________
+EvolutionData operator*(double F, EvolutionData const& evol)
+{
+
+	return evol*F;
+
+}
+//________________________________________________________________________
+EvolutionData operator/(EvolutionData const& evol, double F)
+{
+
+	return evol*(1./F);
+
+}
+
+EvolutionData Multiply(EvolutionData const& evol, double F)
+{
+
+	EvolutionData evoltmp;
+
+	map<ZAI ,TGraph* > EvolutionData = evol.GetEvolutionData();
+	map<ZAI ,TGraph* >::iterator it;
+	for(it = EvolutionData.begin(); it != EvolutionData.end(); it++)
+	{
+		double X[(*it).second->GetN()];
+		double Y[(*it).second->GetN()];
+
+		for(int i = 0; i < (*it).second->GetN(); i++)
+		{
+			double y;
+			(*it).second->GetPoint( i, X[i], y );
+			Y[i] = y*F;
+		}
+		evoltmp.NucleiInsert( pair<ZAI, TGraph*> ( (*it).first,new TGraph((*it).second->GetN(), X, Y) ) );
+
+	}
+
+
+	EvolutionData = evol.GetFissionXS();
+	for(it = EvolutionData.begin(); it != EvolutionData.end(); it++)
+	{
+		double X[(*it).second->GetN()];
+		double Y[(*it).second->GetN()];
+
+		for(int i = 0; i < (*it).second->GetN(); i++)
+		{
+			double y;
+			(*it).second->GetPoint( i, X[i], y );
+			Y[i] = y*F;
+		}
+		evoltmp.FissionXSInsert( pair<ZAI, TGraph*> ( (*it).first,new TGraph((*it).second->GetN(), X, Y) ) );
+
+	}
+
+	EvolutionData = evol.GetCaptureXS();
+	for(it = EvolutionData.begin(); it != EvolutionData.end(); it++)
+	{
+		double X[(*it).second->GetN()];
+		double Y[(*it).second->GetN()];
+
+		for(int i = 0; i < (*it).second->GetN(); i++)
+		{
+			double y;
+			(*it).second->GetPoint( i, X[i], y );
+			Y[i] = y*F;
+		}
+		evoltmp.CaptureXSInsert( pair<ZAI, TGraph*> ( (*it).first,new TGraph((*it).second->GetN(), X, Y) ) );
+		
+	}
+	EvolutionData = evol.Getn2nXS();
+	for(it = EvolutionData.begin(); it != EvolutionData.end(); it++)
+	{
+		double X[(*it).second->GetN()];
+		double Y[(*it).second->GetN()];
+
+		for(int i = 0; i < (*it).second->GetN(); i++)
+		{
+			double y;
+			(*it).second->GetPoint( i, X[i], y );
+			Y[i] = y*F;
+		}
+		evoltmp.n2nXSInsert( pair<ZAI, TGraph*> ( (*it).first,new TGraph((*it).second->GetN(), X, Y) ) );
+
+	}
+
+
+
+	evoltmp.SetPower(evol.GetPower()*F);
+
+
+
+	return evoltmp;
+
+}
+
+//________________________________________________________________________
+EvolutionData Multiply(double F, EvolutionData const& evol)
+{
+
+	return Multiply(evol,F);
+
+}
+
+EvolutionData Sum(EvolutionData const& evol1, EvolutionData const& evol2)
 {
 
 
@@ -235,20 +341,7 @@ EvolutionData operator+(EvolutionData const& evol1, EvolutionData const& evol2)
 }
 
 
-	//________________________________________________________________________
-EvolutionData operator*(double F, EvolutionData const& evol)
-{
-	
-	return evol*F;
-	
-}
-	//________________________________________________________________________
-EvolutionData operator/(EvolutionData const& evol, double F)
-{
-	
-	return evol*(1./F);
-	
-}
+
 
 	//________________________________________________________________________
 	//________________________________________________________________________