diff --git a/Code/Common/otbHistogramStatisticsFunction.h b/Code/Common/otbHistogramStatisticsFunction.h
index 39e88bbf4a00aa09a29467d38904babb087dfa0c..94bcf9aff0e9e9c2551bcbe9eaa6777dd215dcef 100644
--- a/Code/Common/otbHistogramStatisticsFunction.h
+++ b/Code/Common/otbHistogramStatisticsFunction.h
@@ -48,7 +48,6 @@ public:
 
   typedef typename TInputHistogram::MeasurementType  MeasurementType;
   typedef typename TInputHistogram::FrequencyType    FrequencyType;
-
   typedef typename itk::NumericTraits<MeasurementType>::RealType RealType;
 
   /**Standard Macros */
@@ -56,7 +55,7 @@ public:
   itkNewMacro(Self) ;
                                                                                                                                       
   /** Typedef for the output type */
-  typedef TOutput OutputType;
+  typedef std::vector<TOutput> OutputType;
                                                                                                                                       
   /** Returns the entropy value */
   OutputType GetEntropy();
diff --git a/Code/Common/otbHistogramStatisticsFunction.txx b/Code/Common/otbHistogramStatisticsFunction.txx
index 91b162999511926e8dac973369ea8259445c2fa5..760b9539e1ef0558d8f7d2346e4b9f59564f2c72 100644
--- a/Code/Common/otbHistogramStatisticsFunction.txx
+++ b/Code/Common/otbHistogramStatisticsFunction.txx
@@ -74,14 +74,7 @@ HistogramStatisticsFunction< TInputHistogram, TOutput>
 {
   typename TInputHistogram::ConstPointer histogram = m_InputHistogram;
 
-  // TODO: as an improvement, the class could accept multi-dimensional histograms
-  // and the user could specify the dimension to apply the algorithm to.
-  if (histogram->GetSize().GetSizeDimension() != 1)
-    {
-    itkExceptionMacro(<<"Histogram must be 1-dimensional.");
-    }
 
-  // compute global mean
   typename TInputHistogram::ConstIterator iter = histogram->Begin() ;
   typename TInputHistogram::ConstIterator end = histogram->End() ;
 
@@ -101,7 +94,8 @@ HistogramStatisticsFunction< TInputHistogram, TOutput>
       } 
     ++iter ;
     }
-  m_entropy = static_cast<OutputType>(entropy); 
+  m_entropy.resize(1);
+  m_entropy[0] = static_cast<TOutput>(entropy); 
 }
 
 
@@ -112,31 +106,22 @@ HistogramStatisticsFunction< TInputHistogram, TOutput>
 {
   typename TInputHistogram::ConstPointer histogram = m_InputHistogram;
 
-  // TODO: as an improvement, the class could accept multi-dimensional histograms
-  // and the user could specify the dimension to apply the algorithm to.
-  if (histogram->GetSize().GetSizeDimension() != 1)
-    {
-    itkExceptionMacro(<<"Histogram must be 1-dimensional.");
-    }
-
-  // compute global mean
-  typename TInputHistogram::ConstIterator iter = histogram->Begin() ;
-  typename TInputHistogram::ConstIterator end = histogram->End() ;
+  unsigned int NumberOfDimension =  histogram->GetSize().GetSizeDimension();
+  std::vector<TOutput> GlobalMean(NumberOfDimension);
+  m_mean.resize(NumberOfDimension);
 
-  RealType mean = itk::NumericTraits<RealType>::Zero;
-  FrequencyType globalFrequency = histogram->GetTotalFrequency();
-  if(globalFrequency == 0)
-    {
-    itkExceptionMacro(<<"Histogram must contain at least 1 element.");
-    }
-  while (iter != end)
+  for( unsigned int noDim = 0; noDim < NumberOfDimension; noDim++ )
     {
-    mean += static_cast<RealType>(iter.GetMeasurementVector()[0]) * static_cast<RealType>(iter.GetFrequency());
-    ++iter ;
-    }
-  mean /= static_cast<RealType>(globalFrequency);
-  
-  m_mean = static_cast<OutputType>(mean); 
+    MeasurementType mean = itk::NumericTraits<MeasurementType>::Zero;
+    for (unsigned int i = 0; i < histogram->GetSize()[noDim]; i++)
+      {
+      MeasurementType val  = histogram->GetMeasurement(i, noDim);
+      FrequencyType freq = histogram->GetFrequency(i, noDim);
+      mean += val*freq;
+      }
+    mean /=  histogram->GetTotalFrequency();
+    m_mean[noDim] = static_cast<TOutput>(mean);
+    }  
 }
 
 template< class TInputHistogram, class TOutput >
