diff --git a/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctor.h b/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctor.h
index 0767e5f81eb2d64cee9cdb74e1a5826a33b9a708..948f3925b0c30a0d9721991ac37e957018a2b4d3 100644
--- a/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctor.h
+++ b/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctor.h
@@ -64,10 +64,10 @@ public:
 
   inline TSeriesType operator ()(const TSeriesType& series)
   {
-    this->EstimateTimeFunction(series);
+    TTimeFunction estFunction = this->EstimateTimeFunction(series);
     TSeriesType outSeries;
     for(unsigned int i = 0; i < m_DoySeries.Size(); ++i)
-      outSeries[i] = m_TimeFunction.GetValue( m_DoySeries[i] );
+      outSeries[i] = estFunction.GetValue( m_DoySeries[i] );
     return outSeries;
   }
 
@@ -83,15 +83,16 @@ public:
       m_WeightSeries[i] = weights[i];
   }
 
-  inline CoefficientsType GetCoefficients() const
+  inline CoefficientsType GetCoefficients(const TSeriesType& series) const
   {
-    return m_TimeFunction.GetCoefficients();
+    return (this->EstimateTimeFunction(series)).GetCoefficients();
   }
 
-  inline void EstimateTimeFunction(const TSeriesType& series)
+  inline TTimeFunction EstimateTimeFunction(const TSeriesType& series) const
   {
+    TTimeFunction estFunction;
     unsigned int nbDates = m_DoySeries.Size();
-    unsigned int nbCoefs = m_TimeFunction.GetCoefficients().Size();
+    unsigned int nbCoefs = estFunction.GetCoefficients().Size();
 
     // b = A * c
     vnl_matrix<double> A(nbDates, nbCoefs);
@@ -109,8 +110,8 @@ public:
       for(unsigned int j = 0; j < nbCoefs; ++j)
         {
         tmpCoefs[j] = 1.0;
-        m_TimeFunction.SetCoefficients(tmpCoefs);
-        A.put(i, j, m_TimeFunction.GetValue(m_DoySeries[i]) / m_WeightSeries[i]);
+        estFunction.SetCoefficients(tmpCoefs);
+        A.put(i, j, estFunction.GetValue(m_DoySeries[i]) / m_WeightSeries[i]);
         tmpCoefs[j] = 0.0;
         }
       }
@@ -123,12 +124,13 @@ public:
 
     for(unsigned int j = 0; j < nbCoefs; ++j)
       tmpCoefs[j] = c.get(j, 0);
-    m_TimeFunction.SetCoefficients(tmpCoefs);
+    estFunction.SetCoefficients(tmpCoefs);
+
+    return estFunction;
   }
 
 private:
   ///
-  TTimeFunction m_TimeFunction;
   TDateType m_DoySeries;
   TWeightType m_WeightSeries;
 };
diff --git a/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorTest.cxx b/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorTest.cxx
index 6df31bd2d1a5787850730d375095ef7c2269cab2..d3b3fcbed0dc3dcaeb02944bcf947d27f1cb4a17 100644
--- a/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorTest.cxx
+++ b/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorTest.cxx
@@ -56,9 +56,8 @@ int otbTimeSeriesLeastSquareFittingFunctorTest(int argc, char* argv[])
 
   FunctorType f;
   f.SetDates( doySeries );
-  SeriesType outSeries = f(inSeries);
 
-  FunctorType::CoefficientsType outCoefs = f.GetCoefficients();
+  FunctorType::CoefficientsType outCoefs = f.GetCoefficients(inSeries);
 
   for(unsigned int i=0; i<= Degree; i++)
     if(fabs((outCoefs[i]-inCoefs[i])/inCoefs[i])>0.01)
diff --git a/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorWeightsTest.cxx b/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorWeightsTest.cxx
index ffe1017f5f2a5c68f9d1a0ba65d1260139d8698a..1cffb66e10baacd5930eb42cf077ea591429d988 100644
--- a/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorWeightsTest.cxx
+++ b/Testing/Code/MultiTemporal/otbTimeSeriesLeastSquareFittingFunctorWeightsTest.cxx
@@ -69,9 +69,8 @@ int otbTimeSeriesLeastSquareFittingFunctorWeightsTest(int argc, char* argv[])
   FunctorType f;
   f.SetDates( doySeries );
   f.SetWeights (weightSeries);
-  SeriesType outSeries = f(inSeries);
 
-  FunctorType::CoefficientsType outCoefs = f.GetCoefficients();
+  FunctorType::CoefficientsType outCoefs = f.GetCoefficients(inSeries);
 
   for(unsigned int i=0; i<= Degree; i++)
     if(fabs((outCoefs[i]-inCoefs[i])/inCoefs[i])>0.01)