diff --git a/Modules/Applications/AppClassification/app/otbVectorRegression.cxx b/Modules/Applications/AppClassification/app/otbVectorRegression.cxx
index d1b8a02f66db1d9b509cb1a0408b6f5d18501177..d4e23d4e491a2aa83d21c2f5dde609c2e3eb7d2c 100644
--- a/Modules/Applications/AppClassification/app/otbVectorRegression.cxx
+++ b/Modules/Applications/AppClassification/app/otbVectorRegression.cxx
@@ -93,7 +93,7 @@ void VectorRegression::DoInitSpecialization()
   SetOfficialDocLink();
 }
 
-// Confidence map computation is not support for regression.
+// Confidence map computation is not supported for regression.
 template <>
 bool VectorRegression::shouldComputeConfidenceMap() const
 {
diff --git a/Modules/Applications/AppClassification/include/otbVectorPrediction.h b/Modules/Applications/AppClassification/include/otbVectorPrediction.h
index 12cea014877dd05adc7a5f4c664e0d62f7ddbabd..916ace1ea6f6bbfff7ff33cd2785249be67c3139 100644
--- a/Modules/Applications/AppClassification/include/otbVectorPrediction.h
+++ b/Modules/Applications/AppClassification/include/otbVectorPrediction.h
@@ -49,36 +49,36 @@ class VectorPrediction : public Application
 {
 public:
   /** Standard class typedefs. */
-  typedef VectorPrediction              Self;
-  typedef Application                   Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
+  using Self = VectorPrediction;
+  using Superclass = Application;
+  using Pointer = itk::SmartPointer<Self>;
+  using ConstPointer = itk::SmartPointer<const Self>;
 
   /** Standard macro */
   itkNewMacro(Self);
 
   itkTypeMacro(Self, Application)
 
-      /** Filters typedef */
-      typedef float ValueType;
+  /** Filters typedef */
+  using ValueType = float;
   // Label type is float for regression and unsigned int for classification
-  typedef typename std::conditional<RegressionMode, float, unsigned int>::type LabelType;
+  using LabelType = typename std::conditional<RegressionMode, float, unsigned int>::type;
 
-  typedef itk::FixedArray<LabelType, 1> LabelSampleType;
-  typedef itk::Statistics::ListSample<LabelSampleType> LabelListSampleType;
+  using LabelSampleType = itk::FixedArray<LabelType, 1>;
+  using LabelListSampleType = itk::Statistics::ListSample<LabelSampleType>;
 
-  typedef otb::MachineLearningModel<ValueType, LabelType>        MachineLearningModelType;
-  typedef otb::MachineLearningModelFactory<ValueType, LabelType> MachineLearningModelFactoryType;
-  typedef typename MachineLearningModelType::Pointer                  ModelPointerType;
-  typedef typename MachineLearningModelType::ConfidenceListSampleType ConfidenceListSampleType;
+  using MachineLearningModelType = otb::MachineLearningModel<ValueType, LabelType>;
+  using MachineLearningModelFactoryType = otb::MachineLearningModelFactory<ValueType, LabelType>;
+  using ModelPointerType = typename MachineLearningModelType::Pointer;
+  using ConfidenceListSampleType = typename MachineLearningModelType::ConfidenceListSampleType;
 
   /** Statistics Filters typedef */
-  typedef itk::VariableLengthVector<ValueType>          MeasurementType;
-  typedef otb::StatisticsXMLFileReader<MeasurementType> StatisticsReader;
+  using MeasurementType = itk::VariableLengthVector<ValueType>;
+  using StatisticsReader = otb::StatisticsXMLFileReader<MeasurementType>;
 
-  typedef itk::VariableLengthVector<ValueType>         InputSampleType;
-  typedef itk::Statistics::ListSample<InputSampleType> ListSampleType;
-  typedef otb::Statistics::ShiftScaleSampleListFilter<ListSampleType, ListSampleType> ShiftScaleFilterType;
+  using InputSampleType = itk::VariableLengthVector<ValueType>;
+  using ListSampleType = itk::Statistics::ListSample<InputSampleType>;
+  using ShiftScaleFilterType = otb::Statistics::ShiftScaleSampleListFilter<ListSampleType, ListSampleType>;
 
   ~VectorPrediction() override
   {
diff --git a/Modules/Applications/AppClassification/include/otbVectorPrediction.hxx b/Modules/Applications/AppClassification/include/otbVectorPrediction.hxx
index 1310fdfb291f1c7390001b36185b9cb29d3839ae..4d84e9e0fc01d4f70c93fbc3deed4629f9115cda 100644
--- a/Modules/Applications/AppClassification/include/otbVectorPrediction.hxx
+++ b/Modules/Applications/AppClassification/include/otbVectorPrediction.hxx
@@ -47,24 +47,23 @@ void           VectorPrediction<RegressionMode>::DoUpdateParameters()
 {
   if (HasValue("in"))
   {
-    std::string shapefile = GetParameterString("in");
+    auto shapefileName = GetParameterString("in");
 
-    otb::ogr::DataSource::Pointer ogrDS;
-
-    ogrDS                     = otb::ogr::DataSource::New(shapefile, otb::ogr::DataSource::Modes::Read);
-    otb::ogr::Layer layer     = ogrDS->GetLayer(0);
+    auto ogrDS = otb::ogr::DataSource::New(shapefileName, otb::ogr::DataSource::Modes::Read);
+    auto layer     = ogrDS->GetLayer(0);
     OGRFeatureDefn& layerDefn = layer.GetLayerDefn();
-
+  
     ClearChoices("feat");
 
     for (int iField = 0; iField < layerDefn.GetFieldCount(); iField++)
     {
-      std::string item = layerDefn.GetFieldDefn(iField)->GetNameRef();
+      auto fieldDefn = layerDefn.GetFieldDefn(iField);
+      std::string item = fieldDefn->GetNameRef();
       std::string key(item);
       key.erase(std::remove_if(key.begin(), key.end(), IsNotAlphaNum), key.end());
       std::transform(key.begin(), key.end(), key.begin(), tolower);
 
-      OGRFieldType fieldType = layerDefn.GetFieldDefn(iField)->GetType();
+      auto fieldType = fieldDefn->GetType();
       if (fieldType == OFTInteger || fieldType == OFTInteger64 || fieldType == OFTReal)
       {
         std::string tmpKey = "feat." + key;
@@ -77,21 +76,17 @@ void           VectorPrediction<RegressionMode>::DoUpdateParameters()
 template <bool RegressionMode>
 void           VectorPrediction<RegressionMode>::DoExecute()
 {
-  clock_t tic = clock();
+  auto shapefileName = GetParameterString("in");
 
-  std::string shapefile = GetParameterString("in");
-
-  otb::ogr::DataSource::Pointer source = otb::ogr::DataSource::New(shapefile, otb::ogr::DataSource::Modes::Read);
-  otb::ogr::Layer               layer  = source->GetLayer(0);
+  auto source = otb::ogr::DataSource::New(shapefileName, otb::ogr::DataSource::Modes::Read);
+  auto layer  = source->GetLayer(0);
 
   typename ListSampleType::Pointer input = ListSampleType::New();
 
   const int nbFeatures = GetSelectedItems("feat").size();
   input->SetMeasurementVectorSize(nbFeatures);
 
-  otb::ogr::Layer::const_iterator it    = layer.cbegin();
-  otb::ogr::Layer::const_iterator itEnd = layer.cend();
-  for (; it != itEnd; ++it)
+  for (auto const& feature : layer)
   {
     MeasurementType mv;
     mv.SetSize(nbFeatures);
@@ -100,19 +95,18 @@ void           VectorPrediction<RegressionMode>::DoExecute()
       // Beware that itemIndex differs from ogr layer field index
       unsigned int itemIndex = GetSelectedItems("feat")[idx];
       std::string  fieldName = GetChoiceNames("feat")[itemIndex];
-      switch ((*it)[fieldName].GetType())
+      
+      auto field = feature[fieldName];
+      switch (field.GetType())
       {
-      case OFTInteger:
-        mv[idx] = static_cast<ValueType>((*it)[fieldName].GetValue<int>());
-        break;
-      case OFTInteger64:
-        mv[idx] = static_cast<ValueType>((*it)[fieldName].GetValue<int>());
+      case OFTInteger || OFTInteger64:
+        mv[idx] = static_cast<ValueType>(field.template GetValue<int>());
         break;
       case OFTReal:
-        mv[idx] = static_cast<ValueType>((*it)[fieldName].GetValue<double>());
+        mv[idx] = static_cast<ValueType>(field.template GetValue<double>());
         break;
       default:
-        itkExceptionMacro(<< "incorrect field type: " << (*it)[fieldName].GetType() << ".");
+        itkExceptionMacro(<< "incorrect field type: " << field.GetType() << ".");
       }
     }
     input->PushBack(mv);
@@ -202,7 +196,7 @@ void           VectorPrediction<RegressionMode>::DoExecute()
     // close input data source
     source->Clear();
     // Re-open input data source in update mode
-    output = otb::ogr::DataSource::New(shapefile, otb::ogr::DataSource::Modes::Update_LayerUpdate);
+    output = otb::ogr::DataSource::New(shapefileName, otb::ogr::DataSource::Modes::Update_LayerUpdate);
   }
 
   otb::ogr::Layer outLayer = output->GetLayer(0);
@@ -217,11 +211,7 @@ void           VectorPrediction<RegressionMode>::DoExecute()
 
   // Add the field of prediction in the output layer if field not exist
 
-  OGRFieldType labelType;
-  if (RegressionMode == true)
-    labelType = OFTReal;
-  else
-    labelType = OFTInteger;
+  const OGRFieldType labelType = RegressionMode ? OFTReal : OFTInteger;
 
   int idx = layerDefn.GetFieldIndex(GetParameterString("cfield").c_str());
   if (idx >= 0)
@@ -259,29 +249,25 @@ void           VectorPrediction<RegressionMode>::DoExecute()
   // Fill output layer
   unsigned int count          = 0;
   std::string  classfieldname = GetParameterString("cfield");
-  it                          = layer.cbegin();
-  itEnd                       = layer.cend();
-  for (; it != itEnd; ++it, ++count)
+  for (auto const& feature : layer)
   {
     ogr::Feature dstFeature(outLayer.GetLayerDefn());
-    dstFeature.SetFrom(*it, TRUE);
-    dstFeature.SetFID(it->GetFID());
-    switch (dstFeature[classfieldname].GetType())
+    dstFeature.SetFrom(feature, TRUE);
+    dstFeature.SetFID(feature.GetFID());
+    auto field = dstFeature[classfieldname];
+    switch (field.GetType())
     {
-    case OFTInteger:
-      dstFeature[classfieldname].SetValue<int>(target->GetMeasurementVector(count)[0]);
-      break;
-    case OFTInteger64:
-      dstFeature[classfieldname].SetValue<int>(target->GetMeasurementVector(count)[0]);
+    case OFTInteger || OFTInteger64:
+      field.template SetValue<int>(target->GetMeasurementVector(count)[0]);
       break;
     case OFTReal:
-      dstFeature[classfieldname].SetValue<double>(target->GetMeasurementVector(count)[0]);
+      field.template SetValue<double>(target->GetMeasurementVector(count)[0]);
       break;
     case OFTString:
-      dstFeature[classfieldname].SetValue<std::string>(std::to_string(target->GetMeasurementVector(count)[0]));
+      field.template SetValue<std::string>(std::to_string(target->GetMeasurementVector(count)[0]));
       break;
     default:
-      itkExceptionMacro(<< "incorrect field type: " << dstFeature[classfieldname].GetType() << ".");
+      itkExceptionMacro(<< "incorrect field type: " << field.GetType() << ".");
     }
     if (computeConfidenceMap)
       dstFeature[confFieldName].SetValue<double>(quality->GetMeasurementVector(count)[0]);
@@ -305,9 +291,6 @@ void           VectorPrediction<RegressionMode>::DoExecute()
   }
 
   output->SyncToDisk();
-
-  clock_t toc = clock();
-  otbAppLogINFO("Elapsed: " << ((double)(toc - tic) / CLOCKS_PER_SEC) << " seconds.");
 }
 
 } // end namespace wrapper