diff --git a/Applications/Classification/otbKMeansClassification.cxx b/Applications/Classification/otbKMeansClassification.cxx
index 930cdc5d52194cbfc15a347f17744a5dc97f3629..abe4af7f8fad05b477e8ec4c2d32a5569e8d4643 100644
--- a/Applications/Classification/otbKMeansClassification.cxx
+++ b/Applications/Classification/otbKMeansClassification.cxx
@@ -19,6 +19,7 @@
 #include "otbWrapperApplication.h"
 #include "otbWrapperApplicationFactory.h"
 
+#include "itkMersenneTwisterRandomVariateGenerator.h"
 #include "otbVectorImage.h"
 #include "otbImage.h"
 #include "itkEuclideanDistance.h"
@@ -39,6 +40,7 @@
 #include "otbWrapperTypes.h"
 
 
+
 namespace otb
 {
 
@@ -346,7 +348,7 @@ private:
     SampleType sample;
     //first sample
 
-
+    itk::Statistics::MersenneTwisterRandomVariateGenerator::Pointer randGen=itk::Statistics::MersenneTwisterRandomVariateGenerator::GetInstance();
     if (maskFlag)
       {
       while (!it.IsAtEnd() && !m_MaskIt .IsAtEnd() && (m_MaskIt.Get() <= 0))
@@ -409,9 +411,7 @@ private:
       {
       for (unsigned int compIndex = 0; compIndex < sampleSize; ++compIndex)
         {
-        initialMeans[compIndex + classIndex * sampleSize] = min[compIndex] + (max[compIndex] - min[compIndex]) * rand()
-            / (RAND_MAX + 1.0);
-
+        initialMeans[compIndex + classIndex * sampleSize] = min[compIndex] + (max[compIndex] - min[compIndex]) * randGen->GetUniformVariate(0.0, 1.0);
         }
       }
     otbAppLogINFO(<<totalSamples <<" samples will be used as estimator input."<<std::endl);