@@ -144,6 +129,7 @@ void
 HistogramStatisticsFunction< TInputHistogram, TOutput>
 ::CalculateCovariance()
 {
+#if 0
   typename TInputHistogram::ConstPointer histogram = m_InputHistogram;
 
   // TODO: as an improvement, the class could accept multi-dimensional histograms
@@ -173,6 +159,7 @@ HistogramStatisticsFunction< TInputHistogram, TOutput>
   covariance /= static_cast<RealType>(globalFrequency);
   
   m_covariance = static_cast<OutputType>(covariance); 
+#endif
 }
 
 template< class TInputHistogram, class TOutput >
diff --git a/Testing/Code/Common/otbHistogramStatisticsFunction.cxx b/Testing/Code/Common/otbHistogramStatisticsFunction.cxx
index 7cf36699702d31f8500f2dc4b6adbafd9780845f..870f2efdda995915a18472d2ce1d816b7ab8bc2d 100644
--- a/Testing/Code/Common/otbHistogramStatisticsFunction.cxx
+++ b/Testing/Code/Common/otbHistogramStatisticsFunction.cxx
@@ -61,7 +61,11 @@ int otbHistogramStatisticsFunction(int argc, char* argv[])
   MeasurementType Mean;
   MeasurementType Covariance;
 
-  Entropy = HistogramStatisticsFunction->GetEntropy();
+  std::cout << "Update OK : " <<  std::endl;
+
+  std::cout << "Entropy 1 : " << HistogramStatisticsFunction->GetEntropy()[0] << std::endl;
+
+  Entropy = HistogramStatisticsFunction->GetEntropy()[0];
   std::cout << "Entropy 1 : " << Entropy << std::endl;
  
   if(fabs(Entropy-log(NbOfBins))>0.00001 ) 
@@ -70,7 +74,7 @@ int otbHistogramStatisticsFunction(int argc, char* argv[])
 	return EXIT_FAILURE;
   }
 
-  Mean = HistogramStatisticsFunction->GetMean();
+  Mean = HistogramStatisticsFunction->GetMean()[0];
   std::cout << "Mean 1 : " << Mean << std::endl;
  
   if( Mean != NbOfBins/2. ) 
@@ -78,7 +82,7 @@ int otbHistogramStatisticsFunction(int argc, char* argv[])
   	std::cout << "Error in mean estimation" << std::endl;
 	return EXIT_FAILURE;
   }
-
+/*
   Covariance = HistogramStatisticsFunction->GetCovariance();
   std::cout << "Covariance 1 : " << Covariance << std::endl;
 
@@ -87,7 +91,7 @@ int otbHistogramStatisticsFunction(int argc, char* argv[])
   	std::cout << "Error in covariance estimation" << std::endl;
 	return EXIT_FAILURE;
   }
-
+*/
   // create histogram just all value equal to zero except the first one
   for (HistogramType::Iterator iter = histogram->Begin(); iter != histogram->End(); ++iter)
     {
@@ -103,7 +107,7 @@ int otbHistogramStatisticsFunction(int argc, char* argv[])
  
   HistogramStatisticsFunction->Update();
 
-  Entropy = HistogramStatisticsFunction->GetEntropy();
+  Entropy = HistogramStatisticsFunction->GetEntropy()[0];
   std::cout << "Entropy 2 : " << Entropy << std::endl;
 
   if( Entropy!=0.0 ) 
@@ -112,7 +116,7 @@ int otbHistogramStatisticsFunction(int argc, char* argv[])
 	return EXIT_FAILURE;
   }
 
-  Mean = HistogramStatisticsFunction->GetMean();
+  Mean = HistogramStatisticsFunction->GetMean()[0];
   std::cout << "Mean 2 : " << Mean << std::endl;
 
   if( Mean != 0.5 ) 
@@ -120,7 +124,7 @@ int otbHistogramStatisticsFunction(int argc, char* argv[])
   	std::cout << "Error in mean estimation" << std::endl;
 	return EXIT_FAILURE;
   }
-
+/*
   Covariance = HistogramStatisticsFunction->GetCovariance();
   std::cout << "Covariance 2 : " << Covariance << std::endl;
 
@@ -129,6 +133,6 @@ int otbHistogramStatisticsFunction(int argc, char* argv[])
   	std::cout << "Error in covariance estimation" << std::endl;
 	return EXIT_FAILURE;
   }
-  
+*/  
   return EXIT_SUCCESS;
 }