diff --git a/Modules/Applications/AppClassification/include/otbClassKMeansBase.txx b/Modules/Applications/AppClassification/include/otbClassKMeansBase.txx
index e6bf3291e052637de5017fe5c7c5d04f701593d5..a065511c39bc95de2876c3bcb36e8e23593b9066 100644
--- a/Modules/Applications/AppClassification/include/otbClassKMeansBase.txx
+++ b/Modules/Applications/AppClassification/include/otbClassKMeansBase.txx
@@ -30,32 +30,40 @@ namespace Wrapper
 
 void ClassKMeansBase::initKMParams()
 {
+  AddApplication("ImageEnvelope", "imgenvelop", "mean shift smoothing"); 
+  AddApplication("PolygonClassStatistics", "polystats", "Polygon Class Statistics");
+  AddApplication("SampleSelection", "select", "Sample selection");
+  AddApplication("SampleExtraction", "extraction", "Sample extraction");
+
+  AddApplication("TrainVectorClassifier", "training", "Model training");
+  AddApplication("ComputeImagesStatistics", "imgstats", "Compute Images second order statistics");
+  AddApplication("ImageClassifier", "classif", "Performs a classification of the input image");
+
+  ShareParameter("in", "imgenvelop.in");
+  ShareParameter("out", "classif.out");
+
+  InitKMSampling();
+  InitKMClassification();
+
+  // init at the end cleanup
   AddParameter( ParameterType_Empty, "cleanup", "Temporary files cleaning" );
   EnableParameter( "cleanup" );
   SetParameterDescription( "cleanup",
                          "If activated, the application will try to clean all temporary files it created" );
   MandatoryOff( "cleanup" );
-
-  InitKMSampling();
-  InitKMClassification();
 }
 
 void ClassKMeansBase::InitKMSampling()
 {
-  AddApplication("ImageEnvelope", "imgenvelop", "mean shift smoothing"); 
-  AddApplication("PolygonClassStatistics", "polystats", "Polygon Class Statistics");
-  AddApplication("SampleSelection", "select", "Sample selection");
-  AddApplication("SampleExtraction", "extraction", "Sample extraction");
+  AddParameter(ParameterType_Int, "nc", "Number of classes");
+  SetParameterDescription("nc", "Number of modes, which will be used to generate class membership.");
+  SetDefaultParameterInt("nc", 5);
 
   AddParameter(ParameterType_Int, "ts", "Training set size");
   SetParameterDescription("ts", "Size of the training set (in pixels).");
   SetDefaultParameterInt("ts", 100);
   MandatoryOff("ts");
 
-  AddParameter(ParameterType_Int, "nc", "Number of classes");
-  SetParameterDescription("nc", "Number of modes, which will be used to generate class membership.");
-  SetDefaultParameterInt("nc", 5);
-
   AddParameter(ParameterType_Int, "maxit", "Maximum number of iterations");
   SetParameterDescription("maxit", "Maximum number of iterations for the learning step.");
   SetDefaultParameterInt("maxit", 1000);
@@ -71,17 +79,12 @@ void ClassKMeansBase::InitKMSampling()
 
 void ClassKMeansBase::InitKMClassification()
 {
-  AddApplication("TrainVectorClassifier", "training", "Model training");
-  AddApplication("ComputeImagesStatistics", "imgstats", "Compute Images second order statistics");
-  AddApplication("ImageClassifier", "classif", "Performs a classification of the input image");
-
   ShareKMClassificationParams();
   ConnectKMClassificationParams();
 }
 
 void ClassKMeansBase::ShareKMSamplingParameters()
 {
-  ShareParameter("in", "imgenvelop.in");
   ShareParameter("ram", "polystats.ram");
   ShareParameter("sampler", "select.sampler");
   ShareParameter("vm", "polystats.mask", "Validity Mask",
@@ -96,8 +99,6 @@ void ClassKMeansBase::ShareKMClassificationParams()
     "but be careful to not take a label from another class. "
     "This application initalize the labels from 0 to N-1, "
     "N is the number of class (defined by 'nc' parameter).");
-
-  ShareParameter("out", "classif.out");
 }
 
 void ClassKMeansBase::ConnectKMSamplingParams()