diff --git a/Testing/Code/BasicFilters/otbMeanShiftImageFilter2.cxx b/Testing/Code/BasicFilters/otbMeanShiftImageFilter2.cxx
index 30edae2e352481680c9f1cf4226afb7fc47e539c..26ed356b262e1af78fc98c40607e750191f2cbe2 100644
--- a/Testing/Code/BasicFilters/otbMeanShiftImageFilter2.cxx
+++ b/Testing/Code/BasicFilters/otbMeanShiftImageFilter2.cxx
@@ -24,10 +24,10 @@
 
 int otbMeanShiftImageFilter2(int argc, char * argv[])
 {
-  if (argc != 11)
+  if (argc != 11 && argc != 12)
     {
     std::cerr << "Usage: " << argv[0] <<
-    " infname spatialfname spectralfname metricfname iterationfname labelfname spatialBandwidth rangeBandwidth threshold maxiterationnumber"
+    " infname spatialfname spectralfname metricfname iterationfname labelfname spatialBandwidth rangeBandwidth threshold maxiterationnumber (useoptimization)"
               << std::endl;
     return EXIT_FAILURE;
     }
@@ -42,6 +42,12 @@ int otbMeanShiftImageFilter2(int argc, char * argv[])
   const double       rangeBandwidth            = atof(argv[8]);
   const double       threshold                 = atof(argv[9]);
   const unsigned int maxiterationnumber        = atoi(argv[10]);
+  bool               useoptimization                 = true;
+  if(argc==12)
+    {
+      useoptimization           = atoi(argv[11])!=0;
+    }
+
   /* maxit - threshold */
 
   const unsigned int Dimension = 2;
@@ -70,6 +76,8 @@ int otbMeanShiftImageFilter2(int argc, char * argv[])
   filter->SetThreshold(threshold);
   filter->SetMaxIterationNumber(maxiterationnumber);
   filter->SetInput(reader->GetOutput());
+
+  filter->SetModeSearchOptimization(useoptimization);
   //filter->SetNumberOfThreads(1);
   SpatialWriterType::Pointer writer1 = SpatialWriterType::New();
   WriterType::Pointer writer2 = WriterType::New();