diff --git a/Examples/Application/ApplicationExample.cxx b/Examples/Application/ApplicationExample.cxx
index c01c061b4c09df82f14c49f454925995bb2ff3da..1268ad8938e249b88e424e2f2175f8e21e852748 100644
--- a/Examples/Application/ApplicationExample.cxx
+++ b/Examples/Application/ApplicationExample.cxx
@@ -97,7 +97,7 @@ private:
   //  \code{DoInit()} method contains class information and description, parameter set up, and example values.
   //  Software Guide : EndLatex
 
-  void DoInit()
+  void DoInit() override
   {
 
     // Software Guide : BeginLatex
@@ -228,7 +228,7 @@ private:
   // gives a complete description of this method.
   // Software Guide : EndLatex
   //  Software Guide :BeginCodeSnippet
-  void DoUpdateParameters()
+  void DoUpdateParameters() override
   {
   }
   //  Software Guide : EndCodeSnippet
@@ -238,7 +238,7 @@ private:
   // gives a complete description of this method.
   // Software Guide : EndLatex
   //  Software Guide :BeginCodeSnippet
-  void DoExecute()
+  void DoExecute() override
   {
     FloatVectorImageType::Pointer inImage = GetParameterImage("in");
 
diff --git a/Examples/ChangeDetection/ChangeDetectionFrameworkExample.cxx b/Examples/ChangeDetection/ChangeDetectionFrameworkExample.cxx
index 778497ba4d09134556feae6694867b4b4193cc61..3bb4c21abb937cd06225ca195c5b12801ac12dd9 100644
--- a/Examples/ChangeDetection/ChangeDetectionFrameworkExample.cxx
+++ b/Examples/ChangeDetection/ChangeDetectionFrameworkExample.cxx
@@ -138,7 +138,7 @@ public:
 
 protected:
   MyChangeDetectorImageFilter() {}
-  virtual ~MyChangeDetectorImageFilter() {}
+  ~MyChangeDetectorImageFilter() override {}
 
 private:
   MyChangeDetectorImageFilter(const Self &); //purposely not implemented
diff --git a/Examples/Filtering/CompositeFilterExample.cxx b/Examples/Filtering/CompositeFilterExample.cxx
index 9b76116102e987b7edbe0443caa3eb3bd352fb7b..765ef5a95757f19ff6475ecce4725662ec1e2085 100644
--- a/Examples/Filtering/CompositeFilterExample.cxx
+++ b/Examples/Filtering/CompositeFilterExample.cxx
@@ -93,7 +93,7 @@ public:
   itkTypeMacro(CompositeExampleImageFilter, itk::ImageToImageFilter);
 
   /** Display */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
 
 //  Software Guide : BeginLatex
 //
@@ -132,7 +132,7 @@ protected:
   RescalerType;
 //  Software Guide : EndCodeSnippet
 
-  void GenerateData();
+  void GenerateData() override;
 
 private:
 
diff --git a/Examples/Filtering/GeometriesChangeSpatialReference.cxx b/Examples/Filtering/GeometriesChangeSpatialReference.cxx
index 46d869c51026508269dab32bd59ac16371010fa8..7611ab2223f887b75e5183e1bacedfdacf4f478b 100644
--- a/Examples/Filtering/GeometriesChangeSpatialReference.cxx
+++ b/Examples/Filtering/GeometriesChangeSpatialReference.cxx
@@ -99,11 +99,11 @@ protected:
   /** Default constructor. */
   MyReprojectionFilter(){ }
   /** Destructor. */
-  virtual ~MyReprojectionFilter(){ }
+  ~MyReprojectionFilter() override{ }
 
 private:
 
-  virtual OGRSpatialReference*     DoDefineNewLayerSpatialReference(otb::ogr::Layer const& itkNotUsed(source)) const
+  OGRSpatialReference*     DoDefineNewLayerSpatialReference(otb::ogr::Layer const& itkNotUsed(source)) const override
     {
     return m_osr.get();
     }
diff --git a/Examples/Registration/ImageRegistration1.cxx b/Examples/Registration/ImageRegistration1.cxx
index ded1c98470a1211b559e03b2e0a27ce0ae969fb9..c388d2cfee2816d6509f175a7e10bf5e61a01734 100644
--- a/Examples/Registration/ImageRegistration1.cxx
+++ b/Examples/Registration/ImageRegistration1.cxx
@@ -78,12 +78,12 @@ public:
   typedef itk::RegularStepGradientDescentOptimizer OptimizerType;
   typedef const OptimizerType *                    OptimizerPointer;
 
-  void Execute(itk::Object *caller, const itk::EventObject& event)
+  void Execute(itk::Object *caller, const itk::EventObject& event) override
   {
     Execute((const itk::Object *) caller, event);
   }
 
-  void Execute(const itk::Object * object, const itk::EventObject& event)
+  void Execute(const itk::Object * object, const itk::EventObject& event) override
   {
     OptimizerPointer optimizer =
       dynamic_cast<OptimizerPointer>(object);
diff --git a/Examples/Registration/ImageRegistration2.cxx b/Examples/Registration/ImageRegistration2.cxx
index 250249c120623413597d9ee3c8b4faa497571908..3e05bcb050a0aa25e7a282bedd2241347b4db939 100644
--- a/Examples/Registration/ImageRegistration2.cxx
+++ b/Examples/Registration/ImageRegistration2.cxx
@@ -97,12 +97,12 @@ public:
   typedef   itk::GradientDescentOptimizer OptimizerType;
   typedef   const OptimizerType *         OptimizerPointer;
 
-  void Execute(itk::Object *caller, const itk::EventObject& event)
+  void Execute(itk::Object *caller, const itk::EventObject& event) override
   {
     Execute((const itk::Object *) caller, event);
   }
 
-  void Execute(const itk::Object * object, const itk::EventObject& event)
+  void Execute(const itk::Object * object, const itk::EventObject& event) override
   {
     OptimizerPointer optimizer =
       dynamic_cast<OptimizerPointer>(object);
diff --git a/Examples/Registration/ImageRegistration5.cxx b/Examples/Registration/ImageRegistration5.cxx
index 99ceedad4602b09a96b2fde80d24c66a12beecc9..9d7bca17777c664926f95bfa030d8fc3d37b650e 100644
--- a/Examples/Registration/ImageRegistration5.cxx
+++ b/Examples/Registration/ImageRegistration5.cxx
@@ -92,12 +92,12 @@ public:
   typedef itk::RegularStepGradientDescentOptimizer OptimizerType;
   typedef   const OptimizerType *                  OptimizerPointer;
 
-  void Execute(itk::Object *caller, const itk::EventObject& event)
+  void Execute(itk::Object *caller, const itk::EventObject& event) override
   {
     Execute((const itk::Object *) caller, event);
   }
 
-  void Execute(const itk::Object * object, const itk::EventObject& event)
+  void Execute(const itk::Object * object, const itk::EventObject& event) override
   {
     OptimizerPointer optimizer =
       dynamic_cast<OptimizerPointer>(object);
diff --git a/Examples/Registration/ImageRegistration9.cxx b/Examples/Registration/ImageRegistration9.cxx
index 5e1cd81eb7d2c6d520138612ef7216a9b6266ca9..99eaae233adf84b688047149c6a1e171a8d9e7d0 100644
--- a/Examples/Registration/ImageRegistration9.cxx
+++ b/Examples/Registration/ImageRegistration9.cxx
@@ -87,12 +87,12 @@ public:
   typedef itk::RegularStepGradientDescentOptimizer OptimizerType;
   typedef   const OptimizerType *                  OptimizerPointer;
 
-  void Execute(itk::Object *caller, const itk::EventObject& event)
+  void Execute(itk::Object *caller, const itk::EventObject& event) override
   {
     Execute((const itk::Object *) caller, event);
   }
 
-  void Execute(const itk::Object * object, const itk::EventObject& event)
+  void Execute(const itk::Object * object, const itk::EventObject& event) override
   {
     OptimizerPointer optimizer =
       dynamic_cast<OptimizerPointer>(object);
diff --git a/Examples/Simulation/LAIAndPROSAILToSensorResponse.cxx b/Examples/Simulation/LAIAndPROSAILToSensorResponse.cxx
index 38c27e81336d53c44fa8c6fc124f15aeb73dbd0e..09bea46d8a112b946c891a6f3175a98e3bfd3508 100644
--- a/Examples/Simulation/LAIAndPROSAILToSensorResponse.cxx
+++ b/Examples/Simulation/LAIAndPROSAILToSensorResponse.cxx
@@ -132,10 +132,10 @@ protected:
     {
     m_Image = NULL;
     }
-  virtual ~ImageUniqueValuesCalculator()
+  ~ImageUniqueValuesCalculator() override
   {
   }
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const override
   {
     Superclass::PrintSelf(os, indent);
     os << indent << "Image: " << m_Image.GetPointer() << std::endl;
@@ -449,9 +449,9 @@ public:
 
 protected:
   TernaryFunctorImageFilterWithNBands() {}
-  virtual ~TernaryFunctorImageFilterWithNBands() {}
+  ~TernaryFunctorImageFilterWithNBands() override {}
 
-  void GenerateOutputInformation()
+  void GenerateOutputInformation() override
   {
     Superclass::GenerateOutputInformation();
     this->GetOutput()->SetNumberOfComponentsPerPixel( m_NumberOfOutputBands );
diff --git a/Modules/Adapters/CurlAdapters/include/otbCurlHelper.h b/Modules/Adapters/CurlAdapters/include/otbCurlHelper.h
index b81ffce98cf8bdfd3e4013c3a6396afc0bf1487d..ceeac5f17316433c8e13b7833e0575a96315c596 100644
--- a/Modules/Adapters/CurlAdapters/include/otbCurlHelper.h
+++ b/Modules/Adapters/CurlAdapters/include/otbCurlHelper.h
@@ -45,19 +45,19 @@ public:
   itkTypeMacro(CurlHelper, CurlHelperInterface);
   itkNewMacro(Self);
 
-  bool TestUrlAvailability(const std::string& url) const;
+  bool TestUrlAvailability(const std::string& url) const ITK_OVERRIDE;
   
   bool IsCurlReturnHttpError(const std::string& url) const;
   
-  int RetrieveFile(const std::ostringstream& urlStream, std::string filename) const;
+  int RetrieveFile(const std::ostringstream& urlStream, std::string filename) const ITK_OVERRIDE;
   
-  int RetrieveFile(const std::string& urlString, std::string filename) const;
+  int RetrieveFile(const std::string& urlString, std::string filename) const ITK_OVERRIDE;
 
-  int RetrieveUrlInMemory(const std::string& urlString, std::string& output) const;
+  int RetrieveUrlInMemory(const std::string& urlString, std::string& output) const ITK_OVERRIDE;
 
   int RetrieveFileMulti(const std::vector<std::string>& listURLs,
                         const std::vector<std::string>& listFiles,
-                        int maxConnect) const;
+                        int maxConnect) const ITK_OVERRIDE;
 
   itkGetMacro(Timeout,long int);
   
@@ -68,7 +68,7 @@ protected:
     m_Browser("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.8.1.11) "
               "Gecko/20071127 Firefox/2.0.0.11"),
     m_Timeout(10) {}
-  virtual ~CurlHelper() {}
+  ~CurlHelper() ITK_OVERRIDE {}
 
 private:
   CurlHelper(const Self &);  //purposely not implemented
diff --git a/Modules/Adapters/CurlAdapters/include/otbCurlHelperInterface.h b/Modules/Adapters/CurlAdapters/include/otbCurlHelperInterface.h
index fb8f07b18c3453a57ef67496563d9418a978cce9..14b1472dd7904c4cf22b0c553c69faf2b39807a0 100644
--- a/Modules/Adapters/CurlAdapters/include/otbCurlHelperInterface.h
+++ b/Modules/Adapters/CurlAdapters/include/otbCurlHelperInterface.h
@@ -62,7 +62,7 @@ public:
 
 protected:
   CurlHelperInterface() {}
-  virtual ~CurlHelperInterface() {}
+  ~CurlHelperInterface() ITK_OVERRIDE {}
 
 private:
   CurlHelperInterface(const Self &);  //purposely not implemented
diff --git a/Modules/Adapters/CurlAdapters/include/otbCurlHelperStub.h b/Modules/Adapters/CurlAdapters/include/otbCurlHelperStub.h
index da7da9eea36b2befb83dbba1b030459d2b2b103e..546aba961d6de743c2674d08e3a80e5950d14896 100644
--- a/Modules/Adapters/CurlAdapters/include/otbCurlHelperStub.h
+++ b/Modules/Adapters/CurlAdapters/include/otbCurlHelperStub.h
@@ -44,20 +44,20 @@ public:
   
   itkNewMacro(Self);
 
-  bool TestUrlAvailability(const std::string& url) const;
+  bool TestUrlAvailability(const std::string& url) const ITK_OVERRIDE;
   
-  int RetrieveUrlInMemory(const std::string& urlString, std::string& output) const;
+  int RetrieveUrlInMemory(const std::string& urlString, std::string& output) const ITK_OVERRIDE;
   
-  int RetrieveFile(const std::ostringstream& urlStream, std::string filename) const;
+  int RetrieveFile(const std::ostringstream& urlStream, std::string filename) const ITK_OVERRIDE;
   
-  int RetrieveFile(const std::string& urlString, std::string filename) const;
+  int RetrieveFile(const std::string& urlString, std::string filename) const ITK_OVERRIDE;
 
   int RetrieveFileMulti(const std::vector<std::string>& listURLs,
                         const std::vector<std::string>& listFiles,
-                        int maxConnect) const;
+                        int maxConnect) const ITK_OVERRIDE;
 protected:
   CurlHelperStub() {}
-  virtual ~CurlHelperStub() {}
+  ~CurlHelperStub() ITK_OVERRIDE {}
 
 private:
   CurlHelperStub(const Self &);  //purposely not implemented
diff --git a/Modules/Adapters/CurlAdapters/src/otbCurlHelper.cxx b/Modules/Adapters/CurlAdapters/src/otbCurlHelper.cxx
index a44b6b2857b24184c2c8f834b33ea762857c7925..e464e78742c4e9a9346d51fea972a2bc19b64ab8 100644
--- a/Modules/Adapters/CurlAdapters/src/otbCurlHelper.cxx
+++ b/Modules/Adapters/CurlAdapters/src/otbCurlHelper.cxx
@@ -91,7 +91,7 @@ protected:
       }
   }
 
-  virtual ~CurlResource()
+  ~CurlResource() ITK_OVERRIDE
   {
     curl_easy_cleanup(m_Curl);
   }
@@ -137,7 +137,7 @@ protected:
       }
   }
 
-  virtual ~CurlMultiResource()
+  ~CurlMultiResource() ITK_OVERRIDE
   {
     curl_multi_cleanup(m_Curl);
   }
@@ -184,7 +184,7 @@ public:
 protected:
   CurlFileDescriptorResource(){}
 
-  virtual ~CurlFileDescriptorResource()
+  ~CurlFileDescriptorResource() ITK_OVERRIDE
   {
     fclose(m_File);
   }
diff --git a/Modules/Adapters/GdalAdapters/include/otbGeometriesSet.h b/Modules/Adapters/GdalAdapters/include/otbGeometriesSet.h
index 921f4de97e2749b8e95cfb1b6476bdf1422b9822..4026c1afd9f4fed1fbf917195faf3a084f1cd430 100644
--- a/Modules/Adapters/GdalAdapters/include/otbGeometriesSet.h
+++ b/Modules/Adapters/GdalAdapters/include/otbGeometriesSet.h
@@ -156,10 +156,10 @@ protected:
   GeometriesSet(ogr::Layer layer);
 
   /** Destructor. */
-  virtual ~GeometriesSet();
+  ~GeometriesSet() ITK_OVERRIDE;
 
   /** Prints self to stream. */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 private:
   typedef boost::variant<ogr::DataSource::Pointer, ogr::Layer> AnyGeometriesSetType;
   AnyGeometriesSetType m_GeometriesSet;
diff --git a/Modules/Adapters/GdalAdapters/include/otbGeometriesSource.h b/Modules/Adapters/GdalAdapters/include/otbGeometriesSource.h
index aa1da8c42e9b794930c464c21ed1b33a68ff7bd1..01e13bea82f8fbbf9d9c7ce4f950a220bf7c13d7 100644
--- a/Modules/Adapters/GdalAdapters/include/otbGeometriesSource.h
+++ b/Modules/Adapters/GdalAdapters/include/otbGeometriesSource.h
@@ -114,7 +114,7 @@ public:
    * initializing them.
    * \post <tt>GetOutput() != NULL</tt>
    */
-  virtual void PrepareOutputs();
+  void PrepareOutputs() ITK_OVERRIDE;
 
 protected:
   /** Default constructor.
@@ -124,7 +124,7 @@ protected:
   /** Destructor.
    * Does nothing.
    */
-  virtual ~GeometriesSource();
+  ~GeometriesSource() ITK_OVERRIDE;
 
   /** Ensures that the output geometries are allocated before processing.
    * If the output hasn't been set, at this point, the default output geometries
diff --git a/Modules/Adapters/GdalAdapters/include/otbGeometriesToGeometriesFilter.h b/Modules/Adapters/GdalAdapters/include/otbGeometriesToGeometriesFilter.h
index f5b9de54a347a66dc4fc795c389dd7a68bfe6a7f..b487ba34ba2d3882265ee8d028c3f5478857bbcb 100644
--- a/Modules/Adapters/GdalAdapters/include/otbGeometriesToGeometriesFilter.h
+++ b/Modules/Adapters/GdalAdapters/include/otbGeometriesToGeometriesFilter.h
@@ -86,13 +86,13 @@ protected:
   /** Destructor.
    * Does nothing.
    */
-  virtual ~GeometriesToGeometriesFilter();
+  ~GeometriesToGeometriesFilter() ITK_OVERRIDE;
 
   /** Processes the input to fill the output.
    * This is the main processing function. It either works \em in-place or by
    * \em copying the transformed input \c Feature s into the output.
    */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
 private:
   /** \e In-place processing function.
@@ -358,7 +358,7 @@ protected:
   /** Default constructor. */
   DefaultGeometriesToGeometriesFilter();
   /** Destructor. */
-  virtual ~DefaultGeometriesToGeometriesFilter();
+  ~DefaultGeometriesToGeometriesFilter() ITK_OVERRIDE;
 
   /**
    * Hook that actually filters an OGR \c Layer.
@@ -370,7 +370,7 @@ protected:
    * \note When <tt>source == destination</tt>, it means this is an \em in-place
    * filter.
    */
-  virtual void DoProcessLayer(ogr::Layer const& source, ogr::Layer & destination) const;
+  void DoProcessLayer(ogr::Layer const& source, ogr::Layer & destination) const ITK_OVERRIDE;
   /**
    * Hook used to define the fields of the new layer.
    * \param[in] source  source \c Layer -- for reference
@@ -379,7 +379,7 @@ protected:
    * Just forwards the fields definition to the \c FieldTransformationPolicy
    * inherited from the \c TransformationFunctorDispatcherType.
    */
-  virtual void DoDefineNewLayerFields(ogr::Layer const& source, ogr::Layer & dest) const
+  void DoDefineNewLayerFields(ogr::Layer const& source, ogr::Layer & dest) const ITK_OVERRIDE
     {
     this->DefineFields(source, dest);
     }
diff --git a/Modules/Adapters/GdalAdapters/include/otbOGRDataSourceWrapper.h b/Modules/Adapters/GdalAdapters/include/otbOGRDataSourceWrapper.h
index a16eabcbc564e708ac5e23ba9a16e5fd26d38c1d..ac9845e882ea24d9260978e096da15335030f904 100644
--- a/Modules/Adapters/GdalAdapters/include/otbOGRDataSourceWrapper.h
+++ b/Modules/Adapters/GdalAdapters/include/otbOGRDataSourceWrapper.h
@@ -286,7 +286,7 @@ public:
    * meta information of another data source and use the same underlying \c
    * GDALDataset.
    */
-  virtual void Graft(const itk::DataObject *data);
+  void Graft(const itk::DataObject *data) ITK_OVERRIDE;
 
   /**
    * Resets current data source with the one in parameter.
@@ -510,12 +510,12 @@ protected:
   /** Destructor.
    * \post The \c GDALDataset owned is released (if not null).
    */
-  virtual ~DataSource();
+  ~DataSource() ITK_OVERRIDE;
 
   static Pointer OpenDataSource(std::string const& datasourceName, Modes::type mode);
 
   /** Prints self into stream. */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /**
diff --git a/Modules/Adapters/GdalAdapters/include/otbOGRFieldWrapper.txx b/Modules/Adapters/GdalAdapters/include/otbOGRFieldWrapper.txx
index abd5a669012ba38531fe126e6acc71c01e017ef7..e7e0dd26738e9a44a1e86836dfd583435bd6403c 100644
--- a/Modules/Adapters/GdalAdapters/include/otbOGRFieldWrapper.txx
+++ b/Modules/Adapters/GdalAdapters/include/otbOGRFieldWrapper.txx
@@ -128,7 +128,7 @@ template
  * <tt> = T</tt>)
  *
  * \internal
- * This override is required because of the particular nature of the
+ * This ITK_OVERRIDE is required because of the particular nature of the
  * <tt>char**</tt> type chosen by OGR API, plus the fact this is the only
  * const-correct getter...
  * \since OTB v 3.14.0
@@ -258,7 +258,7 @@ template
  * <tt> = T</tt>)
  *
  * \internal
- * This override is required because of the particular nature of the
+ * This ITK_OVERRIDE is required because of the particular nature of the
  * <tt>char**</tt> type chosen by OGR API.
  * \since OTB v 3.14.0
  */
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbDEMConvertAdapter.h b/Modules/Adapters/OSSIMAdapters/include/otbDEMConvertAdapter.h
index 19312472cf5fc2f1efbb4ad02b531a2381a21b5c..e821d7fe7badec93c9eef6a6622ab5a1d772031e 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbDEMConvertAdapter.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbDEMConvertAdapter.h
@@ -44,7 +44,7 @@ public:
 
 protected:
   DEMConvertAdapter();
-  virtual ~DEMConvertAdapter();
+  ~DEMConvertAdapter() ITK_OVERRIDE;
 
 private:
   DEMConvertAdapter(const Self &); //purposely not implemented
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbDEMHandler.h b/Modules/Adapters/OSSIMAdapters/include/otbDEMHandler.h
index c15b815b8f8b24e952729b76aabf6c6679c02699..7f6efa7fbc27e80dc683ab9d9c75079df556c15d 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbDEMHandler.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbDEMHandler.h
@@ -165,9 +165,9 @@ public:
 
 protected:
   DEMHandler();
-  virtual ~DEMHandler() {}
+  ~DEMHandler() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   // Ossim does not allow retrieving the geoid file path
   // We therefore must keep it on our side
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbDateTimeAdapter.h b/Modules/Adapters/OSSIMAdapters/include/otbDateTimeAdapter.h
index f3734093599b82f496f34fdf79c1adfe3e551521..67c6bb6016b511b49f7c779425efcc69dbcdacf4 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbDateTimeAdapter.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbDateTimeAdapter.h
@@ -81,7 +81,7 @@ public:
   
 protected:
   DateTimeAdapter();
-  virtual ~DateTimeAdapter();
+  ~DateTimeAdapter() ITK_OVERRIDE;
 
 private:
   DateTimeAdapter(const Self &); //purposely not implemented
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbEllipsoidAdapter.h b/Modules/Adapters/OSSIMAdapters/include/otbEllipsoidAdapter.h
index 9764e772cac6c101e13c6963441ee8d8bb2017ba..05eecad8f99410d1c704860d3c249ef56cb1851a 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbEllipsoidAdapter.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbEllipsoidAdapter.h
@@ -62,7 +62,7 @@ public:
 
 protected:
   EllipsoidAdapter();
-  virtual ~EllipsoidAdapter();
+  ~EllipsoidAdapter() ITK_OVERRIDE;
 
 private:
   EllipsoidAdapter(const Self &); //purposely not implemented
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbFilterFunctionValues.h b/Modules/Adapters/OSSIMAdapters/include/otbFilterFunctionValues.h
index d14e2f41f8b722e838a5178582bc1742dc4a5a98..0a72158a8f8d496551e0f6d8bef161471b22d6f9 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbFilterFunctionValues.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbFilterFunctionValues.h
@@ -98,10 +98,10 @@ protected:
   /** Constructor */
   FilterFunctionValues();
   /** Destructor */
-  ~FilterFunctionValues() {}
+  ~FilterFunctionValues() ITK_OVERRIDE {}
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   FilterFunctionValues(const Self &); //purposely not implemented
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbGeometricSarSensorModelAdapter.h b/Modules/Adapters/OSSIMAdapters/include/otbGeometricSarSensorModelAdapter.h
index e4395106f9613be992e476213ab5c83c29d5acb5..4c1801ad71f20f6743425f9c954c3cb7c119b2ce 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbGeometricSarSensorModelAdapter.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbGeometricSarSensorModelAdapter.h
@@ -73,7 +73,7 @@ public:
 
 protected:
   GeometricSarSensorModelAdapter();
-  virtual ~GeometricSarSensorModelAdapter();
+  ~GeometricSarSensorModelAdapter() ITK_OVERRIDE;
 
 private:
   GeometricSarSensorModelAdapter(const Self &); //purposely not implemented
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbMapProjectionAdapter.h b/Modules/Adapters/OSSIMAdapters/include/otbMapProjectionAdapter.h
index b935f8e7e00c05e397f47113594c3b2bf5cc3c20..50366a012e8fd22beaffc943fdafca484eb2fb84 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbMapProjectionAdapter.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbMapProjectionAdapter.h
@@ -82,7 +82,7 @@ public:
 
 protected:
   MapProjectionAdapter();
-  virtual ~MapProjectionAdapter();
+  ~MapProjectionAdapter() ITK_OVERRIDE;
 
 private:
   MapProjectionAdapter(const Self &); //purposely not implemented
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbPlatformPositionAdapter.h b/Modules/Adapters/OSSIMAdapters/include/otbPlatformPositionAdapter.h
index ea0535417b3357872a60aa5f5da027df92720e91..47e57f067046508b93c56bd14a9ab1a8971b9c2a 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbPlatformPositionAdapter.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbPlatformPositionAdapter.h
@@ -73,7 +73,7 @@ public:
 
 protected:
   PlatformPositionAdapter();
-  virtual ~PlatformPositionAdapter();
+  ~PlatformPositionAdapter() ITK_OVERRIDE;
 
 private:
   PlatformPositionAdapter(const Self &); //purposely not implemented
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbSensorModelAdapter.h b/Modules/Adapters/OSSIMAdapters/include/otbSensorModelAdapter.h
index 25808e93d4c4a7ae6679b99180dbfea498638807..af899c1fa6851d567108badd349b7866364ee287 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbSensorModelAdapter.h
+++ b/Modules/Adapters/OSSIMAdapters/include/otbSensorModelAdapter.h
@@ -108,7 +108,7 @@ public:
 
 protected:
   SensorModelAdapter();
-  virtual ~SensorModelAdapter();
+  ~SensorModelAdapter() ITK_OVERRIDE;
 
 private:
   SensorModelAdapter(const Self &); //purposely not implemented
diff --git a/Modules/Core/CommandLineParser/include/otbCommandLineArgumentParser.h b/Modules/Core/CommandLineParser/include/otbCommandLineArgumentParser.h
index 8c7eef2f55695b23bd5f5ceef8c1066c5589cf5d..4b252f5a4f84d86405821092bf78f89e5d575de4 100644
--- a/Modules/Core/CommandLineParser/include/otbCommandLineArgumentParser.h
+++ b/Modules/Core/CommandLineParser/include/otbCommandLineArgumentParser.h
@@ -137,7 +137,7 @@ public:
 //  const char *GetOptionParameter(const char *option, unsigned int number = 0);
   int GetNumberOfParameters(const std::string& option);
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 #define otbGetParameterMacro(name, type)                                                 \
   virtual type GetParameter ## name (const std::string& option, unsigned int number = 0) const     \
@@ -167,7 +167,7 @@ public:
 
 protected:
   CommandLineArgumentParseResult();
-  virtual ~CommandLineArgumentParseResult();
+  ~CommandLineArgumentParseResult() ITK_OVERRIDE;
 
 private:
   template<typename TypeValeur>
@@ -251,7 +251,7 @@ public:
 
 protected:
   CommandLineArgumentParser();
-  virtual ~CommandLineArgumentParser();
+  ~CommandLineArgumentParser() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Core/Common/include/otbChannelSelectorFunctor.h b/Modules/Core/Common/include/otbChannelSelectorFunctor.h
index 8780dc3910fb36a07fd43e0ac2e8962523e22bf4..802938bbd0fb2e95e20c51a3ea2ccfb28565d90a 100644
--- a/Modules/Core/Common/include/otbChannelSelectorFunctor.h
+++ b/Modules/Core/Common/include/otbChannelSelectorFunctor.h
@@ -245,7 +245,7 @@ protected:
   }
 
   /** Destructor */
-  virtual ~ChannelSelectorFunctor() {}
+  ~ChannelSelectorFunctor() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Common/include/otbCommandProgressUpdate.h b/Modules/Core/Common/include/otbCommandProgressUpdate.h
index 7842014eddc5049777d88a15dfd53a14dde1a6d9..4fd0842f39d795fac8f99c36ffc147c86ddc6d0b 100644
--- a/Modules/Core/Common/include/otbCommandProgressUpdate.h
+++ b/Modules/Core/Common/include/otbCommandProgressUpdate.h
@@ -45,9 +45,9 @@ protected:
 public:
   typedef   const TFilter * FilterPointer;
 
-  void Execute(itk::Object *caller, const itk::EventObject& event);
+  void Execute(itk::Object *caller, const itk::EventObject& event) ITK_OVERRIDE;
 
-  void Execute(const itk::Object * object, const itk::EventObject& event);
+  void Execute(const itk::Object * object, const itk::EventObject& event) ITK_OVERRIDE;
 };
 
 } // end namespace otb
diff --git a/Modules/Core/Common/include/otbComplexToIntensityImageFilter.h b/Modules/Core/Common/include/otbComplexToIntensityImageFilter.h
index 6c2ab5ffc807ba570a0128a486320453385cb770..a91f59ad4bf65bcd30c995a8c94b0ccc85a1b70f 100644
--- a/Modules/Core/Common/include/otbComplexToIntensityImageFilter.h
+++ b/Modules/Core/Common/include/otbComplexToIntensityImageFilter.h
@@ -96,7 +96,7 @@ public:
 
 protected:
   ComplexToIntensityImageFilter() {}
-  virtual ~ComplexToIntensityImageFilter() {}
+  ~ComplexToIntensityImageFilter() ITK_OVERRIDE {}
 
 private:
   ComplexToIntensityImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbComplexToVectorImageCastFilter.h b/Modules/Core/Common/include/otbComplexToVectorImageCastFilter.h
index 763447c38590cfbeae4f8266caeb752fbc726020..0cb2d45d07c931e4dc4991c49a75c10c2b13de1a 100644
--- a/Modules/Core/Common/include/otbComplexToVectorImageCastFilter.h
+++ b/Modules/Core/Common/include/otbComplexToVectorImageCastFilter.h
@@ -137,7 +137,7 @@ public:
 
 protected:
   ComplexToVectorImageCastFilter() {}
-  virtual ~ComplexToVectorImageCastFilter() {}
+  ~ComplexToVectorImageCastFilter() ITK_OVERRIDE {}
 
   template<class T>
   bool PixelIsSingle(const T& /*dummy*/)
@@ -151,7 +151,7 @@ protected:
               return false;
   }
 
-  void GenerateOutputInformation()
+  void GenerateOutputInformation() ITK_OVERRIDE
   {
               Superclass::GenerateOutputInformation();
               InputPixelType dummy;
diff --git a/Modules/Core/Common/include/otbDotProductImageFilter.h b/Modules/Core/Common/include/otbDotProductImageFilter.h
index 34effe45e5c1105f3c29e8c2bf2ebef5aceb23af..1441a8a66ee6d58b645bec4062366c8d3a8e5cdb 100644
--- a/Modules/Core/Common/include/otbDotProductImageFilter.h
+++ b/Modules/Core/Common/include/otbDotProductImageFilter.h
@@ -137,9 +137,9 @@ public:
 protected:
   DotProductImageFilter();
 
-  virtual ~DotProductImageFilter() {}
+  ~DotProductImageFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   DotProductImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbFunctionToImageFilter.h b/Modules/Core/Common/include/otbFunctionToImageFilter.h
index b01099fc25722f90521097e437bee075bb5c3341..fa2353835d79c66897a7fe758b265e8340fc14c7 100644
--- a/Modules/Core/Common/include/otbFunctionToImageFilter.h
+++ b/Modules/Core/Common/include/otbFunctionToImageFilter.h
@@ -103,11 +103,11 @@ public:
 
 protected:
   FunctionToImageFilter();
-  virtual ~FunctionToImageFilter() {}
+  ~FunctionToImageFilter() ITK_OVERRIDE {}
 
   /** Validate the presence of all three inputs. If one or more inputs
    * are missing, throw an exception. */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** SpatialFunctionImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -119,8 +119,8 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   FunctionToImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbImageAndVectorImageOperationFilter.h b/Modules/Core/Common/include/otbImageAndVectorImageOperationFilter.h
index 8689065323a77c208bb468d131402d242ad97953..d8ec5e0952772e3d53cd72cec037c41e40ea00f5 100644
--- a/Modules/Core/Common/include/otbImageAndVectorImageOperationFilter.h
+++ b/Modules/Core/Common/include/otbImageAndVectorImageOperationFilter.h
@@ -160,7 +160,7 @@ public:
 
   /** Set the input images of this process object.  */
   using Superclass::SetInput;
-  void SetInput(const InputImageType *input);
+  void SetInput(const InputImageType *input) ITK_OVERRIDE;
   void SetVectorInput(const VectorInputImageType *input);
 
   /** Get the input images of this process object.  */
@@ -212,12 +212,12 @@ public:
 
 protected:
   ImageAndVectorImageOperationFilter();
-  virtual ~ImageAndVectorImageOperationFilter();
+  ~ImageAndVectorImageOperationFilter() ITK_OVERRIDE;
 
   /** This is a source, so it must set the spacing, size, and largest possible
    * region for the output image that it will produce.
    * \sa ProcessObject::GenerateOutputInformation() */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
   ImageAndVectorImageOperationFilter(const ImageAndVectorImageOperationFilter &); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbImageRegionAdaptativeSplitter.h b/Modules/Core/Common/include/otbImageRegionAdaptativeSplitter.h
index 16ce4cd343e5de0a6e871a993beeb3db27bee071..57384fd469203aa7428c2884f10d06920e74f55a 100644
--- a/Modules/Core/Common/include/otbImageRegionAdaptativeSplitter.h
+++ b/Modules/Core/Common/include/otbImageRegionAdaptativeSplitter.h
@@ -119,17 +119,17 @@ public:
    * number of splits, and call the EstimateSplitMap() method if
    * necessary.
    */
-  virtual unsigned int GetNumberOfSplits(const RegionType& region,
-                                         unsigned int requestedNumber);
+  unsigned int GetNumberOfSplits(const RegionType& region,
+                                         unsigned int requestedNumber) ITK_OVERRIDE;
 
   /** Calling this method will set the image region and the requested
    * number of splits, and call the EstimateSplitMap() method if
    * necessary. */
-  virtual RegionType GetSplit(unsigned int i, unsigned int numberOfPieces,
-                              const RegionType& region);
+  RegionType GetSplit(unsigned int i, unsigned int numberOfPieces,
+                              const RegionType& region) ITK_OVERRIDE;
 
   /** Make the Modified() method update the IsUpToDate flag */
-  virtual void Modified() const
+  void Modified() const ITK_OVERRIDE
   {
     // Call superclass implementation
     Superclass::Modified();
@@ -146,8 +146,8 @@ protected:
                                     m_IsUpToDate(false)
                                       {}
 
-  virtual ~ImageRegionAdaptativeSplitter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageRegionAdaptativeSplitter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** This methods actually estimate the split map and stores it in a
diff --git a/Modules/Core/Common/include/otbImageRegionNonUniformMultidimensionalSplitter.h b/Modules/Core/Common/include/otbImageRegionNonUniformMultidimensionalSplitter.h
index cf2a68bd8f1d7a36613e040c46eaa09f5549ed64..31120be9c7abde969cd6cf7ed632a4fd3c806b48 100644
--- a/Modules/Core/Common/include/otbImageRegionNonUniformMultidimensionalSplitter.h
+++ b/Modules/Core/Common/include/otbImageRegionNonUniformMultidimensionalSplitter.h
@@ -95,19 +95,19 @@ public:
    * a certain dimensions, then some splits will not be possible. This
    * method returns a number less than or equal to the requested number
    * of pieces.  */
-  virtual unsigned int GetNumberOfSplits(const RegionType& region,
-                                         unsigned int requestedNumber);
+  unsigned int GetNumberOfSplits(const RegionType& region,
+                                         unsigned int requestedNumber) ITK_OVERRIDE;
 
   /** Get a region definition that represents the ith piece a specified region.
    * The "numberOfPieces" specified should be less than or equal to what
    * GetNumberOfSplits() returns. */
-  virtual RegionType GetSplit(unsigned int i, unsigned int numberOfPieces,
-                              const RegionType& region);
+  RegionType GetSplit(unsigned int i, unsigned int numberOfPieces,
+                              const RegionType& region) ITK_OVERRIDE;
 
 protected:
   ImageRegionNonUniformMultidimensionalSplitter() {}
-  virtual ~ImageRegionNonUniformMultidimensionalSplitter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageRegionNonUniformMultidimensionalSplitter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageRegionNonUniformMultidimensionalSplitter(const Self &); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbImageRegionSquareTileSplitter.h b/Modules/Core/Common/include/otbImageRegionSquareTileSplitter.h
index a9ad5ccb2375133623494e829bb0a99bc6348119..7058757c605a9c17645466551d479f38427dae0d 100644
--- a/Modules/Core/Common/include/otbImageRegionSquareTileSplitter.h
+++ b/Modules/Core/Common/include/otbImageRegionSquareTileSplitter.h
@@ -109,14 +109,14 @@ public:
    *  instance, if the numberOfPieces exceeds the number of pixels along
    *  a certain dimensions, then some splits will not be possible.
    */
-  virtual unsigned int GetNumberOfSplits(const RegionType& region,
-                                         unsigned int requestedNumber);
+  unsigned int GetNumberOfSplits(const RegionType& region,
+                                         unsigned int requestedNumber) ITK_OVERRIDE;
 
   /** Get a region definition that represents the ith piece a specified region.
    * The "numberOfPieces" specified should be less than or equal to what
    * GetNumberOfSplits() returns. */
-  virtual RegionType GetSplit(unsigned int i, unsigned int numberOfPieces,
-                              const RegionType& region);
+  RegionType GetSplit(unsigned int i, unsigned int numberOfPieces,
+                              const RegionType& region) ITK_OVERRIDE;
 
   itkGetMacro(TileSizeAlignment, unsigned int);
   itkSetMacro(TileSizeAlignment, unsigned int);
@@ -125,8 +125,8 @@ public:
 
 protected:
   ImageRegionSquareTileSplitter() : m_SplitsPerDimension(0U), m_TileDimension(0), m_TileSizeAlignment(16) {}
-  virtual ~ImageRegionSquareTileSplitter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageRegionSquareTileSplitter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageRegionSquareTileSplitter(const ImageRegionSquareTileSplitter &); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbImageRegionTileMapSplitter.h b/Modules/Core/Common/include/otbImageRegionTileMapSplitter.h
index 34a3ea7800190c5d939aaba4d6708c7180ae7fa0..69aa70fa0ea2ac05bcadb7b723ef904bbfd6cde8 100644
--- a/Modules/Core/Common/include/otbImageRegionTileMapSplitter.h
+++ b/Modules/Core/Common/include/otbImageRegionTileMapSplitter.h
@@ -110,19 +110,19 @@ public:
        * a certain dimensions, then some splits will not be possible. This
        * method returns a number less than or equal to the requested number
    * of pieces. */
-  virtual unsigned int GetNumberOfSplits(const RegionType& region,
-                                         unsigned int requestedNumber);
+  unsigned int GetNumberOfSplits(const RegionType& region,
+                                         unsigned int requestedNumber) ITK_OVERRIDE;
 
   /** Get a region definition that represents the ith piece a specified region.
        * The "numberOfPieces" specified should be less than or equal to what
    * GetNumberOfSplits() returns. */
-  virtual RegionType GetSplit(unsigned int i, unsigned int numberOfPieces,
-                              const RegionType& region);
+  RegionType GetSplit(unsigned int i, unsigned int numberOfPieces,
+                              const RegionType& region) ITK_OVERRIDE;
 
 protected:
   ImageRegionTileMapSplitter() : m_AlignStep(256){}
-  virtual ~ImageRegionTileMapSplitter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageRegionTileMapSplitter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageRegionTileMapSplitter(const ImageRegionTileMapSplitter &); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbImageToModulusAndDirectionImageFilter.h b/Modules/Core/Common/include/otbImageToModulusAndDirectionImageFilter.h
index 359edfd4c3ffbfdad23e6b8efa8c8d47ac8e45c3..e0fe3a64ffa30983e85d93ec3a7da2a06ff04051 100644
--- a/Modules/Core/Common/include/otbImageToModulusAndDirectionImageFilter.h
+++ b/Modules/Core/Common/include/otbImageToModulusAndDirectionImageFilter.h
@@ -83,12 +83,12 @@ public:
   /** Return the output image direction */
   OutputImageDirectionType * GetOutputDirection();
 
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
 protected:
   ImageToModulusAndDirectionImageFilter();
-  virtual ~ImageToModulusAndDirectionImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageToModulusAndDirectionImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageToModulusAndDirectionImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbImaginaryImageToComplexImageFilter.h b/Modules/Core/Common/include/otbImaginaryImageToComplexImageFilter.h
index e84721599d9f92a8929b913443f74bfbae6c2d8d..e1718630dde178d715eba108bac32918095621b2 100644
--- a/Modules/Core/Common/include/otbImaginaryImageToComplexImageFilter.h
+++ b/Modules/Core/Common/include/otbImaginaryImageToComplexImageFilter.h
@@ -89,7 +89,7 @@ public:
 
 protected:
   ImaginaryImageToComplexImageFilter() {}
-  virtual ~ImaginaryImageToComplexImageFilter() {}
+  ~ImaginaryImageToComplexImageFilter() ITK_OVERRIDE {}
 
 private:
   ImaginaryImageToComplexImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbImportImageFilter.h b/Modules/Core/Common/include/otbImportImageFilter.h
index c5a927129ea279c33274144cb5dc7d960c31eb9c..a2c78cc46295823a6d4ca3db49b78167e7d67a95 100644
--- a/Modules/Core/Common/include/otbImportImageFilter.h
+++ b/Modules/Core/Common/include/otbImportImageFilter.h
@@ -142,26 +142,26 @@ public:
 
 protected:
   ImportImageFilter();
-  virtual ~ImportImageFilter();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImportImageFilter() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** This filter does not actually "produce" any data, rather it "wraps"
    * the user supplied data into an itk::Image.  */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** This is a source, so it must set the spacing, size, and largest possible
    * region for the output image that it will produce.
    * \sa ProcessObject::GenerateOutputInformation() */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** This filter can only produce the amount of data that it is given,
-   * so we must override ProcessObject::EnlargeOutputRequestedRegion()
+   * so we must ITK_OVERRIDE ProcessObject::EnlargeOutputRequestedRegion()
    * (The default implementation of a source produces the amount of
    * data requested.  This source, however, can only produce what it is
    * given.)
    *
    * \sa ProcessObject::EnlargeOutputRequestedRegion() */
-  virtual void EnlargeOutputRequestedRegion(itk::DataObject *output);
+  void EnlargeOutputRequestedRegion(itk::DataObject *output) ITK_OVERRIDE;
 
 private:
   ImportImageFilter(const ImportImageFilter &); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbImportVectorImageFilter.h b/Modules/Core/Common/include/otbImportVectorImageFilter.h
index 08ebbf63cdf6469b1686c1683476affe3f7fb835..be1f381e9196ca7e2fa7076b5945e05369c5505e 100644
--- a/Modules/Core/Common/include/otbImportVectorImageFilter.h
+++ b/Modules/Core/Common/include/otbImportVectorImageFilter.h
@@ -159,7 +159,7 @@ protected:
   virtual void GenerateOutputInformation();
 
   /** This filter can only produce the amount of data that it is given,
-   * so we must override ProcessObject::EnlargeOutputRequestedRegion()
+   * so we must ITK_OVERRIDE ProcessObject::EnlargeOutputRequestedRegion()
    * (The default implementation of a source produces the amount of
    * data requested.  This source, however, can only produce what it is
    * given.)
diff --git a/Modules/Core/Common/include/otbModelComponentBase.h b/Modules/Core/Common/include/otbModelComponentBase.h
index f8956cd307f52042e506271f6d485cc51c9d8cc1..5d2ef2af6fd314fe4fdff8e617ffdbb932324f3e 100644
--- a/Modules/Core/Common/include/otbModelComponentBase.h
+++ b/Modules/Core/Common/include/otbModelComponentBase.h
@@ -128,8 +128,8 @@ public:
 
 protected:
   ModelComponentBase();
-  virtual ~ModelComponentBase() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ModelComponentBase() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   virtual void GenerateData();
 
diff --git a/Modules/Core/Common/include/otbModelComponentBase.txx b/Modules/Core/Common/include/otbModelComponentBase.txx
index 7c04686518e0295a693a5684f96d3be9474314f5..c150f29ed777a78f685b85d7dcfa678860a4c04f 100644
--- a/Modules/Core/Common/include/otbModelComponentBase.txx
+++ b/Modules/Core/Common/include/otbModelComponentBase.txx
@@ -186,7 +186,7 @@ void
 ModelComponentBase<TSample>
 ::GenerateData()
 {
-  /** subclasses should override this function to perform
+  /** subclasses should ITK_OVERRIDE this function to perform
    *  parameter estimation. But it allows switching m_SampleModified
    *  when necessary.
    */
diff --git a/Modules/Core/Common/include/otbQuaternaryFunctorImageFilter.h b/Modules/Core/Common/include/otbQuaternaryFunctorImageFilter.h
index 80be874f90fd44fea0fb9bb9bc9ff39165bb77c1..0dd78cac31309d7d7fa2bcf57490c1948b8623ed 100644
--- a/Modules/Core/Common/include/otbQuaternaryFunctorImageFilter.h
+++ b/Modules/Core/Common/include/otbQuaternaryFunctorImageFilter.h
@@ -141,11 +141,11 @@ public:
 
 protected:
   QuaternaryFunctorImageFilter();
-  virtual ~QuaternaryFunctorImageFilter() {}
+  ~QuaternaryFunctorImageFilter() ITK_OVERRIDE {}
 
   /** Validate the presence of all three inputs. If one or more inputs
    * are missing, throw an exception. */
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** QuaternaryFunctorImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -158,7 +158,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   QuaternaryFunctorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbRGBAPixelConverter.h b/Modules/Core/Common/include/otbRGBAPixelConverter.h
index e3ee8bcf3ee77bf1c97338b5523a430a3883147f..d20406bcaf106a3635cf7d202c7c17214fc6e28e 100644
--- a/Modules/Core/Common/include/otbRGBAPixelConverter.h
+++ b/Modules/Core/Common/include/otbRGBAPixelConverter.h
@@ -63,8 +63,8 @@ public:
 
 protected:
   RGBAPixelConverter(){}
-  virtual ~RGBAPixelConverter(){}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~RGBAPixelConverter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
@@ -100,8 +100,8 @@ public:
 
 protected:
   RGBAPixelConverter(){}
-  virtual ~RGBAPixelConverter(){}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~RGBAPixelConverter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
@@ -137,8 +137,8 @@ public:
 
 protected:
   RGBAPixelConverter(){}
-  virtual ~RGBAPixelConverter(){}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~RGBAPixelConverter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Core/Common/include/otbRectangle.h b/Modules/Core/Common/include/otbRectangle.h
index c6d6c07b4f1b95c236af694d6936db980ae6c55d..6717ed679a126057df28ea382e32ef6399c334ea 100644
--- a/Modules/Core/Common/include/otbRectangle.h
+++ b/Modules/Core/Common/include/otbRectangle.h
@@ -97,10 +97,10 @@ protected:
     };
 
   /** Destructor */
-  virtual ~Rectangle() {}
+  ~Rectangle() ITK_OVERRIDE {}
 
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** */
   virtual double ComputeEuclideanDistanceMetricToSegment(VertexType q1, VertexType q2, VertexType p) const;
diff --git a/Modules/Core/Common/include/otbStandardFilterWatcher.h b/Modules/Core/Common/include/otbStandardFilterWatcher.h
index 53b9cb67cb3e0940f283e4bf10c6ad4d80673368..4a3258f7df687fe0f42ac9e89084a16acca31116 100644
--- a/Modules/Core/Common/include/otbStandardFilterWatcher.h
+++ b/Modules/Core/Common/include/otbStandardFilterWatcher.h
@@ -82,13 +82,13 @@ public:
 protected:
 
   /** Callback method to show the ProgressEvent */
-  virtual void ShowProgress();
+  void ShowProgress() ITK_OVERRIDE;
 
   /** Callback method to show the StartEvent */
-  virtual void StartFilter();
+  void StartFilter() ITK_OVERRIDE;
 
   /** Callback method to show the EndEvent */
-  virtual void EndFilter();
+  void EndFilter() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Core/Common/include/otbStandardOneLineFilterWatcher.h b/Modules/Core/Common/include/otbStandardOneLineFilterWatcher.h
index 4508b4632c666d34d5800d22caf73fe2e288187e..e5123d6dccade88482f30943486ce6d15ed6346c 100644
--- a/Modules/Core/Common/include/otbStandardOneLineFilterWatcher.h
+++ b/Modules/Core/Common/include/otbStandardOneLineFilterWatcher.h
@@ -76,13 +76,13 @@ public:
 protected:
 
   /** Callback method to show the ProgressEvent */
-  virtual void ShowProgress();
+  void ShowProgress() ITK_OVERRIDE;
 
   /** Callback method to show the StartEvent */
-  virtual void StartFilter();
+  void StartFilter() ITK_OVERRIDE;
 
   /** Callback method to show the EndEvent */
-  virtual void EndFilter();
+  void EndFilter() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Core/Common/include/otbStandardWriterWatcher.h b/Modules/Core/Common/include/otbStandardWriterWatcher.h
index 4bb1aa5ed3625112c07209e6b0474bee08bd2d3d..60d4134824193988a0eee89102e7b0c287fe1f0e 100644
--- a/Modules/Core/Common/include/otbStandardWriterWatcher.h
+++ b/Modules/Core/Common/include/otbStandardWriterWatcher.h
@@ -86,22 +86,22 @@ public:
 protected:
 
   /** Callback method to show the ProgressEvent */
-  virtual void ShowWriterProgress();
+  void ShowWriterProgress() ITK_OVERRIDE;
 
   /** Callback method to show the StartEvent */
-  virtual void StartWriter();
+  void StartWriter() ITK_OVERRIDE;
 
   /** Callback method to show the EndEvent */
-  virtual void EndWriter();
+  void EndWriter() ITK_OVERRIDE;
 
   /** Callback method to show the ProgressEvent */
-  virtual void ShowFilterProgress();
+  void ShowFilterProgress() ITK_OVERRIDE;
 
   /** Callback method to show the StartEvent */
-  virtual void StartFilter() {}
+  void StartFilter() ITK_OVERRIDE {}
 
   /** Callback method to show the EndEvent */
-  virtual void EndFilter() {}
+  void EndFilter() ITK_OVERRIDE {}
 
   /** This is the method invoked by ShowFilterProgress() and ShowWriterProgress() */
   virtual void ShowProgress();
diff --git a/Modules/Core/Common/include/otbSubsampledImageRegionConstIterator.h b/Modules/Core/Common/include/otbSubsampledImageRegionConstIterator.h
index def95bcbaaaaa28299e9bc6a3be7fa80fc384154..3d95fe5b3f239cebc3db577e0f55723a71591526 100644
--- a/Modules/Core/Common/include/otbSubsampledImageRegionConstIterator.h
+++ b/Modules/Core/Common/include/otbSubsampledImageRegionConstIterator.h
@@ -164,7 +164,7 @@ public:
   /** Set the index.
    * It is moved to the next available (usable) index.
    * \sa GetIndex */
-  void SetIndex(const IndexType& ind);
+  void SetIndex(const IndexType& ind) ITK_OVERRIDE;
 
   /** Get the Index. */
   IndexType GetIndex() const
diff --git a/Modules/Core/Common/include/otbUnaryFunctorImageFilter.h b/Modules/Core/Common/include/otbUnaryFunctorImageFilter.h
index e0df8601f86bbcd534c0a3e53842cf8cf2cc7e63..2a6235feaf0540cf5e7c3da48f0b7fdb3f8a93f9 100644
--- a/Modules/Core/Common/include/otbUnaryFunctorImageFilter.h
+++ b/Modules/Core/Common/include/otbUnaryFunctorImageFilter.h
@@ -55,7 +55,7 @@ public:
 
 protected:
   UnaryFunctorImageFilter() {};
-  virtual ~UnaryFunctorImageFilter() {}
+  ~UnaryFunctorImageFilter() ITK_OVERRIDE {}
 
   /** UnaryFunctorImageFilter can produce an image which has a different number of bands
    * than its input image.  As such, UnaryFunctorImageFilter
@@ -65,7 +65,7 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation()
+  void GenerateOutputInformation() ITK_OVERRIDE
   {
     Superclass::GenerateOutputInformation();
     typename Superclass::OutputImagePointer outputPtr = this->GetOutput();
diff --git a/Modules/Core/Common/include/otbUnaryFunctorNeighborhoodVectorImageFilter.h b/Modules/Core/Common/include/otbUnaryFunctorNeighborhoodVectorImageFilter.h
index ba29df414a9730478720e8535769ebfcd9f12d9b..4db8be94e67cbbe249a2b94e15af5b8cdd3d2fa1 100644
--- a/Modules/Core/Common/include/otbUnaryFunctorNeighborhoodVectorImageFilter.h
+++ b/Modules/Core/Common/include/otbUnaryFunctorNeighborhoodVectorImageFilter.h
@@ -105,7 +105,7 @@ public:
 
 protected:
   UnaryFunctorNeighborhoodVectorImageFilter();
-  virtual ~UnaryFunctorNeighborhoodVectorImageFilter() { }
+  ~UnaryFunctorNeighborhoodVectorImageFilter() ITK_OVERRIDE { }
 
   /** UnaryFunctorNeighborhoodVectorImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -117,14 +117,14 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                                    itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
+                                    itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * Since the number of components per pixel depends on the radius range, one must reimplement
    * this method to set the proper number of component on the filter output.
    */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   RadiusType m_Radius;
 
diff --git a/Modules/Core/Common/include/otbUnaryFunctorVectorImageFilter.h b/Modules/Core/Common/include/otbUnaryFunctorVectorImageFilter.h
index 47bf386febcedbad4178998abe9f88b0ef1c8fd1..638cb1341c8d53a6d0729d7f0ee42581fa1cd2b0 100644
--- a/Modules/Core/Common/include/otbUnaryFunctorVectorImageFilter.h
+++ b/Modules/Core/Common/include/otbUnaryFunctorVectorImageFilter.h
@@ -90,7 +90,7 @@ public:
 
 protected:
   UnaryFunctorVectorImageFilter();
-  virtual ~UnaryFunctorVectorImageFilter() { }
+  ~UnaryFunctorVectorImageFilter() ITK_OVERRIDE { }
 
   /** UnaryFunctorVectorImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -102,14 +102,14 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                                    itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
+                                    itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * Since the number of components per pixel depends on the radius range, one must reimplement
    * this method to set the proper number of component on the filter output.
    */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
 private:
   UnaryFunctorVectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/Common/include/otbUnaryFunctorWithIndexWithOutputSizeImageFilter.h b/Modules/Core/Common/include/otbUnaryFunctorWithIndexWithOutputSizeImageFilter.h
index 6ec57f90ef0ba9c3e426dccec5c41b8de0279d0f..acb981b118e8b3e2638d1956c0dfce5419f78be6 100644
--- a/Modules/Core/Common/include/otbUnaryFunctorWithIndexWithOutputSizeImageFilter.h
+++ b/Modules/Core/Common/include/otbUnaryFunctorWithIndexWithOutputSizeImageFilter.h
@@ -108,7 +108,7 @@ protected:
   /**
    * Destructor
    */
-  virtual ~UnaryFunctorWithIndexWithOutputSizeImageFilter() {}
+  ~UnaryFunctorWithIndexWithOutputSizeImageFilter() ITK_OVERRIDE {}
 
   /** UnaryFunctorWithIndexWithOutputSizeImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -120,12 +120,12 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * Pad the input requested region by radius
    */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** UnaryFunctorWithIndexWithOutputSizeImageFilter can produce an image which has a different number of bands
    * than its input image.  As such, UnaryFunctorImageFilter
@@ -135,7 +135,7 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation()
+  void GenerateOutputInformation() ITK_OVERRIDE
   {
     Superclass::GenerateOutputInformation();
     typename Superclass::OutputImagePointer outputPtr = this->GetOutput();
diff --git a/Modules/Core/Common/include/otbVariableLengthVectorConverter.h b/Modules/Core/Common/include/otbVariableLengthVectorConverter.h
index 2c8f53a92da361ee3e542dfa9ec2b99f76bd859c..9814d61eb2dabdc8198f3d87e0432b0285b05b28 100644
--- a/Modules/Core/Common/include/otbVariableLengthVectorConverter.h
+++ b/Modules/Core/Common/include/otbVariableLengthVectorConverter.h
@@ -70,8 +70,8 @@ public:
 
 protected:
   VariableLengthVectorConverter(){}
-  virtual ~VariableLengthVectorConverter(){}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~VariableLengthVectorConverter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << "Attempt to use inexistant implementation of the converter!"
@@ -113,8 +113,8 @@ public:
 
 protected:
   VariableLengthVectorConverter(){}
-  virtual ~VariableLengthVectorConverter(){}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~VariableLengthVectorConverter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << "Attempt to use inexistant implementation of the converter!"
@@ -154,8 +154,8 @@ public:
 
 protected:
   VariableLengthVectorConverter(){}
-  virtual ~VariableLengthVectorConverter(){}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~VariableLengthVectorConverter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << "Converter: std::vector<std::vector<RealType>>  => VariableLengthVector<RealType>"
@@ -195,8 +195,8 @@ public:
 
 protected:
   VariableLengthVectorConverter(){}
-  virtual ~VariableLengthVectorConverter(){}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~VariableLengthVectorConverter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << "Converter: std::vector<std::vector<std::complex<RealType>>>  => VariableLengthVector<RealType>"
@@ -236,8 +236,8 @@ public:
 
 protected:
   VariableLengthVectorConverter(){}
-  virtual ~VariableLengthVectorConverter(){}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~VariableLengthVectorConverter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << "Converter: itk::FixedArray<RealType, VArrayDimension>  => VariableLengthVector<RealType>"
@@ -276,8 +276,8 @@ public:
 
 protected:
   VariableLengthVectorConverter(){}
-  virtual ~VariableLengthVectorConverter(){}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~VariableLengthVectorConverter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << "Converter: itk::Statistics::Histogram<RealType, VMeasurementVectorSize, TFrequencyContainer>  => VariableLengthVector<RealType>"
diff --git a/Modules/Core/Common/include/otbVectorImageToASImageAdaptor.h b/Modules/Core/Common/include/otbVectorImageToASImageAdaptor.h
index 48832da89e4907315a0260a8489c728f3808a104..cfa49e3fb60037722144238d34eaafe4e973a461 100644
--- a/Modules/Core/Common/include/otbVectorImageToASImageAdaptor.h
+++ b/Modules/Core/Common/include/otbVectorImageToASImageAdaptor.h
@@ -63,7 +63,7 @@ public:
 
 protected:
   VectorImageToASImageAdaptor() {}
-  virtual ~VectorImageToASImageAdaptor() {}
+  ~VectorImageToASImageAdaptor() ITK_OVERRIDE {}
 
 private:
   VectorImageToASImageAdaptor(const Self &); //purposely not implemented
diff --git a/Modules/Core/ImageBase/include/otbExtractROI.h b/Modules/Core/ImageBase/include/otbExtractROI.h
index 831456ad0488a3bf526f4a6d3a095023608b98c8..fb8edc42fa2888cdd5470eb2cab8cddc85553df9 100644
--- a/Modules/Core/ImageBase/include/otbExtractROI.h
+++ b/Modules/Core/ImageBase/include/otbExtractROI.h
@@ -77,17 +77,17 @@ public:
                       OutputImageType::ImageDimension);
 
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 protected:
   ExtractROI();
-  virtual ~ExtractROI() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ExtractROI() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** ExtractROI
    *
    * \sa ExtractROIBase::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
   ExtractROI(const Self &); //purposely not implemented
diff --git a/Modules/Core/ImageBase/include/otbExtractROIBase.h b/Modules/Core/ImageBase/include/otbExtractROIBase.h
index 7112ad4f6b040a24cdfa859e1b0ffdb8ccd95a62..7d22920634bddc7b93059e2aa00232bd6b871fdf 100644
--- a/Modules/Core/ImageBase/include/otbExtractROIBase.h
+++ b/Modules/Core/ImageBase/include/otbExtractROIBase.h
@@ -105,10 +105,10 @@ public:
 
 protected:
   ExtractROIBase();
-  virtual ~ExtractROIBase() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ExtractROIBase() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** ExtractROIBase can produce an image which is a different
    * resolution than its input image.  As such, ExtractROIBase
@@ -118,7 +118,7 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** This function calls the actual region copier to do the mapping from
    * output image space to input image space.  It uses a
@@ -130,8 +130,8 @@ protected:
    * support output images of a lower dimension that the input.
    *
    * \sa ImageToImageFilter::CallCopyRegion() */
-  virtual void CallCopyOutputRegionToInputRegion(InputImageRegionType& destRegion,
-                                                 const OutputImageRegionType& srcRegion);
+  void CallCopyOutputRegionToInputRegion(InputImageRegionType& destRegion,
+                                                 const OutputImageRegionType& srcRegion) ITK_OVERRIDE;
 
   /** ExtractROIBase can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData()
@@ -146,7 +146,7 @@ protected:
 //  ATTENTION bizarre
 
   void ThreadedGenerateData(const OutputImageRegionType& /*outputRegionForThread*/,
-                            itk::ThreadIdType /*threadId*/)
+                            itk::ThreadIdType /*threadId*/) ITK_OVERRIDE
 
   {
 
diff --git a/Modules/Core/ImageBase/include/otbImage.h b/Modules/Core/ImageBase/include/otbImage.h
index 2d8e30dc15ecc5929cc727e45d9e929dccfe13f7..2f2dc5316d8faaf629f444857acff3d5a8469058 100644
--- a/Modules/Core/ImageBase/include/otbImage.h
+++ b/Modules/Core/ImageBase/include/otbImage.h
@@ -184,14 +184,14 @@ public:
 
   virtual void SetImageKeywordList(const ImageKeywordlistType& kwl);
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 /// Copy metadata from a DataObject
-  virtual void CopyInformation(const itk::DataObject *);
+  void CopyInformation(const itk::DataObject *) ITK_OVERRIDE;
 
 protected:
   Image();
-  virtual ~Image() {}
+  ~Image() ITK_OVERRIDE {}
 
 private:
   Image(const Self &); //purposely not implemented
diff --git a/Modules/Core/ImageBase/include/otbImageFunctionAdaptor.h b/Modules/Core/ImageBase/include/otbImageFunctionAdaptor.h
index 0f461ddecc92f83c2faeffbc4a9807cee6357d8a..b668c93ad62ea39a0fbb91e72a2f5dcc89ed25eb 100644
--- a/Modules/Core/ImageBase/include/otbImageFunctionAdaptor.h
+++ b/Modules/Core/ImageBase/include/otbImageFunctionAdaptor.h
@@ -85,17 +85,17 @@ class ITK_EXPORT ImageFunctionAdaptor :
   itkStaticConstMacro(ImageDimension, unsigned int, InputImageType::ImageDimension);
 
   // Evalulate the function at specified index //
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   // Evaluate the function at non-integer positions //
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -108,8 +108,8 @@ class ITK_EXPORT ImageFunctionAdaptor :
 
 protected:
   ImageFunctionAdaptor();
-  virtual ~ImageFunctionAdaptor() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageFunctionAdaptor() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageFunctionAdaptor(const Self &);  //purposely not implemented
diff --git a/Modules/Core/ImageBase/include/otbImageIOBase.h b/Modules/Core/ImageBase/include/otbImageIOBase.h
index 4abd41359b95d011c10e31087103a55ccbdca2e3..41b5d5fa3792dd485e042eb42a773d6dd757fe61 100644
--- a/Modules/Core/ImageBase/include/otbImageIOBase.h
+++ b/Modules/Core/ImageBase/include/otbImageIOBase.h
@@ -417,8 +417,8 @@ public:
 
 protected:
   ImageIOBase();
-  virtual ~ImageIOBase();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageIOBase() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Used internally to keep track of the type of the pixel. */
   IOPixelType m_PixelType;
diff --git a/Modules/Core/ImageBase/include/otbImageOfVectorsToMonoChannelExtractROI.h b/Modules/Core/ImageBase/include/otbImageOfVectorsToMonoChannelExtractROI.h
index 027e1497c82d9362ebe31e8819e77289c6b7bdad..3a4083bc9ae5adaa458d799a33dac53536946845 100644
--- a/Modules/Core/ImageBase/include/otbImageOfVectorsToMonoChannelExtractROI.h
+++ b/Modules/Core/ImageBase/include/otbImageOfVectorsToMonoChannelExtractROI.h
@@ -83,8 +83,8 @@ public:
 
 protected:
   ImageOfVectorsToMonoChannelExtractROI();
-  virtual ~ImageOfVectorsToMonoChannelExtractROI() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageOfVectorsToMonoChannelExtractROI() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** ExtractImageFilter can produce an image which is a different
    * resolution than its input image.  As such, ExtractImageFilter
@@ -94,13 +94,13 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** ExtractImageFilter can be implemented as a multithreaded filter.
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   ImageOfVectorsToMonoChannelExtractROI(const Self &); //purposely not implemented
diff --git a/Modules/Core/ImageBase/include/otbMetaImageFunction.h b/Modules/Core/ImageBase/include/otbMetaImageFunction.h
index 64b99d3584df0128336045b6126f34d2136ce67b..ac8337f0576e9aaba803a89f036c2fb9295a8a84 100644
--- a/Modules/Core/ImageBase/include/otbMetaImageFunction.h
+++ b/Modules/Core/ImageBase/include/otbMetaImageFunction.h
@@ -72,7 +72,7 @@ public:
   typedef std::vector<FunctionPointerType>            FunctionContainerType;
 
   /** Evaluate the function at the given location */
-  OutputType Evaluate(const PointType & point) const;
+  OutputType Evaluate(const PointType & point) const ITK_OVERRIDE;
 
   /** Add a new function to the functions vector */
   void AddFunction(FunctionType * function);
@@ -97,10 +97,10 @@ protected:
   MetaImageFunction();
 
   /** Destructor */
-  ~MetaImageFunction();
+  ~MetaImageFunction() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   MetaImageFunction(const Self& ); //purposely not implemented
diff --git a/Modules/Core/ImageBase/include/otbMultiChannelExtractROI.h b/Modules/Core/ImageBase/include/otbMultiChannelExtractROI.h
index ed692e173dd64e42d1a58d4d0a4ffc9e99bb62a2..59b54b713cbe74aae0f2699de8cbe93a975363fd 100644
--- a/Modules/Core/ImageBase/include/otbMultiChannelExtractROI.h
+++ b/Modules/Core/ImageBase/include/otbMultiChannelExtractROI.h
@@ -112,8 +112,8 @@ public:
 
 protected:
   MultiChannelExtractROI();
-  virtual ~MultiChannelExtractROI() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~MultiChannelExtractROI() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** MultiChannelExtractROI can produce an image which is a different
    * resolution than its input image.  As such, MultiChannelExtractROI
@@ -123,7 +123,7 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Reinitialize channels vector for multiple Update.*/
   void ChannelsReInitialization();
@@ -134,7 +134,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   MultiChannelExtractROI(const Self &); //purposely not implemented
diff --git a/Modules/Core/ImageBase/include/otbMultiToMonoChannelExtractROI.h b/Modules/Core/ImageBase/include/otbMultiToMonoChannelExtractROI.h
index 6214a9972a0a155d67254d49b03bacd17ce9ffbd..e53bf01bde15f92db4ae1768a153842b264dfe99 100644
--- a/Modules/Core/ImageBase/include/otbMultiToMonoChannelExtractROI.h
+++ b/Modules/Core/ImageBase/include/otbMultiToMonoChannelExtractROI.h
@@ -90,8 +90,8 @@ public:
 
 protected:
   MultiToMonoChannelExtractROI();
-  virtual ~MultiToMonoChannelExtractROI() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~MultiToMonoChannelExtractROI() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** ExtractImageFilter can produce an image which is a different
    * resolution than its input image.  As such, ExtractImageFilter
@@ -101,13 +101,13 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** ExtractImageFilter can be implemented as a multithreaded filter.
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   MultiToMonoChannelExtractROI(const Self &); //purposely not implemented
diff --git a/Modules/Core/ImageBase/include/otbRemoteSensingRegion.h b/Modules/Core/ImageBase/include/otbRemoteSensingRegion.h
index 8fb6381a2b5808515bf2e31c564465cdf5e274cb..93e73353aa82a900d8f6c045d29bf182eb854ea1 100644
--- a/Modules/Core/ImageBase/include/otbRemoteSensingRegion.h
+++ b/Modules/Core/ImageBase/include/otbRemoteSensingRegion.h
@@ -78,7 +78,7 @@ public:
   /** ImageRegion typedef needed by the GetImageRegion() method */
   typedef itk::ImageRegion<2> ImageRegionType;
 
-  virtual typename Superclass::RegionType GetRegionType() const
+  typename Superclass::RegionType GetRegionType() const ITK_OVERRIDE
   {return Superclass::ITK_STRUCTURED_REGION; }
 
   /** Constructor. RemoteSensingRegion is a lightweight object that is not reference
@@ -103,7 +103,7 @@ public:
 
   /** Destructor. RemoteSensingRegion is a lightweight object that is not reference
    * counted, so the destructor is public. */
-  virtual ~RemoteSensingRegion(){}
+  ~RemoteSensingRegion() ITK_OVERRIDE{}
 
   /** operator=. RemoteSensingRegion is a lightweight object that is not reference
    * counted, so operator= is public. */
@@ -331,7 +331,7 @@ public:
 
 protected:
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     os << std::setprecision(15);
     os << indent << "RemoteSensingRegion" << std::endl;
diff --git a/Modules/Core/ImageBase/include/otbVectorImage.h b/Modules/Core/ImageBase/include/otbVectorImage.h
index 95b7f12b1caa64a312f1e45cc1ddf6a0fdf83fc3..7dea7e9d8b8228f28fbea9413db5d46809f0b21d 100644
--- a/Modules/Core/ImageBase/include/otbVectorImage.h
+++ b/Modules/Core/ImageBase/include/otbVectorImage.h
@@ -154,9 +154,9 @@ public:
   virtual void SetImageKeywordList(const ImageKeywordlistType& kwl);
 
   /// Copy metadata from a DataObject
-  virtual void CopyInformation(const itk::DataObject *);
+  void CopyInformation(const itk::DataObject *) ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Return the Pixel Accessor object */
 //   AccessorType GetPixelAccessor( void )
@@ -184,7 +184,7 @@ public:
 
 protected:
   VectorImage();
-  virtual ~VectorImage() {}
+  ~VectorImage() ITK_OVERRIDE {}
 
 private:
   VectorImage(const Self &); //purposely not implemented
diff --git a/Modules/Core/Interpolation/include/otbBCOInterpolateImageFunction.h b/Modules/Core/Interpolation/include/otbBCOInterpolateImageFunction.h
index 0baf3bb53da49858393f6f92bc586fd1ef938fb7..926674fc4d5336057f644a2ea5c88538b1d826ed 100644
--- a/Modules/Core/Interpolation/include/otbBCOInterpolateImageFunction.h
+++ b/Modules/Core/Interpolation/include/otbBCOInterpolateImageFunction.h
@@ -106,12 +106,12 @@ public:
    *
    * ImageFunction::IsInsideBuffer() can be used to check bounds before
    * calling the method. */
-  virtual OutputType EvaluateAtContinuousIndex( const ContinuousIndexType & index ) const = 0;
+  OutputType EvaluateAtContinuousIndex( const ContinuousIndexType & index ) const ITK_OVERRIDE = 0;
 
 protected:
   BCOInterpolateImageFunctionBase() : m_Radius(2), m_WinSize(5), m_Alpha(-0.5) {};
-  virtual ~BCOInterpolateImageFunctionBase() {};
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~BCOInterpolateImageFunctionBase() ITK_OVERRIDE {};
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Compute the BCO coefficients. */
   virtual CoefContainerType EvaluateCoef( const ContinuousIndexValueType & indexValue ) const;
   
@@ -154,12 +154,12 @@ public:
   typedef typename Superclass::ContinuousIndexType   ContinuousIndexType;
   typedef typename Superclass::CoefContainerType     CoefContainerType;
 
-  virtual OutputType EvaluateAtContinuousIndex( const ContinuousIndexType & index ) const;
+  OutputType EvaluateAtContinuousIndex( const ContinuousIndexType & index ) const ITK_OVERRIDE;
 
 protected:
   BCOInterpolateImageFunction() {};
-  virtual ~BCOInterpolateImageFunction() {};
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~BCOInterpolateImageFunction() ITK_OVERRIDE {};
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   BCOInterpolateImageFunction( const Self& ); //purposely not implemented
@@ -193,12 +193,12 @@ public:
   typedef typename Superclass::ContinuousIndexType   ContinuousIndexType;
   typedef typename Superclass::CoefContainerType     CoefContainerType;
 
-  virtual OutputType EvaluateAtContinuousIndex( const ContinuousIndexType & index ) const;
+  OutputType EvaluateAtContinuousIndex( const ContinuousIndexType & index ) const ITK_OVERRIDE;
 
 protected:
   BCOInterpolateImageFunction() {};
-  virtual ~BCOInterpolateImageFunction() {};
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~BCOInterpolateImageFunction() ITK_OVERRIDE {};
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   BCOInterpolateImageFunction( const Self& ); //purposely not implemented
diff --git a/Modules/Core/Interpolation/include/otbBSplineDecompositionImageFilter.h b/Modules/Core/Interpolation/include/otbBSplineDecompositionImageFilter.h
index 48cafebae4d52cc8749ba7b34c5625fa9a5fc5b6..7ed58cddc04ef690ae5bf3037d664bba8e819e3b 100644
--- a/Modules/Core/Interpolation/include/otbBSplineDecompositionImageFilter.h
+++ b/Modules/Core/Interpolation/include/otbBSplineDecompositionImageFilter.h
@@ -74,10 +74,10 @@ public:
 
 protected:
   BSplineDecompositionImageFilter();
-  virtual ~BSplineDecompositionImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~BSplineDecompositionImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** These are needed by the smoothing spline routine. */
   std::vector<double> m_Scratch;             // temp storage for processing of Coefficients
diff --git a/Modules/Core/Interpolation/include/otbBSplineInterpolateImageFunction.h b/Modules/Core/Interpolation/include/otbBSplineInterpolateImageFunction.h
index f84a97cb6c09070b13793b31d29cd591b63efa2d..4077c302c742fb593435d630b5d15d1f902c8ef4 100644
--- a/Modules/Core/Interpolation/include/otbBSplineInterpolateImageFunction.h
+++ b/Modules/Core/Interpolation/include/otbBSplineInterpolateImageFunction.h
@@ -104,8 +104,8 @@ public:
    *
    * ImageFunction::IsInsideBuffer() can be used to check bounds before
    * calling the method. */
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& index) const;
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& index) const ITK_OVERRIDE;
 
   /** Derivative typedef support */
   typedef itk::CovariantVector<OutputType,
@@ -128,7 +128,7 @@ public:
   itkGetMacro(SplineOrder, int);
 
   /** Set the input image.  This must be set by the user. */
-  virtual void SetInputImage(const TImageType * inputData);
+  void SetInputImage(const TImageType * inputData) ITK_OVERRIDE;
 
   /** Update coefficients filter. Coefficient filter are computed over the buffered
    region of the input image. */
@@ -136,9 +136,9 @@ public:
 
 protected:
   BSplineInterpolateImageFunction();
-  virtual ~BSplineInterpolateImageFunction() {}
+  ~BSplineInterpolateImageFunction() ITK_OVERRIDE {}
   void operator =(const Self&);  //purposely not implemented
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   // These are needed by the smoothing spline routine.
   std::vector<CoefficientDataType> m_Scratch;           // temp storage for processing of Coefficients
diff --git a/Modules/Core/Interpolation/include/otbGenericInterpolateImageFunction.h b/Modules/Core/Interpolation/include/otbGenericInterpolateImageFunction.h
index cc803f7f99c676876321038a51b56aa255efcedb..ee4b5dbbd5da05fd90967abe16de84759ece6b2c 100644
--- a/Modules/Core/Interpolation/include/otbGenericInterpolateImageFunction.h
+++ b/Modules/Core/Interpolation/include/otbGenericInterpolateImageFunction.h
@@ -83,7 +83,7 @@ public:
    *
    * ImageFunction::IsInsideBuffer() can be used to check bounds before
    * calling the method. */
-  virtual OutputType EvaluateAtContinuousIndex(const ContinuousIndexType& index) const;
+  OutputType EvaluateAtContinuousIndex(const ContinuousIndexType& index) const ITK_OVERRIDE;
 
   /** Set/Get the window radius*/
   virtual void SetRadius(unsigned int rad);
@@ -112,12 +112,12 @@ public:
 
 protected:
   GenericInterpolateImageFunction();
-  virtual ~GenericInterpolateImageFunction();
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~GenericInterpolateImageFunction() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Call the superclass implementation and set the TablesHaveBeenGenerated
    * flag to false */
-  virtual void Modified(void) const;
+  void Modified(void) const ITK_OVERRIDE;
 
   /** Delete tables.*/
   virtual void ResetOffsetTable();
diff --git a/Modules/Core/Interpolation/include/otbProlateInterpolateImageFunction.h b/Modules/Core/Interpolation/include/otbProlateInterpolateImageFunction.h
index 705e93d5f4746df6ecf32abc8fb7d5bdcf3f6986..16bdc3fc8ec91e78057a29117211b8981c80fb10 100644
--- a/Modules/Core/Interpolation/include/otbProlateInterpolateImageFunction.h
+++ b/Modules/Core/Interpolation/include/otbProlateInterpolateImageFunction.h
@@ -310,8 +310,8 @@ public:
 
 protected:
   ProlateInterpolateImageFunction();
-  ~ProlateInterpolateImageFunction();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ProlateInterpolateImageFunction() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ProlateInterpolateImageFunction(const Self &); //purposely not implemented
diff --git a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageBlackmanFunction.h b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageBlackmanFunction.h
index ddbe8e3b19d60f78b2c634aea4de2c64438bc071..855f42fdb3b43252220481f2724ec7220afedf3e 100644
--- a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageBlackmanFunction.h
+++ b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageBlackmanFunction.h
@@ -131,8 +131,8 @@ public:
 
 protected:
   WindowedSincInterpolateImageBlackmanFunction() {};
-  ~WindowedSincInterpolateImageBlackmanFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~WindowedSincInterpolateImageBlackmanFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageCosineFunction.h b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageCosineFunction.h
index a00ce82ee57a6568556f2936634e4f33e0361ff1..891ad8d91a7722b5b6e12dcd0186d8d460b99cb8 100644
--- a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageCosineFunction.h
+++ b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageCosineFunction.h
@@ -124,8 +124,8 @@ public:
 
 protected:
   WindowedSincInterpolateImageCosineFunction() {};
-  ~WindowedSincInterpolateImageCosineFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~WindowedSincInterpolateImageCosineFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageFunctionBase.h b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageFunctionBase.h
index 5eb242b636821f41f584cc50abada294f41d3a9d..7490727f41ff7cbc34f459b478de719d692b002d 100644
--- a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageFunctionBase.h
+++ b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageFunctionBase.h
@@ -176,8 +176,8 @@ public:
 
 protected:
   WindowedSincInterpolateImageFunctionBase();
-  virtual ~WindowedSincInterpolateImageFunctionBase();
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~WindowedSincInterpolateImageFunctionBase() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   WindowedSincInterpolateImageFunctionBase(const Self &); //purposely not implemented
diff --git a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageGaussianFunction.h b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageGaussianFunction.h
index 23026061152df1b40186343e5af07a7d6752e7cf..e6afcf9aff4f899a4a32f16439b43da993611c5a 100644
--- a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageGaussianFunction.h
+++ b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageGaussianFunction.h
@@ -124,8 +124,8 @@ public:
 
 protected:
   WindowedSincInterpolateImageGaussianFunction() {};
-  ~WindowedSincInterpolateImageGaussianFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~WindowedSincInterpolateImageGaussianFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageHammingFunction.h b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageHammingFunction.h
index 2da34dd799fa0e22b40137464cf6a190f5767231..bca9d953a679f8803ba9ace031022c9614b4c578 100644
--- a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageHammingFunction.h
+++ b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageHammingFunction.h
@@ -125,8 +125,8 @@ public:
 
 protected:
   WindowedSincInterpolateImageHammingFunction() {};
-  ~WindowedSincInterpolateImageHammingFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~WindowedSincInterpolateImageHammingFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageLanczosFunction.h b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageLanczosFunction.h
index 85e157536e2e263a80a4cc904f54f3cb78704bc2..1c5793d14e7190c9e765fd307f201e90f02a4b49 100644
--- a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageLanczosFunction.h
+++ b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageLanczosFunction.h
@@ -135,8 +135,8 @@ public:
 
 protected:
   WindowedSincInterpolateImageLanczosFunction() {};
-  ~WindowedSincInterpolateImageLanczosFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~WindowedSincInterpolateImageLanczosFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageWelchFunction.h b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageWelchFunction.h
index 20f0fc6072490755a6d4996db778454595c4481a..dad775d0dfa8c1384f45cf52ea5a5f06f78289a0 100644
--- a/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageWelchFunction.h
+++ b/Modules/Core/Interpolation/include/otbWindowedSincInterpolateImageWelchFunction.h
@@ -124,8 +124,8 @@ public:
 
 protected:
   WindowedSincInterpolateImageWelchFunction() {};
-  ~WindowedSincInterpolateImageWelchFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~WindowedSincInterpolateImageWelchFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Core/LabelMap/include/otbAttributesMapLabelObject.h b/Modules/Core/LabelMap/include/otbAttributesMapLabelObject.h
index abebf17ed63c362543f8450146f1b541e0525296..5e016c5d8a3ffd7207da50464217c3a16dfa5bb5 100644
--- a/Modules/Core/LabelMap/include/otbAttributesMapLabelObject.h
+++ b/Modules/Core/LabelMap/include/otbAttributesMapLabelObject.h
@@ -303,10 +303,10 @@ protected:
   /** Constructor */
   AttributesMapLabelObject() : m_Attributes(), m_Polygon(PolygonType::New()) {}
   /** Destructor */
-  virtual ~AttributesMapLabelObject() {}
+  ~AttributesMapLabelObject() ITK_OVERRIDE {}
 
   /** The printself method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << indent << "Attributes: " << std::endl;
diff --git a/Modules/Core/LabelMap/include/otbAttributesMapLabelObjectWithClassLabel.h b/Modules/Core/LabelMap/include/otbAttributesMapLabelObjectWithClassLabel.h
index de7b7c9a6dda2126678b6fa5740a2ffa7c2041e8..2a3495a2e5a73c9301efba702d41903e2ba31a83 100644
--- a/Modules/Core/LabelMap/include/otbAttributesMapLabelObjectWithClassLabel.h
+++ b/Modules/Core/LabelMap/include/otbAttributesMapLabelObjectWithClassLabel.h
@@ -102,7 +102,7 @@ public:
     m_HasClassLabel = false;
   }
 
-  virtual void CopyAttributesFrom( const LabelObjectType * lo )
+  void CopyAttributesFrom( const LabelObjectType * lo ) ITK_OVERRIDE
     {
     Superclass::CopyAttributesFrom( lo );
 
@@ -122,10 +122,10 @@ protected:
   AttributesMapLabelObjectWithClassLabel() : m_ClassLabel(itk::NumericTraits<ClassLabelType>::Zero), m_HasClassLabel(false)
     {}
   /** Destructor */
-  virtual ~AttributesMapLabelObjectWithClassLabel() {}
+  ~AttributesMapLabelObjectWithClassLabel() ITK_OVERRIDE {}
 
   /** The printself method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
     {
       Superclass::PrintSelf( os, indent );
       if(m_HasClassLabel)
diff --git a/Modules/Core/LabelMap/include/otbAttributesMapOpeningLabelMapFilter.h b/Modules/Core/LabelMap/include/otbAttributesMapOpeningLabelMapFilter.h
index b804c3efc383f4ce557833a148ac3c7c8a68c5d0..4f0e3a9af1e956cc54d055b0cfc9883ed58d5885 100644
--- a/Modules/Core/LabelMap/include/otbAttributesMapOpeningLabelMapFilter.h
+++ b/Modules/Core/LabelMap/include/otbAttributesMapOpeningLabelMapFilter.h
@@ -68,16 +68,16 @@ public:
 
   AttributeAccessorType & GetAccessor();
 
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 
 protected:
   /** Constructor */
   AttributesMapOpeningLabelMapFilter();
   /** Destructor */
-  ~AttributesMapOpeningLabelMapFilter();
+  ~AttributesMapOpeningLabelMapFilter() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Core/LabelMap/include/otbBandsStatisticsAttributesLabelMapFilter.h b/Modules/Core/LabelMap/include/otbBandsStatisticsAttributesLabelMapFilter.h
index 82e020c6e4cb94b0d6e4ca1e7bd75f83fb35b4a2..563a8473bd3099f0f8428f40c1160bae3c3bc8eb 100644
--- a/Modules/Core/LabelMap/include/otbBandsStatisticsAttributesLabelMapFilter.h
+++ b/Modules/Core/LabelMap/include/otbBandsStatisticsAttributesLabelMapFilter.h
@@ -188,19 +188,19 @@ protected:
   /** Constructor */
   BandsStatisticsAttributesLabelMapFilter();
   /** Destructor */
-  ~BandsStatisticsAttributesLabelMapFilter() {}
+  ~BandsStatisticsAttributesLabelMapFilter() ITK_OVERRIDE {}
 
-  virtual void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
-  void EnlargeOutputRequestedRegion(itk::DataObject *){};
+  void EnlargeOutputRequestedRegion(itk::DataObject *) ITK_OVERRIDE{};
 
   /** Before threaded data generation */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   BandsStatisticsAttributesLabelMapFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/LabelMap/include/otbImageToLabelMapWithAttributesFilter.h b/Modules/Core/LabelMap/include/otbImageToLabelMapWithAttributesFilter.h
index c16617bbc453a7992cba187ff5e3122c87edcdba..1b0032a2a7de246071f8c4e85cffe1cca74db8fa 100644
--- a/Modules/Core/LabelMap/include/otbImageToLabelMapWithAttributesFilter.h
+++ b/Modules/Core/LabelMap/include/otbImageToLabelMapWithAttributesFilter.h
@@ -72,21 +72,21 @@ public:
   typedef BandsStatisticsAttributesLabelMapFilter<LabelMapType, InputImageType>   BandStatisticsLabelMapFilterType;
 
   using Superclass::SetInput;
-  virtual void SetInput( const InputImageType *image);
+  void SetInput( const InputImageType *image) ITK_OVERRIDE;
   virtual void SetLabeledImage( const LabeledImageType * image);
   const InputImageType * GetInput(void);
   const LabeledImageType * GetLabeledImage();
   virtual LabelMapType* GetOutput();
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   ImageToLabelMapWithAttributesFilter();
   /** Destructor */
-  virtual ~ImageToLabelMapWithAttributesFilter(){};
+  ~ImageToLabelMapWithAttributesFilter() ITK_OVERRIDE{};
 
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Core/LabelMap/include/otbKMeansAttributesLabelMapFilter.h b/Modules/Core/LabelMap/include/otbKMeansAttributesLabelMapFilter.h
index a2c4a7e4b0bc6d2135a1acccdbf7ad7625bbd6ef..bc5e7167603b38fe09c70a60f5e29f5f3a65acc1 100644
--- a/Modules/Core/LabelMap/include/otbKMeansAttributesLabelMapFilter.h
+++ b/Modules/Core/LabelMap/include/otbKMeansAttributesLabelMapFilter.h
@@ -120,7 +120,7 @@ public:
 
 protected:
   KMeansAttributesLabelMapFilter();
-  ~KMeansAttributesLabelMapFilter() {};
+  ~KMeansAttributesLabelMapFilter() ITK_OVERRIDE {};
 
 
 private:
diff --git a/Modules/Core/LabelMap/include/otbLabelImageToLabelMapWithAdjacencyFilter.h b/Modules/Core/LabelMap/include/otbLabelImageToLabelMapWithAdjacencyFilter.h
index 3b597fe26e644d975fdda5b3870eda700fda2c25..0cac885b05692bd0b12d569578af3fd7af1be583 100644
--- a/Modules/Core/LabelMap/include/otbLabelImageToLabelMapWithAdjacencyFilter.h
+++ b/Modules/Core/LabelMap/include/otbLabelImageToLabelMapWithAdjacencyFilter.h
@@ -90,9 +90,9 @@ protected:
   /** Constructor */
   LabelImageToLabelMapWithAdjacencyFilter();
   /** Destructor */
-  ~LabelImageToLabelMapWithAdjacencyFilter() {};
+  ~LabelImageToLabelMapWithAdjacencyFilter() ITK_OVERRIDE {};
   /** Printself */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   // class to store a RLE
   class RLE
@@ -120,16 +120,16 @@ protected:
   /** LabelImageToLabelMapWithAdjacencyFilter needs the entire input be
    * available. Thus, it needs to provide an implementation of
    * GenerateInputRequestedRegion(). */
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** LabelImageToLabelMapWithAdjacencyFilter will produce the entire output. */
-  void EnlargeOutputRequestedRegion(itk::DataObject *itkNotUsed(output));
+  void EnlargeOutputRequestedRegion(itk::DataObject *itkNotUsed(output)) ITK_OVERRIDE;
 
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
   /** Add a new adjacency */
   void AddAdjacency(LabelType label1, LabelType label2, itk::ThreadIdType threadId);
diff --git a/Modules/Core/LabelMap/include/otbLabelMapFeaturesFunctorImageFilter.h b/Modules/Core/LabelMap/include/otbLabelMapFeaturesFunctorImageFilter.h
index a4e077f082a8e0f23e10b8cd060b09dd2bb2131a..f17418747e188fde8631b3318427ac6bd3b54e12 100644
--- a/Modules/Core/LabelMap/include/otbLabelMapFeaturesFunctorImageFilter.h
+++ b/Modules/Core/LabelMap/include/otbLabelMapFeaturesFunctorImageFilter.h
@@ -96,17 +96,17 @@ protected:
   LabelMapFeaturesFunctorImageFilter() : m_Functor() {}
 
   /** Destructor */
-  ~LabelMapFeaturesFunctorImageFilter() {}
+  ~LabelMapFeaturesFunctorImageFilter() ITK_OVERRIDE {}
 
   /** Threaded generate data */
-  virtual void ThreadedProcessLabelObject(LabelObjectType * labelObject)
+  void ThreadedProcessLabelObject(LabelObjectType * labelObject) ITK_OVERRIDE
   {
     // Call the functor
     m_Functor(labelObject);
   }
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     // Call superclass implementation
     Superclass::PrintSelf(os, indent);
diff --git a/Modules/Core/LabelMap/include/otbLabelMapSource.h b/Modules/Core/LabelMap/include/otbLabelMapSource.h
index 3801e51ff1b2e960d8a2b0b7e310e1584a161cfd..3dbb4bc46cdcd5d2b578bd8b6d6f27ef8ac59b1c 100644
--- a/Modules/Core/LabelMap/include/otbLabelMapSource.h
+++ b/Modules/Core/LabelMap/include/otbLabelMapSource.h
@@ -61,9 +61,9 @@ public:
 
 protected:
   LabelMapSource();
-  ~LabelMapSource();
+  ~LabelMapSource() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Ensure that the output vector data are cleared before processing */
   virtual void  AllocateOutputs();
diff --git a/Modules/Core/LabelMap/include/otbLabelMapToAttributeImageFilter.h b/Modules/Core/LabelMap/include/otbLabelMapToAttributeImageFilter.h
index ab9fb5c17496c81867b2e407c8e8fefa570a790a..5e791981d9158f4fd4e510a47b174781d8438a86 100644
--- a/Modules/Core/LabelMap/include/otbLabelMapToAttributeImageFilter.h
+++ b/Modules/Core/LabelMap/include/otbLabelMapToAttributeImageFilter.h
@@ -99,13 +99,13 @@ public:
 
 protected:
   LabelMapToAttributeImageFilter();
-  ~LabelMapToAttributeImageFilter() {};
+  ~LabelMapToAttributeImageFilter() ITK_OVERRIDE {};
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
-  virtual void ThreadedProcessLabelObject( LabelObjectType * labelObject );
+  void ThreadedProcessLabelObject( LabelObjectType * labelObject ) ITK_OVERRIDE;
 
 private:
   /** Background pixel value */
diff --git a/Modules/Core/LabelMap/include/otbLabelMapToSampleListFilter.h b/Modules/Core/LabelMap/include/otbLabelMapToSampleListFilter.h
index 38c3c4eaf31888359f0ecc0c6a5074b158c2b0bd..04231b7ea426ccd07a16e42e7f043f320b10e381 100644
--- a/Modules/Core/LabelMap/include/otbLabelMapToSampleListFilter.h
+++ b/Modules/Core/LabelMap/include/otbLabelMapToSampleListFilter.h
@@ -93,15 +93,15 @@ public:
 
 protected:
   LabelMapToSampleListFilter();
-  virtual ~LabelMapToSampleListFilter();
+  ~LabelMapToSampleListFilter() ITK_OVERRIDE;
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Make Output */
-  virtual DataObjectPointerType MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointerType MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LabelMapToSampleListFilter(const Self&); //purposely not implemented
diff --git a/Modules/Core/LabelMap/include/otbLabelMapWithAdjacency.h b/Modules/Core/LabelMap/include/otbLabelMapWithAdjacency.h
index 92a132d29ca43e1f91300aef2df2be5b258e6c24..420d659679b1d1ceaff118009524d514ceeb7934 100644
--- a/Modules/Core/LabelMap/include/otbLabelMapWithAdjacency.h
+++ b/Modules/Core/LabelMap/include/otbLabelMapWithAdjacency.h
@@ -215,16 +215,16 @@ protected:
   /** Constructor */
   LabelMapWithAdjacency(){}
   /** Destructor */
-  virtual ~LabelMapWithAdjacency(){}
+  ~LabelMapWithAdjacency() ITK_OVERRIDE{}
   /** Printself */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
 
   /** Re-implement CopyInformation to pass the adjancency graph
    * through */
-  virtual void CopyInformation(const itk::DataObject * data)
+  void CopyInformation(const itk::DataObject * data) ITK_OVERRIDE
   {
     // Call superclass implementation
     Superclass::CopyInformation(data);
diff --git a/Modules/Core/LabelMap/include/otbLabelMapWithClassLabelToClassLabelImageFilter.h b/Modules/Core/LabelMap/include/otbLabelMapWithClassLabelToClassLabelImageFilter.h
index f86b3f7798ec579d1ca3fac3fa82c94c60071ccd..faac75ab720e69204e6d5720b52cb92985cc6e9f 100644
--- a/Modules/Core/LabelMap/include/otbLabelMapWithClassLabelToClassLabelImageFilter.h
+++ b/Modules/Core/LabelMap/include/otbLabelMapWithClassLabelToClassLabelImageFilter.h
@@ -72,11 +72,11 @@ public:
 
 protected:
   LabelMapWithClassLabelToClassLabelImageFilter();
-  ~LabelMapWithClassLabelToClassLabelImageFilter() {};
+  ~LabelMapWithClassLabelToClassLabelImageFilter() ITK_OVERRIDE {};
 
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
-  virtual void ThreadedProcessLabelObject( LabelObjectType * labelObject );
+  void ThreadedProcessLabelObject( LabelObjectType * labelObject ) ITK_OVERRIDE;
 
 private:
   LabelMapWithClassLabelToClassLabelImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Core/LabelMap/include/otbLabelMapWithClassLabelToLabeledSampleListFilter.h b/Modules/Core/LabelMap/include/otbLabelMapWithClassLabelToLabeledSampleListFilter.h
index daa2f0c54ae2816cb7ccd719cf5f0f952c26d5b6..4774c9a07551a2401a4a72a53373ebe6d8f9c524 100644
--- a/Modules/Core/LabelMap/include/otbLabelMapWithClassLabelToLabeledSampleListFilter.h
+++ b/Modules/Core/LabelMap/include/otbLabelMapWithClassLabelToLabeledSampleListFilter.h
@@ -97,14 +97,14 @@ public:
 
 protected:
   LabelMapWithClassLabelToLabeledSampleListFilter();
-  virtual ~LabelMapWithClassLabelToLabeledSampleListFilter();
+  ~LabelMapWithClassLabelToLabeledSampleListFilter() ITK_OVERRIDE;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Make Output */
-  DataObjectPointerType MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointerType MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
 private:
diff --git a/Modules/Core/LabelMap/include/otbMinMaxAttributesLabelMapFilter.h b/Modules/Core/LabelMap/include/otbMinMaxAttributesLabelMapFilter.h
index 4f7ca0333c8bcc8b016531f9810541add57acc14..12899f2835747a69f9060a4d796a53df34c96de2 100644
--- a/Modules/Core/LabelMap/include/otbMinMaxAttributesLabelMapFilter.h
+++ b/Modules/Core/LabelMap/include/otbMinMaxAttributesLabelMapFilter.h
@@ -86,14 +86,14 @@ public:
   AttributesMapObjectType* GetMaximumOutput();
   const AttributesMapObjectType* GetMaximumOutput() const;
 
-  virtual DataObjectPointerType MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointerType MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
 protected:
   MinMaxAttributesLabelMapFilter();
-  ~MinMaxAttributesLabelMapFilter() {};
+  ~MinMaxAttributesLabelMapFilter() ITK_OVERRIDE {};
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   MinMaxAttributesLabelMapFilter(const Self&); //purposely not implemented
diff --git a/Modules/Core/LabelMap/include/otbNormalizeAttributesLabelMapFilter.h b/Modules/Core/LabelMap/include/otbNormalizeAttributesLabelMapFilter.h
index 4e61817e7010642e266710291f55322c3024b1b6..d665a70510cd09e6b2b13faf527d3e7188726547 100644
--- a/Modules/Core/LabelMap/include/otbNormalizeAttributesLabelMapFilter.h
+++ b/Modules/Core/LabelMap/include/otbNormalizeAttributesLabelMapFilter.h
@@ -142,10 +142,10 @@ protected:
   NormalizeAttributesLabelMapFilter(){}
 
   /** Destructor */
-  virtual ~NormalizeAttributesLabelMapFilter(){}
+  ~NormalizeAttributesLabelMapFilter() ITK_OVERRIDE{}
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   NormalizeAttributesLabelMapFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/LabelMap/include/otbShapeAttributesLabelMapFilter.h b/Modules/Core/LabelMap/include/otbShapeAttributesLabelMapFilter.h
index 67465b98205a2fad661b589eab03412358ed0a7c..f48bf3b5bd10e7927003b89550042d15a5b04573 100644
--- a/Modules/Core/LabelMap/include/otbShapeAttributesLabelMapFilter.h
+++ b/Modules/Core/LabelMap/include/otbShapeAttributesLabelMapFilter.h
@@ -287,19 +287,19 @@ protected:
   ShapeAttributesLabelMapFilter(){}
 
   /** Destructor */
-  virtual ~ShapeAttributesLabelMapFilter(){}
+  ~ShapeAttributesLabelMapFilter() ITK_OVERRIDE{}
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
   /** Things to to before threaded data generation */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
-  void EnlargeOutputRequestedRegion(itk::DataObject *){};
+  void EnlargeOutputRequestedRegion(itk::DataObject *) ITK_OVERRIDE{};
 
 private:
   ShapeAttributesLabelMapFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/LabelMap/include/otbStatisticsAttributesLabelMapFilter.h b/Modules/Core/LabelMap/include/otbStatisticsAttributesLabelMapFilter.h
index 37f3fbe7b4ec7f43ed3b78d949895cf424c2361a..00f0337cec68db89557f0da5125f2ef7d5774b69 100644
--- a/Modules/Core/LabelMap/include/otbStatisticsAttributesLabelMapFilter.h
+++ b/Modules/Core/LabelMap/include/otbStatisticsAttributesLabelMapFilter.h
@@ -194,13 +194,13 @@ protected:
   StatisticsAttributesLabelMapFilter();
 
   /** Destructor */
-  ~StatisticsAttributesLabelMapFilter();
+  ~StatisticsAttributesLabelMapFilter() ITK_OVERRIDE;
 
   /** Before threaded data generation */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   StatisticsAttributesLabelMapFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbDefaultImageMetadataInterface.h b/Modules/Core/Metadata/include/otbDefaultImageMetadataInterface.h
index 775b42e909b28d1967f922f88ea60fdc0b47609f..45350ee841dcbc7488c4272194ff8d0c5f158d00 100644
--- a/Modules/Core/Metadata/include/otbDefaultImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbDefaultImageMetadataInterface.h
@@ -72,49 +72,49 @@ public:
   }
 
   /** Get the imaging acquisition day from the ossim metadata */
-  int GetDay() const
+  int GetDay() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetDay not implemented in DefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition month from the ossim metadata */
-  int GetMonth() const
+  int GetMonth() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetMonth not implemented in DefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition year from the ossim metadata */
-  int GetYear() const
+  int GetYear() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetYear not implemented in DefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition hour from the ossim metadata */
-  int GetHour() const
+  int GetHour() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetHour not implemented in DefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition minute from the ossim metadata */
-  int GetMinute() const
+  int GetMinute() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetMinute not implemented in DefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging production day from the ossim metadata */
-  int GetProductionDay() const
+  int GetProductionDay() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetProductionDay not implemented in DefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging production month from the ossim metadata */
-  int GetProductionMonth() const
+  int GetProductionMonth() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetProductionMonth not implemented in DefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging production year from the ossim metadata */
-  int GetProductionYear() const
+  int GetProductionYear() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetProductionYear not implemented in DefaultImageMetadataInterface, no captor type found");
   }
@@ -144,13 +144,13 @@ public:
   }
 
   /** Get the enhanced band names */
-  std::vector<std::string> GetEnhancedBandNames() const
+  std::vector<std::string> GetEnhancedBandNames() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetEnhancedBandNames not implemented in DefaultImageMetadataInterface, no captor type found");
   }
 
 
-  bool CanRead() const
+  bool CanRead() const ITK_OVERRIDE
   {
     // This clas is the default one, it has to be able to call every metadata
     return true;
@@ -163,7 +163,7 @@ public:
    *         When one spectral band is available : the only band is given to the R, G and B channel.
    *
    */
-  std::vector<unsigned int> GetDefaultDisplay() const
+  std::vector<unsigned int> GetDefaultDisplay() const ITK_OVERRIDE
   {
     unsigned int i = 0;
     std::vector<unsigned int> rgb(3);
@@ -190,7 +190,7 @@ public:
 
 protected:
   DefaultImageMetadataInterface(){};
-  virtual ~DefaultImageMetadataInterface() {}
+  ~DefaultImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Metadata/include/otbDefaultImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbDefaultImageMetadataInterfaceFactory.h
index f5fca02115c0008e3961f8f5457c4a5fa41dbd1c..5364e509cadab36a89901e91d27db43a15fe6f3c 100644
--- a/Modules/Core/Metadata/include/otbDefaultImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbDefaultImageMetadataInterfaceFactory.h
@@ -39,8 +39,8 @@ public:
   typedef itk::SmartPointer<const Self>        ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -57,7 +57,7 @@ public:
 
 protected:
   DefaultImageMetadataInterfaceFactory();
-  virtual ~DefaultImageMetadataInterfaceFactory();
+  ~DefaultImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   DefaultImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbFormosatImageMetadataInterface.h b/Modules/Core/Metadata/include/otbFormosatImageMetadataInterface.h
index e7860a1d788274fbcdf5f46ff8d897e439c0c5d1..6fd5ca792d427ce6dde388843eb62fc4ba6605fb 100644
--- a/Modules/Core/Metadata/include/otbFormosatImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbFormosatImageMetadataInterface.h
@@ -51,55 +51,55 @@ public:
   typedef Superclass::ImageKeywordlistType     ImageKeywordlistType;
 
   /** Get the radiometric bias from the ossim metadata */
-  VariableLengthVectorType GetPhysicalBias() const;
+  VariableLengthVectorType GetPhysicalBias() const ITK_OVERRIDE;
 
   /** Get the radiometric gain from the ossim metadata */
-  VariableLengthVectorType GetPhysicalGain() const;
+  VariableLengthVectorType GetPhysicalGain() const ITK_OVERRIDE;
 
   /** Get the solar irradiance from the ossim metadata */
-  VariableLengthVectorType GetSolarIrradiance() const;
+  VariableLengthVectorType GetSolarIrradiance() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition day from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetDay() const;
+  int GetDay() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition month from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetMonth() const;
+  int GetMonth() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetYear() const;
+  int GetYear() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition hour from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetHour() const;
+  int GetHour() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetMinute() const;
+  int GetMinute() const ITK_OVERRIDE;
 
   /** Get the imaging production day from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionDay() const;
+  int GetProductionDay() const ITK_OVERRIDE;
 
   /** Get the imaging production month from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionMonth() const;
+  int GetProductionMonth() const ITK_OVERRIDE;
 
   /** Get the imaging production year from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionYear() const;
+  int GetProductionYear() const ITK_OVERRIDE;
 
   /** Get the sat elevation from the ossim metadata */
-  double GetSatElevation() const;
+  double GetSatElevation() const ITK_OVERRIDE;
 
   /** Get the sat azimuth from the ossim metadata */
-  double GetSatAzimuth() const;
+  double GetSatAzimuth() const ITK_OVERRIDE;
 
   /** Get the first wavelength for the spectral band definition */
-  VariableLengthVectorType GetFirstWavelengths() const;
+  VariableLengthVectorType GetFirstWavelengths() const ITK_OVERRIDE;
 
   /** Get the last wavelength for the spectral band definition */
-  VariableLengthVectorType GetLastWavelengths() const;
+  VariableLengthVectorType GetLastWavelengths() const ITK_OVERRIDE;
 
   /** Get Instrument */
   std::string GetInstrument() const;
 
   /** Get the enhanced band names (here nothing because the metadata did not provide band names) */
-  std::vector<std::string> GetEnhancedBandNames() const
+  std::vector<std::string> GetEnhancedBandNames() const ITK_OVERRIDE
   {
     return this->Superclass::GetBandName();
   }
@@ -111,21 +111,21 @@ public:
    * in most cases, this method won't change the value, but for SPOT data, the bands are set up as
    *  2 1 0 3 in the tiff file, this method which is overloaded for SPOT enables to retrieve the
    *  proper band. */
-  virtual unsigned int BandIndexToWavelengthPosition(unsigned int i) const;
+  unsigned int BandIndexToWavelengthPosition(unsigned int i) const ITK_OVERRIDE;
 
   /** Get the 3 spectral band numbers corresponding to the default display for visualization,
    *  in the order R, G, B */
-  virtual std::vector<unsigned int> GetDefaultDisplay() const;
+  std::vector<unsigned int> GetDefaultDisplay() const ITK_OVERRIDE;
 
-  bool CanRead() const;
+  bool CanRead() const ITK_OVERRIDE;
 
   /** Vector that contains the filter function value in 6S format (step of 0.0025 micro m).
    * There values a computed by 6S. */
-  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const;
+  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const ITK_OVERRIDE;
 
 protected:
   FormosatImageMetadataInterface();
-  virtual ~FormosatImageMetadataInterface() {}
+  ~FormosatImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Metadata/include/otbFormosatImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbFormosatImageMetadataInterfaceFactory.h
index b2dc609d07ff72622f0fcc540e23b3b6d6187f1c..c99428a352bd6179b4acbb0f1f8c97bae0e83d00 100644
--- a/Modules/Core/Metadata/include/otbFormosatImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbFormosatImageMetadataInterfaceFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self>     ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   FormosatImageMetadataInterfaceFactory();
-  virtual ~FormosatImageMetadataInterfaceFactory();
+  ~FormosatImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   FormosatImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbIkonosImageMetadataInterface.h b/Modules/Core/Metadata/include/otbIkonosImageMetadataInterface.h
index ec961bfa6155f3a0a9fe059f22ab2ec8711b24fe..9859d0486538acd992905626616766e0750ab5e0 100644
--- a/Modules/Core/Metadata/include/otbIkonosImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbIkonosImageMetadataInterface.h
@@ -51,66 +51,66 @@ public:
   typedef Superclass::ImageKeywordlistType     ImageKeywordlistType;
 
   /** Get the radiometric bias from the ossim metadata */
-  VariableLengthVectorType GetPhysicalBias() const;
+  VariableLengthVectorType GetPhysicalBias() const ITK_OVERRIDE;
 
   /** Get the radiometric gain from the ossim metadata */
-  VariableLengthVectorType GetPhysicalGain() const;
+  VariableLengthVectorType GetPhysicalGain() const ITK_OVERRIDE;
 
   /** Get the solar irradiance from the ossim metadata */
-  VariableLengthVectorType GetSolarIrradiance() const;
+  VariableLengthVectorType GetSolarIrradiance() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition day from the ossim metadata : "Acquisition Date/Time" metadata variable */
-  int GetDay() const;
+  int GetDay() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition month from the ossim metadata : "Acquisition Date/Time" metadata variable */
-  int GetMonth() const;
+  int GetMonth() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : "Acquisition Date/Time" metadata variable */
-  int GetYear() const;
+  int GetYear() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition hour from the ossim metadata : "Acquisition Date/Time" metadata variable */
-  int GetHour() const;
+  int GetHour() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : "Acquisition Date/Time" metadata variable */
-  int GetMinute() const;
+  int GetMinute() const ITK_OVERRIDE;
 
   /** Get the imaging production day from the ossim metadata : "Creation Date" metadata variable */
-  int GetProductionDay() const;
+  int GetProductionDay() const ITK_OVERRIDE;
 
   /** Get the imaging production month from the ossim metadata : "Creation Date" metadata variable */
-  int GetProductionMonth() const;
+  int GetProductionMonth() const ITK_OVERRIDE;
 
   /** Get the imaging production year from the ossim metadata : "Creation Date" metadata variable */
-  int GetProductionYear() const;
+  int GetProductionYear() const ITK_OVERRIDE;
 
   /** Get the sat elevation from the ossim metadata */
-  double GetSatElevation() const;
+  double GetSatElevation() const ITK_OVERRIDE;
 
   /** Get the sat azimuth from the ossim metadata */
-  double GetSatAzimuth() const;
+  double GetSatAzimuth() const ITK_OVERRIDE;
 
   /** Get the first wavelength for the spectral band definition */
-  VariableLengthVectorType GetFirstWavelengths() const;
+  VariableLengthVectorType GetFirstWavelengths() const ITK_OVERRIDE;
 
   /** Get the last wavelength for the spectral band definition */
-  VariableLengthVectorType GetLastWavelengths() const;
+  VariableLengthVectorType GetLastWavelengths() const ITK_OVERRIDE;
 
-  bool CanRead() const;
+  bool CanRead() const ITK_OVERRIDE;
 
   /** Get the enhanced band names of Ikonos data*/
-  std::vector<std::string> GetEnhancedBandNames() const;
+  std::vector<std::string> GetEnhancedBandNames() const ITK_OVERRIDE;
 
   /** Get the 3 spectral band numbers corresponding to the default display for visualization,
    *  in the order R, G, B */
-  std::vector<unsigned int> GetDefaultDisplay() const;
+  std::vector<unsigned int> GetDefaultDisplay() const ITK_OVERRIDE;
 
   /** Vector that contains the filter function value in 6S format (step of 0.0025 micro m).
      * There values a computed by 6S. */
-  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const;
+  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const ITK_OVERRIDE;
 
 protected:
   IkonosImageMetadataInterface();
-  virtual ~IkonosImageMetadataInterface() {}
+  ~IkonosImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Metadata/include/otbIkonosImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbIkonosImageMetadataInterfaceFactory.h
index 9bec791d4dcd03d05868256ef76bcf6e51d163d7..247027420b27511a43620f5e4bd2be6d0e851bb1 100644
--- a/Modules/Core/Metadata/include/otbIkonosImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbIkonosImageMetadataInterfaceFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self>       ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   IkonosImageMetadataInterfaceFactory();
-  virtual ~IkonosImageMetadataInterfaceFactory();
+  ~IkonosImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   IkonosImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbImageMetadataInterfaceBase.h b/Modules/Core/Metadata/include/otbImageMetadataInterfaceBase.h
index 2a685790333b2959489715b8cf4450ceee3ba58c..13b56b7b2fe8ddf866dfbd659b4e7f36270d5589 100644
--- a/Modules/Core/Metadata/include/otbImageMetadataInterfaceBase.h
+++ b/Modules/Core/Metadata/include/otbImageMetadataInterfaceBase.h
@@ -203,9 +203,9 @@ public:
 
 protected:
   ImageMetadataInterfaceBase();
-  virtual ~ImageMetadataInterfaceBase() {}
+  ~ImageMetadataInterfaceBase() ITK_OVERRIDE {}
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   MetaDataDictionaryType m_MetaDataDictionary;
 
diff --git a/Modules/Core/Metadata/include/otbImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbImageMetadataInterfaceFactory.h
index 9f10f645f890328fe4fc98db8c6d5006c65e29f5..e94e7dd3a5f5fd77a02ac851bf9e1502b190a8cd 100644
--- a/Modules/Core/Metadata/include/otbImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbImageMetadataInterfaceFactory.h
@@ -58,7 +58,7 @@ public:
 
 protected:
   ImageMetadataInterfaceFactory();
-  ~ImageMetadataInterfaceFactory();
+  ~ImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   ImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbOpticalDefaultImageMetadataInterface.h b/Modules/Core/Metadata/include/otbOpticalDefaultImageMetadataInterface.h
index 515d32b466af5d4d1011b99a556071d1dedb8a94..3647a8331fd5a0f0a98417d2b0895eddefb23b58 100644
--- a/Modules/Core/Metadata/include/otbOpticalDefaultImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbOpticalDefaultImageMetadataInterface.h
@@ -54,103 +54,103 @@ public:
   typedef Superclass::ImageKeywordlistType     ImageKeywordlistType;
 
   /** Get the radiometric bias from the ossim metadata */
-  VariableLengthVectorType GetPhysicalBias() const
+  VariableLengthVectorType GetPhysicalBias() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetPhysicalBias not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the radiometric gain from the ossim metadata */
-  VariableLengthVectorType GetPhysicalGain() const
+  VariableLengthVectorType GetPhysicalGain() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetPhysicalGain not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the solar irradiance from the ossim metadata */
-  VariableLengthVectorType GetSolarIrradiance() const
+  VariableLengthVectorType GetSolarIrradiance() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetSolarIrradiance not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition day from the ossim metadata */
-  int GetDay() const
+  int GetDay() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetDay not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition month from the ossim metadata */
-  int GetMonth() const
+  int GetMonth() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetMonth not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition year from the ossim metadata */
-  int GetYear() const
+  int GetYear() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetYear not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition hour from the ossim metadata */
-  int GetHour() const
+  int GetHour() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetHour not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition minute from the ossim metadata */
-  int GetMinute() const
+  int GetMinute() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetMinute not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging production day from the ossim metadata */
-  int GetProductionDay() const
+  int GetProductionDay() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetProductionDay not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging production month from the ossim metadata */
-  int GetProductionMonth() const
+  int GetProductionMonth() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetProductionMonth not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging production year from the ossim metadata */
-  int GetProductionYear() const
+  int GetProductionYear() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetProductionYear not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the sat elevation from the ossim metadata */
-  double GetSatElevation() const
+  double GetSatElevation() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetSatElevation not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the sat azimuth from the ossim metadata */
-  double GetSatAzimuth() const
+  double GetSatAzimuth() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetSatElevation not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the first wavelength for the spectral band definition */
-  VariableLengthVectorType GetFirstWavelengths() const
+  VariableLengthVectorType GetFirstWavelengths() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetFirstWavelengths not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the last wavelength for the spectral band definition */
-  VariableLengthVectorType GetLastWavelengths() const
+  VariableLengthVectorType GetLastWavelengths() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetLastWavelengths not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the enhanced band names (here nothing because the sensor is not identify) */
-  std::vector<std::string> GetEnhancedBandNames() const
+  std::vector<std::string> GetEnhancedBandNames() const ITK_OVERRIDE
   {
     std::vector<std::string> nothing;
     return nothing;
   }
 
-  bool CanRead() const
+  bool CanRead() const ITK_OVERRIDE
   {
     // This clas is the default one, it has to be able to call every metadata
     return false;
@@ -158,7 +158,7 @@ public:
 
   /** Get the 3 spectral band numbers corresponding to the default display for visualization,
    *  in the order R, G, B */
-  virtual std::vector<unsigned int> GetDefaultDisplay() const
+  std::vector<unsigned int> GetDefaultDisplay() const ITK_OVERRIDE
       {
     std::vector<unsigned int> rgb(3);
     rgb[0] = 0;
@@ -169,14 +169,14 @@ public:
 
   /** Vector that contains the filter function value in 6S format (step of 0.0025 micro m).
    * There values a computed by 6S. */
-  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const
+  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const ITK_OVERRIDE
   {
     itkExceptionMacro("GetSpectralSensitivity not implemented in OpticalDefaultImageMetadataInterface, no captor type found");
   }
 
 protected:
   OpticalDefaultImageMetadataInterface(){};
-  virtual ~OpticalDefaultImageMetadataInterface() {}
+  ~OpticalDefaultImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Metadata/include/otbOpticalDefaultImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbOpticalDefaultImageMetadataInterfaceFactory.h
index c379df4a199c6e6654f601a4b18dbad1dde1e8ac..ec77c6e665ea8ef7fdcd8a1ed4f5226b13c625d5 100644
--- a/Modules/Core/Metadata/include/otbOpticalDefaultImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbOpticalDefaultImageMetadataInterfaceFactory.h
@@ -39,8 +39,8 @@ public:
   typedef itk::SmartPointer<const Self>               ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -57,7 +57,7 @@ public:
 
 protected:
   OpticalDefaultImageMetadataInterfaceFactory();
-  virtual ~OpticalDefaultImageMetadataInterfaceFactory();
+  ~OpticalDefaultImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   OpticalDefaultImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbOpticalImageMetadataInterface.h b/Modules/Core/Metadata/include/otbOpticalImageMetadataInterface.h
index 39f2db591003f955b03685e2b5e0db0ce55bc75f..7330b3e04dd78952a9c9c612af2d2f94cf37f13f 100644
--- a/Modules/Core/Metadata/include/otbOpticalImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbOpticalImageMetadataInterface.h
@@ -83,7 +83,7 @@ public:
   virtual VariableLengthVectorType GetLastWavelengths() const = 0;
 
   /** Get the enhanced band names */
-  std::vector<std::string> GetEnhancedBandNames() const = 0;
+  std::vector<std::string> GetEnhancedBandNames() const ITK_OVERRIDE = 0;
 
   /** This method is to handle the permutation of the spectral band by some image provider
    * in most cases, this method won't change the value, but for SPOT data, the bands are set up as
@@ -96,9 +96,9 @@ public:
   virtual WavelengthSpectralBandVectorType GetSpectralSensitivity ()  const = 0;
 protected:
   OpticalImageMetadataInterface();
-  virtual ~OpticalImageMetadataInterface() {}
+  ~OpticalImageMetadataInterface() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Core/Metadata/include/otbOpticalImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbOpticalImageMetadataInterfaceFactory.h
index 135259d19a022f38bc968cadfb46fd5f046e8612..934352f0b624fd34c3eafdad8ca1061ae808cf87 100644
--- a/Modules/Core/Metadata/include/otbOpticalImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbOpticalImageMetadataInterfaceFactory.h
@@ -58,7 +58,7 @@ public:
 
 protected:
   OpticalImageMetadataInterfaceFactory();
-  ~OpticalImageMetadataInterfaceFactory();
+  ~OpticalImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   OpticalImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbPleiadesImageMetadataInterface.h b/Modules/Core/Metadata/include/otbPleiadesImageMetadataInterface.h
index ea7f49d2701850af1a460c96cbd1ac86352d412d..a5f4bcb91e32c7b25e7f58d1a5623ec6470deb40 100644
--- a/Modules/Core/Metadata/include/otbPleiadesImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbPleiadesImageMetadataInterface.h
@@ -51,49 +51,49 @@ public:
   typedef Superclass::ImageKeywordlistType     ImageKeywordlistType;
 
   /** Get the radiometric bias from the ossim metadata */
-  VariableLengthVectorType GetPhysicalBias() const;
+  VariableLengthVectorType GetPhysicalBias() const ITK_OVERRIDE;
 
   /** Get the radiometric gain from the ossim metadata */
-  VariableLengthVectorType GetPhysicalGain() const;
+  VariableLengthVectorType GetPhysicalGain() const ITK_OVERRIDE;
 
   /** Get the solar irradiance from the ossim metadata */
-  VariableLengthVectorType GetSolarIrradiance() const;
+  VariableLengthVectorType GetSolarIrradiance() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition day from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetDay() const;
+  int GetDay() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition month from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetMonth() const;
+  int GetMonth() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetYear() const;
+  int GetYear() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition hour from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetHour() const;
+  int GetHour() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetMinute() const;
+  int GetMinute() const ITK_OVERRIDE;
 
   /** Get the imaging production day from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionDay() const;
+  int GetProductionDay() const ITK_OVERRIDE;
 
   /** Get the imaging production month from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionMonth() const;
+  int GetProductionMonth() const ITK_OVERRIDE;
 
   /** Get the imaging production year from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionYear() const;
+  int GetProductionYear() const ITK_OVERRIDE;
 
   /** Get the sat elevation from the ossim metadata */
-  double GetSatElevation() const;
+  double GetSatElevation() const ITK_OVERRIDE;
 
   /** Get the sat azimuth from the ossim metadata */
-  double GetSatAzimuth() const;
+  double GetSatAzimuth() const ITK_OVERRIDE;
 
   /** Get the first wavelength for the spectral band definition */
-  VariableLengthVectorType GetFirstWavelengths() const;
+  VariableLengthVectorType GetFirstWavelengths() const ITK_OVERRIDE;
 
   /** Get the last wavelength for the spectral band definition */
-  VariableLengthVectorType GetLastWavelengths() const;
+  VariableLengthVectorType GetLastWavelengths() const ITK_OVERRIDE;
 
   /** Get Instrument */
   std::string GetInstrument() const;
@@ -105,25 +105,25 @@ public:
    * in most cases, this method won't change the value, but for SPOT data, the bands are set up as
    *  2 1 0 3 in the tiff file, this method which is overloaded for SPOT enables to retrieve the
    *  proper band. */
-  unsigned int BandIndexToWavelengthPosition(unsigned int i) const;
+  unsigned int BandIndexToWavelengthPosition(unsigned int i) const ITK_OVERRIDE;
 
   /** Get the 3 spectral band numbers corresponding to the default display for visualization,
    *  in the order R, G, B */
-  std::vector<unsigned int> GetDefaultDisplay() const;
+  std::vector<unsigned int> GetDefaultDisplay() const ITK_OVERRIDE;
 
-  bool CanRead() const;
+  bool CanRead() const ITK_OVERRIDE;
 
   /** Get the enhanced band names of the Pleiades data */
-  std::vector<std::string> GetEnhancedBandNames() const;
+  std::vector<std::string> GetEnhancedBandNames() const ITK_OVERRIDE;
 
 
   /** Vector that contains the filter function value in 6S format (step of 0.0025 micro m).
      * There values a computed by 6S. */
-  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const;
+  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const ITK_OVERRIDE;
 
 protected:
   PleiadesImageMetadataInterface();
-  virtual ~PleiadesImageMetadataInterface() {}
+  ~PleiadesImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Metadata/include/otbPleiadesImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbPleiadesImageMetadataInterfaceFactory.h
index 13e293b50d69935ef5ab607097bc8fec8b568d1d..586a249653e1ff193192e2a63bc7a091b587b603 100644
--- a/Modules/Core/Metadata/include/otbPleiadesImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbPleiadesImageMetadataInterfaceFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self>     ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   PleiadesImageMetadataInterfaceFactory();
-  virtual ~PleiadesImageMetadataInterfaceFactory();
+  ~PleiadesImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   PleiadesImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbQuickBirdImageMetadataInterface.h b/Modules/Core/Metadata/include/otbQuickBirdImageMetadataInterface.h
index 94d23133520a3eaca1d7c96132ed01d7e84ba0a1..d0176eadd71f028dcf0d7833377f0c14af542368 100644
--- a/Modules/Core/Metadata/include/otbQuickBirdImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbQuickBirdImageMetadataInterface.h
@@ -51,65 +51,65 @@ public:
   typedef Superclass::ImageKeywordlistType     ImageKeywordlistType;
 
   /** Get the radiometric bias from the ossim metadata */
-  VariableLengthVectorType GetPhysicalBias() const;
+  VariableLengthVectorType GetPhysicalBias() const ITK_OVERRIDE;
 
   /** Get the radiometric gain from the ossim metadata */
-  VariableLengthVectorType GetPhysicalGain() const;
+  VariableLengthVectorType GetPhysicalGain() const ITK_OVERRIDE;
 
   /** Get the solar irradiance from the ossim metadata */
-  VariableLengthVectorType GetSolarIrradiance() const;
+  VariableLengthVectorType GetSolarIrradiance() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition day from the ossim metadata : TLCTime metadata value */
-  int GetDay() const;
+  int GetDay() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition month from the ossim metadata : TLCTime metadata value */
-  int GetMonth() const;
+  int GetMonth() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : TLCTime metadata value */
-  int GetYear() const;
+  int GetYear() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition hour from the ossim metadata : TLCTime metadata value */
-  int GetHour() const;
+  int GetHour() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : TLCTime metadata value */
-  int GetMinute() const;
+  int GetMinute() const ITK_OVERRIDE;
 
   /** Get the imaging production day from the ossim metadata : generationTime metadata value */
-  int GetProductionDay() const;
+  int GetProductionDay() const ITK_OVERRIDE;
 
   /** Get the imaging production month from the ossim metadata : generationTime metadata value */
-  int GetProductionMonth() const;
+  int GetProductionMonth() const ITK_OVERRIDE;
 
   /** Get the imaging production year from the ossim metadata : generationTime metadata value */
-  int GetProductionYear() const;
+  int GetProductionYear() const ITK_OVERRIDE;
 
   /** Get the sat elevation from the ossim metadata */
-  double GetSatElevation() const;
+  double GetSatElevation() const ITK_OVERRIDE;
 
   /** Get the sat azimuth from the ossim metadata */
-  double GetSatAzimuth() const;
+  double GetSatAzimuth() const ITK_OVERRIDE;
 
   /** Get the first wavelength for the spectral band definition */
-  VariableLengthVectorType GetFirstWavelengths() const;
+  VariableLengthVectorType GetFirstWavelengths() const ITK_OVERRIDE;
 
   /** Get the last wavelength for the spectral band definition */
-  VariableLengthVectorType GetLastWavelengths() const;
+  VariableLengthVectorType GetLastWavelengths() const ITK_OVERRIDE;
 
   /** Get the enhanced band names of QuickBird data */
-  std::vector<std::string> GetEnhancedBandNames() const;
+  std::vector<std::string> GetEnhancedBandNames() const ITK_OVERRIDE;
 
-  bool CanRead() const;
+  bool CanRead() const ITK_OVERRIDE;
 
   /** Get the 3 spectral band numbers corresponding to the default display for visualization,
    *  in the order R, G, B */
-  std::vector<unsigned int> GetDefaultDisplay() const;
+  std::vector<unsigned int> GetDefaultDisplay() const ITK_OVERRIDE;
 
   /** Vector that contains the filter function value in 6S format (step of 0.0025 micro m).
      * There values a computed by 6S. */
-  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const;
+  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const ITK_OVERRIDE;
 protected:
   QuickBirdImageMetadataInterface();
-  virtual ~QuickBirdImageMetadataInterface() {}
+  ~QuickBirdImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Metadata/include/otbQuickBirdImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbQuickBirdImageMetadataInterfaceFactory.h
index 070138b3699f75a97befe8354f7f6ba37d83d31d..cb95c859af33982b8dff5a36b11a05af9477c62b 100644
--- a/Modules/Core/Metadata/include/otbQuickBirdImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbQuickBirdImageMetadataInterfaceFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self>          ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   QuickBirdImageMetadataInterfaceFactory();
-  virtual ~QuickBirdImageMetadataInterfaceFactory();
+  ~QuickBirdImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   QuickBirdImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbRadarsat2ImageMetadataInterface.h b/Modules/Core/Metadata/include/otbRadarsat2ImageMetadataInterface.h
index 46439ca65227e1671ad6cfb565d2a0c6786da27b..b9f72fc6333ed050663fdfced63241f70796718f 100644
--- a/Modules/Core/Metadata/include/otbRadarsat2ImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbRadarsat2ImageMetadataInterface.h
@@ -55,40 +55,40 @@ public:
 
   /*ImageMetadataInterfaceBase pure virtuals */
   /** Get the imaging production day from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionDay() const;
+  int GetProductionDay() const ITK_OVERRIDE;
 
   /** Get the imaging production month from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionMonth() const;
+  int GetProductionMonth() const ITK_OVERRIDE;
 
   /** Get the imaging production year from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionYear() const;
+  int GetProductionYear() const ITK_OVERRIDE;
 
   /** check sensor ID */
-  bool CanRead() const;
+  bool CanRead() const ITK_OVERRIDE;
 
-  int GetDay() const;
+  int GetDay() const ITK_OVERRIDE;
 
-  int GetMonth() const;
+  int GetMonth() const ITK_OVERRIDE;
 
-  int GetYear() const;
+  int GetYear() const ITK_OVERRIDE;
 
-  int GetHour() const;
+  int GetHour() const ITK_OVERRIDE;
 
-  int GetMinute() const;
+  int GetMinute() const ITK_OVERRIDE;
 
-  UIntVectorType GetDefaultDisplay() const;
+  UIntVectorType GetDefaultDisplay() const ITK_OVERRIDE;
 
   /*SarImageMetadataInterface pure virutals rituals */
-  double GetPRF() const;
+  double GetPRF() const ITK_OVERRIDE;
 
-  double GetRSF() const;
+  double GetRSF() const ITK_OVERRIDE;
 
-  double GetRadarFrequency() const;
+  double GetRadarFrequency() const ITK_OVERRIDE;
 
-  double GetCenterIncidenceAngle() const;
+  double GetCenterIncidenceAngle() const ITK_OVERRIDE;
 
   /*get lookup data for calulating backscatter */
-  void CreateCalibrationLookupData(const short type);
+  void CreateCalibrationLookupData(const short type) ITK_OVERRIDE;
 
 
 protected:
@@ -96,7 +96,7 @@ protected:
   Radarsat2ImageMetadataInterface();
 
   /* class desctructor */
-  virtual ~Radarsat2ImageMetadataInterface() {}
+  ~Radarsat2ImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
   Radarsat2ImageMetadataInterface(const Self &); //purposely not implemented
@@ -144,7 +144,7 @@ public:
 
   }
 
-  virtual ~Radarsat2CalibrationLookupData()
+  ~Radarsat2CalibrationLookupData() ITK_OVERRIDE
   {
 
   }
@@ -156,7 +156,7 @@ public:
     m_Gains = gains;
   }
 
-  double GetValue(const IndexValueType x, const IndexValueType itkNotUsed(y))
+  double GetValue(const IndexValueType x, const IndexValueType itkNotUsed(y)) ITK_OVERRIDE
   {
     double lutVal = 1.0;
 
@@ -172,7 +172,7 @@ public:
     return lutVal;
   }
 
-  void PrintSelf(std::ostream & os, itk::Indent indent) const
+  void PrintSelf(std::ostream & os, itk::Indent indent) const ITK_OVERRIDE
   {
     os << indent << " offset:'" << m_Offset << "'" << std::endl;
     os <<  " referenceNoiseLevel.gain: " << std::endl;
diff --git a/Modules/Core/Metadata/include/otbRadarsat2ImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbRadarsat2ImageMetadataInterfaceFactory.h
index 2aeb8a8f583be04f5b8fcb0f022015daea6d283f..3a2eb1fca9f62d2572c4d8995fb9bc705a490f43 100644
--- a/Modules/Core/Metadata/include/otbRadarsat2ImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbRadarsat2ImageMetadataInterfaceFactory.h
@@ -37,8 +37,8 @@ public:
   typedef itk::SmartPointer<const Self>     ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -55,7 +55,7 @@ public:
 
 protected:
   Radarsat2ImageMetadataInterfaceFactory();
-  virtual ~Radarsat2ImageMetadataInterfaceFactory();
+  ~Radarsat2ImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   Radarsat2ImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbSarCalibrationLookupData.h b/Modules/Core/Metadata/include/otbSarCalibrationLookupData.h
index ef95f2b687f54ac5b3f4e9d9239d64a96a7c5fc6..1b8b49347875c7de8808dd35b2b35acbf2a5ef7d 100644
--- a/Modules/Core/Metadata/include/otbSarCalibrationLookupData.h
+++ b/Modules/Core/Metadata/include/otbSarCalibrationLookupData.h
@@ -38,7 +38,7 @@ class ITK_EXPORT SarCalibrationLookupData : public itk::LightObject {
 
   }
 
-  virtual ~SarCalibrationLookupData()
+  ~SarCalibrationLookupData() ITK_OVERRIDE
   {
   }
 
@@ -54,7 +54,7 @@ class ITK_EXPORT SarCalibrationLookupData : public itk::LightObject {
 
   itkGetMacro(Type, short);
 
-  void PrintSelf(std::ostream & os, itk::Indent indent) const
+  void PrintSelf(std::ostream & os, itk::Indent indent) const ITK_OVERRIDE
   {
     os << indent << " lookup table type:'" << m_Type << "'" << std::endl;
     Superclass::PrintSelf(os, indent);
diff --git a/Modules/Core/Metadata/include/otbSarDefaultImageMetadataInterface.h b/Modules/Core/Metadata/include/otbSarDefaultImageMetadataInterface.h
index dd6529ab2454abc3274b3e5d7645cec4b06d4106..f0dd509b9ba017e67c16da7f93e9f8dc2b985d1c 100644
--- a/Modules/Core/Metadata/include/otbSarDefaultImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbSarDefaultImageMetadataInterface.h
@@ -58,134 +58,134 @@ public:
   typedef double                                     RealType;
   typedef PointSetType::PointType                    PointType;
 
-  RealType GetRadiometricCalibrationScale() const
+  RealType GetRadiometricCalibrationScale() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationScale() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  PointSetPointer GetRadiometricCalibrationAntennaPatternNewGain() const
+  PointSetPointer GetRadiometricCalibrationAntennaPatternNewGain() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationAntennaPatternNewGain() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  PointSetPointer GetRadiometricCalibrationAntennaPatternOldGain() const
+  PointSetPointer GetRadiometricCalibrationAntennaPatternOldGain() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationAntennaPatternOldGain() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  PointSetPointer GetRadiometricCalibrationIncidenceAngle() const
+  PointSetPointer GetRadiometricCalibrationIncidenceAngle() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationIncidenceAngle() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  PointSetPointer GetRadiometricCalibrationRangeSpreadLoss() const
+  PointSetPointer GetRadiometricCalibrationRangeSpreadLoss() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationRangeSpreadLoss() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  PointSetPointer GetRadiometricCalibrationNoise() const
+  PointSetPointer GetRadiometricCalibrationNoise() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationNoise() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  IndexType GetRadiometricCalibrationAntennaPatternNewGainPolynomialDegree() const
+  IndexType GetRadiometricCalibrationAntennaPatternNewGainPolynomialDegree() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationAntennaPatternNewGainPolynomialDegree() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  IndexType GetRadiometricCalibrationAntennaPatternOldGainPolynomialDegree() const
+  IndexType GetRadiometricCalibrationAntennaPatternOldGainPolynomialDegree() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationAntennaPatternOldGainPolynomialDegree() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  IndexType GetRadiometricCalibrationIncidenceAnglePolynomialDegree() const
+  IndexType GetRadiometricCalibrationIncidenceAnglePolynomialDegree() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationIncidenceAnglePolynomialDegree() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  IndexType GetRadiometricCalibrationRangeSpreadLossPolynomialDegree() const
+  IndexType GetRadiometricCalibrationRangeSpreadLossPolynomialDegree() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationRangeSpreadLossPolynomialDegree() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  IndexType GetRadiometricCalibrationNoisePolynomialDegree() const
+  IndexType GetRadiometricCalibrationNoisePolynomialDegree() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadiometricCalibrationNoisePolynomialDegree() not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition day from the ossim metadata */
-  int GetDay() const
+  int GetDay() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetDay not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition month from the ossim metadata */
-  int GetMonth() const
+  int GetMonth() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetMonth not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition year from the ossim metadata */
-  int GetYear() const
+  int GetYear() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetYear not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition hour from the ossim metadata */
-  int GetHour() const
+  int GetHour() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetHour not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging acquisition minute from the ossim metadata */
-  int GetMinute() const
+  int GetMinute() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetMinute not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging production day from the ossim metadata */
-  int GetProductionDay() const
+  int GetProductionDay() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetProductionDay not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging production month from the ossim metadata */
-  int GetProductionMonth() const
+  int GetProductionMonth() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetProductionMonth not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the imaging production year from the ossim metadata */
-  int GetProductionYear() const
+  int GetProductionYear() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetProductionYear not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the PRF */
-  double GetPRF() const
+  double GetPRF() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetPRF not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the RSF */
-  double GetRSF() const
+  double GetRSF() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRSF not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the radar frequency */
-  double GetRadarFrequency() const
+  double GetRadarFrequency() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetRadarFrequency not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
   /** Get the center incidence angle */
-  double GetCenterIncidenceAngle() const
+  double GetCenterIncidenceAngle() const ITK_OVERRIDE
   {
     itkExceptionMacro("GetCenterIncidenceAngle not implemented in SarDefaultImageMetadataInterface, no captor type found");
   }
 
-  bool CanRead() const
+  bool CanRead() const ITK_OVERRIDE
   {
     // This clas is the default one, it has to be able to call every metadata
     return false;
@@ -193,7 +193,7 @@ public:
 
   /** Get the 3 spectral band numbers corresponding to the default display for visualization,
    *  in the order R, G, B */
-    UIntVectorType GetDefaultDisplay() const
+    UIntVectorType GetDefaultDisplay() const ITK_OVERRIDE
   {
     UIntVectorType rgb(3);
     rgb[0] = 0;
@@ -204,7 +204,7 @@ public:
 
 protected:
   SarDefaultImageMetadataInterface(){};
-  virtual ~SarDefaultImageMetadataInterface() {}
+  ~SarDefaultImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Metadata/include/otbSarDefaultImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbSarDefaultImageMetadataInterfaceFactory.h
index 8eb0f384903cfc2578c2f5edb21e4775ad8956d8..b43300bc7a28d304ab617fca79ee1140238f5b80 100644
--- a/Modules/Core/Metadata/include/otbSarDefaultImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbSarDefaultImageMetadataInterfaceFactory.h
@@ -39,8 +39,8 @@ public:
   typedef itk::SmartPointer<const Self>           ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -57,7 +57,7 @@ public:
 
 protected:
   SarDefaultImageMetadataInterfaceFactory();
-  virtual ~SarDefaultImageMetadataInterfaceFactory();
+  ~SarDefaultImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   SarDefaultImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbSarImageMetadataInterface.h b/Modules/Core/Metadata/include/otbSarImageMetadataInterface.h
index 7ce844f4207ca378e11c7e8d49722bcd6e953bfd..142f6efe3506bf89069341565432a180c31ce67b 100644
--- a/Modules/Core/Metadata/include/otbSarImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbSarImageMetadataInterface.h
@@ -100,7 +100,7 @@ public:
   virtual const std::string GetAcquisitionMode() const;
 
   /** Get the enhanced band names (No enhanced band name support for SAR) */
-  StringVectorType GetEnhancedBandNames() const
+  StringVectorType GetEnhancedBandNames() const ITK_OVERRIDE
   {
     StringVectorType nothing;
     return nothing;
@@ -108,12 +108,12 @@ public:
 
 protected:
   SarImageMetadataInterface();
-  virtual ~SarImageMetadataInterface() {}
+  ~SarImageMetadataInterface() ITK_OVERRIDE {}
 
   PointSetPointer GetConstantValuePointSet(const RealType& value) const;
   IndexType GetConstantPolynomialDegree() const;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   LookupDataPointerType m_SarLut;
 
diff --git a/Modules/Core/Metadata/include/otbSarImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbSarImageMetadataInterfaceFactory.h
index caa77c33d36969e81c48ebe1b72cffd267430142..6eed671f30eb4db7c08e1dd56c9feefbca95eb47 100644
--- a/Modules/Core/Metadata/include/otbSarImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbSarImageMetadataInterfaceFactory.h
@@ -58,7 +58,7 @@ public:
 
 protected:
   SarImageMetadataInterfaceFactory();
-  ~SarImageMetadataInterfaceFactory();
+  ~SarImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   SarImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbSentinel1ImageMetadataInterface.h b/Modules/Core/Metadata/include/otbSentinel1ImageMetadataInterface.h
index c67ead32a4656b69c84f35dfabb0072dfd9d8e1a..bac6a64685baeca9bc169452e261c65e3e9937ec 100644
--- a/Modules/Core/Metadata/include/otbSentinel1ImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbSentinel1ImageMetadataInterface.h
@@ -56,40 +56,40 @@ public:
   typedef Superclass::LookupDataPointerType LookupDataPointerType;
 
   /** Get the imaging production day from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionDay() const;
+  int GetProductionDay() const ITK_OVERRIDE;
 
   /** Get the imaging production month from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionMonth() const;
+  int GetProductionMonth() const ITK_OVERRIDE;
 
   /** Get the imaging production year from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionYear() const;
+  int GetProductionYear() const ITK_OVERRIDE;
 
   /** check sensor ID */
-  bool CanRead() const;
+  bool CanRead() const ITK_OVERRIDE;
 
-  int GetDay() const;
+  int GetDay() const ITK_OVERRIDE;
 
-  int GetMonth() const;
+  int GetMonth() const ITK_OVERRIDE;
 
-  int GetYear() const;
+  int GetYear() const ITK_OVERRIDE;
 
-  int GetHour() const;
+  int GetHour() const ITK_OVERRIDE;
 
-  int GetMinute() const;
+  int GetMinute() const ITK_OVERRIDE;
 
-  UIntVectorType GetDefaultDisplay() const;
+  UIntVectorType GetDefaultDisplay() const ITK_OVERRIDE;
 
   /*SarImageMetadataInterface pure virutals rituals */
-  double GetPRF() const;
+  double GetPRF() const ITK_OVERRIDE;
 
-  double GetRSF() const;
+  double GetRSF() const ITK_OVERRIDE;
 
-  double GetRadarFrequency() const;
+  double GetRadarFrequency() const ITK_OVERRIDE;
 
-  double GetCenterIncidenceAngle() const;
+  double GetCenterIncidenceAngle() const ITK_OVERRIDE;
 
   /*get lookup data for calulating backscatter */
-  void CreateCalibrationLookupData(const short type);
+  void CreateCalibrationLookupData(const short type) ITK_OVERRIDE;
 
 protected:
 
@@ -97,7 +97,7 @@ protected:
   Sentinel1ImageMetadataInterface();
 
   /* class dtor */
-  virtual ~Sentinel1ImageMetadataInterface() {}
+  ~Sentinel1ImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
@@ -157,7 +157,7 @@ public:
 
   }
 
-  virtual ~Sentinel1CalibrationLookupData()
+  ~Sentinel1CalibrationLookupData() ITK_OVERRIDE
   {
 
   }
@@ -175,7 +175,7 @@ public:
     lineTimeInterval = (lt - ft) / ((lines - 1) * 1.0);
   }
 
-  virtual double GetValue(const IndexValueType x, const IndexValueType y)
+  double GetValue(const IndexValueType x, const IndexValueType y) ITK_OVERRIDE
   {
     const int calVecIdx = GetVectorIndex(y);
     const Sentinel1CalibrationStruct vec0 = calibrationVectorList[calVecIdx];
diff --git a/Modules/Core/Metadata/include/otbSentinel1ImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbSentinel1ImageMetadataInterfaceFactory.h
index 76964bb4fc2beca05728862e17f16719e0087041..2798f55e49c21578aae06adb2ecbcd19942b1966 100644
--- a/Modules/Core/Metadata/include/otbSentinel1ImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbSentinel1ImageMetadataInterfaceFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self>     ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   Sentinel1ImageMetadataInterfaceFactory();
-  virtual ~Sentinel1ImageMetadataInterfaceFactory();
+  ~Sentinel1ImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   Sentinel1ImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbSpot6ImageMetadataInterface.h b/Modules/Core/Metadata/include/otbSpot6ImageMetadataInterface.h
index 269af29003625d526fa1e6b0bf9b2a1988b0ef37..931e271ed1872ab74eb166b622e7c0ab1414b732 100644
--- a/Modules/Core/Metadata/include/otbSpot6ImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbSpot6ImageMetadataInterface.h
@@ -51,49 +51,49 @@ public:
   typedef Superclass::ImageKeywordlistType     ImageKeywordlistType;
 
   /** Get the radiometric bias from the ossim metadata */
-  VariableLengthVectorType GetPhysicalBias() const;
+  VariableLengthVectorType GetPhysicalBias() const ITK_OVERRIDE;
 
   /** Get the radiometric gain from the ossim metadata */
-  VariableLengthVectorType GetPhysicalGain() const;
+  VariableLengthVectorType GetPhysicalGain() const ITK_OVERRIDE;
 
   /** Get the solar irradiance from the ossim metadata */
-  VariableLengthVectorType GetSolarIrradiance() const;
+  VariableLengthVectorType GetSolarIrradiance() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition day from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetDay() const;
+  int GetDay() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition month from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetMonth() const;
+  int GetMonth() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetYear() const;
+  int GetYear() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition hour from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetHour() const;
+  int GetHour() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetMinute() const;
+  int GetMinute() const ITK_OVERRIDE;
 
   /** Get the imaging production day from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionDay() const;
+  int GetProductionDay() const ITK_OVERRIDE;
 
   /** Get the imaging production month from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionMonth() const;
+  int GetProductionMonth() const ITK_OVERRIDE;
 
   /** Get the imaging production year from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionYear() const;
+  int GetProductionYear() const ITK_OVERRIDE;
 
   /** Get the sat elevation from the ossim metadata */
-  double GetSatElevation() const;
+  double GetSatElevation() const ITK_OVERRIDE;
 
   /** Get the sat azimuth from the ossim metadata */
-  double GetSatAzimuth() const;
+  double GetSatAzimuth() const ITK_OVERRIDE;
 
   /** Get the first wavelength for the spectral band definition */
-  VariableLengthVectorType GetFirstWavelengths() const;
+  VariableLengthVectorType GetFirstWavelengths() const ITK_OVERRIDE;
 
   /** Get the last wavelength for the spectral band definition */
-  VariableLengthVectorType GetLastWavelengths() const;
+  VariableLengthVectorType GetLastWavelengths() const ITK_OVERRIDE;
 
   /** Get Instrument */
   std::string GetInstrument() const;
@@ -105,25 +105,25 @@ public:
    * in most cases, this method won't change the value, but for SPOT data, the bands are set up as
    *  2 1 0 3 in the tiff file, this method which is overloaded for SPOT enables to retrieve the
    *  proper band. */
-  unsigned int BandIndexToWavelengthPosition(unsigned int i) const;
+  unsigned int BandIndexToWavelengthPosition(unsigned int i) const ITK_OVERRIDE;
 
   /** Get the 3 spectral band numbers corresponding to the default display for visualization,
    *  in the order R, G, B */
-  std::vector<unsigned int> GetDefaultDisplay() const;
+  std::vector<unsigned int> GetDefaultDisplay() const ITK_OVERRIDE;
 
-  bool CanRead() const;
+  bool CanRead() const ITK_OVERRIDE;
 
   /** Get the enhanced band names of the Spot6 data */
-  std::vector<std::string> GetEnhancedBandNames() const;
+  std::vector<std::string> GetEnhancedBandNames() const ITK_OVERRIDE;
 
 
   /** Vector that contains the filter function value in 6S format (step of 0.0025 micro m).
      * There values a computed by 6S. */
-  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const;
+  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const ITK_OVERRIDE;
 
 protected:
   Spot6ImageMetadataInterface();
-  virtual ~Spot6ImageMetadataInterface() {}
+  ~Spot6ImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Metadata/include/otbSpot6ImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbSpot6ImageMetadataInterfaceFactory.h
index 5534e97e2427206a1cb1b1c691e619c2bbd2092b..e00fda0da0c49a6914fe8df6a888f08425624c52 100644
--- a/Modules/Core/Metadata/include/otbSpot6ImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbSpot6ImageMetadataInterfaceFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self>     ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   Spot6ImageMetadataInterfaceFactory();
-  virtual ~Spot6ImageMetadataInterfaceFactory();
+  ~Spot6ImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   Spot6ImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbSpotImageMetadataInterface.h b/Modules/Core/Metadata/include/otbSpotImageMetadataInterface.h
index 4e6555cf0cb88b08250a4f2788ba347b5c772d22..2706658929f0bdc185b1d57693cb9e7a4e75010d 100644
--- a/Modules/Core/Metadata/include/otbSpotImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbSpotImageMetadataInterface.h
@@ -51,52 +51,52 @@ public:
   typedef Superclass::ImageKeywordlistType     ImageKeywordlistType;
 
   /** Get the radiometric bias from the ossim metadata */
-  VariableLengthVectorType GetPhysicalBias() const;
+  VariableLengthVectorType GetPhysicalBias() const ITK_OVERRIDE;
 
   /** Get the radiometric gain from the ossim metadata */
-  VariableLengthVectorType GetPhysicalGain() const;
+  VariableLengthVectorType GetPhysicalGain() const ITK_OVERRIDE;
 
   /** Get the solar irradiance from the ossim metadata */
-  VariableLengthVectorType GetSolarIrradiance() const;
+  VariableLengthVectorType GetSolarIrradiance() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition day from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetDay() const;
+  int GetDay() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition month from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetMonth() const;
+  int GetMonth() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetYear() const;
+  int GetYear() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition hour from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetHour() const;
+  int GetHour() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : IMAGING_DATE metadata variable */
-  int GetMinute() const;
+  int GetMinute() const ITK_OVERRIDE;
 
   /** Get the imaging production day from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionDay() const;
+  int GetProductionDay() const ITK_OVERRIDE;
 
   /** Get the imaging production month from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionMonth() const;
+  int GetProductionMonth() const ITK_OVERRIDE;
 
   /** Get the imaging production year from the ossim metadata : DATASET_PRODUCTION_DATE metadata variable */
-  int GetProductionYear() const;
+  int GetProductionYear() const ITK_OVERRIDE;
 
   /** Get the sat elevation from the ossim metadata */
-  double GetSatElevation() const;
+  double GetSatElevation() const ITK_OVERRIDE;
 
   /** Get the sat azimuth from the ossim metadata */
-  double GetSatAzimuth() const;
+  double GetSatAzimuth() const ITK_OVERRIDE;
 
   /** Get the first wavelength for the spectral band definition */
-  VariableLengthVectorType GetFirstWavelengths() const;
+  VariableLengthVectorType GetFirstWavelengths() const ITK_OVERRIDE;
 
   /** Get the last wavelength for the spectral band definition */
-  VariableLengthVectorType GetLastWavelengths() const;
+  VariableLengthVectorType GetLastWavelengths() const ITK_OVERRIDE;
 
   /** Get the enhanced band names (here nothing because the metadata did not provide band names) */
-  std::vector<std::string> GetEnhancedBandNames() const
+  std::vector<std::string> GetEnhancedBandNames() const ITK_OVERRIDE
   {
     return this->Superclass::GetBandName();
   }
@@ -111,21 +111,21 @@ public:
    * in most cases, this method won't change the value, but for SPOT data, the bands are set up as
    *  2 1 0 3 in the tiff file, this method which is overloaded for SPOT enables to retrieve the
    *  proper band. */
-  virtual unsigned int BandIndexToWavelengthPosition(unsigned int i) const;
+  unsigned int BandIndexToWavelengthPosition(unsigned int i) const ITK_OVERRIDE;
 
   /** Get the 3 spectral band numbers corresponding to the default display for visualization,
    *  in the order R, G, B */
-  std::vector<unsigned int> GetDefaultDisplay() const;
+  std::vector<unsigned int> GetDefaultDisplay() const ITK_OVERRIDE;
 
-  bool CanRead() const;
+  bool CanRead() const ITK_OVERRIDE;
 
   /** Vector that contains the filter function value in 6S format (step of 0.0025 micro m).
      * There values a computed by 6S. */
-  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const;
+  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const ITK_OVERRIDE;
 
 protected:
   SpotImageMetadataInterface();
-  virtual ~SpotImageMetadataInterface() {}
+  ~SpotImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Metadata/include/otbSpotImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbSpotImageMetadataInterfaceFactory.h
index 7413f1e8f048a3b4292b173cf8377e586024776a..1953721c7fccdcd3e194bbf32b5bda5c0961a184 100644
--- a/Modules/Core/Metadata/include/otbSpotImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbSpotImageMetadataInterfaceFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self>     ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   SpotImageMetadataInterfaceFactory();
-  virtual ~SpotImageMetadataInterfaceFactory();
+  ~SpotImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   SpotImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbTerraSarImageMetadataInterface.h b/Modules/Core/Metadata/include/otbTerraSarImageMetadataInterface.h
index 22687cfca53d83929230b9bd083975f9cdc2b3b3..d2b5adcfce3909e0b54debe028d606dfc1c7225a 100644
--- a/Modules/Core/Metadata/include/otbTerraSarImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbTerraSarImageMetadataInterface.h
@@ -64,28 +64,28 @@ public:
   typedef double                                RealType;
 
   /** Get the imaging start acquisition day from the ossim metadata */
-  int GetDay() const;
+  int GetDay() const ITK_OVERRIDE;
 
   /** Get the imaging start acquisition month from the ossim metadata */
-  int GetMonth() const;
+  int GetMonth() const ITK_OVERRIDE;
 
   /** Get the imaging start acquisition year from the ossim metadata */
-  int GetYear() const;
+  int GetYear() const ITK_OVERRIDE;
 
   /** Get the imaging start acquisition hour from the ossim metadata */
-  int GetHour() const;
+  int GetHour() const ITK_OVERRIDE;
 
   /** Get the imaging start acquisition minute from the ossim metadata */
-  int GetMinute() const;
+  int GetMinute() const ITK_OVERRIDE;
 
   /** Get the imaging production day from the ossim metadata : generationTime variable */
-  int GetProductionDay() const;
+  int GetProductionDay() const ITK_OVERRIDE;
 
   /** Get the imaging production month from the ossim metadata : generationTime variable */
-  int GetProductionMonth() const;
+  int GetProductionMonth() const ITK_OVERRIDE;
 
   /** Get the imaging production year from the ossim metadata : generationTime variable */
-  int GetProductionYear() const;
+  int GetProductionYear() const ITK_OVERRIDE;
 
   /** Get the calibration.calFactor : generationTime variable */
   double GetCalibrationFactor() const;
@@ -112,13 +112,13 @@ public:
   DoubleVectorType GetNoiseReferencePointList() const;
 
   /** Get the radar frequency */
-  double GetRadarFrequency() const;
+  double GetRadarFrequency() const ITK_OVERRIDE;
 
   /** Get the PRF */
-  double GetPRF() const;
+  double GetPRF() const ITK_OVERRIDE;
 
   /** Get the RSF */
-  double GetRSF() const;
+  double GetRSF() const ITK_OVERRIDE;
 
   /** Get the number of corner incidence angles */
   unsigned int GetNumberOfCornerIncidenceAngles() const;
@@ -127,7 +127,7 @@ public:
   double GetMeanIncidenceAngles() const;
 
   /** Get the center incidence angle */
-  double GetCenterIncidenceAngle() const;
+  double GetCenterIncidenceAngle() const ITK_OVERRIDE;
 
   /** Get the center index */
   IndexType GetCenterIncidenceAngleIndex() const;
@@ -139,26 +139,26 @@ public:
   IndexVectorType GetCornersIncidenceAnglesIndex() const;
 
   /** Get the constant calibration factor */
-  RealType   GetRadiometricCalibrationScale() const;
+  RealType   GetRadiometricCalibrationScale() const ITK_OVERRIDE;
 
-  PointSetPointer GetRadiometricCalibrationNoise() const;
-  IndexType GetRadiometricCalibrationNoisePolynomialDegree() const;
+  PointSetPointer GetRadiometricCalibrationNoise() const ITK_OVERRIDE;
+  IndexType GetRadiometricCalibrationNoisePolynomialDegree() const ITK_OVERRIDE;
 
   //PointSetPointer GetRadiometricCalibrationAntennaPatternOldGain() const;
-  PointSetPointer GetRadiometricCalibrationIncidenceAngle() const;
-  IndexType GetRadiometricCalibrationIncidenceAnglePolynomialDegree() const;
+  PointSetPointer GetRadiometricCalibrationIncidenceAngle() const ITK_OVERRIDE;
+  IndexType GetRadiometricCalibrationIncidenceAnglePolynomialDegree() const ITK_OVERRIDE;
 
-  bool CanRead() const;
+  bool CanRead() const ITK_OVERRIDE;
 
   /** Get the 3 spectral band numbers corresponding to the default display for visualization,
    *  in the order R, G, B */
-  std::vector<unsigned int> GetDefaultDisplay() const;
+  std::vector<unsigned int> GetDefaultDisplay() const ITK_OVERRIDE;
 
 protected:
   TerraSarImageMetadataInterface();
-  virtual ~TerraSarImageMetadataInterface() {}
+  ~TerraSarImageMetadataInterface() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Evaluate polynom with Horner scheme*/
 
   inline double Horner(std::vector<double>& coefficients, const double tauMinusTauRef) const;
diff --git a/Modules/Core/Metadata/include/otbTerraSarImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbTerraSarImageMetadataInterfaceFactory.h
index 9a92a0b8bbf1f72d0fe7334702723acd06793a48..fedae74b36ec9971a09172afef7c8905979160b0 100644
--- a/Modules/Core/Metadata/include/otbTerraSarImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbTerraSarImageMetadataInterfaceFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self>     ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   TerraSarImageMetadataInterfaceFactory();
-  virtual ~TerraSarImageMetadataInterfaceFactory();
+  ~TerraSarImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   TerraSarImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/Metadata/include/otbWorldView2ImageMetadataInterface.h b/Modules/Core/Metadata/include/otbWorldView2ImageMetadataInterface.h
index 3fb4b79d65f1e989f228a0f24320a3ff7b171e0e..d8aa945fbb5c2d55342b1e607389f0be07dbf851 100644
--- a/Modules/Core/Metadata/include/otbWorldView2ImageMetadataInterface.h
+++ b/Modules/Core/Metadata/include/otbWorldView2ImageMetadataInterface.h
@@ -51,66 +51,66 @@ public:
   typedef Superclass::ImageKeywordlistType     ImageKeywordlistType;
 
   /** Get the radiometric bias from the ossim metadata */
-  VariableLengthVectorType GetPhysicalBias() const;
+  VariableLengthVectorType GetPhysicalBias() const ITK_OVERRIDE;
 
   /** Get the radiometric gain from the ossim metadata */
-  VariableLengthVectorType GetPhysicalGain() const;
+  VariableLengthVectorType GetPhysicalGain() const ITK_OVERRIDE;
 
   /** Get the solar irradiance from the ossim metadata */
-  VariableLengthVectorType GetSolarIrradiance() const;
+  VariableLengthVectorType GetSolarIrradiance() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition day from the ossim metadata : TLCTime metadata value */
-  int GetDay() const;
+  int GetDay() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition month from the ossim metadata : TLCTime metadata value */
-  int GetMonth() const;
+  int GetMonth() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : TLCTime metadata value */
-  int GetYear() const;
+  int GetYear() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition hour from the ossim metadata : TLCTime metadata value */
-  int GetHour() const;
+  int GetHour() const ITK_OVERRIDE;
 
   /** Get the imaging acquisition year from the ossim metadata : TLCTime metadata value */
-  int GetMinute() const;
+  int GetMinute() const ITK_OVERRIDE;
 
   /** Get the imaging production day from the ossim metadata : generationTime metadata value */
-  int GetProductionDay() const;
+  int GetProductionDay() const ITK_OVERRIDE;
 
   /** Get the imaging production month from the ossim metadata : generationTime metadata value */
-  int GetProductionMonth() const;
+  int GetProductionMonth() const ITK_OVERRIDE;
 
   /** Get the imaging production year from the ossim metadata : generationTime metadata value */
-  int GetProductionYear() const;
+  int GetProductionYear() const ITK_OVERRIDE;
 
   /** Get the sat elevation from the ossim metadata */
-  double GetSatElevation() const;
+  double GetSatElevation() const ITK_OVERRIDE;
 
   /** Get the sat azimuth from the ossim metadata */
-  double GetSatAzimuth() const;
+  double GetSatAzimuth() const ITK_OVERRIDE;
 
   /** Get the first wavelength for the spectral band definition */
-  VariableLengthVectorType GetFirstWavelengths() const;
+  VariableLengthVectorType GetFirstWavelengths() const ITK_OVERRIDE;
 
   /** Get the last wavelength for the spectral band definition */
-  VariableLengthVectorType GetLastWavelengths() const;
+  VariableLengthVectorType GetLastWavelengths() const ITK_OVERRIDE;
 
-  bool CanRead() const;
+  bool CanRead() const ITK_OVERRIDE;
 
   /** Get the 3 spectral band numbers corresponding to the default display for visualization,
    *  in the order R, G, B */
-  std::vector<unsigned int> GetDefaultDisplay() const;
+  std::vector<unsigned int> GetDefaultDisplay() const ITK_OVERRIDE;
 
   /** Vector that contains the filter function value in 6S format (step of 0.0025 micro m).
    * There values a computed by 6S. */
-  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const;
+  WavelengthSpectralBandVectorType GetSpectralSensitivity()  const ITK_OVERRIDE;
 
   /** Get the enhanced band names from band names collected by ossim */
-  std::vector<std::string> GetEnhancedBandNames() const;
+  std::vector<std::string> GetEnhancedBandNames() const ITK_OVERRIDE;
 
 protected:
   WorldView2ImageMetadataInterface();
-  virtual ~WorldView2ImageMetadataInterface() {}
+  ~WorldView2ImageMetadataInterface() ITK_OVERRIDE {}
 
 private:
 
diff --git a/Modules/Core/Metadata/include/otbWorldView2ImageMetadataInterfaceFactory.h b/Modules/Core/Metadata/include/otbWorldView2ImageMetadataInterfaceFactory.h
index 7434ed9856aa33a316908c1cd2b45cae2dd25d19..59f110620a3e60acf3c71db33b24f6ea75fadde0 100644
--- a/Modules/Core/Metadata/include/otbWorldView2ImageMetadataInterfaceFactory.h
+++ b/Modules/Core/Metadata/include/otbWorldView2ImageMetadataInterfaceFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self>           ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -57,7 +57,7 @@ public:
 
 protected:
   WorldView2ImageMetadataInterfaceFactory();
-  virtual ~WorldView2ImageMetadataInterfaceFactory();
+  ~WorldView2ImageMetadataInterfaceFactory() ITK_OVERRIDE;
 
 private:
   WorldView2ImageMetadataInterfaceFactory(const Self &); //purposely not implemented
diff --git a/Modules/Core/ObjectList/include/otbImageList.h b/Modules/Core/ObjectList/include/otbImageList.h
index c828838a04ee6793eda3befa6470c5ead3849708..bdd2b8444a0f226e168e7301f0b4ddc17d63b57f 100644
--- a/Modules/Core/ObjectList/include/otbImageList.h
+++ b/Modules/Core/ObjectList/include/otbImageList.h
@@ -60,18 +60,18 @@ public:
   /**
    * Update images in the list.
    */
-  virtual void UpdateOutputInformation(void);
-  virtual void PropagateRequestedRegion(void)
-    throw (itk::InvalidRequestedRegionError);
-  virtual void UpdateOutputData(void);
+  void UpdateOutputInformation(void) ITK_OVERRIDE;
+  void PropagateRequestedRegion(void)
+    throw (itk::InvalidRequestedRegionError) ITK_OVERRIDE;
+  void UpdateOutputData(void) ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   ImageList() {};
   /** Destructor */
-  virtual ~ImageList() {}
+  ~ImageList() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Core/ObjectList/include/otbImageListSource.h b/Modules/Core/ObjectList/include/otbImageListSource.h
index 2e2b02b0b96302e2662d71161696375f2522aaf9..0d983ad71887b0d510567b2b0c845c30bbd5ec2b 100644
--- a/Modules/Core/ObjectList/include/otbImageListSource.h
+++ b/Modules/Core/ObjectList/include/otbImageListSource.h
@@ -62,9 +62,9 @@ protected:
   /** Constructor */
   ImageListSource();
   /** Destructor */
-  virtual ~ImageListSource() {}
+  ~ImageListSource() ITK_OVERRIDE {}
   /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageListSource(const Self &); //purposely not implemented
diff --git a/Modules/Core/ObjectList/include/otbImageListToImageFilter.h b/Modules/Core/ObjectList/include/otbImageListToImageFilter.h
index a43ee7437af326a0f0caf59ed342da43bef36b73..a345a7f288403a15efe135526b38fc7575fe5df2 100644
--- a/Modules/Core/ObjectList/include/otbImageListToImageFilter.h
+++ b/Modules/Core/ObjectList/include/otbImageListToImageFilter.h
@@ -72,9 +72,9 @@ protected:
   /** Constructor */
   ImageListToImageFilter();
   /** Destructor */
-  virtual ~ImageListToImageFilter() {}
+  ~ImageListToImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageListToImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/ObjectList/include/otbImageListToImageListApplyFilter.h b/Modules/Core/ObjectList/include/otbImageListToImageListApplyFilter.h
index 8ed1dd401e474f7e1f1dcb85c51bdb7e9c838827..0fa624cff4a072be0ec3e57b73694319e3f3d4fa 100644
--- a/Modules/Core/ObjectList/include/otbImageListToImageListApplyFilter.h
+++ b/Modules/Core/ObjectList/include/otbImageListToImageListApplyFilter.h
@@ -78,20 +78,20 @@ public:
 
   /** Generate output information for the ImageList and for each image
       in the list. */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /** Generate input requested region for each image in the list. */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
 protected:
   /** Main computation method */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** Constructor */
   ImageListToImageListApplyFilter();
   /** Destructor */
-  virtual ~ImageListToImageListApplyFilter() {}
+  ~ImageListToImageListApplyFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageListToImageListApplyFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/ObjectList/include/otbImageListToImageListFilter.h b/Modules/Core/ObjectList/include/otbImageListToImageListFilter.h
index 54d940b4f1badea9aff46a9f1c368f2640ade3c9..dcbd3e600574423ab70d49d4628c3c707e1dc83a 100644
--- a/Modules/Core/ObjectList/include/otbImageListToImageListFilter.h
+++ b/Modules/Core/ObjectList/include/otbImageListToImageListFilter.h
@@ -70,9 +70,9 @@ protected:
   /** Constructor */
   ImageListToImageListFilter();
   /** Destructor */
-  virtual ~ImageListToImageListFilter() {}
+  ~ImageListToImageListFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageListToImageListFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/ObjectList/include/otbImageListToSingleImageFilter.h b/Modules/Core/ObjectList/include/otbImageListToSingleImageFilter.h
index 259224ae17ec8fdefe19ad2e7e83af16c3ee3c62..9c56bc2b169a206fe245c7ca735b10d2aa51f2f0 100644
--- a/Modules/Core/ObjectList/include/otbImageListToSingleImageFilter.h
+++ b/Modules/Core/ObjectList/include/otbImageListToSingleImageFilter.h
@@ -70,13 +70,13 @@ protected:
   /** Constructor */
   ImageListToSingleImageFilter();
   /** Destructor */
-  virtual ~ImageListToSingleImageFilter() {}
+  ~ImageListToSingleImageFilter() ITK_OVERRIDE {}
 
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Core/ObjectList/include/otbImageListToVectorImageFilter.h b/Modules/Core/ObjectList/include/otbImageListToVectorImageFilter.h
index 5c37ea17bb660912cdea2ec8194a4c4210c043e3..c1a87ed00bf8ddc1183a619009f004a7d642858c 100644
--- a/Modules/Core/ObjectList/include/otbImageListToVectorImageFilter.h
+++ b/Modules/Core/ObjectList/include/otbImageListToVectorImageFilter.h
@@ -64,26 +64,26 @@ public:
 protected:
 
   /** Main computation method */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   /** GenerateOutputInformation
    * Set the number of bands of the output.
    * Copy information from the first image of the list if existing.
    **/
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /**
    * GenerateInputRequestedRegion
    * Set the requested region of each image in the list.
    */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** Constructor */
   ImageListToVectorImageFilter() {};
   /** Destructor */
-  virtual ~ImageListToVectorImageFilter() {}
+  ~ImageListToVectorImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageListToVectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/ObjectList/include/otbImageToImageListFilter.h b/Modules/Core/ObjectList/include/otbImageToImageListFilter.h
index b2d67466d94d82d90f0aef205bcc4fe81aa425fc..63d0f4a516b15aa5340d5c4e900e56bc08d9e0a6 100644
--- a/Modules/Core/ObjectList/include/otbImageToImageListFilter.h
+++ b/Modules/Core/ObjectList/include/otbImageToImageListFilter.h
@@ -68,9 +68,9 @@ protected:
   /** Constructor */
   ImageToImageListFilter();
   /** Destructor */
-  virtual ~ImageToImageListFilter() {}
+  ~ImageToImageListFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageToImageListFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/ObjectList/include/otbObjectList.h b/Modules/Core/ObjectList/include/otbObjectList.h
index eb7781e5beb0ec84770325406c487e026c08e443..0b32f26fa77ce08e92e14481ca7fdc486cb00472 100644
--- a/Modules/Core/ObjectList/include/otbObjectList.h
+++ b/Modules/Core/ObjectList/include/otbObjectList.h
@@ -584,9 +584,9 @@ protected:
   /** Constructor */
   ObjectList();
   /** Destructor */
-  ~ObjectList() {}
+  ~ObjectList() ITK_OVERRIDE {}
   /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ObjectList(const Self &); //purposely not implemented
diff --git a/Modules/Core/ObjectList/include/otbObjectListSource.h b/Modules/Core/ObjectList/include/otbObjectListSource.h
index 858a4f377b7c5c394eab37aad4297b90ee04da41..8ec66de28e66ed39dd18fa676cb103d4779b0f59 100644
--- a/Modules/Core/ObjectList/include/otbObjectListSource.h
+++ b/Modules/Core/ObjectList/include/otbObjectListSource.h
@@ -76,7 +76,7 @@ public:
    * SmartPointer to a DataObject. If a subclass of ImageSource has
    * multiple outputs of different types, then that class must provide
    * an implementation of MakeOutput(). */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   /** Graft the specified DataObject onto this ProcessObject's output.
@@ -170,9 +170,9 @@ protected:
   /** Constructor */
   ObjectListSource();
   /** Destructor */
-  virtual ~ObjectListSource() {}
+  ~ObjectListSource() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Ensure that the output lists are cleared before processing */
   virtual void  AllocateOutputs();
@@ -187,7 +187,7 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
 private:
   ObjectListSource(const Self &); //purposely not implemented
diff --git a/Modules/Core/ObjectList/include/otbObjectListSource.txx b/Modules/Core/ObjectList/include/otbObjectListSource.txx
index e23e1aa5af897587a38acfa81f9f785abd8c435b..7c24330794adcad8f7b2cb1ece54091b270eae78 100644
--- a/Modules/Core/ObjectList/include/otbObjectListSource.txx
+++ b/Modules/Core/ObjectList/include/otbObjectListSource.txx
@@ -142,7 +142,7 @@ void
 ObjectListSource<TOutputList>
 ::GenerateData(void)
 {
-  itkExceptionMacro("subclass should override this method!!!");
+  itkExceptionMacro("subclass should ITK_OVERRIDE this method!!!");
 }
 
 /**
diff --git a/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.h b/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.h
index 5956404d7d368d810b34b166c8c4ab074c1cd827..6db5bd78278034af8b63812100d0f437f3d2db9c 100644
--- a/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.h
+++ b/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.h
@@ -74,11 +74,11 @@ protected:
   /** Constructor */
   ObjectListToObjectListFilter();
   /** Destructor */
-  virtual ~ObjectListToObjectListFilter() {}
+  ~ObjectListToObjectListFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   /** Multi-threading implementation */
 
diff --git a/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.txx b/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.txx
index d0e73b6f70a9d97f89d43247f76c6c2549a83ffd..887cf759cfed5363935f4c0e6c63c13c9b32f828 100644
--- a/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.txx
+++ b/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.txx
@@ -131,12 +131,12 @@ ObjectListToObjectListFilter<TInputList, TOutputList>
 ::ThreadedGenerateData(unsigned int /*startIndex*/, unsigned int /*stopIndex*/, itk::ThreadIdType /*threadId*/)
 {
   // The following code is equivalent to:
-  // itkExceptionMacro("subclass should override this method!!!");
+  // itkExceptionMacro("subclass should ITK_OVERRIDE this method!!!");
   // The ExceptionMacro is not used because gcc warns that a
   // 'noreturn' function does return
   std::ostringstream message;
   message << "itk::ERROR: " << this->GetNameOfClass()
-          << "(" << this << "): " << "Subclass should override this method!!!";
+          << "(" << this << "): " << "Subclass should ITK_OVERRIDE this method!!!";
   itk::ExceptionObject e_(__FILE__, __LINE__, message.str().c_str(), ITK_LOCATION);
   throw e_;
 
diff --git a/Modules/Core/ObjectList/include/otbUnaryFunctorObjectListBooleanFilter.h b/Modules/Core/ObjectList/include/otbUnaryFunctorObjectListBooleanFilter.h
index 2555e22d1c4cf66f53982f6cd03c8bbc22d5f4e7..00d4422cad0315f75eac69554ef824308b5ca9fb 100644
--- a/Modules/Core/ObjectList/include/otbUnaryFunctorObjectListBooleanFilter.h
+++ b/Modules/Core/ObjectList/include/otbUnaryFunctorObjectListBooleanFilter.h
@@ -90,15 +90,15 @@ public:
 
 protected:
   UnaryFunctorObjectListBooleanFilter();
-  virtual ~UnaryFunctorObjectListBooleanFilter() {}
+  ~UnaryFunctorObjectListBooleanFilter() ITK_OVERRIDE {}
 
   /** Multi-threading implementation */
 
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
   /** startIndex and stopIndex represent the indices of the Objects to
   examine in thread threadId */
-  virtual void ThreadedGenerateData(unsigned int startIndex, unsigned int stopIndex, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(unsigned int startIndex, unsigned int stopIndex, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** Internal structure used for passing image data into the threading library */
   struct ThreadStruct
diff --git a/Modules/Core/ObjectList/include/otbUnaryFunctorObjectListFilter.h b/Modules/Core/ObjectList/include/otbUnaryFunctorObjectListFilter.h
index ac644bdede8ddb2f3caffbe4bb90bb8ede71926d..4e5f5c239e5d463607f54e1c371c4c0ed41176f3 100644
--- a/Modules/Core/ObjectList/include/otbUnaryFunctorObjectListFilter.h
+++ b/Modules/Core/ObjectList/include/otbUnaryFunctorObjectListFilter.h
@@ -91,15 +91,15 @@ public:
 
 protected:
   UnaryFunctorObjectListFilter();
-  virtual ~UnaryFunctorObjectListFilter() {}
+  ~UnaryFunctorObjectListFilter() ITK_OVERRIDE {}
 
   /** Multi-threading implementation */
 
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
   /** startIndex and stopIndex represent the indices of the Objects to
   examine in thread threadId */
-  virtual void ThreadedGenerateData(unsigned int startIndex, unsigned int stopIndex, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(unsigned int startIndex, unsigned int stopIndex, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** End Multi-threading implementation */
 
diff --git a/Modules/Core/ObjectList/include/otbVectorImageToImageListFilter.h b/Modules/Core/ObjectList/include/otbVectorImageToImageListFilter.h
index 20761f261bd1e2f9c15f4b990b8325cfea603087..afbc61ceffc8933a16c3393fd96e7d5644c3ebfa 100644
--- a/Modules/Core/ObjectList/include/otbVectorImageToImageListFilter.h
+++ b/Modules/Core/ObjectList/include/otbVectorImageToImageListFilter.h
@@ -64,22 +64,22 @@ public:
   typedef typename OutputImageType::Pointer       OutputImagePointerType;
 
   /** Generate the input requested region from the first element in the list. */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** Generate the output information by building the output list. */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
 protected:
 
   /** Main computation method */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   /** Constructor */
   VectorImageToImageListFilter() {};
   /** Destructor */
-  virtual ~VectorImageToImageListFilter() {}
+  ~VectorImageToImageListFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   VectorImageToImageListFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/PointSet/include/otbImageToPointSetFilter.h b/Modules/Core/PointSet/include/otbImageToPointSetFilter.h
index c272fca339df3268b31bd1c7f6a3300112a2d06e..2a080e8736b2f9b9b84b05870233c0e3f632e111 100644
--- a/Modules/Core/PointSet/include/otbImageToPointSetFilter.h
+++ b/Modules/Core/PointSet/include/otbImageToPointSetFilter.h
@@ -76,14 +76,14 @@ public:
   const InputImageType * GetInput();
 
   /** Prepare the output */
-  void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
 protected:
   ImageToPointSetFilter();
-  virtual ~ImageToPointSetFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageToPointSetFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   /** Multi-threading implementation */
 
diff --git a/Modules/Core/PointSet/include/otbImageToPointSetFilter.txx b/Modules/Core/PointSet/include/otbImageToPointSetFilter.txx
index a454869c67a05873c513931d6ba3cfc7c70d4fbd..f832535c1dd757724bc5d955c7e64c58fc7f02d2 100644
--- a/Modules/Core/PointSet/include/otbImageToPointSetFilter.txx
+++ b/Modules/Core/PointSet/include/otbImageToPointSetFilter.txx
@@ -256,12 +256,12 @@ ImageToPointSetFilter<TInputImage, TOutputPointSet>
 ::ThreadedGenerateData(const InputImageRegionType&, itk::ThreadIdType)
 {
   // The following code is equivalent to:
-  // itkExceptionMacro("subclass should override this method!!!");
+  // itkExceptionMacro("subclass should ITK_OVERRIDE this method!!!");
   // The ExceptionMacro is not used because gcc warns that a
   // 'noreturn' function does return
   std::ostringstream message;
   message << "itk::ERROR: " << this->GetNameOfClass()
-          << "(" << this << "): " << "Subclass should override this method!!!";
+          << "(" << this << "): " << "Subclass should ITK_OVERRIDE this method!!!";
   itk::ExceptionObject e_(__FILE__, __LINE__, message.str().c_str(), ITK_LOCATION);
   throw e_;
 
diff --git a/Modules/Core/PointSet/include/otbPointSetExtractROI.h b/Modules/Core/PointSet/include/otbPointSetExtractROI.h
index ffb7a76c8376092baf93e87d658a41543119fc2d..56dfeab436f01dc67ccbf5f462595b5a1b8c9ca3 100644
--- a/Modules/Core/PointSet/include/otbPointSetExtractROI.h
+++ b/Modules/Core/PointSet/include/otbPointSetExtractROI.h
@@ -75,11 +75,11 @@ public:
 
 protected:
   PointSetExtractROI();
-  virtual ~PointSetExtractROI() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PointSetExtractROI() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Generate Requested Data */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
 private:
   PointSetExtractROI(const PointSetExtractROI &); //purposely not implemented
diff --git a/Modules/Core/PointSet/include/otbPointSetFunction.h b/Modules/Core/PointSet/include/otbPointSetFunction.h
index 784c4a5c4c6c56620b8ffb72d7111570b5b79d94..6832e9ae61a442c02fa0075fb1d084b15fe839e7 100644
--- a/Modules/Core/PointSet/include/otbPointSetFunction.h
+++ b/Modules/Core/PointSet/include/otbPointSetFunction.h
@@ -68,9 +68,9 @@ public:
 
 protected:
   PointSetFunction();
-  ~PointSetFunction() {}
+  ~PointSetFunction() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   PointSetFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Core/PointSet/include/otbPointSetSource.h b/Modules/Core/PointSet/include/otbPointSetSource.h
index e731e9adf9b4e768fbb7cb664ea3b4ded77b4b26..9129ba2737d9639e69701f013fde3e87077b644c 100644
--- a/Modules/Core/PointSet/include/otbPointSetSource.h
+++ b/Modules/Core/PointSet/include/otbPointSetSource.h
@@ -122,18 +122,18 @@ public:
    * SmartPointer to a DataObject. If a subclass of MeshSource has
    * multiple outputs of different types, then that class must provide
    * an implementation of MakeOutput(). */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
 protected:
   PointSetSource();
-  virtual ~PointSetSource() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PointSetSource() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Requested region of Point Set is specified as i of N unstructured regions.
    * Since all DataObjects should be able to set the requested region in
    * unstructured form, just copy output->RequestedRegion all inputs. */
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
 private:
   PointSetSource(const Self &); //purposely not implemented
diff --git a/Modules/Core/PointSet/include/otbPointSetToPointSetFilter.h b/Modules/Core/PointSet/include/otbPointSetToPointSetFilter.h
index de123b11c9c7ea8a0b02b91b4cb9df9b48e594d1..edeae03913f0b8d942e8ebb25182a55a5c02a2e5 100644
--- a/Modules/Core/PointSet/include/otbPointSetToPointSetFilter.h
+++ b/Modules/Core/PointSet/include/otbPointSetToPointSetFilter.h
@@ -70,8 +70,8 @@ public:
 
 protected:
   PointSetToPointSetFilter();
-  virtual ~PointSetToPointSetFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PointSetToPointSetFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   PointSetToPointSetFilter(const PointSetToPointSetFilter &); //purposely not implemented
diff --git a/Modules/Core/PointSet/include/otbRandomPointSetSource.h b/Modules/Core/PointSet/include/otbRandomPointSetSource.h
index 553dbd40416f4e5cc793f5dc8c8257226bbf1c4f..9b392c695a59e98a9faba169c9c0f157e8a1f0e5 100644
--- a/Modules/Core/PointSet/include/otbRandomPointSetSource.h
+++ b/Modules/Core/PointSet/include/otbRandomPointSetSource.h
@@ -84,9 +84,9 @@ public:
 
 protected:
   RandomPointSetSource();
-  virtual ~RandomPointSetSource() {}
+  ~RandomPointSetSource() ITK_OVERRIDE {}
 
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
 private:
   RandomPointSetSource(const Self &); //purposely not implemented
diff --git a/Modules/Core/PointSet/include/otbThresholdImageToPointSetFilter.h b/Modules/Core/PointSet/include/otbThresholdImageToPointSetFilter.h
index 91227d388176336f0e66e156fed8bdb2fe5707f4..1140972ab879e4f882c81bffa59088612e69289f 100644
--- a/Modules/Core/PointSet/include/otbThresholdImageToPointSetFilter.h
+++ b/Modules/Core/PointSet/include/otbThresholdImageToPointSetFilter.h
@@ -81,11 +81,11 @@ public:
 
 protected:
   ThresholdImageToPointSetFilter();
-  virtual ~ThresholdImageToPointSetFilter() {}
+  ~ThresholdImageToPointSetFilter() ITK_OVERRIDE {}
 
-  virtual void ThreadedGenerateData(const InputImageRegionType& inputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const InputImageRegionType& inputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ThresholdImageToPointSetFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/PointSet/include/otbTransformPointSetFilter.h b/Modules/Core/PointSet/include/otbTransformPointSetFilter.h
index 620a06086b30d4f8baa4d111413a48c0243a84d5..e48e6aaee3ac4519fd7a8586eb492f3b3ae356de 100644
--- a/Modules/Core/PointSet/include/otbTransformPointSetFilter.h
+++ b/Modules/Core/PointSet/include/otbTransformPointSetFilter.h
@@ -72,11 +72,11 @@ public:
 
 protected:
   TransformPointSetFilter();
-  virtual ~TransformPointSetFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~TransformPointSetFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Generate Requested Data */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   /** Transform to apply to all the PointSet points. */
   typename TransformType::Pointer m_Transform;
diff --git a/Modules/Core/SpatialObjects/include/otbDrawLineSpatialObjectFilter.h b/Modules/Core/SpatialObjects/include/otbDrawLineSpatialObjectFilter.h
index 5fd838de308f22350f856fb9803304c541260154..26d7c48cb024c28408a242ed4e000422324658d2 100644
--- a/Modules/Core/SpatialObjects/include/otbDrawLineSpatialObjectFilter.h
+++ b/Modules/Core/SpatialObjects/include/otbDrawLineSpatialObjectFilter.h
@@ -98,10 +98,10 @@ public:
 
 protected:
   DrawLineSpatialObjectFilter();
-  virtual ~DrawLineSpatialObjectFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~DrawLineSpatialObjectFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   DrawLineSpatialObjectFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/SpatialObjects/include/otbDrawLineSpatialObjectListFilter.h b/Modules/Core/SpatialObjects/include/otbDrawLineSpatialObjectListFilter.h
index 7563d8552e7906ee20b439a393027a7384de11cb..69545ab03d5c7c4d85bf61080e905ae996209568 100644
--- a/Modules/Core/SpatialObjects/include/otbDrawLineSpatialObjectListFilter.h
+++ b/Modules/Core/SpatialObjects/include/otbDrawLineSpatialObjectListFilter.h
@@ -89,10 +89,10 @@ public:
 
 protected:
   DrawLineSpatialObjectListFilter();
-  virtual ~DrawLineSpatialObjectListFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~DrawLineSpatialObjectListFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * compute the intersection of the segment to draw with the region
diff --git a/Modules/Core/SpatialObjects/include/otbImageToLineSpatialObjectListFilter.h b/Modules/Core/SpatialObjects/include/otbImageToLineSpatialObjectListFilter.h
index 793cadc98ed87bce117e279f23c62929fe749a63..93f50114cf4da338b9f2066aae9d06cccf7c6c4d 100644
--- a/Modules/Core/SpatialObjects/include/otbImageToLineSpatialObjectListFilter.h
+++ b/Modules/Core/SpatialObjects/include/otbImageToLineSpatialObjectListFilter.h
@@ -82,8 +82,8 @@ public:
 
 protected:
   ImageToLineSpatialObjectListFilter();
-  virtual ~ImageToLineSpatialObjectListFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageToLineSpatialObjectListFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageToLineSpatialObjectListFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/SpatialObjects/include/otbLineSpatialObject.h b/Modules/Core/SpatialObjects/include/otbLineSpatialObject.h
index c65adda4ce3f8e6cf4b3aec1e6b9f146eb4fd4a2..6b9b35555d59340a4d1c4b5041144580b3717ac1 100644
--- a/Modules/Core/SpatialObjects/include/otbLineSpatialObject.h
+++ b/Modules/Core/SpatialObjects/include/otbLineSpatialObject.h
@@ -69,19 +69,19 @@ public:
   void SetPoints(PointListType& newPoints);
 
   /** Return a point in the list given the index */
-  const SpatialObjectPointType* GetPoint(unsigned long id) const
+  const SpatialObjectPointType* GetPoint(unsigned long id) const ITK_OVERRIDE
   {
     return &(m_Points[id]);
   }
 
   /** Return a point in the list given the index */
-  SpatialObjectPointType* GetPoint(unsigned long id)
+  SpatialObjectPointType* GetPoint(unsigned long id) ITK_OVERRIDE
   {
     return &(m_Points[id]);
   }
 
   /** Return the number of points in the list */
-  unsigned long GetNumberOfPoints(void) const
+  unsigned long GetNumberOfPoints(void) const ITK_OVERRIDE
   {
     return m_Points.size();
   }
@@ -89,18 +89,18 @@ public:
   /** Returns true if the line is evaluable at the requested point,
    *  false otherwise. */
   bool IsEvaluableAt(const PointType& point,
-                     unsigned int depth = 0, char * name = NULL) const;
+                     unsigned int depth = 0, char * name = NULL) const ITK_OVERRIDE;
 
   /** Returns the value of the line at that point.
    * Currently this function returns a binary value,
    * but it might want to return a degree of membership
    * in case of fuzzy Lines. */
   bool ValueAt(const PointType& point, double& value,
-               unsigned int depth = 0, char * name = NULL) const;
+               unsigned int depth = 0, char * name = NULL) const ITK_OVERRIDE;
 
   /** Returns true if the point is inside the line, false otherwise. */
   bool IsInside(const PointType& point,
-                unsigned int depth, char * name) const;
+                unsigned int depth, char * name) const ITK_OVERRIDE;
 
   /** Test whether a point is inside or outside the object
    *  For computational speed purposes, it is faster if the method does not
@@ -108,15 +108,15 @@ public:
   virtual bool IsInside(const PointType& point) const;
 
   /** Compute the boundaries of the line.*/
-  bool ComputeLocalBoundingBox() const;
+  bool ComputeLocalBoundingBox() const ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   LineSpatialObject();
   /** Destructor */
-  virtual ~LineSpatialObject();
+  ~LineSpatialObject() ITK_OVERRIDE;
   /** Method to print the object. */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LineSpatialObject(const Self &); //purposely not implemented
diff --git a/Modules/Core/SpatialObjects/include/otbLineSpatialObjectList.h b/Modules/Core/SpatialObjects/include/otbLineSpatialObjectList.h
index a41adde25156107958539ca742b8a8149c526c54..a52ea109397aa9764b557fca6a27e39274e566f5 100644
--- a/Modules/Core/SpatialObjects/include/otbLineSpatialObjectList.h
+++ b/Modules/Core/SpatialObjects/include/otbLineSpatialObjectList.h
@@ -55,7 +55,7 @@ public:
 
 protected:
   LineSpatialObjectList() {};
-  ~LineSpatialObjectList() {}
+  ~LineSpatialObjectList() ITK_OVERRIDE {}
 
 private:
   LineSpatialObjectList(const Self &); //purposely not implemented
diff --git a/Modules/Core/SpatialObjects/include/otbLineSpatialObjectListToPointSetFilter.h b/Modules/Core/SpatialObjects/include/otbLineSpatialObjectListToPointSetFilter.h
index 04bb8441ef522e44d7ee4f39fd3450ac7a388533..03508ad5505955dc79a9f560b0af791a606d96a5 100644
--- a/Modules/Core/SpatialObjects/include/otbLineSpatialObjectListToPointSetFilter.h
+++ b/Modules/Core/SpatialObjects/include/otbLineSpatialObjectListToPointSetFilter.h
@@ -71,8 +71,8 @@ public:
 
 protected:
   LineSpatialObjectListToPointSetFilter();
-  virtual ~LineSpatialObjectListToPointSetFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LineSpatialObjectListToPointSetFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LineSpatialObjectListToPointSetFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/SpatialObjects/include/otbSpatialObjectSource.h b/Modules/Core/SpatialObjects/include/otbSpatialObjectSource.h
index 76803062b31043a37ed6eec1a8d9e759400365e3..fd5d428aa37732940d9758e6c97429749a619554 100644
--- a/Modules/Core/SpatialObjects/include/otbSpatialObjectSource.h
+++ b/Modules/Core/SpatialObjects/include/otbSpatialObjectSource.h
@@ -64,9 +64,9 @@ protected:
   /** Constructor */
   SpatialObjectSource();
   /** Destructor */
-  virtual ~SpatialObjectSource() {}
+  ~SpatialObjectSource() ITK_OVERRIDE {}
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SpatialObjectSource(const Self &); //purposely not implemented
diff --git a/Modules/Core/SpatialObjects/include/otbSpatialObjectToImageDrawingFilter.h b/Modules/Core/SpatialObjects/include/otbSpatialObjectToImageDrawingFilter.h
index 8287affd5b8e1f08922c181c55dad348f14d34c1..f4e60e43bb2a8baad8f78205ed4b2dfab333dbf9 100644
--- a/Modules/Core/SpatialObjects/include/otbSpatialObjectToImageDrawingFilter.h
+++ b/Modules/Core/SpatialObjects/include/otbSpatialObjectToImageDrawingFilter.h
@@ -137,10 +137,10 @@ public:
 
 protected:
   SpatialObjectToImageDrawingFilter();
-  virtual ~SpatialObjectToImageDrawingFilter();
+  ~SpatialObjectToImageDrawingFilter() ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation(); // do nothing
-  virtual void GenerateData();
+  void GenerateOutputInformation() ITK_OVERRIDE; // do nothing
+  void GenerateData() ITK_OVERRIDE;
 
   SizeType     m_Size;
   double       m_Spacing[OutputImageDimension];
@@ -150,7 +150,7 @@ protected:
   ValueType    m_OutsideValue;
   bool         m_UseObjectValue;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SpatialObjectToImageDrawingFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/Streaming/include/otbNumberOfDivisionsStrippedStreamingManager.h b/Modules/Core/Streaming/include/otbNumberOfDivisionsStrippedStreamingManager.h
index eab1aa67a8095ec7e88f36eb311da59ebb1ddcd4..5ea7705cc88000b8c08cd804177b1da44010db17 100644
--- a/Modules/Core/Streaming/include/otbNumberOfDivisionsStrippedStreamingManager.h
+++ b/Modules/Core/Streaming/include/otbNumberOfDivisionsStrippedStreamingManager.h
@@ -65,11 +65,11 @@ public:
   itkGetMacro(NumberOfDivisions, unsigned int);
 
   /** Actually computes the stream divisions given a DataObject and its region to write */
-  virtual void PrepareStreaming(itk::DataObject * /*input*/, const RegionType &region);
+  void PrepareStreaming(itk::DataObject * /*input*/, const RegionType &region) ITK_OVERRIDE;
 
 protected:
   NumberOfDivisionsStrippedStreamingManager();
-  virtual ~NumberOfDivisionsStrippedStreamingManager();
+  ~NumberOfDivisionsStrippedStreamingManager() ITK_OVERRIDE;
 
   /** The splitter type used to generate the different strips */
   typedef itk::ImageRegionSplitterSlowDimension SplitterType;
diff --git a/Modules/Core/Streaming/include/otbNumberOfDivisionsTiledStreamingManager.h b/Modules/Core/Streaming/include/otbNumberOfDivisionsTiledStreamingManager.h
index e8498fd0c993b19d6329c89537f8832f3b579f2a..7ecd51b2649f02fc34924a9c4b1176750a05e9e1 100644
--- a/Modules/Core/Streaming/include/otbNumberOfDivisionsTiledStreamingManager.h
+++ b/Modules/Core/Streaming/include/otbNumberOfDivisionsTiledStreamingManager.h
@@ -64,11 +64,11 @@ public:
   itkGetMacro(NumberOfDivisions, unsigned int);
 
   /** Actually computes the stream divisions given a DataObject and its region to write */
-  virtual void PrepareStreaming(itk::DataObject * input, const RegionType &region);
+  void PrepareStreaming(itk::DataObject * input, const RegionType &region) ITK_OVERRIDE;
 
 protected:
   NumberOfDivisionsTiledStreamingManager();
-  virtual ~NumberOfDivisionsTiledStreamingManager();
+  ~NumberOfDivisionsTiledStreamingManager() ITK_OVERRIDE;
 
   /** The number of lines per strip desired by the user.
    *  This may be different than the one computed by the Splitter */
diff --git a/Modules/Core/Streaming/include/otbNumberOfLinesStrippedStreamingManager.h b/Modules/Core/Streaming/include/otbNumberOfLinesStrippedStreamingManager.h
index 1c539cf143bc2ff56fc2de63fe7000809c6e6877..90ed9a66fab301aa4930e035e74eeb678945d818 100644
--- a/Modules/Core/Streaming/include/otbNumberOfLinesStrippedStreamingManager.h
+++ b/Modules/Core/Streaming/include/otbNumberOfLinesStrippedStreamingManager.h
@@ -66,11 +66,11 @@ public:
 
   /** Actually computes the stream divisions, according to the specified streaming mode,
    * eventually using the input parameter to estimate memory consumption */
-  virtual void PrepareStreaming(itk::DataObject * /*input*/, const RegionType &region);
+  void PrepareStreaming(itk::DataObject * /*input*/, const RegionType &region) ITK_OVERRIDE;
 
 protected:
   NumberOfLinesStrippedStreamingManager();
-  virtual ~NumberOfLinesStrippedStreamingManager();
+  ~NumberOfLinesStrippedStreamingManager() ITK_OVERRIDE;
 
   /** The splitter type used to generate the different strips */
   typedef itk::ImageRegionSplitter<itkGetStaticConstMacro(ImageDimension)> SplitterType;
diff --git a/Modules/Core/Streaming/include/otbPersistentFilterStreamingDecorator.h b/Modules/Core/Streaming/include/otbPersistentFilterStreamingDecorator.h
index 9c04b81c12ba5af8681ca4f1384196f280a5b5a8..97a546686af0be4483752204c3b9b9f83ba16bb7 100644
--- a/Modules/Core/Streaming/include/otbPersistentFilterStreamingDecorator.h
+++ b/Modules/Core/Streaming/include/otbPersistentFilterStreamingDecorator.h
@@ -70,17 +70,17 @@ public:
   itkGetConstObjectMacro(Filter, FilterType);
   itkGetObjectMacro(Streamer, StreamerType);
 
-  virtual void Update(void);
+  void Update(void) ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   PersistentFilterStreamingDecorator();
   /** Destructor */
-  virtual ~PersistentFilterStreamingDecorator() {}
+  ~PersistentFilterStreamingDecorator() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   /// Object responsible for streaming
   StreamerPointerType m_Streamer;
diff --git a/Modules/Core/Streaming/include/otbPersistentImageFilter.h b/Modules/Core/Streaming/include/otbPersistentImageFilter.h
index 894ad10d690e16f93db41edddc68c08ff177caa6..368658410fbc236a045531562b32b80a2ae4c933 100644
--- a/Modules/Core/Streaming/include/otbPersistentImageFilter.h
+++ b/Modules/Core/Streaming/include/otbPersistentImageFilter.h
@@ -70,9 +70,9 @@ protected:
   /** Constructor */
   PersistentImageFilter() {}
   /** Destructor */
-  virtual ~PersistentImageFilter() {}
+  ~PersistentImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Core/Streaming/include/otbPipelineMemoryPrintCalculator.h b/Modules/Core/Streaming/include/otbPipelineMemoryPrintCalculator.h
index b3555bccd8ae54f38f76d80a9a9b6f4963227cb2..25001c87b8a94da30d13530e865e8eac0333667d 100644
--- a/Modules/Core/Streaming/include/otbPipelineMemoryPrintCalculator.h
+++ b/Modules/Core/Streaming/include/otbPipelineMemoryPrintCalculator.h
@@ -123,10 +123,10 @@ protected:
   PipelineMemoryPrintCalculator();
 
   /** Destructor */
-  virtual ~PipelineMemoryPrintCalculator();
+  ~PipelineMemoryPrintCalculator() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Recursive method to evaluate memory print in bytes */
   MemoryPrintType EvaluateProcessObjectPrintRecursive(ProcessObjectType * process);
diff --git a/Modules/Core/Streaming/include/otbRAMDrivenAdaptativeStreamingManager.h b/Modules/Core/Streaming/include/otbRAMDrivenAdaptativeStreamingManager.h
index 42f8e9f5867bea954f74a17b6bf5b553dc331796..51f3e964db34d1a519966f79cb2596ae126af1dd 100644
--- a/Modules/Core/Streaming/include/otbRAMDrivenAdaptativeStreamingManager.h
+++ b/Modules/Core/Streaming/include/otbRAMDrivenAdaptativeStreamingManager.h
@@ -80,11 +80,11 @@ public:
 
   /** Actually computes the stream divisions, according to the specified streaming mode,
    * eventually using the input parameter to estimate memory consumption */
-  virtual void PrepareStreaming(itk::DataObject * input, const RegionType &region);
+  void PrepareStreaming(itk::DataObject * input, const RegionType &region) ITK_OVERRIDE;
 
 protected:
   RAMDrivenAdaptativeStreamingManager();
-  virtual ~RAMDrivenAdaptativeStreamingManager();
+  ~RAMDrivenAdaptativeStreamingManager() ITK_OVERRIDE;
 
   /** The number of MegaBytes of RAM available */
   unsigned int m_AvailableRAMInMB;
diff --git a/Modules/Core/Streaming/include/otbRAMDrivenStrippedStreamingManager.h b/Modules/Core/Streaming/include/otbRAMDrivenStrippedStreamingManager.h
index c787dcf4d3ee09448da25b78222d2c9ce4c17d72..d31ab93092cf8561bf64656a703d85dd84f6e588 100644
--- a/Modules/Core/Streaming/include/otbRAMDrivenStrippedStreamingManager.h
+++ b/Modules/Core/Streaming/include/otbRAMDrivenStrippedStreamingManager.h
@@ -75,11 +75,11 @@ public:
 
   /** Actually computes the stream divisions, according to the specified streaming mode,
    * eventually using the input parameter to estimate memory consumption */
-  virtual void PrepareStreaming(itk::DataObject * input, const RegionType &region);
+  void PrepareStreaming(itk::DataObject * input, const RegionType &region) ITK_OVERRIDE;
 
 protected:
   RAMDrivenStrippedStreamingManager();
-  virtual ~RAMDrivenStrippedStreamingManager();
+  ~RAMDrivenStrippedStreamingManager() ITK_OVERRIDE;
 
   /** The splitter type used to generate the different strips */
   typedef itk::ImageRegionSplitter<itkGetStaticConstMacro(ImageDimension)> SplitterType;
diff --git a/Modules/Core/Streaming/include/otbRAMDrivenTiledStreamingManager.h b/Modules/Core/Streaming/include/otbRAMDrivenTiledStreamingManager.h
index 5ff6a46655b086057db18df97f5eb429f7ac975e..b8222844b867cd55917f85c6318cb90e934b9fdf 100644
--- a/Modules/Core/Streaming/include/otbRAMDrivenTiledStreamingManager.h
+++ b/Modules/Core/Streaming/include/otbRAMDrivenTiledStreamingManager.h
@@ -74,11 +74,11 @@ public:
 
   /** Actually computes the stream divisions, according to the specified streaming mode,
    * eventually using the input parameter to estimate memory consumption */
-  virtual void PrepareStreaming(itk::DataObject * input, const RegionType &region);
+  void PrepareStreaming(itk::DataObject * input, const RegionType &region) ITK_OVERRIDE;
 
 protected:
   RAMDrivenTiledStreamingManager();
-  virtual ~RAMDrivenTiledStreamingManager();
+  ~RAMDrivenTiledStreamingManager() ITK_OVERRIDE;
 
   /** The number of MegaBytes of RAM available */
   unsigned int m_AvailableRAMInMB;
diff --git a/Modules/Core/Streaming/include/otbStreamingImageVirtualWriter.h b/Modules/Core/Streaming/include/otbStreamingImageVirtualWriter.h
index c69fb3f685577ed15e45339c2cdb517384b9e9a8..f31c7e78da000a4ae4000bd8c5a1e21d00ed2c38 100644
--- a/Modules/Core/Streaming/include/otbStreamingImageVirtualWriter.h
+++ b/Modules/Core/Streaming/include/otbStreamingImageVirtualWriter.h
@@ -137,18 +137,18 @@ public:
 
   /** Override Update() from ProcessObject
    *  This filter does not produce an output */
-  virtual void Update();
+  void Update() ITK_OVERRIDE;
 
 protected:
   StreamingImageVirtualWriter();
 
-  virtual ~StreamingImageVirtualWriter();
+  ~StreamingImageVirtualWriter() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
 private:
   StreamingImageVirtualWriter(const StreamingImageVirtualWriter &); //purposely not implemented
diff --git a/Modules/Core/Streaming/include/otbStreamingManager.h b/Modules/Core/Streaming/include/otbStreamingManager.h
index 107d9fbf37bec6dbba57f8d5499e1d5f18533384..2c0bdac1c3840dd45336f6084411899b2de68b33 100644
--- a/Modules/Core/Streaming/include/otbStreamingManager.h
+++ b/Modules/Core/Streaming/include/otbStreamingManager.h
@@ -87,7 +87,7 @@ public:
 
 protected:
   StreamingManager();
-  virtual ~StreamingManager();
+  ~StreamingManager() ITK_OVERRIDE;
 
   virtual unsigned int EstimateOptimalNumberOfDivisions(itk::DataObject * input, const RegionType &region,
                                                         MemoryPrintType availableRAMInMB,
diff --git a/Modules/Core/Streaming/include/otbTileDimensionTiledStreamingManager.h b/Modules/Core/Streaming/include/otbTileDimensionTiledStreamingManager.h
index 7c579ba232d8e3ede8a85bf62dc53f97fa99dd9b..96a4a9d8741b118b230f976fdf3268a3e0c15f6b 100644
--- a/Modules/Core/Streaming/include/otbTileDimensionTiledStreamingManager.h
+++ b/Modules/Core/Streaming/include/otbTileDimensionTiledStreamingManager.h
@@ -69,11 +69,11 @@ public:
 
   /** Actually computes the stream divisions, according to the specified streaming mode,
    * eventually using the input parameter to estimate memory consumption */
-  virtual void PrepareStreaming(itk::DataObject * input, const RegionType &region);
+  void PrepareStreaming(itk::DataObject * input, const RegionType &region) ITK_OVERRIDE;
 
 protected:
   TileDimensionTiledStreamingManager();
-  virtual ~TileDimensionTiledStreamingManager();
+  ~TileDimensionTiledStreamingManager() ITK_OVERRIDE;
 
   /** The number of lines per strip desired by the user.
    *  This may be different than the one computed by the Splitter */
diff --git a/Modules/Core/Transform/include/otbCompositeTransform.h b/Modules/Core/Transform/include/otbCompositeTransform.h
index 48f09faa36c64b532f61b7d3ab167d0c00152a77..91df0412e5196e15f0d911531d76b5b645f39fb9 100644
--- a/Modules/Core/Transform/include/otbCompositeTransform.h
+++ b/Modules/Core/Transform/include/otbCompositeTransform.h
@@ -115,7 +115,7 @@ public:
   itkGetConstReferenceMacro(SecondTransform, SecondTransformPointerType);
 
   /**  Method to transform a point. */
-  virtual SecondTransformOutputPointType TransformPoint(const FirstTransformInputPointType&) const;
+  SecondTransformOutputPointType TransformPoint(const FirstTransformInputPointType&) const ITK_OVERRIDE;
 
   /**  Method to transform a vector. */
   //  virtual OutputVectorType TransformVector(const InputVectorType &) const;
@@ -128,7 +128,7 @@ public:
 
 protected:
   CompositeTransform();
-  virtual ~CompositeTransform();
+  ~CompositeTransform() ITK_OVERRIDE;
 
   FirstTransformPointerType  m_FirstTransform;
   SecondTransformPointerType m_SecondTransform;
diff --git a/Modules/Core/Transform/include/otbForwardSensorModel.h b/Modules/Core/Transform/include/otbForwardSensorModel.h
index a58c21a9adecbb1209240a8af4bc7bcafa637d22..8ded2f27e7f4429e5a05596a1adc8dc129264dec 100644
--- a/Modules/Core/Transform/include/otbForwardSensorModel.h
+++ b/Modules/Core/Transform/include/otbForwardSensorModel.h
@@ -71,14 +71,14 @@ public:
   itkStaticConstMacro(OutputSpaceDimension, unsigned int, NOutputDimensions);
 
   /** Compute the world coordinates. */
-  OutputPointType TransformPoint(const InputPointType& point) const;
+  OutputPointType TransformPoint(const InputPointType& point) const ITK_OVERRIDE;
 
 protected:
   ForwardSensorModel();
-  virtual ~ForwardSensorModel();
+  ~ForwardSensorModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Core/Transform/include/otbGenericMapProjection.h b/Modules/Core/Transform/include/otbGenericMapProjection.h
index d3796f80d497083a41f0d33a693dbd412dbbb81d..6bfc1a632d4fdb4d874200103a0f78512bca042c 100644
--- a/Modules/Core/Transform/include/otbGenericMapProjection.h
+++ b/Modules/Core/Transform/include/otbGenericMapProjection.h
@@ -95,7 +95,7 @@ public:
 
   virtual void PrintMap() const;
 
-  OutputPointType TransformPoint(const InputPointType& point) const;
+  OutputPointType TransformPoint(const InputPointType& point) const ITK_OVERRIDE;
 
   virtual bool InstanciateProjection();
 
@@ -108,9 +108,9 @@ public:
 
 protected:
   GenericMapProjection();
-  virtual ~GenericMapProjection();
+  ~GenericMapProjection() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   MapProjectionAdapter::Pointer m_MapProjection;
 
diff --git a/Modules/Core/Transform/include/otbGenericRSTransform.h b/Modules/Core/Transform/include/otbGenericRSTransform.h
index 5db6fa1bc581b9d1bb5f47d61210d5e703821096..04d4d7d5e7dc6cdf1e102c7062d6da7945f65715 100644
--- a/Modules/Core/Transform/include/otbGenericRSTransform.h
+++ b/Modules/Core/Transform/include/otbGenericRSTransform.h
@@ -165,31 +165,31 @@ public:
   /** Methods prototypes */
   virtual const TransformType * GetTransform() const;
 
-  OutputPointType TransformPoint(const InputPointType& point) const;
+  OutputPointType TransformPoint(const InputPointType& point) const ITK_OVERRIDE;
 
   virtual void  InstanciateTransform();
 
   // Get inverse methods
   bool GetInverse(Self * inverseTransform) const;
-  virtual InverseTransformBasePointer GetInverseTransform() const;
+  InverseTransformBasePointer GetInverseTransform() const ITK_OVERRIDE;
 
   // Dummy set parameter method
-  virtual void SetParameters(const typename Superclass::ParametersType &)  {}
+  void SetParameters(const typename Superclass::ParametersType &) ITK_OVERRIDE  {}
 
   // Dummy ComputeJacobianWithRespectToParameters method
-  virtual void ComputeJacobianWithRespectToParameters(const InputPointType  &, JacobianType& ) const {}
+  void ComputeJacobianWithRespectToParameters(const InputPointType  &, JacobianType& ) const ITK_OVERRIDE {}
 
 protected:
   GenericRSTransform();
-  virtual ~GenericRSTransform() {}
+  ~GenericRSTransform() ITK_OVERRIDE {}
 
-  virtual void Modified() const
+  void Modified() const ITK_OVERRIDE
   {
     this->Superclass::Modified();
     m_TransformUpToDate = false;
   }
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   GenericRSTransform(const Self &);    //purposely not implemented
diff --git a/Modules/Core/Transform/include/otbGeocentricTransform.h b/Modules/Core/Transform/include/otbGeocentricTransform.h
index ec9562c3244e46e2032d7d3ec5a2a0da2de61b07..3035ab5aae2c9709eb167b49fadcf7d82d708aaf 100644
--- a/Modules/Core/Transform/include/otbGeocentricTransform.h
+++ b/Modules/Core/Transform/include/otbGeocentricTransform.h
@@ -63,11 +63,11 @@ public:
   itkStaticConstMacro(SpaceDimension, unsigned int, NInputDimensions);
   itkStaticConstMacro(ParametersDimension, unsigned int, NInputDimensions * (NInputDimensions + 1));
 
-  OutputPointType TransformPoint(const InputPointType& point) const;
+  OutputPointType TransformPoint(const InputPointType& point) const ITK_OVERRIDE;
 
 protected:
   GeocentricTransform();
-  virtual ~GeocentricTransform();
+  ~GeocentricTransform() ITK_OVERRIDE;
   EllipsoidAdapter::Pointer m_Ellipsoid;
 
 private:
diff --git a/Modules/Core/Transform/include/otbImageToGenericRSOutputParameters.h b/Modules/Core/Transform/include/otbImageToGenericRSOutputParameters.h
index d9956c78a57757a1e340171fa100b2c6571e653a..94535c389ccb0cffee9144cf990f29485c0cf478 100644
--- a/Modules/Core/Transform/include/otbImageToGenericRSOutputParameters.h
+++ b/Modules/Core/Transform/include/otbImageToGenericRSOutputParameters.h
@@ -160,7 +160,7 @@ public:
 
 protected:
   ImageToGenericRSOutputParameters();
-  virtual ~ImageToGenericRSOutputParameters() {}
+  ~ImageToGenericRSOutputParameters() ITK_OVERRIDE {}
 
 private:
   ImageToGenericRSOutputParameters(const Self&); //purposely not implemented
diff --git a/Modules/Core/Transform/include/otbInverseLogPolarTransform.h b/Modules/Core/Transform/include/otbInverseLogPolarTransform.h
index 7cc4447bb86a74e7078a69c6059db067ed706143..8277f4fe7bb06b2f7d3e0867fb3535df9ad38c8d 100644
--- a/Modules/Core/Transform/include/otbInverseLogPolarTransform.h
+++ b/Modules/Core/Transform/include/otbInverseLogPolarTransform.h
@@ -80,50 +80,50 @@ public:
    * Set the transform parameters through the standard interface.
    * \param parameters The parameters of the transform.
    */
-  void SetParameters(const ParametersType& parameters);
+  void SetParameters(const ParametersType& parameters) ITK_OVERRIDE;
   /**
    * Get the transform parameters through the standard interface.
    * \return The parameters of the transform.
    */
-  virtual ParametersType& GetParameters(void) const;
+  ParametersType& GetParameters(void) const ITK_OVERRIDE;
     /**
    * Set the Fixed Parameters
    * \param param The fixed parameters of the transform.
    */
-  virtual void SetFixedParameters( const ParametersType & param)
+  void SetFixedParameters( const ParametersType & param) ITK_OVERRIDE
     { this->m_FixedParameters = param; }
   /**
    * Get the Fixed Parameters
    * \return The Fixed parameters of the transform.
    */
-  virtual const ParametersType& GetFixedParameters(void) const{return this->m_FixedParameters; }
+  const ParametersType& GetFixedParameters(void) const ITK_OVERRIDE{return this->m_FixedParameters; }
   /**
    * Transform a point.
    * \param point The point to transform.
    * \return The transformed point.
    */
    using Superclass::TransformVector;
-   OutputPointType TransformPoint(const InputPointType& point) const;
+   OutputPointType TransformPoint(const InputPointType& point) const ITK_OVERRIDE;
   /**
    * Transform a vector representing a point.
    * \param vector The point to transform.
    * \return The transformed point.
    */
-  OutputVectorType TransformVector(const InputVectorType& vector) const;
+  OutputVectorType TransformVector(const InputVectorType& vector) const ITK_OVERRIDE;
   /**
    * Transform a vnl vector representing a point.
    * \param vector The point to transform.
    * \return The transformed point.
    */
-  OutputVnlVectorType TransformVector(const InputVnlVectorType& vector) const;
+  OutputVnlVectorType TransformVector(const InputVnlVectorType& vector) const ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   InverseLogPolarTransform();
   /** Destructor */
-  virtual ~InverseLogPolarTransform();
+  ~InverseLogPolarTransform() ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   InverseLogPolarTransform(const Self &); // purposely not implemented
diff --git a/Modules/Core/Transform/include/otbInverseSensorModel.h b/Modules/Core/Transform/include/otbInverseSensorModel.h
index fb4238fb07e698c1bb2ff675824a18e7c2393c85..5d7e1aa104a7b4b1e45f1de8a72f8b515952877c 100644
--- a/Modules/Core/Transform/include/otbInverseSensorModel.h
+++ b/Modules/Core/Transform/include/otbInverseSensorModel.h
@@ -71,16 +71,16 @@ public:
   itkStaticConstMacro(OutputSpaceDimension, unsigned int, NOutputDimensions);
 
   // Transform of geographic point in image sensor index
-  virtual OutputPointType TransformPoint(const InputPointType& point) const;
+  OutputPointType TransformPoint(const InputPointType& point) const ITK_OVERRIDE;
   // Transform of geographic point in image sensor index -- Backward Compatibility
   //  OutputPointType TransformPoint(const InputPointType &point, double height) const;
 
 protected:
   InverseSensorModel();
-  virtual ~InverseSensorModel();
+  ~InverseSensorModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Core/Transform/include/otbLogPolarTransform.h b/Modules/Core/Transform/include/otbLogPolarTransform.h
index e0e8278fba2d8500f60ffd59299b7990e8153336..3bf2bf8083e136362912db8dc19c95ae4204e35f 100644
--- a/Modules/Core/Transform/include/otbLogPolarTransform.h
+++ b/Modules/Core/Transform/include/otbLogPolarTransform.h
@@ -81,53 +81,53 @@ public:
    * Set the transform parameters through the standard interface.
    * \param parameters The parameters of the transform.
    */
-  void SetParameters(const ParametersType& parameters);
+  void SetParameters(const ParametersType& parameters) ITK_OVERRIDE;
   /**
    * Get the transform parameters through the standard interface.
    * \return The parameters of the transform.
    */
-  virtual ParametersType& GetParameters(void) const;
+  ParametersType& GetParameters(void) const ITK_OVERRIDE;
 
   /**
    * Set the Fixed Parameters
    * \param param The fixed parameters of the transform.
    */
-  virtual void SetFixedParameters( const ParametersType & param)
+  void SetFixedParameters( const ParametersType & param) ITK_OVERRIDE
     { this->m_FixedParameters = param; }
 
   /**
    * Get the Fixed Parameters
    * \return The Fixed parameters of the transform.
    */
-  virtual const ParametersType& GetFixedParameters(void) const{return this->m_FixedParameters; }
+  const ParametersType& GetFixedParameters(void) const ITK_OVERRIDE{return this->m_FixedParameters; }
   /**
    * Transform a point.
    * \param point The point to transform.
    * \return The transformed point.
    */
-  OutputPointType TransformPoint(const InputPointType& point) const;
+  OutputPointType TransformPoint(const InputPointType& point) const ITK_OVERRIDE;
   /**
    * Transform a vector representing a point.
    * \param vector The point to transform.
    * \return The transformed point.
    */
   using Superclass::TransformVector;
-  OutputVectorType TransformVector(const InputVectorType& vector) const;
+  OutputVectorType TransformVector(const InputVectorType& vector) const ITK_OVERRIDE;
 
   /**
    * Transform a vnl vector representing a point.
    * \param vector The point to transform.
    * \return The transformed point.
    */
-  OutputVnlVectorType TransformVector(const InputVnlVectorType& vector) const;
+  OutputVnlVectorType TransformVector(const InputVnlVectorType& vector) const ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   LogPolarTransform();
   /** Destructor */
-  virtual ~LogPolarTransform();
+  ~LogPolarTransform() ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LogPolarTransform(const Self &); // purposely not implemented
diff --git a/Modules/Core/Transform/include/otbSensorModelBase.h b/Modules/Core/Transform/include/otbSensorModelBase.h
index 429b08f1f97b68f1a43d4d7d7e0003872e1555b3..b261f4fdb84394768edf3306f49442ec7f260b21 100644
--- a/Modules/Core/Transform/include/otbSensorModelBase.h
+++ b/Modules/Core/Transform/include/otbSensorModelBase.h
@@ -89,10 +89,10 @@ public:
 
 protected:
   SensorModelBase();
-  virtual ~SensorModelBase();
+  ~SensorModelBase() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** ImageKeywordlist */
   ImageKeywordlist m_ImageKeywordlist;
diff --git a/Modules/Core/Transform/include/otbStreamingWarpImageFilter.h b/Modules/Core/Transform/include/otbStreamingWarpImageFilter.h
index 3b44ec0bedd6295fc0491fec6942d03ba10b9d87..84269e896e37fa7548da9a3adb109777d476cf6f 100644
--- a/Modules/Core/Transform/include/otbStreamingWarpImageFilter.h
+++ b/Modules/Core/Transform/include/otbStreamingWarpImageFilter.h
@@ -84,22 +84,22 @@ protected:
   /** Constructor */
   StreamingWarpImageFilter();
   /** Destructor */
-  virtual ~StreamingWarpImageFilter() {}
+  ~StreamingWarpImageFilter() ITK_OVERRIDE {}
   /** PrintSelf */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * This filters requires only a part of the input and of the displacement field to
    * produce its output. As such, we need to overload the GenerateInputRequestedRegion() method.
    */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /**
    * Re-implement the method ThreadedGenerateData to mask area outside the deformation grid
    */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId );
+                            itk::ThreadIdType threadId ) ITK_OVERRIDE;
 
 private:
   StreamingWarpImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Core/Transform/include/otbTransform.h b/Modules/Core/Transform/include/otbTransform.h
index 87a215db60a35161cbe8b2de7a034dfa99ae1b6f..a90e3c673c261de0a07343ce9af116b6a197c3fa 100644
--- a/Modules/Core/Transform/include/otbTransform.h
+++ b/Modules/Core/Transform/include/otbTransform.h
@@ -55,10 +55,10 @@ public:
   itkStaticConstMacro(OutputSpaceDimension, unsigned int, NOutputDimensions);
 
   /** Get the size of the input space */
-  unsigned int GetInputSpaceDimension(void) const { return NInputDimensions; }
+  unsigned int GetInputSpaceDimension(void) const ITK_OVERRIDE { return NInputDimensions; }
 
   /** Get the size of the output space */
-  unsigned int GetOutputSpaceDimension(void) const { return NOutputDimensions; }
+  unsigned int GetOutputSpaceDimension(void) const ITK_OVERRIDE { return NOutputDimensions; }
 
   /** Type of the scalar representing coordinate and vector elements. */
   typedef  TScalarType ScalarType;
@@ -95,12 +95,12 @@ public:
 
   /**  Method to transform a point. */
 
-  virtual OutputPointType TransformPoint(const InputPointType  & ) const
+  OutputPointType TransformPoint(const InputPointType  & ) const ITK_OVERRIDE
     { return OutputPointType(); }
   
   using Superclass::TransformVector;
   /**  Method to transform a vector. */
-  virtual OutputVectorType    TransformVector(const InputVectorType &) const
+  OutputVectorType    TransformVector(const InputVectorType &) const ITK_OVERRIDE
   { return OutputVectorType(); }
 
   /**  Method to transform a vnl_vector. */
@@ -109,8 +109,8 @@ public:
 
   using Superclass::TransformCovariantVector;
   /**  Method to transform a CovariantVector. */
-  virtual OutputCovariantVectorType TransformCovariantVector(
-    const InputCovariantVectorType &) const
+  OutputCovariantVectorType TransformCovariantVector(
+    const InputCovariantVectorType &) const ITK_OVERRIDE
   { return OutputCovariantVectorType(); }
 
 
@@ -121,12 +121,12 @@ public:
    * SetParametersByValue.
    * \sa SetParametersByValue
    */
-    virtual void SetParameters( const ParametersType & )
-    { itkExceptionMacro( << "Subclasses should override this method (SetParameters)" ) }
+    void SetParameters( const ParametersType & ) ITK_OVERRIDE
+    { itkExceptionMacro( << "Subclasses should ITK_OVERRIDE this method (SetParameters)" ) }
 
-  virtual void ComputeJacobianWithRespectToParameters(const InputPointType  &, JacobianType& ) const
+  void ComputeJacobianWithRespectToParameters(const InputPointType  &, JacobianType& ) const ITK_OVERRIDE
   {
-    itkExceptionMacro(<<  "Subclasses should override this method (ComputeJacobianWithRespectToParamters)" );
+    itkExceptionMacro(<<  "Subclasses should ITK_OVERRIDE this method (ComputeJacobianWithRespectToParamters)" );
   }
 
   /** Set the transformation parameters and update internal transformation.
@@ -136,23 +136,23 @@ public:
    * by keeping a reference to the parameters.
    * \sa SetParameters
    */
-  virtual void SetParametersByValue(const ParametersType & p)
+  void SetParametersByValue(const ParametersType & p) ITK_OVERRIDE
   { this->SetParameters (p); }
 
   /** Get the Transformation Parameters. */
-  virtual const ParametersType & GetParameters(void) const
+  const ParametersType & GetParameters(void) const ITK_OVERRIDE
   {
     return m_Parameters;
   }
 
   /** Set the fixed parameters and update internal transformation. */
-  virtual void SetFixedParameters( const ParametersType & )
-    { itkExceptionMacro( << "Subclasses should override this method (SetFixedParameters)" ) }
+  void SetFixedParameters( const ParametersType & ) ITK_OVERRIDE
+    { itkExceptionMacro( << "Subclasses should ITK_OVERRIDE this method (SetFixedParameters)" ) }
 
   /** Get the Fixed Parameters. */
-  virtual const ParametersType& GetFixedParameters(void) const
+  const ParametersType& GetFixedParameters(void) const ITK_OVERRIDE
     {
-    itkExceptionMacro( << "Subclasses should override this method (GetFixedParameters)" );
+    itkExceptionMacro( << "Subclasses should ITK_OVERRIDE this method (GetFixedParameters)" );
     // Next line is needed to avoid errors due to:
     // "function must return a value".
     return this->m_FixedParameters;
@@ -187,14 +187,14 @@ public:
    * */
   virtual const JacobianType & GetJacobian(const InputPointType  &) const
     {
-    itkExceptionMacro( << "Subclass should override this method (GetJacobian)" );
+    itkExceptionMacro( << "Subclass should ITK_OVERRIDE this method (GetJacobian)" );
     // Next line is needed to avoid errors due to:
     // "function must return a value" .
     return this->m_Jacobian;
     }
 
   /** Return the number of parameters that completely define the Transfom  */
-  virtual NumberOfParametersType GetNumberOfParameters(void) const
+  NumberOfParametersType GetNumberOfParameters(void) const ITK_OVERRIDE
   { return this->m_Parameters.Size(); }
 
 protected:
@@ -205,9 +205,9 @@ protected:
     : Superclass::Transform(numberOfParameters)
   {}
 
-  virtual ~Transform() {}
+  ~Transform() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
 #if 0
diff --git a/Modules/Core/VectorDataBase/include/otbDataNode.h b/Modules/Core/VectorDataBase/include/otbDataNode.h
index ba6ba788f2a997bee02ae0d718763cc7a625d870..13b07f6fc1a538d236754ef0aa53708a0e95b1a9 100644
--- a/Modules/Core/VectorDataBase/include/otbDataNode.h
+++ b/Modules/Core/VectorDataBase/include/otbDataNode.h
@@ -287,9 +287,9 @@ protected:
   /** Constructor */
   DataNode();
   /** Destructor */
-  virtual ~DataNode() {}
+  ~DataNode() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   OGRGeometry* ConvertDataNodeToOGRGeometry(const DataNode* dataNode);
 
diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeFunctionBase.h b/Modules/Core/VectorDataBase/include/otbDataNodeFunctionBase.h
index afbb478f3fe9e72f18938479316972d7630dcdd6..9253bc5eb257b585ed061a852f1986f6f8de33f9 100644
--- a/Modules/Core/VectorDataBase/include/otbDataNodeFunctionBase.h
+++ b/Modules/Core/VectorDataBase/include/otbDataNodeFunctionBase.h
@@ -29,7 +29,7 @@ namespace otb
   * the abstract method Evaluate() maps a DataNode from the input space to a element
   * in the output space.
   *
-  * Subclasses must override Evaluate().
+  * Subclasses must ITK_OVERRIDE Evaluate().
   *
   * This class is template over the input DataNode type and
   * the output (range) type.
@@ -63,11 +63,11 @@ public:
   typedef TOutput    OutputType;
 
   /** Evaluate at the specified input position */
-  virtual OutputType Evaluate( const DataNodeType& node ) const = 0;
+  OutputType Evaluate( const DataNodeType& node ) const ITK_OVERRIDE = 0;
 
 protected:
   DataNodeFunctionBase(){};
-  ~DataNodeFunctionBase(){};
+  ~DataNodeFunctionBase() ITK_OVERRIDE{};
 
 private:
   DataNodeFunctionBase(const Self& ); //purposely not implemented
diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.h b/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.h
index 5234c09b40ecadcdd78e587965cafaafd3725ad5..21e8ed423a4e9d2c0e698e7d4a027f1291caf5dd 100644
--- a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.h
+++ b/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.h
@@ -104,7 +104,7 @@ public:
 
   /** Evaluate the function at specified DataNode position.
    * Subclasses must provide this method. */
-  virtual TOutput Evaluate( const DataNodeType& node ) const = 0;
+  TOutput Evaluate( const DataNodeType& node ) const ITK_OVERRIDE = 0;
 
   /** Check if an index is inside the image buffer.
    * we take into account the fact that each voxel has its
@@ -183,8 +183,8 @@ public:
 
 protected:
   DataNodeImageFunction();
-  ~DataNodeImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~DataNodeImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Const pointer to the input image. */
   InputImageConstPointer  m_Image;
diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.h b/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.h
index 2e10601596e806a930a9c506f0b5cd891f51a681..8c2619b7cc5699569c49086f5638980c843a26f1 100644
--- a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.h
+++ b/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.h
@@ -85,12 +85,12 @@ public:
 
   /** Evaluate the function at specified DataNode position.
    * Subclasses must provide this method. */
-  virtual TOutput Evaluate( const DataNodeType& node ) const = 0;
+  TOutput Evaluate( const DataNodeType& node ) const ITK_OVERRIDE = 0;
 
 protected:
   DataNodeVectorDataFunction();
-  ~DataNodeVectorDataFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~DataNodeVectorDataFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Const pointer to the input VectorData. */
   VectorDataConstPointerType  m_VectorData;
diff --git a/Modules/Core/VectorDataBase/include/otbPolyLineParametricPathWithValue.h b/Modules/Core/VectorDataBase/include/otbPolyLineParametricPathWithValue.h
index 0c0da9eef9d7b98b2ab45e3c2d54bbb6f5d2d0c2..ed10ebdd33c9d177fc8cfa3b526bc5b4d9f34d44 100644
--- a/Modules/Core/VectorDataBase/include/otbPolyLineParametricPathWithValue.h
+++ b/Modules/Core/VectorDataBase/include/otbPolyLineParametricPathWithValue.h
@@ -114,13 +114,13 @@ protected:
   /** Constructor */
   PolyLineParametricPathWithValue();
   /** Destructor */
-  virtual ~PolyLineParametricPathWithValue() {}
+  ~PolyLineParametricPathWithValue() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   virtual void ComputeLength() const;
   virtual void ComputeBoundingRegion() const;
-  virtual void Modified() const;
+  void Modified() const ITK_OVERRIDE;
 
 private:
   PolyLineParametricPathWithValue(const Self &); //purposely not implemented
diff --git a/Modules/Core/VectorDataBase/include/otbPolygon.h b/Modules/Core/VectorDataBase/include/otbPolygon.h
index 6f57b94fef836e455be083e1ec0141c3eddf988b..f5a627d70eacfbabccd5d17e9355c8da5a6d8974 100644
--- a/Modules/Core/VectorDataBase/include/otbPolygon.h
+++ b/Modules/Core/VectorDataBase/include/otbPolygon.h
@@ -133,9 +133,9 @@ public:
   * Return the polygon length (perimeter).
   * \return The length.
   */
-  virtual double GetLength() const;
+  double GetLength() const ITK_OVERRIDE;
 
-  void  AddVertex(const ContinuousIndexType& vertex);
+  void  AddVertex(const ContinuousIndexType& vertex) ITK_OVERRIDE;
 
 protected:
   /** Constructor */
@@ -147,13 +147,13 @@ protected:
     };
 
   /** Destructor */
-  virtual ~Polygon() {}
+  ~Polygon() ITK_OVERRIDE {}
 
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   virtual void ComputeArea() const;
-  virtual void Modified() const;
+  void Modified() const ITK_OVERRIDE;
 
 private:
   Polygon(const Self &); //purposely not implemented
diff --git a/Modules/Core/VectorDataBase/include/otbVectorData.h b/Modules/Core/VectorDataBase/include/otbVectorData.h
index 3be1c89cbcbd6b87b5c5f7753b76a40776bae7fa..eeeb3c3236c4c3682f2fa8e5e62713c72866ef10 100644
--- a/Modules/Core/VectorDataBase/include/otbVectorData.h
+++ b/Modules/Core/VectorDataBase/include/otbVectorData.h
@@ -126,15 +126,15 @@ public:
    * SmartPointers to the same VectorData since separate DataObjects are
    * still maintained. This method is similar to
    * VectorDataSource::GraftOutput(). */
-  virtual void Graft(const itk::DataObject *data);
+  void Graft(const itk::DataObject *data) ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   VectorData();
   /** Destructor */
-  virtual ~VectorData() {}
+  ~VectorData() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   VectorData(const Self&); //purposely not implemented
diff --git a/Modules/Core/VectorDataBase/include/otbVectorDataIOBase.h b/Modules/Core/VectorDataBase/include/otbVectorDataIOBase.h
index c6ed12cce984e2a9c907353d2f5e21fee2fdabbe..92403ab868169ed343f55e31a2167dd8f12b75b1 100644
--- a/Modules/Core/VectorDataBase/include/otbVectorDataIOBase.h
+++ b/Modules/Core/VectorDataBase/include/otbVectorDataIOBase.h
@@ -148,9 +148,9 @@ public:
 
 protected:
   VectorDataIOBase();
-  virtual ~VectorDataIOBase();
+  ~VectorDataIOBase() ITK_OVERRIDE;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Big or Little Endian, and the type of the file. (May be ignored.) */
   ByteOrder m_ByteOrder;
diff --git a/Modules/Core/VectorDataBase/include/otbVectorDataProperties.h b/Modules/Core/VectorDataBase/include/otbVectorDataProperties.h
index cdbddf728146d028927b2b4213f0b857e579468d..9f8ece4ee0e987b4226db255330b2cef0b9447db 100644
--- a/Modules/Core/VectorDataBase/include/otbVectorDataProperties.h
+++ b/Modules/Core/VectorDataBase/include/otbVectorDataProperties.h
@@ -83,9 +83,9 @@ protected:
   /** Constructor */
   VectorDataProperties() : m_VectorDataObject(NULL) {};
   /** Destructor */
-  virtual ~VectorDataProperties() {}
+  ~VectorDataProperties() ITK_OVERRIDE {}
   /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   void ProcessNode(InternalTreeNodeType * source);
   bool IsBoundingRegionNull();
diff --git a/Modules/Core/VectorDataBase/include/otbVectorDataSource.h b/Modules/Core/VectorDataBase/include/otbVectorDataSource.h
index 4db33e36f35e580155b42db3688ce0554cd46a28..6e54830a1ae9d98e1f4d6731c99a5a907a632f1b 100644
--- a/Modules/Core/VectorDataBase/include/otbVectorDataSource.h
+++ b/Modules/Core/VectorDataBase/include/otbVectorDataSource.h
@@ -80,9 +80,9 @@ public:
 
 protected:
   VectorDataSource();
-  virtual ~VectorDataSource();
+  ~VectorDataSource() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Ensure that the output vector data are cleared before processing */
   virtual void  AllocateOutputs();
diff --git a/Modules/Detection/CloudDetection/include/otbCloudDetectionFilter.h b/Modules/Detection/CloudDetection/include/otbCloudDetectionFilter.h
index 41530eb4a7375d8a6421dff071c4b813d1560701..add466d24e0f4c59f2a74ef2c773e5718e7cdb23 100644
--- a/Modules/Detection/CloudDetection/include/otbCloudDetectionFilter.h
+++ b/Modules/Detection/CloudDetection/include/otbCloudDetectionFilter.h
@@ -68,11 +68,11 @@ public:
 protected:
   CloudDetectionFilter();
 
-  virtual ~CloudDetectionFilter() {}
+  ~CloudDetectionFilter() ITK_OVERRIDE {}
 
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   CloudDetectionFilter(const Self &); //purposely not implemented
diff --git a/Modules/Detection/CloudDetection/include/otbCloudEstimatorFilter.h b/Modules/Detection/CloudDetection/include/otbCloudEstimatorFilter.h
index 89260e2b2d38f99ac08dd7f6237a8dd8f5f9bc64..15c9b4220adabab3507c21a83abcdadbc5f8dd0e 100644
--- a/Modules/Detection/CloudDetection/include/otbCloudEstimatorFilter.h
+++ b/Modules/Detection/CloudDetection/include/otbCloudEstimatorFilter.h
@@ -70,11 +70,11 @@ public:
 protected:
   CloudEstimatorFilter();
 
-  virtual ~CloudEstimatorFilter() {}
+  ~CloudEstimatorFilter() ITK_OVERRIDE {}
 
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   CloudEstimatorFilter(const Self &); //purposely not implemented
diff --git a/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.h b/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.h
index 3d3462bce6d579680a1ac0aefc2d037cc97a828c..0896d8cefb964e30505339e862a17edffa1e1b0f 100644
--- a/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.h
+++ b/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.h
@@ -148,31 +148,31 @@ public:
 
   /** Make a DataObject of the correct type to be used as the specified
    * output. */
-  itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx);
+  itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
-  void AllocateOutputs();
-  void GenerateOutputInformation();
-  void Reset(void);
-  void Synthetize(void);
+  void AllocateOutputs() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void Reset(void) ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
 
-  void AddInput(itk::DataObject * dataObject)
+  void AddInput(itk::DataObject * dataObject) ITK_OVERRIDE
   {
     Superclass::AddInput(dataObject);
   }
 
 protected:
   PersistentDescriptorsListSampleGenerator();
-  virtual ~PersistentDescriptorsListSampleGenerator();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PersistentDescriptorsListSampleGenerator() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Multi-thread version GenerateData. */
   void  ThreadedGenerateData(const RegionType& outputRegionForThread,
-                             itk::ThreadIdType threadId);
+                             itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PersistentDescriptorsListSampleGenerator(const Self &); //purposely not implemented
@@ -300,7 +300,7 @@ public:
       return this->GetFilter()->GetInput();
     }
 
-    void AddInput(itk::DataObject * dataObject)
+    void AddInput(itk::DataObject * dataObject) ITK_OVERRIDE
       {
         this->GetFilter()->AddInput(dataObject);
       }
@@ -360,7 +360,7 @@ public:
     DescriptorsListSampleGenerator();
 
     /** Destructor */
-    virtual ~DescriptorsListSampleGenerator();
+    ~DescriptorsListSampleGenerator() ITK_OVERRIDE;
 
   private:
     DescriptorsListSampleGenerator(const Self &); //purposely not implemented
diff --git a/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.h b/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.h
index 88dc5df298f153e9b97982343240254994f32bfa..825eaef70980c7f404ef84ed7e13713b554006b3 100644
--- a/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.h
+++ b/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.h
@@ -79,8 +79,8 @@ public:
 
 protected:
   FlusserMomentsIFFactory(){}
-  ~FlusserMomentsIFFactory(){}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~FlusserMomentsIFFactory() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   FlusserMomentsIFFactory(const Self& ); //purposely not implemented
diff --git a/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.h b/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.h
index 80e4af8bcdb291fba2cddf3e89d787d9ed7d0846..1d6a0c5811f05d37b738008a3032e82db16a341d 100644
--- a/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.h
+++ b/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.h
@@ -78,8 +78,8 @@ public:
 
 protected:
   FourierMellinDescriptorsIFFactory(){}
-  ~FourierMellinDescriptorsIFFactory(){}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~FourierMellinDescriptorsIFFactory() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   FourierMellinDescriptorsIFFactory(const Self& ); //purposely not implemented
diff --git a/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.h b/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.h
index a8c4a2fe2d4c4808a0494ae988d8030b0f859f59..265c96efea77bcdb38d708c16cc99b9cdd1a7dde 100644
--- a/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.h
+++ b/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.h
@@ -80,8 +80,8 @@ public:
 
 protected:
   HaralickTexturesIFFactory(){}
-  ~HaralickTexturesIFFactory(){}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~HaralickTexturesIFFactory() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   HaralickTexturesIFFactory(const Self& ); //purposely not implemented
diff --git a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.h b/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.h
index d074abeeecde80f8ab0365528002848d00563238..8e365e06f86c96d345e346f1e5551d256b2f0872 100644
--- a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.h
+++ b/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.h
@@ -113,11 +113,11 @@ public:
 
 protected:
   LabeledSampleLocalizationGenerator();
-  virtual ~LabeledSampleLocalizationGenerator() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LabeledSampleLocalizationGenerator() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Triggers the Computation of the sample list */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   PointVectorType RandomPointsGenerator(DataNodeType * node);
 
diff --git a/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.h b/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.h
index ab8c43ee5885068188bf28bd2754f979208e02f8..7add54b4c0851908965a699fddb94d10fd573904 100644
--- a/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.h
+++ b/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.h
@@ -79,8 +79,8 @@ public:
 
 protected:
   LocalHistogramIFFactory(){}
-  ~LocalHistogramIFFactory(){}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LocalHistogramIFFactory() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LocalHistogramIFFactory(const Self& ); //purposely not implemented
diff --git a/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.h b/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.h
index 9de74d093f397f3c960232771f5ce9f30580590e..a83da56620a539d33a3bd1016948729b10f7ac12 100644
--- a/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.h
+++ b/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.h
@@ -79,8 +79,8 @@ public:
 
 protected:
   RadiometricMomentsIFFactory(){}
-  ~RadiometricMomentsIFFactory(){}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~RadiometricMomentsIFFactory() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   RadiometricMomentsIFFactory(const Self& ); //purposely not implemented
diff --git a/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.h b/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.h
index 5252070600e78706111e2cc9cdb16cd0f8b18aa5..8813f16b4d57372c77254a941e74fa1157f361e7 100644
--- a/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.h
+++ b/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.h
@@ -167,8 +167,8 @@ public:
 
 protected:
   StandardMetaImageFunctionBuilder();
-  ~StandardMetaImageFunctionBuilder();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~StandardMetaImageFunctionBuilder() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   StandardMetaImageFunctionBuilder(const Self& ); //purposely not implemented
diff --git a/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.h
index 23eb36eaa3bea330b2f21036cc1c0f7e7e54e251..bd1d8307a831b9313ba72d02e3143551138819f4 100644
--- a/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.h
@@ -64,11 +64,11 @@ protected:
   /** Constructor */
   BreakAngularPathListFilter();
   /** Destructor */
-  virtual ~BreakAngularPathListFilter() {}
+  ~BreakAngularPathListFilter() ITK_OVERRIDE {}
   /** GenerateData method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   BreakAngularPathListFilter(const Self &); //purposely not implemented
diff --git a/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.h b/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.h
index 623ad4b2cf53bc23544e6cc7d71a50a86e18673a..81a689065cf69fae43baf10475683647a2097e19 100644
--- a/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.h
@@ -186,7 +186,7 @@ protected:
   /** Constructor */
   GenericRoadExtractionFilter();
   /** Destructor */
-  ~GenericRoadExtractionFilter() {}
+  ~GenericRoadExtractionFilter() ITK_OVERRIDE {}
 
   /** Prepare main computation method
    *  Note : this function isn't called
@@ -194,9 +194,9 @@ protected:
   void BeforeGenerateData(void);
 
   /** Main computation method */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.h b/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.h
index f144fdbaab6038d920865913ea6ad4ca0f17d069..e3ae867e7ab3ecaa7ec87c654b83a78445ef11a2 100644
--- a/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.h
@@ -118,10 +118,10 @@ public:
 
 protected:
   ImageToPathListAlignFilter();
-  virtual ~ImageToPathListAlignFilter();
+  ~ImageToPathListAlignFilter() ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation() {}  // do nothing
-  virtual void GenerateData();
+  void GenerateOutputInformation() ITK_OVERRIDE {}  // do nothing
+  void GenerateData() ITK_OVERRIDE;
   virtual std::vector<double> tab(int n, double p, double m);
   virtual void AngleCalculate(const InputImageType*  InputImageIn);
 
@@ -131,7 +131,7 @@ protected:
   ValueType m_PathValue;
   ValueType m_BackgroundValue;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageToPathListAlignFilter(const Self &); //purposely not implemented
diff --git a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.h
index 53e02888ec1c792b03589bef3be33a0864f09856..0f35411c5857744d2c87def54aa779508a597daa 100644
--- a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.h
@@ -82,11 +82,11 @@ protected:
   /** Constructor */
   LikelihoodPathListFilter();
   /** Destructor */
-  virtual ~LikelihoodPathListFilter() {}
+  ~LikelihoodPathListFilter() ITK_OVERRIDE {}
   /** GenerateData method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LikelihoodPathListFilter(const Self &); //purposely not implemented
diff --git a/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.h
index ac84cda4baffa0689eb87f02c4ea2f402dad9285..339598f17798b812cb1e904ea1ee821689e0df28 100644
--- a/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.h
@@ -81,11 +81,11 @@ protected:
   /** Constructor */
   LinkPathListFilter();
   /** Destructor */
-  virtual ~LinkPathListFilter() {}
+  ~LinkPathListFilter() ITK_OVERRIDE {}
   /** GenerateData method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /**
    * Verify the angular condition to link a path.
diff --git a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.h b/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.h
index 532bf5559d81d5faac50cdab208471bcc73a0019..6317bab5fc46bf841477a28ab11b4f848b126bac 100644
--- a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.h
@@ -67,15 +67,15 @@ public:
 
   /** Set/Get the image input of this process object.  */
   using Superclass::SetInput;
-  virtual void SetInput(const InputImageType *input);
+  void SetInput(const InputImageType *input) ITK_OVERRIDE;
   virtual void SetInputDirection(const InputImageDirectionType *direction);
   const InputImageType * GetInput(void);
   const InputImageDirectionType * GetInputDirection(void);
 
 protected:
   ModulusAndDirectionImageToImageFilter();
-  virtual ~ModulusAndDirectionImageToImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ModulusAndDirectionImageToImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ModulusAndDirectionImageToImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.h b/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.h
index d207d34c2f8e1d0d1000d1fa8a9b6fddfd08fef7..0e71a4e49485bbe7c8e2db7b26f6b98cd1fe8f69 100644
--- a/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.h
@@ -81,9 +81,9 @@ protected:
   /** Constructor */
   NeighborhoodScalarProductFilter();
   /** Destructor */
-  virtual ~NeighborhoodScalarProductFilter() {}
+  ~NeighborhoodScalarProductFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** NeighborhoodScalarProductImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
    * which is called for each processing thread. The output image data is
@@ -95,7 +95,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 private:
   NeighborhoodScalarProductFilter(const Self &); //purposely not implemented
   void operator =(const Self&); //purposely not implemented
diff --git a/Modules/Detection/RoadExtraction/include/otbNonMaxRemovalByDirectionFilter.h b/Modules/Detection/RoadExtraction/include/otbNonMaxRemovalByDirectionFilter.h
index 3f632bcd2a896d67be4c412d7f2695a9d035192a..23d1cacbc2c5df6f23ed32386baf6ccd1992e5d9 100644
--- a/Modules/Detection/RoadExtraction/include/otbNonMaxRemovalByDirectionFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbNonMaxRemovalByDirectionFilter.h
@@ -133,14 +133,14 @@ protected:
   /** Constructor */
   NonMaxRemovalByDirectionFilter() {};
   /** Destructor */
-  virtual ~NonMaxRemovalByDirectionFilter() {}
+  ~NonMaxRemovalByDirectionFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
   /** Main computation method */
-  virtual void GenerateData(void)
+  void GenerateData(void) ITK_OVERRIDE
   {
     typename ComputingFilterType::Pointer filter = ComputingFilterType::New();
     filter->SetInput1(this->GetInput());
diff --git a/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.h b/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.h
index 928f9f0e51ceca8da7ac7ab7ed91b74f82f17f9d..0408e43d10980847cf32b65e6b96e8657e0c491d 100644
--- a/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.h
@@ -87,11 +87,11 @@ protected:
   /** Constructor */
   ParallelLinePathListFilter();
   /** Destructor */
-  virtual ~ParallelLinePathListFilter() {}
+  ~ParallelLinePathListFilter() ITK_OVERRIDE {}
   /** GenerateData method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /**
   * Verify the angular condition to find parallel lines.
diff --git a/Modules/Detection/RoadExtraction/include/otbRemoveIsolatedByDirectionFilter.h b/Modules/Detection/RoadExtraction/include/otbRemoveIsolatedByDirectionFilter.h
index 60a84bf77b3080763a3038a28b0e59315d80498f..08fcd1109117ba07ad72cc13865ec8327b885bad 100644
--- a/Modules/Detection/RoadExtraction/include/otbRemoveIsolatedByDirectionFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbRemoveIsolatedByDirectionFilter.h
@@ -106,14 +106,14 @@ protected:
   /** Constructor */
   RemoveIsolatedByDirectionFilter() {};
   /** Destructor */
-  virtual ~RemoveIsolatedByDirectionFilter() {}
+  ~RemoveIsolatedByDirectionFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
   /** Main computation method */
-  virtual void GenerateData(void)
+  void GenerateData(void) ITK_OVERRIDE
   {
     typename ComputingFilterType::Pointer filter = ComputingFilterType::New();
     filter->SetInput1(this->GetInput());
diff --git a/Modules/Detection/RoadExtraction/include/otbRemoveWrongDirectionFilter.h b/Modules/Detection/RoadExtraction/include/otbRemoveWrongDirectionFilter.h
index 297410b3189289ff6efc233a43155c642be2f55d..71f2ebedc85acd40b011fc7a752a4550f2ac10ce 100644
--- a/Modules/Detection/RoadExtraction/include/otbRemoveWrongDirectionFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbRemoveWrongDirectionFilter.h
@@ -101,14 +101,14 @@ protected:
   /** Constructor */
   RemoveWrongDirectionFilter() {};
   /** Destructor */
-  virtual ~RemoveWrongDirectionFilter() {}
+  ~RemoveWrongDirectionFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
   /** Main computation method */
-  virtual void GenerateData(void)
+  void GenerateData(void) ITK_OVERRIDE
   {
     typename ComputingFilterType::Pointer filter = ComputingFilterType::New();
     filter->SetInput1(this->GetInput());
diff --git a/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.h b/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.h
index c934227476d1d15439da17630980d02989e0dc5a..7ebc2c6d67d893734720b80ebde1657c5bf76360 100644
--- a/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.h
@@ -138,15 +138,15 @@ protected:
   /** Constructor */
   RoadExtractionFilter();
   /** Destructor */
-  ~RoadExtractionFilter() {}
+  ~RoadExtractionFilter() ITK_OVERRIDE {}
 
   /** Prepare main computation method */
   void BeforeGenerateData(void);
 
   /** Main computation method */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.h b/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.h
index 7545483e5c749ac3bf05241d25fb521d0fbac01b..0118ffa98fe77da7608b0df9f54f81bd0a993a7e 100644
--- a/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.h
+++ b/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.h
@@ -113,11 +113,11 @@ protected:
   /** Constructor */
   VectorDataToRoadDescriptionFilter();
   /** Destructor */
-  virtual ~VectorDataToRoadDescriptionFilter() {}
+  ~VectorDataToRoadDescriptionFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Triggers the Computation of the Descriptors */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
 private:
   VectorDataToRoadDescriptionFilter(const Self &); //purposely not implemented
diff --git a/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.h b/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.h
index 867af0a779f7f943ef6204f6ced4bec701016305..ae1cadbfd4f4b7d7c6d2db59b386f4bd460d8a7a 100644
--- a/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.h
+++ b/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.h
@@ -229,11 +229,11 @@ public:
   itkSetMacro(SobelUpperThreshold, double);
 
   /** Methods */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 protected:
   UrbanAreaDetectionImageFilter();
-  virtual ~UrbanAreaDetectionImageFilter(){}
+  ~UrbanAreaDetectionImageFilter() ITK_OVERRIDE{}
 
 private:
   UrbanAreaDetectionImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Corner/include/otbHarrisImageFilter.h b/Modules/Feature/Corner/include/otbHarrisImageFilter.h
index c066f5d904ed47cc9baa20ee1e4676c414ecc49d..3c1bdb5d593f6618309c2c81d2a969717e6df525 100644
--- a/Modules/Feature/Corner/include/otbHarrisImageFilter.h
+++ b/Modules/Feature/Corner/include/otbHarrisImageFilter.h
@@ -101,11 +101,11 @@ public:
 
 protected:
   HarrisImageFilter();
-  virtual ~HarrisImageFilter() {}
+  ~HarrisImageFilter() ITK_OVERRIDE {}
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   HarrisImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Feature/Corner/include/otbHarrisImageToPointSetFilter.h b/Modules/Feature/Corner/include/otbHarrisImageToPointSetFilter.h
index 2c2d8d91b0973bf6af6b722b2207a697e2852134..0f087edbce46b0aabec5e9933a1b064b3207c4fb 100644
--- a/Modules/Feature/Corner/include/otbHarrisImageToPointSetFilter.h
+++ b/Modules/Feature/Corner/include/otbHarrisImageToPointSetFilter.h
@@ -75,11 +75,11 @@ public:
 
 protected:
   HarrisImageToPointSetFilter();
-  virtual ~HarrisImageToPointSetFilter() {}
+  ~HarrisImageToPointSetFilter() ITK_OVERRIDE {}
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   HarrisImageToPointSetFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Corner/include/otbLineSpatialObjectListToRightAnglePointSetFilter.h b/Modules/Feature/Corner/include/otbLineSpatialObjectListToRightAnglePointSetFilter.h
index c4da86c681a5e3e93b495ad542101a96d6749541..2df55b421bc11922e54fec87c3b1a4867409ef55 100644
--- a/Modules/Feature/Corner/include/otbLineSpatialObjectListToRightAnglePointSetFilter.h
+++ b/Modules/Feature/Corner/include/otbLineSpatialObjectListToRightAnglePointSetFilter.h
@@ -103,7 +103,7 @@ protected:
    *
    */
 
-  virtual void GenerateOutputInformation(){}
+  void GenerateOutputInformation() ITK_OVERRIDE{}
 
   /**
    * Constructor.
@@ -112,15 +112,15 @@ protected:
   /**
    * Destructor.
    */
-  virtual ~LineSpatialObjectListToRightAnglePointSetFilter(){}
+  ~LineSpatialObjectListToRightAnglePointSetFilter() ITK_OVERRIDE{}
   /**
    * Standard PrintSelf method.
    */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * Main computation method.
    */
-  virtual void  GenerateData();
+  void  GenerateData() ITK_OVERRIDE;
   /**
    * Angle computation
    */
diff --git a/Modules/Feature/Corner/include/otbVectorDataToRightAngleVectorDataFilter.h b/Modules/Feature/Corner/include/otbVectorDataToRightAngleVectorDataFilter.h
index db6c0dcca4865b92cda0c6d94a5d953e42b0ad39..d3c6714d8520517c744a57119e0fd0dd14847a08 100644
--- a/Modules/Feature/Corner/include/otbVectorDataToRightAngleVectorDataFilter.h
+++ b/Modules/Feature/Corner/include/otbVectorDataToRightAngleVectorDataFilter.h
@@ -84,11 +84,11 @@ protected:
   /** Constructor.*/
   VectorDataToRightAngleVectorDataFilter();
   /**Destructor.*/
-  virtual ~VectorDataToRightAngleVectorDataFilter(){}
+  ~VectorDataToRightAngleVectorDataFilter() ITK_OVERRIDE{}
   /** Standard PrintSelf method.*/
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**Main computation method.*/
-  virtual void  GenerateData();
+  void  GenerateData() ITK_OVERRIDE;
   /**Angle computation.*/
   virtual double ComputeAngleFormedBySegments(LineType * lineDst, LineType * lineSrc);
   /** When we find a right angle, one compute the coordinate of the segments intersection.*/
diff --git a/Modules/Feature/Density/include/otbKeyPointDensityImageFilter.h b/Modules/Feature/Density/include/otbKeyPointDensityImageFilter.h
index f8e3c53f44ec06a951674abb465efd3ede4390ad..e3665b4e48197ce68c77da5b40ffdfc5180d3e20 100644
--- a/Modules/Feature/Density/include/otbKeyPointDensityImageFilter.h
+++ b/Modules/Feature/Density/include/otbKeyPointDensityImageFilter.h
@@ -98,16 +98,16 @@ protected:
   /**
    * Destructor.
    */
-  virtual ~KeyPointDensityImageFilter();
+  ~KeyPointDensityImageFilter() ITK_OVERRIDE;
   /**
    * Standard PrintSelf method.
    */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * Main computation method.
    */
   //virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId );
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Feature/Density/include/otbPointSetDensityEpanechnikovFunction.h b/Modules/Feature/Density/include/otbPointSetDensityEpanechnikovFunction.h
index e124e78626fa003ecfb2b3d06866d591673779a9..a048b81dc042042eba8ee899fd205b24512a037c 100644
--- a/Modules/Feature/Density/include/otbPointSetDensityEpanechnikovFunction.h
+++ b/Modules/Feature/Density/include/otbPointSetDensityEpanechnikovFunction.h
@@ -62,13 +62,13 @@ public:
   itkGetMacro(Radius, unsigned int);
 
   /** Evaluate Method */
-  virtual OutputType Evaluate(const InputType& input) const;
+  OutputType Evaluate(const InputType& input) const ITK_OVERRIDE;
 
 protected:
   PointSetDensityEpanechnikovFunction() : m_Radius(1) {};
-  virtual ~PointSetDensityEpanechnikovFunction() {}
+  ~PointSetDensityEpanechnikovFunction() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   PointSetDensityEpanechnikovFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Density/include/otbPointSetDensityFunction.h b/Modules/Feature/Density/include/otbPointSetDensityFunction.h
index 971e0436f984e5f16dcd13745780150448ccbb5e..0ed828941f11d3ead61c89fa506b28d9ade3e520 100644
--- a/Modules/Feature/Density/include/otbPointSetDensityFunction.h
+++ b/Modules/Feature/Density/include/otbPointSetDensityFunction.h
@@ -61,13 +61,13 @@ public:
   itkGetMacro(Radius, unsigned int);
 
   /** Evaluate Method */
-  virtual OutputType Evaluate(const InputType& input) const;
+  OutputType Evaluate(const InputType& input) const ITK_OVERRIDE;
 
 protected:
   PointSetDensityFunction() : m_Radius(1) {};
-  virtual ~PointSetDensityFunction() {}
+  ~PointSetDensityFunction() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   PointSetDensityFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Density/include/otbPointSetDensityGaussianFunction.h b/Modules/Feature/Density/include/otbPointSetDensityGaussianFunction.h
index 1415469f759549559237f1cc8dbf2fdcd403576d..e6b84ffe1b85f40e51372c7be6b94321ef657d8f 100644
--- a/Modules/Feature/Density/include/otbPointSetDensityGaussianFunction.h
+++ b/Modules/Feature/Density/include/otbPointSetDensityGaussianFunction.h
@@ -62,13 +62,13 @@ public:
   itkGetMacro(Radius, unsigned int);
 
   /** Evaluate Method */
-  virtual OutputType Evaluate(const InputType& input) const;
+  OutputType Evaluate(const InputType& input) const ITK_OVERRIDE;
 
 protected:
   PointSetDensityGaussianFunction() : m_Radius(1) {};
-  virtual ~PointSetDensityGaussianFunction() {}
+  ~PointSetDensityGaussianFunction() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   PointSetDensityGaussianFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Density/include/otbPointSetToDensityImageFilter.h b/Modules/Feature/Density/include/otbPointSetToDensityImageFilter.h
index b8c5ff591a4d113eda0b054d5bfec1b188c428b7..a24ef98346aaa5b0a4cad290443fa202752c34a4 100644
--- a/Modules/Feature/Density/include/otbPointSetToDensityImageFilter.h
+++ b/Modules/Feature/Density/include/otbPointSetToDensityImageFilter.h
@@ -81,27 +81,27 @@ protected:
   /**
    * Destructor.
    */
-  virtual ~PointSetToDensityImageFilter() {}
+  ~PointSetToDensityImageFilter() ITK_OVERRIDE {}
   /**
    * Standard PrintSelf method.
    */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /**
    * Call the ImageSource::GenerateData which handle multithreading
    */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /**
    * Main computation method.
    */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
   * Main computation method.
   */
-  virtual void  GenerateOutputInformation();
+  void  GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Feature/Descriptors/include/otbForwardFourierMellinTransformImageFilter.h b/Modules/Feature/Descriptors/include/otbForwardFourierMellinTransformImageFilter.h
index 01ae83efe0d2145e35347985519a5f42a59e307e..f099bc0ca4bae2db248031bcfb220bbf51059cac 100644
--- a/Modules/Feature/Descriptors/include/otbForwardFourierMellinTransformImageFilter.h
+++ b/Modules/Feature/Descriptors/include/otbForwardFourierMellinTransformImageFilter.h
@@ -126,15 +126,15 @@ public:
 
 protected:
   ForwardFourierMellinTransformImageFilter();
-  virtual ~ForwardFourierMellinTransformImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ForwardFourierMellinTransformImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** Main Computation Method */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   ForwardFourierMellinTransformImageFilter(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Descriptors/include/otbFourierMellinDescriptorsImageFunction.h b/Modules/Feature/Descriptors/include/otbFourierMellinDescriptorsImageFunction.h
index 88ee4305610211f1af20db20695a5c176aa792ba..e87dd53e1cd3b2ab6166b200620a8c1b49bb9c84 100644
--- a/Modules/Feature/Descriptors/include/otbFourierMellinDescriptorsImageFunction.h
+++ b/Modules/Feature/Descriptors/include/otbFourierMellinDescriptorsImageFunction.h
@@ -98,17 +98,17 @@ public:
                       InputImageType::ImageDimension);
 
   /** Evalulate the function at specified index */
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -128,8 +128,8 @@ public:
 
 protected:
   FourierMellinDescriptorsImageFunction();
-  virtual ~FourierMellinDescriptorsImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~FourierMellinDescriptorsImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   FourierMellinDescriptorsImageFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Descriptors/include/otbHessianToScalarImageFilter.h b/Modules/Feature/Descriptors/include/otbHessianToScalarImageFilter.h
index 06de52a3f39a9df37769bb6029b3ea09fdf7b2dc..c6b29d9e7d6c609a37d5b8dbfd7da846145acba9 100644
--- a/Modules/Feature/Descriptors/include/otbHessianToScalarImageFilter.h
+++ b/Modules/Feature/Descriptors/include/otbHessianToScalarImageFilter.h
@@ -104,7 +104,7 @@ public:
   }
 protected:
   HessianToScalarImageFilter() {}
-  virtual ~HessianToScalarImageFilter() {}
+  ~HessianToScalarImageFilter() ITK_OVERRIDE {}
 
 private:
   HessianToScalarImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Descriptors/include/otbHistogramOfOrientedGradientCovariantImageFunction.h b/Modules/Feature/Descriptors/include/otbHistogramOfOrientedGradientCovariantImageFunction.h
index 1dba5813fb688b88beeba0cabc96594ae33787c8..945efd0de07ecc5970bd71c43ce8e5a2c33cd702 100644
--- a/Modules/Feature/Descriptors/include/otbHistogramOfOrientedGradientCovariantImageFunction.h
+++ b/Modules/Feature/Descriptors/include/otbHistogramOfOrientedGradientCovariantImageFunction.h
@@ -100,17 +100,17 @@ public:
                       InputImageType::ImageDimension);
 
   /** Evalulate the function at specified index */
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -131,8 +131,8 @@ public:
 
 protected:
   HistogramOfOrientedGradientCovariantImageFunction();
-  virtual ~HistogramOfOrientedGradientCovariantImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~HistogramOfOrientedGradientCovariantImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   HistogramOfOrientedGradientCovariantImageFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Descriptors/include/otbImageToHessianDeterminantImageFilter.h b/Modules/Feature/Descriptors/include/otbImageToHessianDeterminantImageFilter.h
index 59c6748426ae11e5d2e2cba8d6287d9fccb848d8..0729c4070c98151bac4b5f1d512568521f0ec853 100644
--- a/Modules/Feature/Descriptors/include/otbImageToHessianDeterminantImageFilter.h
+++ b/Modules/Feature/Descriptors/include/otbImageToHessianDeterminantImageFilter.h
@@ -132,15 +132,15 @@ protected:
   /**
    * Destructor.
    */
-  virtual ~ImageToHessianDeterminantImageFilter();
+  ~ImageToHessianDeterminantImageFilter() ITK_OVERRIDE;
   /**
    * Standard PrintSelf method.
    */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * Main computation method.
    */
-  virtual void  GenerateData();
+  void  GenerateData() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Feature/Descriptors/include/otbImageToSIFTKeyPointSetFilter.h b/Modules/Feature/Descriptors/include/otbImageToSIFTKeyPointSetFilter.h
index 211c7f9fd274385cfc075ad7f0140f887cd7226d..02b84733a8d43fd440d6bc3f81bf59ffaeac1627 100644
--- a/Modules/Feature/Descriptors/include/otbImageToSIFTKeyPointSetFilter.h
+++ b/Modules/Feature/Descriptors/include/otbImageToSIFTKeyPointSetFilter.h
@@ -224,16 +224,16 @@ public:
 
 protected:
   /** Actually process the input */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Constructor */
   ImageToSIFTKeyPointSetFilter();
 
   /** Destructor */
-  virtual ~ImageToSIFTKeyPointSetFilter() {}
+  ~ImageToSIFTKeyPointSetFilter() ITK_OVERRIDE {}
 
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Initialize input image */
   void InitializeInputImage();
diff --git a/Modules/Feature/Descriptors/include/otbImageToSURFKeyPointSetFilter.h b/Modules/Feature/Descriptors/include/otbImageToSURFKeyPointSetFilter.h
index 9531c7abac1aa2ec9dc48669c40ff1b87f8fcd38..767ac992821feae92b5d7163b590fca5a0bf086e 100644
--- a/Modules/Feature/Descriptors/include/otbImageToSURFKeyPointSetFilter.h
+++ b/Modules/Feature/Descriptors/include/otbImageToSURFKeyPointSetFilter.h
@@ -133,15 +133,15 @@ protected:
   /**
    * Destructor.
    */
-  virtual ~ImageToSURFKeyPointSetFilter();
+  ~ImageToSURFKeyPointSetFilter() ITK_OVERRIDE;
   /**
    * Standard PrintSelf method.
    */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * Main computation method.
    */
-  virtual void  GenerateData();
+  void  GenerateData() ITK_OVERRIDE;
 
   /** Check local extremum for 8 neighbors (current)
    *
diff --git a/Modules/Feature/Descriptors/include/otbKeyPointSetsMatchingFilter.h b/Modules/Feature/Descriptors/include/otbKeyPointSetsMatchingFilter.h
index 39f5f54bcd1e7e15b0cde95ffd9c7db7c8c8eedb..55cc097c8dbfaff70ec41836dce037986f5bf04c 100644
--- a/Modules/Feature/Descriptors/include/otbKeyPointSetsMatchingFilter.h
+++ b/Modules/Feature/Descriptors/include/otbKeyPointSetsMatchingFilter.h
@@ -99,12 +99,12 @@ protected:
   /// Constructor
   KeyPointSetsMatchingFilter();
   /// Destructor
-  virtual ~KeyPointSetsMatchingFilter() {}
+  ~KeyPointSetsMatchingFilter() ITK_OVERRIDE {}
   /// PrintSelf method
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /// Generate Data
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /**
    * Find the nearest neighbor of data1 in pointset.
diff --git a/Modules/Feature/Descriptors/include/otbLandmark.h b/Modules/Feature/Descriptors/include/otbLandmark.h
index 75552969d9149cfb4c0dc724b1199a11f3cefc52..b03f14cf669313cb4dab73919606947227aa1cac 100644
--- a/Modules/Feature/Descriptors/include/otbLandmark.h
+++ b/Modules/Feature/Descriptors/include/otbLandmark.h
@@ -69,9 +69,9 @@ protected:
   /// Constructor
   Landmark() {}
   /// Destructor
-  virtual ~Landmark() {}
+  ~Landmark() ITK_OVERRIDE {}
   /// PrintSelf method
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << indent << "Landmark: P1= " << m_Point1 << " P2= " << m_Point2 << std::endl;
diff --git a/Modules/Feature/Edge/include/otbAssociativeSymmetricalSumImageFilter.h b/Modules/Feature/Edge/include/otbAssociativeSymmetricalSumImageFilter.h
index ab9f09cba63cd4a2908f3c7ef8c5f8808703ab3a..eb60a3446113c20e14622b36acebe2b38920d12c 100644
--- a/Modules/Feature/Edge/include/otbAssociativeSymmetricalSumImageFilter.h
+++ b/Modules/Feature/Edge/include/otbAssociativeSymmetricalSumImageFilter.h
@@ -91,7 +91,7 @@ public:
 
 protected:
   AssociativeSymmetricalSumImageFilter() {}
-  virtual ~AssociativeSymmetricalSumImageFilter() {}
+  ~AssociativeSymmetricalSumImageFilter() ITK_OVERRIDE {}
 
 private:
   AssociativeSymmetricalSumImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbAssymmetricFusionOfLineDetectorImageFilter.h b/Modules/Feature/Edge/include/otbAssymmetricFusionOfLineDetectorImageFilter.h
index c6c4c16265b705c63dd40aaacc3a9d0f5a1c3db4..cab5398b5bf72f40ede1ebaea185262314069721 100644
--- a/Modules/Feature/Edge/include/otbAssymmetricFusionOfLineDetectorImageFilter.h
+++ b/Modules/Feature/Edge/include/otbAssymmetricFusionOfLineDetectorImageFilter.h
@@ -78,7 +78,7 @@ public:
 
 protected:
   AssymmetricFusionOfLineDetectorImageFilter();
-  virtual ~AssymmetricFusionOfLineDetectorImageFilter() {}
+  ~AssymmetricFusionOfLineDetectorImageFilter() ITK_OVERRIDE {}
 
   typedef otb::LineRatioDetectorImageFilter<InputImageType, OutputImageType, OutputImageDirectionType,
       InterpolatorType>        LineRatioType;
@@ -87,9 +87,9 @@ protected:
   typedef otb::AssociativeSymmetricalSumImageFilter<InputImageType1, InputImageType2,
       OutputImageType> AssSymSumType;
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   AssymmetricFusionOfLineDetectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbEdgeDensityImageFilter.h b/Modules/Feature/Edge/include/otbEdgeDensityImageFilter.h
index 7aebf96e79bc964ccf765c601a8401e470787727..17daef5c955f4317b0a89d14d407ed35ab7191e7 100644
--- a/Modules/Feature/Edge/include/otbEdgeDensityImageFilter.h
+++ b/Modules/Feature/Edge/include/otbEdgeDensityImageFilter.h
@@ -103,15 +103,15 @@ protected:
   /**
    * Destructor.
    */
-  virtual ~EdgeDensityImageFilter();
+  ~EdgeDensityImageFilter() ITK_OVERRIDE;
   /**
    * Standard PrintSelf method.
    */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * Main computation method.
    */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Feature/Edge/include/otbEdgeDetectorImageFilter.h b/Modules/Feature/Edge/include/otbEdgeDetectorImageFilter.h
index a4955334bcd65db8b1b250e1012a26f858cbe877..b869c4d9903dc7c91270b88c5ad69139ffa783a2 100644
--- a/Modules/Feature/Edge/include/otbEdgeDetectorImageFilter.h
+++ b/Modules/Feature/Edge/include/otbEdgeDetectorImageFilter.h
@@ -109,9 +109,9 @@ public:
 protected:
 
   EdgeDetectorImageFilter();
-  virtual ~EdgeDetectorImageFilter();
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  virtual void GenerateData();
+  ~EdgeDetectorImageFilter() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  void GenerateData() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Feature/Edge/include/otbExtractSegmentsImageFilter.h b/Modules/Feature/Edge/include/otbExtractSegmentsImageFilter.h
index 04d6c3d0c3b9e39f5a61150f01caf5fced574f19..55884565d013ff1d84a455d34510a8954922111f 100644
--- a/Modules/Feature/Edge/include/otbExtractSegmentsImageFilter.h
+++ b/Modules/Feature/Edge/include/otbExtractSegmentsImageFilter.h
@@ -126,16 +126,16 @@ public:
 
 protected:
   ExtractSegmentsImageFilter();
-  virtual ~ExtractSegmentsImageFilter() {}
+  ~ExtractSegmentsImageFilter() ITK_OVERRIDE {}
 
   typedef PixelSuppressionByDirectionImageFilter<InputImageType, PSOutputImageType> PixelSuppressionType;
   typedef LocalHoughFilter<InputImageType>                                          LocalHoughType;
   typedef FillGapsFilter                                                            FillGapsType;
   typedef DrawLineSpatialObjectListFilter<InputImageType, OutputImageType>          DrawLineListType;
   typedef  itk::RescaleIntensityImageFilter<TInputImage, TInputImage>               RescaleType;
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ExtractSegmentsImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbFillGapsFilter.h b/Modules/Feature/Edge/include/otbFillGapsFilter.h
index 229bd5abda23e6d07468dacb4f99ad4661fb1406..0c96d2b21eb7e0b5b9d8856720efddba808f045a 100644
--- a/Modules/Feature/Edge/include/otbFillGapsFilter.h
+++ b/Modules/Feature/Edge/include/otbFillGapsFilter.h
@@ -68,11 +68,11 @@ public:
 protected:
   FillGapsFilter();
 
-  virtual ~FillGapsFilter() {}
+  ~FillGapsFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   FillGapsFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbHorizontalSobelVectorImageFilter.h b/Modules/Feature/Edge/include/otbHorizontalSobelVectorImageFilter.h
index 2458433b08e3014ac3de133702cce4b0e18a3019..3f5d32f21cb1dfb1c260f98a0ba7fad78f740b04 100644
--- a/Modules/Feature/Edge/include/otbHorizontalSobelVectorImageFilter.h
+++ b/Modules/Feature/Edge/include/otbHorizontalSobelVectorImageFilter.h
@@ -88,7 +88,7 @@ protected:
     typename Superclass::RadiusType radius = {{1, 1}};
     this->SetRadius( radius );
   }
-  virtual ~HorizontalSobelVectorImageFilter() { }
+  ~HorizontalSobelVectorImageFilter() ITK_OVERRIDE { }
 
 private:
   HorizontalSobelVectorImageFilter( const Self & ); // Not implemented
diff --git a/Modules/Feature/Edge/include/otbHoughTransform2DLinesImageFilter.h b/Modules/Feature/Edge/include/otbHoughTransform2DLinesImageFilter.h
index 74e3a2e13bbfdd30a149d49882e126880afe8733..3cb3f072acc9e893d8539883fea72ecf14d8af51 100644
--- a/Modules/Feature/Edge/include/otbHoughTransform2DLinesImageFilter.h
+++ b/Modules/Feature/Edge/include/otbHoughTransform2DLinesImageFilter.h
@@ -105,7 +105,7 @@ public:
   itkNewMacro(Self);
 
   /** Method for evaluating the implicit function over the image. */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Accessors for the threshold above which the filter should consider
       the point as a valid point */
@@ -181,17 +181,17 @@ public:
 protected:
 
   HoughTransform2DLinesImageFilter();
-  virtual ~HoughTransform2DLinesImageFilter() {}
+  ~HoughTransform2DLinesImageFilter() ITK_OVERRIDE {}
 
   HoughTransform2DLinesImageFilter(const Self &) {}
   void operator =(const Self&) {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** HoughTransform2DLinesImageFilter needs the entire input. Therefore
    * it must provide an implementation GenerateInputRequestedRegion().
    * \sa ProcessObject::GenerateInputRequestedRegion(). */
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** HoughTransform2DLinesImageFilter's output is the accumulator
    * array.  The size of the output is a function of the size of the
@@ -199,10 +199,10 @@ protected:
    * has a different size than the input, it must provide an implementation
    * of GenerateOutputInformation.
    * \sa ProcessObject::GenerateOutputRequestedRegion() */
-  void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** HoughTransform2DLinesImageFilter must produce the entire output */
-  void EnlargeOutputRequestedRegion(itk::DataObject *output);
+  void EnlargeOutputRequestedRegion(itk::DataObject *output) ITK_OVERRIDE;
 
   int GetAngleIndex(double);
 
diff --git a/Modules/Feature/Edge/include/otbLineCorrelationDetectorImageFilter.h b/Modules/Feature/Edge/include/otbLineCorrelationDetectorImageFilter.h
index 3b4c2939831ebe9ec3dbd28a2a00f1d327c2bf87..9a7768e9c12e6cb7441c6a0e6a4f02c3551349db 100644
--- a/Modules/Feature/Edge/include/otbLineCorrelationDetectorImageFilter.h
+++ b/Modules/Feature/Edge/include/otbLineCorrelationDetectorImageFilter.h
@@ -82,11 +82,11 @@ public:
 
 protected:
   LineCorrelationDetectorImageFilter();
-  virtual ~LineCorrelationDetectorImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LineCorrelationDetectorImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Compute the measure */
-  virtual double ComputeMeasure(std::vector<double>* m1, std::vector<double>* m2, std::vector<double>* m3);
+  double ComputeMeasure(std::vector<double>* m1, std::vector<double>* m2, std::vector<double>* m3) ITK_OVERRIDE;
 
 private:
   LineCorrelationDetectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbLineDetectorImageFilterBase.h b/Modules/Feature/Edge/include/otbLineDetectorImageFilterBase.h
index e16bccbee2194deac29fbb450e223e62f3c6ebc9..3f8683a24517df3c85d11c85e42ab5da9390c888 100644
--- a/Modules/Feature/Edge/include/otbLineDetectorImageFilterBase.h
+++ b/Modules/Feature/Edge/include/otbLineDetectorImageFilterBase.h
@@ -128,15 +128,15 @@ public:
   /** Get the numbero of drections for line detection. */
   itkGetConstReferenceMacro(NumberOfDirections, unsigned int);
 
-  virtual void GenerateInputRequestedRegion()
-    throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
 protected:
   LineDetectorImageFilterBase();
-  virtual ~LineDetectorImageFilterBase() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LineDetectorImageFilterBase() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** LineDetectorImageFilterBase can be implemented for a treatment of filter multithreaded.
    * Thus, the ThreadedGenerateData() method is called for each thread process.
@@ -148,7 +148,7 @@ protected:
    * \sa    ImageToImageFilter::GenerateData()
   */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   virtual double ComputeMeasure(std::vector<double>* m1, std::vector<double>* m2, std::vector<double>* m3);
 
diff --git a/Modules/Feature/Edge/include/otbLineRatioDetectorImageFilter.h b/Modules/Feature/Edge/include/otbLineRatioDetectorImageFilter.h
index ee9553d2b0b19c312c72a01a9676f3dfc2b7ac59..1cd81fbea16da6c1ae5651580f30069479980d49 100644
--- a/Modules/Feature/Edge/include/otbLineRatioDetectorImageFilter.h
+++ b/Modules/Feature/Edge/include/otbLineRatioDetectorImageFilter.h
@@ -111,10 +111,10 @@ public:
 
 protected:
   LineRatioDetectorImageFilter();
-  virtual ~LineRatioDetectorImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LineRatioDetectorImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual double ComputeMeasure(std::vector<double>* m1, std::vector<double>* m2, std::vector<double>* m3);
+  double ComputeMeasure(std::vector<double>* m1, std::vector<double>* m2, std::vector<double>* m3) ITK_OVERRIDE;
 
 private:
   LineRatioDetectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbLineSegmentDetector.h b/Modules/Feature/Edge/include/otbLineSegmentDetector.h
index 3e4b2822b329cea6cff6a08d481130649f227142..9b75da95b0b7939422d7ed0d5d51390ef2edbf2c 100644
--- a/Modules/Feature/Edge/include/otbLineSegmentDetector.h
+++ b/Modules/Feature/Edge/include/otbLineSegmentDetector.h
@@ -189,12 +189,12 @@ public:
 
 protected:
   LineSegmentDetector();
-  virtual ~LineSegmentDetector() {}
+  ~LineSegmentDetector() ITK_OVERRIDE {}
 
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Generate Data method*/
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Sort the image and store the coordinates in a histogram
    *  this method is used to determine the seeds where to begin the search segments
@@ -254,7 +254,7 @@ protected:
   virtual void CopyRectangle(RectangleType& rDst, RectangleType& rSrc) const;
 
   /** Printself method*/
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LineSegmentDetector(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbLocalHoughFilter.h b/Modules/Feature/Edge/include/otbLocalHoughFilter.h
index f2fd23860940bec432031ce6029fa39c83eff3fb..23d574877da186dc8847c3699821e9d65bf61351 100644
--- a/Modules/Feature/Edge/include/otbLocalHoughFilter.h
+++ b/Modules/Feature/Edge/include/otbLocalHoughFilter.h
@@ -127,13 +127,13 @@ public:
 
 protected:
   LocalHoughFilter();
-  virtual ~LocalHoughFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LocalHoughFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Definition of the Hough Filter. */
   typedef itk::HoughTransform2DLinesImageFilter<InputPixelType, AccumulatorPixelType> HoughFilterType;
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   LocalHoughFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbPersistentVectorizationImageFilter.h b/Modules/Feature/Edge/include/otbPersistentVectorizationImageFilter.h
index 08d394fa2868f30fcd99d8ef3c89cc80f1cd0f0e..3a39c37f5a36d33489f3f7d85d7a498083686d90 100644
--- a/Modules/Feature/Edge/include/otbPersistentVectorizationImageFilter.h
+++ b/Modules/Feature/Edge/include/otbPersistentVectorizationImageFilter.h
@@ -81,16 +81,16 @@ public:
   typedef otb::ImageToEdgePathFilter<ImageType, PathType> ImageToEdgePathFilterType;
   typedef typename ImageToEdgePathFilterType::Pointer     ImageToEdgePathFilterPointerType;
 
-  virtual void Reset(void);
-  virtual void Synthetize(void);
+  void Reset(void) ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
 
   itkGetObjectMacro(PathList, PathListType);
 
 protected:
   PersistentVectorizationImageFilter();
-  virtual ~PersistentVectorizationImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  virtual void GenerateData();
+  ~PersistentVectorizationImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   PersistentVectorizationImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbPixelSuppressionByDirectionImageFilter.h b/Modules/Feature/Edge/include/otbPixelSuppressionByDirectionImageFilter.h
index f24598f7cf8ff0468f707adf088403527cacc04e..ba905db84c13d54972bb2fdcd0618594865179d3 100644
--- a/Modules/Feature/Edge/include/otbPixelSuppressionByDirectionImageFilter.h
+++ b/Modules/Feature/Edge/include/otbPixelSuppressionByDirectionImageFilter.h
@@ -99,16 +99,16 @@ public:
   void SetInputImageDirection(const InputImageType *image);
   const InputImageType * GetInputImageDirection(void);
 
-  virtual void GenerateInputRequestedRegion()
-    throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
 protected:
   PixelSuppressionByDirectionImageFilter();
-  virtual ~PixelSuppressionByDirectionImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PixelSuppressionByDirectionImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PixelSuppressionByDirectionImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbSobelVectorImageFilter.h b/Modules/Feature/Edge/include/otbSobelVectorImageFilter.h
index b1e985b97f7382c01200afb9def53269e0022844..ae8cdff5bbd34de5646f50070c7ca10cb2869b87 100644
--- a/Modules/Feature/Edge/include/otbSobelVectorImageFilter.h
+++ b/Modules/Feature/Edge/include/otbSobelVectorImageFilter.h
@@ -97,7 +97,7 @@ protected:
     typename Superclass::RadiusType radius = {{1, 1}};
     this->SetRadius( radius );
   }
-  virtual ~SobelVectorImageFilter() { }
+  ~SobelVectorImageFilter() ITK_OVERRIDE { }
 
 private:
   SobelVectorImageFilter( const Self & ); // Not implemented
diff --git a/Modules/Feature/Edge/include/otbStreamingLineSegmentDetector.h b/Modules/Feature/Edge/include/otbStreamingLineSegmentDetector.h
index 9ac7b3afd15a8ac48c93b95db713beeed6013218..314caf2c541e0cab6e99002f79ae5777c8ac4030 100644
--- a/Modules/Feature/Edge/include/otbStreamingLineSegmentDetector.h
+++ b/Modules/Feature/Edge/include/otbStreamingLineSegmentDetector.h
@@ -76,15 +76,15 @@ public:
 protected:
   PersistentStreamingLineSegmentDetector();
 
-  virtual ~PersistentStreamingLineSegmentDetector();
+  ~PersistentStreamingLineSegmentDetector() ITK_OVERRIDE;
 
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
 private:
   PersistentStreamingLineSegmentDetector(const Self &); //purposely not implemented
   void operator =(const Self&); //purposely not implemented
 
-  virtual OutputVectorDataPointerType ProcessTile();
+  OutputVectorDataPointerType ProcessTile() ITK_OVERRIDE;
 };
 
 template <class TImageType>
diff --git a/Modules/Feature/Edge/include/otbTouziEdgeDetectorImageFilter.h b/Modules/Feature/Edge/include/otbTouziEdgeDetectorImageFilter.h
index a4f06b19e9c6f4f9b2dec1313df7501ef8f280dd..b71c195b0e79b8be85c0b31400d74fac8584926c 100644
--- a/Modules/Feature/Edge/include/otbTouziEdgeDetectorImageFilter.h
+++ b/Modules/Feature/Edge/include/otbTouziEdgeDetectorImageFilter.h
@@ -97,15 +97,15 @@ public:
    * a treatment input area larger than the output one.
    *
    * \sa ImageToImageFilter::GenerateInputRequestedRegion() */
-  virtual void GenerateInputRequestedRegion()
-    throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
 protected:
   TouziEdgeDetectorImageFilter();
-  virtual ~TouziEdgeDetectorImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~TouziEdgeDetectorImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** TouziEdgeDetectorImageFilter can be implemented for a multithreaded filter treatment.
    * Thus, this implementation give the ThreadedGenerateData() method.
@@ -116,7 +116,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData() */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   TouziEdgeDetectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Edge/include/otbVerticalSobelVectorImageFilter.h b/Modules/Feature/Edge/include/otbVerticalSobelVectorImageFilter.h
index 2983377272b7796be25ce0bd369b5c9f3553e93c..4658981d5e51430c04acf3d7d38a0df001c63e94 100644
--- a/Modules/Feature/Edge/include/otbVerticalSobelVectorImageFilter.h
+++ b/Modules/Feature/Edge/include/otbVerticalSobelVectorImageFilter.h
@@ -88,7 +88,7 @@ protected:
     typename Superclass::RadiusType radius = {{1, 1}};
     this->SetRadius( radius );
   }
-  virtual ~VerticalSobelVectorImageFilter() { }
+  ~VerticalSobelVectorImageFilter() ITK_OVERRIDE { }
 
 private:
   VerticalSobelVectorImageFilter( const Self & ); // Not implemented
diff --git a/Modules/Feature/Moments/include/otbComplexMomentPathFunction.h b/Modules/Feature/Moments/include/otbComplexMomentPathFunction.h
index 18ad7e351a85d42cdfd69f0ba98c5f21c6e57094..a2617918c8be2cd716e5c73856e6317bb2a76446 100644
--- a/Modules/Feature/Moments/include/otbComplexMomentPathFunction.h
+++ b/Modules/Feature/Moments/include/otbComplexMomentPathFunction.h
@@ -89,7 +89,7 @@ public:
   typedef std::complex<PrecisionType> ComplexPrecisionType;
 
   /** Evalulate the function */
-  virtual OutputType Evaluate(const PathType& path) const;
+  OutputType Evaluate(const PathType& path) const ITK_OVERRIDE;
   virtual OutputType Evaluate() const;
 
   itkSetMacro(P, unsigned int);
@@ -99,8 +99,8 @@ public:
 
 protected:
   ComplexMomentPathFunction();
-  virtual ~ComplexMomentPathFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ComplexMomentPathFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ComplexMomentPathFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Moments/include/otbComplexMomentsImageFunction.h b/Modules/Feature/Moments/include/otbComplexMomentsImageFunction.h
index 46b36263650bc19663976e3a4244b88b6141e57d..e64cf226aa8d63caabd6551d17b2f0a5e8878d9f 100644
--- a/Modules/Feature/Moments/include/otbComplexMomentsImageFunction.h
+++ b/Modules/Feature/Moments/include/otbComplexMomentsImageFunction.h
@@ -89,17 +89,17 @@ public:
                       InputImageType::ImageDimension);
 
   /** Evalulate the function at specified index */
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -119,8 +119,8 @@ public:
 
 protected:
   ComplexMomentsImageFunction();
-  virtual ~ComplexMomentsImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ComplexMomentsImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ComplexMomentsImageFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Moments/include/otbFlusserMomentsImageFunction.h b/Modules/Feature/Moments/include/otbFlusserMomentsImageFunction.h
index 1ed4926e351915a9cfb5bada1b2df90836ea862b..7eca9a58e2a75dbd50ad7b2403a568623c3106a4 100644
--- a/Modules/Feature/Moments/include/otbFlusserMomentsImageFunction.h
+++ b/Modules/Feature/Moments/include/otbFlusserMomentsImageFunction.h
@@ -105,17 +105,17 @@ public:
                       InputImageType::ImageDimension);
 
   /** Evalulate the function at specified index */
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -130,8 +130,8 @@ public:
 
 protected:
   FlusserMomentsImageFunction();
-  virtual ~FlusserMomentsImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~FlusserMomentsImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   FlusserMomentsImageFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Moments/include/otbFlusserPathFunction.h b/Modules/Feature/Moments/include/otbFlusserPathFunction.h
index 0d63785e6a7b602aa04cb5a21739b6251e0b4b08..0e62c0345a6fee2961aee6355e1e5c931d7b6f73 100644
--- a/Modules/Feature/Moments/include/otbFlusserPathFunction.h
+++ b/Modules/Feature/Moments/include/otbFlusserPathFunction.h
@@ -90,7 +90,7 @@ public:
   typedef typename Superclass::PrecisionType PrecisionType;
 
   /** Evaluate the function at non-integer positions */
-  virtual RealType Evaluate(const PathType& path) const;
+  RealType Evaluate(const PathType& path) const ITK_OVERRIDE;
   virtual RealType Evaluate() const;
   /** Get/Set the radius of the neighborhood over which the
       statistics are evaluated */
@@ -99,8 +99,8 @@ public:
 
 protected:
   FlusserPathFunction();
-  virtual ~FlusserPathFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~FlusserPathFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   FlusserPathFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Moments/include/otbGeometricMomentPathFunction.h b/Modules/Feature/Moments/include/otbGeometricMomentPathFunction.h
index 504b28c77a7f88d186457b639e3269f5c24703a4..780caa9b9680fdf20abeb7b61ba25671f2b6f540 100644
--- a/Modules/Feature/Moments/include/otbGeometricMomentPathFunction.h
+++ b/Modules/Feature/Moments/include/otbGeometricMomentPathFunction.h
@@ -60,8 +60,8 @@ public:
 
 protected:
   GeometricMomentPathFunction() {};
-  ~GeometricMomentPathFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~GeometricMomentPathFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Feature/Moments/include/otbHuMomentsImageFunction.h b/Modules/Feature/Moments/include/otbHuMomentsImageFunction.h
index 3583aaf8f063fe9a811b996e5b5c670509590d89..9fabcf122f0056844ed6dab447ebf1f984ff6285 100644
--- a/Modules/Feature/Moments/include/otbHuMomentsImageFunction.h
+++ b/Modules/Feature/Moments/include/otbHuMomentsImageFunction.h
@@ -101,17 +101,17 @@ public:
                       InputImageType::ImageDimension);
 
   /** Evalulate the function at specified index */
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -126,8 +126,8 @@ public:
 
 protected:
   HuMomentsImageFunction();
-  virtual ~HuMomentsImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~HuMomentsImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   HuMomentsImageFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Moments/include/otbHuPathFunction.h b/Modules/Feature/Moments/include/otbHuPathFunction.h
index d855bd526145ec6297becdd49a7813e05f07ba49..4babb0ba745635d9fd31bb9b9e4c42a3a5132e62 100644
--- a/Modules/Feature/Moments/include/otbHuPathFunction.h
+++ b/Modules/Feature/Moments/include/otbHuPathFunction.h
@@ -87,7 +87,7 @@ public:
   typedef typename Superclass::PrecisionType PrecisionType;
 
   /** Evaluate the function at non-integer positions */
-  virtual RealType Evaluate(const PathType& path) const;
+  RealType Evaluate(const PathType& path) const ITK_OVERRIDE;
   virtual RealType Evaluate() const;
   /** Get/Set the radius of the neighborhood over which the
       statistics are evaluated */
@@ -96,8 +96,8 @@ public:
 
 protected:
   HuPathFunction();
-  virtual ~HuPathFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~HuPathFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   HuPathFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Moments/include/otbRadiometricMomentsImageFilter.h b/Modules/Feature/Moments/include/otbRadiometricMomentsImageFilter.h
index cf9702b0366f248e2c8576947ab2ff1b061dc9b4..2af29912737eac389046ae3ca4c96150383a7a1a 100644
--- a/Modules/Feature/Moments/include/otbRadiometricMomentsImageFilter.h
+++ b/Modules/Feature/Moments/include/otbRadiometricMomentsImageFilter.h
@@ -89,10 +89,10 @@ public:
 
 protected:
   RadiometricMomentsImageFilter();
-  virtual ~RadiometricMomentsImageFilter() {}
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
-  virtual void GenerateInputRequestedRegion(void);
-  virtual void GenerateOutputInformation(void);
+  ~RadiometricMomentsImageFilter() ITK_OVERRIDE {}
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
 private:
   RadiometricMomentsImageFilter(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Moments/include/otbRadiometricMomentsImageFunction.h b/Modules/Feature/Moments/include/otbRadiometricMomentsImageFunction.h
index 97d8ef27637889fdce75c2da2d724acfc80efee2..96d8190449cacea398953cc43fd7f7ed065ad747 100644
--- a/Modules/Feature/Moments/include/otbRadiometricMomentsImageFunction.h
+++ b/Modules/Feature/Moments/include/otbRadiometricMomentsImageFunction.h
@@ -86,17 +86,17 @@ public:
                       InputImageType::ImageDimension);
 
   /** Evalulate the function at specified index */
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -111,8 +111,8 @@ public:
 
 protected:
   RadiometricMomentsImageFunction();
-  virtual ~RadiometricMomentsImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~RadiometricMomentsImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   RadiometricMomentsImageFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Moments/include/otbRealMomentPathFunction.h b/Modules/Feature/Moments/include/otbRealMomentPathFunction.h
index 59429902f8ac208b5c37e781cb34636a6ec5bd75..394e38038646cf15f0d823223d1c836adc2e59c7 100644
--- a/Modules/Feature/Moments/include/otbRealMomentPathFunction.h
+++ b/Modules/Feature/Moments/include/otbRealMomentPathFunction.h
@@ -64,8 +64,8 @@ public:
 
 protected:
   RealMomentPathFunction() {}
-  ~RealMomentPathFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~RealMomentPathFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Feature/Moments/include/otbRealMomentsImageFunction.h b/Modules/Feature/Moments/include/otbRealMomentsImageFunction.h
index 2451b080ad4ac187eded30a7fb5a0499363b58c4..dff792afa682f33dc2da1428dd692b11d30a9ee0 100644
--- a/Modules/Feature/Moments/include/otbRealMomentsImageFunction.h
+++ b/Modules/Feature/Moments/include/otbRealMomentsImageFunction.h
@@ -76,17 +76,17 @@ public:
                       InputImageType::ImageDimension);
 
   /** Evalulate the function at specified index */
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -106,8 +106,8 @@ public:
 
 protected:
   RealMomentsImageFunction();
-  virtual ~RealMomentsImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~RealMomentsImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   RealMomentsImageFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.h b/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.h
index 2235ed6be03f1e85fed0599f1c7f7eea94e3f21e..4a6e9ddc65b2fa961e10886dc4a8230c95754931 100644
--- a/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.h
+++ b/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.h
@@ -111,15 +111,15 @@ public:
   itkSetMacro(Direction, unsigned int);
   itkGetConstMacro(Direction, unsigned int);
 
-  virtual void GenerateOutputInformation();
-  virtual void GenerateInputRequestedRegion();
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
 protected:
   AddCarvingPathFilter();
-  virtual ~AddCarvingPathFilter() {}
+  ~AddCarvingPathFilter() ITK_OVERRIDE {}
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  virtual void GenerateData();
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   AddCarvingPathFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.h b/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.h
index 988a3e5b11943afd5ca831eedf5cb5fd788d9755..4808cce3f347cd96d4bb36107ba90c44a602189c 100644
--- a/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.h
+++ b/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.h
@@ -90,10 +90,10 @@ public:
 
 protected:
   ImageToCarvingPathFilter();
-  virtual ~ImageToCarvingPathFilter() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  virtual void GenerateOutputInformation() {}  //does nothing
-  virtual void GenerateData();
+  ~ImageToCarvingPathFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE {}  //does nothing
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   ImageToCarvingPathFilter(const Self &); // purposely not implemented
diff --git a/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.h b/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.h
index c0068f0e328eef859bd4f3186658e308de50f76a..ffa392786f6d29bb9431c73431aa8e6b1042269a 100644
--- a/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.h
+++ b/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.h
@@ -112,14 +112,14 @@ public:
   itkSetMacro(Direction, unsigned int);
   itkGetConstMacro(Direction, unsigned int);
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 protected:
   RemoveCarvingPathFilter();
-  virtual ~RemoveCarvingPathFilter() {}
+  ~RemoveCarvingPathFilter() ITK_OVERRIDE {}
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  virtual void GenerateData();
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   RemoveCarvingPathFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Textures/include/otbGreyLevelCooccurrenceIndexedList.h b/Modules/Feature/Textures/include/otbGreyLevelCooccurrenceIndexedList.h
index aee9615e959893f9c8722de36d9078e8b06fc48b..ec4e0b1c88d8b1175e1aed609bcfd46c4c936e05 100644
--- a/Modules/Feature/Textures/include/otbGreyLevelCooccurrenceIndexedList.h
+++ b/Modules/Feature/Textures/include/otbGreyLevelCooccurrenceIndexedList.h
@@ -135,7 +135,7 @@ public:
 
 protected:
   GreyLevelCooccurrenceIndexedList();
-  ~GreyLevelCooccurrenceIndexedList() { }
+  ~GreyLevelCooccurrenceIndexedList() ITK_OVERRIDE { }
 
   /** create a cooccurrence pair with given index and frequency = 1
     * value. Next occurrence of same index is checked via m_LookupArray and the
@@ -152,7 +152,7 @@ protected:
   /** Get index of the pixelPair combination and save the result in index **/
   bool GetIndex(const PixelPairType & pixelPair, IndexType & index) const;
 
-  void PrintSelf(std::ostream & os, itk::Indent indent) const;
+  void PrintSelf(std::ostream & os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Feature/Textures/include/otbHaralickTexturesImageFunction.h b/Modules/Feature/Textures/include/otbHaralickTexturesImageFunction.h
index e02961472390f03563e8d928bfff241994ef513c..cff67f6313667d8ba7843542b3e951ed0d471dbe 100644
--- a/Modules/Feature/Textures/include/otbHaralickTexturesImageFunction.h
+++ b/Modules/Feature/Textures/include/otbHaralickTexturesImageFunction.h
@@ -146,17 +146,17 @@ public:
                       InputImageType::ImageDimension);
 
   /** Evalulate the function at specified index */
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -200,8 +200,8 @@ public:
 
 protected:
   HaralickTexturesImageFunction();
-  virtual ~HaralickTexturesImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~HaralickTexturesImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   HaralickTexturesImageFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Feature/Textures/include/otbSFSTexturesImageFilter.h b/Modules/Feature/Textures/include/otbSFSTexturesImageFilter.h
index 19a6a5debd510242e3b8039c772ed389d26f908b..b4fe36b41a3711365f63b4f5e76b38df0331766b 100644
--- a/Modules/Feature/Textures/include/otbSFSTexturesImageFilter.h
+++ b/Modules/Feature/Textures/include/otbSFSTexturesImageFilter.h
@@ -210,18 +210,18 @@ public:
   const OutputImageType * GetSDOutput() const;
   OutputImageType * GetSDOutput();
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
   std::vector<FunctorType> m_FunctorList;
 
 protected:
   SFSTexturesImageFilter();
-  virtual ~SFSTexturesImageFilter(){}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~SFSTexturesImageFilter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void BeforeThreadedGenerateData();
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
   /** Pad the input requested region by radius */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
 private:
   SFSTexturesImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Feature/Textures/include/otbScalarImageToAdvancedTexturesFilter.h b/Modules/Feature/Textures/include/otbScalarImageToAdvancedTexturesFilter.h
index fa8910fdccdf21f7635b7f58efea838854726c50..62bee5fe5312ab0b81a7c410990c66917e105f31 100644
--- a/Modules/Feature/Textures/include/otbScalarImageToAdvancedTexturesFilter.h
+++ b/Modules/Feature/Textures/include/otbScalarImageToAdvancedTexturesFilter.h
@@ -198,13 +198,13 @@ protected:
   /** Constructor */
   ScalarImageToAdvancedTexturesFilter();
   /** Destructor */
-  ~ScalarImageToAdvancedTexturesFilter();
+  ~ScalarImageToAdvancedTexturesFilter() ITK_OVERRIDE;
   /** Generate the input requested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
   /** Before Parallel textures extraction */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /** Parallel textures extraction */
-  virtual void ThreadedGenerateData(const OutputRegionType& outputRegion, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputRegionType& outputRegion, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   ScalarImageToAdvancedTexturesFilter(const Self&); //purposely not implemented
diff --git a/Modules/Feature/Textures/include/otbScalarImageToHigherOrderTexturesFilter.h b/Modules/Feature/Textures/include/otbScalarImageToHigherOrderTexturesFilter.h
index 4e343fc963a37070e7569f79968aa8d14a4ed7fe..228d5b54f5de940ee5ec27c09d6b413f309f0732 100644
--- a/Modules/Feature/Textures/include/otbScalarImageToHigherOrderTexturesFilter.h
+++ b/Modules/Feature/Textures/include/otbScalarImageToHigherOrderTexturesFilter.h
@@ -185,11 +185,11 @@ protected:
   /** Constructor */
   ScalarImageToHigherOrderTexturesFilter();
   /** Destructor */
-  ~ScalarImageToHigherOrderTexturesFilter();
+  ~ScalarImageToHigherOrderTexturesFilter() ITK_OVERRIDE;
   /** Generate the input requested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
   /** Parallel textures extraction */
-  virtual void ThreadedGenerateData(const OutputRegionType& outputRegion, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputRegionType& outputRegion, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   ScalarImageToHigherOrderTexturesFilter(const Self&); //purposely not implemented
diff --git a/Modules/Feature/Textures/include/otbScalarImageToPanTexTextureFilter.h b/Modules/Feature/Textures/include/otbScalarImageToPanTexTextureFilter.h
index 028c46ab8eab1c01e56551573d8d0e350139744c..80caa2a0f79055a02fe15a0e6bd9c8e0ef1d2418 100644
--- a/Modules/Feature/Textures/include/otbScalarImageToPanTexTextureFilter.h
+++ b/Modules/Feature/Textures/include/otbScalarImageToPanTexTextureFilter.h
@@ -111,11 +111,11 @@ protected:
   /** Constructor */
   ScalarImageToPanTexTextureFilter();
   /** Destructor */
-  ~ScalarImageToPanTexTextureFilter();
+  ~ScalarImageToPanTexTextureFilter() ITK_OVERRIDE;
   /** Generate the input requested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
   /** Parallel textures extraction */
-  virtual void ThreadedGenerateData(const OutputRegionType& outputRegion, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputRegionType& outputRegion, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   ScalarImageToPanTexTextureFilter(const Self&); //purposely not implemented
diff --git a/Modules/Feature/Textures/include/otbScalarImageToTexturesFilter.h b/Modules/Feature/Textures/include/otbScalarImageToTexturesFilter.h
index 02f8a230056e2317719760e16d545fe661e6f3bd..4c489f0f96b103082ea4dab15380c99cfba745c7 100644
--- a/Modules/Feature/Textures/include/otbScalarImageToTexturesFilter.h
+++ b/Modules/Feature/Textures/include/otbScalarImageToTexturesFilter.h
@@ -194,13 +194,13 @@ protected:
   /** Constructor */
   ScalarImageToTexturesFilter();
   /** Destructor */
-  ~ScalarImageToTexturesFilter();
+  ~ScalarImageToTexturesFilter() ITK_OVERRIDE;
   /** Generate the input requested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
   /** Before Parallel textures extraction */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /** Parallel textures extraction */
-  virtual void ThreadedGenerateData(const OutputRegionType& outputRegion, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputRegionType& outputRegion, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   ScalarImageToTexturesFilter(const Self&); //purposely not implemented
diff --git a/Modules/Feature/Textures/include/otbTextureImageFunction.h b/Modules/Feature/Textures/include/otbTextureImageFunction.h
index 31517f4bbed41001682ea098e1113719b7f02001..b0f43c06326f819e61b8ffc8534646231dee07c6 100644
--- a/Modules/Feature/Textures/include/otbTextureImageFunction.h
+++ b/Modules/Feature/Textures/include/otbTextureImageFunction.h
@@ -74,17 +74,17 @@ public:
   itkStaticConstMacro(ImageDimension, unsigned int, InputImageType::ImageDimension);
 
   /** Evalulate the function at specified index */
-  virtual RealType EvaluateAtIndex(const IndexType& index) const;
+  RealType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual RealType Evaluate(const PointType& point) const
+  RealType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual RealType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  RealType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -117,8 +117,8 @@ public:
 
 protected:
   TextureImageFunction();
-  virtual ~TextureImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~TextureImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   TextureImageFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Filtering/ChangeDetection/include/otbBinaryFunctorNeighborhoodJoinHistogramImageFilter.h b/Modules/Filtering/ChangeDetection/include/otbBinaryFunctorNeighborhoodJoinHistogramImageFilter.h
index df99c4979f2fdcd216f45b0ada68dbb74c5d2ddc..d8d461e0f9468aea5e9ec5bb81bf3ebcab8dd069 100644
--- a/Modules/Filtering/ChangeDetection/include/otbBinaryFunctorNeighborhoodJoinHistogramImageFilter.h
+++ b/Modules/Filtering/ChangeDetection/include/otbBinaryFunctorNeighborhoodJoinHistogramImageFilter.h
@@ -145,9 +145,9 @@ public:
 
 protected:
   BinaryFunctorNeighborhoodJoinHistogramImageFilter();
-  virtual ~BinaryFunctorNeighborhoodJoinHistogramImageFilter() {}
+  ~BinaryFunctorNeighborhoodJoinHistogramImageFilter() ITK_OVERRIDE {}
 
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** BinaryFunctorNeighborhoodJoinHistogramImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -159,13 +159,13 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                                    itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
+                                    itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * Pad the inputs requested regions by radius
    */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   RadiusSizeType m_Radius;
 
diff --git a/Modules/Filtering/ChangeDetection/include/otbCBAMIChangeDetector.h b/Modules/Filtering/ChangeDetection/include/otbCBAMIChangeDetector.h
index 0af665394b87f7b7d69f8ce5caf414792585ee84..bc488255a3f2faa1b750efb467cb89534cd74af8 100644
--- a/Modules/Filtering/ChangeDetection/include/otbCBAMIChangeDetector.h
+++ b/Modules/Filtering/ChangeDetection/include/otbCBAMIChangeDetector.h
@@ -81,7 +81,7 @@ public:
 
 protected:
   CBAMIChangeDetector() {}
-  virtual ~CBAMIChangeDetector() {}
+  ~CBAMIChangeDetector() ITK_OVERRIDE {}
 
 private:
   CBAMIChangeDetector(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ChangeDetection/include/otbCorrelationChangeDetector.h b/Modules/Filtering/ChangeDetection/include/otbCorrelationChangeDetector.h
index c9a896537e104295e179f14a654d6b2c0dd18b13..5e5c8a606ab4461c4e5d62516a54749bb3a0cec3 100644
--- a/Modules/Filtering/ChangeDetection/include/otbCorrelationChangeDetector.h
+++ b/Modules/Filtering/ChangeDetection/include/otbCorrelationChangeDetector.h
@@ -80,7 +80,7 @@ public:
 
 protected:
   CorrelationChangeDetector() {}
-  virtual ~CorrelationChangeDetector() {}
+  ~CorrelationChangeDetector() ITK_OVERRIDE {}
 
 private:
   CorrelationChangeDetector(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ChangeDetection/include/otbJoinHistogramMIImageFilter.h b/Modules/Filtering/ChangeDetection/include/otbJoinHistogramMIImageFilter.h
index d6d08dddb32b3395867e90ec2149b8d2fe0a9dc6..a3efb85cfe62034ab765345e27f1f3cbaa273d91 100644
--- a/Modules/Filtering/ChangeDetection/include/otbJoinHistogramMIImageFilter.h
+++ b/Modules/Filtering/ChangeDetection/include/otbJoinHistogramMIImageFilter.h
@@ -81,7 +81,7 @@ public:
 
 protected:
   JoinHistogramMIImageFilter() {}
-  virtual ~JoinHistogramMIImageFilter() {}
+  ~JoinHistogramMIImageFilter() ITK_OVERRIDE {}
 
 private:
   JoinHistogramMIImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerDistanceImageFilter.h b/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerDistanceImageFilter.h
index cba75ee655fa111f68e62e2583aa81c98a471a20..a075d9f583caa29b635427bc0c7e2e779da5579c 100644
--- a/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerDistanceImageFilter.h
+++ b/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerDistanceImageFilter.h
@@ -168,7 +168,7 @@ public:
 
 protected:
   KullbackLeiblerDistanceImageFilter() {}
-  virtual ~KullbackLeiblerDistanceImageFilter() {}
+  ~KullbackLeiblerDistanceImageFilter() ITK_OVERRIDE {}
 
 private:
   KullbackLeiblerDistanceImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerProfileImageFilter.h b/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerProfileImageFilter.h
index d4a5e93c7fbd588e8837e1e98b9d5a924ae9c44c..4c7612c74e92ee96913a34231b355b1d85a0a76d 100644
--- a/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerProfileImageFilter.h
+++ b/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerProfileImageFilter.h
@@ -186,7 +186,7 @@ public:
 
 protected:
   KullbackLeiblerProfileImageFilter() {}
-  virtual ~KullbackLeiblerProfileImageFilter() {}
+  ~KullbackLeiblerProfileImageFilter() ITK_OVERRIDE {}
 
 private:
   KullbackLeiblerProfileImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerSupervizedDistanceImageFilter.h b/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerSupervizedDistanceImageFilter.h
index 5498cc9cac67f24a45db362f15a7db469054ac5d..01b280719e165d1a193bcc064e02bc9b30f08e78 100644
--- a/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerSupervizedDistanceImageFilter.h
+++ b/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerSupervizedDistanceImageFilter.h
@@ -144,13 +144,13 @@ public:
   void  SetTrainingArea(const TInputROIImage * trainingImage);
 
 protected:
-  virtual void BeforeThreadedGenerateData(void);
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE;
 
   KullbackLeiblerSupervizedDistanceImageFilter()
     {
     this->SetNumberOfRequiredInputs(3);
     }
-  virtual ~KullbackLeiblerSupervizedDistanceImageFilter() {}
+  ~KullbackLeiblerSupervizedDistanceImageFilter() ITK_OVERRIDE {}
 
 private:
   KullbackLeiblerSupervizedDistanceImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ChangeDetection/include/otbLHMIChangeDetector.h b/Modules/Filtering/ChangeDetection/include/otbLHMIChangeDetector.h
index c397eba14e309d3291cc0308d4af9b866f2cf8bf..4ddbfe05fd01e513a5a02c1c12be914c6b083abd 100644
--- a/Modules/Filtering/ChangeDetection/include/otbLHMIChangeDetector.h
+++ b/Modules/Filtering/ChangeDetection/include/otbLHMIChangeDetector.h
@@ -81,7 +81,7 @@ public:
 
 protected:
   LHMIChangeDetector() {}
-  virtual ~LHMIChangeDetector() {}
+  ~LHMIChangeDetector() ITK_OVERRIDE {}
 
 private:
   LHMIChangeDetector(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ChangeDetection/include/otbMeanDifferenceImageFilter.h b/Modules/Filtering/ChangeDetection/include/otbMeanDifferenceImageFilter.h
index 02448bc2aa8126db1cbdc8d175f8a6f906c9be60..2d69ac8450eae1b60a177a9da4ffc6beb62d46a8 100644
--- a/Modules/Filtering/ChangeDetection/include/otbMeanDifferenceImageFilter.h
+++ b/Modules/Filtering/ChangeDetection/include/otbMeanDifferenceImageFilter.h
@@ -79,7 +79,7 @@ public:
 
 protected:
   MeanDifferenceImageFilter() {}
-  virtual ~MeanDifferenceImageFilter() {}
+  ~MeanDifferenceImageFilter() ITK_OVERRIDE {}
 
 private:
   MeanDifferenceImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ChangeDetection/include/otbMeanRatioImageFilter.h b/Modules/Filtering/ChangeDetection/include/otbMeanRatioImageFilter.h
index 9010d7db27008b1a7a65bf4e250f995e763bd9b9..a6ac437f9d68a3b4d2e7a265a840e2404e7bb1e4 100644
--- a/Modules/Filtering/ChangeDetection/include/otbMeanRatioImageFilter.h
+++ b/Modules/Filtering/ChangeDetection/include/otbMeanRatioImageFilter.h
@@ -77,7 +77,7 @@ public:
 
 protected:
   MeanRatioImageFilter() {}
-  virtual ~MeanRatioImageFilter() {}
+  ~MeanRatioImageFilter() ITK_OVERRIDE {}
 
 private:
   MeanRatioImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ChangeDetection/include/otbMultivariateAlterationDetectorImageFilter.h b/Modules/Filtering/ChangeDetection/include/otbMultivariateAlterationDetectorImageFilter.h
index d77801a8ddab9602bf2731e9d2ea8bc524199b03..7e00aba91afe11a9fd30b2725528c9c6e1e75ab1 100644
--- a/Modules/Filtering/ChangeDetection/include/otbMultivariateAlterationDetectorImageFilter.h
+++ b/Modules/Filtering/ChangeDetection/include/otbMultivariateAlterationDetectorImageFilter.h
@@ -152,11 +152,11 @@ public:
 
 protected:
   MultivariateAlterationDetectorImageFilter();
-  virtual ~MultivariateAlterationDetectorImageFilter() {}
+  ~MultivariateAlterationDetectorImageFilter() ITK_OVERRIDE {}
 
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
   MultivariateAlterationDetectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ColorMap/include/otbReliefColormapFunctor.h b/Modules/Filtering/ColorMap/include/otbReliefColormapFunctor.h
index f4842f0d0f3404f9ca19108ab518ed75278d6c5f..4dd22cef450ebd99b07485385f3e4b1fdad8602e 100644
--- a/Modules/Filtering/ColorMap/include/otbReliefColormapFunctor.h
+++ b/Modules/Filtering/ColorMap/include/otbReliefColormapFunctor.h
@@ -55,11 +55,11 @@ public:
   typedef typename Superclass::ScalarType   ScalarType;
   typedef typename Superclass::RealType     RealType;
 
-  virtual RGBPixelType operator ()(const TScalar&) const;
+  RGBPixelType operator ()(const TScalar&) const ITK_OVERRIDE;
 
 protected:
   ReliefColormapFunctor(){};
-  ~ReliefColormapFunctor() {}
+  ~ReliefColormapFunctor() ITK_OVERRIDE {}
 
 private:
   ReliefColormapFunctor(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ColorMap/include/otbScalarToRainbowRGBPixelFunctor.h b/Modules/Filtering/ColorMap/include/otbScalarToRainbowRGBPixelFunctor.h
index 901e41a56868b833ec6d683d462d4b421483c474..1b341f6994fd7ebf10d48e62523c93046eb47de4 100644
--- a/Modules/Filtering/ColorMap/include/otbScalarToRainbowRGBPixelFunctor.h
+++ b/Modules/Filtering/ColorMap/include/otbScalarToRainbowRGBPixelFunctor.h
@@ -136,7 +136,7 @@ class ITK_EXPORT ScalarToRainbowRGBPixelFunctor
 {
 public:
   ScalarToRainbowRGBPixelFunctor();
-  ~ScalarToRainbowRGBPixelFunctor() {}
+  ~ScalarToRainbowRGBPixelFunctor() ITK_OVERRIDE {}
 
   typedef ScalarToRainbowRGBPixelFunctor                      Self;
   typedef itk::Function::ColormapFunction<TScalar, TRGBPixel> Superclass;
@@ -151,7 +151,7 @@ public:
   typedef TScalar                              ScalarType;
   typedef HSVToRGBFunctor<RGBPixelType>        HSVToRGBFunctorType;
 
-  RGBPixelType operator ()(const TScalar&) const;
+  RGBPixelType operator ()(const TScalar&) const ITK_OVERRIDE;
 
   /** Set the input maximum to be mapped to red
    * \deprecated use SetMaximumInputValue() */
diff --git a/Modules/Filtering/Convolution/include/otbConvolutionImageFilter.h b/Modules/Filtering/Convolution/include/otbConvolutionImageFilter.h
index 579c16d999eb354947e415f4ef2b925130c70f4c..f9eb1fbec02ab5406ca4fe382549fa1a6e985474 100644
--- a/Modules/Filtering/Convolution/include/otbConvolutionImageFilter.h
+++ b/Modules/Filtering/Convolution/include/otbConvolutionImageFilter.h
@@ -154,8 +154,8 @@ public:
 
 protected:
   ConvolutionImageFilter();
-  virtual ~ConvolutionImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ConvolutionImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** ConvolutionImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData()
@@ -168,7 +168,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData() */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** ConvolutionImageFilter needs a larger input requested region than
    * the output requested region.  As such, ConvolutionImageFilter needs
@@ -176,8 +176,8 @@ protected:
    * in order to inform the pipeline execution model.
    *
    * \sa ImageToImageFilter::GenerateInputRequestedRegion() */
-  virtual void GenerateInputRequestedRegion()
-    throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
 private:
   ConvolutionImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Convolution/include/otbGaborFilterGenerator.h b/Modules/Filtering/Convolution/include/otbGaborFilterGenerator.h
index e380ed588f3b223576251c3747454355c35c513f..977410ff0014c3b14934931be8117e547d26b85f 100644
--- a/Modules/Filtering/Convolution/include/otbGaborFilterGenerator.h
+++ b/Modules/Filtering/Convolution/include/otbGaborFilterGenerator.h
@@ -111,17 +111,17 @@ protected:
   /** constructor */
   GaborFilterGenerator();
   /** destructor */
-  virtual ~GaborFilterGenerator() {}
+  ~GaborFilterGenerator() ITK_OVERRIDE {}
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Generate the filter coefficients */
   void GenerateFilter();
 
   /** Reimplement the Modified() method
    *to set the NeedToGenerateFilter to true */
-  virtual void Modified() const;
+  void Modified() const ITK_OVERRIDE;
 
 private:
   GaborFilterGenerator(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Convolution/include/otbOverlapSaveConvolutionImageFilter.h b/Modules/Filtering/Convolution/include/otbOverlapSaveConvolutionImageFilter.h
index fdd5b4954867f2a5401bc31a7f2a9f9d4af6370e..b07d13ca7843ef6d6040bc6df88cae03adbed2d1 100644
--- a/Modules/Filtering/Convolution/include/otbOverlapSaveConvolutionImageFilter.h
+++ b/Modules/Filtering/Convolution/include/otbOverlapSaveConvolutionImageFilter.h
@@ -138,8 +138,8 @@ public:
   /** Since this filter implements a neighborhood operation, it requests a largest input
    * region than the output region.
    */
-  virtual void GenerateInputRequestedRegion()
-    throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
 #ifdef ITK_USE_CONCEPT_CHECKING
   /** Begin concept checking */
@@ -151,13 +151,13 @@ protected:
   /** Constructor */
   OverlapSaveConvolutionImageFilter();
   /** destructor */
-  virtual ~OverlapSaveConvolutionImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~OverlapSaveConvolutionImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /* TODO For the moment this class provide only a GenerateData(),
    * due to limited thread-safety of FFTW plan creation.
    */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   // void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
 
 private:
diff --git a/Modules/Filtering/DEM/include/otbDEMCaracteristicsExtractor.h b/Modules/Filtering/DEM/include/otbDEMCaracteristicsExtractor.h
index 42368ea14dfa84ce8be23126357f1d3498f63ab3..77f901bef15548d737c4a097c8d722a49f94e597 100644
--- a/Modules/Filtering/DEM/include/otbDEMCaracteristicsExtractor.h
+++ b/Modules/Filtering/DEM/include/otbDEMCaracteristicsExtractor.h
@@ -143,11 +143,11 @@ public:
 
 protected:
   DEMCaracteristicsExtractor();
-  virtual ~DEMCaracteristicsExtractor();
+  ~DEMCaracteristicsExtractor() ITK_OVERRIDE;
   /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   /** Angle parameters*/
diff --git a/Modules/Filtering/DEM/include/otbDEMToImageGenerator.h b/Modules/Filtering/DEM/include/otbDEMToImageGenerator.h
index 963e6eadbf3445ac3e09dd85ee88146d093d3f96..62c40ede82ccf40659fa04bd439276e5406e6d23 100644
--- a/Modules/Filtering/DEM/include/otbDEMToImageGenerator.h
+++ b/Modules/Filtering/DEM/include/otbDEMToImageGenerator.h
@@ -173,13 +173,13 @@ public:
 
 protected:
   DEMToImageGenerator();
-  virtual ~DEMToImageGenerator(){}
+  ~DEMToImageGenerator() ITK_OVERRIDE{}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  void BeforeThreadedGenerateData();
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
-  virtual void GenerateOutputInformation();
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   DEMHandlerType::Pointer m_DEMHandler;
   PointType               m_OutputOrigin;
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionBinaryImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionBinaryImageFilter.h
index 6a9aa40b56a27a9cf9b5b5ee45111d586628d6cd..3d5994f72fa68e883ff53707de5aa815c2adb81c 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionBinaryImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionBinaryImageFilter.h
@@ -86,10 +86,10 @@ public:
 
 protected:
   AngularProjectionBinaryImageFilter();
-  virtual ~AngularProjectionBinaryImageFilter() { }
+  ~AngularProjectionBinaryImageFilter() ITK_OVERRIDE { }
 
-  virtual void GenerateOutputInformation();
-  virtual void ThreadedGenerateData( const OutputImageRegionType & outputRegionForThread, itk::ThreadIdType threadID );
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void ThreadedGenerateData( const OutputImageRegionType & outputRegionForThread, itk::ThreadIdType threadID ) ITK_OVERRIDE;
 
 private:
   AngularProjectionBinaryImageFilter(const Self&); // not implemented
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionImageFilter.h
index add14b8782df9fb27cbd5b71ecda73d50595a5f1..b084b68224ee1275df3929f8804d49892975a76b 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionImageFilter.h
@@ -81,7 +81,7 @@ public:
   itkGetMacro(AngleArray, AngleArrayType);
   itkSetMacro(AngleArray, AngleArrayType);
 
-  void SetInput ( unsigned int i, const InputImageType * );
+  void SetInput ( unsigned int i, const InputImageType * ) ITK_OVERRIDE;
   using Superclass::SetInput;
 
   const InputImageType * GetInput( unsigned int i ) const;
@@ -89,9 +89,9 @@ public:
 
 protected:
   AngularProjectionImageFilter();
-  virtual ~AngularProjectionImageFilter() { }
+  ~AngularProjectionImageFilter() ITK_OVERRIDE { }
 
-  virtual void ThreadedGenerateData( const OutputImageRegionType & outputRegionForThread, itk::ThreadIdType threadID );
+  void ThreadedGenerateData( const OutputImageRegionType & outputRegionForThread, itk::ThreadIdType threadID ) ITK_OVERRIDE;
   virtual OutputImagePixelType InternalGenerateData ( const ImageRegionConstIteratorVectorType & ) const;
 
 private:
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionSetImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionSetImageFilter.h
index 9402edcd3fa63a32ec07b63fb1c0a52992f3ba6f..a8baed30d39195a24eb65a75df7471f29b010f70 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionSetImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionSetImageFilter.h
@@ -123,9 +123,9 @@ public:
 
 protected:
   AngularProjectionSetImageFilter();
-  virtual ~AngularProjectionSetImageFilter() { }
+  ~AngularProjectionSetImageFilter() ITK_OVERRIDE { }
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   AngularProjectionSetImageFilter(const Self&); // not implemented
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbEstimateInnerProductPCAImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbEstimateInnerProductPCAImageFilter.h
index 518196e15b30929c22f12dd50307daf4ab3a3c48..18a7ed1f8c5b4a3375a8589da4c00fa78e3061e0 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbEstimateInnerProductPCAImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbEstimateInnerProductPCAImageFilter.h
@@ -75,21 +75,21 @@ public:
 
 protected:
   EstimateInnerProductPCAImageFilter();
-  virtual ~EstimateInnerProductPCAImageFilter() {}
+  ~EstimateInnerProductPCAImageFilter() ITK_OVERRIDE {}
 
   /** GenerateOutputInformation
    * Set the number of bands of the output.
    * Copy information from the first image of the list if existing.
    **/
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /**
    * BeforeThreadedGenerateData
    **/
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   EstimateInnerProductPCAImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbFastICAImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbFastICAImageFilter.h
index c7c02acc61f45d0481150481f1f546159483b946..9ed5f9c5a506d893620acd8f5ad0c09da5b942e9 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbFastICAImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbFastICAImageFilter.h
@@ -146,7 +146,7 @@ public:
 
 protected:
   FastICAImageFilter ();
-  virtual ~FastICAImageFilter() { }
+  ~FastICAImageFilter() ITK_OVERRIDE { }
 
   /** GenerateOutputInformation
    * Propagate vector length info and modify if needed
@@ -156,12 +156,12 @@ protected:
    * (which may not be square) has to be given,
    * otherwize, GenerateOutputInformation throws an itk::ExceptionObject
    */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** GenerateData
    * Through a filter of filter structure
    */
-  virtual void GenerateData ();
+  void GenerateData () ITK_OVERRIDE;
 
   /** Internal methods */
   void ForwardGenerateOutputInformation();
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbFastICAInternalOptimizerVectorImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbFastICAInternalOptimizerVectorImageFilter.h
index 3866a549b46c3cad9b355667ba0baf549edc7a46..0575bfc298311f0d9c8f37ce4d8a579b8580cd14 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbFastICAInternalOptimizerVectorImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbFastICAInternalOptimizerVectorImageFilter.h
@@ -93,12 +93,12 @@ public:
 
 protected:
   FastICAInternalOptimizerVectorImageFilter();
-  virtual ~FastICAInternalOptimizerVectorImageFilter() { }
+  ~FastICAInternalOptimizerVectorImageFilter() ITK_OVERRIDE { }
 
-  virtual void GenerateOutputInformation();
-  virtual void BeforeThreadedGenerateData ();
-  virtual void ThreadedGenerateData ( const OutputRegionType &, itk::ThreadIdType );
-  virtual void AfterThreadedGenerateData();
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void BeforeThreadedGenerateData () ITK_OVERRIDE;
+  void ThreadedGenerateData ( const OutputRegionType &, itk::ThreadIdType ) ITK_OVERRIDE;
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
   unsigned int m_CurrentBandForLoop;
 
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbInnerProductPCAImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbInnerProductPCAImageFilter.h
index fe918f5865befa97c9098752c585a116166e5396..6227397ac4ba52c48565a6672a8f1761c6c7a411 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbInnerProductPCAImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbInnerProductPCAImageFilter.h
@@ -118,13 +118,13 @@ public:
 
 protected:
   /** GenerateData */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** Constructor */
   InnerProductPCAImageFilter();
   /** Destructor */
-  virtual ~InnerProductPCAImageFilter() {}
+  ~InnerProductPCAImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** NormalizeInnerProductPCAImageFilter can produce an image which is a different
    * resolution than its input image.  As such, NormalizeInnerProductPCAImageFilter
@@ -134,7 +134,7 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
   InnerProductPCAImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbLocalActivityVectorImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbLocalActivityVectorImageFilter.h
index 1c0b552dfe39d8aadbfe7093bc3272d99d6a39df..3f3a68a51e0e9470b21df77592976df6e31e87c5 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbLocalActivityVectorImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbLocalActivityVectorImageFilter.h
@@ -106,7 +106,7 @@ public:
 
 protected:
   LocalActivityVectorImageFilter() { }
-  virtual ~LocalActivityVectorImageFilter() { }
+  ~LocalActivityVectorImageFilter() ITK_OVERRIDE { }
 
 private:
   LocalActivityVectorImageFilter( const Self & ); // Not implemented
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbMNFImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbMNFImageFilter.h
index 27c2f2f5737bac0d6bb45479782539e2f5d578f1..56d6deaae235fcbdbf4d7edc9cd911cdc974067e 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbMNFImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbMNFImageFilter.h
@@ -146,7 +146,7 @@ public:
 
 protected:
   MNFImageFilter();
-  virtual ~MNFImageFilter() { }
+  ~MNFImageFilter() ITK_OVERRIDE { }
 
   /** GenerateOutputInformation
    * Propagate vector length info and modify if needed
@@ -156,14 +156,14 @@ protected:
    * (which may not be square) has to be given,
    * otherwize, GenerateOutputInformation throws an itk::ExceptionObject
    */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** GenerateData
    * Through a filter of filter structure
    */
-  virtual void GenerateData ();
+  void GenerateData () ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Internal methods */
   void ForwardGenerateOutputInformation();
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbMaximumAutocorrelationFactorImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbMaximumAutocorrelationFactorImageFilter.h
index c5fb71c8cada543079f33e9281286fc0139e9291..7a4f8515a4aefa2c9b2d6ccd476472ac5f87099b 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbMaximumAutocorrelationFactorImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbMaximumAutocorrelationFactorImageFilter.h
@@ -131,11 +131,11 @@ public:
 
 protected:
   MaximumAutocorrelationFactorImageFilter();
-  virtual ~MaximumAutocorrelationFactorImageFilter() {}
+  ~MaximumAutocorrelationFactorImageFilter() ITK_OVERRIDE {}
 
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
   MaximumAutocorrelationFactorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbNAPCAImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbNAPCAImageFilter.h
index 54faab6f56a43ae26066d91259a304290c4c4017..e6e2cf0c0c134a7766049dcb6d0ab334873c4ac0 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbNAPCAImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbNAPCAImageFilter.h
@@ -86,10 +86,10 @@ public:
 
 protected:
   NAPCAImageFilter() { }
-  virtual ~NAPCAImageFilter () { }
+  ~NAPCAImageFilter () ITK_OVERRIDE { }
 
   /** Specific functionality of NAPCA */
-  virtual void GenerateTransformationMatrix();
+  void GenerateTransformationMatrix() ITK_OVERRIDE;
 }; // end of class
 
 } // end of namespace otb
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbNormalizeInnerProductPCAImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbNormalizeInnerProductPCAImageFilter.h
index becc1d390e33cf237a0439e24ba320179fb519cc..1b38d267ce7d921274ea5c6e51ae900e49ee81bd 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbNormalizeInnerProductPCAImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbNormalizeInnerProductPCAImageFilter.h
@@ -81,7 +81,7 @@ public:
 
 protected:
   NormalizeInnerProductPCAImageFilter();
-  virtual ~NormalizeInnerProductPCAImageFilter() {}
+  ~NormalizeInnerProductPCAImageFilter() ITK_OVERRIDE {}
 
   /** NormalizeInnerProductPCAImageFilter can produce an image which is a different
    * resolution than its input image.  As such, NormalizeInnerProductPCAImageFilter
@@ -91,7 +91,7 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** NormalizeInnerProductPCAImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -103,12 +103,12 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** BeforeThreadedGenerateData method */
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbPCAImageFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbPCAImageFilter.h
index 5ef212dc848e40ed40fd7e16299355ba8df84f77..edfecfa6d4164211fa9cebd7ae2398ff8ead21c0 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbPCAImageFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbPCAImageFilter.h
@@ -158,7 +158,7 @@ public:
 
 protected:
   PCAImageFilter();
-  virtual ~PCAImageFilter() { }
+  ~PCAImageFilter() ITK_OVERRIDE { }
 
   /** GenerateOutputInformation
    * Propagate vector length info and modify if needed
@@ -168,14 +168,14 @@ protected:
    * (which may not be square) has to be given,
    * otherwize, GenerateOutputInformation throws an itk::ExceptionObject
    */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** GenerateData
    * Through a filter of filter structure
    */
-  virtual void GenerateData ();
+  void GenerateData () ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Internal methods */
   virtual void ForwardGenerateOutputInformation();
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbSparseWvltToAngleMapperListFilter.h b/Modules/Filtering/DimensionalityReduction/include/otbSparseWvltToAngleMapperListFilter.h
index 7cdee419e59024fa1d45f3d6caaf7b657b80035f..bad67e0981f64662167eb685f8f897bce4c4de4b 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbSparseWvltToAngleMapperListFilter.h
+++ b/Modules/Filtering/DimensionalityReduction/include/otbSparseWvltToAngleMapperListFilter.h
@@ -105,16 +105,16 @@ public:
 
 protected:
   SparseWvltToAngleMapperListFilter();
-  virtual ~SparseWvltToAngleMapperListFilter() { }
+  ~SparseWvltToAngleMapperListFilter() ITK_OVERRIDE { }
 
   /** Standard itk::ProcessObject subclass method. */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** This method causes the filter to generate its output. */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /* Internal functions */
   virtual bool IsToGenerate ( const ImageConstIteratorVectorType & ) const;
diff --git a/Modules/Filtering/ImageManipulation/include/otbAmplitudeFunctor.h b/Modules/Filtering/ImageManipulation/include/otbAmplitudeFunctor.h
index b6706bbe4ef9321d84fa17ef3422d28f955035c2..8b4660209665096d62157b69f6393d32f192c71a 100644
--- a/Modules/Filtering/ImageManipulation/include/otbAmplitudeFunctor.h
+++ b/Modules/Filtering/ImageManipulation/include/otbAmplitudeFunctor.h
@@ -67,17 +67,17 @@ public:
   }
 
   /** Destructor */
-  virtual ~AmplitudeFunctor() {}
+  ~AmplitudeFunctor() ITK_OVERRIDE {}
 
   const char *GetDescription() const
   {return "Amplitude"; }
 
-  virtual unsigned int GetOutputSize() const
+  unsigned int GetOutputSize() const ITK_OVERRIDE
   {
     return 1;
   }
 
-  virtual OutputPixelType operator ()(const VectorPixelType& inPixel) const
+  OutputPixelType operator ()(const VectorPixelType& inPixel) const ITK_OVERRIDE
   {
     OutputPixelType outPixel;
     outPixel.SetSize(1);
@@ -88,13 +88,13 @@ public:
     return outPixel;
   }
 
-  virtual OutputPixelType operator ()(ScalarType) const
+  OutputPixelType operator ()(ScalarType) const ITK_OVERRIDE
   {
     //FIXME we don't handle the std::complex<> yet
     itkExceptionMacro(<< "Can't compute amplitude from a scalar value");
   }
 
-  virtual OutputPixelType operator ()(const RGBPixelType& inPixel) const
+  OutputPixelType operator ()(const RGBPixelType& inPixel) const ITK_OVERRIDE
   {
     OutputPixelType outPixel;
     outPixel.SetSize(1);
@@ -107,7 +107,7 @@ public:
     return outPixel;
   }
 
-  virtual OutputPixelType operator ()(const RGBAPixelType& inPixel) const
+  OutputPixelType operator ()(const RGBAPixelType& inPixel) const ITK_OVERRIDE
   {
     OutputPixelType outPixel;
     outPixel.SetSize(1);
diff --git a/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodImageFilter.h
index c2eb3ffbb2c61348f43e1c82e0e8713c8bd06f15..73e17ea6e277457edb9812b64b64a5c999eac818 100644
--- a/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodImageFilter.h
@@ -127,7 +127,7 @@ public:
 
 protected:
   BinaryFunctorNeighborhoodImageFilter();
-  virtual ~BinaryFunctorNeighborhoodImageFilter() {}
+  ~BinaryFunctorNeighborhoodImageFilter() ITK_OVERRIDE {}
 
   /** BinaryFunctorNeighborhoodImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -139,13 +139,13 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                                    itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
+                                    itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * Pad the inputs requested regions by radius
    */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   RadiusSizeType m_Radius;
 
diff --git a/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodVectorImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodVectorImageFilter.h
index c52e658d07e8960ec9c82436787c68ea2d73ca55..e2f3ed38501659eb9890b4901f0483de0ad907df 100644
--- a/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodVectorImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodVectorImageFilter.h
@@ -116,7 +116,7 @@ public:
 
 protected:
   BinaryFunctorNeighborhoodVectorImageFilter();
-  virtual ~BinaryFunctorNeighborhoodVectorImageFilter() {}
+  ~BinaryFunctorNeighborhoodVectorImageFilter() ITK_OVERRIDE {}
 
   /** BinaryFunctorNeighborhoodVectorImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -128,14 +128,14 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                                    itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
+                                    itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * Since the number of components per pixel depends on the radius range, one must reimplement
    * this method to set the proper number of component on the filter output.
    */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   RadiusSizeType m_Radius;
 
diff --git a/Modules/Filtering/ImageManipulation/include/otbBinaryImageDensityFunction.h b/Modules/Filtering/ImageManipulation/include/otbBinaryImageDensityFunction.h
index a327a6bcaa8154be56ef3f328e6e836b60d3cbf8..3f5d41fb4f57905f385bbcc1df757b138d1e7e87 100644
--- a/Modules/Filtering/ImageManipulation/include/otbBinaryImageDensityFunction.h
+++ b/Modules/Filtering/ImageManipulation/include/otbBinaryImageDensityFunction.h
@@ -77,17 +77,17 @@ public:
   RealType;
 
   /** Evalulate the function at specified index */
-  virtual RealType EvaluateAtIndex(const IndexType& index) const;
+  RealType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual RealType Evaluate(const PointType& point) const
+  RealType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual RealType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  RealType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -106,8 +106,8 @@ public:
 
 protected:
   BinaryImageDensityFunction();
-  virtual ~BinaryImageDensityFunction(){}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~BinaryImageDensityFunction() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   BinaryImageDensityFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.h b/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.h
index 0f4862f8a315ea5cd918b2460da94d8aa2950c43..3c0dc39fb13edff444c6d211059e1e2e0d9ac536 100644
--- a/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.h
+++ b/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.h
@@ -67,11 +67,11 @@ protected:
   /** Constructor */
   BinaryImageMinimalBoundingRegionCalculator();
   /** Destructor */
-  virtual ~BinaryImageMinimalBoundingRegionCalculator() {}
+  ~BinaryImageMinimalBoundingRegionCalculator() ITK_OVERRIDE {}
   /** Main computation method */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 private:
   BinaryImageMinimalBoundingRegionCalculator(const Self &); // purposely not implemented
   void operator =(const Self&); // purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbBinaryImageToDensityImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbBinaryImageToDensityImageFilter.h
index 79bfe9c030eefec689e15fcf7b053865439dd894..69a448b2f0b2ed590530f66367806c0ded538397 100644
--- a/Modules/Filtering/ImageManipulation/include/otbBinaryImageToDensityImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbBinaryImageToDensityImageFilter.h
@@ -74,17 +74,17 @@ public:
   }
 
   /** Main computation method */
-  virtual void ThreadedGenerateData(const InputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
-  virtual void BeforeThreadedGenerateData();
-  virtual void GenerateInputRequestedRegion();
+  void ThreadedGenerateData(const InputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   BinaryImageToDensityImageFilter();
   /** Destructor */
-  virtual ~BinaryImageToDensityImageFilter();
+  ~BinaryImageToDensityImageFilter() ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   BinaryImageToDensityImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbBoxAndWhiskerImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbBoxAndWhiskerImageFilter.h
index 7836509dd106b9d7a231c641c08946bb8bae2fe9..263b4ad8fa2e45bde69250a6086cac6340427755 100644
--- a/Modules/Filtering/ImageManipulation/include/otbBoxAndWhiskerImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbBoxAndWhiskerImageFilter.h
@@ -93,12 +93,12 @@ public:
 
 protected:
   BoxAndWhiskerImageFilter ();
-  virtual ~BoxAndWhiskerImageFilter () {}
+  ~BoxAndWhiskerImageFilter () ITK_OVERRIDE {}
 
   /** Main computation method implemented as a multithreaded filter */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
-  virtual void GenerateOutputInformation();
-  virtual void AllocateOutputs();
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void AllocateOutputs() ITK_OVERRIDE;
 
   /** Perform the outlier detection */
   PixelType PerformBoxAndWhiskerDetection(const PixelType& pixel);
diff --git a/Modules/Filtering/ImageManipulation/include/otbChangeInformationImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbChangeInformationImageFilter.h
index b38b428bdf596f029981f2145a7ffc13fea92400..06d0ee474125e65e085cea948c292144e7030bcd 100644
--- a/Modules/Filtering/ImageManipulation/include/otbChangeInformationImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbChangeInformationImageFilter.h
@@ -66,10 +66,10 @@ public:
 
 protected:
   ChangeInformationImageFilter() {}
-  virtual ~ChangeInformationImageFilter() {}
+  ~ChangeInformationImageFilter() ITK_OVERRIDE {}
 
   /** Apply changes to the output image metadata. */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
   ChangeInformationImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbChangeLabelImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbChangeLabelImageFilter.h
index d0c779983caa77795bdd6153f754f9c0dd8b9c32..b26d8a4feace23fd8ed0b40be02584ea486c6d08 100644
--- a/Modules/Filtering/ImageManipulation/include/otbChangeLabelImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbChangeLabelImageFilter.h
@@ -162,11 +162,11 @@ public:
 
 protected:
   ChangeLabelImageFilter();
-  virtual ~ChangeLabelImageFilter() {}
+  ~ChangeLabelImageFilter() ITK_OVERRIDE {}
   /** Generate the output information missing */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ChangeLabelImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbChangeNoDataValueFilter.h b/Modules/Filtering/ImageManipulation/include/otbChangeNoDataValueFilter.h
index 2aea702ab130b28b767192ebf034042b7a67dc2d..7ebee3bf6af142e4988746fe8de5e5bddead623f 100644
--- a/Modules/Filtering/ImageManipulation/include/otbChangeNoDataValueFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbChangeNoDataValueFilter.h
@@ -134,10 +134,10 @@ protected:
   ChangeNoDataValueFilter()
   {}
 
-  virtual ~ChangeNoDataValueFilter()
+  ~ChangeNoDataValueFilter() ITK_OVERRIDE
   {}
 
-  virtual void GenerateOutputInformation()
+  void GenerateOutputInformation() ITK_OVERRIDE
   {
     Superclass::GenerateOutputInformation();
 
diff --git a/Modules/Filtering/ImageManipulation/include/otbClampImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbClampImageFilter.h
index 3679dd4446684962cc9d905595711c19638f8ac9..0b5cf4663e25cf2f1715bbca1ed65e7ad300c17a 100644
--- a/Modules/Filtering/ImageManipulation/include/otbClampImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbClampImageFilter.h
@@ -100,8 +100,8 @@ public:
 
 protected:
   ClampImageFilter();
-  virtual ~ClampImageFilter() {};
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ClampImageFilter() ITK_OVERRIDE {};
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** ClampImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -114,9 +114,9 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId );
+                            itk::ThreadIdType threadId ) ITK_OVERRIDE;
 
-  void GenerateOutputInformation(void)
+  void GenerateOutputInformation(void) ITK_OVERRIDE
   {
     Superclass::GenerateOutputInformation();
 
diff --git a/Modules/Filtering/ImageManipulation/include/otbClampVectorImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbClampVectorImageFilter.h
index 900df35a42744956acbdf0ce2c2c66c74ae12043..4f0f4ebf5baea74d373b189f946b6939608771c1 100644
--- a/Modules/Filtering/ImageManipulation/include/otbClampVectorImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbClampVectorImageFilter.h
@@ -102,8 +102,8 @@ public:
 
 protected:
   ClampVectorImageFilter();
-  virtual ~ClampVectorImageFilter() {};
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ClampVectorImageFilter() ITK_OVERRIDE {};
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** ClampVectorImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -116,9 +116,9 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId );
+                            itk::ThreadIdType threadId ) ITK_OVERRIDE;
 
-  void GenerateOutputInformation(void)
+  void GenerateOutputInformation(void) ITK_OVERRIDE
   {
     Superclass::GenerateOutputInformation();
 
diff --git a/Modules/Filtering/ImageManipulation/include/otbConcatenateScalarValueImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbConcatenateScalarValueImageFilter.h
index a4866f222cdb4ca64c80bf8286bba85467245de8..20b4c16b1fc3fabedd2b5f29c5fc164a6568b66c 100644
--- a/Modules/Filtering/ImageManipulation/include/otbConcatenateScalarValueImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbConcatenateScalarValueImageFilter.h
@@ -138,11 +138,11 @@ public:
 protected:
   ConcatenateScalarValueImageFilter();
 
-  virtual ~ConcatenateScalarValueImageFilter() {}
+  ~ConcatenateScalarValueImageFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
   ConcatenateScalarValueImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbConcatenateVectorImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbConcatenateVectorImageFilter.h
index 6e179ae3cf56514f0e909142720d9f4ce94d6e8e..b78bb65531def7b8009cf02afc9958f34d3a3c2d 100644
--- a/Modules/Filtering/ImageManipulation/include/otbConcatenateVectorImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbConcatenateVectorImageFilter.h
@@ -92,13 +92,13 @@ protected:
   /** Constructor. */
   ConcatenateVectorImageFilter();
   /** Destructor. */
-  virtual ~ConcatenateVectorImageFilter();
-  virtual void GenerateOutputInformation();
-  virtual void BeforeThreadedGenerateData();
+  ~ConcatenateVectorImageFilter() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /** Main computation method. */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ConcatenateVectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbEuclideanDistanceMetricWithMissingValue.h b/Modules/Filtering/ImageManipulation/include/otbEuclideanDistanceMetricWithMissingValue.h
index 62bbeff2bb2ac17fbce7c6c4f1b7b9a5597f2189..a2ce996de89ee9fcfba763b18f33d9342f0c7fea 100644
--- a/Modules/Filtering/ImageManipulation/include/otbEuclideanDistanceMetricWithMissingValue.h
+++ b/Modules/Filtering/ImageManipulation/include/otbEuclideanDistanceMetricWithMissingValue.h
@@ -68,13 +68,13 @@ public:
   typedef typename TVector::ValueType ValueType;
 
   /** Gets the distance between the origin and x */
-  double Evaluate(const TVector& x) const
+  double Evaluate(const TVector& x) const ITK_OVERRIDE
   {
     return ::vcl_sqrt(Superclass::Evaluate(x));
   }
 
   /** Gets the distance between x1 and x2 */
-  double Evaluate(const TVector& x1, const TVector& x2) const
+  double Evaluate(const TVector& x1, const TVector& x2) const ITK_OVERRIDE
   {
     return ::vcl_sqrt(Superclass::Evaluate(x1, x2));
   }
@@ -95,7 +95,7 @@ public:
 
 protected:
   EuclideanDistanceMetricWithMissingValue() {}
-  virtual ~EuclideanDistanceMetricWithMissingValue() {}
+  ~EuclideanDistanceMetricWithMissingValue() ITK_OVERRIDE {}
 }; // end of class
 
 } // end namespace statistics
diff --git a/Modules/Filtering/ImageManipulation/include/otbEuclideanDistanceMetricWithMissingValuePow2.h b/Modules/Filtering/ImageManipulation/include/otbEuclideanDistanceMetricWithMissingValuePow2.h
index 6aa3b2e47cc44848247961a76f5844ff5965643b..0acd5e5f32c5e5800c37235794215f7123a7544a 100644
--- a/Modules/Filtering/ImageManipulation/include/otbEuclideanDistanceMetricWithMissingValuePow2.h
+++ b/Modules/Filtering/ImageManipulation/include/otbEuclideanDistanceMetricWithMissingValuePow2.h
@@ -67,10 +67,10 @@ public:
   typedef typename TVector::ValueType ValueType;
 
   /** Gets the distance between the origin and x */
-  double Evaluate(const TVector& x) const;
+  double Evaluate(const TVector& x) const ITK_OVERRIDE;
 
   /** Gets the distance between x1 and x2 */
-  double Evaluate(const TVector& x1, const TVector& x2) const;
+  double Evaluate(const TVector& x1, const TVector& x2) const ITK_OVERRIDE;
 
   /** Gets the cooridnate distance between a and b. NOTE: a and b
   * should be type of component */
@@ -91,7 +91,7 @@ public:
 
 protected:
   EuclideanDistanceMetricWithMissingValuePow2() {}
-  virtual ~EuclideanDistanceMetricWithMissingValuePow2() {}
+  ~EuclideanDistanceMetricWithMissingValuePow2() ITK_OVERRIDE {}
 }; // end of class
 
 } // end namespace statistics
diff --git a/Modules/Filtering/ImageManipulation/include/otbFlexibleDistanceWithMissingValue.h b/Modules/Filtering/ImageManipulation/include/otbFlexibleDistanceWithMissingValue.h
index 2c948872edaced2683511424babdae1b35ab8d41..437189b305c1727813757ca8fca0ecec7e2a4962 100644
--- a/Modules/Filtering/ImageManipulation/include/otbFlexibleDistanceWithMissingValue.h
+++ b/Modules/Filtering/ImageManipulation/include/otbFlexibleDistanceWithMissingValue.h
@@ -71,10 +71,10 @@ public:
   typedef typename TVector::ValueType ValueType;
 
   /** Gets the distance between the origin and x */
-  double Evaluate(const TVector& x) const;
+  double Evaluate(const TVector& x) const ITK_OVERRIDE;
 
   /** Gets the distance between x1 and x2 */
-  double Evaluate(const TVector& x1, const TVector& x2) const;
+  double Evaluate(const TVector& x1, const TVector& x2) const ITK_OVERRIDE;
 
   /** Gets the cooridnate distance between a and b. NOTE: a and b
   * should be type of component */
@@ -99,7 +99,7 @@ public:
 
 protected:
   FlexibleDistanceWithMissingValue() {}
-  virtual ~FlexibleDistanceWithMissingValue() {}
+  ~FlexibleDistanceWithMissingValue() ITK_OVERRIDE {}
 };  // end of class
 
 /** Static variable instanciation */
diff --git a/Modules/Filtering/ImageManipulation/include/otbFunctionWithNeighborhoodToImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbFunctionWithNeighborhoodToImageFilter.h
index 9a6331b18a641bbce69dcfee59622cff88066d07..258362d560a11b78bc0c2abaca8c062adea7bbd8 100644
--- a/Modules/Filtering/ImageManipulation/include/otbFunctionWithNeighborhoodToImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbFunctionWithNeighborhoodToImageFilter.h
@@ -121,11 +121,11 @@ public:
 
 protected:
   FunctionWithNeighborhoodToImageFilter();
-  virtual ~FunctionWithNeighborhoodToImageFilter(){}
+  ~FunctionWithNeighborhoodToImageFilter() ITK_OVERRIDE{}
 
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** SpatialFunctionImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -138,7 +138,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   FunctionWithNeighborhoodToImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbGridResampleImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbGridResampleImageFilter.h
index 30d508aa21c38177bf93e87d11990886f5ed95a5..c33fb06f74d02d91d3d77b090c25d22f1f618af2 100644
--- a/Modules/Filtering/ImageManipulation/include/otbGridResampleImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbGridResampleImageFilter.h
@@ -134,23 +134,23 @@ public:
   void SetOutputParametersFromImage(const ImageBaseType * image);
 
   /** Method Compute the Modified Time based on changed to the components. */
-  itk::ModifiedTimeType GetMTime(void) const;
+  itk::ModifiedTimeType GetMTime(void) const ITK_OVERRIDE;
   
 protected:
   GridResampleImageFilter();
 
   /** Destructor */
-  virtual ~GridResampleImageFilter() {};
+  ~GridResampleImageFilter() ITK_OVERRIDE {};
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
   inline void CastPixelWithBoundsChecking( const InterpolatorOutputType& value,
                                                       const InterpolatorComponentType& minComponent,
@@ -183,7 +183,7 @@ protected:
   }
   
   
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   GridResampleImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbHillShadingFilter.h b/Modules/Filtering/ImageManipulation/include/otbHillShadingFilter.h
index ea5d1367d52d02e831831628634f6f2394eacdf3..ce9c5ed71681544fe7f3589aeb0cfbb5333f5c4d 100644
--- a/Modules/Filtering/ImageManipulation/include/otbHillShadingFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbHillShadingFilter.h
@@ -79,7 +79,7 @@ public:
 
 protected:
   HillShadingFilter() {}
-  virtual ~HillShadingFilter() {}
+  ~HillShadingFilter() ITK_OVERRIDE {}
 
 private:
   HillShadingFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbImageToNoDataMaskFilter.h b/Modules/Filtering/ImageManipulation/include/otbImageToNoDataMaskFilter.h
index a790b37a0ea031c3695ac7fcb8058d313f51e0ea..b05bd243a0a78307636227892f17e04671ee63b8 100644
--- a/Modules/Filtering/ImageManipulation/include/otbImageToNoDataMaskFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbImageToNoDataMaskFilter.h
@@ -130,10 +130,10 @@ protected:
   ImageToNoDataMaskFilter()
   {}
 
-  virtual ~ImageToNoDataMaskFilter()
+  ~ImageToNoDataMaskFilter() ITK_OVERRIDE
   {}
 
-  virtual void BeforeThreadedGenerateData()
+  void BeforeThreadedGenerateData() ITK_OVERRIDE
   {
     std::vector<bool> noDataValueAvailable;
     std::vector<double> noDataValues;
diff --git a/Modules/Filtering/ImageManipulation/include/otbImageToVectorImageCastFilter.h b/Modules/Filtering/ImageManipulation/include/otbImageToVectorImageCastFilter.h
index 06178f8be9aa7eb9975c6f79f6e9a9a68586f222..6f210df1e39940cd9f9dd98c68ad9ba6b2dd2f3f 100644
--- a/Modules/Filtering/ImageManipulation/include/otbImageToVectorImageCastFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbImageToVectorImageCastFilter.h
@@ -93,15 +93,15 @@ protected:
   /// Constructor
   ImageToVectorImageCastFilter() {}
   /// Detructor
-  virtual ~ImageToVectorImageCastFilter() {}
+  ~ImageToVectorImageCastFilter() ITK_OVERRIDE {}
   /// Additionnal output information for allocation
-  virtual void GenerateOutputInformation(void)
+  void GenerateOutputInformation(void) ITK_OVERRIDE
   {
     Superclass::GenerateOutputInformation();
     this->GetOutput()->SetNumberOfComponentsPerPixel(1);
   }
   /// Copy output requested region to input requested region
-  virtual void GenerateInputRequestedRegion(void)
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE
   {
     if (this->GetInput())
       {
diff --git a/Modules/Filtering/ImageManipulation/include/otbLocalGradientVectorImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbLocalGradientVectorImageFilter.h
index bb878ab949685cd5d538878539007f0592ff964e..f9d4e7972c558fe85ad97346c2cf16d93455c9a3 100644
--- a/Modules/Filtering/ImageManipulation/include/otbLocalGradientVectorImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbLocalGradientVectorImageFilter.h
@@ -93,7 +93,7 @@ protected:
     typename Superclass::RadiusType radius = {{1, 1}};
     this->SetRadius( radius );
   }
-  virtual ~LocalGradientVectorImageFilter() { }
+  ~LocalGradientVectorImageFilter() ITK_OVERRIDE { }
 
 private:
   LocalGradientVectorImageFilter( const Self & ); // Not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbLog10ThresholdedImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbLog10ThresholdedImageFilter.h
index 454b11df33b6a8276d70dab2976785a52ae2c060..1c0b10bef7f5b6ba29ed79513328aab88bd8df1e 100644
--- a/Modules/Filtering/ImageManipulation/include/otbLog10ThresholdedImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbLog10ThresholdedImageFilter.h
@@ -101,7 +101,7 @@ public:
   }
 protected:
   Log10ThresholdedImageFilter() {}
-  virtual ~Log10ThresholdedImageFilter() {}
+  ~Log10ThresholdedImageFilter() ITK_OVERRIDE {}
 
 private:
   Log10ThresholdedImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbMatrixImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbMatrixImageFilter.h
index ab3e1d38111e100fb306f9ff6906a165502e06d7..54eb0d350395e2f793d0ab8118de936334a6ae51 100644
--- a/Modules/Filtering/ImageManipulation/include/otbMatrixImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbMatrixImageFilter.h
@@ -108,13 +108,13 @@ public:
 
 protected:
   MatrixImageFilter();
-  virtual ~MatrixImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~MatrixImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /**
    * Before threaded generate data method.
    */
-  void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** MatrixImageFilter can be implemented for a multithreaded filter treatment.
    * Thus, this implementation give the ThreadedGenerateData() method.
@@ -125,7 +125,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData() */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   MatrixImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbMultiplyByScalarImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbMultiplyByScalarImageFilter.h
index 3f6cfbaf029dc5f12eabe1893f95ca00e5604fe7..d58904fcc2cff8698b3d695e782f3c4644be3175 100644
--- a/Modules/Filtering/ImageManipulation/include/otbMultiplyByScalarImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbMultiplyByScalarImageFilter.h
@@ -98,7 +98,7 @@ public:
   }
 protected:
   MultiplyByScalarImageFilter() {}
-  virtual ~MultiplyByScalarImageFilter() {}
+  ~MultiplyByScalarImageFilter() ITK_OVERRIDE {}
 
 private:
   MultiplyByScalarImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbNRIBandImagesToOneNComplexBandsImage.h b/Modules/Filtering/ImageManipulation/include/otbNRIBandImagesToOneNComplexBandsImage.h
index 18f1465b0941b453bd5c9330dda92e2873f69d4f..e2e65d4dfd6aa163a8ec5f55e454c38df57d0cff 100644
--- a/Modules/Filtering/ImageManipulation/include/otbNRIBandImagesToOneNComplexBandsImage.h
+++ b/Modules/Filtering/ImageManipulation/include/otbNRIBandImagesToOneNComplexBandsImage.h
@@ -69,13 +69,13 @@ public:
 
 protected:
   NRIBandImagesToOneNComplexBandsImage();
-  virtual ~NRIBandImagesToOneNComplexBandsImage() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~NRIBandImagesToOneNComplexBandsImage() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void GenerateOutputInformation(void);
-  void BeforeThreadedGenerateData(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE;
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   NRIBandImagesToOneNComplexBandsImage(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbOneRIBandImageToOneComplexBandImage.h b/Modules/Filtering/ImageManipulation/include/otbOneRIBandImageToOneComplexBandImage.h
index 745199721496ff2f6b9797cfa5e031ab3ec4ebde..4a69fab7f0f355cd188f811a88fa0e9d14b5df29 100644
--- a/Modules/Filtering/ImageManipulation/include/otbOneRIBandImageToOneComplexBandImage.h
+++ b/Modules/Filtering/ImageManipulation/include/otbOneRIBandImageToOneComplexBandImage.h
@@ -69,12 +69,12 @@ public:
 
 protected:
   OneRIBandImageToOneComplexBandImage();
-  virtual ~OneRIBandImageToOneComplexBandImage() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~OneRIBandImageToOneComplexBandImage() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void BeforeThreadedGenerateData(void);
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE;
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   OneRIBandImageToOneComplexBandImage(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbPerBandVectorImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbPerBandVectorImageFilter.h
index 7c950734ec9ee0327ed0dac2e32510637dcab489..b249b07a1e9f29bf18cafc47bdca75f2e8acea6a 100644
--- a/Modules/Filtering/ImageManipulation/include/otbPerBandVectorImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbPerBandVectorImageFilter.h
@@ -91,18 +91,18 @@ public:
   itkSetMacro(OutputIndex, unsigned int);
   itkGetMacro(OutputIndex, unsigned int);
 
-  virtual void GenerateInputRequestedRegion(void);
-  virtual void GenerateOutputInformation(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
 protected:
   /** Main computation method */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** Constructor */
   PerBandVectorImageFilter();
   /** Destructor */
-  virtual ~PerBandVectorImageFilter() {}
+  ~PerBandVectorImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   PerBandVectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbPhaseFunctor.h b/Modules/Filtering/ImageManipulation/include/otbPhaseFunctor.h
index 2dd917adb48d7ce19a4b4545172be509f5cab7c3..97acdb2d835aa9a1647d681ba4f699619aeccdf8 100644
--- a/Modules/Filtering/ImageManipulation/include/otbPhaseFunctor.h
+++ b/Modules/Filtering/ImageManipulation/include/otbPhaseFunctor.h
@@ -67,17 +67,17 @@ public:
   }
 
   /** Destructor */
-  virtual ~PhaseFunctor() {}
+  ~PhaseFunctor() ITK_OVERRIDE {}
 
   const char *GetDescription() const
   {return "Phase"; }
 
-  virtual unsigned int GetOutputSize() const
+  unsigned int GetOutputSize() const ITK_OVERRIDE
   {
     return 1;
   }
 
-  virtual OutputPixelType operator ()(const VectorPixelType& inPixel) const
+  OutputPixelType operator ()(const VectorPixelType& inPixel) const ITK_OVERRIDE
   {
     OutputPixelType outPixel;
     outPixel.SetSize(1);
@@ -88,13 +88,13 @@ public:
     return outPixel;
   }
 
-  virtual OutputPixelType operator ()(ScalarType /*inPixel*/) const
+  OutputPixelType operator ()(ScalarType /*inPixel*/) const ITK_OVERRIDE
   {
     //FIXME we don't handle the std::complex<> yet
     itkExceptionMacro(<< "Can't compute amplitude from a scalar value");
   }
 
-  virtual OutputPixelType operator ()(const RGBPixelType& inPixel) const
+  OutputPixelType operator ()(const RGBPixelType& inPixel) const ITK_OVERRIDE
   {
     OutputPixelType outPixel;
     outPixel.SetSize(1);
@@ -106,7 +106,7 @@ public:
     return outPixel;
   }
 
-  virtual OutputPixelType operator ()(const RGBAPixelType& inPixel) const
+  OutputPixelType operator ()(const RGBAPixelType& inPixel) const ITK_OVERRIDE
   {
     OutputPixelType outPixel;
     outPixel.SetSize(1);
diff --git a/Modules/Filtering/ImageManipulation/include/otbPrintableImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbPrintableImageFilter.h
index edf9d121853e160fed27683ba91cb1a3a40ebca3..ad6a93786586f6d4f522f104a6ea3b4d91395080 100644
--- a/Modules/Filtering/ImageManipulation/include/otbPrintableImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbPrintableImageFilter.h
@@ -160,7 +160,7 @@ public:
                itk::ImageToImageFilter);
 
   /** Display */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   void SetChannel(unsigned int channel);
   const ChannelsType GetChannels(void) const;
@@ -231,14 +231,14 @@ public:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 protected:
 
   PrintableImageFilter();
 
   void BeforeGenerateData();
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Filtering/ImageManipulation/include/otbRealAndImaginaryImageToComplexImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbRealAndImaginaryImageToComplexImageFilter.h
index e3aed3ade939c53d7f17c42e0529a4b0de7b408c..570fd2b8c8e62fb7504cbecc0318e69a67e6e679 100644
--- a/Modules/Filtering/ImageManipulation/include/otbRealAndImaginaryImageToComplexImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbRealAndImaginaryImageToComplexImageFilter.h
@@ -113,7 +113,7 @@ public:
 
 protected:
   RealAndImaginaryImageToComplexImageFilter() {}
-  virtual ~RealAndImaginaryImageToComplexImageFilter() {}
+  ~RealAndImaginaryImageToComplexImageFilter() ITK_OVERRIDE {}
 
 private:
   RealAndImaginaryImageToComplexImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbRealImageToComplexImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbRealImageToComplexImageFilter.h
index 9525b667dc36b64a1dfea3aae0c6881cf7b5536d..0316365ac7cf9825176ba1bc764993a127107e1a 100644
--- a/Modules/Filtering/ImageManipulation/include/otbRealImageToComplexImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbRealImageToComplexImageFilter.h
@@ -89,7 +89,7 @@ public:
 
 protected:
   RealImageToComplexImageFilter() {}
-  virtual ~RealImageToComplexImageFilter() {}
+  ~RealImageToComplexImageFilter() ITK_OVERRIDE {}
 
 private:
   RealImageToComplexImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbShiftScaleImageAdaptor.h b/Modules/Filtering/ImageManipulation/include/otbShiftScaleImageAdaptor.h
index 7341aadfc7f8b4c4090db0d3bc7057a947486814..8beb79458e55d14f2d8f424e46e372d78db19e36 100644
--- a/Modules/Filtering/ImageManipulation/include/otbShiftScaleImageAdaptor.h
+++ b/Modules/Filtering/ImageManipulation/include/otbShiftScaleImageAdaptor.h
@@ -163,7 +163,7 @@ public:
 
 protected:
   ShiftScaleImageAdaptor() {}
-  virtual ~ShiftScaleImageAdaptor() {}
+  ~ShiftScaleImageAdaptor() ITK_OVERRIDE {}
 
 private:
   ShiftScaleImageAdaptor(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbShiftScaleVectorImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbShiftScaleVectorImageFilter.h
index 431bd73669855d003eac211273c4166e93e8176f..dd4c382682f818505b42fb0f69a1778582ef30b7 100644
--- a/Modules/Filtering/ImageManipulation/include/otbShiftScaleVectorImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbShiftScaleVectorImageFilter.h
@@ -194,16 +194,16 @@ public:
 
 protected:
   ShiftScaleVectorImageFilter() {}
-  virtual ~ShiftScaleVectorImageFilter() {}
+  ~ShiftScaleVectorImageFilter() ITK_OVERRIDE {}
 
   /** Process to execute before entering the multithreaded section */
-  void BeforeThreadedGenerateData(void);
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE;
 
   /** Generate output information */
-  void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /** Generate input requested region */
-  void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
 private:
   ShiftScaleVectorImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbSpectralAngleDistanceImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbSpectralAngleDistanceImageFilter.h
index b8cf7b4782d1de9083d0ac740cecfcaa88405957..615ccd0349a036cc9c24d33243f8ed27c00adeb6 100644
--- a/Modules/Filtering/ImageManipulation/include/otbSpectralAngleDistanceImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbSpectralAngleDistanceImageFilter.h
@@ -81,9 +81,9 @@ protected:
   /** Constructor */
   SpectralAngleDistanceImageFilter();
   /** Destructor */
-  virtual ~SpectralAngleDistanceImageFilter() {}
+  ~SpectralAngleDistanceImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** SpectralAngleDistanceImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
    * which is called for each processing thread. The output image data is
@@ -95,9 +95,9 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
 private:
   SpectralAngleDistanceImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbSqrtSpectralAngleFunctor.h b/Modules/Filtering/ImageManipulation/include/otbSqrtSpectralAngleFunctor.h
index c2ac2a812a45ed94e366264dc86cd8ce49665b25..89d8089595966d10fda6164fcaf8d79f7ab75a8e 100644
--- a/Modules/Filtering/ImageManipulation/include/otbSqrtSpectralAngleFunctor.h
+++ b/Modules/Filtering/ImageManipulation/include/otbSqrtSpectralAngleFunctor.h
@@ -39,10 +39,10 @@ public:
   typedef SpectralAngleFunctor<TInputVectorPixel, TOutputPixel> Superclass;
 
   SqrtSpectralAngleFunctor() {}
-  virtual ~SqrtSpectralAngleFunctor() {}
+  ~SqrtSpectralAngleFunctor() ITK_OVERRIDE {}
 
 protected:
-  virtual TOutputPixel Evaluate(const TInputVectorPixel& inPix) const
+  TOutputPixel Evaluate(const TInputVectorPixel& inPix) const ITK_OVERRIDE
   {
     return static_cast<TOutputPixel>(vcl_sqrt(Superclass::Evaluate(inPix)));
   }
diff --git a/Modules/Filtering/ImageManipulation/include/otbStreamingInnerProductVectorImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbStreamingInnerProductVectorImageFilter.h
index ddbfb1a5673f75034498d90e8e9a4c34be45f0a0..0208075de2b0b9e57444b6ee3d267cf6013bdee9 100644
--- a/Modules/Filtering/ImageManipulation/include/otbStreamingInnerProductVectorImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbStreamingInnerProductVectorImageFilter.h
@@ -101,16 +101,16 @@ public:
   /** Make a DataObject of the correct type to be used as the specified
    * output.
    */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  virtual void AllocateOutputs();
-  virtual void GenerateOutputInformation();
-  virtual void Synthetize(void);
-  virtual void Reset(void);
+  void AllocateOutputs() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
+  void Reset(void) ITK_OVERRIDE;
 
   /** Enable/Disable center data */
   itkSetMacro(CenterData, bool);
@@ -119,10 +119,10 @@ public:
 
 protected:
   PersistentInnerProductVectorImageFilter();
-  virtual ~PersistentInnerProductVectorImageFilter() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PersistentInnerProductVectorImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Multi-thread version GenerateData. */
-  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PersistentInnerProductVectorImageFilter(const Self &); //purposely not implemented
@@ -216,7 +216,7 @@ protected:
   /** Constructor */
   StreamingInnerProductVectorImageFilter() {};
   /** Destructor */
-  virtual ~StreamingInnerProductVectorImageFilter() {}
+  ~StreamingInnerProductVectorImageFilter() ITK_OVERRIDE {}
 
 private:
   StreamingInnerProductVectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbStreamingMatrixTransposeMatrixImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbStreamingMatrixTransposeMatrixImageFilter.h
index 76d0da2f5f256f5eeaf97f8115c3ca7c266bd07f..e27d535bed4fafbd9c701665cd8c42210e590be5 100644
--- a/Modules/Filtering/ImageManipulation/include/otbStreamingMatrixTransposeMatrixImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbStreamingMatrixTransposeMatrixImageFilter.h
@@ -121,18 +121,18 @@ public:
   /** Make a DataObject of the correct type to be used as the specified
    * output.
    */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  void AllocateOutputs();
-  void GenerateOutputInformation();
+  void AllocateOutputs() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
   // Override since the filter needs all the data for the algorithm
-  virtual void GenerateInputRequestedRegion();
-  virtual void Reset(void);
-  virtual void Synthetize(void);
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
+  void Reset(void) ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
 
   /** Input wrapper */
   void SetFirstInput(const TInputImage  *input1)
@@ -164,10 +164,10 @@ public:
 
 protected:
   PersistentMatrixTransposeMatrixImageFilter();
-  virtual ~PersistentMatrixTransposeMatrixImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PersistentMatrixTransposeMatrixImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Multi-thread version GenerateData. */
-  virtual void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PersistentMatrixTransposeMatrixImageFilter(const Self &); //purposely not implemented
@@ -273,7 +273,7 @@ protected:
   /** Constructor */
   StreamingMatrixTransposeMatrixImageFilter() {};
   /** Destructor */
-  virtual ~StreamingMatrixTransposeMatrixImageFilter() {}
+  ~StreamingMatrixTransposeMatrixImageFilter() ITK_OVERRIDE {}
 
 private:
   StreamingMatrixTransposeMatrixImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbStreamingResampleImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbStreamingResampleImageFilter.h
index 24038a5bb7ff3e5d72be20676a9f034d384e1bad..c888aacb1e70f1854433bb6dd0df4275c14d3b9b 100644
--- a/Modules/Filtering/ImageManipulation/include/otbStreamingResampleImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbStreamingResampleImageFilter.h
@@ -172,19 +172,19 @@ public:
   }
 
   /** Override itk::ProcessObject method to let the internal filter do the propagation */
-  virtual void PropagateRequestedRegion(itk::DataObject *output);
+  void PropagateRequestedRegion(itk::DataObject *output) ITK_OVERRIDE;
 
 protected:
   StreamingResampleImageFilter();
 
   /** Destructor */
-  virtual ~StreamingResampleImageFilter() {};
+  ~StreamingResampleImageFilter() ITK_OVERRIDE {};
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   StreamingResampleImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbStreamingShrinkImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbStreamingShrinkImageFilter.h
index a31571fed74cfa523471bedb3f9d4ae622064038..5a12557a42588f0924c7ebbed068575f489b6c88 100644
--- a/Modules/Filtering/ImageManipulation/include/otbStreamingShrinkImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbStreamingShrinkImageFilter.h
@@ -68,14 +68,14 @@ public:
    *  instance, if the numberOfPieces exceeds the number of pixels along
    *  a certain dimensions, then some splits will not be possible.
    */
-  virtual unsigned int GetNumberOfSplits(const RegionType& region,
-                                         unsigned int requestedNumber);
+  unsigned int GetNumberOfSplits(const RegionType& region,
+                                         unsigned int requestedNumber) ITK_OVERRIDE;
 
   /** Get a region definition that represents the ith piece a specified region.
    * The "numberOfPieces" specified should be less than or equal to what
    * GetNumberOfSplits() returns. */
-  virtual RegionType GetSplit(unsigned int i, unsigned int numberOfPieces,
-                              const RegionType& region);
+  RegionType GetSplit(unsigned int i, unsigned int numberOfPieces,
+                              const RegionType& region) ITK_OVERRIDE;
 
   itkGetMacro(TileSizeAlignment, unsigned int);
   itkSetMacro(TileSizeAlignment, unsigned int);
@@ -87,8 +87,8 @@ public:
 
 protected:
   StreamingShrinkImageRegionSplitter() : m_SplitsPerDimension(0U), m_TileDimension(0), m_TileSizeAlignment(0), m_ShrinkFactor(10) {}
-  virtual ~StreamingShrinkImageRegionSplitter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~StreamingShrinkImageRegionSplitter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   StreamingShrinkImageRegionSplitter(const StreamingShrinkImageRegionSplitter &); //purposely not implemented
@@ -128,7 +128,7 @@ public:
 
   /** Actually computes the stream divisions, according to the specified streaming mode,
    * eventually using the input parameter to estimate memory consumption */
-  virtual void PrepareStreaming(itk::DataObject * input, const RegionType &region);
+  void PrepareStreaming(itk::DataObject * input, const RegionType &region) ITK_OVERRIDE;
 
   void SetShrinkFactor(unsigned int val)
   {
@@ -142,7 +142,7 @@ public:
 
 protected:
   StreamingShrinkStreamingManager();
-  virtual ~StreamingShrinkStreamingManager();
+  ~StreamingShrinkStreamingManager() ITK_OVERRIDE;
 
 private:
   StreamingShrinkStreamingManager(const StreamingShrinkStreamingManager &); //purposely not implemented
@@ -201,9 +201,9 @@ public:
     return m_ShrinkedOutput;
   }
 
-  virtual void Synthetize(void);
+  void Synthetize(void) ITK_OVERRIDE;
 
-  virtual void Reset(void);
+  void Reset(void) ITK_OVERRIDE;
 
   itkSetMacro(ShrinkFactor, unsigned int);
   itkGetMacro(ShrinkFactor, unsigned int);
@@ -211,23 +211,23 @@ public:
 protected:
   PersistentShrinkImageFilter();
 
-  virtual ~PersistentShrinkImageFilter();
+  ~PersistentShrinkImageFilter() ITK_OVERRIDE;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void  BeforeThreadedGenerateData();
+  void  BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Multi-thread version GenerateData. */
-  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  void  AfterThreadedGenerateData();
+  void  AfterThreadedGenerateData() ITK_OVERRIDE;
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  virtual void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 
 private:
@@ -300,7 +300,7 @@ public:
   otbSetObjectMemberMacro(Filter, ShrinkFactor, unsigned int);
   otbGetObjectMemberMacro(Filter, ShrinkFactor, unsigned int);
 
-  virtual void Update(void)
+  void Update(void) ITK_OVERRIDE
   {
     m_StreamingManager->SetShrinkFactor( this->GetFilter()->GetShrinkFactor() );
     Superclass::Update();
@@ -316,7 +316,7 @@ protected:
   }
 
   /** Destructor */
-  virtual ~StreamingShrinkImageFilter() {}
+  ~StreamingShrinkImageFilter() ITK_OVERRIDE {}
 
 private:
   StreamingShrinkImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbThresholdVectorImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbThresholdVectorImageFilter.h
index e0e1e615423060a160fd253477b496c0ffa6d90c..b12b59a6223f805d3b3818521ace0566ad60c913 100644
--- a/Modules/Filtering/ImageManipulation/include/otbThresholdVectorImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbThresholdVectorImageFilter.h
@@ -97,8 +97,8 @@ public:
 
 protected:
   ThresholdVectorImageFilter();
-  virtual ~ThresholdVectorImageFilter() {};
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ThresholdVectorImageFilter() ITK_OVERRIDE {};
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** ThresholdVectorImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -111,9 +111,9 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType ThrethreadId );
+                            itk::ThreadIdType ThrethreadId ) ITK_OVERRIDE;
 
-  void GenerateOutputInformation(void)
+  void GenerateOutputInformation(void) ITK_OVERRIDE
   {
     Superclass::GenerateOutputInformation();
 
diff --git a/Modules/Filtering/ImageManipulation/include/otbTileImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbTileImageFilter.h
index 961936b05d852b885cd088c8d58193cb44f4a454..fc4e81350c53d97dbf66a6695062a551107b6beb 100644
--- a/Modules/Filtering/ImageManipulation/include/otbTileImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbTileImageFilter.h
@@ -77,26 +77,26 @@ protected:
   TileImageFilter();
 
   /** Destructor */
-  virtual ~TileImageFilter();
+  ~TileImageFilter() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** Generate input requested region method */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Generate input requested region method */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Override VerifyInputInformation() since this filter's inputs do
      * not need to occupy the same physical space.
      *
      * \sa ProcessObject::VerifyInputInformation
      */
-  virtual void VerifyInputInformation() {}
+  void VerifyInputInformation() ITK_OVERRIDE {}
 
 
 private:
diff --git a/Modules/Filtering/ImageManipulation/include/otbTwoNRIBandsImageToNComplexBandsImage.h b/Modules/Filtering/ImageManipulation/include/otbTwoNRIBandsImageToNComplexBandsImage.h
index e60a091176e80ff21ba52c3156aa2ba0413b3a13..4f404198e75e10411ae1e24a71e8209b1504c6e5 100644
--- a/Modules/Filtering/ImageManipulation/include/otbTwoNRIBandsImageToNComplexBandsImage.h
+++ b/Modules/Filtering/ImageManipulation/include/otbTwoNRIBandsImageToNComplexBandsImage.h
@@ -69,13 +69,13 @@ public:
 
 protected:
   TwoNRIBandsImageToNComplexBandsImage();
-  virtual ~TwoNRIBandsImageToNComplexBandsImage() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~TwoNRIBandsImageToNComplexBandsImage() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void GenerateOutputInformation(void);
-  void BeforeThreadedGenerateData(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE;
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   TwoNRIBandsImageToNComplexBandsImage(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorNeighborhoodImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorNeighborhoodImageFilter.h
index 8b1f93d2450cfd5be162baf08c2f90ebf466148d..bbe82b4a288262eb237e45d1ac6d1ade526b538d 100644
--- a/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorNeighborhoodImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorNeighborhoodImageFilter.h
@@ -120,7 +120,7 @@ protected:
   /**
    * Destructor
    */
-  virtual ~UnaryFunctorNeighborhoodImageFilter() {}
+  ~UnaryFunctorNeighborhoodImageFilter() ITK_OVERRIDE {}
 
   /** UnaryFunctorNeighborhoodImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -132,12 +132,12 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * Pad the input requested region by radius
    */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
 private:
   UnaryFunctorNeighborhoodImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorNeighborhoodWithOffsetImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorNeighborhoodWithOffsetImageFilter.h
index c9b5d1bd81c7221786b9d45904015f9c22fe3c0e..a552191930b3d288bfb48a9b250e99eb12e5d101 100644
--- a/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorNeighborhoodWithOffsetImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorNeighborhoodWithOffsetImageFilter.h
@@ -130,9 +130,9 @@ protected:
   /**
    * Destructor
    */
-  virtual ~UnaryFunctorNeighborhoodWithOffsetImageFilter() {}
+  ~UnaryFunctorNeighborhoodWithOffsetImageFilter() ITK_OVERRIDE {}
 
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** UnaryFunctorNeighborhoodWithOffsetImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -144,12 +144,12 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * Pad the input requested region by radius
    */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
   std::vector<FunctorType> m_FunctorList;
 
 private:
diff --git a/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorWithIndexImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorWithIndexImageFilter.h
index fdb2713907d792a5b822a8870d1c9050b736c0f6..87f446705136d33c0235eb3117750a50adb88619 100644
--- a/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorWithIndexImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbUnaryFunctorWithIndexImageFilter.h
@@ -108,7 +108,7 @@ protected:
   /**
    * Destructor
    */
-  virtual ~UnaryFunctorWithIndexImageFilter() {}
+  ~UnaryFunctorWithIndexImageFilter() ITK_OVERRIDE {}
 
   /** UnaryFunctorWithIndexImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -120,12 +120,12 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * Pad the input requested region by radius
    */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
 private:
   UnaryFunctorWithIndexImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbUnaryImageFunctorWithVectorImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbUnaryImageFunctorWithVectorImageFilter.h
index cb1a41967b154d88de16c6bcf4c83c7608aefff9..ee86574bd1f3cf91617d6307ab03f1283e10f773 100644
--- a/Modules/Filtering/ImageManipulation/include/otbUnaryImageFunctorWithVectorImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbUnaryImageFunctorWithVectorImageFilter.h
@@ -88,7 +88,7 @@ public:
 
 protected:
   UnaryImageFunctorWithVectorImageFilter();
-  virtual ~UnaryImageFunctorWithVectorImageFilter() {}
+  ~UnaryImageFunctorWithVectorImageFilter() ITK_OVERRIDE {}
 
   /** UnaryImageFunctorWithVectorImageFilter can produce an image which is a different
    * resolution than its input image.  As such, UnaryImageFunctorWithVectorImageFilter
@@ -98,7 +98,7 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** UnaryImageFunctorWithVectorImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -110,9 +110,9 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
-  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** Ponderation declaration*/
diff --git a/Modules/Filtering/ImageManipulation/include/otbVectorImageTo3DScalarImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbVectorImageTo3DScalarImageFilter.h
index 18a45eb160c0e9b95d099bf59339c8f446968732..41f98d0602a38c7b1138738457b3e52f87f89bb0 100644
--- a/Modules/Filtering/ImageManipulation/include/otbVectorImageTo3DScalarImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbVectorImageTo3DScalarImageFilter.h
@@ -71,21 +71,21 @@ public:
 protected:
 
   /** Generate output information */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /** Generate input requested region */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** Threaded Generate data */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** Constructor */
   VectorImageTo3DScalarImageFilter();
   /** Destructor */
-  virtual ~VectorImageTo3DScalarImageFilter() {}
+  ~VectorImageTo3DScalarImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   VectorImageTo3DScalarImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageManipulation/include/otbVectorImageToAmplitudeImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbVectorImageToAmplitudeImageFilter.h
index 4bbb5f79fcf75babe0c06581ced9560828a9e54a..f91d685ce7a96e99bf7ef4fbbfe90859963f558c 100644
--- a/Modules/Filtering/ImageManipulation/include/otbVectorImageToAmplitudeImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbVectorImageToAmplitudeImageFilter.h
@@ -81,9 +81,9 @@ protected:
   /** Constructor */
   VectorImageToAmplitudeImageFilter() {};
   /** Destructor */
-  virtual ~VectorImageToAmplitudeImageFilter() {}
+  ~VectorImageToAmplitudeImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Filtering/ImageManipulation/include/otbVectorRescaleIntensityImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbVectorRescaleIntensityImageFilter.h
index 9c80e7ffd11218691cee1cc0f555c88bb059670d..4c1491f94c3af493337c227e29a738ff1b3f68ac 100644
--- a/Modules/Filtering/ImageManipulation/include/otbVectorRescaleIntensityImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbVectorRescaleIntensityImageFilter.h
@@ -254,20 +254,20 @@ public:
   itkGetConstReferenceMacro(Gamma,double);
 
   /** Process to execute before entering the multithreaded section */
-  void BeforeThreadedGenerateData(void);
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE;
 
   /** Generate output information */
-  void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /** Generate input requested region */
-  void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** Print internal ivars */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 protected:
   VectorRescaleIntensityImageFilter();
-  virtual ~VectorRescaleIntensityImageFilter() {}
+  ~VectorRescaleIntensityImageFilter() ITK_OVERRIDE {}
 
 private:
   VectorRescaleIntensityImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageNoise/include/otbFrostImageFilter.h b/Modules/Filtering/ImageNoise/include/otbFrostImageFilter.h
index 0e54d13b0916e92aa8d5670aa10fcec8a57c1497..0d573ed96dc574806439e0d53bc62b55da14b3ed 100644
--- a/Modules/Filtering/ImageNoise/include/otbFrostImageFilter.h
+++ b/Modules/Filtering/ImageNoise/include/otbFrostImageFilter.h
@@ -95,13 +95,13 @@ public:
   /** To be allowed to use the pipeline method FrostImageFilter needs
     * an input processing area larger than the output one.
     * \sa ImageToImageFilter::GenerateInputRequestedRegion() */
-  virtual void GenerateInputRequestedRegion()
-    throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
 protected:
   FrostImageFilter();
-  virtual ~FrostImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~FrostImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** FrostImageFilter can be implemented for a multithreaded filter treatment.
    * Thus, this implementation give the ThreadedGenerateData() method.
@@ -112,7 +112,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData() */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   FrostImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageNoise/include/otbGammaMAPImageFilter.h b/Modules/Filtering/ImageNoise/include/otbGammaMAPImageFilter.h
index a3fcfd4dcd74a7723d9f90d4188d87d247f1dd4b..85c342bdeab4180533435220e84ce68840313950 100644
--- a/Modules/Filtering/ImageNoise/include/otbGammaMAPImageFilter.h
+++ b/Modules/Filtering/ImageNoise/include/otbGammaMAPImageFilter.h
@@ -87,19 +87,19 @@ public:
    * in order to inform the pipeline execution model.
    *
    * \sa ImageToImageFilter::GenerateInputRequestedRegion() */
-  virtual void GenerateInputRequestedRegion()
-    throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
 protected:
   GammaMAPImageFilter();
-  virtual ~GammaMAPImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~GammaMAPImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** GammaMAPImageFilter can be multithreaded.
    */
   
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   GammaMAPImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageNoise/include/otbKuanImageFilter.h b/Modules/Filtering/ImageNoise/include/otbKuanImageFilter.h
index 9008cce9b2ab75e5b63d5b37d48f92fee515d405..3710eb225990a89f3f7777fecd15049a86ccbca8 100644
--- a/Modules/Filtering/ImageNoise/include/otbKuanImageFilter.h
+++ b/Modules/Filtering/ImageNoise/include/otbKuanImageFilter.h
@@ -87,19 +87,19 @@ public:
    * in order to inform the pipeline execution model.
    *
    * \sa ImageToImageFilter::GenerateInputRequestedRegion() */
-  virtual void GenerateInputRequestedRegion()
-    throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
 protected:
   KuanImageFilter();
-  virtual ~KuanImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~KuanImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** KuanImageFilter can be multithreaded.
    */
   
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   KuanImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/ImageNoise/include/otbLeeImageFilter.h b/Modules/Filtering/ImageNoise/include/otbLeeImageFilter.h
index b6e6f6963f81b1f6670a9111d68a3fc6aa088b40..735c26664ba4327a42bad056b2432bca7fd49059 100644
--- a/Modules/Filtering/ImageNoise/include/otbLeeImageFilter.h
+++ b/Modules/Filtering/ImageNoise/include/otbLeeImageFilter.h
@@ -94,13 +94,13 @@ public:
    * in order to inform the pipeline execution model.
    *
    * \sa ImageToImageFilter::GenerateInputRequestedRegion() */
-  virtual void GenerateInputRequestedRegion()
-    throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
 protected:
   LeeImageFilter();
-  virtual ~LeeImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LeeImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** LeeImageFilter can be multithreaded.
    * As such, it provides a definition of ThreadedGenerateData()
@@ -113,7 +113,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData() */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   LeeImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/MathParser/include/otbBandMathImageFilter.h b/Modules/Filtering/MathParser/include/otbBandMathImageFilter.h
index 5e15182a9e3af66eb0b2f9a57c5e9c567bb04007..d83ce8c735e72603f9baa0d6ebbc402c072ffe0c 100644
--- a/Modules/Filtering/MathParser/include/otbBandMathImageFilter.h
+++ b/Modules/Filtering/MathParser/include/otbBandMathImageFilter.h
@@ -127,12 +127,12 @@ public:
 
 protected :
   BandMathImageFilter();
-  virtual ~BandMathImageFilter();
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~BandMathImageFilter() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void BeforeThreadedGenerateData();
-  void ThreadedGenerateData(const ImageRegionType& outputRegionForThread, itk::ThreadIdType threadId );
-  void AfterThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
+  void ThreadedGenerateData(const ImageRegionType& outputRegionForThread, itk::ThreadIdType threadId ) ITK_OVERRIDE;
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
 private :
   BandMathImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/MathParser/include/otbMaskMuParserFilter.h b/Modules/Filtering/MathParser/include/otbMaskMuParserFilter.h
index ebf63c6cf36f6c1dcf164dc72edb3ac4c7c3109c..c0c95a84b5440a8541864cff26781405a9011a04 100644
--- a/Modules/Filtering/MathParser/include/otbMaskMuParserFilter.h
+++ b/Modules/Filtering/MathParser/include/otbMaskMuParserFilter.h
@@ -119,12 +119,12 @@ public:
 
 protected:
   MaskMuParserFilter();
-  virtual ~MaskMuParserFilter();
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~MaskMuParserFilter() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void BeforeThreadedGenerateData();
-  void ThreadedGenerateData(const OutputImageRegionType &outputRegionForThread, itk::ThreadIdType threadId);
-  void AfterThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
+  void ThreadedGenerateData(const OutputImageRegionType &outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
 private:
   MaskMuParserFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/MathParser/include/otbMaskMuParserFunctor.h b/Modules/Filtering/MathParser/include/otbMaskMuParserFunctor.h
index 9ba384f7f0084f043b206f3507ce8f8056d93184..1e0dfd653d0dae984d8616ec5974111550895167 100644
--- a/Modules/Filtering/MathParser/include/otbMaskMuParserFunctor.h
+++ b/Modules/Filtering/MathParser/include/otbMaskMuParserFunctor.h
@@ -97,7 +97,7 @@ public:
 protected:
   MaskMuParserFunctor();
 
-  virtual ~MaskMuParserFunctor();
+  ~MaskMuParserFunctor() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Filtering/MathParser/include/otbParser.h b/Modules/Filtering/MathParser/include/otbParser.h
index 0fa8ce7894cf741a668286255eed30845843061a..0fdfa42056b28c20b17b8511f2520aafe66069ed 100644
--- a/Modules/Filtering/MathParser/include/otbParser.h
+++ b/Modules/Filtering/MathParser/include/otbParser.h
@@ -86,8 +86,8 @@ public:
 
 protected:
   Parser();
-  virtual ~Parser();
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~Parser() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.h b/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.h
index eb8a373b9f26ee8afaeaf442701d1b7a62658ae1..0609523f83a64359203040a3df5f07eae2bb5d49 100644
--- a/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.h
+++ b/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.h
@@ -84,7 +84,7 @@ public:
 
   typedef std::vector<PrecisionType>                  OutputType;
 
-  virtual OutputType Evaluate( const DataNodeType& node ) const;
+  OutputType Evaluate( const DataNodeType& node ) const ITK_OVERRIDE;
 
   std::string GetExpression() const
   {
@@ -103,8 +103,8 @@ public:
 
 protected:
   ParserConditionDataNodeFeatureFunction();
-  virtual ~ParserConditionDataNodeFeatureFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ParserConditionDataNodeFeatureFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ParserConditionDataNodeFeatureFunction(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/MathParser/src/otbParser.cxx b/Modules/Filtering/MathParser/src/otbParser.cxx
index fafd8f946a3e37dc496652bfb33422545a256168..b7f3f32de027a4a81af8616f07ab8d350199ac02 100644
--- a/Modules/Filtering/MathParser/src/otbParser.cxx
+++ b/Modules/Filtering/MathParser/src/otbParser.cxx
@@ -180,11 +180,11 @@ protected:
     InitConst();
   }
 
-  virtual ~ParserImpl()
+  ~ParserImpl() ITK_OVERRIDE
   {
   }
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Filtering/MathParserX/include/otbBandMathXImageFilter.h b/Modules/Filtering/MathParserX/include/otbBandMathXImageFilter.h
index f259390e069da651bf223a463dcca5eef435010d..0b25ef56bafbeb21d3fb6ba5077cee0826305254 100644
--- a/Modules/Filtering/MathParserX/include/otbBandMathXImageFilter.h
+++ b/Modules/Filtering/MathParserX/include/otbBandMathXImageFilter.h
@@ -131,15 +131,15 @@ public:
 
 protected :
   BandMathXImageFilter();
-  virtual ~BandMathXImageFilter();
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~BandMathXImageFilter() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void GenerateOutputInformation();
-  void GenerateInputRequestedRegion();
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
-  void BeforeThreadedGenerateData();
-  void ThreadedGenerateData(const ImageRegionType& outputRegionForThread, itk::ThreadIdType threadId );
-  void AfterThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
+  void ThreadedGenerateData(const ImageRegionType& outputRegionForThread, itk::ThreadIdType threadId ) ITK_OVERRIDE;
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
 private :
 
diff --git a/Modules/Filtering/MathParserX/include/otbParserX.h b/Modules/Filtering/MathParserX/include/otbParserX.h
index aad7ecf867bd01d36f54cffe921a584f16497ea5..f2235e50207e5bf5b21e12faafdaae86a9d5e285 100644
--- a/Modules/Filtering/MathParserX/include/otbParserX.h
+++ b/Modules/Filtering/MathParserX/include/otbParserX.h
@@ -93,8 +93,8 @@ public:
 
 protected:
   ParserX();
-  virtual ~ParserX();
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ParserX() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Filtering/MathParserX/include/otbParserXPlugins.h b/Modules/Filtering/MathParserX/include/otbParserXPlugins.h
index cf557ec36a835666e38ff7e695776faab82c1471..2026a95f169b7e55d9e4173ce01d19ed5c3f7632 100644
--- a/Modules/Filtering/MathParserX/include/otbParserXPlugins.h
+++ b/Modules/Filtering/MathParserX/include/otbParserXPlugins.h
@@ -33,14 +33,14 @@ public:
     bands():ICallback(mup::cmFUNC, "bands", 2)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "bands - A bands selector";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new bands(*this);
     }
@@ -53,14 +53,14 @@ public:
     dotpr():ICallback(mup::cmFUNC, "dotpr", -1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "dotpr(m1,m2) - A vector/matrix dot product";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new dotpr(*this);
     }
@@ -72,14 +72,14 @@ class ElementWiseDivision : public mup::IOprtBin
     ElementWiseDivision():IOprtBin(_T("div"), (int)(mup::prMUL_DIV), mup::oaLEFT)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int) ITK_OVERRIDE;
 
-    virtual const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return _T("x div y - Element-wise division (vectors / matrices)");
     }
   
-    virtual mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new ElementWiseDivision(*this);
     }
@@ -92,14 +92,14 @@ class DivisionByScalar : public mup::IOprtBin
     DivisionByScalar():IOprtBin(_T("dv"), (int)(mup::prMUL_DIV), mup::oaLEFT)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int) ITK_OVERRIDE;
 
-    virtual const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return _T("x dv y - division of vectors / matrices by a scalar");
     }
   
-    virtual mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new DivisionByScalar(*this);
     }
@@ -112,14 +112,14 @@ class ElementWiseMultiplication : public mup::IOprtBin
     ElementWiseMultiplication():IOprtBin(_T("mult"), (int)(mup::prMUL_DIV), mup::oaLEFT)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int) ITK_OVERRIDE;
 
-    virtual const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return _T("x mult y - Element wise multiplication (vectors / matrices)");
     }
   
-    virtual mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new ElementWiseMultiplication(*this);
     }
@@ -132,14 +132,14 @@ class MultiplicationByScalar : public mup::IOprtBin
     MultiplicationByScalar():IOprtBin(_T("mlt"), (int)(mup::prMUL_DIV), mup::oaLEFT)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int) ITK_OVERRIDE;
 
-    virtual const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return _T("x mlt y - multiplication of vectors / matrices by a scalar");
     }
   
-    virtual mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new MultiplicationByScalar(*this);
     }
@@ -152,14 +152,14 @@ public:
     ElementWisePower():IOprtBin(_T("pow"), (int) mup::prPOW, mup::oaRIGHT)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return _T("pow - Power for noncomplex vectors & matrices");
     }
 
-    virtual mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new ElementWisePower(*this);
     }
@@ -172,14 +172,14 @@ class PowerByScalar : public mup::IOprtBin
     PowerByScalar():IOprtBin(_T("pw"), (int)(mup::prMUL_DIV), mup::oaLEFT)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int) ITK_OVERRIDE;
 
-    virtual const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return _T("x pw y - power of vectors / matrices by a scalar");
     }
   
-    virtual mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new PowerByScalar(*this);
     }
@@ -192,14 +192,14 @@ public:
     ndvi():ICallback(mup::cmFUNC, "ndvi", 2)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "NDVI - Normalized Difference Vegetation Index";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new ndvi(*this);
     }
@@ -212,14 +212,14 @@ public:
     cat():ICallback(mup::cmFUNC, "cat", -1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "cat(m1,m2) - Values concatenation";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new cat(*this);
     }
@@ -232,14 +232,14 @@ public:
     mean():ICallback(mup::cmFUNC, "mean", -1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "mean(m1,m2,..) - mean of each neighborhood";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new mean(*this);
     }
@@ -252,14 +252,14 @@ public:
     var():ICallback(mup::cmFUNC, "var", -1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "var(m1,m2,..) - variance of each neighborhood";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new var(*this);
     }
@@ -272,14 +272,14 @@ public:
     corr():ICallback(mup::cmFUNC, "corr", 2)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "corr(m1,m2) - variance of two variables m1 and m2";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new corr(*this);
     }
@@ -292,14 +292,14 @@ public:
     median():ICallback(mup::cmFUNC, "median", -1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "median(m1,m2,..) - median value of each neighborhood";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new median(*this);
     }
@@ -312,14 +312,14 @@ public:
     maj():ICallback(mup::cmFUNC, "maj", -1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "maj(m1,m2,..) - majority value of each neighborhood";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new maj(*this);
     }
@@ -332,14 +332,14 @@ public:
     vnorm():ICallback(mup::cmFUNC, "vnorm", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc);
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int a_iArgc) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vnorm(v1) - Norm for a vector : sqrt(sum of squared elements); works also with matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vnorm(*this);
     }
@@ -351,14 +351,14 @@ public:
     vmin():ICallback(mup::cmFUNC, "vmin", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vmin(m1) - overall minimun";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vmin(*this);
     }
@@ -371,14 +371,14 @@ public:
     vmax():ICallback(mup::cmFUNC, "vmax", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vmax(m1) - overall maximun";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vmax(*this);
     }
@@ -391,14 +391,14 @@ public:
     vect2scal():ICallback(mup::cmFUNC, "vect2scal", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vect2scal - Convert one dimensional vector to scalar";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vect2scal(*this);
     }
@@ -412,14 +412,14 @@ public:
     vcos():ICallback(mup::cmFUNC, "vcos", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vcos - Cosinus for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vcos(*this);
     }
@@ -432,14 +432,14 @@ public:
     vacos():ICallback(mup::cmFUNC, "vacos", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vacos - Arccosinus for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vacos(*this);
     }
@@ -451,14 +451,14 @@ public:
     vsin():ICallback(mup::cmFUNC, "vsin", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vsin - Sinus for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vsin(*this);
     }
@@ -470,14 +470,14 @@ public:
     vasin():ICallback(mup::cmFUNC, "vasin", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vasin - Arcsinus for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vasin(*this);
     }
@@ -490,14 +490,14 @@ public:
     vtan():ICallback(mup::cmFUNC, "vtan", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vtan - Tangent for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vtan(*this);
     }
@@ -510,14 +510,14 @@ public:
     vatan():ICallback(mup::cmFUNC, "vatan", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vatan - Arctangent for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vatan(*this);
     }
@@ -530,14 +530,14 @@ public:
     vtanh():ICallback(mup::cmFUNC, "vtanh", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vtanh - Hyperbolic tangent for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vtanh(*this);
     }
@@ -550,14 +550,14 @@ public:
     vsinh():ICallback(mup::cmFUNC, "vsinh", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vsinh - Hyperbolic sinus for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vsinh(*this);
     }
@@ -570,14 +570,14 @@ public:
     vcosh():ICallback(mup::cmFUNC, "vcosh", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vcosh - Hyperbolic cosinus for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vcosh(*this);
     }
@@ -590,14 +590,14 @@ public:
     vlog():ICallback(mup::cmFUNC, "vlog", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vlog - Log for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vlog(*this);
     }
@@ -610,14 +610,14 @@ public:
     vlog10():ICallback(mup::cmFUNC, "vlog10", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vlog10 - Log10 for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vlog10(*this);
     }
@@ -630,14 +630,14 @@ public:
     vabs():ICallback(mup::cmFUNC, "vabs", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vabs - Absolute value for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vabs(*this);
     }
@@ -650,14 +650,14 @@ public:
     vexp():ICallback(mup::cmFUNC, "vexp", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vexp - Exponential for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vexp(*this);
     }
@@ -670,14 +670,14 @@ public:
     vsqrt():ICallback(mup::cmFUNC, "vsqrt", 1)
     {}
 
-    virtual void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc));
+    void Eval(mup::ptr_val_type &ret, const mup::ptr_val_type *a_pArg, int itkNotUsed(a_iArgc)) ITK_OVERRIDE;
 
-    const mup::char_type* GetDesc() const
+    const mup::char_type* GetDesc() const ITK_OVERRIDE
     {
       return "vsqrt - Sqrt for noncomplex vectors & matrices";
     }
 
-    mup::IToken* Clone() const
+    mup::IToken* Clone() const ITK_OVERRIDE
     {
       return new vsqrt(*this);
     }
diff --git a/Modules/Filtering/MathParserX/src/otbParserX.cxx b/Modules/Filtering/MathParserX/src/otbParserX.cxx
index f7ed3240eccd5f3609d2aa08a3160e1797450f51..9a3ccd26fa25c541723b35cb0ebd9cdf4839f72b 100644
--- a/Modules/Filtering/MathParserX/src/otbParserX.cxx
+++ b/Modules/Filtering/MathParserX/src/otbParserX.cxx
@@ -232,11 +232,11 @@ protected:
     InitConst();
   }
 
-  virtual ~ParserXImpl()
+  ~ParserXImpl() ITK_OVERRIDE
   {
   }
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.h
index f8bd0adb2a4645022162c662ec43a9a65f5b3c27..e82874d20a0ade0f67939ac386c29a9b5fff40d0 100644
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.h
+++ b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.h
@@ -90,7 +90,7 @@ public:
    * Get The Analyse image at each level of the pyramid.
    * \return The analysed image at each level of the pyramid.
    */
-  OutputImageListType* GetOutput(void);
+  OutputImageListType* GetOutput(void) ITK_OVERRIDE;
   /**
    * Get The SupFilter details
    * \return The brighter details extracted from the filtering operation.
@@ -116,12 +116,12 @@ protected:
   /** Constructor */
   MorphologicalPyramidAnalysisFilter();
   /** Destructor */
-  virtual ~MorphologicalPyramidAnalysisFilter();
-  virtual void GenerateOutputInformation() {}  // does nothing
+  ~MorphologicalPyramidAnalysisFilter() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE {}  // does nothing
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** Printself method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** Number of levels of the algorithm */
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.h
index ed0d020562cb47b20b14643ccaad873042ba2661..9c91a2476be5aa630079ff543e67b3e4382222c0 100644
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.h
+++ b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.h
@@ -68,7 +68,7 @@ public:
    * \param imageList The analysed image at each level of the pyramid.
    */
   using Superclass::SetInput;
-  void SetInput(const InputImageListType * imageList);
+  void SetInput(const InputImageListType * imageList) ITK_OVERRIDE;
   /**
    * Set The SupFilter details
    * \param imageList The brighter details extracted from the filtering operation.
@@ -93,7 +93,7 @@ public:
    * Get the input list.
    * \return The list of the analysed image at each pyramid level.
    */
-  InputImageListType* GetInput(void);
+  InputImageListType* GetInput(void) ITK_OVERRIDE;
   /**
    * Get The SupFilter details
    * \return The brighter details extracted from the filtering operation.
@@ -119,7 +119,7 @@ public:
    * \return The analysed image at each pyramid level
    * resampled at full resolution.
    */
-  OutputImageListType* GetOutput(void);
+  OutputImageListType* GetOutput(void) ITK_OVERRIDE;
   /**
    * Get The SupFilter details at full resolution.
    * \return The brighter details extracted from the filtering operation
@@ -149,12 +149,12 @@ protected:
   /** Constructor */
   MRToMSConverter();
   /** Destructor */
-  ~MRToMSConverter() {}
+  ~MRToMSConverter() ITK_OVERRIDE {}
 
   /** Main computation method */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   MRToMSConverter(const Self &); // purposely not implemented
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.h
index 83c831fae5c34025eba711ff1d753a9589af7265..a10a7297710253097ee7e0dc2a36a2481b695fbb 100644
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.h
+++ b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.h
@@ -74,17 +74,17 @@ protected:
   /** Constructor */
   Resampler();
   /** Destructor */
-  virtual ~Resampler() {}
+  ~Resampler() ITK_OVERRIDE {}
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
   /** Configure input requested region to be the largest possible region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
   /** Configure output requested region to be the largest possible region */
-  virtual void EnlargeOutputRequestedRegion(itk::DataObject * itkNotUsed(output));
+  void EnlargeOutputRequestedRegion(itk::DataObject * itkNotUsed(output)) ITK_OVERRIDE;
   /** Main computation method */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 private:
   Resampler(const Self &); // purposely not implemented
   void operator =(const Self&); // purposely not implemented
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.h
index 08e8e2b3ac92449278583dd26d3ae16d7abb8bd9..2158062e178a2640da20f70707b7df760898d988 100644
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.h
+++ b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.h
@@ -138,12 +138,12 @@ protected:
   /** Constructor */
   MorphologicalPyramidSegmentationFilter();
   /** Destructor */
-  virtual ~MorphologicalPyramidSegmentationFilter();
-  virtual void GenerateOutputInformation() {}  // does nothing
+  ~MorphologicalPyramidSegmentationFilter() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE {}  // does nothing
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** Printself method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 private:
   unsigned long m_MinimumObjectSize;
   /** Quantile for seeds determination */
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.h
index 97ab6a777b7580cab87b2d091d7e4ff5b986b198..044d516170d750e1106212247c8fbad61b595176 100644
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.h
+++ b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.h
@@ -117,15 +117,15 @@ protected:
   /** Constructor */
   Segmenter();
   /** Destructor */
-  ~Segmenter() {}
+  ~Segmenter() ITK_OVERRIDE {}
   /** Main computation method */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * Configure the input datas.
    */
-  void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
   /**
    * Configure the output data.
    */
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.h
index 904786e17bbb17fb57afcf981dae8de9df338f01..187c7ef39782ce1388202dcdaa17de72249d2a80 100644
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.h
+++ b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.h
@@ -125,12 +125,12 @@ protected:
   /** Constructor */
   MorphologicalPyramidSynthesisFilter();
   /** Destructor */
-  virtual ~MorphologicalPyramidSynthesisFilter();
-  virtual void GenerateOutputInformation() {}  // does nothing
+  ~MorphologicalPyramidSynthesisFilter() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE {}  // does nothing
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** Printself method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 };
 } // End namespace otb
 
diff --git a/Modules/Filtering/Path/include/otbCompacityPathFunction.h b/Modules/Filtering/Path/include/otbCompacityPathFunction.h
index 52d5eb9f6fcebf9366f90442a9223fa7b6f1e1d3..ea3a86fa8f93ee905d9e94c183531413cd0d9900 100644
--- a/Modules/Filtering/Path/include/otbCompacityPathFunction.h
+++ b/Modules/Filtering/Path/include/otbCompacityPathFunction.h
@@ -67,13 +67,13 @@ public:
   typedef double RealType;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PathType& path) const;
+  OutputType Evaluate(const PathType& path) const ITK_OVERRIDE;
   virtual OutputType Evaluate() const;
 
 protected:
   CompacityPathFunction() {};
-  virtual ~CompacityPathFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~CompacityPathFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   CompacityPathFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Filtering/Path/include/otbDrawPathFilter.h b/Modules/Filtering/Path/include/otbDrawPathFilter.h
index 670203f4dcb95a752b3650817305cc29ab7fe89b..afe2940495ab5929f7a2bcbf5d5feba2913d22d6 100644
--- a/Modules/Filtering/Path/include/otbDrawPathFilter.h
+++ b/Modules/Filtering/Path/include/otbDrawPathFilter.h
@@ -87,10 +87,10 @@ public:
 
 protected:
   DrawPathFilter();
-  virtual ~DrawPathFilter() {}
+  ~DrawPathFilter() ITK_OVERRIDE {}
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  virtual void GenerateData();
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   DrawPathFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Path/include/otbDrawPathListFilter.h b/Modules/Filtering/Path/include/otbDrawPathListFilter.h
index bdeb1565ea23459a00d49c035fa229a97d1d872e..81ee894534e57106aa2f661e41d69807e5bb7373 100644
--- a/Modules/Filtering/Path/include/otbDrawPathListFilter.h
+++ b/Modules/Filtering/Path/include/otbDrawPathListFilter.h
@@ -108,11 +108,11 @@ protected:
   /** Constructor */
   DrawPathListFilter();
   /** Desctructor */
-  virtual ~DrawPathListFilter() {}
+  ~DrawPathListFilter() ITK_OVERRIDE {}
   /** Printself method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   DrawPathListFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Path/include/otbImageFittingPolygonListFilter.h b/Modules/Filtering/Path/include/otbImageFittingPolygonListFilter.h
index f54a400d5c6c4fa25c73e2830e8b790da518edb4..4e8af8afce1f8a7cb35546ea36a002ffe5a50d20 100644
--- a/Modules/Filtering/Path/include/otbImageFittingPolygonListFilter.h
+++ b/Modules/Filtering/Path/include/otbImageFittingPolygonListFilter.h
@@ -91,11 +91,11 @@ protected:
   /** Constructor */
   ImageFittingPolygonListFilter();
   /** Destructor */
-  virtual ~ImageFittingPolygonListFilter() {}
+  ~ImageFittingPolygonListFilter() ITK_OVERRIDE {}
   /** GenerateData method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   virtual double computeValue(ImageConstPointerType image,
                               VertexType middlePoint,
diff --git a/Modules/Filtering/Path/include/otbImageToEdgePathFilter.h b/Modules/Filtering/Path/include/otbImageToEdgePathFilter.h
index 69b9a335d7ccea0ce0fa50c45dd2044708007a14..cd514094eca9d1fb0c4cb59d8f4ea619d62fba22 100644
--- a/Modules/Filtering/Path/include/otbImageToEdgePathFilter.h
+++ b/Modules/Filtering/Path/include/otbImageToEdgePathFilter.h
@@ -82,10 +82,10 @@ public:
 
 protected:
   ImageToEdgePathFilter();
-  virtual ~ImageToEdgePathFilter() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  virtual void GenerateOutputInformation() {}  //does nothing
-  virtual void GenerateData();
+  ~ImageToEdgePathFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE {}  //does nothing
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   ImageToEdgePathFilter(const Self &); // purposely not implemented
diff --git a/Modules/Filtering/Path/include/otbImageToPathFilter.h b/Modules/Filtering/Path/include/otbImageToPathFilter.h
index 436856831acb774cddf7c75f507604e461c4f788..66a68f0571bbe8a42fb7f73ee9464cdef0d71d08 100644
--- a/Modules/Filtering/Path/include/otbImageToPathFilter.h
+++ b/Modules/Filtering/Path/include/otbImageToPathFilter.h
@@ -58,8 +58,8 @@ public:
 
 protected:
   ImageToPathFilter();
-  virtual ~ImageToPathFilter() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageToPathFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageToPathFilter(const Self &);
diff --git a/Modules/Filtering/Path/include/otbImageToPathListFilter.h b/Modules/Filtering/Path/include/otbImageToPathListFilter.h
index 535362cd81b704f65019f34644488ed6233691f7..11bd6bb1b39c808b2617a62032f0a5ec2038d64e 100644
--- a/Modules/Filtering/Path/include/otbImageToPathListFilter.h
+++ b/Modules/Filtering/Path/include/otbImageToPathListFilter.h
@@ -73,9 +73,9 @@ public:
 
 protected:
   ImageToPathListFilter();
-  virtual ~ImageToPathListFilter() {}
+  ~ImageToPathListFilter() ITK_OVERRIDE {}
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageToPathListFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Path/include/otbOrientationPathFunction.h b/Modules/Filtering/Path/include/otbOrientationPathFunction.h
index e1b1b19ff89ff57624b3377324baa20d7164ea3f..eae5641c6b7c2d9636434d1a7ae36904f5f7455c 100644
--- a/Modules/Filtering/Path/include/otbOrientationPathFunction.h
+++ b/Modules/Filtering/Path/include/otbOrientationPathFunction.h
@@ -63,13 +63,13 @@ public:
   typedef double RealType;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PathType& path) const;
+  OutputType Evaluate(const PathType& path) const ITK_OVERRIDE;
   virtual OutputType Evaluate() const;
 
 protected:
   OrientationPathFunction() {};
-  virtual ~OrientationPathFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~OrientationPathFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   OrientationPathFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Filtering/Path/include/otbPathFunction.h b/Modules/Filtering/Path/include/otbPathFunction.h
index 568007a1da1178179e3178cb7ad1a01e014118a3..9715674577b715aa92decee6b16f63b070cf310c 100644
--- a/Modules/Filtering/Path/include/otbPathFunction.h
+++ b/Modules/Filtering/Path/include/otbPathFunction.h
@@ -77,8 +77,8 @@ public:
 
 protected:
   PathFunction();
-  virtual ~PathFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PathFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   InputPathConstPointer m_Path;
 
diff --git a/Modules/Filtering/Path/include/otbPathListSource.h b/Modules/Filtering/Path/include/otbPathListSource.h
index 766a2b5eb7018a63bfe6ea51c77c67f0cb0b5fd5..bc3ac50fb440620d42030ed26b2862551c16a273 100644
--- a/Modules/Filtering/Path/include/otbPathListSource.h
+++ b/Modules/Filtering/Path/include/otbPathListSource.h
@@ -169,7 +169,7 @@ public:
 
 protected:
   PathListSource() {};
-  virtual ~PathListSource() {}
+  ~PathListSource() ITK_OVERRIDE {}
 //   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 private:
diff --git a/Modules/Filtering/Path/include/otbPathListToHistogramGenerator.h b/Modules/Filtering/Path/include/otbPathListToHistogramGenerator.h
index e9c7fdbf0aac48725df9a6a1d85499dfbdabea6f..490183f2b27d437a5837c93d6b72516b202479b6 100644
--- a/Modules/Filtering/Path/include/otbPathListToHistogramGenerator.h
+++ b/Modules/Filtering/Path/include/otbPathListToHistogramGenerator.h
@@ -114,12 +114,12 @@ public:
 
 protected:
   PathListToHistogramGenerator();
-  virtual ~PathListToHistogramGenerator() {}
-  virtual void GenerateData();
-  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType);
+  ~PathListToHistogramGenerator() ITK_OVERRIDE {}
+  void GenerateData() ITK_OVERRIDE;
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Filtering/Path/include/otbPathListToPathListFilter.h b/Modules/Filtering/Path/include/otbPathListToPathListFilter.h
index 53a38c2c11c5f3c253421910b46b678f64845ec7..8d746b57ccb08d2176b430946c23c38908c2df78 100644
--- a/Modules/Filtering/Path/include/otbPathListToPathListFilter.h
+++ b/Modules/Filtering/Path/include/otbPathListToPathListFilter.h
@@ -60,7 +60,7 @@ protected:
   /** Constructor */
   PathListToPathListFilter() {};
   /** Destructor */
-  virtual ~PathListToPathListFilter() {}
+  ~PathListToPathListFilter() ITK_OVERRIDE {}
 
 private:
   PathListToPathListFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Path/include/otbPolyLineImageIterator.h b/Modules/Filtering/Path/include/otbPolyLineImageIterator.h
index 6431149cd6971740e0f9325e087782ee8f81ebb7..5c33640bb57e05ce214f0a7b6250d9324fc803e6 100644
--- a/Modules/Filtering/Path/include/otbPolyLineImageIterator.h
+++ b/Modules/Filtering/Path/include/otbPolyLineImageIterator.h
@@ -92,7 +92,7 @@ public:
   PolyLineImageIterator(ImageType * imagePtr, PathType * pathPtr)
     : Superclass(imagePtr, pathPtr) {};
   /** Default Destructor. */
-  virtual ~PolyLineImageIterator() {}
+  ~PolyLineImageIterator() ITK_OVERRIDE {}
 };
 } // End namespace otb
 
diff --git a/Modules/Filtering/Path/include/otbRegionImageToRectangularPathListFilter.h b/Modules/Filtering/Path/include/otbRegionImageToRectangularPathListFilter.h
index a402cb52b1e05b5ce101d644f5d8ac56463b2d10..ae2c918d80720c9e2197d2084f5a6854a57b00fd 100644
--- a/Modules/Filtering/Path/include/otbRegionImageToRectangularPathListFilter.h
+++ b/Modules/Filtering/Path/include/otbRegionImageToRectangularPathListFilter.h
@@ -99,16 +99,16 @@ public:
 
 protected:
   RegionImageToRectangularPathListFilter();
-  virtual ~RegionImageToRectangularPathListFilter();
+  ~RegionImageToRectangularPathListFilter() ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation(){}  // do nothing
-  virtual void GenerateData();
+  void GenerateOutputInformation() ITK_OVERRIDE{}  // do nothing
+  void GenerateData() ITK_OVERRIDE;
 
   double m_MinimumFit;
   double m_MinimumSize;
   int    m_CrossTermFormula;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   //jgc
   typedef Image<unsigned char, itkGetStaticConstMacro(NDimensions)> MarkerImageType;
diff --git a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.h b/Modules/Filtering/Path/include/otbVectorizationPathListFilter.h
index 9d22d9584170dbfb8746a9fe08c462e3e47da31a..43795b7fefcf099b3c5893b66df8f058837a4d48 100644
--- a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.h
+++ b/Modules/Filtering/Path/include/otbVectorizationPathListFilter.h
@@ -114,11 +114,11 @@ protected:
   /** Constructor */
   VectorizationPathListFilter();
   /** Destructor */
-  virtual ~VectorizationPathListFilter() {}
+  ~VectorizationPathListFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /**
    * Compute a vector of the 8  neighbors to explore from the direction and the type of search (forward or backward).
    * \param direction The direction
diff --git a/Modules/Filtering/Polarimetry/include/otbMuellerToPolarisationDegreeAndPowerImageFilter.h b/Modules/Filtering/Polarimetry/include/otbMuellerToPolarisationDegreeAndPowerImageFilter.h
index 11aff0d012419391e95809ce63755aceacc39aaa..ed8b885665f10152c30ecffa12fce39217c03eb6 100644
--- a/Modules/Filtering/Polarimetry/include/otbMuellerToPolarisationDegreeAndPowerImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbMuellerToPolarisationDegreeAndPowerImageFilter.h
@@ -227,7 +227,7 @@ public:
 
 protected:
    MuellerToPolarisationDegreeAndPowerImageFilter() {}
-  virtual ~MuellerToPolarisationDegreeAndPowerImageFilter() {}
+  ~MuellerToPolarisationDegreeAndPowerImageFilter() ITK_OVERRIDE {}
 
 private:
   MuellerToPolarisationDegreeAndPowerImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbMuellerToReciprocalCovarianceImageFilter.h b/Modules/Filtering/Polarimetry/include/otbMuellerToReciprocalCovarianceImageFilter.h
index 0aa2d8665815ca14c7005fd99fc32eb9f3532b64..fd504d449c11abeb3d486d1e765bbd2f38a1e4fd 100644
--- a/Modules/Filtering/Polarimetry/include/otbMuellerToReciprocalCovarianceImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbMuellerToReciprocalCovarianceImageFilter.h
@@ -155,7 +155,7 @@ public:
 
 protected:
    MuellerToReciprocalCovarianceImageFilter() {}
-  virtual ~MuellerToReciprocalCovarianceImageFilter() {}
+  ~MuellerToReciprocalCovarianceImageFilter() ITK_OVERRIDE {}
 
 private:
   MuellerToReciprocalCovarianceImageFilter(const Self&); // purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbMultiChannelsPolarimetricSynthesisFilter.h b/Modules/Filtering/Polarimetry/include/otbMultiChannelsPolarimetricSynthesisFilter.h
index 900da39d185e58f9b1920102c66073ec31cc5c17..092d5004a1e02218f37085a48f41ee829a16e247 100644
--- a/Modules/Filtering/Polarimetry/include/otbMultiChannelsPolarimetricSynthesisFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbMultiChannelsPolarimetricSynthesisFilter.h
@@ -152,7 +152,7 @@ protected:
   /** Constructor */
   MultiChannelsPolarimetricSynthesisFilter();
   /** Destructor */
-  virtual ~MultiChannelsPolarimetricSynthesisFilter() {}
+  ~MultiChannelsPolarimetricSynthesisFilter() ITK_OVERRIDE {}
 
   /** MultiChannelsPolarimetricSynthesisFilter can produce an image
    * which is a synthesis of channels HH, HV, VH and VV.
@@ -164,9 +164,9 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** MultiChannelsPolarimetricSynthesisFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -179,7 +179,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** Computation of the electromagnetic fields Ei Er */
   void ComputeElectromagneticFields();
@@ -187,7 +187,7 @@ protected:
   /** Verify and force the inputs, if only  2 or 3 channels are present */
   void VerifyAndForceInputs();
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   MultiChannelsPolarimetricSynthesisFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbPolarimetricData.h b/Modules/Filtering/Polarimetry/include/otbPolarimetricData.h
index 1de47c38598d65fca4003e04c88eae22bbcbb101..eb3a4a4c26d75c97956b1f8ee03665a5267c6d3e 100644
--- a/Modules/Filtering/Polarimetry/include/otbPolarimetricData.h
+++ b/Modules/Filtering/Polarimetry/include/otbPolarimetricData.h
@@ -76,9 +76,9 @@ protected:
   /** Constructor */
   PolarimetricData();
   /** Destructor */
-  virtual ~PolarimetricData() {}
+  ~PolarimetricData() ITK_OVERRIDE {}
   /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   PolarimetricData(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbReciprocalBarnesDecompImageFilter.h b/Modules/Filtering/Polarimetry/include/otbReciprocalBarnesDecompImageFilter.h
index 4b6403f1435dc3eb521fc9d9faf762549e2bafe6..007adf573da543cab70febdd05d35efbe85b20f5 100644
--- a/Modules/Filtering/Polarimetry/include/otbReciprocalBarnesDecompImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbReciprocalBarnesDecompImageFilter.h
@@ -148,7 +148,7 @@ public:
 
 protected:
    ReciprocalBarnesDecompImageFilter() {}
-  virtual ~ReciprocalBarnesDecompImageFilter() {}
+  ~ReciprocalBarnesDecompImageFilter() ITK_OVERRIDE {}
 
 private:
   ReciprocalBarnesDecompImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbReciprocalCoherencyToReciprocalMuellerImageFilter.h b/Modules/Filtering/Polarimetry/include/otbReciprocalCoherencyToReciprocalMuellerImageFilter.h
index a025d9c337a32c5865a964452bba75a247bb0373..ff7e0389a45ab5c8589ac7110290aa7c3ad50d51 100644
--- a/Modules/Filtering/Polarimetry/include/otbReciprocalCoherencyToReciprocalMuellerImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbReciprocalCoherencyToReciprocalMuellerImageFilter.h
@@ -160,7 +160,7 @@ public:
 
 protected:
    ReciprocalCoherencyToReciprocalMuellerImageFilter() {}
-  virtual ~ReciprocalCoherencyToReciprocalMuellerImageFilter() {}
+  ~ReciprocalCoherencyToReciprocalMuellerImageFilter() ITK_OVERRIDE {}
 
 
 private:
diff --git a/Modules/Filtering/Polarimetry/include/otbReciprocalCovarianceToCoherencyDegreeImageFilter.h b/Modules/Filtering/Polarimetry/include/otbReciprocalCovarianceToCoherencyDegreeImageFilter.h
index 2ffb1b9a225273a1bf89aed98b38130345773247..19e129c965fca6a06bf6c2341ce8ef9c8942edc5 100644
--- a/Modules/Filtering/Polarimetry/include/otbReciprocalCovarianceToCoherencyDegreeImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbReciprocalCovarianceToCoherencyDegreeImageFilter.h
@@ -144,7 +144,7 @@ public:
 
 protected:
   ReciprocalCovarianceToCoherencyDegreeImageFilter() {}
-  virtual ~ReciprocalCovarianceToCoherencyDegreeImageFilter() {}
+  ~ReciprocalCovarianceToCoherencyDegreeImageFilter() ITK_OVERRIDE {}
 
 private:
   ReciprocalCovarianceToCoherencyDegreeImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbReciprocalCovarianceToReciprocalCoherencyImageFilter.h b/Modules/Filtering/Polarimetry/include/otbReciprocalCovarianceToReciprocalCoherencyImageFilter.h
index f34b83c5035cb68cb302dfa1856a282298d65e9f..06cb4bd39fcdc200205105a9cb538a942eb1e073 100644
--- a/Modules/Filtering/Polarimetry/include/otbReciprocalCovarianceToReciprocalCoherencyImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbReciprocalCovarianceToReciprocalCoherencyImageFilter.h
@@ -135,7 +135,7 @@ public:
 
 protected:
   ReciprocalCovarianceToReciprocalCoherencyImageFilter() {}
-  virtual ~ReciprocalCovarianceToReciprocalCoherencyImageFilter() {}
+  ~ReciprocalCovarianceToReciprocalCoherencyImageFilter() ITK_OVERRIDE {}
 
 private:
   ReciprocalCovarianceToReciprocalCoherencyImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbReciprocalHAlphaImageFilter.h b/Modules/Filtering/Polarimetry/include/otbReciprocalHAlphaImageFilter.h
index cb5938671d4304062d14a268e17b863b41809644..abb6b7e92f42468235b020aebadcd511c98397fe 100644
--- a/Modules/Filtering/Polarimetry/include/otbReciprocalHAlphaImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbReciprocalHAlphaImageFilter.h
@@ -217,7 +217,7 @@ public:
 
 protected:
    ReciprocalHAlphaImageFilter() {}
-  virtual ~ReciprocalHAlphaImageFilter() {}
+  ~ReciprocalHAlphaImageFilter() ITK_OVERRIDE {}
 
 private:
   ReciprocalHAlphaImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbReciprocalHuynenDecompImageFilter.h b/Modules/Filtering/Polarimetry/include/otbReciprocalHuynenDecompImageFilter.h
index d083b7de4044adbc2ce58cb9c7c1b151cc866fae..0cb0257a77fe463564cb1948b3ac416ed80bf243 100644
--- a/Modules/Filtering/Polarimetry/include/otbReciprocalHuynenDecompImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbReciprocalHuynenDecompImageFilter.h
@@ -119,7 +119,7 @@ public:
 
 protected:
    ReciprocalHuynenDecompImageFilter() {}
-  virtual ~ReciprocalHuynenDecompImageFilter() {}
+  ~ReciprocalHuynenDecompImageFilter() ITK_OVERRIDE {}
 
 private:
   ReciprocalHuynenDecompImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter.h b/Modules/Filtering/Polarimetry/include/otbReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter.h
index 8a8caa7b31c69756801047673bbab3706c614945..7d35691d7f7c61c5950f3848f5713af9af5f741b 100644
--- a/Modules/Filtering/Polarimetry/include/otbReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter.h
@@ -140,7 +140,7 @@ public:
 
 protected:
   ReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter() {}
-  virtual ~ReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter() {}
+  ~ReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter() ITK_OVERRIDE {}
 
 private:
   ReciprocalLinearCovarianceToReciprocalCircularCovarianceImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbReciprocalPauliDecompImageFilter.h b/Modules/Filtering/Polarimetry/include/otbReciprocalPauliDecompImageFilter.h
index ab8ac23d87f579992b20d8d94a024b957ab6dd28..21b0bbcdb78f9e17938b010538e9b4aaa1a0cc6b 100644
--- a/Modules/Filtering/Polarimetry/include/otbReciprocalPauliDecompImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbReciprocalPauliDecompImageFilter.h
@@ -110,7 +110,7 @@ public:
 
 protected:
    ReciprocalPauliDecompImageFilter() {this->SetNumberOfThreads(1);}
-  virtual ~ReciprocalPauliDecompImageFilter() {}
+  ~ReciprocalPauliDecompImageFilter() ITK_OVERRIDE {}
 
 private:
   ReciprocalPauliDecompImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Polarimetry/include/otbSinclairImageFilter.h b/Modules/Filtering/Polarimetry/include/otbSinclairImageFilter.h
index 1df4e8c8a268fdad4cea5e0015f87b45ea2369f2..9ec92d5c0531c44d48bd5c670d69f2bda5b170cb 100644
--- a/Modules/Filtering/Polarimetry/include/otbSinclairImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbSinclairImageFilter.h
@@ -106,11 +106,11 @@ protected:
   /**  Constructor */
   SinclairImageFilter() {}
   /**  Destructor */
-  virtual ~SinclairImageFilter() {}
+  ~SinclairImageFilter() ITK_OVERRIDE {}
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Filtering/Polarimetry/include/otbSinclairReciprocalImageFilter.h b/Modules/Filtering/Polarimetry/include/otbSinclairReciprocalImageFilter.h
index 55bb5c9ecdc47dd70179488ccea6871a66c66382..ddd6a80dc904e5bc7425801d8e95aa79147448c0 100644
--- a/Modules/Filtering/Polarimetry/include/otbSinclairReciprocalImageFilter.h
+++ b/Modules/Filtering/Polarimetry/include/otbSinclairReciprocalImageFilter.h
@@ -105,11 +105,11 @@ protected:
   /**  Constructor */
   SinclairReciprocalImageFilter() {}
   /**  Destructor */
-  virtual ~SinclairReciprocalImageFilter() {}
+  ~SinclairReciprocalImageFilter() ITK_OVERRIDE {}
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Filtering/Projection/include/otbEckert4MapProjection.h b/Modules/Filtering/Projection/include/otbEckert4MapProjection.h
index 06f254308d19aa0660d0d8864e35e3af0f44e671..ac08f45515bc1a1e8d1625a29102b55f0d6131d4 100644
--- a/Modules/Filtering/Projection/include/otbEckert4MapProjection.h
+++ b/Modules/Filtering/Projection/include/otbEckert4MapProjection.h
@@ -58,7 +58,7 @@ public:
 
 protected:
   Eckert4MapProjection();
-  virtual ~Eckert4MapProjection();
+  ~Eckert4MapProjection() ITK_OVERRIDE;
 
 private:
   Eckert4MapProjection(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbGCPsToRPCSensorModelImageFilter.h b/Modules/Filtering/Projection/include/otbGCPsToRPCSensorModelImageFilter.h
index 47a8c503eae8fae8626ea4645fd9392f721117a6..101582ae6daa60e43acf3a7ed9ffbab64cdb9932 100644
--- a/Modules/Filtering/Projection/include/otbGCPsToRPCSensorModelImageFilter.h
+++ b/Modules/Filtering/Projection/include/otbGCPsToRPCSensorModelImageFilter.h
@@ -167,17 +167,17 @@ protected:
   /** Constructor */
   GCPsToRPCSensorModelImageFilter();
   /** Destructor */
-  virtual ~GCPsToRPCSensorModelImageFilter();
+  ~GCPsToRPCSensorModelImageFilter() ITK_OVERRIDE;
 
   /** The PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Actual estimation of the sensor model takes place in the
    * GenerateOutputInformation() method */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Drive the model up-to-date flag */
-  virtual void Modified() const;
+  void Modified() const ITK_OVERRIDE;
 
 private:
   GCPsToRPCSensorModelImageFilter (const Self &);   // purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.h b/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.h
index e755f1f3503847f40d81fcb6039b97e513ccc83c..bb2b680cd55027afb295f1d0f160993a6dd08bea 100644
--- a/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.h
+++ b/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.h
@@ -265,20 +265,20 @@ public:
   }
 
   /** Override itk::ProcessObject method to let the internal filter do the propagation */
-  virtual void PropagateRequestedRegion(itk::DataObject *output);
+  void PropagateRequestedRegion(itk::DataObject *output) ITK_OVERRIDE;
 
 protected:
   GenericRSResampleImageFilter();
   /** Destructor */
-  virtual ~GenericRSResampleImageFilter() {};
+  ~GenericRSResampleImageFilter() ITK_OVERRIDE {};
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   virtual void UpdateTransform();
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   GenericRSResampleImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.txx b/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.txx
index bd60be834c18f3fb6d63714e5655743de13120fa..c56e8cfdd9712e924d65efc326bf986c6dcf4b97 100644
--- a/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.txx
+++ b/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.txx
@@ -200,7 +200,7 @@ GenericRSResampleImageFilter<TInputImage, TOutputImage>
    m_InputRpcEstimator->SetInput(tempPtr);
    m_InputRpcEstimator->UpdateOutputInformation();
 
-   // No need to override the input kwl, just setup the
+   // No need to ITK_OVERRIDE the input kwl, just setup the
    // transform with the kwl estimated
    if(m_InputRpcEstimator->GetInput()->GetImageKeywordlist().GetSize() > 0)
      m_Transform->SetOutputKeywordList(m_InputRpcEstimator->GetOutput()->GetImageKeywordlist());
diff --git a/Modules/Filtering/Projection/include/otbGeographicalDistance.h b/Modules/Filtering/Projection/include/otbGeographicalDistance.h
index 22aa459ee81bed3e6dd95c5ea347e11fd53ab7ff..aed35be49ee3f878b2c2c33914900f005711215e 100644
--- a/Modules/Filtering/Projection/include/otbGeographicalDistance.h
+++ b/Modules/Filtering/Projection/include/otbGeographicalDistance.h
@@ -67,10 +67,10 @@ public:
 
   /** Gets the distance between the origin point and x. This function
    *  work with SetOrigin() function */
-  virtual double Evaluate(const VectorType & x) const;
+  double Evaluate(const VectorType & x) const ITK_OVERRIDE;
 
   /* Gets the distance between x and y points */
-  virtual double Evaluate(const VectorType & x, const VectorType & y) const;
+  double Evaluate(const VectorType & x, const VectorType & y) const ITK_OVERRIDE;
 
   /** Set the earth radius */
   itkSetMacro(EarthRadius, double);
@@ -83,10 +83,10 @@ protected:
   GeographicalDistance();
 
   /** Destructor */
-  virtual ~GeographicalDistance(){}
+  ~GeographicalDistance() ITK_OVERRIDE{}
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   GeographicalDistance(const Self &);  //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbGeometriesProjectionFilter.h b/Modules/Filtering/Projection/include/otbGeometriesProjectionFilter.h
index b5da04780933378402761eee4010dce4a1ce18c5..4b0e3ca50950f081ec1e0a7d69e3bf2fd41dc11b 100644
--- a/Modules/Filtering/Projection/include/otbGeometriesProjectionFilter.h
+++ b/Modules/Filtering/Projection/include/otbGeometriesProjectionFilter.h
@@ -190,7 +190,7 @@ private:
    * of the filter. It's up to the caller to take responsibility of the returned
    * object.
    */
-  virtual OGRSpatialReference* DoDefineNewLayerSpatialReference(ogr::Layer const& source) const;
+  OGRSpatialReference* DoDefineNewLayerSpatialReference(ogr::Layer const& source) const ITK_OVERRIDE;
   /**
    * Hook that actually filters an OGR \c Layer.
    * \param[in]     source      Input layer
@@ -202,13 +202,13 @@ private:
    * inner-filter working on \c ogr::DataSource cannot be globally configured
    * once and for all.
    */
-  virtual void DoProcessLayer(ogr::Layer const& source, ogr::Layer & destination) const;
+  void DoProcessLayer(ogr::Layer const& source, ogr::Layer & destination) const ITK_OVERRIDE;
   /** Hook used to conclude the initialization phase.
    * Global \c ogr::DataSource settings for the \c m_Transform functor are
    * forwarded to the functor. \c ogr::Layer specific settings will be set at
    * the last moment from \c DoProcessLayer().
    */
-  virtual void DoFinalizeInitialisation();
+  void DoFinalizeInitialisation() ITK_OVERRIDE;
   /**
    * Hook used to define the fields of the new layer.
    * \param[in] source  source \c Layer -- for reference
@@ -217,18 +217,18 @@ private:
    * Just forwards the fields definition to the \c FieldTransformationPolicy
    * encapsuled in the \c TransformationFunctorDispatcherType.
    */
-  virtual void DoDefineNewLayerFields(ogr::Layer const& source, ogr::Layer & dest) const;
+  void DoDefineNewLayerFields(ogr::Layer const& source, ogr::Layer & dest) const ITK_OVERRIDE;
 
 protected:
   /** Default constructor. */
   GeometriesProjectionFilter();
   /** Destructor. */
-  virtual ~GeometriesProjectionFilter();
+  ~GeometriesProjectionFilter() ITK_OVERRIDE;
 
   /** Computes output information.
    * \post \c m_OutputProjectionRef contains all its related meta-data
    */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
 public:
   /**\name Image Reference (origin, spacing) */
diff --git a/Modules/Filtering/Projection/include/otbImageToEnvelopeVectorDataFilter.h b/Modules/Filtering/Projection/include/otbImageToEnvelopeVectorDataFilter.h
index 512922dbb378f06555fd07b17da4f5e0da0ca678..128f70098aaa73bfb5e57246f38c2e14c9702892 100644
--- a/Modules/Filtering/Projection/include/otbImageToEnvelopeVectorDataFilter.h
+++ b/Modules/Filtering/Projection/include/otbImageToEnvelopeVectorDataFilter.h
@@ -93,13 +93,13 @@ public:
 
 protected:
   ImageToEnvelopeVectorDataFilter();
-  virtual ~ImageToEnvelopeVectorDataFilter() {}
+  ~ImageToEnvelopeVectorDataFilter() ITK_OVERRIDE {}
 
-  void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   void InstantiateTransform();
 
diff --git a/Modules/Filtering/Projection/include/otbImportGeoInformationImageFilter.h b/Modules/Filtering/Projection/include/otbImportGeoInformationImageFilter.h
index 9b4e931260b658ca7162737949f7bc755ac47b99..064dda4c2e1ee2dd56b14196212f6f38b6512686 100644
--- a/Modules/Filtering/Projection/include/otbImportGeoInformationImageFilter.h
+++ b/Modules/Filtering/Projection/include/otbImportGeoInformationImageFilter.h
@@ -78,20 +78,20 @@ protected:
   /** Constructor */
   ImportGeoInformationImageFilter();
   /** Destructor */
-  virtual ~ImportGeoInformationImageFilter() {}
+  ~ImportGeoInformationImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Generate input requested region */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
   /** Generate output information */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /** Override VerifyInputInformation() since this filter's inputs do
    * not need to occupy the same physical space.
    *
    * \sa ProcessObject::VerifyInputInformation
    */
-  virtual void VerifyInputInformation() {}
+  void VerifyInputInformation() ITK_OVERRIDE {}
 
 private:
   ImportGeoInformationImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbLambert2EtenduProjection.h b/Modules/Filtering/Projection/include/otbLambert2EtenduProjection.h
index 27a1739567ab5feaa600af9380a25b9d997b3bd2..e5cdf2ba874e7122b8f25fb1d8127facdf98822c 100644
--- a/Modules/Filtering/Projection/include/otbLambert2EtenduProjection.h
+++ b/Modules/Filtering/Projection/include/otbLambert2EtenduProjection.h
@@ -57,7 +57,7 @@ protected:
     this->SetParameter("StandardParallel2", "47.69601389");
   }
 
-  virtual ~Lambert2EtenduProjection() {}
+  ~Lambert2EtenduProjection() ITK_OVERRIDE {}
 
 private:
   Lambert2EtenduProjection(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbLambert93Projection.h b/Modules/Filtering/Projection/include/otbLambert93Projection.h
index ba70c784263f0d9daa031647eb918ecf235e01c2..2d89ac18041762b46b6aa46fc0b5b73a28b13046 100644
--- a/Modules/Filtering/Projection/include/otbLambert93Projection.h
+++ b/Modules/Filtering/Projection/include/otbLambert93Projection.h
@@ -57,7 +57,7 @@ protected:
     this->SetParameter("StandardParallel2", "49");
   }
 
-  virtual ~Lambert93Projection() {}
+  ~Lambert93Projection() ITK_OVERRIDE {}
 
 private:
   Lambert93Projection(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbLambertConformalConicMapProjection.h b/Modules/Filtering/Projection/include/otbLambertConformalConicMapProjection.h
index 0bb68589c52b3ff63769a41caa176e53794c6d20..df8220fefc2f33a6b8aad7ce84cb936cbe3a3fc9 100644
--- a/Modules/Filtering/Projection/include/otbLambertConformalConicMapProjection.h
+++ b/Modules/Filtering/Projection/include/otbLambertConformalConicMapProjection.h
@@ -61,7 +61,7 @@ public:
 
 protected:
   LambertConformalConicMapProjection();
-  virtual ~LambertConformalConicMapProjection() {};
+  ~LambertConformalConicMapProjection() ITK_OVERRIDE {};
 
 private:
   LambertConformalConicMapProjection(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbLeastSquareAffineTransformEstimator.h b/Modules/Filtering/Projection/include/otbLeastSquareAffineTransformEstimator.h
index 26effa3d8f77a9e2a6c9b810ff1e407d6b37ec93..8518232df03604688ccebc8fc286805bd1849fd5 100644
--- a/Modules/Filtering/Projection/include/otbLeastSquareAffineTransformEstimator.h
+++ b/Modules/Filtering/Projection/include/otbLeastSquareAffineTransformEstimator.h
@@ -135,10 +135,10 @@ protected:
   /** Constructor */
   LeastSquareAffineTransformEstimator();
   /** Destructor */
-  virtual ~LeastSquareAffineTransformEstimator();
+  ~LeastSquareAffineTransformEstimator() ITK_OVERRIDE;
 
   /** The PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LeastSquareAffineTransformEstimator (const Self &);   // purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbMapProjectionDeprecated.h b/Modules/Filtering/Projection/include/otbMapProjectionDeprecated.h
index 07a44f6b401bfbdebf868d3608008b44bd217ac2..537a60a00b325f5f4cf3f356631f7a26e34b1f34 100644
--- a/Modules/Filtering/Projection/include/otbMapProjectionDeprecated.h
+++ b/Modules/Filtering/Projection/include/otbMapProjectionDeprecated.h
@@ -87,7 +87,7 @@ public:
 
 protected:
   MapProjectionDeprecated();
-  virtual ~MapProjectionDeprecated() {};
+  ~MapProjectionDeprecated() ITK_OVERRIDE {};
 
 private:
   MapProjectionDeprecated(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbMollweidMapProjection.h b/Modules/Filtering/Projection/include/otbMollweidMapProjection.h
index 90b885c7781ed43bea9ddd1a0ee43f348c8ff29a..86560ea777647ffd5e20d2c6be875ff715e5e5aa 100644
--- a/Modules/Filtering/Projection/include/otbMollweidMapProjection.h
+++ b/Modules/Filtering/Projection/include/otbMollweidMapProjection.h
@@ -56,7 +56,7 @@ public:
 
 protected:
   MollweidMapProjection();
-  virtual ~MollweidMapProjection();
+  ~MollweidMapProjection() ITK_OVERRIDE;
 
 private:
   MollweidMapProjection(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.h b/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.h
index e64b0df1725b83b48d5d559aa3356d775a529ac6..ee0f67ac40cac5024e30868bf07fa76e4abd7a41 100644
--- a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.h
+++ b/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.h
@@ -90,11 +90,11 @@ public:
 
 protected:
   OrthoRectificationFilter();
-  virtual ~OrthoRectificationFilter();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~OrthoRectificationFilter() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateInputRequestedRegion();
-  virtual void GenerateOutputInformation(void);
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
 private:
   OrthoRectificationFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbPhysicalToRPCSensorModelImageFilter.h b/Modules/Filtering/Projection/include/otbPhysicalToRPCSensorModelImageFilter.h
index 0992f8e563af2910cf803d1cb079a11ea317c912..a80fb8b7f5bacbc332ba4bcdb4146e831769a4ed 100644
--- a/Modules/Filtering/Projection/include/otbPhysicalToRPCSensorModelImageFilter.h
+++ b/Modules/Filtering/Projection/include/otbPhysicalToRPCSensorModelImageFilter.h
@@ -107,19 +107,19 @@ public:
   }
 
   /** Reimplement the method Modified() */
-  virtual void Modified() const;
+  void Modified() const ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   PhysicalToRPCSensorModelImageFilter();
   /** Destructor */
-  virtual ~PhysicalToRPCSensorModelImageFilter();
+  ~PhysicalToRPCSensorModelImageFilter() ITK_OVERRIDE;
 
   /** The PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Generate the Output image information*/
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
   PhysicalToRPCSensorModelImageFilter(const Self &);   // purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbProjectiveProjectionImageFilter.h b/Modules/Filtering/Projection/include/otbProjectiveProjectionImageFilter.h
index feaa3e60afe56849d7cdcdbcda07160798500c0d..eed49540b7e1fa13ddc1f633edd98b48cd761d1d 100644
--- a/Modules/Filtering/Projection/include/otbProjectiveProjectionImageFilter.h
+++ b/Modules/Filtering/Projection/include/otbProjectiveProjectionImageFilter.h
@@ -151,11 +151,11 @@ public:
 protected:
   ProjectiveProjectionImageFilter();
 
-  virtual ~ProjectiveProjectionImageFilter() {}
+  ~ProjectiveProjectionImageFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation()
+  void GenerateOutputInformation() ITK_OVERRIDE
   {
     Superclass::GenerateOutputInformation();
     typename Superclass::OutputImagePointer outputPtr = this->GetOutput();
diff --git a/Modules/Filtering/Projection/include/otbROIdataConversion.h b/Modules/Filtering/Projection/include/otbROIdataConversion.h
index 541eddb93cfd3faa230885c507e29ad4ef1f490c..8def5338463c80a20bf290ab4df1f14afa6f8c98 100644
--- a/Modules/Filtering/Projection/include/otbROIdataConversion.h
+++ b/Modules/Filtering/Projection/include/otbROIdataConversion.h
@@ -79,16 +79,16 @@ public:
 
 protected:
   ROIdataConversion();
-  virtual ~ROIdataConversion() {}
-  virtual void GenerateOutputInformation();
-  virtual void GenerateInputRequestedRegion();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  ~ROIdataConversion() ITK_OVERRIDE {}
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
 
   /** Performs its job! */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Count the number for sample in the training area */
   SizeValueType GetNumberOfSample();
diff --git a/Modules/Filtering/Projection/include/otbRationalTransform.h b/Modules/Filtering/Projection/include/otbRationalTransform.h
index 5adfb206ab26e55218e9e1d1b7f22c87291d701f..5b177826c6d1bdd61b24d8c3752619a9d910deca 100644
--- a/Modules/Filtering/Projection/include/otbRationalTransform.h
+++ b/Modules/Filtering/Projection/include/otbRationalTransform.h
@@ -98,7 +98,7 @@ public:
   itkGetConstMacro(DenominatorDegree, unsigned int);
 
   /** The transform point method */
-  virtual OutputPointType TransformPoint(const InputPointType& point) const
+  OutputPointType TransformPoint(const InputPointType& point) const ITK_OVERRIDE
   {
     // Check for consistency
     if(this->GetNumberOfParameters() != this->m_Parameters.size())
@@ -145,13 +145,13 @@ public:
   }
 
   /** Get the number of parameters */
-  virtual NumberOfParametersType GetNumberOfParameters() const
+  NumberOfParametersType GetNumberOfParameters() const ITK_OVERRIDE
   {
     return (static_cast <NumberOfParametersType> ( (m_NumeratorDegree +1 + m_DenominatorDegree+1)*SpaceDimension ));
   }
 
   // Set parameter method
-  virtual void SetParameters(const typename Superclass::ParametersType & params)
+  void SetParameters(const typename Superclass::ParametersType & params) ITK_OVERRIDE
   {
     // Check for the appropriate size
     if(params.Size() != this->GetNumberOfParameters())
@@ -184,9 +184,9 @@ protected:
     }
 
 
-  virtual ~RationalTransform() {}
+  ~RationalTransform() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << indent << "Numerator Degree : " << m_NumeratorDegree << std::endl;
diff --git a/Modules/Filtering/Projection/include/otbSVY21MapProjection.h b/Modules/Filtering/Projection/include/otbSVY21MapProjection.h
index 1d6ca66b0e46e987345fc2a1553319c39576afa6..47cbb7edab13ce0656373a808098ece5c8d4454a 100644
--- a/Modules/Filtering/Projection/include/otbSVY21MapProjection.h
+++ b/Modules/Filtering/Projection/include/otbSVY21MapProjection.h
@@ -59,7 +59,7 @@ protected:
     this->SetParameter("FalseEasting", "28001.642");
     this->SetParameter("ScaleFactor", "1.00");
   }
-  virtual ~SVY21MapProjection() {}
+  ~SVY21MapProjection() ITK_OVERRIDE {}
 
 private:
   SVY21MapProjection(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbSinusoidalMapProjection.h b/Modules/Filtering/Projection/include/otbSinusoidalMapProjection.h
index 57ec659d12198fe0b566b6bfbf06322de5460c2c..88656f352305cf004703b8e33040a76db5544f63 100644
--- a/Modules/Filtering/Projection/include/otbSinusoidalMapProjection.h
+++ b/Modules/Filtering/Projection/include/otbSinusoidalMapProjection.h
@@ -59,7 +59,7 @@ public:
 
 protected:
   SinusoidalMapProjection();
-  virtual ~SinusoidalMapProjection();
+  ~SinusoidalMapProjection() ITK_OVERRIDE;
 
 private:
   SinusoidalMapProjection(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbTileMapTransform.h b/Modules/Filtering/Projection/include/otbTileMapTransform.h
index 0489909517676baf0f2ed358f1e67cc6f5c199a7..6a8a8317ebcd568b691a959e9863c622085824dd 100644
--- a/Modules/Filtering/Projection/include/otbTileMapTransform.h
+++ b/Modules/Filtering/Projection/include/otbTileMapTransform.h
@@ -70,7 +70,7 @@ public:
   void SetLevel(unsigned int level);
   unsigned int GetLevel() const;
 
-  OutputPointType TransformPoint(const InputPointType& point) const;
+  OutputPointType TransformPoint(const InputPointType& point) const ITK_OVERRIDE;
 
   virtual void PrintMap() const;
 
@@ -82,7 +82,7 @@ public:
 
 protected:
   TileMapTransform();
-  virtual ~TileMapTransform();
+  ~TileMapTransform() ITK_OVERRIDE;
 
 private:
   TileMapTransform(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbTransMercatorMapProjection.h b/Modules/Filtering/Projection/include/otbTransMercatorMapProjection.h
index f684ff3807854540722ae9cad575c7d7e2ba75a6..8283c73326c54f70d9c146e3c18195b31cc0f6b6 100644
--- a/Modules/Filtering/Projection/include/otbTransMercatorMapProjection.h
+++ b/Modules/Filtering/Projection/include/otbTransMercatorMapProjection.h
@@ -61,7 +61,7 @@ public:
 
 protected:
   TransMercatorMapProjection();
-  virtual ~TransMercatorMapProjection();
+  ~TransMercatorMapProjection() ITK_OVERRIDE;
 
 private:
   TransMercatorMapProjection(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbUtmMapProjection.h b/Modules/Filtering/Projection/include/otbUtmMapProjection.h
index 471bee55671017498f16ba4a0cfeae5aa6f687b1..2ab6f7999727ffc6229f9abe2c07eae998fa4415 100644
--- a/Modules/Filtering/Projection/include/otbUtmMapProjection.h
+++ b/Modules/Filtering/Projection/include/otbUtmMapProjection.h
@@ -60,7 +60,7 @@ public:
 
 protected:
   UtmMapProjection();
-  virtual ~UtmMapProjection() {};
+  ~UtmMapProjection() ITK_OVERRIDE {};
 
 private:
   UtmMapProjection(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbVectorDataIntoImageProjectionFilter.h b/Modules/Filtering/Projection/include/otbVectorDataIntoImageProjectionFilter.h
index a555e1a289a9bc3f0edd27c6adf7f6da3de55303..e14bacc23a46fba35469edf026da7227c3c9b8dc 100644
--- a/Modules/Filtering/Projection/include/otbVectorDataIntoImageProjectionFilter.h
+++ b/Modules/Filtering/Projection/include/otbVectorDataIntoImageProjectionFilter.h
@@ -102,9 +102,9 @@ public:
 protected:
   VectorDataIntoImageProjectionFilter();
 
-  virtual ~VectorDataIntoImageProjectionFilter() {}
+  ~VectorDataIntoImageProjectionFilter() ITK_OVERRIDE {}
 
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   // Projection filter
   typedef VectorDataProjectionFilter<InputVectorDataType, InputVectorDataType>
diff --git a/Modules/Filtering/Projection/include/otbVectorDataProjectionFilter.h b/Modules/Filtering/Projection/include/otbVectorDataProjectionFilter.h
index 0fe63b0ef0599b166f34b5e7786e154830c70c6c..66e435a0c7e236dc1f480e2dc9163787de8b2e37 100644
--- a/Modules/Filtering/Projection/include/otbVectorDataProjectionFilter.h
+++ b/Modules/Filtering/Projection/include/otbVectorDataProjectionFilter.h
@@ -172,17 +172,17 @@ public:
 
 protected:
   VectorDataProjectionFilter();
-  virtual ~VectorDataProjectionFilter() {}
+  ~VectorDataProjectionFilter() ITK_OVERRIDE {}
 
-  virtual OutputPointType ProcessPoint(InputPointType point) const;
-  virtual OutputLinePointerType ProcessLine(InputLinePointerType line) const;
-  virtual OutputPolygonPointerType ProcessPolygon(InputPolygonPointerType polygon) const;
-  virtual OutputPolygonListPointerType ProcessPolygonList(InputPolygonListPointerType polygonList) const;
+  OutputPointType ProcessPoint(InputPointType point) const ITK_OVERRIDE;
+  OutputLinePointerType ProcessLine(InputLinePointerType line) const ITK_OVERRIDE;
+  OutputPolygonPointerType ProcessPolygon(InputPolygonPointerType polygon) const ITK_OVERRIDE;
+  OutputPolygonListPointerType ProcessPolygonList(InputPolygonListPointerType polygonList) const ITK_OVERRIDE;
 
   virtual void InstanciateTransform(void);
 
-  virtual void GenerateOutputInformation(void);
-  virtual void GenerateData(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
+  void GenerateData(void) ITK_OVERRIDE;
 
 private:
   VectorDataProjectionFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Projection/include/otbVectorDataTransformFilter.h b/Modules/Filtering/Projection/include/otbVectorDataTransformFilter.h
index 2060c4d16beafbac55111212ac0258e737339f76..370f2918e4758cf96b33a2fa47a85f22b6a81718 100644
--- a/Modules/Filtering/Projection/include/otbVectorDataTransformFilter.h
+++ b/Modules/Filtering/Projection/include/otbVectorDataTransformFilter.h
@@ -99,14 +99,14 @@ public:
 
 protected:
   VectorDataTransformFilter();
-  virtual ~VectorDataTransformFilter() {};
+  ~VectorDataTransformFilter() ITK_OVERRIDE {};
 
-  PointType ProcessPoint(PointType point) const;
-  LinePointerType ProcessLine(LinePointerType line) const;
-  PolygonPointerType ProcessPolygon(PolygonPointerType polygon) const;
-  PolygonListPointerType ProcessPolygonList(PolygonListPointerType polygonList) const;
+  PointType ProcessPoint(PointType point) const ITK_OVERRIDE;
+  LinePointerType ProcessLine(LinePointerType line) const ITK_OVERRIDE;
+  PolygonPointerType ProcessPolygon(PolygonPointerType polygon) const ITK_OVERRIDE;
+  PolygonListPointerType ProcessPolygonList(PolygonListPointerType polygonList) const ITK_OVERRIDE;
 
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
 private:
   VectorDataTransformFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Smoothing/include/otbMeanShiftSmoothingImageFilter.h b/Modules/Filtering/Smoothing/include/otbMeanShiftSmoothingImageFilter.h
index 8b7582709525827c526acd9768c81a1a2bc1d2dc..b51bec48a9f243bd4b224071cda52c9b658c9e11 100644
--- a/Modules/Filtering/Smoothing/include/otbMeanShiftSmoothingImageFilter.h
+++ b/Modules/Filtering/Smoothing/include/otbMeanShiftSmoothingImageFilter.h
@@ -572,11 +572,11 @@ protected:
    *  Define output pixel size
    *
    **/
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** MeanShiftFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData()
@@ -588,21 +588,21 @@ protected:
    *
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData() */
-  void ThreadedGenerateData(const OutputRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
   /** Allocates the outputs (need to be reimplemented since outputs have different type) */
-  virtual void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
   /** Constructor */
   MeanShiftSmoothingImageFilter();
 
   /** Destructor */
-  virtual ~MeanShiftSmoothingImageFilter();
+  ~MeanShiftSmoothingImageFilter() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   virtual void CalculateMeanShiftVector(const typename RealVectorImageType::Pointer inputImagePtr,
                                         const RealVector& jointPixel, const OutputRegionType& outputRegion,
diff --git a/Modules/Filtering/Statistics/include/otbConcatenateSampleListFilter.h b/Modules/Filtering/Statistics/include/otbConcatenateSampleListFilter.h
index e85e627b871c2495adeccf54b75c48b8f9a89c67..fca7ea64323d278b41bf5d28e7c41030e05dbeb3 100644
--- a/Modules/Filtering/Statistics/include/otbConcatenateSampleListFilter.h
+++ b/Modules/Filtering/Statistics/include/otbConcatenateSampleListFilter.h
@@ -64,11 +64,11 @@ public:
 
 protected:
   /** This method causes the filter to generate its output. */
-   virtual void GenerateData();
+   void GenerateData() ITK_OVERRIDE;
 
   ConcatenateSampleListFilter();
-  virtual ~ConcatenateSampleListFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ConcatenateSampleListFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ConcatenateSampleListFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbContinuousMinimumMaximumImageCalculator.h b/Modules/Filtering/Statistics/include/otbContinuousMinimumMaximumImageCalculator.h
index 9286ff30d9a11c463f8997af94e3a0c100082326..51e9c164a8d4796d7954da77e28e57948e662836 100644
--- a/Modules/Filtering/Statistics/include/otbContinuousMinimumMaximumImageCalculator.h
+++ b/Modules/Filtering/Statistics/include/otbContinuousMinimumMaximumImageCalculator.h
@@ -134,8 +134,8 @@ public:
 
 protected:
   ContinuousMinimumMaximumImageCalculator();
-  virtual ~ContinuousMinimumMaximumImageCalculator() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ContinuousMinimumMaximumImageCalculator() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   PixelType         m_Minimum;
   PixelType         m_Maximum;
diff --git a/Modules/Filtering/Statistics/include/otbGaussianAdditiveNoiseSampleListFilter.h b/Modules/Filtering/Statistics/include/otbGaussianAdditiveNoiseSampleListFilter.h
index 0d6eaf34274fab9de46392fb9d6ffaf07dd14379..de1862c79a9b793e89bbfc36b3829ac192852fed 100644
--- a/Modules/Filtering/Statistics/include/otbGaussianAdditiveNoiseSampleListFilter.h
+++ b/Modules/Filtering/Statistics/include/otbGaussianAdditiveNoiseSampleListFilter.h
@@ -85,7 +85,7 @@ public:
 
 protected:
   /** This method causes the filter to generate its output. */
-   virtual void GenerateData();
+   void GenerateData() ITK_OVERRIDE;
 
   /** Generate a white gaussian noise with mean m_Mean and variance
     * m_Variance
@@ -93,8 +93,8 @@ protected:
   void GenerateRandomSequence();
 
   GaussianAdditiveNoiseSampleListFilter();
-  virtual ~GaussianAdditiveNoiseSampleListFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~GaussianAdditiveNoiseSampleListFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   GaussianAdditiveNoiseSampleListFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbHistogramStatisticsFunction.h b/Modules/Filtering/Statistics/include/otbHistogramStatisticsFunction.h
index 5ba1e63b74bfe22be7a4343b52f62bd7c6e12ab9..200a78811cb96bd5810d0ea32a9f0750d9ca21bc 100644
--- a/Modules/Filtering/Statistics/include/otbHistogramStatisticsFunction.h
+++ b/Modules/Filtering/Statistics/include/otbHistogramStatisticsFunction.h
@@ -80,7 +80,7 @@ public:
   }
 
   /** Calculates the thresholds and save them */
-  void Compute()
+  void Compute() ITK_OVERRIDE
   {
     this->GenerateData();
   }
@@ -88,8 +88,8 @@ public:
 protected:
 
   HistogramStatisticsFunction();
-  virtual ~HistogramStatisticsFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~HistogramStatisticsFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Calculates the thresholds and save them */
   void GenerateData();
diff --git a/Modules/Filtering/Statistics/include/otbListSampleGenerator.h b/Modules/Filtering/Statistics/include/otbListSampleGenerator.h
index 4bac4b059dcc62e9a3e84be28c8dac32abfae61f..c384337786478068cfd0c7fd92a938ef98947df6 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleGenerator.h
+++ b/Modules/Filtering/Statistics/include/otbListSampleGenerator.h
@@ -95,7 +95,7 @@ public:
 
   // Build the outputs
   typedef itk::DataObject::Pointer DataObjectPointer;
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   //virtual void Update();
@@ -149,13 +149,13 @@ public:
 
 protected:
   ListSampleGenerator();
-  virtual ~ListSampleGenerator() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ListSampleGenerator() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Triggers the Computation of the sample list */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** Compute the calss statistics*/
   void GenerateClassStatistics();
diff --git a/Modules/Filtering/Statistics/include/otbListSampleSource.h b/Modules/Filtering/Statistics/include/otbListSampleSource.h
index 5876869d5bdf1dedc2f51a105396d891f1fe00d6..ecad23a4f2c2347fe60a5fbefdd06096828e4bb0 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleSource.h
+++ b/Modules/Filtering/Statistics/include/otbListSampleSource.h
@@ -70,12 +70,12 @@ public:
 
 protected:
   /** Standard itk::ProcessObject subclass method. */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   ListSampleSource();
-  virtual ~ListSampleSource() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ListSampleSource() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ListSampleSource(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbListSampleToBalancedListSampleFilter.h b/Modules/Filtering/Statistics/include/otbListSampleToBalancedListSampleFilter.h
index 1f4dcab79013200163acb027ce18dfc267fcb9d0..296b930747c9e20285e1110eee178e34ef5a3c80 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleToBalancedListSampleFilter.h
+++ b/Modules/Filtering/Statistics/include/otbListSampleToBalancedListSampleFilter.h
@@ -117,7 +117,7 @@ public:
 
 protected:
   /** This method causes the filter to generate its output. */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** In order to respect the fair data principle, the number of samples for
     * each label must be the same. This method computes the label that
@@ -126,12 +126,12 @@ protected:
   void ComputeMaxSampleFrequency();
 
   /** Make Output */
-  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   ListSampleToBalancedListSampleFilter();
-  virtual ~ListSampleToBalancedListSampleFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ListSampleToBalancedListSampleFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ListSampleToBalancedListSampleFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbListSampleToHistogramListGenerator.h b/Modules/Filtering/Statistics/include/otbListSampleToHistogramListGenerator.h
index eada89c0fda8fa4aac925c1c98f8c6cf85f4ba4f..6f6361372bc4127237b85601a2eb6ce3d3e08a13 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleToHistogramListGenerator.h
+++ b/Modules/Filtering/Statistics/include/otbListSampleToHistogramListGenerator.h
@@ -146,14 +146,14 @@ public:
 
 protected:
   ListSampleToHistogramListGenerator();
-  virtual ~ListSampleToHistogramListGenerator() {}
+  ~ListSampleToHistogramListGenerator() ITK_OVERRIDE {}
 
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
-  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   //ListSampleConstPointerType m_List;
diff --git a/Modules/Filtering/Statistics/include/otbListSampleToListSampleFilter.h b/Modules/Filtering/Statistics/include/otbListSampleToListSampleFilter.h
index 3e21f1939bbfea971877ee84757162eec8bdcdce..e34414f55b461c13990980bdfe6e0c44b886359e 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleToListSampleFilter.h
+++ b/Modules/Filtering/Statistics/include/otbListSampleToListSampleFilter.h
@@ -85,8 +85,8 @@ public:
 protected:
 
   ListSampleToListSampleFilter();
-  virtual ~ListSampleToListSampleFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ListSampleToListSampleFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ListSampleToListSampleFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbListSampleToVariableDimensionHistogramGenerator.h b/Modules/Filtering/Statistics/include/otbListSampleToVariableDimensionHistogramGenerator.h
index c876944cd5b68fd8f2139f06c427b4b0700f6c82..1c0ce1b5f80593edd74d73dd929ec2efcbcf6a23 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleToVariableDimensionHistogramGenerator.h
+++ b/Modules/Filtering/Statistics/include/otbListSampleToVariableDimensionHistogramGenerator.h
@@ -110,10 +110,10 @@ public:
 
 protected:
   ListSampleToVariableDimensionHistogramGenerator();
-  virtual ~ListSampleToVariableDimensionHistogramGenerator() {}
-  void GenerateData();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  ~ListSampleToVariableDimensionHistogramGenerator() ITK_OVERRIDE {}
+  void GenerateData() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
 private:
diff --git a/Modules/Filtering/Statistics/include/otbLocalHistogramImageFunction.h b/Modules/Filtering/Statistics/include/otbLocalHistogramImageFunction.h
index b08f73682c06e004b331172d785627472952c19a..c2d6fe2e1cd90bde9ed4d42450cf1497c98a1f51 100644
--- a/Modules/Filtering/Statistics/include/otbLocalHistogramImageFunction.h
+++ b/Modules/Filtering/Statistics/include/otbLocalHistogramImageFunction.h
@@ -86,17 +86,17 @@ public:
                       InputImageType::ImageDimension);
 
   /** Evalulate the function at specified index */
-  virtual OutputType  EvaluateAtIndex(const IndexType& index) const;
+  OutputType  EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -125,8 +125,8 @@ public:
 
 protected:
   LocalHistogramImageFunction();
-  virtual ~LocalHistogramImageFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LocalHistogramImageFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LocalHistogramImageFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.h b/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.h
index e5b3888da8d1e4fe5a651bfa6714beba146174d9..94949fd1990f4903df17377756a4c53059c5698a 100644
--- a/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbNormalizeVectorImageFilter.h
@@ -193,9 +193,9 @@ public:
 
 protected:
   NormalizeVectorImageFilter ();
-  virtual ~NormalizeVectorImageFilter() { }
+  ~NormalizeVectorImageFilter() ITK_OVERRIDE { }
 
-  void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Filtering/Statistics/include/otbShiftScaleSampleListFilter.h b/Modules/Filtering/Statistics/include/otbShiftScaleSampleListFilter.h
index 2a5b07a391c47866b6c70a0f31c11cf9f9a3703e..45f78fa533e158611d6ffe76b3d793c608dd77ff 100644
--- a/Modules/Filtering/Statistics/include/otbShiftScaleSampleListFilter.h
+++ b/Modules/Filtering/Statistics/include/otbShiftScaleSampleListFilter.h
@@ -84,11 +84,11 @@ public:
 
 protected:
   /** This method causes the filter to generate its output. */
-   virtual void GenerateData();
+   void GenerateData() ITK_OVERRIDE;
 
   ShiftScaleSampleListFilter();
-  virtual ~ShiftScaleSampleListFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ShiftScaleSampleListFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ShiftScaleSampleListFilter(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbStreamingCompareImageFilter.h b/Modules/Filtering/Statistics/include/otbStreamingCompareImageFilter.h
index aa1792ca7a2b6e78f7a2ca1088c228e1551baefc..9b1faa3df2fa1b100824b576980635728e8ed3e5 100644
--- a/Modules/Filtering/Statistics/include/otbStreamingCompareImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbStreamingCompareImageFilter.h
@@ -129,31 +129,31 @@ public:
 
   /** Make a DataObject of the correct type to be used as the specified
    * output. */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  void AllocateOutputs();
-  virtual void GenerateOutputInformation();
-  void Synthetize(void);
-  void Reset(void);
+  void AllocateOutputs() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
+  void Reset(void) ITK_OVERRIDE;
 
 protected:
   PersistentCompareImageFilter();
-  virtual ~PersistentCompareImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PersistentCompareImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Multi-thread version GenerateData. */
   void  ThreadedGenerateData(const RegionType&
                              outputRegionForThread,
-                             itk::ThreadIdType threadId);
+                             itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** Allows skipping the verification of physical space between
    *  the two input images (see flag m_PhysicalSpaceCheck)
    */
-  virtual void VerifyInputInformation();
+  void VerifyInputInformation() ITK_OVERRIDE;
 
 private:
   PersistentCompareImageFilter(const Self &); //purposely not implemented
@@ -295,7 +295,7 @@ protected:
   /** Constructor */
   StreamingCompareImageFilter() {};
   /** Destructor */
-  virtual ~StreamingCompareImageFilter() {}
+  ~StreamingCompareImageFilter() ITK_OVERRIDE {}
 
 private:
   StreamingCompareImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbStreamingHistogramVectorImageFilter.h b/Modules/Filtering/Statistics/include/otbStreamingHistogramVectorImageFilter.h
index f0c0dbe3493ada801b5c63266ce59ca4933fa428..ad5768780cc5f3cecd7c81455e1a0478495f0b75 100644
--- a/Modules/Filtering/Statistics/include/otbStreamingHistogramVectorImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbStreamingHistogramVectorImageFilter.h
@@ -168,23 +168,23 @@ public:
   /** Make a DataObject of the correct type to be used as the specified
    * output.
    */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  virtual void AllocateOutputs();
-  virtual void GenerateOutputInformation();
-  virtual void Synthetize(void);
-  virtual void Reset(void);
+  void AllocateOutputs() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
+  void Reset(void) ITK_OVERRIDE;
 
 protected:
   PersistentHistogramVectorImageFilter();
-  virtual ~PersistentHistogramVectorImageFilter() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PersistentHistogramVectorImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Multi-thread version GenerateData. */
-  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PersistentHistogramVectorImageFilter(const Self &); //purposely not implemented
@@ -270,7 +270,7 @@ protected:
   /** Constructor */
   StreamingHistogramVectorImageFilter() {};
   /** Destructor */
-  virtual ~StreamingHistogramVectorImageFilter() {}
+  ~StreamingHistogramVectorImageFilter() ITK_OVERRIDE {}
 
 private:
   StreamingHistogramVectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbStreamingMinMaxImageFilter.h b/Modules/Filtering/Statistics/include/otbStreamingMinMaxImageFilter.h
index 750e0e5276df8536fa5874e990f6b9c91dc69c8c..f956537a80fdcebf5843cbf61e1cd39053e964cf 100644
--- a/Modules/Filtering/Statistics/include/otbStreamingMinMaxImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbStreamingMinMaxImageFilter.h
@@ -123,26 +123,26 @@ public:
 
   /** Make a DataObject of the correct type to be used as the specified
    * output. */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  void AllocateOutputs();
-  virtual void GenerateOutputInformation();
-  void Synthetize(void);
-  void Reset(void);
+  void AllocateOutputs() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
+  void Reset(void) ITK_OVERRIDE;
 
 protected:
   PersistentMinMaxImageFilter();
-  virtual ~PersistentMinMaxImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PersistentMinMaxImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Multi-thread version GenerateData. */
   void  ThreadedGenerateData(const RegionType&
                              outputRegionForThread,
-                             itk::ThreadIdType threadId);
+                             itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PersistentMinMaxImageFilter(const Self &); //purposely not implemented
@@ -279,7 +279,7 @@ protected:
   /** Constructor */
   StreamingMinMaxImageFilter() {}
   /** Destructor */
-  virtual ~StreamingMinMaxImageFilter() {}
+  ~StreamingMinMaxImageFilter() ITK_OVERRIDE {}
 
 private:
   StreamingMinMaxImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbStreamingMinMaxVectorImageFilter.h b/Modules/Filtering/Statistics/include/otbStreamingMinMaxVectorImageFilter.h
index 238260482a157f448b51cb80398643f58de26a99..7926e9abf775461a20f08b214a8f62eaeb7c41f9 100644
--- a/Modules/Filtering/Statistics/include/otbStreamingMinMaxVectorImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbStreamingMinMaxVectorImageFilter.h
@@ -143,23 +143,23 @@ public:
   /** Make a DataObject of the correct type to be used as the specified
    * output.
    */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  virtual void AllocateOutputs();
-  virtual void GenerateOutputInformation();
-  virtual void Synthetize(void);
-  virtual void Reset(void);
+  void AllocateOutputs() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
+  void Reset(void) ITK_OVERRIDE;
 
 protected:
   PersistentMinMaxVectorImageFilter();
-  virtual ~PersistentMinMaxVectorImageFilter() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PersistentMinMaxVectorImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Multi-thread version GenerateData. */
-  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PersistentMinMaxVectorImageFilter(const Self &); //purposely not implemented
@@ -270,7 +270,7 @@ protected:
   /** Constructor */
   StreamingMinMaxVectorImageFilter() {};
   /** Destructor */
-  virtual ~StreamingMinMaxVectorImageFilter() {}
+  ~StreamingMinMaxVectorImageFilter() ITK_OVERRIDE {}
 
 private:
   StreamingMinMaxVectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbStreamingStatisticsImageFilter.h b/Modules/Filtering/Statistics/include/otbStreamingStatisticsImageFilter.h
index d81ec6e097dac5cb7a67f3f619914a52c0f4ba28..16846e8299602d3bcdf8909f7ea762ece27ace46 100644
--- a/Modules/Filtering/Statistics/include/otbStreamingStatisticsImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbStreamingStatisticsImageFilter.h
@@ -141,16 +141,16 @@ public:
 
   /** Make a DataObject of the correct type to be used as the specified
    * output. */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  void AllocateOutputs();
-  virtual void GenerateOutputInformation();
-  void Synthetize(void);
-  void Reset(void);
+  void AllocateOutputs() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
+  void Reset(void) ITK_OVERRIDE;
 
   itkSetMacro(IgnoreInfiniteValues, bool);
   itkGetMacro(IgnoreInfiniteValues, bool);
@@ -163,13 +163,13 @@ public:
 
 protected:
   PersistentStatisticsImageFilter();
-  virtual ~PersistentStatisticsImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PersistentStatisticsImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Multi-thread version GenerateData. */
   void  ThreadedGenerateData(const RegionType&
                              outputRegionForThread,
-                             itk::ThreadIdType threadId);
+                             itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PersistentStatisticsImageFilter(const Self &); //purposely not implemented
@@ -357,7 +357,7 @@ protected:
   /** Constructor */
   StreamingStatisticsImageFilter() {};
   /** Destructor */
-  virtual ~StreamingStatisticsImageFilter() {}
+  ~StreamingStatisticsImageFilter() ITK_OVERRIDE {}
 
 private:
   StreamingStatisticsImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbStreamingStatisticsMapFromLabelImageFilter.h b/Modules/Filtering/Statistics/include/otbStreamingStatisticsMapFromLabelImageFilter.h
index 0c95602e5d574a379a9bb9c233c6f2f13f4793d3..a43567635522145d80a3cf1a117a0a62f26b6cf1 100644
--- a/Modules/Filtering/Statistics/include/otbStreamingStatisticsMapFromLabelImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbStreamingStatisticsMapFromLabelImageFilter.h
@@ -109,31 +109,31 @@ public:
 
   /** Make a DataObject of the correct type to be used as the specified
    * output. */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  void Synthetize(void);
+  void Synthetize(void) ITK_OVERRIDE;
 
-  void Reset(void);
+  void Reset(void) ITK_OVERRIDE;
 
   /** Due to heterogeneous input template GenerateInputRequestedRegion must be reimplemented using explicit cast **/
   /** This new implementation is inspired by the one of itk::ImageToImageFilter **/
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
 protected:
   PersistentStreamingStatisticsMapFromLabelImageFilter();
-  virtual ~PersistentStreamingStatisticsMapFromLabelImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PersistentStreamingStatisticsMapFromLabelImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** GenerateData. */
-  void  GenerateData();
+  void  GenerateData() ITK_OVERRIDE;
 
 private:
   PersistentStreamingStatisticsMapFromLabelImageFilter(const Self &); //purposely not implemented
@@ -257,7 +257,7 @@ protected:
   /** Constructor */
   StreamingStatisticsMapFromLabelImageFilter() {}
   /** Destructor */
-  virtual ~StreamingStatisticsMapFromLabelImageFilter() {}
+  ~StreamingStatisticsMapFromLabelImageFilter() ITK_OVERRIDE {}
 
 private:
   StreamingStatisticsMapFromLabelImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbStreamingStatisticsVectorImageFilter.h b/Modules/Filtering/Statistics/include/otbStreamingStatisticsVectorImageFilter.h
index c4ce0c9b9a81703dff5cc851acc463dc7bbfbd6f..7399407d14cc682956763b3e07676cba83162ac8 100644
--- a/Modules/Filtering/Statistics/include/otbStreamingStatisticsVectorImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbStreamingStatisticsVectorImageFilter.h
@@ -174,12 +174,12 @@ public:
   /** Make a DataObject of the correct type to be used as the specified
    * output.
    */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
-  virtual void Reset(void);
+  void Reset(void) ITK_OVERRIDE;
 
-  virtual void Synthetize(void);
+  void Synthetize(void) ITK_OVERRIDE;
 
   itkSetMacro(EnableMinMax, bool);
   itkGetMacro(EnableMinMax, bool);
@@ -205,19 +205,19 @@ public:
 protected:
   PersistentStreamingStatisticsVectorImageFilter();
 
-  virtual ~PersistentStreamingStatisticsVectorImageFilter() {}
+  ~PersistentStreamingStatisticsVectorImageFilter() ITK_OVERRIDE {}
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  virtual void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Multi-thread version GenerateData. */
-  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PersistentStreamingStatisticsVectorImageFilter(const Self &); //purposely not implemented
@@ -465,7 +465,7 @@ protected:
   StreamingStatisticsVectorImageFilter() {}
 
   /** Destructor */
-  virtual ~StreamingStatisticsVectorImageFilter() {}
+  ~StreamingStatisticsVectorImageFilter() ITK_OVERRIDE {}
 
 private:
   StreamingStatisticsVectorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbVarianceImageFilter.h b/Modules/Filtering/Statistics/include/otbVarianceImageFilter.h
index 2aea72e42b9137ef9b9d846bb330982e36fdee4d..e6cefb7d07e38e053bcb567327622fa279b72c89 100644
--- a/Modules/Filtering/Statistics/include/otbVarianceImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbVarianceImageFilter.h
@@ -89,8 +89,8 @@ public:
    * in order to inform the pipeline execution model.
    *
    * \sa ImageToImageFilter::GenerateInputRequestedRegion() */
-  virtual void GenerateInputRequestedRegion()
-    throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
 #ifdef ITK_USE_CONCEPT_CHECKING
   /** Begin concept checking */
@@ -101,8 +101,8 @@ public:
 
 protected:
   VarianceImageFilter();
-  virtual ~VarianceImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~VarianceImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** VarianceImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData()
@@ -115,7 +115,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData() */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   VarianceImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbVectorImageToIntensityImageFilter.h b/Modules/Filtering/Statistics/include/otbVectorImageToIntensityImageFilter.h
index 95f560aea3a3493c2e07fb14a1a1ea9bed445646..d8d17230979cdff5477577c9df13f4ce31dd1086 100644
--- a/Modules/Filtering/Statistics/include/otbVectorImageToIntensityImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbVectorImageToIntensityImageFilter.h
@@ -76,9 +76,9 @@ protected:
   /** Constructor */
   VectorImageToIntensityImageFilter();
   /** Destructor */
-  virtual ~VectorImageToIntensityImageFilter() {}
+  ~VectorImageToIntensityImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** VectorImageToIntensityImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
    * which is called for each processing thread. The output image data is
@@ -90,7 +90,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   VectorImageToIntensityImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Statistics/include/otbVectorImageToMatrixImageFilter.h b/Modules/Filtering/Statistics/include/otbVectorImageToMatrixImageFilter.h
index b03c8eda3243dbd336bd623be218b1dbff5275a8..a464ef413d4c9da9540be7d6ebf8bfaec1116957 100644
--- a/Modules/Filtering/Statistics/include/otbVectorImageToMatrixImageFilter.h
+++ b/Modules/Filtering/Statistics/include/otbVectorImageToMatrixImageFilter.h
@@ -100,22 +100,22 @@ public:
   /** Make a DataObject of the correct type to be used as the specified
    * output.
    */
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
   /** Pass the input through unmodified. Do this by Grafting in the
    *  AllocateOutputs method.
    */
-  virtual void AllocateOutputs();
-  virtual void GenerateOutputInformation();
-  virtual void Synthetize(void);
-  virtual void Reset(void);
+  void AllocateOutputs() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
+  void Reset(void) ITK_OVERRIDE;
 
 protected:
   PersistentVectorImageToMatrixFilter();
-  virtual ~PersistentVectorImageToMatrixFilter() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  ~PersistentVectorImageToMatrixFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  void  ThreadedGenerateData(const RegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PersistentVectorImageToMatrixFilter(const Self &); //purposely not implemented
@@ -196,7 +196,7 @@ protected:
   /** Constructor */
   VectorImageToMatrixImageFilter() {};
   /** Destructor */
-  virtual ~VectorImageToMatrixImageFilter() {}
+  ~VectorImageToMatrixImageFilter() ITK_OVERRIDE {}
 
 private:
   VectorImageToMatrixImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbConcatenateVectorDataFilter.h b/Modules/Filtering/VectorDataManipulation/include/otbConcatenateVectorDataFilter.h
index 15e93edbdab16b1f11693de150ceca46a7160411..923c398a571c4f837cd4a12ee30d571f621be734 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbConcatenateVectorDataFilter.h
+++ b/Modules/Filtering/VectorDataManipulation/include/otbConcatenateVectorDataFilter.h
@@ -79,11 +79,11 @@ public:
 
 protected:
   ConcatenateVectorDataFilter();
-  virtual ~ConcatenateVectorDataFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ConcatenateVectorDataFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Triggers the Computation of the sample list */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   /** Recursive method to visit efficiently the vectordata*/
   void ProcessNode(TreeNodeType * source, DataNodeType * outputDocument);
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.h b/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.h
index f10cbb579ab543a2765a5bead613c36bbf3308bc..b0812958ee61fff492030ba77a49a29040e4fea3 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.h
+++ b/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.h
@@ -73,7 +73,7 @@ public:
 
   typedef std::vector<PrecisionType>                  OutputType;
 
-  virtual OutputType Evaluate( const DataNodeType& node ) const;
+  OutputType Evaluate( const DataNodeType& node ) const ITK_OVERRIDE;
 
   /** Set/Get methods */
   itkGetConstMacro(DistanceThreshold, PrecisionType);
@@ -84,8 +84,8 @@ public:
 
 protected:
   DBOverlapDataNodeFeatureFunction();
-  ~DBOverlapDataNodeFeatureFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~DBOverlapDataNodeFeatureFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   DBOverlapDataNodeFeatureFunction(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h b/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h
index 7e2939767e5c1be41adcf2dab02b898aa026ca66..8d7a130e358c77fdf501825bd6e3f9f81ebff499 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h
+++ b/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h
@@ -105,7 +105,7 @@ public:
   typedef std::vector<PrecisionType>                  OutputType;
 
   /* Compute the descriptor value along this DataNode */
- virtual OutputType Evaluate( const DataNodeType& node ) const;
+ OutputType Evaluate( const DataNodeType& node ) const ITK_OVERRIDE;
 
   /* Get the radius used to define the area around a line segment.
    * A radius of 0 means that the area is reduced to a line joining
@@ -135,8 +135,8 @@ public:
 
 protected:
   RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction();
-  ~RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.h b/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.h
index e467edd33d1840fd8478029b63372b777084a779..12767ec499ae4700c57fd318f2bcdd67bf6cf629 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.h
+++ b/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.h
@@ -98,7 +98,7 @@ public:
   typedef std::pair<IndexType, IndexType>             IndexPairType;
   typedef std::vector<PrecisionType>                  OutputType;
 
-  virtual OutputType Evaluate( const DataNodeType& node ) const;
+  OutputType Evaluate( const DataNodeType& node ) const ITK_OVERRIDE;
 
   /** Set/Get methods */
   itkGetConstMacro(RefPixel, PixelType);
@@ -109,8 +109,8 @@ public:
 
 protected:
   SpectralAngleDataNodeFeatureFunction();
-  ~SpectralAngleDataNodeFeatureFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~SpectralAngleDataNodeFeatureFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SpectralAngleDataNodeFeatureFunction(const Self&); //purposely not implemented
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataAdapter.h b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataAdapter.h
index a9e508c914ffb82a44de8d33c6db9c5141d7cf35..ad37791050376dc507c8a1b69fa92436e03a89c9 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataAdapter.h
+++ b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataAdapter.h
@@ -75,12 +75,12 @@ public:
 
 protected:
   VectorDataAdapter() {};
-  virtual ~VectorDataAdapter() {}
+  ~VectorDataAdapter() ITK_OVERRIDE {}
 
-  virtual OutputPointType ProcessPoint(InputPointType point) const;
-  virtual OutputLinePointerType ProcessLine(InputLinePointerType line) const;
-  virtual OutputPolygonPointerType ProcessPolygon(InputPolygonPointerType polygon) const;
-  virtual OutputPolygonListPointerType ProcessPolygonList(InputPolygonListPointerType polygonList) const;
+  OutputPointType ProcessPoint(InputPointType point) const ITK_OVERRIDE;
+  OutputLinePointerType ProcessLine(InputLinePointerType line) const ITK_OVERRIDE;
+  OutputPolygonPointerType ProcessPolygon(InputPolygonPointerType polygon) const ITK_OVERRIDE;
+  OutputPolygonListPointerType ProcessPolygonList(InputPolygonListPointerType polygonList) const ITK_OVERRIDE;
 
 private:
   VectorDataAdapter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataExtractROI.h b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataExtractROI.h
index cd1a9ba52b92d67f8c159d2dfc111f1d6078d5eb..69e9555e6de8aee7743993bb6dd59139a67f85a0 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataExtractROI.h
+++ b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataExtractROI.h
@@ -103,8 +103,8 @@ public:
 
 protected:
   VectorDataExtractROI();
-  virtual ~VectorDataExtractROI() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~VectorDataExtractROI() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Method to compare the projection embedded in the cartoRegion And the the InputVectorData*/
   virtual void CompareInputAndRegionProjection();
@@ -119,7 +119,7 @@ protected:
   virtual VertexType  PointToContinuousIndex(ProjPointType point);
 
   /** Prototype of the generate data method*/
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   /** Method to check if the polygon Bounding Box ha ve a non-null intersection with the ROI*/
   virtual bool IsPolygonIntersectionNotNull(PolygonPointerType polygon);
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToRandomLineGenerator.h b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToRandomLineGenerator.h
index 8eb160a7b2f471615f26b4d64dda7ae99da46e46..731c91f3c7df5e566c22a60dd3ac6549bc3d31ad 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToRandomLineGenerator.h
+++ b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToRandomLineGenerator.h
@@ -94,11 +94,11 @@ public:
 
 protected:
   VectorDataToRandomLineGenerator();
-  virtual ~VectorDataToRandomLineGenerator() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~VectorDataToRandomLineGenerator() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Triggers the Computation of the sample list */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   PointVectorType RandomPointsGenerator(DataNodeType * node);
 
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToSpecificDescriptionFilterBase.h b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToSpecificDescriptionFilterBase.h
index cca26043958b34dfde3963a55c74e1bc3433e91d..7b4a9f432bfe8905f3c20b3199d53e1ae509fb10 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToSpecificDescriptionFilterBase.h
+++ b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToSpecificDescriptionFilterBase.h
@@ -73,9 +73,9 @@ protected:
   /** Constructor */
   VectorDataToSpecificDescriptionFilterBase();
   /** Destructor */
-  virtual ~VectorDataToSpecificDescriptionFilterBase() {}
+  ~VectorDataToSpecificDescriptionFilterBase() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   VectorDataToSpecificDescriptionFilterBase(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToVectorDataFilter.h b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToVectorDataFilter.h
index f0f0b3157384a06e21142dc071fd5f21d9f17514..61efafd421e5df35bfac436d3c70f53d5b20173f 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToVectorDataFilter.h
+++ b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToVectorDataFilter.h
@@ -91,7 +91,7 @@ protected:
   /** Constructor */
   VectorDataToVectorDataFilter();
   /** Destructor */
-  virtual ~VectorDataToVectorDataFilter() {}
+  ~VectorDataToVectorDataFilter() ITK_OVERRIDE {}
 
   virtual OutputPointType ProcessPoint(InputPointType itkNotUsed(point)) const
   {
@@ -110,14 +110,14 @@ protected:
     itkExceptionMacro( << "Subclass should reimplement this method");
   }
 
-  virtual void GenerateOutputInformation(void);
-  virtual void GenerateData(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
+  void GenerateData(void) ITK_OVERRIDE;
 
   /** Go through the vector data tree and process the nodes */
   virtual void ProcessNode(InputInternalTreeNodeType * source, OutputInternalTreeNodeType * destination) const;
 
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   VectorDataToVectorDataFilter(const Self &); //purposely not implemented
diff --git a/Modules/Filtering/Wavelet/include/otbSubsampleImageFilter.h b/Modules/Filtering/Wavelet/include/otbSubsampleImageFilter.h
index 92ac96137241a4c65253bfd74c2d6ee6e916b92c..c74a540efcb6bdedcb5dabda5f62641f61621488 100644
--- a/Modules/Filtering/Wavelet/include/otbSubsampleImageFilter.h
+++ b/Modules/Filtering/Wavelet/include/otbSubsampleImageFilter.h
@@ -104,7 +104,7 @@ protected:
     m_SubsampleFactor.Fill(1);
     //this->SetNumberOfThreads(1);
     }
-  virtual ~SubsampleImageFilter() {}
+  ~SubsampleImageFilter() ITK_OVERRIDE {}
 
   /** Internal test function to check if there is any direction to subsample */
   bool IsSubsampleFactorOne() const;
@@ -112,24 +112,24 @@ protected:
   /** Since input and output image are very likely to be of different size.
    * Region estimation functions has to be reimplemented
    */
-  virtual void CallCopyOutputRegionToInputRegion
-    (InputImageRegionType& destRegion, const OutputImageRegionType& srcRegion);
-  virtual void CallCopyInputRegionToOutputRegion
-    (OutputImageRegionType& destRegion, const InputImageRegionType& srcRegion);
+  void CallCopyOutputRegionToInputRegion
+    (InputImageRegionType& destRegion, const OutputImageRegionType& srcRegion) ITK_OVERRIDE;
+  void CallCopyInputRegionToOutputRegion
+    (OutputImageRegionType& destRegion, const InputImageRegionType& srcRegion) ITK_OVERRIDE;
 
   /** Output image region size is not of the same dimension as the input.
    * That is why GenerateOutputInformation has to be redefined.
    */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Set output image to 0 before processing */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Allows multithreading */
-  virtual void ThreadedGenerateData
-    (const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData
+    (const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SubsampleImageFilter (const Self &);   // purposely not implemented
diff --git a/Modules/Filtering/Wavelet/include/otbWaveletFilterBank.h b/Modules/Filtering/Wavelet/include/otbWaveletFilterBank.h
index f4ca67bc3b48545bfd30261b7c26c598346ec93d..51c9ea0a5090a509fd0d01981e06184ff30b7251 100644
--- a/Modules/Filtering/Wavelet/include/otbWaveletFilterBank.h
+++ b/Modules/Filtering/Wavelet/include/otbWaveletFilterBank.h
@@ -212,13 +212,13 @@ public:
 
 protected:
   WaveletFilterBank();
-  virtual ~WaveletFilterBank() {}
+  ~WaveletFilterBank() ITK_OVERRIDE {}
 
   /** GenerateOutputInformation
     * Set the size of the output image depending on the decimation factor
     * Copy information from the input image if existing.
     **/
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** The forward transformation needs a larger input requested
    * region than the output requested region (larger by subsampling
@@ -229,13 +229,13 @@ protected:
    * pipeline execution model.
    *
    * \sa ImageToImageFilter::GenerateInputRequestedRegion() */
-  virtual void GenerateInputRequestedRegion()
-    throw (itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw (itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
   /** BeforeThreadedGenerateData.
    * It allocates also internal images
    */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Internal Data Allocation
    * If m_SubsampleImageFactor != 1, internal data with progressive region size
@@ -246,17 +246,17 @@ protected:
   /** AfterThreadedGenerateData.
    * It enforce memory destruction of internal images
    */
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
   /** CallCopyOutputRegionToInputRegion
    * Since input and output image may be of different size when a
    * subsampling factor has tp be applied, Region estimation
    * functions has to be reimplemented
    */
-  virtual void CallCopyOutputRegionToInputRegion
-    (InputImageRegionType& destRegion, const OutputImageRegionType& srcRegion);
-  virtual void CallCopyInputRegionToOutputRegion
-    (OutputImageRegionType& destRegion, const InputImageRegionType& srcRegion);
+  void CallCopyOutputRegionToInputRegion
+    (InputImageRegionType& destRegion, const OutputImageRegionType& srcRegion) ITK_OVERRIDE;
+  void CallCopyInputRegionToOutputRegion
+    (OutputImageRegionType& destRegion, const InputImageRegionType& srcRegion) ITK_OVERRIDE;
 
   /** CallCopyOutputRegionToInputRegion
    * This function is also redefined in order to adapt the shape of the regions with
@@ -270,7 +270,7 @@ protected:
                                                  const InputImageRegionType& srcRegion);
 
   /** Generate data redefinition */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** Iterative call to the forward filter bank at each dimension. */
   virtual void ThreadedGenerateDataAtDimensionN(unsigned int idx, unsigned int direction,
@@ -397,13 +397,13 @@ public:
 
 protected:
   WaveletFilterBank();
-  virtual ~WaveletFilterBank() {}
+  ~WaveletFilterBank() ITK_OVERRIDE {}
 
   /** GenerateOutputInformation
     * Set the size of the output image depending on the decimation factor
     * Copy information from the input image if existing.
     **/
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** The inverse transformation needs larger inputs requested
    * region than the output requested region (larger by subsampling
@@ -414,13 +414,13 @@ protected:
    * pipeline execution model.
    *
    * \sa ImageToImageFilter::GenerateInputRequestedRegion() */
-  virtual void GenerateInputRequestedRegion()
-    throw (itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion()
+    throw (itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
   /** BeforeThreadedGenerateData
    * If SubsampleImageFactor neq 1, it is necessary to up sample input images in the Wavelet::INVERSE mode
    */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Internal Data Allocation
    * If m_SubsampleImageFactor != 1, internal data with progressive region size
@@ -431,17 +431,17 @@ protected:
   /** AfterThreadedGenerateData.
    * It enforce memory destruction of internal images
    */
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
   /** CallCopyOutputRegionToInputRegion
    * Since input and output image may be of different size when a
    * subsampling factor has tp be applied, Region estimation
    * functions has to be reimplemented
    */
-  virtual void CallCopyOutputRegionToInputRegion
-    (InputImageRegionType& destRegion, const OutputImageRegionType& srcRegion);
-  virtual void CallCopyInputRegionToOutputRegion
-    (OutputImageRegionType& destRegion, const InputImageRegionType& srcRegion);
+  void CallCopyOutputRegionToInputRegion
+    (InputImageRegionType& destRegion, const OutputImageRegionType& srcRegion) ITK_OVERRIDE;
+  void CallCopyInputRegionToOutputRegion
+    (OutputImageRegionType& destRegion, const InputImageRegionType& srcRegion) ITK_OVERRIDE;
 
   /** CallCopyOutputRegionToInputRegion
    * This function is also redefined in order to adapt the shape of the regions with
@@ -455,7 +455,7 @@ protected:
                                                  const InputImageRegionType& srcRegion);
 
   /** Generate data redefinition */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /**
    * Iterative call to the forward filter bank at each dimension.
diff --git a/Modules/Filtering/Wavelet/include/otbWaveletGenerator.h b/Modules/Filtering/Wavelet/include/otbWaveletGenerator.h
index 68be4ad16b6f185059b8b7ba14a3f061f9940de6..8d49d71babaedc9f74ddad982473fdbfeca1d8b5 100644
--- a/Modules/Filtering/Wavelet/include/otbWaveletGenerator.h
+++ b/Modules/Filtering/Wavelet/include/otbWaveletGenerator.h
@@ -98,7 +98,7 @@ public:
 
 protected:
   WaveletGenerator() {}
-  ~WaveletGenerator() {}
+  ~WaveletGenerator() ITK_OVERRIDE {}
 
 private:
   WaveletGenerator(const Self &);  // not implemented
diff --git a/Modules/Filtering/Wavelet/include/otbWaveletHighPassOperator.h b/Modules/Filtering/Wavelet/include/otbWaveletHighPassOperator.h
index f680eea930fbc073ae371036d74f83c6c21bb9d4..09cd6c798217639a14e884774e4a14231438eb23 100644
--- a/Modules/Filtering/Wavelet/include/otbWaveletHighPassOperator.h
+++ b/Modules/Filtering/Wavelet/include/otbWaveletHighPassOperator.h
@@ -58,7 +58,7 @@ public:
 
 protected:
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent i) const
+  void PrintSelf(std::ostream& os, itk::Indent i) const ITK_OVERRIDE
   {
     os << i << "WaveletHighPassOperator {this=" << this << "}" << std::endl;
     Superclass::PrintSelf(os, i.GetNextIndent());
@@ -74,7 +74,7 @@ protected:
   /**
    * Set operator coefficients.
    */
-  CoefficientVector GenerateCoefficients()
+  CoefficientVector GenerateCoefficients() ITK_OVERRIDE
   {
     CoefficientVector coeff;
     if (DirectionOfTransformation == Wavelet::FORWARD)
diff --git a/Modules/Filtering/Wavelet/include/otbWaveletLowPassOperator.h b/Modules/Filtering/Wavelet/include/otbWaveletLowPassOperator.h
index 2b612a2099f4c459f089be132c245c2a53466fc8..e6ca6cd775f9c13ab6c092af410a30c7a6920ab9 100644
--- a/Modules/Filtering/Wavelet/include/otbWaveletLowPassOperator.h
+++ b/Modules/Filtering/Wavelet/include/otbWaveletLowPassOperator.h
@@ -57,7 +57,7 @@ public:
 
 protected:
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent i) const
+  void PrintSelf(std::ostream& os, itk::Indent i) const ITK_OVERRIDE
   {
     os << i << "WaveletLowPassOperator {this=" << this << "}" << std::endl;
     Superclass::PrintSelf(os, i.GetNextIndent());
@@ -73,7 +73,7 @@ protected:
   /**
    * Set operator coefficients.
    */
-  CoefficientVector GenerateCoefficients()
+  CoefficientVector GenerateCoefficients() ITK_OVERRIDE
   {
     CoefficientVector coeff;
     if (DirectionOfTransformation == Wavelet::FORWARD)
diff --git a/Modules/Filtering/Wavelet/include/otbWaveletOperatorBase.h b/Modules/Filtering/Wavelet/include/otbWaveletOperatorBase.h
index d17c1dfd9be33fb83d151e7d70b87793ef8b5429..19d437500a7b64944fc10e4e471cad60043a2d3a 100644
--- a/Modules/Filtering/Wavelet/include/otbWaveletOperatorBase.h
+++ b/Modules/Filtering/Wavelet/include/otbWaveletOperatorBase.h
@@ -98,7 +98,7 @@ public:
     m_WaveletGenerator = WaveletGeneratorType::New();
     }
 
-  virtual ~WaveletOperatorBase() {}
+  ~WaveletOperatorBase() ITK_OVERRIDE {}
 
   /** Assignment operator */
   Self & operator =(const Self& other)
@@ -136,7 +136,7 @@ protected:
   /**
    * Prints some debugging information
    */
-  virtual void PrintSelf(std::ostream& os, itk::Indent i) const;
+  void PrintSelf(std::ostream& os, itk::Indent i) const ITK_OVERRIDE;
 
   typedef WaveletGenerator<TMotherWaveletOperator> WaveletGeneratorType;
   typedef typename WaveletGeneratorType::Pointer   WaveletGeneratorPointerType;
@@ -185,7 +185,7 @@ protected:
   void ReduceFilterLength(CoefficientVector& coeff);
 
   /** Arranges coefficients spatially in the memory buffer. */
-  void Fill(const CoefficientVector& coeff)
+  void Fill(const CoefficientVector& coeff) ITK_OVERRIDE
   {
     this->FillCenteredDirectional(coeff);
   }
diff --git a/Modules/Filtering/Wavelet/include/otbWaveletPacketDecompositionCosts.h b/Modules/Filtering/Wavelet/include/otbWaveletPacketDecompositionCosts.h
index e87374c43d274f0c3f5ce6777bfb48ceaa472e5f..ed3db83bd4079594b9e1dfc25563d102da99530d 100644
--- a/Modules/Filtering/Wavelet/include/otbWaveletPacketDecompositionCosts.h
+++ b/Modules/Filtering/Wavelet/include/otbWaveletPacketDecompositionCosts.h
@@ -67,7 +67,7 @@ public:
 
 protected:
   FullyDecomposedWaveletPacketCost () {}
-  virtual ~FullyDecomposedWaveletPacketCost() {}
+  ~FullyDecomposedWaveletPacketCost() ITK_OVERRIDE {}
 
 private:
   FullyDecomposedWaveletPacketCost (const Self &);   // not implemented
diff --git a/Modules/Filtering/Wavelet/include/otbWaveletPacketTransform.h b/Modules/Filtering/Wavelet/include/otbWaveletPacketTransform.h
index 38662c7de03892cdf07b228f436116b34d6f49ea..0ed7fdbb477efcb8c11e06c48ca75408c3b1f123 100644
--- a/Modules/Filtering/Wavelet/include/otbWaveletPacketTransform.h
+++ b/Modules/Filtering/Wavelet/include/otbWaveletPacketTransform.h
@@ -183,13 +183,13 @@ public:
 
 protected:
   WaveletPacketTransform();
-  virtual ~WaveletPacketTransform() {}
+  ~WaveletPacketTransform() ITK_OVERRIDE {}
 
   /** Generate data redefinition.
    * This class does not performs multi-threading directly. But it uses step by step the
    * GenerateData() of TFilter. If This one can thread, the transformation is threaded
    * (e.g. WaveletFilterBank) */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Performs (if any) the local decomposition (called recursively) */
   virtual void GenerateData(unsigned int depth, OutputImageType * outputPtr,
@@ -321,19 +321,19 @@ public:
 
 protected:
   WaveletPacketTransform();
-  virtual ~WaveletPacketTransform() {}
+  ~WaveletPacketTransform() ITK_OVERRIDE {}
 
   /** GenerateOutputInformation
     * Set the size of the output image depending on the decimation factor
     * Copy information from the input image if existing.
     **/
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Generate data redefinition.
    * This class does not performs multi-threading directly. But it uses step by step the
    * GenerateData() of TFilter. If This one can thread, the transformation is threaded
    * (e.g. WaveletFilterBank) */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Performs (if any) the local decomposition (called recursively) */
   virtual unsigned int SetInputFilters(unsigned int& ruleID, InputImageIterator& inputIter,
diff --git a/Modules/Filtering/Wavelet/include/otbWaveletTransform.h b/Modules/Filtering/Wavelet/include/otbWaveletTransform.h
index f6cf26a38eed82d608523966bfe8ef6db691fdca..853d73c31c476af417049d4b5a241c217c0ba46e 100644
--- a/Modules/Filtering/Wavelet/include/otbWaveletTransform.h
+++ b/Modules/Filtering/Wavelet/include/otbWaveletTransform.h
@@ -173,10 +173,10 @@ public:
 
 protected:
   WaveletTransform();
-  virtual ~WaveletTransform() {}
+  ~WaveletTransform() ITK_OVERRIDE {}
 
   /** Generate data redefinition */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   WaveletTransform (const Self &);
@@ -304,16 +304,16 @@ public:
 
 protected:
   WaveletTransform();
-  virtual ~WaveletTransform() {}
+  ~WaveletTransform() ITK_OVERRIDE {}
 
   /** GenerateOutputInformation
     * Set the size of the output image depending on the decimation factor
     * Copy information from the input image if existing.
     **/
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Generate data redefinition */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   WaveletTransform (const Self &);
diff --git a/Modules/Fusion/Fuzzy/include/otbFuzzyVariable.h b/Modules/Fusion/Fuzzy/include/otbFuzzyVariable.h
index a792e7d8898808ca5759e595f08498e03c60f1ff..d1147d0f0ba295ba552780a7319c34d85d2c241d 100644
--- a/Modules/Fusion/Fuzzy/include/otbFuzzyVariable.h
+++ b/Modules/Fusion/Fuzzy/include/otbFuzzyVariable.h
@@ -104,9 +104,9 @@ protected:
   /** Constructor */
   FuzzyVariable();
   /** Destructor */
-  virtual ~FuzzyVariable() {}
+  ~FuzzyVariable() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** Map containing the membership functions */
diff --git a/Modules/Fusion/MajorityVoting/include/otbNeighborhoodMajorityVotingImageFilter.h b/Modules/Fusion/MajorityVoting/include/otbNeighborhoodMajorityVotingImageFilter.h
index ce25b90ecedb1db3c54530bac7ffd8b0d9f3bfe7..9074cf956c2e080878375a4fc5a34d138ae006b7 100644
--- a/Modules/Fusion/MajorityVoting/include/otbNeighborhoodMajorityVotingImageFilter.h
+++ b/Modules/Fusion/MajorityVoting/include/otbNeighborhoodMajorityVotingImageFilter.h
@@ -152,7 +152,7 @@ public:
 
 protected:
   NeighborhoodMajorityVotingImageFilter();
-  ~NeighborhoodMajorityVotingImageFilter() {};
+  ~NeighborhoodMajorityVotingImageFilter() ITK_OVERRIDE {};
 
   /** Evaluate image neighborhood with kernel to find the new value
    * for the center pixel value
@@ -162,9 +162,9 @@ protected:
    * Evaluate is used for non-boundary pixels. */
   PixelType Evaluate(const NeighborhoodIteratorType &nit,
                      const KernelIteratorType kernelBegin,
-                     const KernelIteratorType kernelEnd);
+                     const KernelIteratorType kernelEnd) ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
   NeighborhoodMajorityVotingImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Fusion/PanSharpening/include/otbBayesianFusionFilter.h b/Modules/Fusion/PanSharpening/include/otbBayesianFusionFilter.h
index f77b932d6b598f03eaa908071516e73e8eec3447..aaee25a29706b8f63d65e3df51488c1240dd6fef 100644
--- a/Modules/Fusion/PanSharpening/include/otbBayesianFusionFilter.h
+++ b/Modules/Fusion/PanSharpening/include/otbBayesianFusionFilter.h
@@ -300,14 +300,14 @@ public:
 
 protected:
   BayesianFusionFilter();
-  virtual ~BayesianFusionFilter();
+  ~BayesianFusionFilter() ITK_OVERRIDE;
   /** Check if internal statistics need to be computed, and do so */
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /** Compute internal statistics required for fusion */
   void ComputeInternalStatistics(void);
   /** Call the superclass implementation and set the StatisticsHaveBeenGenerated
    * flag to false */
-  virtual void Modified(void) const;
+  void Modified(void) const ITK_OVERRIDE;
 
 private:
   /** Ponderation declaration*/
diff --git a/Modules/Fusion/PanSharpening/include/otbLmvmPanSharpeningFusionImageFilter.h b/Modules/Fusion/PanSharpening/include/otbLmvmPanSharpeningFusionImageFilter.h
index 5594b7364ac0cebe3bfade26b9f66b25009d36f3..6304757d47e6122e6a2d544a01d6fcde58d0ecb8 100644
--- a/Modules/Fusion/PanSharpening/include/otbLmvmPanSharpeningFusionImageFilter.h
+++ b/Modules/Fusion/PanSharpening/include/otbLmvmPanSharpeningFusionImageFilter.h
@@ -109,13 +109,13 @@ protected:
   LmvmPanSharpeningFusionImageFilter();
 
   /** Destructor */
-  virtual ~LmvmPanSharpeningFusionImageFilter() {};
+  ~LmvmPanSharpeningFusionImageFilter() ITK_OVERRIDE {};
 
   /** Call to generate data, wiring composite internal minipipeline */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LmvmPanSharpeningFusionImageFilter(Self &);   // intentionally not implemented
diff --git a/Modules/Fusion/PanSharpening/include/otbSimpleRcsPanSharpeningFusionImageFilter.h b/Modules/Fusion/PanSharpening/include/otbSimpleRcsPanSharpeningFusionImageFilter.h
index db0c2959a044fc75addc4e1cde565f15d0a815cc..dcd58296ad2faa575a692f759c77f95ea83d0b71 100644
--- a/Modules/Fusion/PanSharpening/include/otbSimpleRcsPanSharpeningFusionImageFilter.h
+++ b/Modules/Fusion/PanSharpening/include/otbSimpleRcsPanSharpeningFusionImageFilter.h
@@ -94,13 +94,13 @@ protected:
   SimpleRcsPanSharpeningFusionImageFilter();
 
   /** Destructor */
-  virtual ~SimpleRcsPanSharpeningFusionImageFilter() {};
+  ~SimpleRcsPanSharpeningFusionImageFilter() ITK_OVERRIDE {};
 
   /** Call to generate data, wiring composite internal minipipeline */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SimpleRcsPanSharpeningFusionImageFilter(Self &);   // intentionally not implemented
diff --git a/Modules/Hyperspectral/AnomalyDetection/include/otbLocalRxDetectorFilter.h b/Modules/Hyperspectral/AnomalyDetection/include/otbLocalRxDetectorFilter.h
index c8542ca44ae238fae92bd52c9a5d478bdf846f3f..8f4ba2cad723e0b437b8b6b25ad09a3b1f8d08fd 100644
--- a/Modules/Hyperspectral/AnomalyDetection/include/otbLocalRxDetectorFilter.h
+++ b/Modules/Hyperspectral/AnomalyDetection/include/otbLocalRxDetectorFilter.h
@@ -90,16 +90,16 @@ public:
   itkGetMacro(ExternalRadius, int);
 
   /** Main computation method */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 //       virtual void GenerateData();
-  virtual void BeforeThreadedGenerateData();
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 
 protected:
   LocalRxDetectorFilter();
-  virtual ~LocalRxDetectorFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LocalRxDetectorFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LocalRxDetectorFilter(const Self&); //purposely not implemented
diff --git a/Modules/Hyperspectral/AnomalyDetection/include/otbLocalRxDetectorNonThreadFilter.h b/Modules/Hyperspectral/AnomalyDetection/include/otbLocalRxDetectorNonThreadFilter.h
index 117eefef8a583453eddef5394c9f08c02181eea7..e52011f1834b69cd374dd9f9fa014de63499d54b 100644
--- a/Modules/Hyperspectral/AnomalyDetection/include/otbLocalRxDetectorNonThreadFilter.h
+++ b/Modules/Hyperspectral/AnomalyDetection/include/otbLocalRxDetectorNonThreadFilter.h
@@ -89,16 +89,16 @@ public:
   itkGetMacro(ExternalRadius, int);
 
   /** Main computation method */
-  virtual void GenerateInputRequestedRegion();
-  virtual void GenerateData();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
+  void GenerateData() ITK_OVERRIDE;
 //       virtual void BeforeThreadedGenerateData();
 //       virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
 
 
 protected:
   LocalRxDetectorNonThreadFilter();
-  virtual ~LocalRxDetectorNonThreadFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LocalRxDetectorNonThreadFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LocalRxDetectorNonThreadFilter(const Self&); //purposely not implemented
diff --git a/Modules/Hyperspectral/EndmembersExtraction/include/otbEigenvalueLikelihoodMaximisation.h b/Modules/Hyperspectral/EndmembersExtraction/include/otbEigenvalueLikelihoodMaximisation.h
index 86f59e68c5bb4735000f4edd678cefbaffb261bc..0390b099e5bfd78f9d6c66c74af2db6915ca19aa 100644
--- a/Modules/Hyperspectral/EndmembersExtraction/include/otbEigenvalueLikelihoodMaximisation.h
+++ b/Modules/Hyperspectral/EndmembersExtraction/include/otbEigenvalueLikelihoodMaximisation.h
@@ -104,8 +104,8 @@ public:
 
 protected:
   EigenvalueLikelihoodMaximisation();
-  virtual ~EigenvalueLikelihoodMaximisation() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~EigenvalueLikelihoodMaximisation() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   EigenvalueLikelihoodMaximisation(const Self &); //purposely not implemented
diff --git a/Modules/Hyperspectral/EndmembersExtraction/include/otbVcaImageFilter.h b/Modules/Hyperspectral/EndmembersExtraction/include/otbVcaImageFilter.h
index 3d1524811a7db9a4091aeac948463b2d6c6386bd..c07b06cf2fa4c42c52d77e4c59f50042b1dbfb15 100644
--- a/Modules/Hyperspectral/EndmembersExtraction/include/otbVcaImageFilter.h
+++ b/Modules/Hyperspectral/EndmembersExtraction/include/otbVcaImageFilter.h
@@ -103,12 +103,12 @@ public:
   itkGetMacro( NumberOfEndmembers, unsigned int );
   itkSetMacro( NumberOfEndmembers, unsigned int );
 
-  virtual void Update()
+  void Update() ITK_OVERRIDE
   {
     this->GenerateData();
   }
 
-  virtual void EnlargeOutputRequestedRegion(itk::DataObject *itkNotUsed(output))
+  void EnlargeOutputRequestedRegion(itk::DataObject *itkNotUsed(output)) ITK_OVERRIDE
   {
     this->GetOutput()
       ->SetRequestedRegion( this->GetOutput()->GetLargestPossibleRegion() );
@@ -117,13 +117,13 @@ public:
 protected:
   VCAImageFilter();
 
-  virtual ~VCAImageFilter();
+  ~VCAImageFilter() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   VCAImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Hyperspectral/EndmembersExtraction/include/otbVirtualDimensionality.h b/Modules/Hyperspectral/EndmembersExtraction/include/otbVirtualDimensionality.h
index 8c931bb2f83d9b4cf7b34885877035f381632f9f..f5c130dc5d92b7b35c7de55479b1c0a116cf4f2b 100644
--- a/Modules/Hyperspectral/EndmembersExtraction/include/otbVirtualDimensionality.h
+++ b/Modules/Hyperspectral/EndmembersExtraction/include/otbVirtualDimensionality.h
@@ -117,8 +117,8 @@ public:
 
 protected:
   VirtualDimensionality();
-  virtual ~VirtualDimensionality() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~VirtualDimensionality() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   VirtualDimensionality(const Self &); //purposely not implemented
diff --git a/Modules/Hyperspectral/Unmixing/include/otbISRAUnmixingImageFilter.h b/Modules/Hyperspectral/Unmixing/include/otbISRAUnmixingImageFilter.h
index 1bb707cc4189dadb48ee53f5c8112add9d84037b..6e6a5d3b98452a4190e1541f5a38a2af970a5a53 100644
--- a/Modules/Hyperspectral/Unmixing/include/otbISRAUnmixingImageFilter.h
+++ b/Modules/Hyperspectral/Unmixing/include/otbISRAUnmixingImageFilter.h
@@ -168,9 +168,9 @@ public:
 protected:
   ISRAUnmixingImageFilter();
 
-  virtual ~ISRAUnmixingImageFilter();
+  ~ISRAUnmixingImageFilter() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ISRAUnmixingImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Hyperspectral/Unmixing/include/otbMDMDNMFImageFilter.h b/Modules/Hyperspectral/Unmixing/include/otbMDMDNMFImageFilter.h
index 07248e693f9782e032bb3aafa33a7d3911a184cd..b60a49658aaf055c53125c3937e97057112fae67 100644
--- a/Modules/Hyperspectral/Unmixing/include/otbMDMDNMFImageFilter.h
+++ b/Modules/Hyperspectral/Unmixing/include/otbMDMDNMFImageFilter.h
@@ -190,18 +190,18 @@ public:
 
 protected:
   MDMDNMFImageFilter();
-  virtual ~MDMDNMFImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~MDMDNMFImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** GenerateOutputInformation
    * Propagate vector length info and modify if needed
    */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Hyperspectral/Unmixing/include/otbNCLSUnmixingImageFilter.h b/Modules/Hyperspectral/Unmixing/include/otbNCLSUnmixingImageFilter.h
index a9d30c807dbb12ce314eed78c31ef0d568153fae..40c4cb5b2d970896ebe7916ffbd4baf486c17f95 100644
--- a/Modules/Hyperspectral/Unmixing/include/otbNCLSUnmixingImageFilter.h
+++ b/Modules/Hyperspectral/Unmixing/include/otbNCLSUnmixingImageFilter.h
@@ -171,9 +171,9 @@ public:
 protected:
   NCLSUnmixingImageFilter();
 
-  virtual ~NCLSUnmixingImageFilter();
+  ~NCLSUnmixingImageFilter() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   NCLSUnmixingImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Hyperspectral/Unmixing/include/otbSparseUnmixingImageFilter.h b/Modules/Hyperspectral/Unmixing/include/otbSparseUnmixingImageFilter.h
index 9625cd73896b2e6199895d760985773ba4451702..d43b6413b1d60c357984699f86ff8c55383e0b88 100644
--- a/Modules/Hyperspectral/Unmixing/include/otbSparseUnmixingImageFilter.h
+++ b/Modules/Hyperspectral/Unmixing/include/otbSparseUnmixingImageFilter.h
@@ -159,9 +159,9 @@ public:
 
 protected:
   SparseUnmixingImageFilter();
-  virtual ~SparseUnmixingImageFilter() { }
+  ~SparseUnmixingImageFilter() ITK_OVERRIDE { }
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   virtual void GenerateNumberOfComponentsRequired ();
 private:
   SparseUnmixingImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Hyperspectral/Unmixing/include/otbUnConstrainedLeastSquareImageFilter.h b/Modules/Hyperspectral/Unmixing/include/otbUnConstrainedLeastSquareImageFilter.h
index 4a869df0037c44de2f401e989f74fd42157ac63a..ffa75b2a7bdf50dd3bb2346fbb944c4b604747f7 100644
--- a/Modules/Hyperspectral/Unmixing/include/otbUnConstrainedLeastSquareImageFilter.h
+++ b/Modules/Hyperspectral/Unmixing/include/otbUnConstrainedLeastSquareImageFilter.h
@@ -171,9 +171,9 @@ public:
 protected:
   UnConstrainedLeastSquareImageFilter();
 
-  virtual ~UnConstrainedLeastSquareImageFilter() {}
+  ~UnConstrainedLeastSquareImageFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   UnConstrainedLeastSquareImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/IO/Carto/include/otbCoordinateToName.h b/Modules/IO/Carto/include/otbCoordinateToName.h
index 7c259a63d6fe2e3125dc165ed637bde6ce0e0339..3ddf4280839c5cf15889ab0650f9ba0b1a8d7757 100644
--- a/Modules/IO/Carto/include/otbCoordinateToName.h
+++ b/Modules/IO/Carto/include/otbCoordinateToName.h
@@ -114,8 +114,8 @@ public:
 
 protected:
   CoordinateToName();
-  virtual ~CoordinateToName() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~CoordinateToName() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   void ParseXMLGeonames(std::string& placeName, std::string& countryName) const;
 
   virtual void DoEvaluate();
diff --git a/Modules/IO/Carto/include/otbImageToOSMVectorDataGenerator.h b/Modules/IO/Carto/include/otbImageToOSMVectorDataGenerator.h
index f57b27435a9546b73da5b2d3ba0caa22be285583..00100ba8874495fd600e8542841cde930344c5bc 100644
--- a/Modules/IO/Carto/include/otbImageToOSMVectorDataGenerator.h
+++ b/Modules/IO/Carto/include/otbImageToOSMVectorDataGenerator.h
@@ -78,13 +78,13 @@ public:
   const ImageType* GetInput() const;
 
 protected:
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   // Method to compute the extent of the image
   void EstimateImageExtent();
 
   ImageToOSMVectorDataGenerator();
-  virtual ~ImageToOSMVectorDataGenerator() {}
+  ~ImageToOSMVectorDataGenerator() ITK_OVERRIDE {}
 
 private:
   ImageToOSMVectorDataGenerator(const Self&); //purposely not implemented
diff --git a/Modules/IO/Carto/include/otbMapFileProductWriter.h b/Modules/IO/Carto/include/otbMapFileProductWriter.h
index 4de59cbf3d0c2e9c3f95863414e77f0f8f093856..f5625e04ef8cd53727838b601725e81f72bdebbe 100644
--- a/Modules/IO/Carto/include/otbMapFileProductWriter.h
+++ b/Modules/IO/Carto/include/otbMapFileProductWriter.h
@@ -151,7 +151,7 @@ public:
   itkGetStringMacro(ShapeIndexPath);
 
   /** Update Method : Call a porotected Write method */
-  virtual void Update()
+  void Update() ITK_OVERRIDE
   {
     this->Write();
   }
@@ -161,8 +161,8 @@ public:
 
 protected:
   MapFileProductWriter();
-  virtual ~MapFileProductWriter();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~MapFileProductWriter() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /**Method for Tiling the input image*/
   virtual void Tiling();
diff --git a/Modules/IO/Carto/include/otbOSMDataToVectorDataGenerator.h b/Modules/IO/Carto/include/otbOSMDataToVectorDataGenerator.h
index 4c55fb87565e1c7aff553894f43c4bea12e51787..8b207173c38cd875021ec2eb8aa2f4c28c8f63d4 100644
--- a/Modules/IO/Carto/include/otbOSMDataToVectorDataGenerator.h
+++ b/Modules/IO/Carto/include/otbOSMDataToVectorDataGenerator.h
@@ -162,7 +162,7 @@ public:
 
 protected:
   /** Generate Data method : lauch the process */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /**
     * Parse the xml file get from OSM to compose the requested vector
@@ -182,7 +182,7 @@ protected:
 
 
   OSMDataToVectorDataGenerator();
-  virtual ~OSMDataToVectorDataGenerator();
+  ~OSMDataToVectorDataGenerator() ITK_OVERRIDE;
 
 private:
   OSMDataToVectorDataGenerator(const Self&); //purposely not implemented
diff --git a/Modules/IO/Carto/include/otbPlaceNameToLonLat.h b/Modules/IO/Carto/include/otbPlaceNameToLonLat.h
index 920bd2f0d1e6d5c651a415f59c75280ea08ff101..aa141ded0cd948acd07720bb61d7f31089450166 100644
--- a/Modules/IO/Carto/include/otbPlaceNameToLonLat.h
+++ b/Modules/IO/Carto/include/otbPlaceNameToLonLat.h
@@ -57,8 +57,8 @@ public:
 
 protected:
   PlaceNameToLonLat();
-  virtual ~PlaceNameToLonLat() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PlaceNameToLonLat() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   void RetrieveXML(const std::ostringstream& urlStream);
   void ParseXMLYahoo();
   void ParseXMLGoogle();
diff --git a/Modules/IO/Carto/include/otbWorldFile.h b/Modules/IO/Carto/include/otbWorldFile.h
index 3510967409f924966b7e677bea31e8d76b80385e..d70e473e8e366ee1d0df9bbe50ab98dbe09dd16b 100644
--- a/Modules/IO/Carto/include/otbWorldFile.h
+++ b/Modules/IO/Carto/include/otbWorldFile.h
@@ -93,7 +93,7 @@ protected:
     m_LonSpacing(0.0), m_LatSpacing(0.0),
     m_LonRotation(0.0), m_LatRotation(0.0),
     m_ImageFilename("") {}
-  ~WorldFile() {}
+  ~WorldFile() ITK_OVERRIDE {}
 
 private:
   WorldFile(const Self &); //purposely not implemented
diff --git a/Modules/IO/ExtendedFilename/include/otbExtendedFilenameHelper.h b/Modules/IO/ExtendedFilename/include/otbExtendedFilenameHelper.h
index 96e72fe51f617f41f61b89b1534ec9e9b13ccbd5..873c41301edc0c75195247a599ec2c74ade07324 100644
--- a/Modules/IO/ExtendedFilename/include/otbExtendedFilenameHelper.h
+++ b/Modules/IO/ExtendedFilename/include/otbExtendedFilenameHelper.h
@@ -54,7 +54,7 @@ public:
 
 protected:
   ExtendedFilenameHelper() {}
-  virtual ~ExtendedFilenameHelper() {}
+  ~ExtendedFilenameHelper() ITK_OVERRIDE {}
 
 private:
   ExtendedFilenameHelper(const Self &);  //purposely not implemented
diff --git a/Modules/IO/ExtendedFilename/include/otbExtendedFilenameToReaderOptions.h b/Modules/IO/ExtendedFilename/include/otbExtendedFilenameToReaderOptions.h
index d442a33fee8ede3ae1fcb2892c9986982892738d..afd89f11f60d65651ce0ec65f093869d9c6f615a 100644
--- a/Modules/IO/ExtendedFilename/include/otbExtendedFilenameToReaderOptions.h
+++ b/Modules/IO/ExtendedFilename/include/otbExtendedFilenameToReaderOptions.h
@@ -87,7 +87,7 @@ public:
 
 protected:
   ExtendedFilenameToReaderOptions();
-  virtual ~ExtendedFilenameToReaderOptions() {}
+  ~ExtendedFilenameToReaderOptions() ITK_OVERRIDE {}
 
 private:
   ExtendedFilenameToReaderOptions(const Self &);  //purposely not implemented
diff --git a/Modules/IO/ExtendedFilename/include/otbExtendedFilenameToWriterOptions.h b/Modules/IO/ExtendedFilename/include/otbExtendedFilenameToWriterOptions.h
index 856d22b3b5ea8388db2ca7fa2d6d5c2909b6e871..12dca4a8a6b77883282334df8e7f239bf7db17cb 100644
--- a/Modules/IO/ExtendedFilename/include/otbExtendedFilenameToWriterOptions.h
+++ b/Modules/IO/ExtendedFilename/include/otbExtendedFilenameToWriterOptions.h
@@ -96,7 +96,7 @@ public:
 
 protected:
   ExtendedFilenameToWriterOptions();
-  virtual ~ExtendedFilenameToWriterOptions() {}
+  ~ExtendedFilenameToWriterOptions() ITK_OVERRIDE {}
 
 private:
   ExtendedFilenameToWriterOptions(const Self &);  //purposely not implemented
diff --git a/Modules/IO/IOBSQ/include/otbBSQImageIO.h b/Modules/IO/IOBSQ/include/otbBSQImageIO.h
index 5113a1ad439d81121ab4fbc23fa2b696468088ea..09b8844680addfa5c49ebc503625723975ee2669 100644
--- a/Modules/IO/IOBSQ/include/otbBSQImageIO.h
+++ b/Modules/IO/IOBSQ/include/otbBSQImageIO.h
@@ -60,19 +60,19 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*);
+  bool CanReadFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream read the specified file */
-  virtual bool CanStreamRead()
+  bool CanStreamRead() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Set the spacing and dimention information for the set filename. */
-  virtual void ReadImageInformation();
+  void ReadImageInformation() ITK_OVERRIDE;
 
   /** Reads the data from disk into the memory buffer provided. */
-  virtual void Read(void* buffer);
+  void Read(void* buffer) ITK_OVERRIDE;
 
   /** Reads 3D data from multiple files assuming one slice per file. */
   virtual void ReadVolume(void* buffer);
@@ -81,28 +81,28 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanWriteFile(const char*);
+  bool CanWriteFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream write the specified file */
-  virtual bool CanStreamWrite()
+  bool CanStreamWrite() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Writes the spacing and dimentions of the image.
    * Assumes SetFileName has been called with a valid file name. */
-  virtual void WriteImageInformation();
+  void WriteImageInformation() ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided. Make sure
    * that the IORegion has been set properly. */
-  virtual void Write(const void* buffer);
+  void Write(const void* buffer) ITK_OVERRIDE;
 
   // JULIEN: NOT USED, NOT IMPLEMENTED
   // void SampleImage(void* buffer, int XBegin, int YBegin, int SizeXRead, int SizeYRead, int XSample, int YSample);
   
   /** Get the number of overviews available into the file specified
    *  This imageIO didn't support overviews */
-  virtual unsigned int GetOverviewsCount()
+  unsigned int GetOverviewsCount() ITK_OVERRIDE
   {
     // MANTIS-1154: Source image is always considered as the best
     // resolution overview.
@@ -111,7 +111,7 @@ public:
   
   /** Get information about overviews available into the file specified
    * This imageIO didn't support overviews */ 
-  virtual std::vector<std::string> GetOverviewsInfo()
+  std::vector<std::string> GetOverviewsInfo() ITK_OVERRIDE
   {
     std::vector<std::string> desc;
     return desc;
@@ -119,14 +119,14 @@ public:
   
   /** Provide hist about the output container to deal with complex pixel
    *  type (Not used here) */ 
-  virtual void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
-                                        bool itkNotUsed(isVectorImage)){}
+  void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
+                                        bool itkNotUsed(isVectorImage)) ITK_OVERRIDE{}
 
 protected:
   /** Constructor.*/
   BSQImageIO();
   /** Destructor.*/
-  virtual ~BSQImageIO();
+  ~BSQImageIO() ITK_OVERRIDE;
 
   bool OpenOneraDataFileForReading(const char* filename);
   bool OpenOneraHeaderFileForReading(const char* filename);
@@ -135,7 +135,7 @@ protected:
   bool OpenOneraDataFileForWriting(const char* filename);
   bool OpenOneraHeaderFileForWriting(const char* filename);
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   BSQImageIO(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOBSQ/include/otbBSQImageIOFactory.h b/Modules/IO/IOBSQ/include/otbBSQImageIOFactory.h
index a259920125384748227d6cd901c8d2773b6156d5..d19c3f5530a6393f9d572cc3d42fff5c77941dac 100644
--- a/Modules/IO/IOBSQ/include/otbBSQImageIOFactory.h
+++ b/Modules/IO/IOBSQ/include/otbBSQImageIOFactory.h
@@ -37,8 +37,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   BSQImageIOFactory();
-  virtual ~BSQImageIOFactory();
+  ~BSQImageIOFactory() ITK_OVERRIDE;
 
 private:
   BSQImageIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOGDAL/include/otbGDALDatasetWrapper.h b/Modules/IO/IOGDAL/include/otbGDALDatasetWrapper.h
index 89c4a1a82ee75c6f7a721382dcab369f9e5ee5e5..7b675444e001976aa244d76081e207bf7df2d988 100644
--- a/Modules/IO/IOGDAL/include/otbGDALDatasetWrapper.h
+++ b/Modules/IO/IOGDAL/include/otbGDALDatasetWrapper.h
@@ -76,7 +76,7 @@ public:
 protected :
   GDALDatasetWrapper();
 
-  virtual ~GDALDatasetWrapper();
+  ~GDALDatasetWrapper() ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/IO/IOGDAL/include/otbGDALImageIO.h b/Modules/IO/IOGDAL/include/otbGDALImageIO.h
index c258c75002b6bcca15fea4cc735f8aba65c45237..5f3cc815e190d1a8cfef0c604845326f67e35007 100644
--- a/Modules/IO/IOGDAL/include/otbGDALImageIO.h
+++ b/Modules/IO/IOGDAL/include/otbGDALImageIO.h
@@ -113,8 +113,8 @@ public:
   
   /** Provide hist about the output container to deal with complex pixel
    *  type */ 
-  virtual void SetOutputImagePixelType( bool isComplexInternalPixelType, 
-                                        bool isVectorImage)
+  void SetOutputImagePixelType( bool isComplexInternalPixelType, 
+                                        bool isVectorImage) ITK_OVERRIDE
   {
     this->SetIsComplex(isComplexInternalPixelType);
     this->SetIsVectorImage(isVectorImage);
@@ -124,19 +124,19 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*);
+  bool CanReadFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream read the specified file */
-  virtual bool CanStreamRead()
+  bool CanStreamRead() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Set the spacing and dimention information for the set filename. */
-  virtual void ReadImageInformation();
+  void ReadImageInformation() ITK_OVERRIDE;
 
   /** Reads the data from disk into the memory buffer provided. */
-  virtual void Read(void* buffer);
+  void Read(void* buffer) ITK_OVERRIDE;
 
   /** Reads 3D data from multiple files assuming one slice per file. */
   virtual void ReadVolume(void* buffer);
@@ -151,18 +151,18 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanWriteFile(const char*);
+  bool CanWriteFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream write the specified file */
-  virtual bool CanStreamWrite();
+  bool CanStreamWrite() ITK_OVERRIDE;
 
   /** Writes the spacing and dimentions of the image.
    * Assumes SetFileName has been called with a valid file name. */
-  virtual void WriteImageInformation();
+  void WriteImageInformation() ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided. Make sure
    * that the IORegion has been set properly. */
-  virtual void Write(const void* buffer);
+  void Write(const void* buffer) ITK_OVERRIDE;
 
   /** Get all resolutions possible from the file dimensions */
   bool GetAvailableResolutions(std::vector<unsigned int>& res);
@@ -175,10 +175,10 @@ public:
    *  Currently this overview count is only based on the first band
    *  If no pre-computed overviews are available we provide the overview
    *  count based on size division by 2*/
-  virtual unsigned int GetOverviewsCount();
+  unsigned int GetOverviewsCount() ITK_OVERRIDE;
 
   /** Get description about overviews available into the file specified */
-  virtual std::vector<std::string> GetOverviewsInfo();
+  std::vector<std::string> GetOverviewsInfo() ITK_OVERRIDE;
 
 protected:
   /**
@@ -188,9 +188,9 @@ protected:
    */
   GDALImageIO();
   /** Destructor.*/
-  virtual ~GDALImageIO();
+  ~GDALImageIO() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Read all information on the image*/
   void InternalReadImageInformation();
   /** Write all information on the image*/
diff --git a/Modules/IO/IOGDAL/include/otbGDALImageIOFactory.h b/Modules/IO/IOGDAL/include/otbGDALImageIOFactory.h
index 7e0c8b61da980198c9a80560cad2744f4555a155..f78784694c93ac514dcaf57ac4df1cf73c338b1b 100644
--- a/Modules/IO/IOGDAL/include/otbGDALImageIOFactory.h
+++ b/Modules/IO/IOGDAL/include/otbGDALImageIOFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -57,7 +57,7 @@ public:
 
 protected:
   GDALImageIOFactory();
-  virtual ~GDALImageIOFactory();
+  ~GDALImageIOFactory() ITK_OVERRIDE;
 
 private:
   GDALImageIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOGDAL/include/otbGDALOverviewsBuilder.h b/Modules/IO/IOGDAL/include/otbGDALOverviewsBuilder.h
index e0335c34033851fc10130c70bf0638278a690536..4262a321607b27569e595bd1854e7760e9b4c34d 100644
--- a/Modules/IO/IOGDAL/include/otbGDALOverviewsBuilder.h
+++ b/Modules/IO/IOGDAL/include/otbGDALOverviewsBuilder.h
@@ -152,15 +152,15 @@ public:
   void SetInputFileName( const std::string & str );
 
 
-  void Update();
+  void Update() ITK_OVERRIDE;
 
 
 protected:
   GDALOverviewsBuilder();
 
-  virtual ~GDALOverviewsBuilder() {};
+  ~GDALOverviewsBuilder() ITK_OVERRIDE {};
 
-  void PrintSelf( std::ostream & os, itk::Indent indent ) const;
+  void PrintSelf( std::ostream & os, itk::Indent indent ) const ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/IO/IOGDAL/include/otbOGRIOHelper.h b/Modules/IO/IOGDAL/include/otbOGRIOHelper.h
index 6df03e24d743bccc4c4c5cb2a2858a1c2bf0c0d4..a09ae724a53e634669dd8359922415cfcb643761 100644
--- a/Modules/IO/IOGDAL/include/otbOGRIOHelper.h
+++ b/Modules/IO/IOGDAL/include/otbOGRIOHelper.h
@@ -77,7 +77,7 @@ public:
 
 protected:
   OGRIOHelper();
-  ~OGRIOHelper();
+  ~OGRIOHelper() ITK_OVERRIDE;
 
 private:
   OGRIOHelper(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOGDAL/include/otbOGRVectorDataIO.h b/Modules/IO/IOGDAL/include/otbOGRVectorDataIO.h
index 4a2d5dc8d0dc6f6c13a60965efb4c5344b29f2ea..0c3b0b5c67a5cd6fda7a66f61e4894427ec8c83d 100644
--- a/Modules/IO/IOGDAL/include/otbOGRVectorDataIO.h
+++ b/Modules/IO/IOGDAL/include/otbOGRVectorDataIO.h
@@ -86,29 +86,29 @@ public:
 
   /** Determine the file type. Returns true if this VectorDataIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*) const;
+  bool CanReadFile(const char*) const ITK_OVERRIDE;
 
   /** Reads the data from disk into the memory buffer provided. */
-  virtual void Read(itk::DataObject* data);
+  void Read(itk::DataObject* data) ITK_OVERRIDE;
 
   /*-------- This part of the interfaces deals with writing data. ----- */
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanWriteFile(const char*) const;
+  bool CanWriteFile(const char*) const ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided */
-  virtual void Write(const itk::DataObject* data,  char ** papszOptions = NULL);
+  void Write(const itk::DataObject* data,  char ** papszOptions = NULL) ITK_OVERRIDE;
 
 protected:
   /** Constructor.*/
   OGRVectorDataIO();
   /** Destructor.*/
-  virtual ~OGRVectorDataIO();
+  ~OGRVectorDataIO() ITK_OVERRIDE;
 
   /*   virtual void InternalReadVectorDataInformation(){}; */
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   OGRVectorDataIO(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOGDAL/include/otbOGRVectorDataIOFactory.h b/Modules/IO/IOGDAL/include/otbOGRVectorDataIOFactory.h
index 3571167e5971c035e00534e24375096a46f2b18b..69dd784f3f8064759b40c8546cab340ffda6e809 100644
--- a/Modules/IO/IOGDAL/include/otbOGRVectorDataIOFactory.h
+++ b/Modules/IO/IOGDAL/include/otbOGRVectorDataIOFactory.h
@@ -37,8 +37,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -55,7 +55,7 @@ public:
 
 protected:
   OGRVectorDataIOFactory();
-  virtual ~OGRVectorDataIOFactory();
+  ~OGRVectorDataIOFactory() ITK_OVERRIDE;
 
 private:
   OGRVectorDataIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOJPEG2000/include/otbJPEG2000ImageIO.h b/Modules/IO/IOJPEG2000/include/otbJPEG2000ImageIO.h
index c8a1e3c794dfc5a65aff47c13c67be5c783908e8..8a0009c40323627bab1dde4c0a2c3985fc2ea783 100644
--- a/Modules/IO/IOJPEG2000/include/otbJPEG2000ImageIO.h
+++ b/Modules/IO/IOJPEG2000/include/otbJPEG2000ImageIO.h
@@ -59,32 +59,32 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*);
+  bool CanReadFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream read the specified file */
-  virtual bool CanStreamRead()
+  bool CanStreamRead() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Set the spacing and dimention information for the set filename. */
-  virtual void ReadImageInformation();
+  void ReadImageInformation() ITK_OVERRIDE;
 
   /** Get description about overviews available into the file specified */
-  virtual std::vector<std::string> GetOverviewsInfo();
+  std::vector<std::string> GetOverviewsInfo() ITK_OVERRIDE;
   
   /** Provide hist about the output container to deal with complex pixel
    *  type (Not used here) */ 
-  virtual void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
-                                        bool itkNotUsed(isVectorImage)){}
+  void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
+                                        bool itkNotUsed(isVectorImage)) ITK_OVERRIDE{}
   
   /** Get number of available overviews in the jpeg2000 file
    *  ( if return = 0 => no overviews available because only one resolution
    *  is encoded in the file) */
-  virtual unsigned int GetOverviewsCount();
+  unsigned int GetOverviewsCount() ITK_OVERRIDE;
 
   /** Reads the data from disk into the memory buffer provided. */
-  virtual void Read(void* buffer);
+  void Read(void* buffer) ITK_OVERRIDE;
 
   /** Reads 3D data from multiple files assuming one slice per file. */
   virtual void ReadVolume(void* buffer);
@@ -93,21 +93,21 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanWriteFile(const char*);
+  bool CanWriteFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream write the specified file */
-  virtual bool CanStreamWrite()
+  bool CanStreamWrite() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Writes the spacing and dimentions of the image.
    * Assumes SetFileName has been called with a valid file name. */
-  virtual void WriteImageInformation();
+  void WriteImageInformation() ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided. Make sure
    * that the IORegion has been set properly. */
-  virtual void Write(const void* buffer);
+  void Write(const void* buffer) ITK_OVERRIDE;
 
 
   /** Return the multithreader used by this class. */
@@ -127,9 +127,9 @@ protected:
   /** Constructor.*/
   JPEG2000ImageIO();
   /** Destructor.*/
-  virtual ~JPEG2000ImageIO();
+  ~JPEG2000ImageIO() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   typedef std::vector<boost::shared_ptr<JPEG2000InternalReader> > ReaderVectorType;
 
diff --git a/Modules/IO/IOJPEG2000/include/otbJPEG2000ImageIOFactory.h b/Modules/IO/IOJPEG2000/include/otbJPEG2000ImageIOFactory.h
index 018c7b0f0db404162f6aa26e2288106b4222d2a7..27c327315cf0cc1845a4642f6244f8b65ae8d2d2 100644
--- a/Modules/IO/IOJPEG2000/include/otbJPEG2000ImageIOFactory.h
+++ b/Modules/IO/IOJPEG2000/include/otbJPEG2000ImageIOFactory.h
@@ -37,8 +37,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   JPEG2000ImageIOFactory();
-  virtual ~JPEG2000ImageIOFactory();
+  ~JPEG2000ImageIOFactory() ITK_OVERRIDE;
 
 private:
   JPEG2000ImageIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOKML/include/otbKMLVectorDataIO.h b/Modules/IO/IOKML/include/otbKMLVectorDataIO.h
index 4bd9e0a53eaf2507a6c555e8aa46fc02242bbd3f..741f27d08b82b57e823d9784df92e900d425d1c1 100644
--- a/Modules/IO/IOKML/include/otbKMLVectorDataIO.h
+++ b/Modules/IO/IOKML/include/otbKMLVectorDataIO.h
@@ -87,27 +87,27 @@ public:
 
   /** Determine the file type. Returns true if this VectorDataIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*) const;
+  bool CanReadFile(const char*) const ITK_OVERRIDE;
 
   /** Reads the data from disk into the data structure provided. */
-  virtual void Read(itk::DataObject* data);
+  void Read(itk::DataObject* data) ITK_OVERRIDE;
 
   /*-------- This part of the interfaces deals with writing data. ----- */
 
   /** Determine the file type. Returns true if this VectorDataIO can read the
    * file specified. */
-  virtual bool CanWriteFile(const char*) const;
+  bool CanWriteFile(const char*) const ITK_OVERRIDE;
 
   /** Writes the data to disk from the data structure provided */
-  virtual void Write(const itk::DataObject* data, char ** papszOptions = NULL);
+  void Write(const itk::DataObject* data, char ** papszOptions = NULL) ITK_OVERRIDE;
 
 protected:
   /** Constructor.*/
   KMLVectorDataIO();
   /** Destructor.*/
-  virtual ~KMLVectorDataIO();
+  ~KMLVectorDataIO() ITK_OVERRIDE;
 
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   static const kmldom::FeaturePtr GetRootFeature(const kmldom::ElementPtr& root);
 
diff --git a/Modules/IO/IOKML/include/otbKMLVectorDataIOFactory.h b/Modules/IO/IOKML/include/otbKMLVectorDataIOFactory.h
index bbed681ee1d22b05c28ff000ce6fe5226f41f094..f5f7c496d16b46eff0972171225ff9d8276e8071 100644
--- a/Modules/IO/IOKML/include/otbKMLVectorDataIOFactory.h
+++ b/Modules/IO/IOKML/include/otbKMLVectorDataIOFactory.h
@@ -37,8 +37,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -55,7 +55,7 @@ public:
 
 protected:
   KMLVectorDataIOFactory();
-  virtual ~KMLVectorDataIOFactory();
+  ~KMLVectorDataIOFactory() ITK_OVERRIDE;
 
 private:
   KMLVectorDataIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOLUM/include/otbLUMImageIO.h b/Modules/IO/IOLUM/include/otbLUMImageIO.h
index 689d8f9c4f0536f4d5270019b3835c21779767f6..6df6f273a3f89c78c64216cc109aa478a8315aa0 100644
--- a/Modules/IO/IOLUM/include/otbLUMImageIO.h
+++ b/Modules/IO/IOLUM/include/otbLUMImageIO.h
@@ -59,19 +59,19 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*);
+  bool CanReadFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream read the specified file */
-  virtual bool CanStreamRead()
+  bool CanStreamRead() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Set the spacing and dimention information for the set filename. */
-  virtual void ReadImageInformation();
+  void ReadImageInformation() ITK_OVERRIDE;
 
   /** Reads the data from disk into the memory buffer provided. */
-  virtual void Read(void* buffer);
+  void Read(void* buffer) ITK_OVERRIDE;
 
   /** Reads 3D data from multiple files assuming one slice per file. */
   virtual void ReadVolume(void* buffer);
@@ -80,27 +80,27 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanWriteFile(const char*);
+  bool CanWriteFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream write the specified file */
-  virtual bool CanStreamWrite()
+  bool CanStreamWrite() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Writes the spacing and dimentions of the image.
    * Assumes SetFileName has been called with a valid file name. */
-  virtual void WriteImageInformation();
+  void WriteImageInformation() ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided. Make sure
    * that the IORegion has been set properly. */
-  virtual void Write(const void* buffer);
+  void Write(const void* buffer) ITK_OVERRIDE;
   // JULIEN: NOT USED, NOT IMPLEMENTED
   //void SampleImage(void* buffer, int XBegin, int YBegin, int SizeXRead, int SizeYRead, int XSample, int YSample);
 
   /** Get the number of overviews available into the file specified
    *  This imageIO didn't support overviews */
-  virtual unsigned int GetOverviewsCount()
+  unsigned int GetOverviewsCount() ITK_OVERRIDE
   {
     // MANTIS-1154: Source image is always considered as the best
     // resolution overview.
@@ -109,7 +109,7 @@ public:
   
   /** Get information about overviews available into the file specified
    * This imageIO didn't support overviews */ 
-  virtual std::vector<std::string> GetOverviewsInfo()
+  std::vector<std::string> GetOverviewsInfo() ITK_OVERRIDE
   {
     std::vector<std::string> desc;
     return desc;
@@ -117,14 +117,14 @@ public:
   
   /** Provide hist about the output container to deal with complex pixel
    *  type (Not used here) */ 
-  virtual void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
-                                        bool itkNotUsed(isVectorImage)){}
+  void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
+                                        bool itkNotUsed(isVectorImage)) ITK_OVERRIDE{}
 
 protected:
   /** Constructor.*/
   LUMImageIO();
   /** Destructor.*/
-  virtual ~LUMImageIO();
+  ~LUMImageIO() ITK_OVERRIDE;
 
   bool OpenOneraDataFileForReading(const char* filename);
   bool OpenOneraHeaderFileForReading(const char* filename);
@@ -133,7 +133,7 @@ protected:
   bool OpenOneraDataFileForWriting(const char* filename);
   bool OpenOneraHeaderFileForWriting(const char* filename);
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LUMImageIO(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOLUM/include/otbLUMImageIOFactory.h b/Modules/IO/IOLUM/include/otbLUMImageIOFactory.h
index 4383998365bccbb20e90a4f501ebf3f04dfd6c7c..33d6880c0fd9fb29c6e5ff169a9aa56740aac7ae 100644
--- a/Modules/IO/IOLUM/include/otbLUMImageIOFactory.h
+++ b/Modules/IO/IOLUM/include/otbLUMImageIOFactory.h
@@ -37,8 +37,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   LUMImageIOFactory();
-  virtual ~LUMImageIOFactory();
+  ~LUMImageIOFactory() ITK_OVERRIDE;
 
 private:
   LUMImageIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOMSTAR/include/otbMSTARImageIO.h b/Modules/IO/IOMSTAR/include/otbMSTARImageIO.h
index 539f4c30baeab1d55ce2238fedb90dd6962bbe22..f421cad501445cdd1873506d300b42fc43ee5205 100644
--- a/Modules/IO/IOMSTAR/include/otbMSTARImageIO.h
+++ b/Modules/IO/IOMSTAR/include/otbMSTARImageIO.h
@@ -52,47 +52,47 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*);
+  bool CanReadFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream read the specified file */
-  virtual bool CanStreamRead()
+  bool CanStreamRead() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Set the spacing and dimension information for the set filename. */
-  virtual void ReadImageInformation();
+  void ReadImageInformation() ITK_OVERRIDE;
 
   /** Reads the data from disk into the memory buffer provided. */
-  virtual void Read(void* buffer);
+  void Read(void* buffer) ITK_OVERRIDE;
 
   /*-------- This part of the interfaces deals with writing data. ----- */
 
   /** Determine the file type. Returns true if this ImageIO can write the
    * file specified. */
-  virtual bool CanWriteFile(const char*);
+  bool CanWriteFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream write the specified file */
-  virtual bool CanStreamWrite()
+  bool CanStreamWrite() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Set the spacing and dimension information for the set filename. */
-  virtual void WriteImageInformation();
+  void WriteImageInformation() ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided. Make sure
    * that the IORegions has been set properly. */
-  virtual void Write(const void* buffer);
+  void Write(const void* buffer) ITK_OVERRIDE;
 
   MSTARImageIO();
-  virtual ~MSTARImageIO();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~MSTARImageIO() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 
   /** Get the number of overviews available into the file specified
    *  This imageIO didn't support overviews */
-  virtual unsigned int GetOverviewsCount()
+  unsigned int GetOverviewsCount() ITK_OVERRIDE
   {
     // MANTIS-1154: Source image is always considered as the best
     // resolution overview.
@@ -101,7 +101,7 @@ public:
   
   /** Get information about overviews available into the file specified
    * This imageIO didn't support overviews */ 
-  virtual std::vector<std::string> GetOverviewsInfo()
+  std::vector<std::string> GetOverviewsInfo() ITK_OVERRIDE
   {
     std::vector<std::string> desc;
     return desc;
@@ -109,8 +109,8 @@ public:
   
   /** Provide hist about the output container to deal with complex pixel
    *  type (Not used here) */ 
-  virtual void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
-                                        bool itkNotUsed(isVectorImage)){}
+  void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
+                                        bool itkNotUsed(isVectorImage)) ITK_OVERRIDE{}
   
 private:
   MSTARImageIO(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOMSTAR/include/otbMSTARImageIOFactory.h b/Modules/IO/IOMSTAR/include/otbMSTARImageIOFactory.h
index 62f509c6176c902290d2a72e9306ee22200d5990..b5d5bb2ba85dc32595a82047c644bf036bf0e87d 100644
--- a/Modules/IO/IOMSTAR/include/otbMSTARImageIOFactory.h
+++ b/Modules/IO/IOMSTAR/include/otbMSTARImageIOFactory.h
@@ -37,8 +37,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   MSTARImageIOFactory();
-  virtual ~MSTARImageIOFactory();
+  ~MSTARImageIOFactory() ITK_OVERRIDE;
 
 private:
   MSTARImageIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOMW/include/otbMWImageIO.h b/Modules/IO/IOMW/include/otbMWImageIO.h
index 06cae9a52252f0b03e20adf638da1bb686580d37..41fd845b9cf2df2d7d86bc0e8e7833e73f1beb4c 100644
--- a/Modules/IO/IOMW/include/otbMWImageIO.h
+++ b/Modules/IO/IOMW/include/otbMWImageIO.h
@@ -59,19 +59,19 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*);
+  bool CanReadFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream read the specified file */
-  virtual bool CanStreamRead()
+  bool CanStreamRead() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Set the spacing and dimention information for the set filename. */
-  virtual void ReadImageInformation();
+  void ReadImageInformation() ITK_OVERRIDE;
 
   /** Reads the data from disk into the memory buffer provided. */
-  virtual void Read(void* buffer);
+  void Read(void* buffer) ITK_OVERRIDE;
 
   /** Reads 3D data from multiple files assuming one slice per file. */
   virtual void ReadVolume(void* buffer);
@@ -80,27 +80,27 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanWriteFile(const char*);
+  bool CanWriteFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream write the specified file */
-  virtual bool CanStreamWrite()
+  bool CanStreamWrite() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Writes the spacing and dimentions of the image.
    * Assumes SetFileName has been called with a valid file name. */
-  virtual void WriteImageInformation();
+  void WriteImageInformation() ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided. Make sure
    * that the IORegion has been set properly. */
-  virtual void Write(const void* buffer);
+  void Write(const void* buffer) ITK_OVERRIDE;
   // JULIEN: NOT USED, NOT IMPLEMENTED
   //void SampleImage(void* buffer, int XBegin, int YBegin, int SizeXRead, int SizeYRead, int XSample, int YSample);
 
   /** Get the number of overviews available into the file specified
    *  This imageIO didn't support overviews */
-  virtual unsigned int GetOverviewsCount()
+  unsigned int GetOverviewsCount() ITK_OVERRIDE
   {
     // MANTIS-1154: Source image is always considered as the best
     // resolution overview.
@@ -109,7 +109,7 @@ public:
 
   /** Get information about overviews available into the file specified
    * This imageIO didn't support overviews */ 
-  virtual std::vector<std::string> GetOverviewsInfo()
+  std::vector<std::string> GetOverviewsInfo() ITK_OVERRIDE
   {
     std::vector<std::string> desc;
     return desc;
@@ -117,14 +117,14 @@ public:
   
   /** Provide hist about the output container to deal with complex pixel
    *  type (Not used here) */ 
-  virtual void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
-                                        bool itkNotUsed(isVectorImage)){}
+  void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
+                                        bool itkNotUsed(isVectorImage)) ITK_OVERRIDE{}
 
 protected:
   /** Constructor.*/
   MWImageIO();
   /** Destructor.*/
-  virtual ~MWImageIO();
+  ~MWImageIO() ITK_OVERRIDE;
 
   bool OpenOneraDataFileForReading(const char* filename);
   bool OpenOneraHeaderFileForReading(const char* filename);
@@ -133,7 +133,7 @@ protected:
   bool OpenOneraDataFileForWriting(const char* filename);
   bool OpenOneraHeaderFileForWriting(const char* filename);
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   MWImageIO(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOMW/include/otbMWImageIOFactory.h b/Modules/IO/IOMW/include/otbMWImageIOFactory.h
index 8b9c2548f81c750eab7c369b5384017d6c043f6f..e869cb949263d77d5d8b7d3d21d1264547f91209 100644
--- a/Modules/IO/IOMW/include/otbMWImageIOFactory.h
+++ b/Modules/IO/IOMW/include/otbMWImageIOFactory.h
@@ -37,8 +37,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   MWImageIOFactory();
-  virtual ~MWImageIOFactory();
+  ~MWImageIOFactory() ITK_OVERRIDE;
 
 private:
   MWImageIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOONERA/include/otbONERAImageIO.h b/Modules/IO/IOONERA/include/otbONERAImageIO.h
index 592d69af70428e4b8d26fd84149ae26fe787b1bd..2c216323a5979ca725a1823fc02cc1f2637810fc 100644
--- a/Modules/IO/IOONERA/include/otbONERAImageIO.h
+++ b/Modules/IO/IOONERA/include/otbONERAImageIO.h
@@ -57,19 +57,19 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*);
+  bool CanReadFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream read the specified file */
-  virtual bool CanStreamRead()
+  bool CanStreamRead() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Set the spacing and dimention information for the set filename. */
-  virtual void ReadImageInformation();
+  void ReadImageInformation() ITK_OVERRIDE;
 
   /** Reads the data from disk into the memory buffer provided. */
-  virtual void Read(void* buffer);
+  void Read(void* buffer) ITK_OVERRIDE;
 
   /** Reads 3D data from multiple files assuming one slice per file. */
   virtual void ReadVolume(void* buffer);
@@ -78,27 +78,27 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanWriteFile(const char*);
+  bool CanWriteFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream write the specified file */
-  virtual bool CanStreamWrite()
+  bool CanStreamWrite() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Writes the spacing and dimentions of the image.
    * Assumes SetFileName has been called with a valid file name. */
-  virtual void WriteImageInformation();
+  void WriteImageInformation() ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided. Make sure
    * that the IORegion has been set properly. */
-  virtual void Write(const void* buffer);
+  void Write(const void* buffer) ITK_OVERRIDE;
   // JULIEN: NOT USED, NOT IMPLEMENTED
   //void SampleImage(void* buffer, int XBegin, int YBegin, int SizeXRead, int SizeYRead, int XSample, int YSample);
 
   /** Get the number of overviews available into the file specified
    *  This imageIO didn't support overviews */
-  virtual unsigned int GetOverviewsCount()
+  unsigned int GetOverviewsCount() ITK_OVERRIDE
   {
     // MANTIS-1154: Source image is always considered as the best
     // resolution overview.
@@ -107,7 +107,7 @@ public:
   
   /** Get information about overviews available into the file specified
    * This imageIO didn't support overviews */ 
-  virtual std::vector<std::string> GetOverviewsInfo()
+  std::vector<std::string> GetOverviewsInfo() ITK_OVERRIDE
   {
     std::vector<std::string> desc;
     return desc;
@@ -115,14 +115,14 @@ public:
   
   /** Provide hist about the output container to deal with complex pixel
    *  type (Not used here) */ 
-  virtual void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
-                                        bool itkNotUsed(isVectorImage)){}
+  void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
+                                        bool itkNotUsed(isVectorImage)) ITK_OVERRIDE{}
 
 protected:
   /** Constructor.*/
   ONERAImageIO();
   /** Destructor.*/
-  virtual ~ONERAImageIO();
+  ~ONERAImageIO() ITK_OVERRIDE;
 
   bool OpenOneraDataFileForReading(const char* filename);
   bool OpenOneraHeaderFileForReading(const char* filename);
@@ -133,7 +133,7 @@ protected:
   bool OpenOneraDataFileForWriting(const char* filename);
   bool OpenOneraHeaderFileForWriting(const char* filename);
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Dimension along Ox of the image*/
   int m_width;
diff --git a/Modules/IO/IOONERA/include/otbONERAImageIOFactory.h b/Modules/IO/IOONERA/include/otbONERAImageIOFactory.h
index 8d712a606fd97963c45995a9a8b4583ce5c6e55c..3e1dde8d5dbc1f5159d2d506a8d77264291d1ffe 100644
--- a/Modules/IO/IOONERA/include/otbONERAImageIOFactory.h
+++ b/Modules/IO/IOONERA/include/otbONERAImageIOFactory.h
@@ -37,8 +37,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   ONERAImageIOFactory();
-  virtual ~ONERAImageIOFactory();
+  ~ONERAImageIOFactory() ITK_OVERRIDE;
 
 private:
   ONERAImageIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IORAD/include/otbRADImageIO.h b/Modules/IO/IORAD/include/otbRADImageIO.h
index 08deb7f124c7fbcd7d7fb793846b04ff9dced259..50d8e1d031cf3a0e66d2161bdaffd015eecc6c1f 100644
--- a/Modules/IO/IORAD/include/otbRADImageIO.h
+++ b/Modules/IO/IORAD/include/otbRADImageIO.h
@@ -59,19 +59,19 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*);
+  bool CanReadFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream read the specified file */
-  virtual bool CanStreamRead()
+  bool CanStreamRead() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Set the spacing and dimention information for the set filename. */
-  virtual void ReadImageInformation();
+  void ReadImageInformation() ITK_OVERRIDE;
 
   /** Reads the data from disk into the memory buffer provided. */
-  virtual void Read(void* buffer);
+  void Read(void* buffer) ITK_OVERRIDE;
 
   /** Reads 3D data from multiple files assuming one slice per file. */
   virtual void ReadVolume(void* buffer);
@@ -80,28 +80,28 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanWriteFile(const char*);
+  bool CanWriteFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream write the specified file */
-  virtual bool CanStreamWrite()
+  bool CanStreamWrite() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Writes the spacing and dimentions of the image.
    * Assumes SetFileName has been called with a valid file name. */
-  virtual void WriteImageInformation();
+  void WriteImageInformation() ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided. Make sure
    * that the IORegion has been set properly. */
-  virtual void Write(const void* buffer);
+  void Write(const void* buffer) ITK_OVERRIDE;
 
   // JULIEN: NOT USED, NOT IMPLEMENTED
   // void SampleImage(void* buffer, int XBegin, int YBegin, int SizeXRead, int SizeYRead, int XSample, int YSample);
   
   /** Get the number of overviews available into the file specified
    *  This imageIO didn't support overviews */
-  virtual unsigned int GetOverviewsCount()
+  unsigned int GetOverviewsCount() ITK_OVERRIDE
   {
     // MANTIS-1154: Source image is always considered as the best
     // resolution overview.
@@ -110,7 +110,7 @@ public:
   
   /** Get information about overviews available into the file specified
    * This imageIO didn't support overviews */ 
-  virtual std::vector<std::string> GetOverviewsInfo()
+  std::vector<std::string> GetOverviewsInfo() ITK_OVERRIDE
   {
     std::vector<std::string> desc;
     return desc;
@@ -118,14 +118,14 @@ public:
   
   /** Provide hist about the output container to deal with complex pixel
    *  type (Not used here) */ 
-  virtual void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
-                                        bool itkNotUsed(isVectorImage)){}
+  void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
+                                        bool itkNotUsed(isVectorImage)) ITK_OVERRIDE{}
 
 protected:
   /** Constructor.*/
   RADImageIO();
   /** Destructor.*/
-  virtual ~RADImageIO();
+  ~RADImageIO() ITK_OVERRIDE;
 
   bool OpenOneraDataFileForReading(const char* filename);
   bool OpenOneraHeaderFileForReading(const char* filename);
@@ -135,7 +135,7 @@ protected:
   bool OpenOneraDataFileForWriting(const char* filename);
   bool OpenOneraHeaderFileForWriting(const char* filename);
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   RADImageIO(const Self &); //purposely not implemented
diff --git a/Modules/IO/IORAD/include/otbRADImageIOFactory.h b/Modules/IO/IORAD/include/otbRADImageIOFactory.h
index 4078c40954d4ab53db38f64928c898c561270648..79c27b508ede93b7ee3ea8359c5c62bf46a637bd 100644
--- a/Modules/IO/IORAD/include/otbRADImageIOFactory.h
+++ b/Modules/IO/IORAD/include/otbRADImageIOFactory.h
@@ -37,8 +37,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -56,7 +56,7 @@ public:
 
 protected:
   RADImageIOFactory();
-  virtual ~RADImageIOFactory();
+  ~RADImageIOFactory() ITK_OVERRIDE;
 
 private:
   RADImageIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOTileMap/include/otbTileMapImageIO.h b/Modules/IO/IOTileMap/include/otbTileMapImageIO.h
index 49015a5a89799e9a3b194448741717c59fae53e8..7fcf93252d9401d9cc92560e2dca9a62ec4e925a 100644
--- a/Modules/IO/IOTileMap/include/otbTileMapImageIO.h
+++ b/Modules/IO/IOTileMap/include/otbTileMapImageIO.h
@@ -87,41 +87,41 @@ public:
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanReadFile(const char*);
+  bool CanReadFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream read the specified file */
-  virtual bool CanStreamRead()
+  bool CanStreamRead() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Set the spacing and dimension information for the set filename. */
-  virtual void ReadImageInformation();
+  void ReadImageInformation() ITK_OVERRIDE;
 
   /** Reads the data from disk into the memory buffer provided. */
-  virtual void Read(void* buffer);
+  void Read(void* buffer) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if this ImageIO can read the
    * file specified. */
-  virtual bool CanWriteFile(const char*);
+  bool CanWriteFile(const char*) ITK_OVERRIDE;
 
   /** Determine the file type. Returns true if the ImageIO can stream write the specified file */
-  virtual bool CanStreamWrite()
+  bool CanStreamWrite() ITK_OVERRIDE
   {
     return true;
   }
 
   /** Writes the spacing and dimensions of the image.
    * Assumes SetFileName has been called with a valid file name. */
-  virtual void WriteImageInformation();
+  void WriteImageInformation() ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided. Make sure
    * that the IORegion has been set properly. */
-  virtual void Write(const void* buffer);
+  void Write(const void* buffer) ITK_OVERRIDE;
 
   /** Get the number of overviews available into the file specified
    *  This imageIO didn't support overviews */
-  virtual unsigned int GetOverviewsCount()
+  unsigned int GetOverviewsCount() ITK_OVERRIDE
   {
     // MANTIS-1154: Source image is always considered as the best
     // resolution overview.
@@ -130,7 +130,7 @@ public:
   
   /** Get information about overviews available into the file specified
    * This imageIO didn't support overviews */ 
-  virtual std::vector<std::string> GetOverviewsInfo()
+  std::vector<std::string> GetOverviewsInfo() ITK_OVERRIDE
   {
     std::vector<std::string> desc;
     return desc;
@@ -138,27 +138,27 @@ public:
   
   /** Provide hist about the output container to deal with complex pixel
    *  type (Not used here) */ 
-  virtual void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
-                                        bool itkNotUsed(isVectorImage)){}
+  void SetOutputImagePixelType( bool itkNotUsed(isComplexInternalPixelType), 
+                                        bool itkNotUsed(isVectorImage)) ITK_OVERRIDE{}
 
 protected:
   /** Constructor.*/
   TileMapImageIO();
   /** Destructor.*/
-  virtual ~TileMapImageIO();
+  ~TileMapImageIO() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Read all information on the image*/
   void InternalReadImageInformation();
   /** Write all information on the image*/
   void InternalWriteImageInformation();
 
-  virtual unsigned int GetActualNumberOfSplitsForWritingCanStreamWrite(unsigned int numberOfRequestedSplits,
-                                                                       const ImageIORegion& pasteRegion) const;
+  unsigned int GetActualNumberOfSplitsForWritingCanStreamWrite(unsigned int numberOfRequestedSplits,
+                                                                       const ImageIORegion& pasteRegion) const ITK_OVERRIDE;
 
-  virtual ImageIORegion GetSplitRegionForWritingCanStreamWrite(unsigned int ithPiece,
+  ImageIORegion GetSplitRegionForWritingCanStreamWrite(unsigned int ithPiece,
                                                                unsigned int numberOfActualSplits,
-                                                               const ImageIORegion& pasteRegion) const;
+                                                               const ImageIORegion& pasteRegion) const ITK_OVERRIDE;
 
   /** Number of bands of the image*/
   int m_NbBands;
diff --git a/Modules/IO/IOTileMap/include/otbTileMapImageIOFactory.h b/Modules/IO/IOTileMap/include/otbTileMapImageIOFactory.h
index 15125c3be1310ea6d6fcd141f7a0a33960c6d65b..4cf6d48003026b09d6e00b81a8fb0bc5d43d2e09 100644
--- a/Modules/IO/IOTileMap/include/otbTileMapImageIOFactory.h
+++ b/Modules/IO/IOTileMap/include/otbTileMapImageIOFactory.h
@@ -38,8 +38,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -57,7 +57,7 @@ public:
 
 protected:
   TileMapImageIOFactory();
-  virtual ~TileMapImageIOFactory();
+  ~TileMapImageIOFactory() ITK_OVERRIDE;
 
 private:
   TileMapImageIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/IOTileMap/include/otbTileMapImageIOHelper.h b/Modules/IO/IOTileMap/include/otbTileMapImageIOHelper.h
index 92b68ddbd451134e10c4a2aae26a50546bc4a6c3..a12d39e2eb2d1447797b60681b653d97275a0219 100644
--- a/Modules/IO/IOTileMap/include/otbTileMapImageIOHelper.h
+++ b/Modules/IO/IOTileMap/include/otbTileMapImageIOHelper.h
@@ -53,7 +53,7 @@ public:
 
 protected:
   TileMapImageIOHelper() {}
-  ~TileMapImageIOHelper() {}
+  ~TileMapImageIOHelper() ITK_OVERRIDE {}
 
 private:
   TileMapImageIOHelper(const Self &);  //purposely not implemented
diff --git a/Modules/IO/IOXML/include/otbStatisticsXMLFileReader.h b/Modules/IO/IOXML/include/otbStatisticsXMLFileReader.h
index f0df2b82e57fd107ebd33d0908201c85bf8ed774..0755563e1136bc04135df3fae41651ff2f76fbca 100644
--- a/Modules/IO/IOXML/include/otbStatisticsXMLFileReader.h
+++ b/Modules/IO/IOXML/include/otbStatisticsXMLFileReader.h
@@ -61,7 +61,7 @@ public:
   typedef std::map<std::string , std::string>           GenericMapType;
   typedef std::map<std::string , GenericMapType>        GenericMapContainer;
 
-  virtual void Modified() const
+  void Modified() const ITK_OVERRIDE
     {
       m_IsUpdated = false;
     }
@@ -92,8 +92,8 @@ protected:
   virtual void Read();
 
   StatisticsXMLFileReader();
-  virtual ~StatisticsXMLFileReader() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~StatisticsXMLFileReader() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   StatisticsXMLFileReader(const Self&); //purposely not implemented
diff --git a/Modules/IO/IOXML/include/otbStatisticsXMLFileWriter.h b/Modules/IO/IOXML/include/otbStatisticsXMLFileWriter.h
index 80256c2eb43ca75c81933538b5566a9ae932207e..c1c43bd7db8402908ee5b3bbe564beff9da5b5e3 100644
--- a/Modules/IO/IOXML/include/otbStatisticsXMLFileWriter.h
+++ b/Modules/IO/IOXML/include/otbStatisticsXMLFileWriter.h
@@ -89,8 +89,8 @@ protected:
   virtual void GenerateData();
 
   StatisticsXMLFileWriter();
-  virtual ~StatisticsXMLFileWriter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~StatisticsXMLFileWriter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   StatisticsXMLFileWriter(const Self&); //purposely not implemented
diff --git a/Modules/IO/ImageIO/include/otbImageFileReader.h b/Modules/IO/ImageIO/include/otbImageFileReader.h
index 8ad06ee8d46f78f878b572124067a8db647bab4a..a5b6d7df323afed1c3b8e3b82b9b9f717482192b 100644
--- a/Modules/IO/ImageIO/include/otbImageFileReader.h
+++ b/Modules/IO/ImageIO/include/otbImageFileReader.h
@@ -120,17 +120,17 @@ public:
   typedef ExtendedFilenameToReaderOptions            FNameHelperType;
 
   /** Prepare image allocation at the first call of the pipeline processing */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /** Does the real work. */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Give the reader a chance to indicate that it will produce more
    * output than it was requested to produce. ImageFileReader cannot
    * currently read a portion of an image (since the ImageIO objects
    * cannot read a portion of an image), so the ImageFileReader must
    * enlarge the RequestedRegion to the size of the image on disk. */
-  virtual void EnlargeOutputRequestedRegion(itk::DataObject *output);
+  void EnlargeOutputRequestedRegion(itk::DataObject *output) ITK_OVERRIDE;
 
   /** Set/Get the ImageIO helper class. Often this is created via the object
    * factory mechanism that determines whether a particular ImageIO can
@@ -160,8 +160,8 @@ public:
 
 protected:
   ImageFileReader();
-  virtual ~ImageFileReader();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageFileReader() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Convert a block of pixels from one type to another. */
   void DoConvertBuffer(void* buffer, size_t numberOfPixels);
diff --git a/Modules/IO/ImageIO/include/otbImageFileWriter.h b/Modules/IO/ImageIO/include/otbImageFileWriter.h
index 17b4d357641bc012e7c1c3d1219b0f193b3d1cf6..d1b3176baeda3b3cb3ce3c164d8b6ac3334255ca 100644
--- a/Modules/IO/ImageIO/include/otbImageFileWriter.h
+++ b/Modules/IO/ImageIO/include/otbImageFileWriter.h
@@ -165,7 +165,7 @@ public:
 
   /** Override Update() from ProcessObject because this filter
    *  has no output. */
-  virtual void Update();
+  void Update() ITK_OVERRIDE;
 
   /** ImageFileWriter Methods */
   virtual void SetFileName(const char* extendedFileName);
@@ -198,11 +198,11 @@ public:
 
 protected:
   ImageFileWriter();
-  virtual ~ImageFileWriter();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ImageFileWriter() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Does the real work. */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
 private:
   ImageFileWriter(const ImageFileWriter &); //purposely not implemented
diff --git a/Modules/IO/ImageIO/include/otbImageIOFactory.h b/Modules/IO/ImageIO/include/otbImageIOFactory.h
index c9cdbf3e4256b7b1bc65e62b171b0a358814c5cf..5cffc62b9d76469fcc2ae0675f01e1aff979b198 100644
--- a/Modules/IO/ImageIO/include/otbImageIOFactory.h
+++ b/Modules/IO/ImageIO/include/otbImageIOFactory.h
@@ -56,7 +56,7 @@ public:
 
 protected:
   ImageIOFactory();
-  ~ImageIOFactory();
+  ~ImageIOFactory() ITK_OVERRIDE;
 
 private:
   ImageIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/IO/ImageIO/include/otbImageSeriesFileReader.h b/Modules/IO/ImageIO/include/otbImageSeriesFileReader.h
index 3d6eb560ed1b4e092614ea41402317d601ae5cf4..c5e9c61b26d5ad64c0b63f3c0b66c4a68ac17853 100644
--- a/Modules/IO/ImageIO/include/otbImageSeriesFileReader.h
+++ b/Modules/IO/ImageIO/include/otbImageSeriesFileReader.h
@@ -426,12 +426,12 @@ public:
 
 protected:
   ImageSeriesFileReader();
-  virtual ~ImageSeriesFileReader () {}
+  ~ImageSeriesFileReader () ITK_OVERRIDE {}
 
   /**
    * Tests the coherency of the Meta File (especifically band selection) with the image types
    */
-  virtual void TestBandSelection(std::vector<unsigned int>& itkNotUsed(bands)){}
+  void TestBandSelection(std::vector<unsigned int>& itkNotUsed(bands)) ITK_OVERRIDE{}
 
   /** GenerateData
    * This method will be specialised if template definitions follow:
@@ -439,7 +439,7 @@ protected:
    * - TImage is an Image and TInteranalImage is a VectorImage
    * - TImage and TInternalImage are of Image type.
    */
-  virtual void GenerateData(DataObjectPointerArraySizeType idx);
+  void GenerateData(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::GenerateData;
 
   /**
@@ -447,10 +447,10 @@ protected:
    * This allows specific (or global) initialization in the GenerateData methods,
    * that the user may invoke throught GenerateOutput() or GenerateOutput( idx ).
    */
-  virtual void AllocateListOfComponents(void);
+  void AllocateListOfComponents(void) ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     return Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/IO/ImageIO/include/otbImageSeriesFileReaderBase.h b/Modules/IO/ImageIO/include/otbImageSeriesFileReaderBase.h
index dcbb7cc4bcc1694310846beb5ad86446eb141908..b3f8b66ad6675f08082663ba5bcba1b1a047fb87 100644
--- a/Modules/IO/ImageIO/include/otbImageSeriesFileReaderBase.h
+++ b/Modules/IO/ImageIO/include/otbImageSeriesFileReaderBase.h
@@ -131,7 +131,7 @@ public:
   {
     return m_ListOfFileNames.size();
   }
-  virtual OutputImageListType * GetOutput(void);
+  OutputImageListType * GetOutput(void) ITK_OVERRIDE;
   virtual OutputImageType *     GetOutput(DataObjectPointerArraySizeType idx);
 
   /** Performs selective file extraction */
@@ -139,14 +139,14 @@ public:
   virtual OutputImageType * GenerateOutput(DataObjectPointerArraySizeType idx);
 
   /** Synchronization */
-  void Update()
+  void Update() ITK_OVERRIDE
   {
     this->GenerateData();
   }
 
 protected:
   ImageSeriesFileReaderBase();
-  virtual ~ImageSeriesFileReaderBase () {}
+  ~ImageSeriesFileReaderBase () ITK_OVERRIDE {}
 
   enum FileType { kFileName = 0, kImageFileName, kAnyFileName };
   /**
@@ -157,7 +157,7 @@ protected:
   virtual void TestFileExistanceAndReadability(std::string& file, FileType fileType);
   virtual void TestBandSelection(std::vector<unsigned int>& itkNotUsed(bands)) {}
 
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   /** GenerateData
    * This method will be specialised if template definitions follow:
@@ -179,7 +179,7 @@ protected:
   virtual void AllocateListOfComponents(void);
 
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   std::string                m_FileName;
   OutputImageListPointerType m_OutputList;
diff --git a/Modules/IO/ImageIO/include/otbScalarBufferToImageFileWriter.h b/Modules/IO/ImageIO/include/otbScalarBufferToImageFileWriter.h
index d3836bc39305c2521ec2431257c6a62072d28711..d925284352c2fa7f6c9de37b726c7cdd78bb5d30 100644
--- a/Modules/IO/ImageIO/include/otbScalarBufferToImageFileWriter.h
+++ b/Modules/IO/ImageIO/include/otbScalarBufferToImageFileWriter.h
@@ -88,17 +88,17 @@ public:
        m_Buffer = pBuff;
   }
 
-   virtual void GenerateData();
+   void GenerateData() ITK_OVERRIDE;
 
-   virtual void Update()
+   void Update() ITK_OVERRIDE
    {
      this->GenerateData();
    }
 
 protected:
   ScalarBufferToImageFileWriter();
-  virtual ~ScalarBufferToImageFileWriter() { /* don't call ClearBuffer, user's care */}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ScalarBufferToImageFileWriter() ITK_OVERRIDE { /* don't call ClearBuffer, user's care */}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/IO/KMZWriter/include/otbKmzProductWriter.h b/Modules/IO/KMZWriter/include/otbKmzProductWriter.h
index 316abad838cb6aa4d368127453340072dbe51b48..707f8c565f02be3b6af67768786792502ed24d94 100644
--- a/Modules/IO/KMZWriter/include/otbKmzProductWriter.h
+++ b/Modules/IO/KMZWriter/include/otbKmzProductWriter.h
@@ -133,7 +133,7 @@ public:
   itkSetStringMacro(Path);
 
   /** Update Method */
-  virtual void Update()
+  void Update() ITK_OVERRIDE
   {
     this->Write();
   }
@@ -164,8 +164,8 @@ public:
 
 protected:
   KmzProductWriter();
-  virtual ~KmzProductWriter();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~KmzProductWriter() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /**Method for Tiling the input image*/
   virtual void Tiling();
diff --git a/Modules/IO/TestKernel/include/otbDifferenceImageFilter.h b/Modules/IO/TestKernel/include/otbDifferenceImageFilter.h
index 73fbb330659f6b55fcae911880b2362dfb383375..9d7a4251594c24f014b4cefe57b55247b2935002 100644
--- a/Modules/IO/TestKernel/include/otbDifferenceImageFilter.h
+++ b/Modules/IO/TestKernel/include/otbDifferenceImageFilter.h
@@ -71,9 +71,9 @@ public:
 
 protected:
   DifferenceImageFilter();
-  virtual ~DifferenceImageFilter() {}
+  ~DifferenceImageFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** DifferenceImageFilter can be implemented as a multithreaded
    * filter.  Therefore, this implementation provides a
@@ -87,11 +87,11 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType& threadRegion,
-                            itk::ThreadIdType threadId);
+                            itk::ThreadIdType threadId) ITK_OVERRIDE;
 
-  void BeforeThreadedGenerateData();
-  void AfterThreadedGenerateData();
-  virtual void GenerateOutputInformation();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   ScalarRealType m_DifferenceThreshold;
   RealType       m_MeanDifference;
diff --git a/Modules/IO/TestKernel/include/otbTestHelper.h b/Modules/IO/TestKernel/include/otbTestHelper.h
index 203c31b36f340812b9794f1e7cb78a7d41b6db2c..ed90de6d3692eb35d1d92c7d33f32e5f2f67987f 100644
--- a/Modules/IO/TestKernel/include/otbTestHelper.h
+++ b/Modules/IO/TestKernel/include/otbTestHelper.h
@@ -66,7 +66,7 @@ public:
     m_MaxArea(1024*1024)
   {}
 
-  ~TestHelper(){}
+  ~TestHelper() ITK_OVERRIDE{}
 
   int RegressionTestAllImages(const StringList& baselineFilenamesImage,
                               const StringList& testFilenamesImage);
diff --git a/Modules/IO/VectorDataIO/include/otbVectorDataFileReader.h b/Modules/IO/VectorDataIO/include/otbVectorDataFileReader.h
index 84457d064bcff185ae64edcb6989aa14ce6e4dc0..c243e476e253d0a2b1ae2242b9dd828992050253 100644
--- a/Modules/IO/VectorDataIO/include/otbVectorDataFileReader.h
+++ b/Modules/IO/VectorDataIO/include/otbVectorDataFileReader.h
@@ -117,20 +117,20 @@ public:
 
   /** Prepare the allocation of the output vector data during the first back
    * propagation of the pipeline. */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /** Does the real work. */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 protected:
   VectorDataFileReader();
-  virtual ~VectorDataFileReader();
+  ~VectorDataFileReader() ITK_OVERRIDE;
   std::string m_ExceptionMessage;
 
   typename VectorDataIOBaseType::Pointer m_VectorDataIO;
   bool m_UserSpecifiedVectorDataIO;  // keep track whether the
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   std::string m_FileName; // The file to be read
 
diff --git a/Modules/IO/VectorDataIO/include/otbVectorDataFileWriter.h b/Modules/IO/VectorDataIO/include/otbVectorDataFileWriter.h
index 8faca223c7b0b939ce06a6bdc0665cc70ecc02f3..bac0cd9350a33cc71f0fa4af759705431799ca65 100644
--- a/Modules/IO/VectorDataIO/include/otbVectorDataFileWriter.h
+++ b/Modules/IO/VectorDataIO/include/otbVectorDataFileWriter.h
@@ -90,9 +90,9 @@ public:
   /** Does the real work. */
   virtual void Write();
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
-  virtual void Update()
+  void Update() ITK_OVERRIDE
   {
     this->Write();
   }
@@ -103,9 +103,9 @@ public:
 
 protected:
   VectorDataFileWriter();
-  virtual ~VectorDataFileWriter();
+  ~VectorDataFileWriter() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   std::string m_FileName; // The file to be read
   typename VectorDataIOBaseType::Pointer m_VectorDataIO;
diff --git a/Modules/IO/VectorDataIO/include/otbVectorDataIOFactory.h b/Modules/IO/VectorDataIO/include/otbVectorDataIOFactory.h
index ed84fedfd32e8d64910f7a0e684153bf463e9048..6f4d54cd912cec809f1c6a86901ac0fe4db1fd28 100644
--- a/Modules/IO/VectorDataIO/include/otbVectorDataIOFactory.h
+++ b/Modules/IO/VectorDataIO/include/otbVectorDataIOFactory.h
@@ -59,7 +59,7 @@ public:
 
 protected:
   VectorDataIOFactory();
-  ~VectorDataIOFactory();
+  ~VectorDataIOFactory() ITK_OVERRIDE;
 
 private:
   VectorDataIOFactory(const Self &); //purposely not implemented
diff --git a/Modules/Learning/DempsterShafer/include/otbConfusionMatrixToMassOfBelief.h b/Modules/Learning/DempsterShafer/include/otbConfusionMatrixToMassOfBelief.h
index 427303d96f93c41c612feeb4ac44f50b37866285..37b117b3e50735f8c9a8ed3ae38e4a16efe69920 100644
--- a/Modules/Learning/DempsterShafer/include/otbConfusionMatrixToMassOfBelief.h
+++ b/Modules/Learning/DempsterShafer/include/otbConfusionMatrixToMassOfBelief.h
@@ -82,7 +82,7 @@ public:
 
   enum MassOfBeliefDefinitionMethod {PRECISION, RECALL, ACCURACY, KAPPA};
 
-  virtual void Update();
+  void Update() ITK_OVERRIDE;
 
   /** Accessors */
   itkSetMacro(ConfusionMatrix, ConfusionMatrixType);
@@ -138,10 +138,10 @@ protected:
   ConfusionMatrixToMassOfBelief();
 
   /** Destructor */
-  virtual ~ConfusionMatrixToMassOfBelief() {};
+  ~ConfusionMatrixToMassOfBelief() ITK_OVERRIDE {};
 
   /** Triggers the computation of the confusion matrix */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
 private:
   ConfusionMatrixToMassOfBelief(const Self&); //purposely not implemented
diff --git a/Modules/Learning/DempsterShafer/include/otbDSFusionOfClassifiersImageFilter.h b/Modules/Learning/DempsterShafer/include/otbDSFusionOfClassifiersImageFilter.h
index 84b093f8c167c6985890be5a9e9c888b4dd2c8d6..6b5c871fafaf39adb4920cfd8f39823bea16d918 100644
--- a/Modules/Learning/DempsterShafer/include/otbDSFusionOfClassifiersImageFilter.h
+++ b/Modules/Learning/DempsterShafer/include/otbDSFusionOfClassifiersImageFilter.h
@@ -137,16 +137,16 @@ protected:
   /** Constructor */
   DSFusionOfClassifiersImageFilter();
   /** Destructor */
-  virtual ~DSFusionOfClassifiersImageFilter() {}
+  ~DSFusionOfClassifiersImageFilter() ITK_OVERRIDE {}
 
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   DSFusionOfClassifiersImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Learning/DempsterShafer/include/otbJointMassOfBeliefFilter.h b/Modules/Learning/DempsterShafer/include/otbJointMassOfBeliefFilter.h
index 98e3d036b3a77ad9772b019076f8a93923555612..74499f4d466d850b7fd93e8202c1efb7606dc92a 100644
--- a/Modules/Learning/DempsterShafer/include/otbJointMassOfBeliefFilter.h
+++ b/Modules/Learning/DempsterShafer/include/otbJointMassOfBeliefFilter.h
@@ -68,11 +68,11 @@ public:
 
   /** Remove the last input */
   using Superclass::PopBackInput;
-  virtual void PopBackInput();
+  void PopBackInput() ITK_OVERRIDE;
 
   /** Remove the first input */
   using Superclass::PopFrontInput;
-  virtual void PopFrontInput();
+  void PopFrontInput() ITK_OVERRIDE;
 
   /** Get the idx th input */
   const MassFunctionType * GetInput(unsigned int idx);
@@ -85,13 +85,13 @@ protected:
   JointMassOfBeliefFilter();
 
   /** Destructor */
-  ~JointMassOfBeliefFilter() {}
+  ~JointMassOfBeliefFilter() ITK_OVERRIDE {}
 
   /** GenerateData */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   JointMassOfBeliefFilter(const Self&); //purposely not implemented
diff --git a/Modules/Learning/DempsterShafer/include/otbMassOfBelief.h b/Modules/Learning/DempsterShafer/include/otbMassOfBelief.h
index 2f21fda44c86de63a3b04cd58d960533557d98ec..8e8dc539546947a259fd2710735a5ac038d92da1 100644
--- a/Modules/Learning/DempsterShafer/include/otbMassOfBelief.h
+++ b/Modules/Learning/DempsterShafer/include/otbMassOfBelief.h
@@ -177,10 +177,10 @@ protected:
   MassOfBelief() {}
 
   /** Desctructor */
-  virtual ~MassOfBelief() {}
+  ~MassOfBelief() ITK_OVERRIDE {}
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   MassOfBelief(const Self&); //purposely not implemented
diff --git a/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.h b/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.h
index 7c3c11c362d22799f92c32639eec19777dda4283..ced8f739b4af2bd7c08714ab9665d42f8e37dce4 100644
--- a/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.h
+++ b/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.h
@@ -92,14 +92,14 @@ public:
 
   /** This method returns the value of the cost function corresponding
     * to the specified parameters.    */
-  virtual MeasureType GetValue( const ParametersType & parameters ) const;
+  MeasureType GetValue( const ParametersType & parameters ) const ITK_OVERRIDE;
 
   /** This method returns the derivative of the cost function corresponding
     * to the specified parameters.   */
-  virtual void GetDerivative( const ParametersType & parameters,
-                               DerivativeType & derivative ) const;
+  void GetDerivative( const ParametersType & parameters,
+                               DerivativeType & derivative ) const ITK_OVERRIDE;
 
-  virtual unsigned int GetNumberOfParameters(void) const;
+  unsigned int GetNumberOfParameters(void) const ITK_OVERRIDE;
 
   itkSetMacro(Weight, double);
   itkGetConstMacro(Weight, double);
@@ -148,9 +148,9 @@ protected:
   /** Constructor */
   StandardDSCostFunction();
   /** Destructor */
-  virtual ~StandardDSCostFunction() {}
+  ~StandardDSCostFunction() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   StandardDSCostFunction(const Self &); //purposely not implemented
diff --git a/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.h b/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.h
index 2fdec1e6698ad43b42dbdcb5ffed558dafb6ba15..ca8dcd2affab09d6fa5dff24af848945d04bcdb4 100644
--- a/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.h
+++ b/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.h
@@ -158,13 +158,13 @@ public:
 
 protected:
   /** Triggers the Computation */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** Constructor */
   VectorDataToDSValidatedVectorDataFilter();
   /** Destructor */
-  virtual ~VectorDataToDSValidatedVectorDataFilter() {}
+  ~VectorDataToDSValidatedVectorDataFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   std::string GetNextID()
     {
diff --git a/Modules/Learning/LearningBase/include/otbDecisionTree.h b/Modules/Learning/LearningBase/include/otbDecisionTree.h
index e782ba0f13aa4a782f5406d186513a6edd17c482..b529e190e8136e58a1c17e08af8ae4e61ab2d167 100644
--- a/Modules/Learning/LearningBase/include/otbDecisionTree.h
+++ b/Modules/Learning/LearningBase/include/otbDecisionTree.h
@@ -97,11 +97,11 @@ protected:
   /** Constructor */
   DecisionTree();
   /** Destructor */
-  virtual ~DecisionTree();
+  ~DecisionTree() ITK_OVERRIDE;
   /** Output information redefinition */
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   DecisionTree(const Self &); // purposely not implemented
diff --git a/Modules/Learning/LearningBase/include/otbGaussianModelComponent.h b/Modules/Learning/LearningBase/include/otbGaussianModelComponent.h
index ecc4cb26515708e2408e3d0948bf60c511f56d4b..9aba12d2815ade65a76fa100a85fdee160c0886a 100644
--- a/Modules/Learning/LearningBase/include/otbGaussianModelComponent.h
+++ b/Modules/Learning/LearningBase/include/otbGaussianModelComponent.h
@@ -78,21 +78,21 @@ public:
   typedef typename CovarianceEstimatorType::MatrixType CovarianceType;
 
   /** Sets the input sample */
-  virtual void SetSample(const TSample* sample);
+  void SetSample(const TSample* sample) ITK_OVERRIDE;
 
   /** Sets the component's distribution parameters.
    *  e.g. Then user can call directly Pdf( MeasurementVectorType & )  */
   void SetParameters(const ParametersType& parameters);
 
   /** Show the parameters in a minimal form in comparison to PrintSelf */
-  virtual void ShowParameters(std::ostream& os, itk::Indent indent) const;
+  void ShowParameters(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 protected:
   GaussianModelComponent();
-  virtual ~GaussianModelComponent() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~GaussianModelComponent() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   GaussianModelComponent(const Self &); //purposely not implemented
diff --git a/Modules/Learning/LearningBase/include/otbKMeansImageClassificationFilter.h b/Modules/Learning/LearningBase/include/otbKMeansImageClassificationFilter.h
index b8b95d5c28316c1e0fee8a7f70c126d8039c8b1b..ec3f880febe27d8db24d75b2307380872f546947 100644
--- a/Modules/Learning/LearningBase/include/otbKMeansImageClassificationFilter.h
+++ b/Modules/Learning/LearningBase/include/otbKMeansImageClassificationFilter.h
@@ -103,14 +103,14 @@ protected:
   /** Constructor */
   KMeansImageClassificationFilter();
   /** Destructor */
-  virtual ~KMeansImageClassificationFilter() {}
+  ~KMeansImageClassificationFilter() ITK_OVERRIDE {}
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   KMeansImageClassificationFilter(const Self &); //purposely not implemented
diff --git a/Modules/Learning/LearningBase/include/otbSEMClassifier.h b/Modules/Learning/LearningBase/include/otbSEMClassifier.h
index e23db49440f1168fa424d2a7e8665b09c770aec7..f011851695308b668b49d965c4857b6f459d75ea 100644
--- a/Modules/Learning/LearningBase/include/otbSEMClassifier.h
+++ b/Modules/Learning/LearningBase/include/otbSEMClassifier.h
@@ -154,7 +154,7 @@ public:
   int AddComponent(int id, ComponentType* component);
 
   /** Runs the optimization process. */
-  void Update();
+  void Update() ITK_OVERRIDE;
 
   /** Termination status after running optimization */
   typedef enum { CONVERGED = 0, NOT_CONVERGED = 1 } TerminationCodeType;
@@ -174,12 +174,12 @@ public:
   /* Return the classification result (as an image) */
   TOutputImage * GetOutputImage();
   
-  virtual void Modified() const;
+  void Modified() const ITK_OVERRIDE;
 
 protected:
   SEMClassifier();
-  virtual ~SEMClassifier() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~SEMClassifier() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Initialize the first segmentation, either randomly or by using
    *  a ClassLabelVectorType given in SetClassLabels. */
diff --git a/Modules/Learning/Markov/include/otbMRFEnergy.h b/Modules/Learning/Markov/include/otbMRFEnergy.h
index a1830d5cbcfea7f004ce20dbd52e62baa8e6d5b9..78ba2da19149aefea5f471a89a5388b202f17468 100644
--- a/Modules/Learning/Markov/include/otbMRFEnergy.h
+++ b/Modules/Learning/Markov/include/otbMRFEnergy.h
@@ -139,7 +139,7 @@ protected:
   MRFEnergy() :
     m_NumberOfParameters(1),
     m_Parameters(0) {};
-  virtual ~MRFEnergy() {}
+  ~MRFEnergy() ITK_OVERRIDE {}
   unsigned int   m_NumberOfParameters;
   ParametersType m_Parameters;
 };
@@ -221,7 +221,7 @@ protected:
     m_NumberOfParameters(1),
     m_Parameters(0)
       {};
-  virtual ~MRFEnergy() {}
+  ~MRFEnergy() ITK_OVERRIDE {}
   unsigned int   m_NumberOfParameters;
   ParametersType m_Parameters;
 };
diff --git a/Modules/Learning/Markov/include/otbMRFEnergyEdgeFidelity.h b/Modules/Learning/Markov/include/otbMRFEnergyEdgeFidelity.h
index 8fca36556d398d7a2135a578aba240ccd6836849..55c93dede65883d23c4388d57687d0b3519a1039 100644
--- a/Modules/Learning/Markov/include/otbMRFEnergyEdgeFidelity.h
+++ b/Modules/Learning/Markov/include/otbMRFEnergyEdgeFidelity.h
@@ -60,7 +60,7 @@ public:
 
   itkTypeMacro(MRFEnergyEdgeFidelity, MRFEnergy);
 
-  double GetSingleValue(const InputImagePixelType& value1, const LabelledImagePixelType& value2)
+  double GetSingleValue(const InputImagePixelType& value1, const LabelledImagePixelType& value2) ITK_OVERRIDE
   {
     double val1 = static_cast<double>(value1);
     double val2 = static_cast<double>(value2);
@@ -71,7 +71,7 @@ public:
 protected:
   // The constructor and destructor.
   MRFEnergyEdgeFidelity() {};
-  virtual ~MRFEnergyEdgeFidelity() {}
+  ~MRFEnergyEdgeFidelity() ITK_OVERRIDE {}
 };
 }
 
diff --git a/Modules/Learning/Markov/include/otbMRFEnergyFisherClassification.h b/Modules/Learning/Markov/include/otbMRFEnergyFisherClassification.h
index 171d21fcfc7d806d06f86f531088791b54a04d09..773d78cb3d115df13e380dd4dccdbebbdec71499 100644
--- a/Modules/Learning/Markov/include/otbMRFEnergyFisherClassification.h
+++ b/Modules/Learning/Markov/include/otbMRFEnergyFisherClassification.h
@@ -58,14 +58,14 @@ public:
   itkNewMacro(Self);
   itkTypeMacro(MRFEnergyFisherClassification, MRFEnergy);
 
-  void SetNumberOfParameters(const unsigned int nParameters)
+  void SetNumberOfParameters(const unsigned int nParameters) ITK_OVERRIDE
   {
     Superclass::SetNumberOfParameters(nParameters);
     this->m_Parameters.SetSize(nParameters);
     this->Modified();
   }
 
-  double GetSingleValue(const InputImagePixelType & value1,  const LabelledImagePixelType & value2)
+  double GetSingleValue(const InputImagePixelType & value1,  const LabelledImagePixelType & value2) ITK_OVERRIDE
   {
     if ((unsigned int)value2 >= this->GetNumberOfParameters()/3)
       {
@@ -87,7 +87,7 @@ public:
 protected:
   // The constructor and destructor.
   MRFEnergyFisherClassification() {};
-  virtual ~MRFEnergyFisherClassification() {};
+  ~MRFEnergyFisherClassification() ITK_OVERRIDE {};
 };
 }
 #endif
diff --git a/Modules/Learning/Markov/include/otbMRFEnergyGaussian.h b/Modules/Learning/Markov/include/otbMRFEnergyGaussian.h
index 64a8b3be4690ea46b0815a558f290cfdf533132b..cff86e60e7fe2233557b6376fc70915974dd67e1 100644
--- a/Modules/Learning/Markov/include/otbMRFEnergyGaussian.h
+++ b/Modules/Learning/Markov/include/otbMRFEnergyGaussian.h
@@ -65,7 +65,7 @@ public:
 
   itkNewMacro(Self);
 
-  double GetSingleValue(const InputImagePixelType& value1, const LabelledImagePixelType& value2)
+  double GetSingleValue(const InputImagePixelType& value1, const LabelledImagePixelType& value2) ITK_OVERRIDE
   {
     return vnl_math_sqr((static_cast<double>(value1))
                         - (static_cast<double>(value2)));
@@ -78,7 +78,7 @@ protected:
     this->m_NumberOfParameters = 0;
     this->m_Parameters.SetSize(this->m_NumberOfParameters);
     };
-  virtual ~MRFEnergyGaussian() {}
+  ~MRFEnergyGaussian() ITK_OVERRIDE {}
 
 };
 }
diff --git a/Modules/Learning/Markov/include/otbMRFEnergyGaussianClassification.h b/Modules/Learning/Markov/include/otbMRFEnergyGaussianClassification.h
index f576df6b739f58dcbd521b2915f2a00436daa57c..efffa8af77dedff401bd40c1b86bf6f709793b0b 100644
--- a/Modules/Learning/Markov/include/otbMRFEnergyGaussianClassification.h
+++ b/Modules/Learning/Markov/include/otbMRFEnergyGaussianClassification.h
@@ -61,14 +61,14 @@ public:
 
   itkTypeMacro(MRFEnergyGaussianClassification, MRFEnergy);
 
-  void SetNumberOfParameters(const unsigned int nParameters)
+  void SetNumberOfParameters(const unsigned int nParameters) ITK_OVERRIDE
   {
     Superclass::SetNumberOfParameters(nParameters);
     this->m_Parameters.SetSize(nParameters);
     this->Modified();
   }
 
-  double GetSingleValue(const InputImagePixelType& value1, const LabelledImagePixelType& value2)
+  double GetSingleValue(const InputImagePixelType& value1, const LabelledImagePixelType& value2) ITK_OVERRIDE
   {
     if ((unsigned int) value2 >= this->GetNumberOfParameters() / 2)
       {
@@ -86,7 +86,7 @@ public:
 protected:
   // The constructor and destructor.
   MRFEnergyGaussianClassification() {};
-  virtual ~MRFEnergyGaussianClassification() {}
+  ~MRFEnergyGaussianClassification() ITK_OVERRIDE {}
 
 };
 }
diff --git a/Modules/Learning/Markov/include/otbMRFEnergyPotts.h b/Modules/Learning/Markov/include/otbMRFEnergyPotts.h
index 108da52247b25c88b03a565cef63715e0ab301f3..d2aaae3e6791120a30afad336b2b5845f7df0309 100644
--- a/Modules/Learning/Markov/include/otbMRFEnergyPotts.h
+++ b/Modules/Learning/Markov/include/otbMRFEnergyPotts.h
@@ -63,7 +63,7 @@ public:
 
   itkNewMacro(Self);
 
-  double GetSingleValue(const InputImagePixelType& value1, const LabelledImagePixelType& value2)
+  double GetSingleValue(const InputImagePixelType& value1, const LabelledImagePixelType& value2) ITK_OVERRIDE
   {
     if (value1 != value2)
       {
@@ -83,7 +83,7 @@ protected:
     this->m_Parameters.SetSize(this->m_NumberOfParameters);
     this->m_Parameters[0] = 1.0;
     };
-  virtual ~MRFEnergyPotts() {}
+  ~MRFEnergyPotts() ITK_OVERRIDE {}
 
 };
 }
diff --git a/Modules/Learning/Markov/include/otbMRFOptimizer.h b/Modules/Learning/Markov/include/otbMRFOptimizer.h
index 10878ea50fd56f92fc047154975c5fa8cb83d372..e1b1c70f490383171748e0cb59055e621b2b736d 100644
--- a/Modules/Learning/Markov/include/otbMRFOptimizer.h
+++ b/Modules/Learning/Markov/include/otbMRFOptimizer.h
@@ -73,7 +73,7 @@ protected:
   MRFOptimizer() :
     m_NumberOfParameters(1),
     m_Parameters(1) {}
-  virtual ~MRFOptimizer() {}
+  ~MRFOptimizer() ITK_OVERRIDE {}
   unsigned int   m_NumberOfParameters;
   ParametersType m_Parameters;
 
diff --git a/Modules/Learning/Markov/include/otbMRFOptimizerICM.h b/Modules/Learning/Markov/include/otbMRFOptimizerICM.h
index c14e9d8ddcdfd6a6f6f62c63c70cf60a49535607..244debbdaf8c0b0131fba6197b39577308252605 100644
--- a/Modules/Learning/Markov/include/otbMRFOptimizerICM.h
+++ b/Modules/Learning/Markov/include/otbMRFOptimizerICM.h
@@ -49,7 +49,7 @@ public:
 
   itkTypeMacro(MRFOptimizerICM, MRFOptimizer);
 
-  inline bool Compute(double deltaEnergy)
+  inline bool Compute(double deltaEnergy) ITK_OVERRIDE
   {
     if (deltaEnergy < 0)
       {
@@ -63,7 +63,7 @@ public:
 
 protected:
   MRFOptimizerICM() {}
-  virtual ~MRFOptimizerICM() {}
+  ~MRFOptimizerICM() ITK_OVERRIDE {}
 
 };
 
diff --git a/Modules/Learning/Markov/include/otbMRFOptimizerMetropolis.h b/Modules/Learning/Markov/include/otbMRFOptimizerMetropolis.h
index 8723fca4f22c7e2b48e7247b6f1bcc4181e2e93d..a8ee6a143a772e84cb06c941da0c291524c90318 100644
--- a/Modules/Learning/Markov/include/otbMRFOptimizerMetropolis.h
+++ b/Modules/Learning/Markov/include/otbMRFOptimizerMetropolis.h
@@ -69,7 +69,7 @@ public:
     this->Modified();
   }
 
-  inline bool Compute(double deltaEnergy)
+  inline bool Compute(double deltaEnergy) ITK_OVERRIDE
   {
     if (deltaEnergy < 0)
       {
@@ -109,7 +109,7 @@ protected:
     m_Generator = RandomGeneratorType::GetInstance();
     m_Generator->SetSeed();
     }
-  virtual ~MRFOptimizerMetropolis() {}
+  ~MRFOptimizerMetropolis() ITK_OVERRIDE {}
   RandomGeneratorType::Pointer m_Generator;
 };
 
diff --git a/Modules/Learning/Markov/include/otbMRFSampler.h b/Modules/Learning/Markov/include/otbMRFSampler.h
index d07a9d7ddc1f3335de84bb13de20ef003d27cf09..37379b600ea99f6bfe16aa1fef644460b0f92cae 100644
--- a/Modules/Learning/Markov/include/otbMRFSampler.h
+++ b/Modules/Learning/Markov/include/otbMRFSampler.h
@@ -108,7 +108,7 @@ protected:
     m_EnergyRegularization = EnergyRegularizationType::New();
     m_EnergyFidelity =  EnergyFidelityType::New();
     };
-  virtual ~MRFSampler() {}
+  ~MRFSampler() ITK_OVERRIDE {}
 
 };
 
diff --git a/Modules/Learning/Markov/include/otbMRFSamplerMAP.h b/Modules/Learning/Markov/include/otbMRFSamplerMAP.h
index e24ca281d3fca843f546f134b071660d817af890..5a4632bd6ccc37e9f8c06883eecb1c738d910cfe 100644
--- a/Modules/Learning/Markov/include/otbMRFSamplerMAP.h
+++ b/Modules/Learning/Markov/include/otbMRFSamplerMAP.h
@@ -62,7 +62,7 @@ public:
   itkTypeMacro(MRFSamplerMAP, MRFSampler);
 
   inline int Compute(const InputImageNeighborhoodIterator& itData,
-                     const LabelledImageNeighborhoodIterator& itRegul)
+                     const LabelledImageNeighborhoodIterator& itRegul) ITK_OVERRIDE
   {
     if (this->m_NumberOfClasses == 0)
       {
@@ -100,7 +100,7 @@ public:
 protected:
   // The constructor and destructor.
   MRFSamplerMAP() {};
-  virtual ~MRFSamplerMAP() {}
+  ~MRFSamplerMAP() ITK_OVERRIDE {}
 
 };
 
diff --git a/Modules/Learning/Markov/include/otbMRFSamplerRandom.h b/Modules/Learning/Markov/include/otbMRFSamplerRandom.h
index fbd9f3a95bcf7750a5ee64db5ff0b07e8a30ed9b..bcbd810640c362182def34667aa41c6dafbde2b4 100644
--- a/Modules/Learning/Markov/include/otbMRFSamplerRandom.h
+++ b/Modules/Learning/Markov/include/otbMRFSamplerRandom.h
@@ -63,7 +63,7 @@ public:
 
   itkTypeMacro(MRFSamplerRandom, MRFSampler);
 
-  inline int Compute(const InputImageNeighborhoodIterator& itData, const LabelledImageNeighborhoodIterator& itRegul)
+  inline int Compute(const InputImageNeighborhoodIterator& itData, const LabelledImageNeighborhoodIterator& itRegul) ITK_OVERRIDE
   {
     this->m_EnergyBefore = this->m_EnergyFidelity->GetValue(itData, itRegul.GetCenterPixel());
     this->m_EnergyBefore += this->m_Lambda
@@ -94,7 +94,7 @@ protected:
     m_Generator = RandomGeneratorType::GetInstance();
     m_Generator->SetSeed();
     }
-  virtual ~MRFSamplerRandom() {}
+  ~MRFSamplerRandom() ITK_OVERRIDE {}
 
 private:
   RandomGeneratorType::Pointer m_Generator;
diff --git a/Modules/Learning/Markov/include/otbMRFSamplerRandomMAP.h b/Modules/Learning/Markov/include/otbMRFSamplerRandomMAP.h
index 284b6203386e25cdabc0bff947f95fb691aaf869..9ea737ab8071ea1ca6053edc824970f4e48c3f60 100644
--- a/Modules/Learning/Markov/include/otbMRFSamplerRandomMAP.h
+++ b/Modules/Learning/Markov/include/otbMRFSamplerRandomMAP.h
@@ -69,7 +69,7 @@ public:
 
   itkTypeMacro(MRFSamplerRandomMAP, MRFSampler);
 
-  void SetNumberOfClasses(const unsigned int nClasses)
+  void SetNumberOfClasses(const unsigned int nClasses) ITK_OVERRIDE
   {
     if ((nClasses != this->m_NumberOfClasses) || (m_EnergiesInvalid == true))
       {
@@ -82,7 +82,7 @@ public:
       }
   }
 
-  inline int Compute(const InputImageNeighborhoodIterator& itData, const LabelledImageNeighborhoodIterator& itRegul)
+  inline int Compute(const InputImageNeighborhoodIterator& itData, const LabelledImageNeighborhoodIterator& itRegul) ITK_OVERRIDE
   {
     if (this->m_NumberOfClasses == 0)
       {
@@ -163,7 +163,7 @@ protected:
     m_Generator = RandomGeneratorType::GetInstance();
     m_Generator->SetSeed();
     }
-  virtual ~MRFSamplerRandomMAP()
+  ~MRFSamplerRandomMAP() ITK_OVERRIDE
     {
     if (m_Energy != NULL) free(m_Energy);
     if (m_RepartitionFunction != NULL) free(m_RepartitionFunction);
diff --git a/Modules/Learning/Markov/include/otbMarkovRandomFieldFilter.h b/Modules/Learning/Markov/include/otbMarkovRandomFieldFilter.h
index 6beaa6d2bf4a2181d6938547a69e20766051070f..a686eee2fd046d6f452e2071a16d88a69e3d3fe1 100644
--- a/Modules/Learning/Markov/include/otbMarkovRandomFieldFilter.h
+++ b/Modules/Learning/Markov/include/otbMarkovRandomFieldFilter.h
@@ -316,8 +316,8 @@ public:
 
 protected:
   MarkovRandomFieldFilter();
-  virtual ~MarkovRandomFieldFilter(){}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~MarkovRandomFieldFilter() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Allocate memory for labelled images. This is automatically called
    * in GenerateData().
@@ -332,10 +332,10 @@ protected:
 
   virtual void ApplyMarkovRandomFieldFilter();
 
-  virtual void GenerateData();
-  virtual void GenerateInputRequestedRegion();
-  virtual void EnlargeOutputRequestedRegion(itk::DataObject *);
-  virtual void GenerateOutputInformation();
+  void GenerateData() ITK_OVERRIDE;
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
+  void EnlargeOutputRequestedRegion(itk::DataObject *) ITK_OVERRIDE;
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   MarkovRandomFieldFilter(const Self &); //purposely not implemented
   void operator =(const Self&); //purposely not implemented
diff --git a/Modules/Learning/SOM/include/otbPeriodicSOM.h b/Modules/Learning/SOM/include/otbPeriodicSOM.h
index f2c68b51a042f8933728e4d26ceb39a0cb745e4a..28b4c20de2f2e698f52e6b976cb8b9ed41a87ee9 100644
--- a/Modules/Learning/SOM/include/otbPeriodicSOM.h
+++ b/Modules/Learning/SOM/include/otbPeriodicSOM.h
@@ -89,19 +89,19 @@ protected:
   /** Constructor */
   PeriodicSOM() {}
   /** Destructor */
-  virtual ~PeriodicSOM() {}
+  ~PeriodicSOM() ITK_OVERRIDE {}
   /** Output information redefinition */
-  virtual void GenerateOutputInformation()
+  void GenerateOutputInformation() ITK_OVERRIDE
   {
     Superclass::GenerateOutputInformation ();
   }
   /** Output allocation redefinition */
-  virtual void AllocateOutputs()
+  void AllocateOutputs() ITK_OVERRIDE
   {
     Superclass::AllocateOutputs();
   }
   /** Main computation method */
-  virtual void GenerateData(void)
+  void GenerateData(void) ITK_OVERRIDE
   {
     Superclass::GenerateData();
   }
@@ -111,16 +111,16 @@ protected:
   * \param beta The learning coefficient,
   * \param radius The radius of the nieghbourhood.
   */
-  virtual void UpdateMap(const NeuronType& sample, double beta, SizeType& radius);
+  void UpdateMap(const NeuronType& sample, double beta, SizeType& radius) ITK_OVERRIDE;
   /**
   * Step one iteration.
   */
-  virtual void Step(unsigned int currentIteration)
+  void Step(unsigned int currentIteration) ITK_OVERRIDE
   {
     Superclass::Step(currentIteration);
   }
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Learning/SOM/include/otbSOM.h b/Modules/Learning/SOM/include/otbSOM.h
index 646488f58638ea9744bd4314f8cdf96bbab6a2be..0ff5dbfbbc39592b617b5374e913e1e1d83d60c8 100644
--- a/Modules/Learning/SOM/include/otbSOM.h
+++ b/Modules/Learning/SOM/include/otbSOM.h
@@ -123,13 +123,13 @@ protected:
   /** Constructor */
   SOM();
   /** Destructor */
-  virtual ~SOM();
+  ~SOM() ITK_OVERRIDE;
   /** Output information redefinition */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
   /** Output allocation redefinition */
-  virtual void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /**
    * Update the output map with a new sample.
    * \param sample The new sample to learn,
@@ -142,7 +142,7 @@ protected:
    */
   virtual void Step(unsigned int currentIteration);
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SOM(const Self &); // purposely not implemented
diff --git a/Modules/Learning/SOM/include/otbSOMActivationBuilder.h b/Modules/Learning/SOM/include/otbSOMActivationBuilder.h
index 3232e4d9c57d7cf4a5ee2cee632b9b5f40c8c027..b2ee93f9ebec7ff83fc6602c50ef59c433450779 100644
--- a/Modules/Learning/SOM/include/otbSOMActivationBuilder.h
+++ b/Modules/Learning/SOM/include/otbSOMActivationBuilder.h
@@ -71,11 +71,11 @@ protected:
   /** Constructor */
   SOMActivationBuilder();
   /** Destructor */
-  ~SOMActivationBuilder();
+  ~SOMActivationBuilder() ITK_OVERRIDE;
   /** Main computation method */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SOMActivationBuilder(const Self &); // purposely not implemented
diff --git a/Modules/Learning/SOM/include/otbSOMClassifier.h b/Modules/Learning/SOM/include/otbSOMClassifier.h
index 1fa9479a6783776a1eb1428928d5d80bf4b44b19..caeed5eeb06ff1525ea1a6dd528575c7657cede0 100644
--- a/Modules/Learning/SOM/include/otbSOMClassifier.h
+++ b/Modules/Learning/SOM/include/otbSOMClassifier.h
@@ -85,11 +85,11 @@ protected:
   /** Constructor */
   SOMClassifier();
   /** Destructor */
-  virtual ~SOMClassifier() {}
+  ~SOMClassifier() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Starts the classification process */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   /// The input sample
diff --git a/Modules/Learning/SOM/include/otbSOMImageClassificationFilter.h b/Modules/Learning/SOM/include/otbSOMImageClassificationFilter.h
index 111d470af625c2940263389763026f4179654b5b..d5a761fb1271bdefe9c76fcabf66b6ecde36b201 100644
--- a/Modules/Learning/SOM/include/otbSOMImageClassificationFilter.h
+++ b/Modules/Learning/SOM/include/otbSOMImageClassificationFilter.h
@@ -101,14 +101,14 @@ protected:
   /** Constructor */
   SOMImageClassificationFilter();
   /** Destructor */
-  virtual ~SOMImageClassificationFilter() {}
+  ~SOMImageClassificationFilter() ITK_OVERRIDE {}
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SOMImageClassificationFilter(const Self &); //purposely not implemented
diff --git a/Modules/Learning/SOM/include/otbSOMMap.h b/Modules/Learning/SOM/include/otbSOMMap.h
index 886e2de5987949b2c8ce86e6368915966d00a9b4..ce181a414e0607cfc606c9f023b5620f44598ce7 100644
--- a/Modules/Learning/SOM/include/otbSOMMap.h
+++ b/Modules/Learning/SOM/include/otbSOMMap.h
@@ -91,9 +91,9 @@ protected:
   /** Constructor */
   SOMMap();
   /** Destructor */
-  virtual ~SOMMap();
+  ~SOMMap() ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SOMMap(const Self &); // purposely not implemented
diff --git a/Modules/Learning/SOM/include/otbSOMWithMissingValue.h b/Modules/Learning/SOM/include/otbSOMWithMissingValue.h
index 854bed69c72c02c1fee1475100c16048c1247efa..89f0e2a7db621c6fb57ce48f6e5c34bf7792c73d 100644
--- a/Modules/Learning/SOM/include/otbSOMWithMissingValue.h
+++ b/Modules/Learning/SOM/include/otbSOMWithMissingValue.h
@@ -79,34 +79,34 @@ protected:
   /** Constructor */
   SOMWithMissingValue ();
   /** Destructor */
-  virtual ~SOMWithMissingValue();
+  ~SOMWithMissingValue() ITK_OVERRIDE;
   /** Output information redefinition */
-  virtual void GenerateOutputInformation()
+  void GenerateOutputInformation() ITK_OVERRIDE
   {
     Superclass::GenerateOutputInformation ();
   }
   /** Output allocation redefinition */
-  virtual void AllocateOutputs()
+  void AllocateOutputs() ITK_OVERRIDE
   {
     Superclass::AllocateOutputs();
   }
   /** Main computation method */
-  virtual void GenerateData(void)
+  void GenerateData(void) ITK_OVERRIDE
   {
     Superclass::GenerateData();
   }
   /**
    * Update the output map with a new sample, depending on the availability of the data
    */
-  virtual void UpdateMap(const NeuronType& sample, double beta, SizeType& radius);
+  void UpdateMap(const NeuronType& sample, double beta, SizeType& radius) ITK_OVERRIDE;
 
   /** Step one iteration. */
-  virtual void Step(unsigned int currentIteration)
+  void Step(unsigned int currentIteration) ITK_OVERRIDE
   {
     Superclass::Step(currentIteration);
   }
   /** PrintSelf method */
-void PrintSelf(std::ostream& os, itk::Indent indent) const;
+void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Learning/SOM/include/otbSOMbasedImageFilter.h b/Modules/Learning/SOM/include/otbSOMbasedImageFilter.h
index 5935f10ec167d5d27698a3592f8ecfeb415d302c..f8aea7ec7ee4b336a91ec7330b2837c218499558 100644
--- a/Modules/Learning/SOM/include/otbSOMbasedImageFilter.h
+++ b/Modules/Learning/SOM/include/otbSOMbasedImageFilter.h
@@ -143,10 +143,10 @@ public:
 
 protected:
   // throw the Map to the functor
-  virtual void BeforeThreadedGenerateData(void);
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE;
 
   SOMbasedImageFilter ();
-  virtual ~SOMbasedImageFilter () {}
+  ~SOMbasedImageFilter () ITK_OVERRIDE {}
 
 private:
   SOMbasedImageFilter (const Self &);
diff --git a/Modules/Learning/SVMLearning/include/otbExhaustiveExponentialOptimizer.h b/Modules/Learning/SVMLearning/include/otbExhaustiveExponentialOptimizer.h
index ed26781f16a8696c3228f73f1a8e53d05f90eabd..95a9371d5ca81edf63d211ae9cc16ab56230f95c 100644
--- a/Modules/Learning/SVMLearning/include/otbExhaustiveExponentialOptimizer.h
+++ b/Modules/Learning/SVMLearning/include/otbExhaustiveExponentialOptimizer.h
@@ -58,7 +58,7 @@ public:
   /** Run-time type information (and related methods). */
   itkTypeMacro(ExhaustiveExponentialOptimizer,           SingleValuedNonLinearOptimizer);
 
-  virtual void    StartOptimization(void);
+  void    StartOptimization(void) ITK_OVERRIDE;
 
   void StartWalking(void);
   void ResumeWalking(void);
@@ -80,8 +80,8 @@ public:
 
 protected:
   ExhaustiveExponentialOptimizer();
-  virtual ~ExhaustiveExponentialOptimizer() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ExhaustiveExponentialOptimizer() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Advance to the next grid position. */
   void AdvanceOneStep(void);
diff --git a/Modules/Learning/SVMLearning/include/otbLabelMapSVMClassifier.h b/Modules/Learning/SVMLearning/include/otbLabelMapSVMClassifier.h
index b289706f3d4f4072bdf638f29117c04af7ced39e..c44f4276cdae7d43df18369d40e2d301048070ac 100644
--- a/Modules/Learning/SVMLearning/include/otbLabelMapSVMClassifier.h
+++ b/Modules/Learning/SVMLearning/include/otbLabelMapSVMClassifier.h
@@ -87,11 +87,11 @@ public:
 
 protected:
   LabelMapSVMClassifier();
-  ~LabelMapSVMClassifier() {};
+  ~LabelMapSVMClassifier() ITK_OVERRIDE {};
 
-  virtual void ThreadedProcessLabelObject( LabelObjectType * labelObject );
+  void ThreadedProcessLabelObject( LabelObjectType * labelObject ) ITK_OVERRIDE;
 
-  virtual void ReleaseInputs();
+  void ReleaseInputs() ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Learning/SVMLearning/include/otbObjectDetectionClassifier.h b/Modules/Learning/SVMLearning/include/otbObjectDetectionClassifier.h
index 368a80abd99e638385702f9711b0478da3d06ef6..9dcaa0f7226069e89a450bf04071b864eea74f6e 100644
--- a/Modules/Learning/SVMLearning/include/otbObjectDetectionClassifier.h
+++ b/Modules/Learning/SVMLearning/include/otbObjectDetectionClassifier.h
@@ -120,7 +120,7 @@ public:
 
   typedef itk::Statistics::ListSample<DescriptorType>        ListSampleType;
 
-  void AddInput(itk::DataObject * dataObject)
+  void AddInput(itk::DataObject * dataObject) ITK_OVERRIDE
   {
     this->Superclass::AddInput(dataObject);
   }
@@ -156,29 +156,29 @@ public:
 
   /** Make a DataObject of the correct type to be used as the specified
    * output. */
-  itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx);
+  itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
-  void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
-  void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  void Reset(void);
+  void Reset(void) ITK_OVERRIDE;
 
-  void Synthetize(void);
+  void Synthetize(void) ITK_OVERRIDE;
 
 protected:
   PersistentObjectDetectionClassifier();
-  virtual ~PersistentObjectDetectionClassifier();
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~PersistentObjectDetectionClassifier() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Multi-thread version GenerateData. */
   void  ThreadedGenerateData(const RegionType& outputRegionForThread,
-                             itk::ThreadIdType threadId);
+                             itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PersistentObjectDetectionClassifier(const Self &); //purposely not implemented
@@ -311,7 +311,7 @@ public:
       return this->GetFilter()->GetOutputVectorData();
     }
 
-    void AddInput(itk::DataObject * dataObject)
+    void AddInput(itk::DataObject * dataObject) ITK_OVERRIDE
     {
       this->GetFilter()->AddInput(dataObject);
     }
@@ -369,7 +369,7 @@ public:
     ObjectDetectionClassifier();
 
     /** Destructor */
-    virtual ~ObjectDetectionClassifier();
+    ~ObjectDetectionClassifier() ITK_OVERRIDE;
 
   private:
     ObjectDetectionClassifier(const Self &); //purposely not implemented
diff --git a/Modules/Learning/SVMLearning/include/otbSVMClassifier.h b/Modules/Learning/SVMLearning/include/otbSVMClassifier.h
index 4addba806501a994c9e5cb8ce2e3a2b4401d96e2..9655b0f756b1311a636f32632e25c663494cd739 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMClassifier.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMClassifier.h
@@ -105,15 +105,15 @@ public:
   /** Get the number of classes. */
   itkGetObjectMacro(Model, SVMModelType);
 
-  void Update();
+  void Update() ITK_OVERRIDE;
 
 protected:
   SVMClassifier();
-  virtual ~SVMClassifier() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~SVMClassifier() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Starts the classification process */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   virtual void DoClassification();
 
 private:
diff --git a/Modules/Learning/SVMLearning/include/otbSVMCrossValidationCostFunction.h b/Modules/Learning/SVMLearning/include/otbSVMCrossValidationCostFunction.h
index 50ed01504b46b3699eea107fd404d478a6805331..3ebbfd8255201fb2ded763c30af5e8f5fdfa983f 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMCrossValidationCostFunction.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMCrossValidationCostFunction.h
@@ -84,19 +84,19 @@ public:
   itkGetMacro(DerivativeStep, ParametersValueType);
 
   /** \return The accuracy value corresponding the parameters */
-  virtual MeasureType GetValue(const ParametersType& parameters) const;
+  MeasureType GetValue(const ParametersType& parameters) const ITK_OVERRIDE;
 
   /** \return The accuracy derivative corresponding to the parameters */
-  virtual void GetDerivative(const ParametersType& parameters, DerivativeType& derivative) const;
+  void GetDerivative(const ParametersType& parameters, DerivativeType& derivative) const ITK_OVERRIDE;
 
   /** \return the number of parameters to optimize */
-  virtual unsigned int GetNumberOfParameters(void) const;
+  unsigned int GetNumberOfParameters(void) const ITK_OVERRIDE;
 
 protected:
   /// Constructor
   SVMCrossValidationCostFunction();
   /// Destructor
-  virtual ~SVMCrossValidationCostFunction();
+  ~SVMCrossValidationCostFunction() ITK_OVERRIDE;
 
   /** Update svm parameters struct according to the input parameters
     */
diff --git a/Modules/Learning/SVMLearning/include/otbSVMImageClassificationFilter.h b/Modules/Learning/SVMLearning/include/otbSVMImageClassificationFilter.h
index 197f7b536e2c856ae63dcccc797e76a40773e0fc..dfaa1c110e78c764375426bf54259a8b3fcce355 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMImageClassificationFilter.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMImageClassificationFilter.h
@@ -104,14 +104,14 @@ protected:
   /** Constructor */
   SVMImageClassificationFilter();
   /** Destructor */
-  virtual ~SVMImageClassificationFilter() {}
+  ~SVMImageClassificationFilter() ITK_OVERRIDE {}
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SVMImageClassificationFilter(const Self &); //purposely not implemented
diff --git a/Modules/Learning/SVMLearning/include/otbSVMImageClassificationWithRuleFilter.h b/Modules/Learning/SVMLearning/include/otbSVMImageClassificationWithRuleFilter.h
index 87b9ced538c486766a0a539b9255d6a76f28ca22..3a333fea80eb7f71e7afa182cb33f13e33258439 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMImageClassificationWithRuleFilter.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMImageClassificationWithRuleFilter.h
@@ -91,21 +91,21 @@ protected:
   /** Constructor */
   SVMImageClassificationWithRuleFilter();
   /** Destructor */
-  virtual ~SVMImageClassificationWithRuleFilter() {}
+  ~SVMImageClassificationWithRuleFilter() ITK_OVERRIDE {}
 
   /** GenerateOutputInformation
         * Set the number of bands of the output rule image.
         * Copy information from the input image if existing.
         **/
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** AllocateOutputs
    * Output allocation redefinition for VectorImage (used in TOutputRuleImage)
    **/
-  virtual void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   SVMImageClassificationWithRuleFilter(const Self &); //purposely not implemented
diff --git a/Modules/Learning/SVMLearning/include/otbSVMImageModelEstimator.h b/Modules/Learning/SVMLearning/include/otbSVMImageModelEstimator.h
index 86232de21a17149507a6a06655f910ed136350df..dbcf5bb0a25a23a11743e385e52d9d07790aeea7 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMImageModelEstimator.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMImageModelEstimator.h
@@ -108,12 +108,12 @@ protected:
   /** Constructor */
   SVMImageModelEstimator();
   /** Destructor */
-  virtual ~SVMImageModelEstimator();
+  ~SVMImageModelEstimator() ITK_OVERRIDE;
   /** PrintSelf */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Implement the prepare data step from SVMModelEstimator */
-  virtual void PrepareData();
+  void PrepareData() ITK_OVERRIDE;
 
 private:
   SVMImageModelEstimator(const Self &); //purposely not implemented
diff --git a/Modules/Learning/SVMLearning/include/otbSVMMarginSampler.h b/Modules/Learning/SVMLearning/include/otbSVMMarginSampler.h
index 4c41bcd68a93fae161b8436cda7ce7e7b51f4a14..e3e9ec32f0c6bf843fb6cc9ae69b50757d56a12c 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMMarginSampler.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMMarginSampler.h
@@ -84,11 +84,11 @@ public:
 
 protected:
   SVMMarginSampler();
-  virtual ~SVMMarginSampler() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~SVMMarginSampler() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Starts the classification process */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   virtual void DoMarginSampling();
 
 private:
diff --git a/Modules/Learning/SVMLearning/include/otbSVMModel.h b/Modules/Learning/SVMLearning/include/otbSVMModel.h
index f64af6c8dd751048e3db01a74d539cbdbd467cd3..b6298bc3bc2f344572191734f16f733b6e8d2b35 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMModel.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMModel.h
@@ -412,9 +412,9 @@ protected:
   /** Constructor */
   SVMModel();
   /** Destructor */
-  virtual ~SVMModel();
+  ~SVMModel() ITK_OVERRIDE;
   /** Display infos */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 /** Delete any allocated problem */
   void DeleteProblem();
@@ -423,7 +423,7 @@ protected:
   void DeleteModel();
 
   /** Initializes default parameters */
-  void Initialize();
+  void Initialize() ITK_OVERRIDE;
 
 private:
   SVMModel(const Self &); //purposely not implemented
diff --git a/Modules/Learning/SVMLearning/include/otbSVMModelEstimator.h b/Modules/Learning/SVMLearning/include/otbSVMModelEstimator.h
index 3c944874d1c279e0e1bb7371b70cd777bd04877d..381a1d119b389fd51f88da6e6d5a14a39656d494 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMModelEstimator.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMModelEstimator.h
@@ -287,11 +287,11 @@ protected:
   /** Constructor */
   SVMModelEstimator();
   /** Destructor */
-  virtual ~SVMModelEstimator();
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~SVMModelEstimator() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Starts the modelling process */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** This virtual function must be implemented in subclasses to
   populate the model with samples */
diff --git a/Modules/Learning/SVMLearning/include/otbSVMPointSetModelEstimator.h b/Modules/Learning/SVMLearning/include/otbSVMPointSetModelEstimator.h
index 8f7799c71de17211ac7d72b7a826146c3d629eff..47f22fb617b5ec444a91edbab06ba69ddb1378bb 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMPointSetModelEstimator.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMPointSetModelEstimator.h
@@ -109,11 +109,11 @@ protected:
   /** Constructor */
   SVMPointSetModelEstimator();
   /** Destructor */
-  virtual ~SVMPointSetModelEstimator();
+  ~SVMPointSetModelEstimator() ITK_OVERRIDE;
   /** PrintSelf */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Prepare data */
-  virtual void PrepareData();
+  void PrepareData() ITK_OVERRIDE;
 
 private:
   SVMPointSetModelEstimator(const Self &); //purposely not implemented
diff --git a/Modules/Learning/SVMLearning/include/otbSVMSampleListModelEstimator.h b/Modules/Learning/SVMLearning/include/otbSVMSampleListModelEstimator.h
index 6b86a2ada6e034c84040bd59f1ae07adf9de851b..97a073bb537d76e4e6e504071b2fce3f97fb6625 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMSampleListModelEstimator.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMSampleListModelEstimator.h
@@ -178,12 +178,12 @@ protected:
   /** Constructor */
   SVMSampleListModelEstimator();
   /** Destructor */
-  virtual ~SVMSampleListModelEstimator();
+  ~SVMSampleListModelEstimator() ITK_OVERRIDE;
   /** PrintSelf */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** PrepareData method */
-  virtual void PrepareData();
+  void PrepareData() ITK_OVERRIDE;
 
 private:
   SVMSampleListModelEstimator(const Self &); //purposely not implemented
diff --git a/Modules/Learning/SVMLearning/test/otbExhaustiveExponentialOptimizerTest.cxx b/Modules/Learning/SVMLearning/test/otbExhaustiveExponentialOptimizerTest.cxx
index dbb718bf271d9a0fe67b50b7f68e49bbc6c9d52e..5a473558dc7c5fade99c1be45c1071bfb847653b 100644
--- a/Modules/Learning/SVMLearning/test/otbExhaustiveExponentialOptimizerTest.cxx
+++ b/Modules/Learning/SVMLearning/test/otbExhaustiveExponentialOptimizerTest.cxx
@@ -69,7 +69,7 @@ public:
   };
 
   /** \return The accuracy value corresponding the parameters */
-  virtual MeasureType GetValue(const ParametersType& parameters) const
+  MeasureType GetValue(const ParametersType& parameters) const ITK_OVERRIDE
   {
     return static_cast<MeasureType> ( m_FunctionInternalParameters.GetElement(0) * parameters.GetElement(0) * parameters.GetElement(0) +
                                  m_FunctionInternalParameters.GetElement(1) * parameters.GetElement(1) * parameters.GetElement(1) +
@@ -80,10 +80,10 @@ public:
   };
 
   /** \return the number of parameters to optimize */
-  virtual unsigned int GetNumberOfParameters(void) const {return 2; };
+  unsigned int GetNumberOfParameters(void) const ITK_OVERRIDE {return 2; };
 
   /** \return The accuracy derivative corresponding to the parameters */
-  virtual void GetDerivative(const ParametersType& itkNotUsed(parameters), DerivativeType& itkNotUsed(derivative)) const {};
+  void GetDerivative(const ParametersType& itkNotUsed(parameters), DerivativeType& itkNotUsed(derivative)) const ITK_OVERRIDE {};
 
   /// Constructor
   Quadratic2DCostFunction()
@@ -92,7 +92,7 @@ public:
     m_FunctionInternalParameters.Fill(0.0);
   };
   /// Destructor
-  virtual ~Quadratic2DCostFunction(){};
+  ~Quadratic2DCostFunction() ITK_OVERRIDE{};
 
 private:
   Quadratic2DCostFunction(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Sampling/include/otbOGRDataToClassStatisticsFilter.h b/Modules/Learning/Sampling/include/otbOGRDataToClassStatisticsFilter.h
index 940938a8c1e0238a6d9fd670f46fb405daaf8948..920d413daf0935dff9d8b54cb7a2875c62c9a888 100644
--- a/Modules/Learning/Sampling/include/otbOGRDataToClassStatisticsFilter.h
+++ b/Modules/Learning/Sampling/include/otbOGRDataToClassStatisticsFilter.h
@@ -77,10 +77,10 @@ public:
   void SetMask(const TMaskImage* mask);
   const TMaskImage* GetMask();
 
-  void Synthetize(void);
+  void Synthetize(void) ITK_OVERRIDE;
 
   /** Reset method called before starting the streaming*/
-  void Reset(void);
+  void Reset(void) ITK_OVERRIDE;
 
   // TODO : prevent loading of data into output
 
@@ -100,24 +100,24 @@ public:
 
   /** Make a DataObject of the correct type to be used as the specified
    * output. */
-  virtual itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx);
+  itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
 protected:
   /** Constructor */
   PersistentOGRDataToClassStatisticsFilter();
   /** Destructor */
-  virtual ~PersistentOGRDataToClassStatisticsFilter() {}
+  ~PersistentOGRDataToClassStatisticsFilter() ITK_OVERRIDE {}
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   //virtual void BeforeThreadedGenerateData();
 
   //virtual void ThreadedGenerateData(const RegionType& outputRegionForThread,
   //                                  itk::ThreadIdType threadId);
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   PersistentOGRDataToClassStatisticsFilter(const Self &); //purposely not implemented
@@ -200,7 +200,7 @@ protected:
   /** Constructor */
   OGRDataToClassStatisticsFilter() {}
   /** Destructor */
-  virtual ~OGRDataToClassStatisticsFilter() {}
+  ~OGRDataToClassStatisticsFilter() ITK_OVERRIDE {}
 
 private:
   OGRDataToClassStatisticsFilter(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Sampling/include/otbPolygonClassStatisticsAccumulator.h b/Modules/Learning/Sampling/include/otbPolygonClassStatisticsAccumulator.h
index 0a1e1c2d501812e3a8521c8e5455d905aea72f6e..c3750029e21de4adb75324fb45aeee2c141569fd 100644
--- a/Modules/Learning/Sampling/include/otbPolygonClassStatisticsAccumulator.h
+++ b/Modules/Learning/Sampling/include/otbPolygonClassStatisticsAccumulator.h
@@ -65,7 +65,7 @@ protected:
   PolygonClassStatisticsAccumulator();
     
   /** Destructor */
-  virtual ~PolygonClassStatisticsAccumulator();
+  ~PolygonClassStatisticsAccumulator() ITK_OVERRIDE;
 
 private:
   //Number of pixels in all the polygons
diff --git a/Modules/Learning/Supervised/include/otbBoostMachineLearningModel.h b/Modules/Learning/Supervised/include/otbBoostMachineLearningModel.h
index a812eca2b8f36708b19e186d7221a0a23cc07f4f..abf5a9f0c9b9d36075ab7a7a73d8b4030ffadaf1 100644
--- a/Modules/Learning/Supervised/include/otbBoostMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbBoostMachineLearningModel.h
@@ -93,23 +93,23 @@ public:
   itkSetMacro(MaxDepth, int);
 
   /** Train the machine learning model */
-  virtual void Train();
+  void Train() ITK_OVERRIDE;
   /** Predict values using the model */
-  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const;
+  TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const ITK_OVERRIDE;
 
   /** Save the model to file */
-  virtual void Save(const std::string & filename, const std::string & name="");
+  void Save(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /** Load the model from file */
-  virtual void Load(const std::string & filename, const std::string & name="");
+  void Load(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /**\name Classification model file compatibility tests */
   //@{
   /** Is the input model file readable and compatible with the corresponding classifier ? */
-  virtual bool CanReadFile(const std::string &);
+  bool CanReadFile(const std::string &) ITK_OVERRIDE;
 
   /** Is the input model file writable and compatible with the corresponding classifier ? */
-  virtual bool CanWriteFile(const std::string &);
+  bool CanWriteFile(const std::string &) ITK_OVERRIDE;
   //@}
 
 protected:
@@ -117,10 +117,10 @@ protected:
   BoostMachineLearningModel();
 
   /** Destructor */
-  virtual ~BoostMachineLearningModel();
+  ~BoostMachineLearningModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   BoostMachineLearningModel(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbBoostMachineLearningModelFactory.h b/Modules/Learning/Supervised/include/otbBoostMachineLearningModelFactory.h
index eb65e79f18c6a29550fd190ac4fd7609e22c36ac..990ee6a03b87c4695ce562ed30923398af353a43 100644
--- a/Modules/Learning/Supervised/include/otbBoostMachineLearningModelFactory.h
+++ b/Modules/Learning/Supervised/include/otbBoostMachineLearningModelFactory.h
@@ -41,8 +41,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -59,7 +59,7 @@ public:
 
 protected:
   BoostMachineLearningModelFactory();
-  virtual ~BoostMachineLearningModelFactory();
+  ~BoostMachineLearningModelFactory() ITK_OVERRIDE;
 
 private:
   BoostMachineLearningModelFactory(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbConfusionMatrixCalculator.h b/Modules/Learning/Supervised/include/otbConfusionMatrixCalculator.h
index 6c349b7ce44fa1f7ba13f3d75f951202e5b1c9e9..2615283e0272843e529d213711abdd2fa8f412e4 100644
--- a/Modules/Learning/Supervised/include/otbConfusionMatrixCalculator.h
+++ b/Modules/Learning/Supervised/include/otbConfusionMatrixCalculator.h
@@ -140,8 +140,8 @@ public:
 
 protected:
   ConfusionMatrixCalculator();
-  virtual ~ConfusionMatrixCalculator() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ConfusionMatrixCalculator() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Learning/Supervised/include/otbConfusionMatrixMeasurements.h b/Modules/Learning/Supervised/include/otbConfusionMatrixMeasurements.h
index 2863d0ad8122ba7e0b2654b6bba1d6ba72357659..5834da0f874508807eac4fc73467cb662aee1e95 100644
--- a/Modules/Learning/Supervised/include/otbConfusionMatrixMeasurements.h
+++ b/Modules/Learning/Supervised/include/otbConfusionMatrixMeasurements.h
@@ -140,7 +140,7 @@ public:
 
 protected:
   ConfusionMatrixMeasurements();
-  virtual ~ConfusionMatrixMeasurements() {}
+  ~ConfusionMatrixMeasurements() ITK_OVERRIDE {}
   //void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
 
diff --git a/Modules/Learning/Supervised/include/otbCvRTreesWrapper.h b/Modules/Learning/Supervised/include/otbCvRTreesWrapper.h
index 536a7608a9720fdfa1e14e07f2d2e84707cb8f1c..dcfc2d7546ec6f74c0c0781dba1f15b4b8613182 100644
--- a/Modules/Learning/Supervised/include/otbCvRTreesWrapper.h
+++ b/Modules/Learning/Supervised/include/otbCvRTreesWrapper.h
@@ -34,7 +34,7 @@ class CV_EXPORTS_W CvRTreesWrapper : public CvRTrees
 public:
   typedef std::vector<unsigned int> VotesVectorType;
   CvRTreesWrapper();
-  virtual ~CvRTreesWrapper();
+  ~CvRTreesWrapper() ITK_OVERRIDE;
 
   /** Compute the number of votes for each class. */
   void get_votes(const cv::Mat& sample, 
diff --git a/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModel.h b/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModel.h
index d7ce6d530c30bbf1047217a2219d1e1dbbaf773e..ff626f27cb53dd0438301c0c7bfdbe02d240c660 100644
--- a/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModel.h
@@ -148,23 +148,23 @@ public:
   }
 
   /** Train the machine learning model */
-  virtual void Train();
+  void Train() ITK_OVERRIDE;
   /** Predict values using the model */
-  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const;
+  TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const ITK_OVERRIDE;
 
   /** Save the model to file */
-  virtual void Save(const std::string & filename, const std::string & name="");
+  void Save(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /** Load the model from file */
-  virtual void Load(const std::string & filename, const std::string & name="");
+  void Load(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /**\name Classification model file compatibility tests */
   //@{
   /** Is the input model file readable and compatible with the corresponding classifier ? */
-  virtual bool CanReadFile(const std::string &);
+  bool CanReadFile(const std::string &) ITK_OVERRIDE;
 
   /** Is the input model file writable and compatible with the corresponding classifier ? */
-  virtual bool CanWriteFile(const std::string &);
+  bool CanWriteFile(const std::string &) ITK_OVERRIDE;
   //@}
 
 protected:
@@ -172,10 +172,10 @@ protected:
   DecisionTreeMachineLearningModel();
 
   /** Destructor */
-  virtual ~DecisionTreeMachineLearningModel();
+  ~DecisionTreeMachineLearningModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   DecisionTreeMachineLearningModel(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModelFactory.h b/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModelFactory.h
index 54e3341041cb7301d6ba2ff009100e958592b00e..73a03c0be6050660a47ba44610bd5c78c19c25ae 100644
--- a/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModelFactory.h
+++ b/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModelFactory.h
@@ -41,8 +41,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -59,7 +59,7 @@ public:
 
 protected:
   DecisionTreeMachineLearningModelFactory();
-  virtual ~DecisionTreeMachineLearningModelFactory();
+  ~DecisionTreeMachineLearningModelFactory() ITK_OVERRIDE;
 
 private:
   DecisionTreeMachineLearningModelFactory(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModel.h b/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModel.h
index 30baf7aa302c1b0dee8d2f26b16a7d0f9f8a4c59..029fb7d380924a47bbe5f3c8131ad9bb69ad16e9 100644
--- a/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModel.h
@@ -101,23 +101,23 @@ public:
   itkSetMacro(UseSurrogates, bool);
 
   /** Train the machine learning model */
-  virtual void Train();
+  void Train() ITK_OVERRIDE;
   /** Predict values using the model */
-  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const;
+  TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const ITK_OVERRIDE;
 
   /** Save the model to file */
-  virtual void Save(const std::string & filename, const std::string & name="");
+  void Save(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /** Load the model from file */
-  virtual void Load(const std::string & filename, const std::string & name="");
+  void Load(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /**\name Classification model file compatibility tests */
   //@{
   /** Is the input model file readable and compatible with the corresponding classifier ? */
-  virtual bool CanReadFile(const std::string &);
+  bool CanReadFile(const std::string &) ITK_OVERRIDE;
 
   /** Is the input model file writable and compatible with the corresponding classifier ? */
-  virtual bool CanWriteFile(const std::string &);
+  bool CanWriteFile(const std::string &) ITK_OVERRIDE;
   //@}
 
 protected:
@@ -125,10 +125,10 @@ protected:
   GradientBoostedTreeMachineLearningModel();
 
   /** Destructor */
-  virtual ~GradientBoostedTreeMachineLearningModel();
+  ~GradientBoostedTreeMachineLearningModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   GradientBoostedTreeMachineLearningModel(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModelFactory.h b/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModelFactory.h
index a1c915dc95dec6894ffd6cc4c6913f0b877110da..b66f790d58a56c83845ff126f52f73e44a42bab2 100644
--- a/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModelFactory.h
+++ b/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModelFactory.h
@@ -41,8 +41,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -59,7 +59,7 @@ public:
 
 protected:
   GradientBoostedTreeMachineLearningModelFactory();
-  virtual ~GradientBoostedTreeMachineLearningModelFactory();
+  ~GradientBoostedTreeMachineLearningModelFactory() ITK_OVERRIDE;
 
 private:
   GradientBoostedTreeMachineLearningModelFactory(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbImageClassificationFilter.h b/Modules/Learning/Supervised/include/otbImageClassificationFilter.h
index f6ed68aa1db6cec92aa37bdc870f0e19cbd59651..156c772f1598b799af90533239fb53a0c09c2375 100644
--- a/Modules/Learning/Supervised/include/otbImageClassificationFilter.h
+++ b/Modules/Learning/Supervised/include/otbImageClassificationFilter.h
@@ -106,14 +106,14 @@ protected:
   /** Constructor */
   ImageClassificationFilter();
   /** Destructor */
-  virtual ~ImageClassificationFilter() {}
+  ~ImageClassificationFilter() ITK_OVERRIDE {}
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageClassificationFilter(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModel.h b/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModel.h
index 3f29a10af3ed6b46d700684eddeab80a5076c17a..c9fc45a2b13e12174f422a1fc1075fcfbfc6bd77 100644
--- a/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModel.h
@@ -72,23 +72,23 @@ public:
   itkSetMacro(DecisionRule, int);
 
   /** Train the machine learning model */
-  virtual void Train();
+  void Train() ITK_OVERRIDE;
   /** Predict values using the model */
-  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const;
+  TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const ITK_OVERRIDE;
 
   /** Save the model to file */
-  virtual void Save(const std::string & filename, const std::string & name="");
+  void Save(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /** Load the model from file */
-  virtual void Load(const std::string & filename, const std::string & name="");
+  void Load(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /**\name Classification model file compatibility tests */
   //@{
   /** Is the input model file readable and compatible with the corresponding classifier ? */
-  virtual bool CanReadFile(const std::string &);
+  bool CanReadFile(const std::string &) ITK_OVERRIDE;
 
   /** Is the input model file writable and compatible with the corresponding classifier ? */
-  virtual bool CanWriteFile(const std::string &);
+  bool CanWriteFile(const std::string &) ITK_OVERRIDE;
   //@}
 
 protected:
@@ -96,10 +96,10 @@ protected:
   KNearestNeighborsMachineLearningModel();
 
   /** Destructor */
-  virtual ~KNearestNeighborsMachineLearningModel();
+  ~KNearestNeighborsMachineLearningModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   KNearestNeighborsMachineLearningModel(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModelFactory.h b/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModelFactory.h
index 068efe098a80ee63dcd0d5bdb574075590301ea2..ab2dbe7fdd892b71302f1602c61f92b58efec64d 100644
--- a/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModelFactory.h
+++ b/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModelFactory.h
@@ -41,8 +41,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -59,7 +59,7 @@ public:
 
 protected:
   KNearestNeighborsMachineLearningModelFactory();
-  virtual ~KNearestNeighborsMachineLearningModelFactory();
+  ~KNearestNeighborsMachineLearningModelFactory() ITK_OVERRIDE;
 
 private:
   KNearestNeighborsMachineLearningModelFactory(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModel.h b/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModel.h
index 622923753e37d1216de669a9724c72b979015f83..0dc98e066f8300a6a41c8b03a245cdd4b4d3892d 100644
--- a/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModel.h
@@ -60,23 +60,23 @@ public:
   itkTypeMacro(SVMMachineLearningModel, MachineLearningModel);
 
   /** Train the machine learning model */
-  virtual void Train();
+  void Train() ITK_OVERRIDE;
   /** Predict values using the model */
-  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const;
+  TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const ITK_OVERRIDE;
 
   /** Save the model to file */
-  virtual void Save(const std::string &filename, const std::string & name="");
+  void Save(const std::string &filename, const std::string & name="") ITK_OVERRIDE;
 
   /** Load the model from file */
-  virtual void Load(const std::string & filename, const std::string & name="");
+  void Load(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /**\name Classification model file compatibility tests */
   //@{
   /** Is the input model file readable and compatible with the corresponding classifier ? */
-  virtual bool CanReadFile(const std::string &);
+  bool CanReadFile(const std::string &) ITK_OVERRIDE;
 
   /** Is the input model file writable and compatible with the corresponding classifier ? */
-  virtual bool CanWriteFile(const std::string &);
+  bool CanWriteFile(const std::string &) ITK_OVERRIDE;
   //@}
 
   //Setters/Getters to SVM model
@@ -120,10 +120,10 @@ protected:
   LibSVMMachineLearningModel();
 
   /** Destructor */
-  virtual ~LibSVMMachineLearningModel();
+  ~LibSVMMachineLearningModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LibSVMMachineLearningModel(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModelFactory.h b/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModelFactory.h
index 13dbb91892c0f62d040a506549de78f5b63b070c..c9f4acc054e9715bc90fe3e90b1f931f70a8a280 100644
--- a/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModelFactory.h
+++ b/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModelFactory.h
@@ -39,8 +39,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -57,7 +57,7 @@ public:
 
 protected:
   LibSVMMachineLearningModelFactory();
-  virtual ~LibSVMMachineLearningModelFactory();
+  ~LibSVMMachineLearningModelFactory() ITK_OVERRIDE;
 
 private:
   LibSVMMachineLearningModelFactory(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbMachineLearningModel.h b/Modules/Learning/Supervised/include/otbMachineLearningModel.h
index b18e39e15c89fabff9ff2c640122740e710972f5..3f66f30518378fa825e547436c7e37ef5ede04cf 100644
--- a/Modules/Learning/Supervised/include/otbMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbMachineLearningModel.h
@@ -151,10 +151,10 @@ protected:
   MachineLearningModel();
 
   /** Destructor */
-  virtual ~MachineLearningModel();
+  ~MachineLearningModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Input list sample */
   typename InputListSampleType::Pointer m_InputListSample;
diff --git a/Modules/Learning/Supervised/include/otbMachineLearningModelFactory.h b/Modules/Learning/Supervised/include/otbMachineLearningModelFactory.h
index 94a72511521dce0789e2a75a657c2c7d719c21ab..492a45ac611aebdbe3517b74432ca2da60e69266 100644
--- a/Modules/Learning/Supervised/include/otbMachineLearningModelFactory.h
+++ b/Modules/Learning/Supervised/include/otbMachineLearningModelFactory.h
@@ -55,7 +55,7 @@ public:
 
 protected:
   MachineLearningModelFactory();
-  ~MachineLearningModelFactory();
+  ~MachineLearningModelFactory() ITK_OVERRIDE;
 
 private:
   MachineLearningModelFactory(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbMachineLearningModelFactoryBase.h b/Modules/Learning/Supervised/include/otbMachineLearningModelFactoryBase.h
index bffd9661366e40dc298af6fc2e1ef6503bb9dfcd..7705675fe487f3ef0cf8f41c97773e6a401d13e8 100644
--- a/Modules/Learning/Supervised/include/otbMachineLearningModelFactoryBase.h
+++ b/Modules/Learning/Supervised/include/otbMachineLearningModelFactoryBase.h
@@ -45,7 +45,7 @@ public:
 
 protected:
   MachineLearningModelFactoryBase();
-  virtual ~MachineLearningModelFactoryBase();
+  ~MachineLearningModelFactoryBase() ITK_OVERRIDE;
 
   static itk::SimpleMutexLock mutex;
 
diff --git a/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModel.h b/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModel.h
index 8f4f182b0762239cb65e8636c9786da3f11be2e1..3a8eef763aa7f5802ab0178d9209c11a499a9f40 100644
--- a/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModel.h
@@ -169,23 +169,23 @@ public:
   itkSetMacro(Epsilon, double);
 
   /** Train the machine learning model */
-  virtual void Train();
+  void Train() ITK_OVERRIDE;
   /** Predict values using the model */
-  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const;
+  TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const ITK_OVERRIDE;
 
   /** Save the model to file */
-  virtual void Save(const std::string & filename, const std::string & name="");
+  void Save(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /** Load the model from file */
-  virtual void Load(const std::string & filename, const std::string & name="");
+  void Load(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /**\name Classification model file compatibility tests */
   //@{
   /** Is the input model file readable and compatible with the corresponding classifier ? */
-  virtual bool CanReadFile(const std::string &);
+  bool CanReadFile(const std::string &) ITK_OVERRIDE;
 
   /** Is the input model file writable and compatible with the corresponding classifier ? */
-  virtual bool CanWriteFile(const std::string &);
+  bool CanWriteFile(const std::string &) ITK_OVERRIDE;
   //@}
 
 protected:
@@ -193,12 +193,12 @@ protected:
   NeuralNetworkMachineLearningModel();
 
   /** Destructor */
-  virtual ~NeuralNetworkMachineLearningModel();
+  ~NeuralNetworkMachineLearningModel() ITK_OVERRIDE;
 
   void LabelsToMat(const TargetListSampleType * listSample, cv::Mat & output);
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   NeuralNetworkMachineLearningModel(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModelFactory.h b/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModelFactory.h
index 60326de7a519cc90be5c6f1323b826215654c847..fcf5adaee0687246784cfbf2662b876ecf7aee06 100644
--- a/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModelFactory.h
+++ b/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModelFactory.h
@@ -41,8 +41,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -59,7 +59,7 @@ public:
 
 protected:
   NeuralNetworkMachineLearningModelFactory();
-  virtual ~NeuralNetworkMachineLearningModelFactory();
+  ~NeuralNetworkMachineLearningModelFactory() ITK_OVERRIDE;
 
 private:
   NeuralNetworkMachineLearningModelFactory(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModel.h b/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModel.h
index 8ecfcd2b51d607169b30dcc86dd59d2096d728f4..f68ef83af3e7b354c275b660079b42c40bb6f3c4 100644
--- a/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModel.h
@@ -53,23 +53,23 @@ public:
   itkTypeMacro(NormalBayesMachineLearningModel, MachineLearningModel);
 
   /** Train the machine learning model */
-  virtual void Train();
+  void Train() ITK_OVERRIDE;
   /** Predict values using the model */
-  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const;
+  TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const ITK_OVERRIDE;
 
   /** Save the model to file */
-  virtual void Save(const std::string & filename, const std::string & name="");
+  void Save(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /** Load the model from file */
-  virtual void Load(const std::string & filename, const std::string & name="");
+  void Load(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /**\name Classification model file compatibility tests */
   //@{
   /** Is the input model file readable and compatible with the corresponding classifier ? */
-  virtual bool CanReadFile(const std::string &);
+  bool CanReadFile(const std::string &) ITK_OVERRIDE;
 
   /** Is the input model file writable and compatible with the corresponding classifier ? */
-  virtual bool CanWriteFile(const std::string &);
+  bool CanWriteFile(const std::string &) ITK_OVERRIDE;
   //@}
 
 protected:
@@ -77,10 +77,10 @@ protected:
   NormalBayesMachineLearningModel();
 
   /** Destructor */
-  virtual ~NormalBayesMachineLearningModel();
+  ~NormalBayesMachineLearningModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   NormalBayesMachineLearningModel(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModelFactory.h b/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModelFactory.h
index c4e5c8a5be49376947b26b23542ff64ef2a5cf0d..726c3c2c94eba613449bd7c0c98238e7ee29a89c 100644
--- a/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModelFactory.h
+++ b/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModelFactory.h
@@ -41,8 +41,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -59,7 +59,7 @@ public:
 
 protected:
   NormalBayesMachineLearningModelFactory();
-  virtual ~NormalBayesMachineLearningModelFactory();
+  ~NormalBayesMachineLearningModelFactory() ITK_OVERRIDE;
 
 private:
   NormalBayesMachineLearningModelFactory(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModel.h b/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModel.h
index 942e3de986956154529dbda14622de898c9d5b3e..eb8a8d069ed846fa12c07927e18e4582db1b1aad 100644
--- a/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModel.h
@@ -61,23 +61,23 @@ public:
   itkTypeMacro(RandomForestsMachineLearningModel, MachineLearningModel);
 
   /** Train the machine learning model */
-  virtual void Train();
+  void Train() ITK_OVERRIDE;
   /** Predict values using the model */
-  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const;
+  TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const ITK_OVERRIDE;
 
   /** Save the model to file */
-  virtual void Save(const std::string & filename, const std::string & name="");
+  void Save(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /** Load the model from file */
-  virtual void Load(const std::string & filename, const std::string & name="");
+  void Load(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /**\name Classification model file compatibility tests */
   //@{
   /** Is the input model file readable and compatible with the corresponding classifier ? */
-  virtual bool CanReadFile(const std::string &);
+  bool CanReadFile(const std::string &) ITK_OVERRIDE;
 
   /** Is the input model file writable and compatible with the corresponding classifier ? */
-  virtual bool CanWriteFile(const std::string &);
+  bool CanWriteFile(const std::string &) ITK_OVERRIDE;
   //@}
 
   //Setters of RT parameters (documentation get from opencv doxygen 2.4)
@@ -134,10 +134,10 @@ protected:
   RandomForestsMachineLearningModel();
 
   /** Destructor */
-  virtual ~RandomForestsMachineLearningModel();
+  ~RandomForestsMachineLearningModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /* /\** Input list sample *\/ */
   /* typename InputListSampleType::Pointer m_InputListSample; */
diff --git a/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModelFactory.h b/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModelFactory.h
index 7a3e7e3a8ebeb437c189271ea4e58e0e86845619..a9e7e5e611dccd0193117f85efb89b98c20c57a2 100644
--- a/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModelFactory.h
+++ b/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModelFactory.h
@@ -41,8 +41,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -59,7 +59,7 @@ public:
 
 protected:
   RandomForestsMachineLearningModelFactory();
-  virtual ~RandomForestsMachineLearningModelFactory();
+  ~RandomForestsMachineLearningModelFactory() ITK_OVERRIDE;
 
 private:
   RandomForestsMachineLearningModelFactory(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbSVMMachineLearningModel.h b/Modules/Learning/Supervised/include/otbSVMMachineLearningModel.h
index c976d666b128ee8d84884fd886fc14c8a355513e..681d03f44a0af8a2d29875b560ab7dbaffdbada4 100644
--- a/Modules/Learning/Supervised/include/otbSVMMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbSVMMachineLearningModel.h
@@ -60,23 +60,23 @@ public:
   itkTypeMacro(SVMMachineLearningModel, MachineLearningModel);
 
   /** Train the machine learning model */
-  virtual void Train();
+  void Train() ITK_OVERRIDE;
   /** Predict values using the model */
-  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const;
+  TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality=NULL) const ITK_OVERRIDE;
 
   /** Save the model to file */
-  virtual void Save(const std::string & filename, const std::string & name="");
+  void Save(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /** Load the model from file */
-  virtual void Load(const std::string & filename, const std::string & name="");
+  void Load(const std::string & filename, const std::string & name="") ITK_OVERRIDE;
 
   /**\name Classification model file compatibility tests */
   //@{
   /** Is the input model file readable and compatible with the corresponding classifier ? */
-  virtual bool CanReadFile(const std::string &);
+  bool CanReadFile(const std::string &) ITK_OVERRIDE;
 
   /** Is the input model file writable and compatible with the corresponding classifier ? */
-  virtual bool CanWriteFile(const std::string &);
+  bool CanWriteFile(const std::string &) ITK_OVERRIDE;
   //@}
 
   //Setters/Getters to SVM model
@@ -134,10 +134,10 @@ protected:
   SVMMachineLearningModel();
 
   /** Destructor */
-  virtual ~SVMMachineLearningModel();
+  ~SVMMachineLearningModel() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SVMMachineLearningModel(const Self &); //purposely not implemented
diff --git a/Modules/Learning/Supervised/include/otbSVMMachineLearningModelFactory.h b/Modules/Learning/Supervised/include/otbSVMMachineLearningModelFactory.h
index bc911450367acee98dc8e2b8e88386baa7e6c236..3ef3fd6dadc74509bf57580641ff4c32f66b053e 100644
--- a/Modules/Learning/Supervised/include/otbSVMMachineLearningModelFactory.h
+++ b/Modules/Learning/Supervised/include/otbSVMMachineLearningModelFactory.h
@@ -41,8 +41,8 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const;
-  virtual const char* GetDescription(void) const;
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE;
+  const char* GetDescription(void) const ITK_OVERRIDE;
 
   /** Method for class instantiation. */
   itkFactorylessNewMacro(Self);
@@ -59,7 +59,7 @@ public:
 
 protected:
   SVMMachineLearningModelFactory();
-  virtual ~SVMMachineLearningModelFactory();
+  ~SVMMachineLearningModelFactory() ITK_OVERRIDE;
 
 private:
   SVMMachineLearningModelFactory(const Self &); //purposely not implemented
diff --git a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.h b/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.h
index ebd510fba5acff6f9b60aa299faee88dc74f017d..0f04f442f060f99d3427047fcea3c6154ca0a88d 100644
--- a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.h
+++ b/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.h
@@ -70,9 +70,9 @@ protected:
   /** Constructor */
   ImageListToRCC8GraphFilter();
   /** Destructor */
-  virtual ~ImageListToRCC8GraphFilter() {}
+  ~ImageListToRCC8GraphFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageListToRCC8GraphFilter(const Self &); //purposely not implemented
diff --git a/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.h b/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.h
index 7b91712135f66f52e34ad400bbb1463d7a6c5a4f..39cae56536468c05091f5c8e5c04c3c21ad2a067 100644
--- a/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.h
+++ b/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.h
@@ -81,11 +81,11 @@ protected:
   /** Constructor */
   ImageMultiSegmentationToRCC8GraphFilter();
   /** Destructor */
-  virtual ~ImageMultiSegmentationToRCC8GraphFilter();
+  ~ImageMultiSegmentationToRCC8GraphFilter() ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * Get the composition knowledge.
    * \param r1 First RCC8 relation value,
diff --git a/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.h b/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.h
index 38ef31760ebbc92dabe78edf18f0d0ef5c67bad7..eb7074d1684fecfd04bc9cf43cddf9ab48ee886c 100644
--- a/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.h
+++ b/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.h
@@ -115,7 +115,7 @@ protected:
   /** Constructor */
   ImageToImageRCC8Calculator();
   /** Destructor */
-  virtual ~ImageToImageRCC8Calculator() {}
+  ~ImageToImageRCC8Calculator() ITK_OVERRIDE {}
   /**
    * Compute the minimal image region required.
    * \return The minimal region required.
@@ -170,9 +170,9 @@ protected:
    */
   BoolImagePointerType ConvertToBoolImage(ImagePointerType image, PixelType insideValue);
   /** Main computation method */
-  void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** The RCC8 relation value */
diff --git a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.h b/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.h
index 1ce5150418ba0d7e539c71431dc50747183706e5..bf13e04000ee923aff4939d5942da3900974e3f9 100644
--- a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.h
+++ b/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.h
@@ -120,9 +120,9 @@ protected:
   /** Constructor */
   PolygonListToRCC8GraphFilter();
   /** Destructor */
-  virtual ~PolygonListToRCC8GraphFilter();
+  ~PolygonListToRCC8GraphFilter() ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Multi-threading implementation */
 
@@ -148,7 +148,7 @@ protected:
   /** End Multi-threading implementation */
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * Get the composition knowledge.
    * \param r1 First RCC8 relation value,
diff --git a/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.h b/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.h
index eb3fb5625c444e814c4d03c28bd35d65e4919149..4c20f280eeb5cdf21dd7818f349d0ae38c6a0cf0 100644
--- a/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.h
+++ b/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.h
@@ -106,9 +106,9 @@ protected:
   /** Constructor */
   PolygonToPolygonRCC8Calculator();
   /** Destructor */
-  virtual ~PolygonToPolygonRCC8Calculator() {}
+  ~PolygonToPolygonRCC8Calculator() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** The RCC8 relation value */
diff --git a/Modules/OBIA/RCC8/include/otbRCC8Edge.h b/Modules/OBIA/RCC8/include/otbRCC8Edge.h
index ade79be2262bea92f9e3058c89794a325d9c193c..4ffce97e22b77c39f101e1f4e7342e7efe7b17fb 100644
--- a/Modules/OBIA/RCC8/include/otbRCC8Edge.h
+++ b/Modules/OBIA/RCC8/include/otbRCC8Edge.h
@@ -53,9 +53,9 @@ protected:
   /** Constructor */
   RCC8Edge();
   /** Desctructor */
-  ~RCC8Edge() {}
+  ~RCC8Edge() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** The RCC8 value */
diff --git a/Modules/OBIA/RCC8/include/otbRCC8Graph.h b/Modules/OBIA/RCC8/include/otbRCC8Graph.h
index 7b7e80ebd2114fe819a5b84794810e44372fe92b..cd85ae8ffac5e4814be86af17edfa93e0d420696 100644
--- a/Modules/OBIA/RCC8/include/otbRCC8Graph.h
+++ b/Modules/OBIA/RCC8/include/otbRCC8Graph.h
@@ -124,9 +124,9 @@ protected:
   /** Constructor */
   RCC8Graph();
   /** Destructor */
-  ~RCC8Graph() {}
+  ~RCC8Graph() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * Initialize a range of vertex.
    * \param num The index of the last vertices to intialize.
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.h b/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.h
index 60b6652d54358b5fcd1fc6140e19d666682daa3d..96b3bce6819033c25a142def1a5b0b8d01887f74 100644
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.h
+++ b/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.h
@@ -89,9 +89,9 @@ protected:
   /** Constructor */
   RCC8GraphFileReader();
   /** Destructor */
-  virtual ~RCC8GraphFileReader();
+  ~RCC8GraphFileReader() ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /**
    * Parse edge information from a given line.
    * \param line The line to parse.
@@ -104,7 +104,7 @@ protected:
   void  ParseVertex(const std::string& line);
 
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** File name */
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.h b/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.h
index fc3c1c9c1ace124f751bba0f26bf2e792e8c5928..2fda2d602773cc5ce977b9aec9522dcfbe185648 100644
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.h
+++ b/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.h
@@ -104,17 +104,17 @@ public:
   /**
    * Update method.
    */
-  virtual void Update(void);
+  void Update(void) ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   RCC8GraphFileWriter();
   /** Destructor */
-  virtual ~RCC8GraphFileWriter();
+  ~RCC8GraphFileWriter() ITK_OVERRIDE;
   /**
    * Main computation method.
    */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /**
    * Write Method.
    * Performs checkings and invoke GenerateData().
@@ -140,7 +140,7 @@ protected:
   /**
    * PrintSelf method
    */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** Filename of the graph file to write */
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.h b/Modules/OBIA/RCC8/include/otbRCC8GraphSource.h
index 0006fc7d7b2a182565982feabeea7d234dd858fd..dca5674c0fc55fa15d2a46e9a475983e5c999761 100644
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.h
+++ b/Modules/OBIA/RCC8/include/otbRCC8GraphSource.h
@@ -54,9 +54,9 @@ protected:
   /** Constructor */
   RCC8GraphSource();
   /** Destructor */
-  virtual ~RCC8GraphSource() {}
+  ~RCC8GraphSource() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   RCC8GraphSource(const Self &); //purposely not implemented
diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexBase.h b/Modules/OBIA/RCC8/include/otbRCC8VertexBase.h
index e5d390f332604f74f71ba97e2c1e8e9dbaa3b2de..4d7492b7856d91cd698148a7a4f7fa59b0a37a33 100644
--- a/Modules/OBIA/RCC8/include/otbRCC8VertexBase.h
+++ b/Modules/OBIA/RCC8/include/otbRCC8VertexBase.h
@@ -79,9 +79,9 @@ protected:
   /** Constructor */
   RCC8VertexBase();
   /** Desctructor */
-  virtual ~RCC8VertexBase() {}
+  ~RCC8VertexBase() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** The segmentation level */
diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.h b/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.h
index 7be265274e2f4888b677e8066d79525ba6dbd1f2..a74a1db6a98970ec5bedc5239c25f6786f68cd51 100644
--- a/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.h
+++ b/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.h
@@ -58,20 +58,20 @@ public:
    * Set the VertexWithCompacity attributes from the attributes vector.
    * \param attributes The vector containing the parsed attributes.
    */
-  void SetAttributesMap(AttributesMapType attributes);
+  void SetAttributesMap(AttributesMapType attributes) ITK_OVERRIDE;
   /**
    * Get an attributes vector representing the VertexWithCompacity attributes.
    * \return The attributes vector
    */
-  AttributesMapType GetAttributesMap(void);
+  AttributesMapType GetAttributesMap(void) ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   RCC8VertexWithCompacity();
   /** Desctructor */
-  ~RCC8VertexWithCompacity() {}
+  ~RCC8VertexWithCompacity() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** The compacity */
diff --git a/Modules/Radiometry/Indices/include/otbBuiltUpIndicesFunctor.h b/Modules/Radiometry/Indices/include/otbBuiltUpIndicesFunctor.h
index 7cd094b8645a3ba6abceca1abd2b25e94c631dba..5c4baa71aef114bf1f2a92ddfa940b2af4006fdb 100644
--- a/Modules/Radiometry/Indices/include/otbBuiltUpIndicesFunctor.h
+++ b/Modules/Radiometry/Indices/include/otbBuiltUpIndicesFunctor.h
@@ -148,7 +148,7 @@ class NDBI : public TM4AndTM5IndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "NDBI";
   }
@@ -156,10 +156,10 @@ public:
   /// Constructor
   NDBI() {}
   /// Desctructor
-  virtual ~NDBI() {}
+  ~NDBI() ITK_OVERRIDE {}
   // Operator on r and nir single pixel values
 protected:
-  inline TOutput Evaluate(const TInput1& pTM4, const TInput2& pTM5) const
+  inline TOutput Evaluate(const TInput1& pTM4, const TInput2& pTM5) const ITK_OVERRIDE
   {
     double dTM4 = static_cast<double>(pTM4);
     double dTM5 = static_cast<double>(pTM5);
@@ -187,7 +187,7 @@ class ISU : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "ISU";
   }
@@ -195,7 +195,7 @@ public:
   /// Constructor
   ISU() : m_A(100.), m_B(25.) {}
   /// Desctructor
-  virtual ~ISU() {}
+  ~ISU() ITK_OVERRIDE {}
 
   /** Set/Get A correction */
   void SetA(const double pA)
@@ -217,7 +217,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& pRed, const TInput2& pNIR) const
+  inline TOutput Evaluate(const TInput1& pRed, const TInput2& pNIR) const ITK_OVERRIDE
   {
     double dRed = static_cast<double>(pRed);
     double dNIR = static_cast<double>(pNIR);
diff --git a/Modules/Radiometry/Indices/include/otbGAndRIndexImageFilter.h b/Modules/Radiometry/Indices/include/otbGAndRIndexImageFilter.h
index f109b672aa801625899fadb75f927ca0dda3c9be..1404c2005af39715db2c25946e87e344f5d67fb8 100644
--- a/Modules/Radiometry/Indices/include/otbGAndRIndexImageFilter.h
+++ b/Modules/Radiometry/Indices/include/otbGAndRIndexImageFilter.h
@@ -69,9 +69,9 @@ public:
 
 protected:
   GAndRIndexImageFilter();
-  virtual ~GAndRIndexImageFilter() {}
+  ~GAndRIndexImageFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /*  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
                               itk::ThreadIdType threadId );
diff --git a/Modules/Radiometry/Indices/include/otbLandsatTMIndices.h b/Modules/Radiometry/Indices/include/otbLandsatTMIndices.h
index f111d9d7c0a154282367cc170990cdb37300c528..5c8927cbf761c34dff2ef68a8ff9b6143e9183f5 100644
--- a/Modules/Radiometry/Indices/include/otbLandsatTMIndices.h
+++ b/Modules/Radiometry/Indices/include/otbLandsatTMIndices.h
@@ -340,7 +340,7 @@ public:
   virtual std::string GetName() const = 0;
 
   LandsatTMIndex() {}
-  virtual ~LandsatTMIndex() {}
+  ~LandsatTMIndex() ITK_OVERRIDE {}
 
 
 };
@@ -367,13 +367,13 @@ class Bright : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "Bright";
   }
 
   Bright() {}
-  virtual ~Bright() {}
+  ~Bright() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -408,13 +408,13 @@ class Vis : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "Vis";
   }
 
   Vis() {}
-  virtual ~Vis() {}
+  ~Vis() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -441,13 +441,13 @@ class NIR : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "NIR";
   }
 
   NIR() {}
-  virtual ~NIR() {}
+  ~NIR() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -473,13 +473,13 @@ class MIR1 : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "MIR1";
   }
 
   MIR1() {}
-  virtual ~MIR1() {}
+  ~MIR1() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -505,13 +505,13 @@ class MIR2 : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "MIR2";
   }
 
   MIR2() {}
-  virtual ~MIR2() {}
+  ~MIR2() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -537,13 +537,13 @@ class TIR : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "TIR";
   }
 
   TIR() {}
-  virtual ~TIR() {}
+  ~TIR() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -583,13 +583,13 @@ class MIRTIR : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "MIRTIR";
   }
 
   MIRTIR() {}
-  virtual ~MIRTIR() {}
+  ~MIRTIR() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -623,13 +623,13 @@ class NDVI : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "NDVI";
   }
 
   NDVI() {}
-  virtual ~NDVI() {}
+  ~NDVI() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -670,13 +670,13 @@ class NDBSI : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "NDBSI";
   }
 
   NDBSI() {}
-  virtual ~NDBSI() {}
+  ~NDBSI() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -713,13 +713,13 @@ class BIO : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "BIO";
   }
 
   BIO() {}
-  virtual ~BIO() {}
+  ~BIO() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -759,13 +759,13 @@ class NDSI : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "NDSI";
   }
 
   NDSI() {}
-  virtual ~NDSI() {}
+  ~NDSI() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -816,13 +816,13 @@ class NDSIVis : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "NDSIVis";
   }
 
   NDSIVis() {}
-  virtual ~NDSIVis() {}
+  ~NDSIVis() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -861,13 +861,13 @@ class NDBBBI : public LandsatTMIndex<TInput, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "NDBBBI";
   }
 
   NDBBBI() {}
-  virtual ~NDBBBI() {}
+  ~NDBBBI() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -981,7 +981,7 @@ public:
     m_FvNDBSI->SetMembership(Medium, -0.20, -0.20, 0.0, 0.0);
     m_FvNDBSI->SetMembership(High, 0.0, 0.0, maximumValue, maximumValue);
     }
-  virtual ~LinguisticVariables() {}
+  ~LinguisticVariables() ITK_OVERRIDE {}
 
   inline itk::FixedArray<unsigned int, 11> operator ()(const TInput& inputPixel)
   {
@@ -1065,7 +1065,7 @@ public:
   }
 
   KernelSpectralRule() : m_TV1(0.7), m_TV2(0.5) { }
-  virtual ~KernelSpectralRule() {}
+  ~KernelSpectralRule() ITK_OVERRIDE {}
 
   void SetTV1(PrecisionType tv1)
   {
@@ -1160,13 +1160,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM ThickCloudsSpectralRule";
   }
 
   ThickCloudsSpectralRule() { }
-  virtual ~ThickCloudsSpectralRule() {}
+  ~ThickCloudsSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1218,13 +1218,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM ThinCloudsSpectralRule";
   }
 
   ThinCloudsSpectralRule() { }
-  virtual ~ThinCloudsSpectralRule() {}
+  ~ThinCloudsSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1279,13 +1279,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM SnowOrIceSpectralRule";
   }
 
   SnowOrIceSpectralRule() { }
-  virtual ~SnowOrIceSpectralRule() {}
+  ~SnowOrIceSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1338,13 +1338,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM WaterOrShadowSpectralRule";
   }
 
   WaterOrShadowSpectralRule() { }
-  virtual ~WaterOrShadowSpectralRule() {}
+  ~WaterOrShadowSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1385,13 +1385,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM PitbogOrGreenhouseSpectralRule";
   }
 
   PitbogOrGreenhouseSpectralRule() { }
-  virtual ~PitbogOrGreenhouseSpectralRule() {}
+  ~PitbogOrGreenhouseSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1443,13 +1443,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM DominantBlueSpectralRule";
   }
 
   DominantBlueSpectralRule() { }
-  virtual ~DominantBlueSpectralRule() {}
+  ~DominantBlueSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1491,13 +1491,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM VegetationSpectralRule";
   }
 
   VegetationSpectralRule() { }
-  virtual ~VegetationSpectralRule() {}
+  ~VegetationSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1551,13 +1551,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM RangelandSpectralRule";
   }
 
   RangelandSpectralRule() { }
-  virtual ~RangelandSpectralRule() {}
+  ~RangelandSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1612,13 +1612,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM BarrenLandOrBuiltUpOrCloudsSpectralRule";
   }
 
   BarrenLandOrBuiltUpOrCloudsSpectralRule() { }
-  virtual ~BarrenLandOrBuiltUpOrCloudsSpectralRule() {}
+  ~BarrenLandOrBuiltUpOrCloudsSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1670,13 +1670,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM FlatResponseBarrenLandOrBuiltUpSpectralRule";
   }
 
   FlatResponseBarrenLandOrBuiltUpSpectralRule() { }
-  virtual ~FlatResponseBarrenLandOrBuiltUpSpectralRule() {}
+  ~FlatResponseBarrenLandOrBuiltUpSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1724,13 +1724,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM ShadowWithBarrenLandSpectralRule";
   }
 
   ShadowWithBarrenLandSpectralRule() { }
-  virtual ~ShadowWithBarrenLandSpectralRule() {}
+  ~ShadowWithBarrenLandSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1771,13 +1771,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM ShadowWithVegetationSpectralRule";
   }
 
   ShadowWithVegetationSpectralRule() { }
-  virtual ~ShadowWithVegetationSpectralRule() {}
+  ~ShadowWithVegetationSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1819,13 +1819,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM ShadowCloudOrSnowSpectralRule";
   }
 
   ShadowCloudOrSnowSpectralRule() { }
-  virtual ~ShadowCloudOrSnowSpectralRule() {}
+  ~ShadowCloudOrSnowSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
@@ -1874,13 +1874,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM WetlandSpectralRule";
   }
 
   WetlandSpectralRule() { }
-  virtual ~WetlandSpectralRule() {}
+  ~WetlandSpectralRule() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
diff --git a/Modules/Radiometry/Indices/include/otbMultiChannelGAndRIndexImageFilter.h b/Modules/Radiometry/Indices/include/otbMultiChannelGAndRIndexImageFilter.h
index 8f0d916b610312c4e682dcb96c21fea2bbfbdef7..14e5b832d875f0b9f145a9aa55c05e12d65073d1 100644
--- a/Modules/Radiometry/Indices/include/otbMultiChannelGAndRIndexImageFilter.h
+++ b/Modules/Radiometry/Indices/include/otbMultiChannelGAndRIndexImageFilter.h
@@ -95,9 +95,9 @@ protected:
   /// Constructor
   MultiChannelGAndRIndexImageFilter() : m_GreenIndex(1), m_RedIndex(2) {};
   /// Destructor
-  virtual ~MultiChannelGAndRIndexImageFilter() {}
+  ~MultiChannelGAndRIndexImageFilter() ITK_OVERRIDE {}
   /// Before generating data, set functor parameters
-  virtual void BeforeThreadedGenerateData()
+  void BeforeThreadedGenerateData() ITK_OVERRIDE
   {
     unsigned int lNbChan = this->GetInput()->GetNumberOfComponentsPerPixel();
     if (m_GreenIndex < 1 || m_RedIndex < 1 ||
@@ -109,7 +109,7 @@ protected:
     this->GetFunctor().SetRedIndex(m_RedIndex);
   }
   /// PrintSelf Method
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     this->Superclass::PrintSelf(os, indent);
     os << indent << "Green index: " << m_GreenIndex << std::endl;
diff --git a/Modules/Radiometry/Indices/include/otbMultiChannelRAndBAndNIRIndexImageFilter.h b/Modules/Radiometry/Indices/include/otbMultiChannelRAndBAndNIRIndexImageFilter.h
index bb1340e33f28a937dd2933a831a50424ba960067..00b6902cab0148e09b012589c6f2db55d790d5c9 100644
--- a/Modules/Radiometry/Indices/include/otbMultiChannelRAndBAndNIRIndexImageFilter.h
+++ b/Modules/Radiometry/Indices/include/otbMultiChannelRAndBAndNIRIndexImageFilter.h
@@ -107,9 +107,9 @@ protected:
   /// Constructor
   MultiChannelRAndBAndNIRIndexImageFilter() : m_RedIndex(3), m_BlueIndex(1), m_NIRIndex(4) {};
   /// Destructor
-  virtual ~MultiChannelRAndBAndNIRIndexImageFilter() {}
+  ~MultiChannelRAndBAndNIRIndexImageFilter() ITK_OVERRIDE {}
   /// Before generating data, set functor parameters
-  virtual void BeforeThreadedGenerateData()
+  void BeforeThreadedGenerateData() ITK_OVERRIDE
   {
     unsigned int lNbChan = this->GetInput()->GetNumberOfComponentsPerPixel();
     if (m_RedIndex < 1 || m_BlueIndex < 1 || m_NIRIndex < 1 ||
@@ -122,7 +122,7 @@ protected:
     this->GetFunctor().SetNIRIndex(m_NIRIndex);
   }
   /// PrintSelf
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     this->Superclass::PrintSelf(os, indent);
     os << indent << "Red  index: " << m_RedIndex << std::endl;
diff --git a/Modules/Radiometry/Indices/include/otbMultiChannelRAndGAndNIRIndexImageFilter.h b/Modules/Radiometry/Indices/include/otbMultiChannelRAndGAndNIRIndexImageFilter.h
index 10c57e1efbd40b668c7a21d678458a8f50b46864..bca9d5a455bcf41c2156e917d001a3f34d9b2022 100644
--- a/Modules/Radiometry/Indices/include/otbMultiChannelRAndGAndNIRIndexImageFilter.h
+++ b/Modules/Radiometry/Indices/include/otbMultiChannelRAndGAndNIRIndexImageFilter.h
@@ -107,9 +107,9 @@ protected:
   /// Constructor
   MultiChannelRAndGAndNIRIndexImageFilter() : m_RedIndex(3), m_GreenIndex(2), m_NIRIndex(4) {};
   /// Destructor
-  virtual ~MultiChannelRAndGAndNIRIndexImageFilter() {}
+  ~MultiChannelRAndGAndNIRIndexImageFilter() ITK_OVERRIDE {}
   /// Before generating data, set functor parameters
-  virtual void BeforeThreadedGenerateData()
+  void BeforeThreadedGenerateData() ITK_OVERRIDE
   {
 
     unsigned int lNbChan = this->GetInput()->GetNumberOfComponentsPerPixel();
@@ -123,7 +123,7 @@ protected:
     this->GetFunctor().SetNIRIndex(m_NIRIndex);
   }
   /// PrintSelf
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     this->Superclass::PrintSelf(os, indent);
     os << indent << "Red  index: " << m_RedIndex << std::endl;
diff --git a/Modules/Radiometry/Indices/include/otbMultiChannelRAndNIRIndexImageFilter.h b/Modules/Radiometry/Indices/include/otbMultiChannelRAndNIRIndexImageFilter.h
index 3b3cc61f46c1fa8ba2632ff005dab5fa615a20f4..4371c9899507008da95ea5a23989f75027026315 100644
--- a/Modules/Radiometry/Indices/include/otbMultiChannelRAndNIRIndexImageFilter.h
+++ b/Modules/Radiometry/Indices/include/otbMultiChannelRAndNIRIndexImageFilter.h
@@ -95,9 +95,9 @@ protected:
   /// Constructor
   MultiChannelRAndNIRIndexImageFilter() : m_RedIndex(3), m_NIRIndex(4) {};
   /// Destructor
-  virtual ~MultiChannelRAndNIRIndexImageFilter() {}
+  ~MultiChannelRAndNIRIndexImageFilter() ITK_OVERRIDE {}
   /// Before generating data, set functor parameters
-  virtual void BeforeThreadedGenerateData()
+  void BeforeThreadedGenerateData() ITK_OVERRIDE
   {
     unsigned int lNbChan = this->GetInput()->GetNumberOfComponentsPerPixel();
     if (m_RedIndex < 1 || m_NIRIndex < 1 ||
@@ -109,7 +109,7 @@ protected:
     this->GetFunctor().SetNIRIndex(m_NIRIndex);
   }
   /// PrintSelf Method
-  void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     this->Superclass::PrintSelf(os, indent);
     os << indent << "Red index: " << m_RedIndex << std::endl;
diff --git a/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.h b/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.h
index 9f7994cb4da0cc615c674d120a681eb4f37132aa..1e63969473091f827b54dc14a00658357efb3fdd 100644
--- a/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.h
+++ b/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.h
@@ -85,7 +85,7 @@ public:
 
   typedef std::vector<PrecisionType>                  OutputType;
 
-  virtual OutputType Evaluate( const DataNodeType& node ) const;
+  OutputType Evaluate( const DataNodeType& node ) const ITK_OVERRIDE;
 
   /** Set/Get methods */
   itkGetConstMacro(NDVIThreshold, PrecisionType);
@@ -114,8 +114,8 @@ public:
 
 protected:
   NDVIDataNodeFeatureFunction();
-  ~NDVIDataNodeFeatureFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~NDVIDataNodeFeatureFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   NDVIDataNodeFeatureFunction(const Self&); //purposely not implemented
diff --git a/Modules/Radiometry/Indices/include/otbRAndBAndNIRIndexImageFilter.h b/Modules/Radiometry/Indices/include/otbRAndBAndNIRIndexImageFilter.h
index 2a42a0815c9abe37f469f7022f5ed93afe6cdd88..ab919197f492509c029a1a5660151340537fc28f 100644
--- a/Modules/Radiometry/Indices/include/otbRAndBAndNIRIndexImageFilter.h
+++ b/Modules/Radiometry/Indices/include/otbRAndBAndNIRIndexImageFilter.h
@@ -71,9 +71,9 @@ public:
 
 protected:
   RAndBAndNIRIndexImageFilter();
-  virtual ~RAndBAndNIRIndexImageFilter() {}
+  ~RAndBAndNIRIndexImageFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   RAndBAndNIRIndexImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Radiometry/Indices/include/otbRAndGAndNIRIndexImageFilter.h b/Modules/Radiometry/Indices/include/otbRAndGAndNIRIndexImageFilter.h
index 65b44f5dfacfcb3c076b14f0c564406a7365e9a8..cd36fcd9cb8b0a9da3c26a1f0323787d79900b64 100644
--- a/Modules/Radiometry/Indices/include/otbRAndGAndNIRIndexImageFilter.h
+++ b/Modules/Radiometry/Indices/include/otbRAndGAndNIRIndexImageFilter.h
@@ -71,9 +71,9 @@ public:
 
 protected:
   RAndGAndNIRIndexImageFilter();
-  virtual ~RAndGAndNIRIndexImageFilter() {}
+  ~RAndGAndNIRIndexImageFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   RAndGAndNIRIndexImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Radiometry/Indices/include/otbRAndNIRIndexImageFilter.h b/Modules/Radiometry/Indices/include/otbRAndNIRIndexImageFilter.h
index 0a61f9e95a1cf5676a86d10d942b863d16a4f103..f987aaae1109449e0d3ce69ea84a1f3326c2ef5c 100644
--- a/Modules/Radiometry/Indices/include/otbRAndNIRIndexImageFilter.h
+++ b/Modules/Radiometry/Indices/include/otbRAndNIRIndexImageFilter.h
@@ -68,9 +68,9 @@ public:
 
 protected:
   RAndNIRIndexImageFilter();
-  virtual ~RAndNIRIndexImageFilter() {}
+  ~RAndNIRIndexImageFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /*  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
                               itk::ThreadIdType threadId );
diff --git a/Modules/Radiometry/Indices/include/otbSoilIndicesFunctor.h b/Modules/Radiometry/Indices/include/otbSoilIndicesFunctor.h
index 68e2d53cbc02a1f176022ce6604cddc5baf283dc..cba94498eec6b2561a4e629aa8462190754e2a08 100644
--- a/Modules/Radiometry/Indices/include/otbSoilIndicesFunctor.h
+++ b/Modules/Radiometry/Indices/include/otbSoilIndicesFunctor.h
@@ -284,7 +284,7 @@ class IR : public GAndRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "IR";
   }
@@ -292,10 +292,10 @@ public:
   /// Constructor
   IR() {}
   /// Desctructor
-  virtual ~IR() {}
+  ~IR() ITK_OVERRIDE {}
   // Operator on r and nir single pixel values
 protected:
-  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed) const
+  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed) const ITK_OVERRIDE
   {
     double dGreen = static_cast<double>(pGreen);
     double dRed = static_cast<double>(pRed);
@@ -327,7 +327,7 @@ class IC : public GAndRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "IC";
   }
@@ -335,10 +335,10 @@ public:
   /// Constructor
   IC() {}
   /// Desctructor
-  virtual ~IC() {}
+  ~IC() ITK_OVERRIDE {}
   // Operator on r and nir single pixel values
 protected:
-  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed) const
+  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed) const ITK_OVERRIDE
   {
     double dGreen = static_cast<double>(pGreen);
     double dRed = static_cast<double>(pRed);
@@ -366,7 +366,7 @@ class IB : public GAndRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "IB";
   }
@@ -374,10 +374,10 @@ public:
   /// Constructor
   IB() {}
   /// Desctructor
-  virtual ~IB() {}
+  ~IB() ITK_OVERRIDE {}
   // Operator on r and nir single pixel values
 protected:
-  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed) const
+  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed) const ITK_OVERRIDE
   {
     double dGreen = static_cast<double>(pGreen);
     double dRed = static_cast<double>(pRed);
@@ -401,7 +401,7 @@ class IB2 : public GAndRAndNirIndexBase<TInput1, TInput2, TInput3, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "IB2";
   }
@@ -409,10 +409,10 @@ public:
   /// Constructor
   IB2() {}
   /// Desctructor
-  virtual ~IB2() {}
+  ~IB2() ITK_OVERRIDE {}
   // Operator on r and nir single pixel values
 protected:
-  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed, const TInput2& pNir) const
+  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed, const TInput2& pNir) const ITK_OVERRIDE
   {
     double dGreen = static_cast<double>(pGreen);
     double dRed = static_cast<double>(pRed);
diff --git a/Modules/Radiometry/Indices/include/otbVegetationIndicesFunctor.h b/Modules/Radiometry/Indices/include/otbVegetationIndicesFunctor.h
index dbf7660fae7baf2f4023684f80ec3ae4d9b3896b..993792fddf8278ff89e34730a19701ba42e65938 100644
--- a/Modules/Radiometry/Indices/include/otbVegetationIndicesFunctor.h
+++ b/Modules/Radiometry/Indices/include/otbVegetationIndicesFunctor.h
@@ -411,7 +411,7 @@ class NDVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 public:
 
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "NDVI";
   }
@@ -419,10 +419,10 @@ public:
   /// Constructor
   NDVI() {}
   /// Desctructor
-  virtual ~NDVI() {}
+  ~NDVI() ITK_OVERRIDE {}
   // Operator on r and nir single pixel values
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dr = static_cast<double>(r);
     double dnir = static_cast<double>(nir);
@@ -451,15 +451,15 @@ class RVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 public:
 
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "RVI";
   }
 
   RVI() {}
-  virtual ~RVI() {}
+  ~RVI() ITK_OVERRIDE {}
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dr = static_cast<double>(r);
     double dnir = static_cast<double>(nir);
@@ -490,13 +490,13 @@ class PVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "PVI";
   }
 
   PVI() : m_A(0.90893), m_B(7.46216), m_Coeff(0.74) {}
-  virtual ~PVI() {}
+  ~PVI() ITK_OVERRIDE {}
   /** Set/Get A and B parameters */
   void SetA(const double A)
   {
@@ -516,7 +516,7 @@ public:
     return (m_B);
   }
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dnir = static_cast<double>(nir);
     double dr = static_cast<double>(r);
@@ -549,13 +549,13 @@ class SAVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 public:
 
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "SAVI";
   }
 
   SAVI() : m_L(0.5) {}
-  virtual ~SAVI() {}
+  ~SAVI() ITK_OVERRIDE {}
 
   /** Set/Get L correction */
   void SetL(const double L)
@@ -568,7 +568,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dnir = static_cast<double>(nir);
     double dr = static_cast<double>(r);
@@ -603,13 +603,13 @@ class TSAVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 public:
 
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "TSAVI";
   }
 
   TSAVI() : m_A(0.7), m_S(0.9), m_X(0.08) {}
-  virtual ~TSAVI() {}
+  ~TSAVI() ITK_OVERRIDE {}
 
   /** Set/Get S and A parameters */
   void SetS(const double S)
@@ -639,7 +639,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dnir = static_cast<double>(nir);
     double dr = static_cast<double>(r);
@@ -676,7 +676,7 @@ class WDVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "WDVI";
   }
@@ -684,7 +684,7 @@ public:
   /// Constructor
   WDVI() : m_S(0.4) {}
   /// Desctructor
-  virtual ~WDVI() {}
+  ~WDVI() ITK_OVERRIDE {}
   // Operator on r and nir single pixel values
 /** Set/Get Slop of soil line */
   void SetS(const double s)
@@ -696,7 +696,7 @@ public:
     return (m_S);
   }
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dr = static_cast<double>(r);
     double dnir = static_cast<double>(nir);
@@ -724,7 +724,7 @@ class MSAVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "MSAVI";
   }
@@ -736,7 +736,7 @@ public:
   {
     m_WDVIfunctor.SetS(m_S);
   }
-  virtual ~MSAVI() {}
+  ~MSAVI() ITK_OVERRIDE {}
 /** Set/Get Slop of soil line */
   void SetS(const double s)
   {
@@ -757,7 +757,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dnir = static_cast<double>(nir);
     double dr = static_cast<double>(r);
@@ -799,16 +799,16 @@ class MSAVI2 : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "MSAVI2";
   }
 
   MSAVI2() {}
-  virtual ~MSAVI2() {}
+  ~MSAVI2() ITK_OVERRIDE {}
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dnir = static_cast<double>(nir);
     double dr = static_cast<double>(r);
@@ -837,16 +837,16 @@ class GEMI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "GEMI";
   }
 
   GEMI() {}
-  virtual ~GEMI() {}
+  ~GEMI() ITK_OVERRIDE {}
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dnir = static_cast<double>(nir);
     double dr = static_cast<double>(r);
@@ -891,13 +891,13 @@ class AVI : public RAndGAndNIRIndexBase<TInput1, TInput2, TInput3, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "AVI";
   }
 
   AVI() : m_LambdaG(560.), m_LambdaR(660.), m_LambdaNir(830.) {}
-  virtual ~AVI() {}
+  ~AVI() ITK_OVERRIDE {}
 /** Set/Get Lambda red parameter*/
   void SetLambdaR(const double lr)
   {
@@ -926,7 +926,7 @@ public:
     return (m_LambdaNir);
   }
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& g, const TInput3& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& g, const TInput3& nir) const ITK_OVERRIDE
   {
     double dr = static_cast<double>(r);
     double dg = static_cast<double>(g);
@@ -986,13 +986,13 @@ class ARVI : public RAndBAndNIRIndexBase<TInput1, TInput2, TInput3, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "ARVI";
   }
 
   ARVI() : m_Gamma(0.5) {}
-  virtual ~ARVI() {}
+  ~ARVI() ITK_OVERRIDE {}
 
   /** Set/Get Gamma parameter */
   void SetGamma(const double gamma)
@@ -1005,7 +1005,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& b, const TInput3& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& b, const TInput3& nir) const ITK_OVERRIDE
   {
     double dr = static_cast<double>(r);
     double db = static_cast<double>(b);
@@ -1040,13 +1040,13 @@ class TSARVI : public RAndBAndNIRIndexBase<TInput1, TInput2, TInput3, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "TSARVI";
   }
 
   TSARVI() : m_A(0.0), m_B(0.0), m_X(0.08), m_Gamma(0.5) {}
-  virtual ~TSARVI() {}
+  ~TSARVI() ITK_OVERRIDE {}
 
   /** Set/Get A and B parameters */
   void SetA(const double A)
@@ -1085,7 +1085,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& b, const TInput3& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& b, const TInput3& nir) const ITK_OVERRIDE
   {
     double dr = static_cast<double>(r);
     double db = static_cast<double>(b);
@@ -1128,13 +1128,13 @@ class EVI : public RAndBAndNIRIndexBase<TInput1, TInput2, TInput3, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "EVI";
   }
 
   EVI() : m_G(2.5), m_C1(6.0), m_C2(7.5), m_L(1.0) {}
-  virtual ~EVI() {}
+  ~EVI() ITK_OVERRIDE {}
 /** Set/Get G parameter */
   void SetG(const double g)
   {
@@ -1172,7 +1172,7 @@ public:
     return (m_L);
   }
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& b, const TInput3& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& b, const TInput3& nir) const ITK_OVERRIDE
   {
     double dr = static_cast<double>(r);
     double db = static_cast<double>(b);
@@ -1215,16 +1215,16 @@ class IPVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "IPVI";
   }
 
   IPVI() {}
-  virtual ~IPVI() {}
+  ~IPVI() ITK_OVERRIDE {}
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dr = static_cast<double>(r);
     double dnir = static_cast<double>(nir);
@@ -1254,14 +1254,14 @@ class TNDVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "TNDVI";
   }
 
   typedef NDVI<TInput1, TInput2, TOutput> NDVIFunctorType;
   TNDVI() {}
-  virtual ~TNDVI() {}
+  ~TNDVI() ITK_OVERRIDE {}
 
   NDVIFunctorType GetNDVI(void) const
   {
@@ -1269,7 +1269,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dval = this->GetNDVI() (r, nir) + 0.5;
     if (dval < 0)
@@ -1306,14 +1306,14 @@ class LAIFromNDVILogarithmic : public RAndNIRIndexBase<TInput1, TInput2, TOutput
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LAIFromNDVILogarithmic";
   }
 
   typedef NDVI<TInput1, TInput2, TOutput> NDVIFunctorType;
   LAIFromNDVILogarithmic() : m_NdviSoil(0.10), m_NdviInf(0.89), m_ExtinctionCoefficient(0.71) {}
-  virtual ~LAIFromNDVILogarithmic() {}
+  ~LAIFromNDVILogarithmic() ITK_OVERRIDE {}
 
   NDVIFunctorType GetNDVI(void) const
   {
@@ -1348,7 +1348,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
     double dval = this->GetNDVI() (r, nir);
     if (dval < 0)
@@ -1392,14 +1392,14 @@ class LAIFromReflectancesLinear : public RAndNIRIndexBase<TInput1, TInput2, TOut
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LAIFromReflectancesLinear";
   }
 
   typedef NDVI<TInput1, TInput2, TOutput> NDVIFunctorType;
   LAIFromReflectancesLinear() : m_RedCoef(-17.91), m_NirCoef(12.26) {}
-  virtual ~LAIFromReflectancesLinear() {}
+  ~LAIFromReflectancesLinear() ITK_OVERRIDE {}
 
   NDVIFunctorType GetReflectances(void) const
   {
@@ -1425,7 +1425,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
   {
       return (static_cast<TOutput>(m_RedCoef*r+m_NirCoef*nir));
   }
@@ -1461,7 +1461,7 @@ private:
   public:
 
     /** Return the index name */
-    virtual std::string GetName() const
+    std::string GetName() const ITK_OVERRIDE
     {
       return "LAIFromNDVIFormosat2Functor";
     }
@@ -1469,10 +1469,10 @@ private:
     /// Constructor
     LAIFromNDVIFormosat2Functor() {}
     /// Desctructor
-    virtual ~LAIFromNDVIFormosat2Functor() {}
+    ~LAIFromNDVIFormosat2Functor() ITK_OVERRIDE {}
     // Operator on r and nir single pixel values
   protected:
-    inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const
+    inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const ITK_OVERRIDE
     {
     double a = 0.1519;
     double b = 3.9443;
diff --git a/Modules/Radiometry/Indices/include/otbWaterIndicesFunctor.h b/Modules/Radiometry/Indices/include/otbWaterIndicesFunctor.h
index 9ace91314671534cc1d5f6fa8bdaf99c6bc2dd50..14c981162fe391121f2618fac4ae3adb1ff8e5a3 100644
--- a/Modules/Radiometry/Indices/include/otbWaterIndicesFunctor.h
+++ b/Modules/Radiometry/Indices/include/otbWaterIndicesFunctor.h
@@ -123,15 +123,15 @@ class WaterIndexFunctor : public WaterIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "WaterIndexFunctor";
   }
 
   WaterIndexFunctor() {}
-  virtual ~WaterIndexFunctor() {}
+  ~WaterIndexFunctor() ITK_OVERRIDE {}
 protected:
-  inline TOutput Evaluate(const TInput1& id1, const TInput2& id2) const
+  inline TOutput Evaluate(const TInput1& id1, const TInput2& id2) const ITK_OVERRIDE
   {
     double dindex1 = static_cast<double>(id1);
     double dindex2 = static_cast<double>(id2);
@@ -199,7 +199,7 @@ class NDWI : public WaterIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "NDWI";
   }
@@ -208,7 +208,7 @@ public:
   /// Constructor
   NDWI() {}
   /// Desctructor
-  virtual ~NDWI() {}
+  ~NDWI() ITK_OVERRIDE {}
   WIFunctorType GetWIFunctor(void) const
   {
     return (m_WIFunctor);
@@ -260,7 +260,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& nir, const TInput2& mir) const
+  inline TOutput Evaluate(const TInput1& nir, const TInput2& mir) const ITK_OVERRIDE
   {
     return (static_cast<TOutput>(GetWIFunctor() (nir, mir)));
   }
@@ -284,7 +284,7 @@ class NDWI2 : public WaterIndexBase<TInput1, TInput2, TOutput>
 {
 public:
   /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "NDWI2";
   }
@@ -293,7 +293,7 @@ public:
   /// Constructor
   NDWI2() {}
   /// Desctructor
-  virtual ~NDWI2() {}
+  ~NDWI2() ITK_OVERRIDE {}
   WIFunctorType GetWIFunctor(void) const
   {
     return (m_WIFunctor);
@@ -345,7 +345,7 @@ public:
   }
 
 protected:
-  inline TOutput Evaluate(const TInput1& g, const TInput2& nir) const
+  inline TOutput Evaluate(const TInput1& g, const TInput2& nir) const ITK_OVERRIDE
   {
     return (static_cast<TOutput>(GetWIFunctor() (g, nir)));
   }
@@ -647,7 +647,7 @@ public:
     reference[0] = 136.0; reference[1] = 132.0; reference[2] = 47.0; reference[3] = 24.0;
     this->SetReferenceWaterPixel(reference);
   }
-  virtual ~WaterSqrtSpectralAngleFunctor() {}
+  ~WaterSqrtSpectralAngleFunctor() ITK_OVERRIDE {}
 
   /** Set Reference Pixel */
   void SetReferenceWaterPixel(InputVectorPixelType ref)
@@ -739,7 +739,7 @@ public:
   }
 
 protected:
-  inline TOutputPixel Evaluate(const TInputVectorPixel& inPix) const
+  inline TOutputPixel Evaluate(const TInputVectorPixel& inPix) const ITK_OVERRIDE
   {
     return static_cast<TOutputPixel>(Superclass::Evaluate(inPix));
   }
diff --git a/Modules/Radiometry/Indices/include/otbWaterSqrtSpectralAngleImageFilter.h b/Modules/Radiometry/Indices/include/otbWaterSqrtSpectralAngleImageFilter.h
index f0d7ad4a7270d8e00e6c623af19ff596b0727d8a..74b0565019070609a686c20f7c492618c65ca3eb 100644
--- a/Modules/Radiometry/Indices/include/otbWaterSqrtSpectralAngleImageFilter.h
+++ b/Modules/Radiometry/Indices/include/otbWaterSqrtSpectralAngleImageFilter.h
@@ -70,7 +70,7 @@ public:
 
 protected:
   WaterSqrtSpectralAngleImageFilter() {}
-  virtual ~WaterSqrtSpectralAngleImageFilter() {}
+  ~WaterSqrtSpectralAngleImageFilter() ITK_OVERRIDE {}
 
 private:
   WaterSqrtSpectralAngleImageFilter(Self &); // purposely not implemented
diff --git a/Modules/Radiometry/LandSatClassifier/include/otbLandsatTMSpectralRuleBasedClassifier.h b/Modules/Radiometry/LandSatClassifier/include/otbLandsatTMSpectralRuleBasedClassifier.h
index 65cf37d303794b6c1d61d9cf9421e72580d4680d..7a36b23b2f4e83b804a54b04fa25f9d9ed6038fe 100644
--- a/Modules/Radiometry/LandSatClassifier/include/otbLandsatTMSpectralRuleBasedClassifier.h
+++ b/Modules/Radiometry/LandSatClassifier/include/otbLandsatTMSpectralRuleBasedClassifier.h
@@ -180,13 +180,13 @@ public:
   typedef bool OutputPixelType;
 
     /** Return the index name */
-  virtual std::string GetName() const
+  std::string GetName() const ITK_OVERRIDE
   {
     return "LandsatTM SpectralRuleBasedClassifier";
   }
 
   SpectralRuleBasedClassifier() { }
-  virtual ~SpectralRuleBasedClassifier() {}
+  ~SpectralRuleBasedClassifier() ITK_OVERRIDE {}
 
   inline TOutput operator ()(const TInput& inputPixel)
   {
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbAeronetData.h b/Modules/Radiometry/OpticalCalibration/include/otbAeronetData.h
index 06e454d9ad84cc891c998704e7b0eec9e47fe4a1..853b1e86d4952c20914ba8dc6ae6fcfdf9607a11 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbAeronetData.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbAeronetData.h
@@ -83,9 +83,9 @@ protected:
   /** Constructor */
   AeronetData();
   /** Destructor */
-  ~AeronetData() {}
+  ~AeronetData() ITK_OVERRIDE {}
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** Angstrom coefficient */
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbAeronetFileReader.h b/Modules/Radiometry/OpticalCalibration/include/otbAeronetFileReader.h
index bb1798a4adc5dcc7d237121fb1a831a736218bd8..b52dd758301931a43cd36c59c841eb60ee9210be 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbAeronetFileReader.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbAeronetFileReader.h
@@ -121,12 +121,12 @@ protected:
   /** Constructor */
   AeronetFileReader();
   /** Destructor */
-  virtual ~AeronetFileReader();
+  ~AeronetFileReader() ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbAtmosphericCorrectionParameters.h b/Modules/Radiometry/OpticalCalibration/include/otbAtmosphericCorrectionParameters.h
index 7c67a4268ec0d4d3db893ca12f3844aa8ece538b..1fe4f4e1949b9f296af2c1ecc8b4003856b9adec 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbAtmosphericCorrectionParameters.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbAtmosphericCorrectionParameters.h
@@ -133,12 +133,12 @@ public:
   /** Constructor */
   AtmosphericCorrectionParameters();
   /** Destructor */
-  ~AtmosphericCorrectionParameters() {}
+  ~AtmosphericCorrectionParameters() ITK_OVERRIDE {}
 
 protected:
 
   /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   AtmosphericCorrectionParameters(const Self &); //purposely not implemented
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbAtmosphericRadiativeTerms.h b/Modules/Radiometry/OpticalCalibration/include/otbAtmosphericRadiativeTerms.h
index 5cc401b58fed2ac147cd93ced33fbcc04d5a882d..bc97817b0ca1a7f833fe1e6a5ed4eac9612489e2 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbAtmosphericRadiativeTerms.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbAtmosphericRadiativeTerms.h
@@ -115,9 +115,9 @@ protected:
   /** Constructor */
   AtmosphericRadiativeTermsSingleChannel();
   /** Destructor */
-  ~AtmosphericRadiativeTermsSingleChannel() {}
+  ~AtmosphericRadiativeTermsSingleChannel() ITK_OVERRIDE {}
   /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   AtmosphericRadiativeTermsSingleChannel(const Self &); //purposely not implemented
@@ -262,9 +262,9 @@ protected:
   /** Constructor */
   AtmosphericRadiativeTerms();
   /** Destructor */
-  ~AtmosphericRadiativeTerms() {}
+  ~AtmosphericRadiativeTerms() ITK_OVERRIDE {}
   /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   AtmosphericRadiativeTerms(const Self &); //purposely not implemented
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbImageMetadataCorrectionParameters.h b/Modules/Radiometry/OpticalCalibration/include/otbImageMetadataCorrectionParameters.h
index 5870366819f5c30749ad07081be5792cff7117b1..e967db513b28b3a46d9127ad65f374d38760778b 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbImageMetadataCorrectionParameters.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbImageMetadataCorrectionParameters.h
@@ -141,12 +141,12 @@ public:
   /** Constructor */
   ImageMetadataCorrectionParameters();
   /** Destructor */
-  ~ImageMetadataCorrectionParameters() {}
+  ~ImageMetadataCorrectionParameters() ITK_OVERRIDE {}
 
 protected:
 
   /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageMetadataCorrectionParameters(const Self &); //purposely not implemented
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbImageToLuminanceImageFilter.h b/Modules/Radiometry/OpticalCalibration/include/otbImageToLuminanceImageFilter.h
index 1772f930b5864724a350114ed33d9fe886d07006..f43cfa2b814a21c1027938eaf5b33e48b5e2f1e9 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbImageToLuminanceImageFilter.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbImageToLuminanceImageFilter.h
@@ -171,10 +171,10 @@ protected:
     };
 
   /** Destructor */
-  virtual ~ImageToLuminanceImageFilter() {}
+  ~ImageToLuminanceImageFilter() ITK_OVERRIDE {}
 
   /** Update the functor list and input parameters */
-  virtual void BeforeThreadedGenerateData(void)
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE
   {
     OpticalImageMetadataInterface::Pointer imageMetadataInterface = OpticalImageMetadataInterfaceFactory::CreateIMI(
       this->GetInput()->GetMetaDataDictionary());
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbImageToReflectanceImageFilter.h b/Modules/Radiometry/OpticalCalibration/include/otbImageToReflectanceImageFilter.h
index 28997f1ab1c2dd631ce183d83a31be6553c9c818..d03ed1977c85eabf72cc23f64b1e7e45a5fa8e2b 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbImageToReflectanceImageFilter.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbImageToReflectanceImageFilter.h
@@ -251,10 +251,10 @@ protected:
     };
 
   /** Destructor */
-  virtual ~ImageToReflectanceImageFilter() {}
+  ~ImageToReflectanceImageFilter() ITK_OVERRIDE {}
 
   /** Update the functor list and input parameters */
-  virtual void BeforeThreadedGenerateData(void)
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE
   {
 
     OpticalImageMetadataInterface::Pointer imageMetadataInterface = OpticalImageMetadataInterfaceFactory::CreateIMI(
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbLuminanceToImageImageFilter.h b/Modules/Radiometry/OpticalCalibration/include/otbLuminanceToImageImageFilter.h
index 26121b7d89319c58fc77b2f71a549ff3930a1eb1..c5e3df0232e76996f6b335119a0ac9917f6fa499 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbLuminanceToImageImageFilter.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbLuminanceToImageImageFilter.h
@@ -172,10 +172,10 @@ protected:
     };
 
   /** Destructor */
-  virtual ~LuminanceToImageImageFilter() {}
+  ~LuminanceToImageImageFilter() ITK_OVERRIDE {}
 
   /** Update the functor list and input parameters */
-  virtual void BeforeThreadedGenerateData(void)
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE
   {
     OpticalImageMetadataInterface::Pointer imageMetadataInterface = OpticalImageMetadataInterfaceFactory::CreateIMI(
       this->GetInput()->GetMetaDataDictionary());
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbLuminanceToReflectanceImageFilter.h b/Modules/Radiometry/OpticalCalibration/include/otbLuminanceToReflectanceImageFilter.h
index 5f7a597463dea613d7fbccee62f4d46dfc41b63b..1d54a0f021f6b8b30716cc964b764daa062be04f 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbLuminanceToReflectanceImageFilter.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbLuminanceToReflectanceImageFilter.h
@@ -247,10 +247,10 @@ protected:
     };
 
   /** Destructor */
-  virtual ~LuminanceToReflectanceImageFilter() {}
+  ~LuminanceToReflectanceImageFilter() ITK_OVERRIDE {}
 
   /** Update the functor list and input parameters */
-  virtual void BeforeThreadedGenerateData(void)
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE
   {
     OpticalImageMetadataInterface::Pointer imageMetadataInterface = OpticalImageMetadataInterfaceFactory::CreateIMI(
       this->GetInput()->GetMetaDataDictionary());
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToImageImageFilter.h b/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToImageImageFilter.h
index af68323c92696276dd73a705542efb88f0da3bf0..df5e31227493b68a4d56b46970dd9d37380b24e8 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToImageImageFilter.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToImageImageFilter.h
@@ -237,10 +237,10 @@ protected:
     };
 
   /** Destructor */
-  virtual ~ReflectanceToImageImageFilter() {}
+  ~ReflectanceToImageImageFilter() ITK_OVERRIDE {}
 
   /** Update the functor list and input parameters */
-  virtual void BeforeThreadedGenerateData(void)
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE
   {
 
     OpticalImageMetadataInterface::Pointer imageMetadataInterface = OpticalImageMetadataInterfaceFactory::CreateIMI(
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToLuminanceImageFilter.h b/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToLuminanceImageFilter.h
index 99409bb1f7b7f07c22aa50aac03bf87181deee16..2f137bf24370984c4f049f3ed7182a6d339f61f4 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToLuminanceImageFilter.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToLuminanceImageFilter.h
@@ -231,10 +231,10 @@ protected:
     };
 
   /** Destructor */
-  virtual ~ReflectanceToLuminanceImageFilter() {}
+  ~ReflectanceToLuminanceImageFilter() ITK_OVERRIDE {}
 
   /** Update the functor list and input parameters */
-  virtual void BeforeThreadedGenerateData(void)
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE
   {
     OpticalImageMetadataInterface::Pointer imageMetadataInterface = OpticalImageMetadataInterfaceFactory::CreateIMI(
       this->GetInput()->GetMetaDataDictionary());
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToSurfaceReflectanceImageFilter.h b/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToSurfaceReflectanceImageFilter.h
index 7c86e84013ab6c998e9a64d3bee76c18b374ac74..3c3b82347710beb204be1473878283a8c04d0aa3 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToSurfaceReflectanceImageFilter.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToSurfaceReflectanceImageFilter.h
@@ -240,18 +240,18 @@ protected:
   /** Constructor */
   ReflectanceToSurfaceReflectanceImageFilter();
   /** Destructor */
-  virtual ~ReflectanceToSurfaceReflectanceImageFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~ReflectanceToSurfaceReflectanceImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Initialize the parameters of the functor before the threads run. */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /** Fill AtmosphericRadiativeTerms using image metadata*/
   void UpdateAtmosphericRadiativeTerms();
   /** Update Functors parameters */
   void UpdateFunctors();
 
   /** If modified, we need to compute the functor parameters again */
-  virtual void Modified() const;
+  void Modified() const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbSpectralSensitivityReader.h b/Modules/Radiometry/OpticalCalibration/include/otbSpectralSensitivityReader.h
index 2f5fe34b8a3feddb5b7d6ba3d22adf96a41ce272..2ff05768510e5011d106622f8315910966b52a35 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbSpectralSensitivityReader.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbSpectralSensitivityReader.h
@@ -75,16 +75,16 @@ public:
 
 protected:
   SpectralSensitivityReader();
-  virtual ~SpectralSensitivityReader();
+  ~SpectralSensitivityReader() ITK_OVERRIDE;
 
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Find the filename using image metadata */
   void FindFileName();
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Struct use to remove multiple spaces in file */
   struct BothAre
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbSurfaceAdjacencyEffectCorrectionSchemeFilter.h b/Modules/Radiometry/OpticalCalibration/include/otbSurfaceAdjacencyEffectCorrectionSchemeFilter.h
index c73c10b66694d71bdf201fa184b5fdc4f946b254..9abbff89b528fc256a7a507dc5fcf55fb9dae125 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbSurfaceAdjacencyEffectCorrectionSchemeFilter.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbSurfaceAdjacencyEffectCorrectionSchemeFilter.h
@@ -267,11 +267,11 @@ public:
 
 protected:
   SurfaceAdjacencyEffectCorrectionSchemeFilter();
-  virtual ~SurfaceAdjacencyEffectCorrectionSchemeFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~SurfaceAdjacencyEffectCorrectionSchemeFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Initialize the parameters of the functor before the threads run. */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Fill AtmosphericRadiativeTerms using image metadata*/
   void UpdateAtmosphericRadiativeTerms();
@@ -280,7 +280,7 @@ protected:
   void UpdateFunctors();
 
   /** If modified, we need to compute the functor parameters again */
-  virtual void Modified() const;
+  void Modified() const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbWavelengthSpectralBands.h b/Modules/Radiometry/OpticalCalibration/include/otbWavelengthSpectralBands.h
index 67a642e0ed32eca98daf8a3141aea0b79c73c7e3..83840afecec1abddf495dc59c176d50c8660af63 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbWavelengthSpectralBands.h
+++ b/Modules/Radiometry/OpticalCalibration/include/otbWavelengthSpectralBands.h
@@ -59,10 +59,10 @@ protected:
   /** Constructor */
   WavelengthSpectralBands();
   /** Destructor */
-  ~WavelengthSpectralBands() {}
+  ~WavelengthSpectralBands() ITK_OVERRIDE {}
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   WavelengthSpectralBands(const Self &); //purposely not implemented
diff --git a/Modules/Radiometry/SARCalibration/include/otbSarBrightnessFunction.h b/Modules/Radiometry/SARCalibration/include/otbSarBrightnessFunction.h
index 10e1410f23df3883a243c624d1f3ea5ba3436646..f205eac3e6b61979d44ad694dbdc868d0285f1aa 100644
--- a/Modules/Radiometry/SARCalibration/include/otbSarBrightnessFunction.h
+++ b/Modules/Radiometry/SARCalibration/include/otbSarBrightnessFunction.h
@@ -82,17 +82,17 @@ public:
   typedef typename ParametricFunctionType::ConstPointer               ParametricFunctionConstPointer;
 
   /** Evalulate the function at specified index */
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
-  virtual OutputType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -103,7 +103,7 @@ public:
    * \warning this method caches BufferedRegion information.
    * If the BufferedRegion has changed, user must call
    * SetInputImage again to update cached values. */
-  virtual void SetInputImage( const InputImageType * ptr );
+  void SetInputImage( const InputImageType * ptr ) ITK_OVERRIDE;
 
 
   /** Get/Set the Scale value */
@@ -137,8 +137,8 @@ public:
 
 protected:
   SarBrightnessFunction();
-  virtual ~SarBrightnessFunction(){}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~SarBrightnessFunction() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SarBrightnessFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Radiometry/SARCalibration/include/otbSarBrightnessToImageFilter.h b/Modules/Radiometry/SARCalibration/include/otbSarBrightnessToImageFilter.h
index 8250dd52994993f2ef21310a714e1efb17ce7405..9542eba8392e6fd3b679662efb5ccfed60af8288 100644
--- a/Modules/Radiometry/SARCalibration/include/otbSarBrightnessToImageFilter.h
+++ b/Modules/Radiometry/SARCalibration/include/otbSarBrightnessToImageFilter.h
@@ -83,10 +83,10 @@ public:
 
 protected:
   SarBrightnessToImageFilter();
-  virtual ~SarBrightnessToImageFilter() {}
+  ~SarBrightnessToImageFilter() ITK_OVERRIDE {}
 
   /** Update the function list and input parameters*/
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 private:
   SarBrightnessToImageFilter(const Self &); //purposely not implemented
   void operator =(const Self&); //purposely not implemented
diff --git a/Modules/Radiometry/SARCalibration/include/otbSarParametricMapFunction.h b/Modules/Radiometry/SARCalibration/include/otbSarParametricMapFunction.h
index 47be340fc5f526c6881774ac603a43dd56d1204e..d6d117d3e7badb0e0cafe4cffbb73ef5a7b7f8d7 100644
--- a/Modules/Radiometry/SARCalibration/include/otbSarParametricMapFunction.h
+++ b/Modules/Radiometry/SARCalibration/include/otbSarParametricMapFunction.h
@@ -76,10 +76,10 @@ public:
   typedef typename itk::NumericTraits<InputPixelType>::ScalarRealType                       RealType;
 
   /** Evaluate the function at specific positions */
-  virtual RealType Evaluate(const PointType& point) const;
+  RealType Evaluate(const PointType& point) const ITK_OVERRIDE;
 
   /** Evalulate the function at specified index */
-  virtual RealType EvaluateAtIndex(const IndexType& index) const
+  RealType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE
   {
     PointType point;
     point[0] = static_cast<typename PointType::ValueType>(index[0]);
@@ -87,8 +87,8 @@ public:
     return this->Evaluate(point);
   }
 
-  virtual RealType EvaluateAtContinuousIndex(
-    const ContinuousIndexType& cindex) const
+  RealType EvaluateAtContinuousIndex(
+    const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -124,8 +124,8 @@ public:
 
 protected:
   SarParametricMapFunction();
-  virtual ~SarParametricMapFunction(){}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~SarParametricMapFunction() ITK_OVERRIDE{}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   SarParametricMapFunction(const Self &);  //purposely not implemented
diff --git a/Modules/Radiometry/SARCalibration/include/otbSarRadiometricCalibrationFunction.h b/Modules/Radiometry/SARCalibration/include/otbSarRadiometricCalibrationFunction.h
index 1331f740d5e4991b9d77d540019f003922baf2a6..3dbeac8f70cec41b00c968df678e57959c95f79e 100644
--- a/Modules/Radiometry/SARCalibration/include/otbSarRadiometricCalibrationFunction.h
+++ b/Modules/Radiometry/SARCalibration/include/otbSarRadiometricCalibrationFunction.h
@@ -79,17 +79,17 @@ public:
   typedef typename ParametricFunctionType::ConstPointer               ParametricFunctionConstPointer;
 
   /** Evalulate the function at specified index */
-  virtual OutputType EvaluateAtIndex(const IndexType& index) const;
+  OutputType EvaluateAtIndex(const IndexType& index) const ITK_OVERRIDE;
 
   /** Evaluate the function at non-integer positions */
-  virtual OutputType Evaluate(const PointType& point) const
+  OutputType Evaluate(const PointType& point) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertPointToNearestIndex(point, index);
     return this->EvaluateAtIndex(index);
   }
 
-  virtual OutputType EvaluateAtContinuousIndex(const ContinuousIndexType& cindex) const
+  OutputType EvaluateAtContinuousIndex(const ContinuousIndexType& cindex) const ITK_OVERRIDE
   {
     IndexType index;
     this->ConvertContinuousIndexToNearestIndex(cindex, index);
@@ -100,7 +100,7 @@ public:
    * \warning this method caches BufferedRegion information.
    * If the BufferedRegion has changed, user must call
    * SetInputImage again to update cached values. */
-  virtual void SetInputImage( const InputImageType * ptr );
+  void SetInputImage( const InputImageType * ptr ) ITK_OVERRIDE;
 
 
   /** Get/Set the Scale value */
@@ -169,10 +169,10 @@ protected:
   SarRadiometricCalibrationFunction();
 
   /** default, empty, virtual dtor */
-  virtual ~SarRadiometricCalibrationFunction(){}
+  ~SarRadiometricCalibrationFunction() ITK_OVERRIDE{}
 
   /** print method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Flags to indiciate if these values needs to be applied in calibration*/
 
diff --git a/Modules/Radiometry/SARCalibration/include/otbSarRadiometricCalibrationToImageFilter.h b/Modules/Radiometry/SARCalibration/include/otbSarRadiometricCalibrationToImageFilter.h
index 523cdbccb1a8a4d3c37938df7435d87e696c7820..8940d382a7e2644119c0ea2c49fcf16f4266dd4c 100644
--- a/Modules/Radiometry/SARCalibration/include/otbSarRadiometricCalibrationToImageFilter.h
+++ b/Modules/Radiometry/SARCalibration/include/otbSarRadiometricCalibrationToImageFilter.h
@@ -111,13 +111,13 @@ protected:
   SarRadiometricCalibrationToImageFilter();
 
   /** Empty, default virtual dtor */
-  virtual ~SarRadiometricCalibrationToImageFilter() {}
+  ~SarRadiometricCalibrationToImageFilter() ITK_OVERRIDE {}
 
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Update the function list and input parameters*/
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Radiometry/SARCalibration/include/otbTerraSarBrightnessImageFilter.h b/Modules/Radiometry/SARCalibration/include/otbTerraSarBrightnessImageFilter.h
index 05984c7e7e8ea7c2efb8f575e1528ca01c08bce6..cd7869f729aefc51198e7c16750c8b366b94abc0 100644
--- a/Modules/Radiometry/SARCalibration/include/otbTerraSarBrightnessImageFilter.h
+++ b/Modules/Radiometry/SARCalibration/include/otbTerraSarBrightnessImageFilter.h
@@ -143,10 +143,10 @@ protected:
   /** Constructor */
   TerraSarBrightnessImageFilter(){};
   /** Destructor */
-  virtual ~TerraSarBrightnessImageFilter() {}
+  ~TerraSarBrightnessImageFilter() ITK_OVERRIDE {}
 
   /** Initialize the functor vector */
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
 private:
   TerraSarBrightnessImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Radiometry/Simulation/include/otbAtmosphericEffects.h b/Modules/Radiometry/Simulation/include/otbAtmosphericEffects.h
index 1116fc7f88982b33200cbc3de4feb116be7b1aaf..06399b4dbbb470fa495698fc31c1d74b71ea1c18 100644
--- a/Modules/Radiometry/Simulation/include/otbAtmosphericEffects.h
+++ b/Modules/Radiometry/Simulation/include/otbAtmosphericEffects.h
@@ -93,7 +93,7 @@ class AtmosphericEffects
            /** Constructor from a ASCII file */
            //AtmosphericEffects( const std::string & filename );
            /** Destructor */
-           virtual ~AtmosphericEffects() {};
+           ~AtmosphericEffects() ITK_OVERRIDE {};
            /** PrintSelf method */
            //void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Modules/Radiometry/Simulation/include/otbImageSimulationMethod.h b/Modules/Radiometry/Simulation/include/otbImageSimulationMethod.h
index 5fe703e2c2a611d3c4300905215cd6291c7c33b3..e5012856544d241954ea03cb90c38732eae20f4f 100644
--- a/Modules/Radiometry/Simulation/include/otbImageSimulationMethod.h
+++ b/Modules/Radiometry/Simulation/include/otbImageSimulationMethod.h
@@ -163,13 +163,13 @@ public:
 
 protected:
   ImageSimulationMethod();
-  virtual ~ImageSimulationMethod()
+  ~ImageSimulationMethod() ITK_OVERRIDE
   {
   }
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   //    virtual void GenerateData();
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
   ImageSimulationMethod(const Self &); //purposely not implemented
diff --git a/Modules/Radiometry/Simulation/include/otbLabelMapToSimulatedImageFilter.h b/Modules/Radiometry/Simulation/include/otbLabelMapToSimulatedImageFilter.h
index 91801a97be931924af28e1bd52acb8a01d06e82a..9c2e663cb9f4033d64647163e7319cae6bcd6dc4 100644
--- a/Modules/Radiometry/Simulation/include/otbLabelMapToSimulatedImageFilter.h
+++ b/Modules/Radiometry/Simulation/include/otbLabelMapToSimulatedImageFilter.h
@@ -117,12 +117,12 @@ public:
 
 protected:
    LabelMapToSimulatedImageFilter();
-   virtual ~LabelMapToSimulatedImageFilter() {}
-   void PrintSelf(std::ostream& os, itk::Indent indent) const;
+   ~LabelMapToSimulatedImageFilter() ITK_OVERRIDE {}
+   void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-   virtual void BeforeThreadedGenerateData();
-   virtual void ThreadedProcessLabelObject( LabelObjectType * labelObject );
-   virtual void GenerateOutputInformation();
+   void BeforeThreadedGenerateData() ITK_OVERRIDE;
+   void ThreadedProcessLabelObject( LabelObjectType * labelObject ) ITK_OVERRIDE;
+   void GenerateOutputInformation() ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Radiometry/Simulation/include/otbLabelToProSailParameters.h b/Modules/Radiometry/Simulation/include/otbLabelToProSailParameters.h
index 7c1ad1ac392e34500cb3e576d49afa2ce6e2c0a2..9899671e7594657553311bd6273bcbc32998dbc5 100644
--- a/Modules/Radiometry/Simulation/include/otbLabelToProSailParameters.h
+++ b/Modules/Radiometry/Simulation/include/otbLabelToProSailParameters.h
@@ -83,11 +83,11 @@ public:
   // virtual const ParametersType & GetStep1Parameters();
   //virtual const ParametersType & GetStep2Parameters();
 
-   virtual void GenerateData();
+   void GenerateData() ITK_OVERRIDE;
 
 protected:
    LabelToProSailParameters();
-   virtual ~LabelToProSailParameters() {}
+   ~LabelToProSailParameters() ITK_OVERRIDE {}
 
 
 private:
diff --git a/Modules/Radiometry/Simulation/include/otbLabelToSimulationParametersBase.h b/Modules/Radiometry/Simulation/include/otbLabelToSimulationParametersBase.h
index 1bc5444ab1b22c20e2f76a72c92fa30573ff2c8f..45e00b2ba31ece8c61f39bc9851556a82ce9979e 100644
--- a/Modules/Radiometry/Simulation/include/otbLabelToSimulationParametersBase.h
+++ b/Modules/Radiometry/Simulation/include/otbLabelToSimulationParametersBase.h
@@ -90,7 +90,7 @@ public:
 
 protected:
    LabelToSimulationParametersBase(){};
-   virtual ~LabelToSimulationParametersBase() {}
+   ~LabelToSimulationParametersBase() ITK_OVERRIDE {}
 
 
 private:
diff --git a/Modules/Radiometry/Simulation/include/otbLeafParameters.h b/Modules/Radiometry/Simulation/include/otbLeafParameters.h
index 0e6eb212e11bb8e37b0b8a1718af5cd7e41c25e7..b4aefb7c85226b6f51076e31f31f41511ecc8aba 100644
--- a/Modules/Radiometry/Simulation/include/otbLeafParameters.h
+++ b/Modules/Radiometry/Simulation/include/otbLeafParameters.h
@@ -75,9 +75,9 @@ class ITK_EXPORT LeafParameters : public itk::DataObject
       /** Constructor */
       LeafParameters();
       /** Destructor */
-      ~LeafParameters();
+      ~LeafParameters() ITK_OVERRIDE;
       /** PrintSelf method */
-      void PrintSelf(std::ostream& os, itk::Indent indent) const;
+      void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
    private:
       LeafParameters(const Self&); //purposely not implemented
diff --git a/Modules/Radiometry/Simulation/include/otbProspectModel.h b/Modules/Radiometry/Simulation/include/otbProspectModel.h
index f3589107b5c6af70a9f20fb9e52779cccdd6d9cd..eb8833c5c5ee02846823dba7a27027ef8bfc4b25 100644
--- a/Modules/Radiometry/Simulation/include/otbProspectModel.h
+++ b/Modules/Radiometry/Simulation/include/otbProspectModel.h
@@ -63,21 +63,21 @@ class ITK_EXPORT ProspectModel : public SimulationStep1Base
       LeafParametersType * GetInput();
 
       /** GenerateData */
-      virtual void GenerateData();
+      void GenerateData() ITK_OVERRIDE;
 
       /** Get Output reflectance/transmittance*/
-      virtual SpectralResponseType * GetReflectance();
-      virtual SpectralResponseType * GetTransmittance();
+      SpectralResponseType * GetReflectance() ITK_OVERRIDE;
+      SpectralResponseType * GetTransmittance() ITK_OVERRIDE;
 
    protected:
       /** Constructor */
       ProspectModel();
       /** Destructor */
-      ~ProspectModel();
+      ~ProspectModel() ITK_OVERRIDE;
       /** PrintSelf method */
-      void PrintSelf(std::ostream& os, itk::Indent indent) const;
+      void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-      DataObjectPointer MakeOutput(DataObjectPointerArraySizeType);
+      DataObjectPointer MakeOutput(DataObjectPointerArraySizeType) ITK_OVERRIDE;
       using Superclass::MakeOutput;
 
       /** Compute Transmission of isotropic radiation across an interface between two dielectrics*/
diff --git a/Modules/Radiometry/Simulation/include/otbReduceSpectralResponse.h b/Modules/Radiometry/Simulation/include/otbReduceSpectralResponse.h
index aad26a9cc1ca572a198c68218f3396b9f61411bb..f56ec78b0cbb67a4de0ae141ac6eb7623a95a71a 100644
--- a/Modules/Radiometry/Simulation/include/otbReduceSpectralResponse.h
+++ b/Modules/Radiometry/Simulation/include/otbReduceSpectralResponse.h
@@ -110,7 +110,7 @@ public:
   virtual bool Clear();
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /**
    * \param PrecisionType
@@ -132,7 +132,7 @@ protected:
   /** Constructor from a ASCII file */
   //ReduceSpectralResponse( const std::string & filename );
   /** Destructor */
-  virtual ~ReduceSpectralResponse()
+  ~ReduceSpectralResponse() ITK_OVERRIDE
   {
   }
 ;
diff --git a/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.h b/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.h
index ce663bdbd2f461c956d358b2fe00b5ca22de62dd..be8d7a55863933eb125f6d1c032a9cda7ab9fbb1 100644
--- a/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.h
+++ b/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.h
@@ -106,7 +106,7 @@ namespace otb
 
 
           /** PrintSelf method */
-          void PrintSelf(std::ostream& os, itk::Indent indent) const;
+          void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 
           /**
@@ -122,7 +122,7 @@ namespace otb
           /** Constructor from a ASCII file */
           //ReduceSpectralResponseClassifierRAndNIR( const std::string & filename );
           /** Destructor */
-          virtual ~ReduceSpectralResponseClassifierRAndNIR() {};
+          ~ReduceSpectralResponseClassifierRAndNIR() ITK_OVERRIDE {};
           /** PrintSelf method */
           //void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
diff --git a/Modules/Radiometry/Simulation/include/otbSailModel.h b/Modules/Radiometry/Simulation/include/otbSailModel.h
index 5a1cca0dc71db074264eaa797bc971c9a70738ad..442370f17f6766bae898ecb76170c61bee00a4b0 100644
--- a/Modules/Radiometry/Simulation/include/otbSailModel.h
+++ b/Modules/Radiometry/Simulation/include/otbSailModel.h
@@ -58,10 +58,10 @@ class ITK_EXPORT SailModel : public SimulationStep2Base
 
 
       /** Set Inputs */
-      void SetReflectance(const SpectralResponseType *object);
+      void SetReflectance(const SpectralResponseType *object) ITK_OVERRIDE;
       SpectralResponseType * GetReflectance();
 
-      void SetTransmittance(const SpectralResponseType *object);
+      void SetTransmittance(const SpectralResponseType *object) ITK_OVERRIDE;
       SpectralResponseType * GetTransmittance();
 
       /** Set parameters */
@@ -101,7 +101,7 @@ class ITK_EXPORT SailModel : public SimulationStep2Base
       itkGetMacro(FCoverView, double);
 
       /** GenerateData */
-      virtual void GenerateData();
+      void GenerateData() ITK_OVERRIDE;
 
       /** Get Output */
       virtual SpectralResponseType * GetViewingReflectance();
@@ -118,11 +118,11 @@ class ITK_EXPORT SailModel : public SimulationStep2Base
       /** Constructor */
       SailModel();
       /** Destructor */
-      virtual ~SailModel();
+      ~SailModel() ITK_OVERRIDE;
       /** PrintSelf method */
-      void PrintSelf(std::ostream& os, itk::Indent indent) const;
+      void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-      virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType);
+      DataObjectPointer MakeOutput(DataObjectPointerArraySizeType) ITK_OVERRIDE;
       using Superclass::MakeOutput;
 
       /** Compute Leaf Angle Distribution */
diff --git a/Modules/Radiometry/Simulation/include/otbSatelliteRSR.h b/Modules/Radiometry/Simulation/include/otbSatelliteRSR.h
index 27166a40f9d52c420b015a92f597690df4bd032d..ee852cee15811a50ef26a9cf7ccedaaef3291ce0 100644
--- a/Modules/Radiometry/Simulation/include/otbSatelliteRSR.h
+++ b/Modules/Radiometry/Simulation/include/otbSatelliteRSR.h
@@ -124,7 +124,7 @@ public:
   inline ValuePrecisionType operator()(const PrecisionType & lambda, const unsigned int numBand);
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** get vector of RSR */
   RSRVectorType & GetRSR()
@@ -144,7 +144,7 @@ protected:
   /** Constructor from a ASCII file */
   //SatelliteRSR( const std::string & filename );
   /** Destructor */
-  virtual ~SatelliteRSR()
+  ~SatelliteRSR() ITK_OVERRIDE
   {
   }
 ;
diff --git a/Modules/Radiometry/Simulation/include/otbSimulationStep1Base.h b/Modules/Radiometry/Simulation/include/otbSimulationStep1Base.h
index bfaaff863bcaf4e267a2f07d75db2921b8e67602..22fbde2480ed489f8c18e5cd969c0baf5f2a27c8 100644
--- a/Modules/Radiometry/Simulation/include/otbSimulationStep1Base.h
+++ b/Modules/Radiometry/Simulation/include/otbSimulationStep1Base.h
@@ -66,7 +66,7 @@ public:
 
 protected:
    SimulationStep1Base(){};
-   virtual ~SimulationStep1Base() {}
+   ~SimulationStep1Base() ITK_OVERRIDE {}
 
 
 private:
diff --git a/Modules/Radiometry/Simulation/include/otbSimulationStep2Base.h b/Modules/Radiometry/Simulation/include/otbSimulationStep2Base.h
index 0758ae05b8966432ce06e7f2e652d55d45058ea4..274c35cd21b80c1debf00eb24010df1f881a6a75 100644
--- a/Modules/Radiometry/Simulation/include/otbSimulationStep2Base.h
+++ b/Modules/Radiometry/Simulation/include/otbSimulationStep2Base.h
@@ -67,7 +67,7 @@ protected:
   {
   }
 ;
-  virtual ~SimulationStep2Base()
+  ~SimulationStep2Base() ITK_OVERRIDE
   {
   }
 
diff --git a/Modules/Radiometry/Simulation/include/otbSpatialisationFilter.h b/Modules/Radiometry/Simulation/include/otbSpatialisationFilter.h
index 3cf1ae115287bf6029cd39e086764acbd4fc2bf2..984a8f2903995051407d17062015de4334198519 100644
--- a/Modules/Radiometry/Simulation/include/otbSpatialisationFilter.h
+++ b/Modules/Radiometry/Simulation/include/otbSpatialisationFilter.h
@@ -109,12 +109,12 @@ public:
 
 protected:
    SpatialisationFilter();
-   virtual ~SpatialisationFilter() {}
-   void PrintSelf(std::ostream& os, itk::Indent indent) const;
+   ~SpatialisationFilter() ITK_OVERRIDE {}
+   void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-   virtual void GenerateData();
+   void GenerateData() ITK_OVERRIDE;
    virtual void ProcessObject(unsigned int obj);
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 private:
    SpatialisationFilter(const Self &); //purposely not implemented
diff --git a/Modules/Radiometry/Simulation/include/otbSpectralResponse.h b/Modules/Radiometry/Simulation/include/otbSpectralResponse.h
index cffd375942c3a2a20a31bb21a111685fa7656b0b..042793f9745c32e1822b34cc623a531e051902b5 100644
--- a/Modules/Radiometry/Simulation/include/otbSpectralResponse.h
+++ b/Modules/Radiometry/Simulation/include/otbSpectralResponse.h
@@ -101,7 +101,7 @@ public:
   void Load(const std::string & filename, ValuePrecisionType coefNormalization = 1.0);
 
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** get vector of spectral responses */
   VectorPairType & GetResponse()
@@ -160,7 +160,7 @@ protected:
   /** Constructor from a ASCII file */
   //SpectralResponse( const std::string & filename );
   /** Destructor */
-  virtual ~SpectralResponse()
+  ~SpectralResponse() ITK_OVERRIDE
   {
   }
 ;
diff --git a/Modules/Radiometry/Simulation/include/otbSurfaceReflectanceToReflectanceFilter.h b/Modules/Radiometry/Simulation/include/otbSurfaceReflectanceToReflectanceFilter.h
index ae24c6b809607026d8ca4b3319cd6b50030ea691..2820a8a5b01423a2fc2182a83952af30d5fa3a32 100644
--- a/Modules/Radiometry/Simulation/include/otbSurfaceReflectanceToReflectanceFilter.h
+++ b/Modules/Radiometry/Simulation/include/otbSurfaceReflectanceToReflectanceFilter.h
@@ -263,18 +263,18 @@ protected:
   /** Constructor */
   SurfaceReflectanceToReflectanceFilter();
   /** Destructor */
-  virtual ~SurfaceReflectanceToReflectanceFilter() {};
+  ~SurfaceReflectanceToReflectanceFilter() ITK_OVERRIDE {};
 
 
   /** Initialize the functor vector */
-  void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
   /** Fill AtmosphericRadiativeTerms using image metadata*/
   void UpdateAtmosphericRadiativeTerms();
   /** Update Functors parameters */
   void UpdateFunctors();
 
   /** If modified, we need to compute the functor parameters again */
-  virtual void Modified() const;
+  void Modified() const ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Registration/DisparityMap/include/otbDisparityMapEstimationMethod.h b/Modules/Registration/DisparityMap/include/otbDisparityMapEstimationMethod.h
index 99c547e07e73759eac80f9c0fd9e02509f2fc440..f1fd222d2238d84429ca52c6c34d27981fc53f0a 100644
--- a/Modules/Registration/DisparityMap/include/otbDisparityMapEstimationMethod.h
+++ b/Modules/Registration/DisparityMap/include/otbDisparityMapEstimationMethod.h
@@ -181,15 +181,15 @@ protected:
   /**
    * Destructor.
    */
-  virtual ~DisparityMapEstimationMethod();
+  ~DisparityMapEstimationMethod() ITK_OVERRIDE;
   /**
    * Standard PrintSelf method.
    */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /**
    * Main computation method.
    */
-  void  GenerateData();
+  void  GenerateData() ITK_OVERRIDE;
 
 private:
   DisparityMapEstimationMethod(const Self &); //purposely not implemented
diff --git a/Modules/Registration/DisparityMap/include/otbDisparityMapMedianFilter.h b/Modules/Registration/DisparityMap/include/otbDisparityMapMedianFilter.h
index e01c3f688008a4ab9cee6eb460cd2930a425b48a..2d786adec76921fcd9949d3b0ed470834faf722e 100644
--- a/Modules/Registration/DisparityMap/include/otbDisparityMapMedianFilter.h
+++ b/Modules/Registration/DisparityMap/include/otbDisparityMapMedianFilter.h
@@ -148,8 +148,8 @@ public:
 
 protected:
   DisparityMapMedianFilter();
-  virtual ~DisparityMapMedianFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~DisparityMapMedianFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** MedianImageFilter needs a larger input requested region than
    * the output requested region.  As such, MedianImageFilter needs
@@ -157,13 +157,13 @@ protected:
    * in order to inform the pipeline execution model.
    *
    * \sa ImageToImageFilter::GenerateInputRequestedRegion() */
-  virtual void GenerateInputRequestedRegion() throw(itk::InvalidRequestedRegionError);
+  void GenerateInputRequestedRegion() throw(itk::InvalidRequestedRegionError) ITK_OVERRIDE;
 
   /** Generate output information */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /** apply median filter */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   DisparityMapMedianFilter(const Self&); //purposely not implemented
diff --git a/Modules/Registration/DisparityMap/include/otbDisparityMapTo3DFilter.h b/Modules/Registration/DisparityMap/include/otbDisparityMapTo3DFilter.h
index 5bc25dd6adc7a3beb5bc140c7eeee02ec89f2870..32114ab3472ca17e89e6b0361080c912157da917 100644
--- a/Modules/Registration/DisparityMap/include/otbDisparityMapTo3DFilter.h
+++ b/Modules/Registration/DisparityMap/include/otbDisparityMapTo3DFilter.h
@@ -141,26 +141,26 @@ protected:
   DisparityMapTo3DFilter();
 
   /** Destructor */
-  virtual ~DisparityMapTo3DFilter();
+  ~DisparityMapTo3DFilter() ITK_OVERRIDE;
 
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Generate input requrested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** Override VerifyInputInformation() since this filter's inputs do
     * not need to occupy the same physical space.
     *
     * \sa ProcessObject::VerifyInputInformation
     */
-  virtual void VerifyInputInformation() {}
+  void VerifyInputInformation() ITK_OVERRIDE {}
 
 
 private:
diff --git a/Modules/Registration/DisparityMap/include/otbDisparityMapToDEMFilter.h b/Modules/Registration/DisparityMap/include/otbDisparityMapToDEMFilter.h
index fe28eaf9bec0e9732455ed4b47b194cdbb0db432..b7f0497d7ade1b5af1186dab36816c56e6d73bf6 100644
--- a/Modules/Registration/DisparityMap/include/otbDisparityMapToDEMFilter.h
+++ b/Modules/Registration/DisparityMap/include/otbDisparityMapToDEMFilter.h
@@ -146,29 +146,29 @@ protected:
   DisparityMapToDEMFilter();
 
   /** Destructor */
-  virtual ~DisparityMapToDEMFilter();
+  ~DisparityMapToDEMFilter() ITK_OVERRIDE;
 
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Generate input requrested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** After threaded generate data : sum up temporary DEMs */
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
   /** Override VerifyInputInformation() since this filter's inputs do
     * not need to occupy the same physical space.
     *
     * \sa ProcessObject::VerifyInputInformation
     */
-  virtual void VerifyInputInformation() {}
+  void VerifyInputInformation() ITK_OVERRIDE {}
 
 
 private:
diff --git a/Modules/Registration/DisparityMap/include/otbDisparityTranslateFilter.h b/Modules/Registration/DisparityMap/include/otbDisparityTranslateFilter.h
index f0e4d379be02c83ef3d81adb5e3a889d0a8d9328..57fd11605effd69f13858c38441ca4cb03783727 100644
--- a/Modules/Registration/DisparityMap/include/otbDisparityTranslateFilter.h
+++ b/Modules/Registration/DisparityMap/include/otbDisparityTranslateFilter.h
@@ -116,23 +116,23 @@ protected:
   DisparityTranslateFilter();
 
   /** Destructor */
-  virtual ~DisparityTranslateFilter(){};
+  ~DisparityTranslateFilter() ITK_OVERRIDE{};
 
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Generate input requrested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** Override VerifyInputInformation() since this filter's inputs do
     * not need to occupy the same physical space.
     *
     * \sa ProcessObject::VerifyInputInformation
     */
- virtual void VerifyInputInformation() {}
+ void VerifyInputInformation() ITK_OVERRIDE {}
 
 
 private:
diff --git a/Modules/Registration/DisparityMap/include/otbFineRegistrationImageFilter.h b/Modules/Registration/DisparityMap/include/otbFineRegistrationImageFilter.h
index a9d5ca0aaf56914bc5b2e37a001e06a4b2824dda..4b2d9da15ef230f590ef6b7cc1308ac68d19e2ff 100644
--- a/Modules/Registration/DisparityMap/include/otbFineRegistrationImageFilter.h
+++ b/Modules/Registration/DisparityMap/include/otbFineRegistrationImageFilter.h
@@ -178,16 +178,16 @@ protected:
   /** Constructor */
   FineRegistrationImageFilter();
   /** Destructor */
-  virtual ~FineRegistrationImageFilter() {};
+  ~FineRegistrationImageFilter() ITK_OVERRIDE {};
 
   /** Threaded generate data */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Generate the input requested regions  */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** Generate output information */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
 private:
   FineRegistrationImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Registration/DisparityMap/include/otbMultiDisparityMapTo3DFilter.h b/Modules/Registration/DisparityMap/include/otbMultiDisparityMapTo3DFilter.h
index 7e50cc5845d54de54a1c44915464641f6a2b7cce..526edb25f290f44de7cf465427ce677ae72061d0 100644
--- a/Modules/Registration/DisparityMap/include/otbMultiDisparityMapTo3DFilter.h
+++ b/Modules/Registration/DisparityMap/include/otbMultiDisparityMapTo3DFilter.h
@@ -154,19 +154,19 @@ protected:
   MultiDisparityMapTo3DFilter();
 
   /** Destructor */
-  virtual ~MultiDisparityMapTo3DFilter();
+  ~MultiDisparityMapTo3DFilter() ITK_OVERRIDE;
 
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Generate input requrested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   MultiDisparityMapTo3DFilter(const Self&); //purposely not implemented
diff --git a/Modules/Registration/DisparityMap/include/otbNCCRegistrationFilter.h b/Modules/Registration/DisparityMap/include/otbNCCRegistrationFilter.h
index 0ae6de3734b1d03c19b435e9d9b3be71ab297903..068cab626b7f190ff6f8e22d41dccba6487dc8f7 100644
--- a/Modules/Registration/DisparityMap/include/otbNCCRegistrationFilter.h
+++ b/Modules/Registration/DisparityMap/include/otbNCCRegistrationFilter.h
@@ -134,18 +134,18 @@ public:
 
 protected:
   NCCRegistrationFilter();
-  virtual ~NCCRegistrationFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~NCCRegistrationFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Initialize the state of filter and equation before each iteration. */
-  virtual void InitializeIteration();
+  void InitializeIteration() ITK_OVERRIDE;
 
   /** Apply update. */
   using Superclass::ApplyUpdate;
   virtual void ApplyUpdate(TimeStepType dt);
 
   /** Update the Input requested region. */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
 private:
   NCCRegistrationFilter(const Self &); //purposely not implemented
diff --git a/Modules/Registration/DisparityMap/include/otbNCCRegistrationFunction.h b/Modules/Registration/DisparityMap/include/otbNCCRegistrationFunction.h
index b2a1fab6824371f936b89996a09beb2974e29119..52de8e8a2f5dc5b58a3462da3ecd553704e3c230 100644
--- a/Modules/Registration/DisparityMap/include/otbNCCRegistrationFunction.h
+++ b/Modules/Registration/DisparityMap/include/otbNCCRegistrationFunction.h
@@ -119,38 +119,38 @@ public:
   }
 
   /** This class uses a constant timestep of 1. */
-  virtual TimeStepType ComputeGlobalTimeStep(void * itkNotUsed(GlobalData)) const
+  TimeStepType ComputeGlobalTimeStep(void * itkNotUsed(GlobalData)) const ITK_OVERRIDE
   {
     return m_TimeStep;
   }
 
   /** Return a pointer to a global data structure that is passed to
    * this object from the solver at each calculation.  */
-  virtual void *GetGlobalDataPointer() const
+  void *GetGlobalDataPointer() const ITK_OVERRIDE
   {
     GlobalDataStruct *global = new GlobalDataStruct();
     return global;
   }
 
   /** Release memory for global data structure. */
-  virtual void ReleaseGlobalDataPointer(void *GlobalData) const
+  void ReleaseGlobalDataPointer(void *GlobalData) const ITK_OVERRIDE
   {
     delete (GlobalDataStruct *) GlobalData;
   }
 
   /** Set the object's state before each iteration. */
-  virtual void InitializeIteration();
+  void InitializeIteration() ITK_OVERRIDE;
 
   /** This method is called by a finite difference solver image filter at
    * each pixel that does not lie on a data set boundary */
-  virtual PixelType  ComputeUpdate(const NeighborhoodType& neighborhood,
+  PixelType  ComputeUpdate(const NeighborhoodType& neighborhood,
                                    void *globalData,
-                                   const FloatOffsetType& offset = FloatOffsetType(0.0));
+                                   const FloatOffsetType& offset = FloatOffsetType(0.0)) ITK_OVERRIDE;
 
 protected:
   NCCRegistrationFunction();
-  virtual ~NCCRegistrationFunction() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~NCCRegistrationFunction() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** FixedImage image neighborhood iterator type. */
   typedef itk::ConstNeighborhoodIterator<FixedImageType> FixedImageNeighborhoodIteratorType;
diff --git a/Modules/Registration/DisparityMap/include/otbPixelWiseBlockMatchingImageFilter.h b/Modules/Registration/DisparityMap/include/otbPixelWiseBlockMatchingImageFilter.h
index ffdf02cd52cee98ac88728524580f8d9139863ee..bb3ff8bff5addacae5b4e96a087e834b991fea5a 100644
--- a/Modules/Registration/DisparityMap/include/otbPixelWiseBlockMatchingImageFilter.h
+++ b/Modules/Registration/DisparityMap/include/otbPixelWiseBlockMatchingImageFilter.h
@@ -415,10 +415,10 @@ public:
     return m_Functor;
   }
 
-  /** Set initial horizontal disparity field (optional, override m_InitHorizontalDisparity) */
+  /** Set initial horizontal disparity field (optional, ITK_OVERRIDE m_InitHorizontalDisparity) */
   void SetHorizontalDisparityInput( const TOutputDisparityImage * hfield);
 
-  /** Set initial vertical disparity field (optional, override m_InitVerticalDisparity) */
+  /** Set initial vertical disparity field (optional, ITK_OVERRIDE m_InitVerticalDisparity) */
   void SetVerticalDisparityInput( const TOutputDisparityImage * vfield);
 
   /** Get the initial disparity fields */
@@ -444,19 +444,19 @@ protected:
   PixelWiseBlockMatchingImageFilter();
 
   /** Destructor */
-  virtual ~PixelWiseBlockMatchingImageFilter();
+  ~PixelWiseBlockMatchingImageFilter() ITK_OVERRIDE;
 
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Generate input requrested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   PixelWiseBlockMatchingImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Registration/DisparityMap/include/otbSubPixelDisparityImageFilter.h b/Modules/Registration/DisparityMap/include/otbSubPixelDisparityImageFilter.h
index cbdc4282d41f2b609c815708e7a810163628b7c0..1c52eac29f8a1b8094189881d999f65c57444d55 100644
--- a/Modules/Registration/DisparityMap/include/otbSubPixelDisparityImageFilter.h
+++ b/Modules/Registration/DisparityMap/include/otbSubPixelDisparityImageFilter.h
@@ -207,29 +207,29 @@ protected:
   SubPixelDisparityImageFilter();
 
   /** Destructor */
-  virtual ~SubPixelDisparityImageFilter();
+  ~SubPixelDisparityImageFilter() ITK_OVERRIDE;
 
   /** \brief Verify that the input images are compatible
    *
    * This method needs to be re-implemented from ImageToImageFilter since
    * the initial images and disparity maps may not have the same size
    */
-  virtual void VerifyInputInformation();
+  void VerifyInputInformation() ITK_OVERRIDE;
   
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Generate input requrested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** After threaded generate data */
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
 private:
   SubPixelDisparityImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.h
index 8f987463b0c1f371296af0823a6071278361be80..39b9ee004e44977febdb0b972e3320a2b3bf743a 100644
--- a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.h
+++ b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.h
@@ -63,11 +63,11 @@ protected:
   /** Constructor */
   BSplinesInterpolateDisplacementFieldGenerator() {};
   /** Destructor */
-  virtual ~BSplinesInterpolateDisplacementFieldGenerator() {}
+  ~BSplinesInterpolateDisplacementFieldGenerator() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   BSplinesInterpolateDisplacementFieldGenerator(const Self &); //purposely not implemented
diff --git a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.h
index a60acfc31b367e76e10f814dc4b82a9f80d0032b..8931b796aeeb98a77da1f4f363bc6cb04d682610 100644
--- a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.h
+++ b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.h
@@ -103,13 +103,13 @@ protected:
   /** Constructor */
   BSplinesInterpolateTransformDisplacementFieldGenerator();
   /** Destructor */
-  virtual ~BSplinesInterpolateTransformDisplacementFieldGenerator() {}
+  ~BSplinesInterpolateTransformDisplacementFieldGenerator() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /**
    * Test wether a parameter is angular or not.
diff --git a/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h
index e7df1f96dfc5e67138538c8b8a36c98665765e12..2c4e64a7895c9ce296c9b10eb553530541914da9 100644
--- a/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h
+++ b/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h
@@ -64,11 +64,11 @@ protected:
   /** Constructor */
   NNearestPointsLinearInterpolateDisplacementFieldGenerator() {};
   /** Destructor */
-  virtual ~NNearestPointsLinearInterpolateDisplacementFieldGenerator() {}
+  ~NNearestPointsLinearInterpolateDisplacementFieldGenerator() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   NNearestPointsLinearInterpolateDisplacementFieldGenerator(const Self &); //purposely not implemented
diff --git a/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h
index 5ef63392f5bdf3c271fed4a59d6687d783240914..ef97a01d6db69ff9711a1c934638dc9158040061 100644
--- a/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h
+++ b/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h
@@ -71,11 +71,11 @@ protected:
   /** Constructor */
   NNearestTransformsLinearInterpolateDisplacementFieldGenerator() {};
   /** Destructor */
-  virtual ~NNearestTransformsLinearInterpolateDisplacementFieldGenerator() {}
+  ~NNearestTransformsLinearInterpolateDisplacementFieldGenerator() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   NNearestTransformsLinearInterpolateDisplacementFieldGenerator(const Self &); //purposely not implemented
diff --git a/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.h
index 81cecc3ca7ce6c7d6517b97698a068decbcae21c..d3102261b7e83b2b6f96ba9e39a44e0c20c1faf8 100644
--- a/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.h
+++ b/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.h
@@ -61,11 +61,11 @@ protected:
   /** Constructor */
   NearestPointDisplacementFieldGenerator() {};
   /** Destructor */
-  virtual ~NearestPointDisplacementFieldGenerator() {}
+  ~NearestPointDisplacementFieldGenerator() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   NearestPointDisplacementFieldGenerator(const Self &); //purposely not implemented
diff --git a/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.h
index c5dd9798e320171e583782a7e1418595329982c9..85ffab67dadd83bc19cfd429925adff1c9c3ef92 100644
--- a/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.h
+++ b/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.h
@@ -64,11 +64,11 @@ protected:
   /** Constructor */
   NearestTransformDisplacementFieldGenerator() {};
   /** Destructor */
-  virtual ~NearestTransformDisplacementFieldGenerator() {}
+  ~NearestTransformDisplacementFieldGenerator() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   NearestTransformDisplacementFieldGenerator(const Self &); //purposely not implemented
diff --git a/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.h
index fad2a985c42b43362ab041e2b194c359d0e9a649..7bee95770c0c61b629a7854060ba35e3b35b77e5 100644
--- a/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.h
+++ b/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.h
@@ -122,11 +122,11 @@ protected:
   /** Constructor */
   PointSetToDisplacementFieldGenerator();
   /** Destructor */
-  virtual ~PointSetToDisplacementFieldGenerator() {}
+  ~PointSetToDisplacementFieldGenerator() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
   /** Generate output information */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
   /**
    * Generate the n nearest valid point in point set, where a valid point has a sufficient metric value.
    *  \param index The index of the pixel to compute.
diff --git a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.h
index 2fe6858d8143e094c31d7d2dc9b06df71ce5f541..15e1da4af24afceaa8d966a08c52fa57dfc51468 100644
--- a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.h
+++ b/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.h
@@ -81,9 +81,9 @@ protected:
   /** Constructor */
   PointSetWithTransformToDisplacementFieldGenerator();
   /** Destructor */
-  virtual ~PointSetWithTransformToDisplacementFieldGenerator() {}
+  ~PointSetWithTransformToDisplacementFieldGenerator() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   PointSetWithTransformToDisplacementFieldGenerator(const Self &); //purposely not implemented
diff --git a/Modules/Registration/Stereo/include/otbAdhesionCorrectionFilter.h b/Modules/Registration/Stereo/include/otbAdhesionCorrectionFilter.h
index 59e1cf42a53ab1edbfdabff4c309603eb12e84cf..a520c6791cd17b974518fb75e4e834df78c22079 100644
--- a/Modules/Registration/Stereo/include/otbAdhesionCorrectionFilter.h
+++ b/Modules/Registration/Stereo/include/otbAdhesionCorrectionFilter.h
@@ -148,16 +148,16 @@ protected:
   /** Constructor */
   AdhesionCorrectionFilter();
   /** Destructor */
-  virtual ~AdhesionCorrectionFilter() {};
+  ~AdhesionCorrectionFilter() ITK_OVERRIDE {};
 
   /** Threaded generate data */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Generate the input requested regions  */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** Generate output information */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
 private:
   AdhesionCorrectionFilter(const Self&); //purposely not implemented
diff --git a/Modules/Registration/Stereo/include/otbBijectionCoherencyFilter.h b/Modules/Registration/Stereo/include/otbBijectionCoherencyFilter.h
index 25d849d136a872e613ccd66ced6c0dea0f4f1365..03575b55b646654cef006fbefc090341824ad532 100644
--- a/Modules/Registration/Stereo/include/otbBijectionCoherencyFilter.h
+++ b/Modules/Registration/Stereo/include/otbBijectionCoherencyFilter.h
@@ -111,16 +111,16 @@ protected:
   BijectionCoherencyFilter();
 
   /** Destructor */
-  virtual ~BijectionCoherencyFilter(){};
+  ~BijectionCoherencyFilter() ITK_OVERRIDE{};
 
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Generate input requrested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const OutputRegionType & outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputRegionType & outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
 private:
   BijectionCoherencyFilter(const Self&); //purposely not implemented
diff --git a/Modules/Registration/Stereo/include/otbLineOfSightOptimizer.h b/Modules/Registration/Stereo/include/otbLineOfSightOptimizer.h
index 7bb90449cb30b34c537abf8abbd2dd3f0caf193c..0400d0d92e3cf474e483473147b3d19f96671866 100644
--- a/Modules/Registration/Stereo/include/otbLineOfSightOptimizer.h
+++ b/Modules/Registration/Stereo/include/otbLineOfSightOptimizer.h
@@ -84,7 +84,7 @@ protected:
   LineOfSightOptimizer();
 
   /** Destructor */
-  virtual ~LineOfSightOptimizer(){};
+  ~LineOfSightOptimizer() ITK_OVERRIDE{};
 
 
 private:
diff --git a/Modules/Registration/Stereo/include/otbMulti3DMapToDEMFilter.h b/Modules/Registration/Stereo/include/otbMulti3DMapToDEMFilter.h
index 3773eca435f68c7d8dadc35b02ab91b62ec1d90e..c6e10156e032ce22d118a61c9dbcfa01ee5745f9 100644
--- a/Modules/Registration/Stereo/include/otbMulti3DMapToDEMFilter.h
+++ b/Modules/Registration/Stereo/include/otbMulti3DMapToDEMFilter.h
@@ -229,29 +229,29 @@ protected:
   Multi3DMapToDEMFilter();
 
   /** Destructor */
-  virtual ~Multi3DMapToDEMFilter();
+  ~Multi3DMapToDEMFilter() ITK_OVERRIDE;
 
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Generate input requrested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Before threaded generate data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const RegionType & outputRegionForThread, itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** After threaded generate data */
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
   /** Override VerifyInputInformation() since this filter's inputs do
     * not need to occupy the same physical space.
     *
     * \sa ProcessObject::VerifyInputInformation
     */
-  virtual void VerifyInputInformation() {}
+  void VerifyInputInformation() ITK_OVERRIDE {}
 
 
 private:
diff --git a/Modules/Registration/Stereo/include/otbStereoSensorModelToElevationMapFilter.h b/Modules/Registration/Stereo/include/otbStereoSensorModelToElevationMapFilter.h
index b2a7af763ff458d88eecf43f76a2b6a54fa1eaae..1284b3068d045c2fef64a96b0009428796c26f23 100644
--- a/Modules/Registration/Stereo/include/otbStereoSensorModelToElevationMapFilter.h
+++ b/Modules/Registration/Stereo/include/otbStereoSensorModelToElevationMapFilter.h
@@ -187,24 +187,24 @@ protected:
   StereoSensorModelToElevationFilter();
 
   /** Destructor */
-  virtual ~StereoSensorModelToElevationFilter();
+  ~StereoSensorModelToElevationFilter() ITK_OVERRIDE;
 
   /** Threaded generate data */
-  virtual void ThreadedGenerateData(const OutputRegionType& outputRegionForThread,
-                                    itk::ThreadIdType threadId);
+  void ThreadedGenerateData(const OutputRegionType& outputRegionForThread,
+                                    itk::ThreadIdType threadId) ITK_OVERRIDE;
 
   /** Generate the input requested regions  */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** Things to do before the threaded generate-data */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Override VerifyInputInformation() since this filter's inputs do
       * not need to occupy the same physical space.
       *
       * \sa ProcessObject::VerifyInputInformation
       */
-  virtual void VerifyInputInformation() {}
+  void VerifyInputInformation() ITK_OVERRIDE {}
 
 
 private:
diff --git a/Modules/Registration/Stereo/include/otbStereorectificationDisplacementFieldSource.h b/Modules/Registration/Stereo/include/otbStereorectificationDisplacementFieldSource.h
index 9cebbf5d4d0f4d639891fc23074cfb5f9e63a783..9b3f8acfbdafc3bab2ac65714cc791bc0e097e7c 100644
--- a/Modules/Registration/Stereo/include/otbStereorectificationDisplacementFieldSource.h
+++ b/Modules/Registration/Stereo/include/otbStereorectificationDisplacementFieldSource.h
@@ -163,19 +163,19 @@ protected:
   StereorectificationDisplacementFieldSource( void );
 
   /** Destructor */
-  ~StereorectificationDisplacementFieldSource( void ) {};
+  ~StereorectificationDisplacementFieldSource( void ) ITK_OVERRIDE {};
 
   /** Generate output images information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
   /** Enlarge output requested region (no streaming) */
-  virtual void EnlargeOutputRequestedRegion(itk::DataObject * itkNotUsed(output));
+  void EnlargeOutputRequestedRegion(itk::DataObject * itkNotUsed(output)) ITK_OVERRIDE;
 
   /** Compute the deformation field */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  virtual void PrintSelf( std::ostream& os, itk::Indent indent ) const;
+  void PrintSelf( std::ostream& os, itk::Indent indent ) const ITK_OVERRIDE;
 
 private:
   StereorectificationDisplacementFieldSource( const Self& ); // purposely
diff --git a/Modules/Segmentation/CCOBIA/include/otbLabelObjectOpeningMuParserFilter.h b/Modules/Segmentation/CCOBIA/include/otbLabelObjectOpeningMuParserFilter.h
index 87a85bd0ec3c1e4b5ad3a6cf9e5b8a6fb203a00f..1c85494c27735c05891fb39628aedea3a6f08283 100644
--- a/Modules/Segmentation/CCOBIA/include/otbLabelObjectOpeningMuParserFilter.h
+++ b/Modules/Segmentation/CCOBIA/include/otbLabelObjectOpeningMuParserFilter.h
@@ -110,18 +110,18 @@ public:
   /** return list of Mu Parser functions**/
   Parser::FunctionMapType GetFunList() const;
 
-  virtual void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
-  void EnlargeOutputRequestedRegion(itk::DataObject *) {}
+  void EnlargeOutputRequestedRegion(itk::DataObject *) ITK_OVERRIDE {}
 
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 protected:
   LabelObjectOpeningMuParserFilter();
-  virtual ~LabelObjectOpeningMuParserFilter();
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LabelObjectOpeningMuParserFilter() ITK_OVERRIDE;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   LabelObjectOpeningMuParserFilter(const Self&); //purposely not implemented
diff --git a/Modules/Segmentation/CCOBIA/include/otbStreamingConnectedComponentSegmentationOBIAToVectorDataFilter.h b/Modules/Segmentation/CCOBIA/include/otbStreamingConnectedComponentSegmentationOBIAToVectorDataFilter.h
index 2ad1a455d2d908a8053aebf7eb89b5e4c4d612c2..23b5ff14eed8b0727e0e083c6d1c5deb1dbdfec2 100644
--- a/Modules/Segmentation/CCOBIA/include/otbStreamingConnectedComponentSegmentationOBIAToVectorDataFilter.h
+++ b/Modules/Segmentation/CCOBIA/include/otbStreamingConnectedComponentSegmentationOBIAToVectorDataFilter.h
@@ -178,9 +178,9 @@ public:
 protected:
   PersistentConnectedComponentSegmentationOBIAToVectorDataFilter();
 
-  virtual ~PersistentConnectedComponentSegmentationOBIAToVectorDataFilter();
+  ~PersistentConnectedComponentSegmentationOBIAToVectorDataFilter() ITK_OVERRIDE;
 
-  void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 private:
 
   ObjectSizeType m_MinimumObjectSize;
@@ -196,7 +196,7 @@ private:
   bool m_ComputeFeretDiameter;
   bool m_ComputePerimeter;
 
-  virtual VectorDataPointerType ProcessTile();
+  VectorDataPointerType ProcessTile() ITK_OVERRIDE;
 };
 
 /** \class StreamingConnectedComponentSegmentationOBIAToVectorDataFilter
diff --git a/Modules/Segmentation/Conversion/include/otbLabelImageRegionMergingFilter.h b/Modules/Segmentation/Conversion/include/otbLabelImageRegionMergingFilter.h
index 242439ddbcc2aeef78b5477ac1863a39bd6152d4..7e951a1515575d7274ad44ab4bd72296e19bd727 100644
--- a/Modules/Segmentation/Conversion/include/otbLabelImageRegionMergingFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbLabelImageRegionMergingFilter.h
@@ -112,20 +112,20 @@ public:
   InputSpectralImageType * GetInputSpectralImage();
 
 protected:
-  virtual void EnlargeOutputRequestedRegion( itk::DataObject *output );
+  void EnlargeOutputRequestedRegion( itk::DataObject *output ) ITK_OVERRIDE;
 
-   virtual void GenerateOutputInformation(void);
+   void GenerateOutputInformation(void) ITK_OVERRIDE;
 
-   virtual void GenerateData();
+   void GenerateData() ITK_OVERRIDE;
 
   /** Constructor */
   LabelImageRegionMergingFilter();
 
   /** Destructor */
-  virtual ~LabelImageRegionMergingFilter();
+  ~LabelImageRegionMergingFilter() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Method to build a map of adjacent regions */
   RegionAdjacencyMapType LabelImageToRegionAdjacencyMap(typename OutputLabelImageType::Pointer inputLabelImage);
diff --git a/Modules/Segmentation/Conversion/include/otbLabelImageRegionPruningFilter.h b/Modules/Segmentation/Conversion/include/otbLabelImageRegionPruningFilter.h
index 8643a00dfb84849db82a245a6c5192487ee361a4..f3a264769e0f9a8aeadceceed3ecf8e997e9de1c 100644
--- a/Modules/Segmentation/Conversion/include/otbLabelImageRegionPruningFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbLabelImageRegionPruningFilter.h
@@ -111,20 +111,20 @@ public:
   InputSpectralImageType * GetInputSpectralImage();
 
 protected:
-  virtual void EnlargeOutputRequestedRegion( itk::DataObject *output );
+  void EnlargeOutputRequestedRegion( itk::DataObject *output ) ITK_OVERRIDE;
 
-   virtual void GenerateOutputInformation(void);
+   void GenerateOutputInformation(void) ITK_OVERRIDE;
 
-   virtual void GenerateData();
+   void GenerateData() ITK_OVERRIDE;
 
   /** Constructor */
   LabelImageRegionPruningFilter();
 
   /** Destructor */
-  virtual ~LabelImageRegionPruningFilter();
+  ~LabelImageRegionPruningFilter() ITK_OVERRIDE;
 
   /** PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Method to build a map of adjacent regions */
   RegionAdjacencyMapType LabelImageToRegionAdjacencyMap(typename OutputLabelImageType::Pointer inputLabelImage);
diff --git a/Modules/Segmentation/Conversion/include/otbLabelImageToOGRDataSourceFilter.h b/Modules/Segmentation/Conversion/include/otbLabelImageToOGRDataSourceFilter.h
index b4d6817c76a37189bb0882f7329cc58a405fd587..2e1c71fa191e02b60977c6be96aa381da4188a46 100644
--- a/Modules/Segmentation/Conversion/include/otbLabelImageToOGRDataSourceFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbLabelImageToOGRDataSourceFilter.h
@@ -111,17 +111,17 @@ public:
 
 protected:
   LabelImageToOGRDataSourceFilter();
-  virtual ~LabelImageToOGRDataSourceFilter() {}
+  ~LabelImageToOGRDataSourceFilter() ITK_OVERRIDE {}
 
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Generate Data method*/
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** DataObject pointer */
   typedef itk::DataObject::Pointer DataObjectPointer;
 
-  virtual DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx);
+  DataObjectPointer MakeOutput(DataObjectPointerArraySizeType idx) ITK_OVERRIDE;
   using Superclass::MakeOutput;
 
 private:
diff --git a/Modules/Segmentation/Conversion/include/otbLabelImageToVectorDataFilter.h b/Modules/Segmentation/Conversion/include/otbLabelImageToVectorDataFilter.h
index 23a3a20fea0271bc778518c31753d40d5ca6624c..700e5adaa8e286d9d9d2ff5b5d75dce68fc1bba4 100644
--- a/Modules/Segmentation/Conversion/include/otbLabelImageToVectorDataFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbLabelImageToVectorDataFilter.h
@@ -101,12 +101,12 @@ public:
 
 protected:
   LabelImageToVectorDataFilter();
-  virtual ~LabelImageToVectorDataFilter() {}
+  ~LabelImageToVectorDataFilter() ITK_OVERRIDE {}
 
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
 
   /** Generate Data method*/
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   LabelImageToVectorDataFilter(const Self &);  //purposely not implemented
diff --git a/Modules/Segmentation/Conversion/include/otbLabelMapToVectorDataFilter.h b/Modules/Segmentation/Conversion/include/otbLabelMapToVectorDataFilter.h
index 81eb0b9e5e42c5537564bd54c7a74303fa562c9f..c1f0f3773a0abbc78050f79d205cf7b636e8e3da 100644
--- a/Modules/Segmentation/Conversion/include/otbLabelMapToVectorDataFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbLabelMapToVectorDataFilter.h
@@ -112,9 +112,9 @@ public:
 
 protected:
   LabelMapToVectorDataFilter();
-  virtual ~LabelMapToVectorDataFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
-  void GenerateData();
+  ~LabelMapToVectorDataFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   LabelMapToVectorDataFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/Conversion/include/otbOGRDataSourceToLabelImageFilter.h b/Modules/Segmentation/Conversion/include/otbOGRDataSourceToLabelImageFilter.h
index 0d258cd891a072d327d062c40494513d518b897a..1646b6ae68bc9943890c77e10b9143e126aed8fb 100644
--- a/Modules/Segmentation/Conversion/include/otbOGRDataSourceToLabelImageFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbOGRDataSourceToLabelImageFilter.h
@@ -137,14 +137,14 @@ public:
   void SetOutputParametersFromImage(const ImageBaseType * image);
 
 protected:
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   OGRDataSourceToLabelImageFilter();
-  virtual ~OGRDataSourceToLabelImageFilter() {}
+  ~OGRDataSourceToLabelImageFilter() ITK_OVERRIDE {}
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   OGRDataSourceToLabelImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Segmentation/Conversion/include/otbPersistentImageToOGRLayerFilter.h b/Modules/Segmentation/Conversion/include/otbPersistentImageToOGRLayerFilter.h
index 4e7727b94440f0e88a29195cfc0e3a24441938c8..90ed44da9d81a41199b143dc6e85e4a609200a68 100644
--- a/Modules/Segmentation/Conversion/include/otbPersistentImageToOGRLayerFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbPersistentImageToOGRLayerFilter.h
@@ -73,9 +73,9 @@ public:
   typedef ogr::Layer                                 OGRLayerType;
   typedef ogr::Feature                               OGRFeatureType;
 
-  void AllocateOutputs();
-  virtual void Reset(void);
-  virtual void Synthetize(void);
+  void AllocateOutputs() ITK_OVERRIDE;
+  void Reset(void) ITK_OVERRIDE;
+  void Synthetize(void) ITK_OVERRIDE;
 
   /** This method creates the output layer in the OGRLayer set by the user.
    * \note This methode must be called before the call of Update .
@@ -95,11 +95,11 @@ public:
 
 protected:
   PersistentImageToOGRLayerFilter();
-  virtual ~PersistentImageToOGRLayerFilter();
+  ~PersistentImageToOGRLayerFilter() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Segmentation/Conversion/include/otbPersistentImageToVectorDataFilter.h b/Modules/Segmentation/Conversion/include/otbPersistentImageToVectorDataFilter.h
index 0a262e79a03f6ba1099a36cdaf065d246133f524..0ca3567ba688cc0126b0e7c7f80810187cefbab7 100644
--- a/Modules/Segmentation/Conversion/include/otbPersistentImageToVectorDataFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbPersistentImageToVectorDataFilter.h
@@ -85,11 +85,11 @@ public:
 
   OutputVectorDataType* GetOutputVectorData() const;
 
-  void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
-  virtual void Reset(void);
+  void Reset(void) ITK_OVERRIDE;
 
-  virtual void Synthetize(void);
+  void Synthetize(void) ITK_OVERRIDE;
 
   /** Specify the name of the output shapefile to write. */
   itkSetStringMacro(FileName);
@@ -97,11 +97,11 @@ public:
 
 protected:
   PersistentImageToVectorDataFilter();
-  virtual ~PersistentImageToVectorDataFilter() {}
+  ~PersistentImageToVectorDataFilter() ITK_OVERRIDE {}
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   ExtractImageFilterPointerType          m_ExtractFilter;
 
diff --git a/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.h b/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.h
index 1cbbe1041e447074ccb278a4302804a23c09089f..693e7f058778745d50ebf843ad7cccb8dd7c9039 100644
--- a/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.h
@@ -133,10 +133,10 @@ public:
   }
 
 protected:
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   RasterizeVectorDataFilter();
-  virtual ~RasterizeVectorDataFilter()
+  ~RasterizeVectorDataFilter() ITK_OVERRIDE
   {
     if (m_OGRDataSourcePointer != NULL)
       {
@@ -144,9 +144,9 @@ protected:
       }
   }
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   RasterizeVectorDataFilter(const Self&); //purposely not implemented
diff --git a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.h b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.h
index 85faf2380937782312f2bf4c5a989dddf13257a4..6ddb883859d21cd647ff7b3b400df55fa67fe8ed 100644
--- a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.h
@@ -121,10 +121,10 @@ public:
   void SetOutputParametersFromImage(const ImageBaseType * image);
 
 protected:
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   VectorDataToLabelImageFilter();
-  virtual ~VectorDataToLabelImageFilter()
+  ~VectorDataToLabelImageFilter() ITK_OVERRIDE
   {
     // Destroy the geometries stored
     for (unsigned int idx = 0; idx < m_SrcDataSetGeometries.size(); ++idx)
@@ -138,9 +138,9 @@ protected:
       }
   }
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   VectorDataToLabelImageFilter(const Self&); //purposely not implemented
diff --git a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapFilter.h b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapFilter.h
index 14dd953410e337ec26a3d0ef66c65f152db1c9d8..822efbde85aa5d4ae9ce5463dada93e90f211fdb 100644
--- a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapFilter.h
@@ -158,18 +158,18 @@ public:
   const InputVectorDataType * GetInput(void);
   const InputVectorDataType * GetInput(unsigned int idx);
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 protected:
   VectorDataToLabelMapFilter();
-  virtual ~VectorDataToLabelMapFilter() {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~VectorDataToLabelMapFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /**
    * Standard pipeline method.
    */
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** VectorDataToLabelMapFilter needs the entire input. Therefore
    * it must provide an implementation GenerateInputRequestedRegion().
diff --git a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapWithAttributesFilter.h b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapWithAttributesFilter.h
index bc4c9432586df99cfca7beac280e859da1adafd7..bc83a850edb958a9f67160853a76c177ff9dff68 100644
--- a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapWithAttributesFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapWithAttributesFilter.h
@@ -184,20 +184,20 @@ public:
 ; itkGetMacro(InitialLabel, LabelType)
 ;
 
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
 
 protected:
   VectorDataToLabelMapWithAttributesFilter();
-  virtual ~VectorDataToLabelMapWithAttributesFilter()
+  ~VectorDataToLabelMapWithAttributesFilter() ITK_OVERRIDE
   {
   }
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /**
    * Standard pipeline method.
    */
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** VectorDataToLabelMapWithAttributesFilter needs the entire input. Therefore
    * it must provide an implementation GenerateInputRequestedRegion().
diff --git a/Modules/Segmentation/Labelling/include/otbLabelToBoundaryImageFilter.h b/Modules/Segmentation/Labelling/include/otbLabelToBoundaryImageFilter.h
index b3f4778f46095321e91374ccb085b3fcde152c91..205e1bbd940a7fa3af9d2afd03f4145e0f33160d 100644
--- a/Modules/Segmentation/Labelling/include/otbLabelToBoundaryImageFilter.h
+++ b/Modules/Segmentation/Labelling/include/otbLabelToBoundaryImageFilter.h
@@ -93,7 +93,7 @@ protected:
   {
     this->SetRadius(1);
   }
-  virtual ~LabelToBoundaryImageFilter() { }
+  ~LabelToBoundaryImageFilter() ITK_OVERRIDE { }
 
 private:
   LabelToBoundaryImageFilter( const Self & ); // Not implemented
diff --git a/Modules/Segmentation/Labelling/include/otbLabelizeConfidenceConnectedImageFilter.h b/Modules/Segmentation/Labelling/include/otbLabelizeConfidenceConnectedImageFilter.h
index 9e3e9a2f2625df6e371fa5b4810a96b646d055ea..e08538013952a493d64835c6118babc13c89a83b 100644
--- a/Modules/Segmentation/Labelling/include/otbLabelizeConfidenceConnectedImageFilter.h
+++ b/Modules/Segmentation/Labelling/include/otbLabelizeConfidenceConnectedImageFilter.h
@@ -106,11 +106,11 @@ public:
 
 protected:
   LabelizeConfidenceConnectedImageFilter();
-  virtual ~LabelizeConfidenceConnectedImageFilter() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LabelizeConfidenceConnectedImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Region growing */
-  virtual void RegionGrowing(const IndexType indexSeed);
+  void RegionGrowing(const IndexType indexSeed) ITK_OVERRIDE;
 
 private:
   LabelizeConfidenceConnectedImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/Labelling/include/otbLabelizeConnectedThresholdImageFilter.h b/Modules/Segmentation/Labelling/include/otbLabelizeConnectedThresholdImageFilter.h
index f26a729e16da7b31f5dfc017b18061e5a25f4208..2e5e17e1ee6c5d1cbb1e3e5dc45c635f5dd62248 100644
--- a/Modules/Segmentation/Labelling/include/otbLabelizeConnectedThresholdImageFilter.h
+++ b/Modules/Segmentation/Labelling/include/otbLabelizeConnectedThresholdImageFilter.h
@@ -79,11 +79,11 @@ public:
 
 protected:
   LabelizeConnectedThresholdImageFilter();
-  virtual ~LabelizeConnectedThresholdImageFilter() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LabelizeConnectedThresholdImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Region growing */
-  virtual void RegionGrowing(const IndexType indexSeed);
+  void RegionGrowing(const IndexType indexSeed) ITK_OVERRIDE;
 
 private:
   LabelizeConnectedThresholdImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/Labelling/include/otbLabelizeImageFilterBase.h b/Modules/Segmentation/Labelling/include/otbLabelizeImageFilterBase.h
index 755d8856d646d82df72d97b9bb63734d7c9aba3b..47c929dd423d426b9d2ae5ab3d9acd853b408288 100644
--- a/Modules/Segmentation/Labelling/include/otbLabelizeImageFilterBase.h
+++ b/Modules/Segmentation/Labelling/include/otbLabelizeImageFilterBase.h
@@ -93,11 +93,11 @@ public:
 
 protected:
   LabelizeImageFilterBase();
-  virtual ~LabelizeImageFilterBase() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LabelizeImageFilterBase() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
   /** Region growing */
   virtual void RegionGrowing(const IndexType itkNotUsed(indexSeed)) {}
diff --git a/Modules/Segmentation/Labelling/include/otbLabelizeNeighborhoodConnectedImageFilter.h b/Modules/Segmentation/Labelling/include/otbLabelizeNeighborhoodConnectedImageFilter.h
index 5dcf88b29f4d498c757f7ac8a2124c044a1ef73c..9297700f18add34a1ce319384392d939a490d494 100644
--- a/Modules/Segmentation/Labelling/include/otbLabelizeNeighborhoodConnectedImageFilter.h
+++ b/Modules/Segmentation/Labelling/include/otbLabelizeNeighborhoodConnectedImageFilter.h
@@ -101,11 +101,11 @@ public:
 
 protected:
   LabelizeNeighborhoodConnectedImageFilter();
-  virtual ~LabelizeNeighborhoodConnectedImageFilter() {}
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~LabelizeNeighborhoodConnectedImageFilter() ITK_OVERRIDE {}
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
   /** Region growing */
-  virtual void RegionGrowing(const IndexType indexSeed);
+  void RegionGrowing(const IndexType indexSeed) ITK_OVERRIDE;
 
 private:
   LabelizeNeighborhoodConnectedImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/MeanShift/include/otbMeanShiftConnectedComponentSegmentationFilter.h b/Modules/Segmentation/MeanShift/include/otbMeanShiftConnectedComponentSegmentationFilter.h
index 5b394fd9593de55adeda3f8b1bfc5b2a24e04918..50f4ff7eb6dc3c773230cfef70f34513398078e8 100644
--- a/Modules/Segmentation/MeanShift/include/otbMeanShiftConnectedComponentSegmentationFilter.h
+++ b/Modules/Segmentation/MeanShift/include/otbMeanShiftConnectedComponentSegmentationFilter.h
@@ -127,10 +127,10 @@ public:
 protected:
   MeanShiftConnectedComponentSegmentationFilter();
 
-  virtual ~MeanShiftConnectedComponentSegmentationFilter();
+  ~MeanShiftConnectedComponentSegmentationFilter() ITK_OVERRIDE;
 
-  void GenerateInputRequestedRegion();
-  virtual void GenerateData();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
+  void GenerateData() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Segmentation/MeanShift/include/otbMeanShiftSegmentationFilter.h b/Modules/Segmentation/MeanShift/include/otbMeanShiftSegmentationFilter.h
index 7057b2016990e8c3a37f7aeb2088b7c16604e69f..6c85ef4fecd9638df078c5fc0e929504c21a712e 100644
--- a/Modules/Segmentation/MeanShift/include/otbMeanShiftSegmentationFilter.h
+++ b/Modules/Segmentation/MeanShift/include/otbMeanShiftSegmentationFilter.h
@@ -170,11 +170,11 @@ public:
 protected:
   MeanShiftSegmentationFilter();
 
-  virtual ~MeanShiftSegmentationFilter();
+  ~MeanShiftSegmentationFilter() ITK_OVERRIDE;
 
 //  virtual void GenerateOutputInformation(void);
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Segmentation/Metrics/include/otbHooverInstanceFilter.h b/Modules/Segmentation/Metrics/include/otbHooverInstanceFilter.h
index 200ceedde9e6d4f14fc9af6aaae72b345025ff35..249be41249ccc98d8dc37cf75abc4afdf4afce74 100644
--- a/Modules/Segmentation/Metrics/include/otbHooverInstanceFilter.h
+++ b/Modules/Segmentation/Metrics/include/otbHooverInstanceFilter.h
@@ -207,30 +207,30 @@ public:
 
 protected:
   HooverInstanceFilter();
-  ~HooverInstanceFilter() {};
+  ~HooverInstanceFilter() ITK_OVERRIDE {};
 
   /** Re implement the allocate output method to handle the second output correctly */
-  virtual void AllocateOutputs();
+  void AllocateOutputs() ITK_OVERRIDE;
 
   /** Re implement the release input method to handle the second input correctly */
-  virtual void ReleaseInputs();
+  void ReleaseInputs() ITK_OVERRIDE;
 
   /** Actions :
    *    - Fill cardinalities of GT regions
    */
-  virtual void ThreadedProcessLabelObject( LabelObjectType * labelObject );
+  void ThreadedProcessLabelObject( LabelObjectType * labelObject ) ITK_OVERRIDE;
 
   /** Actions:
    *    - Check matrix size
    *    - Init cardinalities lists
    *    - Fill cardinalities list for MS (GT is done by ThreadedProcessLabelObject)
    */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Actions :
    *    - Compute Hoover instances
    */
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Segmentation/Metrics/include/otbHooverMatrixFilter.h b/Modules/Segmentation/Metrics/include/otbHooverMatrixFilter.h
index fb2395bf90cb22fb5b16bdffa658365cca477e94..2b6e907d501645d4157ee87f35450064ebc50578 100644
--- a/Modules/Segmentation/Metrics/include/otbHooverMatrixFilter.h
+++ b/Modules/Segmentation/Metrics/include/otbHooverMatrixFilter.h
@@ -86,16 +86,16 @@ protected:
   /** Constructor */
   HooverMatrixFilter();
 
-  ~HooverMatrixFilter() {};
+  ~HooverMatrixFilter() ITK_OVERRIDE {};
 
   /** Action :  Resize the matrix
    */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() ITK_OVERRIDE;
 
   /** Action : fill the line of the confusion matrix corresponding to
    * the given label object
    */
-  virtual void ThreadedProcessLabelObject( LabelObjectType * labelObject );
+  void ThreadedProcessLabelObject( LabelObjectType * labelObject ) ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h
index c7290c59744daa911c443de3659901049d3cfdc1..3cb0fd9b2f046b7d9748337bb8a9f6849bc79e59 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h
@@ -76,15 +76,15 @@ protected:
   /** Constructor */
   ClosingOpeningMorphologicalFilter();
   /** Destructor */
-  ~ClosingOpeningMorphologicalFilter() {}
+  ~ClosingOpeningMorphologicalFilter() ITK_OVERRIDE {}
 
   /* void GenerateInputRequestedRegion(); */
   /*   void EnlargeOutputRequestedRegion(itk::DataObject *itkNotUsed(output)); */
 
   /** Main computation method */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ClosingOpeningMorphologicalFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbConvexOrConcaveClassificationFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbConvexOrConcaveClassificationFilter.h
index 0db26672c632fa7912377d2d55a30eb387fc2e58..dc06d0fb3bd611a4905a7b0ef45a341fa4a4cb11 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbConvexOrConcaveClassificationFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbConvexOrConcaveClassificationFilter.h
@@ -212,7 +212,7 @@ public:
    *
    */
   using Superclass::SetInput;
-  void SetInput(const TInputImage * image)
+  void SetInput(const TInputImage * image) ITK_OVERRIDE
   {
     this->SetInput1(image);
   }
@@ -239,7 +239,7 @@ public:
   itkGetMacro(Sigma, double);
 
   /** Set the functor parameters before calling the ThreadedGenerateData() */
-  virtual void BeforeThreadedGenerateData(void)
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE
   {
     this->GetFunctor().SetConvexLabel(m_ConvexLabel);
     this->GetFunctor().SetConcaveLabel(m_ConcaveLabel);
@@ -257,9 +257,9 @@ protected:
     m_Sigma        = 0.0;
     };
   /** Destructor */
-  virtual ~ConvexOrConcaveClassificationFilter() {}
+  ~ConvexOrConcaveClassificationFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << indent << "ConvexLabel: " << m_ConvexLabel << std::endl;
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyDecompositionImageFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyDecompositionImageFilter.h
index e7bdcf20e86b8e334623b839cfe351b907673c85..de12c24e38ae3e8493ae9d31ebc1995b02480502 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyDecompositionImageFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyDecompositionImageFilter.h
@@ -146,13 +146,13 @@ public:
 
 protected:
   /** GenerateData */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** Constructor */
   GeodesicMorphologyDecompositionImageFilter();
   /** Destructor */
-  virtual ~GeodesicMorphologyDecompositionImageFilter() {}
+  ~GeodesicMorphologyDecompositionImageFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   GeodesicMorphologyDecompositionImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyIterativeDecompositionImageFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyIterativeDecompositionImageFilter.h
index d29e0a923dff31c05915e1e7cf78002ad2aa866d..45661292d393d60c572c52a1d10a6f9b3fb9cf35 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyIterativeDecompositionImageFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyIterativeDecompositionImageFilter.h
@@ -113,7 +113,7 @@ public:
    * Get The leveling images for each scale.
    * \return The leveling images for each scale.
    */
-  OutputImageListType* GetOutput(void);
+  OutputImageListType* GetOutput(void) ITK_OVERRIDE;
   /**
    * Get convex membership function for each scale
    * \return The convex membership function for each scale.
@@ -129,15 +129,15 @@ protected:
   /** Constructor */
   GeodesicMorphologyIterativeDecompositionImageFilter();
   /** Destructor */
-  virtual ~GeodesicMorphologyIterativeDecompositionImageFilter() {}
+  ~GeodesicMorphologyIterativeDecompositionImageFilter() ITK_OVERRIDE {}
   /** Generate output information */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() ITK_OVERRIDE;
   /** Generate input requested region */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() ITK_OVERRIDE;
   /** Main computation method */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** Printself method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   /** The step for the scale analysis */
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyLevelingFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyLevelingFilter.h
index 2c2a999fb9c828881b64ba8be66159628d9fddae..90086726cbb8e8be9ff8234eb8cd393344795209 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyLevelingFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyLevelingFilter.h
@@ -114,7 +114,7 @@ public:
    * Set the original input image
    */
   using Superclass::SetInput;
-  void SetInput(const TInputImage * input)
+  void SetInput(const TInputImage * input) ITK_OVERRIDE
   {
     this->SetInput1(input);
   }
@@ -123,9 +123,9 @@ protected:
   /** Constructor */
   GeodesicMorphologyLevelingFilter() {};
   /** Destructor */
-  virtual ~GeodesicMorphologyLevelingFilter() {}
+  ~GeodesicMorphologyLevelingFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbImageToProfileFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbImageToProfileFilter.h
index eef5ff4957216ce221ef5410ee711379e9739d61..c6c20f4ef74c1b31376f706f1ffbebd39acc1dfb 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbImageToProfileFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbImageToProfileFilter.h
@@ -88,17 +88,17 @@ protected:
   /** Get the pointer to the filter */
   itkGetObjectMacro(Filter, FilterType);
   /** GenerateData method */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** GenerateOutputInformation method */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
   /** Generate input requested region */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
   /** Constructor */
   ImageToProfileFilter();
   /** Destructor */
-  virtual ~ImageToProfileFilter() {}
+  ~ImageToProfileFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ImageToProfileFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalClosingProfileFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalClosingProfileFilter.h
index c826c615a80504edb4e345f3077ec9c1b0be376c..39f39cbdb855e74ef1c06dbaef115f56c4433d2d 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalClosingProfileFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalClosingProfileFilter.h
@@ -74,7 +74,7 @@ public:
 
 protected:
   /** Set the profile parameter */
-  virtual void SetProfileParameter(ParameterType param)
+  void SetProfileParameter(ParameterType param) ITK_OVERRIDE
   {
     StructuringElementType se;
     se.SetRadius(param);
@@ -84,9 +84,9 @@ protected:
   /** Constructor */
   MorphologicalClosingProfileFilter() {};
   /** Destructor */
-  virtual ~MorphologicalClosingProfileFilter() {}
+  ~MorphologicalClosingProfileFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalOpeningProfileFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalOpeningProfileFilter.h
index 08330d8b9ca65ca249c880e37b9d284daedf73e7..44a2c1916b07cee14525e333997ec2ad7cff4d2f 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalOpeningProfileFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalOpeningProfileFilter.h
@@ -74,7 +74,7 @@ public:
 
 protected:
   /** Set the profile parameter */
-  virtual void SetProfileParameter(ParameterType param)
+  void SetProfileParameter(ParameterType param) ITK_OVERRIDE
   {
     StructuringElementType se;
     se.SetRadius(param);
@@ -84,9 +84,9 @@ protected:
   /** Constructor */
   MorphologicalOpeningProfileFilter() {};
   /** Destructor */
-  virtual ~MorphologicalOpeningProfileFilter() {}
+  ~MorphologicalOpeningProfileFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
   }
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalProfilesSegmentationFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalProfilesSegmentationFilter.h
index b6f6fc8ae34d2d8fba3a705ea5f35c05b7925067..44d8e23529497dc9099f996feca82cd35f5d24af 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalProfilesSegmentationFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbMorphologicalProfilesSegmentationFilter.h
@@ -103,9 +103,9 @@ itkGetConstReferenceMacro(Sigma,double);
 protected:
 MorphologicalProfilesSegmentationFilter();
 
-virtual ~MorphologicalProfilesSegmentationFilter();
+~MorphologicalProfilesSegmentationFilter() ITK_OVERRIDE;
 
-virtual void GenerateData();
+void GenerateData() ITK_OVERRIDE;
 
 private:
 typename OpeningProfileFilterType::Pointer m_OpeningProfile;
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbMultiScaleConvexOrConcaveClassificationFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbMultiScaleConvexOrConcaveClassificationFilter.h
index fe8b16dd9ea4c49dbba35e5e8a618866f751a448..3ff845f4d0f554830ef756f56bf82ae6a94d931c 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbMultiScaleConvexOrConcaveClassificationFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbMultiScaleConvexOrConcaveClassificationFilter.h
@@ -219,7 +219,7 @@ public:
   itkGetMacro(LabelSeparator, LabelType);
 
   /** Set the functor parameters before calling the ThreadedGenerateData() */
-  virtual void BeforeThreadedGenerateData(void)
+  void BeforeThreadedGenerateData(void) ITK_OVERRIDE
   {
     this->GetFunctor().SetLabelSeparator(m_LabelSeparator);
     this->GetFunctor().SetSigma(m_Sigma);
@@ -233,9 +233,9 @@ protected:
     m_Sigma          = 0.0;
     };
   /** Destructor */
-  virtual ~MultiScaleConvexOrConcaveClassificationFilter() {}
+  ~MultiScaleConvexOrConcaveClassificationFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE
   {
     Superclass::PrintSelf(os, indent);
     os << indent << "LabelSeparator: " << m_LabelSeparator << std::endl;
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h
index 7bcf55ab9f92876ffac18e4db00ffeb431b7cfdd..a610b9b825562d0c48f0f0e38adccb60eace323d 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h
@@ -76,15 +76,15 @@ protected:
   /** Constructor */
   OpeningClosingMorphologicalFilter();
   /** Destructor */
-  ~OpeningClosingMorphologicalFilter() {}
+  ~OpeningClosingMorphologicalFilter() ITK_OVERRIDE {}
 
   /* void GenerateInputRequestedRegion(); */
   /*   void EnlargeOutputRequestedRegion(itk::DataObject *itkNotUsed(output)); */
 
   /** Main computation method */
-  void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
   /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   OpeningClosingMorphologicalFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbProfileDerivativeToMultiScaleCharacteristicsFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbProfileDerivativeToMultiScaleCharacteristicsFilter.h
index 4280c2a3448f9ed77286f05ce5397bd43c620164..a698af343a5106611a75a8c0144256b5cdd846fd 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbProfileDerivativeToMultiScaleCharacteristicsFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbProfileDerivativeToMultiScaleCharacteristicsFilter.h
@@ -83,26 +83,26 @@ public:
 
 protected:
   /** Main computation method */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
 
   /** GenerateOutputInformation
    * Set the number of bands of the output.
    * Copy information from the first image of the list if existing.
    **/
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /**
    * GenerateInputRequestedRegion
    * Set the requested region of each image in the list.
    */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
   /** Constructor */
   ProfileDerivativeToMultiScaleCharacteristicsFilter();
   /** Destructor */
-  virtual ~ProfileDerivativeToMultiScaleCharacteristicsFilter() {}
+  ~ProfileDerivativeToMultiScaleCharacteristicsFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ProfileDerivativeToMultiScaleCharacteristicsFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbProfileToProfileDerivativeFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbProfileToProfileDerivativeFilter.h
index 98048b8aa8e13cc8cb04e4d9135a386ebb17ecb4..e0046df414d47530bdc07975a3f1b061f43cd0c3 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbProfileToProfileDerivativeFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbProfileToProfileDerivativeFilter.h
@@ -75,20 +75,20 @@ public:
 
   /** Generate output information for the ImageList and for each image
       in the list. */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) ITK_OVERRIDE;
 
   /** Generate input requested region for each image in the list. */
-  virtual void GenerateInputRequestedRegion(void);
+  void GenerateInputRequestedRegion(void) ITK_OVERRIDE;
 
 protected:
   /** Main computation method */
-  virtual void GenerateData(void);
+  void GenerateData(void) ITK_OVERRIDE;
   /** Constructor */
   ProfileToProfileDerivativeFilter();
   /** Destructor */
-  virtual ~ProfileToProfileDerivativeFilter() {}
+  ~ProfileToProfileDerivativeFilter() ITK_OVERRIDE {}
   /**PrintSelf method */
-  virtual void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  void PrintSelf(std::ostream& os, itk::Indent indent) const ITK_OVERRIDE;
 
 private:
   ProfileToProfileDerivativeFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.h b/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.h
index 4f606468e75eefd8db2c22fea84221aa0d2e2497..839659e70d18273529b87bf758d5a59db49fe532 100644
--- a/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.h
+++ b/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.h
@@ -103,11 +103,11 @@ public:
   itkGetMacro(StreamSize, SizeType);
 
   /** Generate Data method. This method must be called explicitly (not through the \c Update method). */
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 protected:
   OGRLayerStreamStitchingFilter();
-  virtual ~OGRLayerStreamStitchingFilter() {}
+  ~OGRLayerStreamStitchingFilter() ITK_OVERRIDE {}
 
   struct FusionStruct
   {
diff --git a/Modules/Segmentation/OGRProcessing/include/otbStreamingImageToOGRLayerSegmentationFilter.h b/Modules/Segmentation/OGRProcessing/include/otbStreamingImageToOGRLayerSegmentationFilter.h
index fea9821b8f3ba2d5cb3588d6b078c2b1eab09885..497878d1320cb8386e147ced84b2db19f3ff1888 100644
--- a/Modules/Segmentation/OGRProcessing/include/otbStreamingImageToOGRLayerSegmentationFilter.h
+++ b/Modules/Segmentation/OGRProcessing/include/otbStreamingImageToOGRLayerSegmentationFilter.h
@@ -143,14 +143,14 @@ public:
 protected:
   PersistentImageToOGRLayerSegmentationFilter();
 
-  virtual ~PersistentImageToOGRLayerSegmentationFilter();
+  ~PersistentImageToOGRLayerSegmentationFilter() ITK_OVERRIDE;
 
 
 private:
   PersistentImageToOGRLayerSegmentationFilter(const Self &); //purposely not implemented
   void operator =(const Self&); //purposely not implemented
 
-  virtual OGRDataSourcePointerType ProcessTile();
+  OGRDataSourcePointerType ProcessTile() ITK_OVERRIDE;
 
 
   int m_TileMaxLabel;
@@ -348,7 +348,7 @@ protected:
   /** Constructor */
   StreamingImageToOGRLayerSegmentationFilter() {}
   /** Destructor */
-  virtual ~StreamingImageToOGRLayerSegmentationFilter() {}
+  ~StreamingImageToOGRLayerSegmentationFilter() ITK_OVERRIDE {}
 
 private:
   StreamingImageToOGRLayerSegmentationFilter(const Self &); //purposely not implemented
diff --git a/Modules/Segmentation/Watersheds/include/otbWatershedSegmentationFilter.h b/Modules/Segmentation/Watersheds/include/otbWatershedSegmentationFilter.h
index 2f16a8587d2c2db5f5430d8a6c36f92c7b04acc6..5befddd5d9a0d3b596624ba7f0411eb865b050e8 100644
--- a/Modules/Segmentation/Watersheds/include/otbWatershedSegmentationFilter.h
+++ b/Modules/Segmentation/Watersheds/include/otbWatershedSegmentationFilter.h
@@ -81,9 +81,9 @@ public:
 protected:
   WatershedSegmentationFilter();
 
-  virtual ~WatershedSegmentationFilter();
+  ~WatershedSegmentationFilter() ITK_OVERRIDE;
 
-  virtual void GenerateData();
+  void GenerateData() ITK_OVERRIDE;
 
 private:
   typename CastImageFilterType::Pointer m_CastFilter;
diff --git a/Modules/ThirdParty/ITK/include/itkImageRegionSplitter.h b/Modules/ThirdParty/ITK/include/itkImageRegionSplitter.h
index 8e0038df600510da12885b5132564a2f0c46ad24..fc5cbd91c02698f78f7a21b02fbf4b68c481dc45 100644
--- a/Modules/ThirdParty/ITK/include/itkImageRegionSplitter.h
+++ b/Modules/ThirdParty/ITK/include/itkImageRegionSplitter.h
@@ -121,12 +121,12 @@ public:
 
 protected:
   ImageRegionSplitter() {}
-  ~ImageRegionSplitter() {}
+  ~ImageRegionSplitter() override {}
 
-  virtual unsigned int GetNumberOfSplitsInternal(unsigned int,
+  unsigned int GetNumberOfSplitsInternal(unsigned int,
                                          const IndexValueType regionIndex[],
                                          const SizeValueType regionSize[],
-                                         unsigned int requestedNumber) const
+                                         unsigned int requestedNumber) const override
   {
     // this function adapts the legecy method, defined in this class
     // be used by the ImageRegionSplitterBase.
@@ -141,11 +141,11 @@ protected:
 
   }
 
-  virtual unsigned int GetSplitInternal(unsigned int dim,
+  unsigned int GetSplitInternal(unsigned int dim,
                                 unsigned int i,
                                 unsigned int numberOfPieces,
                                 IndexValueType regionIndex[],
-                                SizeValueType regionSize[]) const
+                                SizeValueType regionSize[]) const override
   {
     // this function adapts the legecy method, defined in this class
     // be used by the ImageRegionSplitterBase.
@@ -166,7 +166,7 @@ protected:
     return numberOfPieces;
   }
 
-  void PrintSelf(std::ostream & os, Indent indent) const;
+  void PrintSelf(std::ostream & os, Indent indent) const override;
 
 private:
   ImageRegionSplitter(const ImageRegionSplitter &); //purposely not implemented
diff --git a/Modules/ThirdParty/ITK/include/itkTransformToDisplacementFieldSource.h b/Modules/ThirdParty/ITK/include/itkTransformToDisplacementFieldSource.h
index 8109c31e97dd94417e439960d5e8a84c8a6d01e1..2a9b77c3947c9757ba8fadc43f3d11feb789cfef 100644
--- a/Modules/ThirdParty/ITK/include/itkTransformToDisplacementFieldSource.h
+++ b/Modules/ThirdParty/ITK/include/itkTransformToDisplacementFieldSource.h
@@ -154,13 +154,13 @@ public:
   void SetOutputParametersFromImage(const ImageBaseType *image);
 
   /** DisplacementFieldImageFilter produces a vector image. */
-  virtual void GenerateOutputInformation(void);
+  void GenerateOutputInformation(void) override;
 
   /** Just checking if transform is set. */
-  virtual void BeforeThreadedGenerateData(void);
+  void BeforeThreadedGenerateData(void) override;
 
   /** Compute the Modified Time based on changes to the components. */
-  ModifiedTimeType GetMTime(void) const;
+  ModifiedTimeType GetMTime(void) const override;
 
 #ifdef ITK_USE_CONCEPT_CHECKING
   /** Begin concept checking */
@@ -173,16 +173,16 @@ public:
 
 protected:
   TransformToDisplacementFieldSource(void);
-  ~TransformToDisplacementFieldSource(void) {}
+  ~TransformToDisplacementFieldSource(void) override {}
 
-  void PrintSelf(std::ostream & os, Indent indent) const;
+  void PrintSelf(std::ostream & os, Indent indent) const override;
 
   /** TransformToDisplacementFieldSource can be implemented as a multithreaded
    * filter.
    */
   void ThreadedGenerateData(
     const OutputImageRegionType & outputRegionForThread,
-    ThreadIdType threadId);
+    ThreadIdType threadId) override;
 
   /** Default implementation for resampling that works for any
    * transformation type.
diff --git a/Modules/ThirdParty/ITK/include/itkUnaryFunctorImageFilter.h b/Modules/ThirdParty/ITK/include/itkUnaryFunctorImageFilter.h
index 8d223d88eec06ea6cdcde85499120175c1b32da8..8e268752d5f889131ade395ca86dd8d546d630f6 100644
--- a/Modules/ThirdParty/ITK/include/itkUnaryFunctorImageFilter.h
+++ b/Modules/ThirdParty/ITK/include/itkUnaryFunctorImageFilter.h
@@ -102,7 +102,7 @@ public:
 
 protected:
   UnaryFunctorImageFilter();
-  virtual ~UnaryFunctorImageFilter() {}
+  ~UnaryFunctorImageFilter() override {}
 
   /** UnaryFunctorImageFilter can produce an image which is a different
    * resolution than its input image.  As such, UnaryFunctorImageFilter
@@ -112,7 +112,7 @@ protected:
    * below.
    *
    * \sa ProcessObject::GenerateOutputInformaton()  */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() override;
 
   /** UnaryFunctorImageFilter can be implemented as a multithreaded filter.
    * Therefore, this implementation provides a ThreadedGenerateData() routine
@@ -125,7 +125,7 @@ protected:
    * \sa ImageToImageFilter::ThreadedGenerateData(),
    *     ImageToImageFilter::GenerateData()  */
   void ThreadedGenerateData(const OutputImageRegionType & outputRegionForThread,
-                            ThreadIdType threadId);
+                            ThreadIdType threadId) override;
 
 private:
   UnaryFunctorImageFilter(const Self &); //purposely not implemented
diff --git a/Modules/ThirdParty/ITK/include/otbWarpImageFilter.h b/Modules/ThirdParty/ITK/include/otbWarpImageFilter.h
index 19f46d9a65ff4f4e1a6abc8aa8870e3a8de0f3d9..083a45df5b9aebd87595d429c80ba9ab246a9876 100644
--- a/Modules/ThirdParty/ITK/include/otbWarpImageFilter.h
+++ b/Modules/ThirdParty/ITK/include/otbWarpImageFilter.h
@@ -200,7 +200,7 @@ public:
    * implemenation for GenerateOutputInformation() which set
    * the output information according the OutputSpacing, OutputOrigin
    * and the deformation field's LargestPossibleRegion. */
-  virtual void GenerateOutputInformation();
+  void GenerateOutputInformation() override;
 
   /** It is difficult to compute in advance the input image region
    * required to compute the requested output region. Thus the safest
@@ -208,15 +208,15 @@ public:
    *
    * For the deformation field, the input requested region
    * set to be the same as that of the output requested region. */
-  virtual void GenerateInputRequestedRegion();
+  void GenerateInputRequestedRegion() override;
 
   /** This method is used to set the state of the filter before
    * multi-threading. */
-  virtual void BeforeThreadedGenerateData();
+  void BeforeThreadedGenerateData() override;
 
   /** This method is used to set the state of the filter after
    * multi-threading. */
-  virtual void AfterThreadedGenerateData();
+  void AfterThreadedGenerateData() override;
 
 #ifdef ITK_USE_CONCEPT_CHECKING
   /** Begin concept checking */
@@ -233,21 +233,21 @@ public:
 
 protected:
   WarpImageFilter();
-  virtual ~WarpImageFilter() {};
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+  ~WarpImageFilter() override {};
+  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
 
   /** WarpImageFilter is implemented as a multi-threaded filter.
    * As such, it needs to provide and implementation for
    * ThreadedGenerateData(). */
   void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId );
+                            itk::ThreadIdType threadId ) override;
 
   /** Override VerifyInputInformation() since this filter's inputs do
     * not need to occupy the same physical space.
     *
     * \sa ProcessObject::VerifyInputInformation
     */
-   virtual void VerifyInputInformation() {}
+   void VerifyInputInformation() override {}
 
 private:
 
diff --git a/Modules/Visualization/Ice/include/otbFragmentShader.h b/Modules/Visualization/Ice/include/otbFragmentShader.h
index 6a33fa95fe453f91929a47fe2f3af363253c0d84..2be27f07fcf60d837d523ed12e176c335efab87a 100644
--- a/Modules/Visualization/Ice/include/otbFragmentShader.h
+++ b/Modules/Visualization/Ice/include/otbFragmentShader.h
@@ -53,7 +53,7 @@ public:
 protected:
   FragmentShader();
 
-  virtual ~FragmentShader();
+  ~FragmentShader() ITK_OVERRIDE;
 
   void BuildShader();
 
diff --git a/Modules/Visualization/Ice/include/otbFragmentShaderRegistry.h b/Modules/Visualization/Ice/include/otbFragmentShaderRegistry.h
index 8f1e4b2fe25928405af5eb1f7a728908f7b08e33..d8f9d5d39817105935cc7cadf70bbbcb96ba8b83 100644
--- a/Modules/Visualization/Ice/include/otbFragmentShaderRegistry.h
+++ b/Modules/Visualization/Ice/include/otbFragmentShaderRegistry.h
@@ -52,7 +52,7 @@ public:
 protected:
   FragmentShaderRegistry();
 
-  virtual ~FragmentShaderRegistry();
+  ~FragmentShaderRegistry() ITK_OVERRIDE;
 
 private:
   typedef std::map<std::string, std::pair<unsigned int, unsigned int> > ShaderMapType;
diff --git a/Modules/Visualization/Ice/include/otbGlActor.h b/Modules/Visualization/Ice/include/otbGlActor.h
index 3b73e2135be33375bf2bdca35d770a1c553fe09c..797ed995c15fb36646e70e98767dcc0c9fbcfb96 100644
--- a/Modules/Visualization/Ice/include/otbGlActor.h
+++ b/Modules/Visualization/Ice/include/otbGlActor.h
@@ -70,7 +70,7 @@ public:
 protected:
   GlActor();
 
-  virtual ~GlActor();
+  ~GlActor() ITK_OVERRIDE;
 
 private:
   // prevent implementation
diff --git a/Modules/Visualization/Ice/include/otbGlImageActor.h b/Modules/Visualization/Ice/include/otbGlImageActor.h
index 5e6e7a744415e5afe3878fedbd07d759a09128cc..ad5e125f5428c651d6d4698ac721d05076735f55 100644
--- a/Modules/Visualization/Ice/include/otbGlImageActor.h
+++ b/Modules/Visualization/Ice/include/otbGlImageActor.h
@@ -77,16 +77,16 @@ public:
   void Initialize(const std::string & filename);
 
   // Retrieve the full extent of the actor
-  virtual void GetExtent(double & ulx, double & uly, double & lrx, double & lry) const;
+  void GetExtent(double & ulx, double & uly, double & lrx, double & lry) const ITK_OVERRIDE;
 
   // Update internal actor state with respect to ViewSettings
-  virtual void ProcessViewSettings();
+  void ProcessViewSettings() ITK_OVERRIDE;
 
   // Heavy load/unload operations of data
-  virtual void UpdateData();
+  void UpdateData() ITK_OVERRIDE;
 
   // Gl rendering of current state
-  virtual void Render();
+  void Render() ITK_OVERRIDE;
 
   // Automatic color adjustment
   void AutoColorAdjustment( double & minRed, double & maxRed,
@@ -98,15 +98,15 @@ public:
 
   const PointType & GetOrigin() const;
 
-  virtual const GeoInterface::Spacing2 & GetSpacing() const;
+  const GeoInterface::Spacing2 & GetSpacing() const ITK_OVERRIDE;
 
-  virtual std::string GetWkt() const;
+  std::string GetWkt() const ITK_OVERRIDE;
 
   ImageKeywordlistType GetKwl() const;
 
-  virtual bool HasKwl() const;
+  bool HasKwl() const ITK_OVERRIDE;
 
-  bool GetKwl( ImageKeywordlist & ) const;
+  bool GetKwl( ImageKeywordlist & ) const ITK_OVERRIDE;
 
   MetaDataDictionaryType & GetMetaDataDictionary() const;
 
@@ -186,13 +186,13 @@ public:
   // otb::GlActor overloads.
   //
 
-  virtual bool TransformFromViewport( Point2d & out,
+  bool TransformFromViewport( Point2d & out,
                                       const Point2d & in,
-                                      bool isPhysical = true ) const;
+                                      bool isPhysical = true ) const ITK_OVERRIDE;
 
-  virtual bool TransformToViewport( Point2d & out,
+  bool TransformToViewport( Point2d & out,
                                     const Point2d & in,
-                                    bool isPhysical = true ) const;
+                                    bool isPhysical = true ) const ITK_OVERRIDE;
 
 
   void UpdateTransforms();
@@ -200,7 +200,7 @@ public:
 protected:
   GlImageActor();
   
-  virtual ~GlImageActor();
+  ~GlImageActor() ITK_OVERRIDE;
 
   typedef ImageFileReader<VectorImageType>                                        ReaderType;
   typedef MultiChannelExtractROI<float,float>                                     ExtractROIFilterType;
diff --git a/Modules/Visualization/Ice/include/otbGlROIActor.h b/Modules/Visualization/Ice/include/otbGlROIActor.h
index 910777a24748967acf2f965142ff411857fe6ef7..469a0923bc55cbee69e57bffe3e49e5f93c20d72 100644
--- a/Modules/Visualization/Ice/include/otbGlROIActor.h
+++ b/Modules/Visualization/Ice/include/otbGlROIActor.h
@@ -46,16 +46,16 @@ public:
   itkNewMacro(Self);
 
   // Retrieve the full extent of the actor
-  virtual void GetExtent(double & ulx, double & uly, double & lrx, double & lry) const;
+  void GetExtent(double & ulx, double & uly, double & lrx, double & lry) const ITK_OVERRIDE;
 
   // Update internal actor state with respect to ViewSettings
-  virtual void ProcessViewSettings();
+  void ProcessViewSettings() ITK_OVERRIDE;
 
   // Heavy load/unload operations of data
-  virtual void UpdateData();
+  void UpdateData() ITK_OVERRIDE;
 
   // Gl rendering of current state
-  virtual void Render();
+  void Render() ITK_OVERRIDE;
 
   void SetUL( const PointType & );
 
@@ -84,7 +84,7 @@ public:
 protected:
   GlROIActor();
   
-  virtual ~GlROIActor();
+  ~GlROIActor() ITK_OVERRIDE;
   
 private:
   // prevent implementation
diff --git a/Modules/Visualization/Ice/include/otbGlVectorActor.h b/Modules/Visualization/Ice/include/otbGlVectorActor.h
index e833ae65af4de8b622ba12e689f07ae0037162b7..f36e99d4cfcfc4d714279627c2f35751d722fb40 100644
--- a/Modules/Visualization/Ice/include/otbGlVectorActor.h
+++ b/Modules/Visualization/Ice/include/otbGlVectorActor.h
@@ -64,19 +64,19 @@ public:
   void SetCurrentLayer(const std::string & layername);
 
   // Retrieve the full extent of the actor
-  virtual void GetExtent(double & ulx, double & uly, double & lrx, double & lry) const;
+  void GetExtent(double & ulx, double & uly, double & lrx, double & lry) const ITK_OVERRIDE;
 
   // Return actor extent in its own geometry
   void GetBoundingBox(double & ulx, double & uly, double & lrx, double & lry) const;
 
   // Update internal actor state with respect to ViewSettings
-  virtual void ProcessViewSettings();
+  void ProcessViewSettings() ITK_OVERRIDE;
 
   // Heavy load/unload operations of data
-  virtual void UpdateData();
+  void UpdateData() ITK_OVERRIDE;
 
   // Gl rendering of current state
-  virtual void Render();
+  void Render() ITK_OVERRIDE;
 
   PointType ViewportToVectorTransform(const PointType & point) const;
 
@@ -103,21 +103,21 @@ public:
   itkSetMacro(LineWidth,double);
   itkGetConstReferenceMacro(LineWidth,double);
 
-  std::string GetWkt() const;
+  std::string GetWkt() const ITK_OVERRIDE;
 
   //
   // otb::GlActor overloads.
   //
 
-  virtual bool TransformFromViewport( Point2d & out,
+  bool TransformFromViewport( Point2d & out,
                                       const Point2d & in,
-                                      bool isPhysical = true ) const;
+                                      bool isPhysical = true ) const ITK_OVERRIDE;
 
 
 protected:
   GlVectorActor();
   
-  virtual ~GlVectorActor();
+  ~GlVectorActor() ITK_OVERRIDE;
 
 
   // Internal class to hold tiles
diff --git a/Modules/Visualization/Ice/include/otbGlView.h b/Modules/Visualization/Ice/include/otbGlView.h
index 4538835ec7a0d238059402307c2560db438154eb..7c479ecaf8910bfe6007cd6c6bf7c55d33696b37 100644
--- a/Modules/Visualization/Ice/include/otbGlView.h
+++ b/Modules/Visualization/Ice/include/otbGlView.h
@@ -277,7 +277,7 @@ public:
 protected:
   GlView();
 
-  virtual ~GlView();
+  ~GlView() ITK_OVERRIDE;
 
 private:
   // prevent implementation
diff --git a/Modules/Visualization/Ice/include/otbImageSettings.h b/Modules/Visualization/Ice/include/otbImageSettings.h
index 16b2de0deab33cb3e001b6f75fe36edca56c3b5f..fadf4000d55bfa70937180948c486af554a298cd 100644
--- a/Modules/Visualization/Ice/include/otbImageSettings.h
+++ b/Modules/Visualization/Ice/include/otbImageSettings.h
@@ -78,7 +78,7 @@ public:
 protected:
   ImageSettings();
 
-  virtual ~ImageSettings();
+  ~ImageSettings() ITK_OVERRIDE;
 
 
 private:
diff --git a/Modules/Visualization/Ice/include/otbStandardShader.h b/Modules/Visualization/Ice/include/otbStandardShader.h
index 3ce2d7863f3289394c1569e698c9512c60808fc7..551264ed884cc36000adedc8354c08358a7bf5a7 100644
--- a/Modules/Visualization/Ice/include/otbStandardShader.h
+++ b/Modules/Visualization/Ice/include/otbStandardShader.h
@@ -78,18 +78,18 @@ public:
   itkSetMacro(Center,PointType);
   itkGetConstReferenceMacro(Center,PointType);
 
-  virtual void SetupShader();
+  void SetupShader() ITK_OVERRIDE;
 
   itkNewMacro(Self);
 
 protected:
   StandardShader();
 
-  virtual ~StandardShader();
+  ~StandardShader() ITK_OVERRIDE;
 
-  virtual std::string GetSource() const;
+  std::string GetSource() const ITK_OVERRIDE;
 
-  virtual std::string GetName() const;
+  std::string GetName() const ITK_OVERRIDE;
 
 private:
   // prevent implementation
diff --git a/Modules/Visualization/Ice/include/otbViewSettings.h b/Modules/Visualization/Ice/include/otbViewSettings.h
index 14d28bc8e4e07f4085dfe16095962d94810038d1..baab606d0378ac3134e6d05d2a4831ecfe0197fa 100644
--- a/Modules/Visualization/Ice/include/otbViewSettings.h
+++ b/Modules/Visualization/Ice/include/otbViewSettings.h
@@ -141,7 +141,7 @@ public:
 protected:
   ViewSettings();
 
-  virtual ~ViewSettings();
+  ~ViewSettings() ITK_OVERRIDE;
 
 private:
   // prevent implementation
diff --git a/Modules/Visualization/IceViewer/include/otbIceViewer.h b/Modules/Visualization/IceViewer/include/otbIceViewer.h
index 17ef657c780681ebfa98efd8d5b886e224a0f41b..c4fb0b426df991f1b88c491a17c593ec686d6f82 100644
--- a/Modules/Visualization/IceViewer/include/otbIceViewer.h
+++ b/Modules/Visualization/IceViewer/include/otbIceViewer.h
@@ -73,7 +73,7 @@ protected:
 
   IceViewer();
 
-  virtual ~IceViewer();
+  ~IceViewer() ITK_OVERRIDE;
 
  // Non-static callbacks
   virtual void scroll_callback(GLFWwindow * window, double xoffset, double yoffset);
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperAddProcessToWatchEvent.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperAddProcessToWatchEvent.h
index f8ee6e658ee0258fef663cbf87d34367d24bb4c4..b2c130f3e96a6bd632ccf8d12df9bb055be57373 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperAddProcessToWatchEvent.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperAddProcessToWatchEvent.h
@@ -42,7 +42,7 @@ public:
 
   AddProcessToWatchEvent(){}
   AddProcessToWatchEvent(const Self& s) :itk::EventObject(s){};
-  virtual ~AddProcessToWatchEvent() {}
+  ~AddProcessToWatchEvent() ITK_OVERRIDE {}
 
   /** Set/Get the process to watch */
   virtual void SetProcess(itk::ProcessObject * process)
@@ -66,16 +66,16 @@ public:
   }
 
   /** Virtual pure method to implement */
-  virtual itk::EventObject* MakeObject() const
+  itk::EventObject* MakeObject() const ITK_OVERRIDE
   {
     return new Self;
   }
 
-  virtual const char* GetEventName() const
+  const char* GetEventName() const ITK_OVERRIDE
   {
     return "AddProcess";
   }
-  virtual bool CheckEvent(const itk::EventObject* e) const
+  bool CheckEvent(const itk::EventObject* e) const ITK_OVERRIDE
   {
     return dynamic_cast<const Self*>(e);
   }
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
index 955a76b4359918001c2a1a4fa58bd68147a37c71..137fb11f0f83be9365c71cee8f9382574cfec8cc 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
@@ -653,7 +653,7 @@ protected:
   Application();
 
   /** Destructor */
-  virtual ~Application();
+  ~Application() ITK_OVERRIDE;
 
   /* Register a ProcessObject as a new progress source */
   void AddProcess(itk::ProcessObject* object, std::string description);
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationFactory.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationFactory.h
index 755cb26926a4421bf44a7ae34f5a648c59de6359..d38adeab070b4f98e74f8cfb636f361801fa9ee3 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationFactory.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationFactory.h
@@ -37,12 +37,12 @@ public:
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Class methods used to interface with the registered factories. */
-  virtual const char* GetITKSourceVersion(void) const
+  const char* GetITKSourceVersion(void) const ITK_OVERRIDE
     {
     return ITK_SOURCE_VERSION;
     }
 
-  virtual const char* GetDescription(void) const
+  const char* GetDescription(void) const ITK_OVERRIDE
     {
     return "ApplicationFactory";
     }
@@ -71,7 +71,7 @@ protected:
 
   }
 
-  virtual ~ApplicationFactory()
+  ~ApplicationFactory() ITK_OVERRIDE
   {
 
   }
@@ -79,7 +79,7 @@ protected:
   /** This method is provided by sub-classes of ObjectFactoryBase.
    * It should create the named itk object or return 0 if that object
    * is not supported by the factory implementation. */
-  virtual LightObject::Pointer CreateObject(const char* itkclassname )
+  LightObject::Pointer CreateObject(const char* itkclassname ) ITK_OVERRIDE
   {
     LightObject::Pointer ret;
     if ( m_ClassName == itkclassname)
@@ -91,8 +91,8 @@ protected:
   /** This method creates all the objects with the class overide of
    * itkclass name, which are provide by this object
    */
-  virtual std::list<LightObject::Pointer>
-  CreateAllObject(const char* itkclassname)
+  std::list<LightObject::Pointer>
+  CreateAllObject(const char* itkclassname) ITK_OVERRIDE
   {
     const std::string applicationClass("otbWrapperApplication");
     std::list<LightObject::Pointer> list;
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationFactoryBase.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationFactoryBase.h
index 095cc88264d7379f01df60335835fa977bd6ebea..e26932323df49780573af600e2526bf38bf50e13 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationFactoryBase.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationFactoryBase.h
@@ -44,7 +44,7 @@ public:
 protected:
   ApplicationFactoryBase(){}
 
-  virtual ~ApplicationFactoryBase(){}
+  ~ApplicationFactoryBase() ITK_OVERRIDE{}
 
 private:
   ApplicationFactoryBase(const Self &); //purposely not implemented
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationRegistry.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationRegistry.h
index ba6a46771e7ae17bda62838de7a629f9af490790..cdf2cffd4fbf853b49e21191df3809dde0487b38 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationRegistry.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplicationRegistry.h
@@ -76,7 +76,7 @@ public:
 
 protected:
   ApplicationRegistry();
-  virtual ~ApplicationRegistry();
+  ~ApplicationRegistry() ITK_OVERRIDE;
 
 private:
   ApplicationRegistry(const Self&); //purposely not implemented
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperChoiceParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperChoiceParameter.h
index 5cff129f7f3810093460739f5735f96b795c0300..e17a6cb94c8db5f9fd4b04f866416ac2a67f523e 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperChoiceParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperChoiceParameter.h
@@ -85,13 +85,13 @@ public:
   /** Return any value */
   virtual unsigned int GetValue();
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     // a choice parameter always has a value
     return true;
   }
 
-  void ClearValue()
+  void ClearValue() ITK_OVERRIDE
   {
     // nothing to do : a choice parameter always has a value
   }
@@ -101,7 +101,7 @@ protected:
   ChoiceParameter();
 
   /** Destructor */
-  virtual ~ChoiceParameter();
+  ~ChoiceParameter() ITK_OVERRIDE;
 
   struct Choice
   {
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexInputImageParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexInputImageParameter.h
index 14eccd1f253c8a433b71912c8066f1dae79d3e3f..8720c610e5d670e05a8f7a2bf6b5e73bfdd2b471 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexInputImageParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexInputImageParameter.h
@@ -87,9 +87,9 @@ public:
   template <class TComplexInputImage, class TOutputImage>
     TOutputImage* CastVectorImageFromImage();
 
-  bool HasValue() const;
+  bool HasValue() const ITK_OVERRIDE;
 
-  void ClearValue();
+  void ClearValue() ITK_OVERRIDE;
 
 
 protected:
@@ -97,7 +97,7 @@ protected:
   ComplexInputImageParameter();
 
   /** Destructor */
-  virtual ~ComplexInputImageParameter();
+  ~ComplexInputImageParameter() ITK_OVERRIDE;
 
   ImageBaseType::Pointer m_Image;
   std::string m_FileName;
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexOutputImageParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexOutputImageParameter.h
index 5edf833fba0223b968eb6e8170199453c066996b..4cc28634994bdcdf459aa133537bf74f9a325e7d 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexOutputImageParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexOutputImageParameter.h
@@ -74,7 +74,7 @@ public:
   itkGetMacro(RAMValue, unsigned int);
 
   /** Implement the reset method (replace pixel type by default type) */
-  virtual void Reset()
+  void Reset() ITK_OVERRIDE
   {
     m_ComplexPixelType = m_DefaultComplexPixelType;
   }
@@ -83,7 +83,7 @@ public:
   static std::string ConvertPixelTypeToString(ComplexImagePixelType type);
 
   /** Return true if a filename is set */
-  bool HasValue() const;
+  bool HasValue() const ITK_OVERRIDE;
 
   void SetFileName (const char* filename)
   {
@@ -107,7 +107,7 @@ protected:
   /** Constructor */
   ComplexOutputImageParameter();
   /** Destructor */
-  virtual ~ComplexOutputImageParameter();
+  ~ComplexOutputImageParameter() ITK_OVERRIDE;
 
   template <class TInputImageType>
     void SwitchImageWrite();
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperDirectoryParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperDirectoryParameter.h
index 9051bef4d3c6047e6c960e134ea0ee22141c827c..1c174b94cef86dbe15d2be40ecc5affe66ee8cf0 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperDirectoryParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperDirectoryParameter.h
@@ -49,7 +49,7 @@ public:
   /** RTTI support */
   itkTypeMacro(DirectoryParameter, Parameter);
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     return m_StringParam->HasValue();
   }
@@ -59,13 +59,13 @@ public:
   otbGetObjectMemberMacro(StringParam, Value , std::string);
 
   // Clear Value
-  void ClearValue()
+  void ClearValue() ITK_OVERRIDE
   {
     m_StringParam->ClearValue();
   }
 
   // Reimplement the SetActive method
-  void SetActive(  const bool value )
+  void SetActive(  const bool value ) ITK_OVERRIDE
   {
     Superclass::SetActive( value );
     m_StringParam->SetActive( value );
@@ -82,7 +82,7 @@ protected:
   }
 
   /** Destructor */
-  virtual ~DirectoryParameter()
+  ~DirectoryParameter() ITK_OVERRIDE
   {}
 
 private:
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperDocExampleStructure.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperDocExampleStructure.h
index c5573a114e3e21265eae751d1cee741bb5146381..8f417442d98fe00b0495ab56fa1ebe35bbc3c911 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperDocExampleStructure.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperDocExampleStructure.h
@@ -117,7 +117,7 @@ protected:
   /** Constructor */
   DocExampleStructure();
   /** Destructor */
-  virtual ~DocExampleStructure();
+  ~DocExampleStructure() ITK_OVERRIDE;
 
 private:
   DocExampleStructure(const DocExampleStructure &); //purposely not implemented
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperEmptyParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperEmptyParameter.h
index 0a13ef1469ee27998f19802e327ecd3f9fe55fa3..6f87aedbee61ef5d6127e334e919d58c683eeee3 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperEmptyParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperEmptyParameter.h
@@ -47,12 +47,12 @@ public:
   itkTypeMacro(EmptyParameter, Parameter);
 
   /** HasValue */
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     return false;
   }
 
-  bool HasUserValue() const
+  bool HasUserValue() const ITK_OVERRIDE
   {
     return this->m_UserValue;
   }
@@ -66,7 +66,7 @@ protected:
   }
 
   /** Destructor */
-  virtual ~EmptyParameter()
+  ~EmptyParameter() ITK_OVERRIDE
   {}
 
 private:
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputFilenameListParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputFilenameListParameter.h
index 1992608db84c832ad547a6eeb5e9f9d885de3a2c..ae18b7e794ef6b5cc1e31992ae8a631821d5c2e6 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputFilenameListParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputFilenameListParameter.h
@@ -73,14 +73,14 @@ public:
   /** Get one list of the stored files. */
   StringParameterListPointerType GetFileList() const;
 
-  bool HasValue() const;
+  bool HasValue() const ITK_OVERRIDE;
 
 
   /** Erase one element of the list. */
   void Erase( unsigned int id );
 
  /** Clear all the list. */
-  virtual void ClearValue();
+  void ClearValue() ITK_OVERRIDE;
 
 
 protected:
@@ -88,7 +88,7 @@ protected:
   InputFilenameListParameter();
 
   /** Destructor */
-  virtual ~InputFilenameListParameter();
+  ~InputFilenameListParameter() ITK_OVERRIDE;
 
 
   StringParameterListType::Pointer  m_FilenameList;
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputFilenameParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputFilenameParameter.h
index 9c2f295418cedf5d3a561715ace7dd651dfb21e1..f093bda5499a964664872d40f43f64316d055247 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputFilenameParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputFilenameParameter.h
@@ -48,7 +48,7 @@ public:
   itkTypeMacro(InputFilenameParameter, Parameter);
 
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     return m_StringParam->HasValue();
   }
@@ -66,7 +66,7 @@ public:
     }
 
   // Clear Value
-  void ClearValue()
+  void ClearValue() ITK_OVERRIDE
   {
     m_StringParam->ClearValue();
   }
@@ -82,7 +82,7 @@ protected:
   }
 
   /** Destructor */
-  virtual ~InputFilenameParameter()
+  ~InputFilenameParameter() ITK_OVERRIDE
   {}
 
 private:
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageListParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageListParameter.h
index cb86b1e86621d035b97a4ee7708835b1c7e60326..32c7e90c07ad615e64000201afabd102ee977d33 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageListParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageListParameter.h
@@ -82,14 +82,14 @@ public:
   /** Add an image to the list. */
   void AddImage(FloatVectorImageType* image);
 
-  bool HasValue() const;
+  bool HasValue() const ITK_OVERRIDE;
 
 
   /** Erase one element of the list. */
   void Erase( unsigned int id );
 
  /** Clear all the list. */
-  virtual void ClearValue();
+  void ClearValue() ITK_OVERRIDE;
 
 
 protected:
@@ -97,7 +97,7 @@ protected:
   InputImageListParameter();
 
   /** Destructor */
-  virtual ~InputImageListParameter();
+  ~InputImageListParameter() ITK_OVERRIDE;
 
 
   FloatVectorImageListType::Pointer m_ImageList;
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.h
index 4c0e2fe9cea5f6a4e1311729f2b9a9f8ad162323..7d3e8c8b650e47c6571f9d79232f2e9eba495342 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.h
@@ -105,9 +105,9 @@ public:
     TOutputImage* CastVectorImageFromImage();
 
 
-  bool HasValue() const;
+  bool HasValue() const ITK_OVERRIDE;
 
-  void ClearValue();
+  void ClearValue() ITK_OVERRIDE;
 
 
 protected:
@@ -115,7 +115,7 @@ protected:
   InputImageParameter();
 
   /** Destructor */
-  virtual ~InputImageParameter();
+  ~InputImageParameter() ITK_OVERRIDE;
 
   ImageBaseType::Pointer m_Image;
   std::string m_FileName;
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputProcessXMLParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputProcessXMLParameter.h
index 1db4f6ecc2cacbee7ee630af05c5a61a0030b6cf..9d43c95d2a93358c42915dc80ae75d6eb354a547 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputProcessXMLParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputProcessXMLParameter.h
@@ -32,7 +32,7 @@ public:
 
   itkGetStringMacro(FileName);
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     if(m_FileName.empty())
       return false;
@@ -66,7 +66,7 @@ protected:
   InputProcessXMLParameter();
 
   /** Destructor */
-  virtual ~InputProcessXMLParameter();
+  ~InputProcessXMLParameter() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputVectorDataListParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputVectorDataListParameter.h
index 71df9b3830e10a575db919fdfe506f4c873d1704..f66ed006d30d6cf3df4d99bc83ff23cb070cff85 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputVectorDataListParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputVectorDataListParameter.h
@@ -82,14 +82,14 @@ public:
   /** Add an image to the list. */
   void AddVectorData(VectorDataType* image);
 
-  bool HasValue() const;
+  bool HasValue() const ITK_OVERRIDE;
 
 
   /** Erase one element of the list. */
   void Erase( unsigned int id );
 
  /** Clear all the list. */
-  virtual void ClearValue();
+  void ClearValue() ITK_OVERRIDE;
 
 
 protected:
@@ -97,7 +97,7 @@ protected:
   InputVectorDataListParameter();
 
   /** Destructor */
-  virtual ~InputVectorDataListParameter();
+  ~InputVectorDataListParameter() ITK_OVERRIDE;
 
   VectorDataListType::Pointer m_VectorDataList;
   VectorDataFileReaderListType::Pointer  m_ReaderList;
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputVectorDataParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputVectorDataParameter.h
index 7f9aac71f2ed4de160006c6eebce4df01d57a6d4..c87251bd2f9c928a8b1b3abbd500d25029fc733c 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputVectorDataParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputVectorDataParameter.h
@@ -58,16 +58,16 @@ public:
 
   void SetVectorData(VectorDataType* vectorData);
 
-  bool HasValue() const;
+  bool HasValue() const ITK_OVERRIDE;
 
-  void ClearValue();
+  void ClearValue() ITK_OVERRIDE;
 
 protected:
   /** Constructor */
   InputVectorDataParameter();
 
   /** Destructor */
-  virtual ~InputVectorDataParameter();
+  ~InputVectorDataParameter() ITK_OVERRIDE;
 
   typedef otb::VectorDataFileReader<VectorDataType> VectorDataFileReaderType;
   VectorDataType::Pointer m_VectorData;
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperListViewParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperListViewParameter.h
index b50fa171e059e209a476146731a323f0dabb4fef..4518c3874a029fa396887d6507c2e55ee3da0f2a 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperListViewParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperListViewParameter.h
@@ -77,13 +77,13 @@ public:
   /** Return any value */
   virtual unsigned int GetValue();
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     // a choice parameter always has a value
     return true;
   }
 
-  void ClearValue()
+  void ClearValue() ITK_OVERRIDE
   {
     // nothing to do : a choice parameter always has a value
   }
@@ -155,7 +155,7 @@ protected:
   ListViewParameter();
 
   /** Destructor */
-  virtual ~ListViewParameter();
+  ~ListViewParameter() ITK_OVERRIDE;
 
   struct ListViewChoice
   {
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperNumericalParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperNumericalParameter.h
index 5117a3af48c9561be0cf46c134e67164d6f433ce..1eb3606d0277c76fd04ad1f7518575d5b452ba60 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperNumericalParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperNumericalParameter.h
@@ -51,7 +51,7 @@ public:
   typedef T ScalarType;
 
   /** Implement the reset method (replace value by default value) */
-  virtual void Reset()
+  void Reset() ITK_OVERRIDE
   {
     m_Value = m_DefaultValue;
   }
@@ -85,12 +85,12 @@ public:
     return boost::any_cast<ScalarType>(m_Value);
   }
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     return !m_Value.empty();
   }
 
-  void ClearValue()
+  void ClearValue() ITK_OVERRIDE
   {
     m_Value = boost::any();
   }
@@ -122,7 +122,7 @@ protected:
   {}
 
   /** Destructor */
-  virtual ~NumericalParameter()
+  ~NumericalParameter() ITK_OVERRIDE
   {}
 
   /** Value */
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputFilenameParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputFilenameParameter.h
index 31bacce37456176bebae679041bd3c5f6d7bb658..ed4fb25d917eecdd62491939eb3f1fcb5f88d729 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputFilenameParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputFilenameParameter.h
@@ -48,7 +48,7 @@ public:
   itkTypeMacro(OutputFilenameParameter, Parameter);
 
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     return m_StringParam->HasValue();
   }
@@ -66,7 +66,7 @@ public:
     }
 
   // Clear Value
-  void ClearValue()
+  void ClearValue() ITK_OVERRIDE
   {
     m_StringParam->ClearValue();
   }
@@ -82,7 +82,7 @@ protected:
   }
 
   /** Destructor */
-  virtual ~OutputFilenameParameter()
+  ~OutputFilenameParameter() ITK_OVERRIDE
   {}
 
 private:
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputImageParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputImageParameter.h
index 3313e5a8d201cc230bc33d2b11fd533d9a0f8f32..01b522f102a8f44404c9297b9d4432347b868307 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputImageParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputImageParameter.h
@@ -75,7 +75,7 @@ public:
   itkGetMacro(RAMValue, unsigned int);
 
   /** Implement the reset method (replace pixel type by default type) */
-  virtual void Reset()
+  void Reset() ITK_OVERRIDE
   {
     m_PixelType = m_DefaultPixelType;
   }
@@ -84,7 +84,7 @@ public:
   static std::string ConvertPixelTypeToString(ImagePixelType type);
 
   /** Return true if a filename is set */
-  bool HasValue() const;
+  bool HasValue() const ITK_OVERRIDE;
 
   void SetFileName (const char* filename)
   {
@@ -108,7 +108,7 @@ protected:
   /** Constructor */
   OutputImageParameter();
   /** Destructor */
-  virtual ~OutputImageParameter();
+  ~OutputImageParameter() ITK_OVERRIDE;
 
   template <class TInputImageType>
     void SwitchImageWrite();
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputProcessXMLParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputProcessXMLParameter.h
index 671caeef1c7b991f89652507a1d56940da9e05e9..ac45c32a59ac1179890f225347afb2fe0b28d028 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputProcessXMLParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputProcessXMLParameter.h
@@ -46,7 +46,7 @@ public:
     this->Modified();
     }
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     if(m_FileName.empty())
       return false;
@@ -54,7 +54,7 @@ public:
       return true;
   }
 
-  void ClearValue()
+  void ClearValue() ITK_OVERRIDE
   {
     m_FileName = "";
   }
@@ -72,7 +72,7 @@ protected:
   OutputProcessXMLParameter();
 
   /** Destructor */
-  virtual ~OutputProcessXMLParameter();
+  ~OutputProcessXMLParameter() ITK_OVERRIDE;
 
 private:
 
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputVectorDataParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputVectorDataParameter.h
index c06d25dc47288b6c99e2fe675bb1db708efae1ec..afeabe8d67d07eb6b1793276bb994a8e8d79ff5b 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputVectorDataParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputVectorDataParameter.h
@@ -56,7 +56,7 @@ public:
   itkGetObjectMacro(VectorData, VectorDataType);
 
   /** Return true if a filename is set */
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     std::string filename(this->GetFileName());
     return !filename.empty();
@@ -113,7 +113,7 @@ protected:
   }
 
   /** Destructor */
-  virtual ~OutputVectorDataParameter()
+  ~OutputVectorDataParameter() ITK_OVERRIDE
   {}
 
 
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameter.h
index c9bdcfd0ebf2b4d99bb368d3fbe3e8eb8c225812..d990f4a6350948baf77a3271158b8de3a0a2f524 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameter.h
@@ -231,7 +231,7 @@ protected:
   {}
 
   /** Destructor */
-  virtual ~Parameter()
+  ~Parameter() ITK_OVERRIDE
   {}
 
   /** Name of the parameter */
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h
index e03311025f6aee9b0be9bf046b7a912d09be7014..3ef9f0d5c0c6291536ab667f879fa577ac924156 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h
@@ -88,14 +88,14 @@ public:
   std::vector<std::string> GetParametersKeys(bool recursive = true);
 
   // Always has value
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     return true;
   }
 
 protected:
   ParameterGroup();
-  virtual ~ParameterGroup();
+  ~ParameterGroup() ITK_OVERRIDE;
 
   typedef std::vector<Parameter::Pointer> ParameterListType;
   ParameterListType m_ParameterList;
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperRAMParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperRAMParameter.h
index d4fc76029137fc4501638ff78d2f58d6003d9de5..23aab70a13a7eae50d7edf7596af33d1219533e7 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperRAMParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperRAMParameter.h
@@ -49,7 +49,7 @@ public:
   typedef NumericalParameter<unsigned int>     UnsignedIntParameter;
   typedef UnsignedIntParameter::ScalarType     ScalarType;
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     return m_UnsignedIntParam->HasValue();
   }
@@ -68,19 +68,19 @@ public:
   otbGetObjectMemberMacro(UnsignedIntParam,  MaximumValue, ScalarType);
 
   // Clear Value
-  void ClearValue()
+  void ClearValue() ITK_OVERRIDE
   {
     m_UnsignedIntParam->ClearValue();
   }
 
   // Reset
-  virtual void Reset()
+  void Reset() ITK_OVERRIDE
   {
     m_UnsignedIntParam->Reset();
   }
 
   // Reimplement the SetActive method
-  void SetActive(  const bool value )
+  void SetActive(  const bool value ) ITK_OVERRIDE
   {
     Superclass::SetActive( value );
     m_UnsignedIntParam->SetActive( value );
@@ -104,7 +104,7 @@ protected:
   }
 
   /** Destructor */
-  virtual ~RAMParameter()
+  ~RAMParameter() ITK_OVERRIDE
   {}
 
 private:
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperRadiusParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperRadiusParameter.h
index 07cd91aeaa8337e5feb4936f0c7ded91dd995643..f0d2ff9be01e40731dae26f72d422d05e5a4b6f5 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperRadiusParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperRadiusParameter.h
@@ -46,7 +46,7 @@ public:
   /** RTTI support */
   itkTypeMacro(RadiusParameter, Parameter);
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     return true;
   }
@@ -61,7 +61,7 @@ protected:
   }
 
   /** Destructor */
-  virtual ~RadiusParameter()
+  ~RadiusParameter() ITK_OVERRIDE
   {}
 
 private:
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperStringListParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperStringListParameter.h
index 2adb1c3550edd7039e67ad57dcb3e5a3ab148936..6f5ce3af7627d4c58b4ec6cc25977191940660c4 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperStringListParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperStringListParameter.h
@@ -100,12 +100,12 @@ public:
     m_Value[i] = value;
   }
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     return !m_Value.empty();
   }
 
-  void ClearValue()
+  void ClearValue() ITK_OVERRIDE
   {
     m_Value.clear();
   }
@@ -126,7 +126,7 @@ protected:
   }
 
   /** Destructor */
-  virtual ~StringListParameter()
+  ~StringListParameter() ITK_OVERRIDE
   {
   }
 
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperStringParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperStringParameter.h
index 101eee7f74e2117328aa197b33f3994c45df93a7..66722afa38f49d3f65ef12a9fbef86aa427d03fd 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperStringParameter.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperStringParameter.h
@@ -60,12 +60,12 @@ public:
     return m_Value;
   }
 
-  bool HasValue() const
+  bool HasValue() const ITK_OVERRIDE
   {
     return !m_Value.empty();
   }
 
-  void ClearValue()
+  void ClearValue() ITK_OVERRIDE
   {
     m_Value = "";
   }
@@ -76,7 +76,7 @@ protected:
   {}
 
   /** Destructor */
-  virtual ~StringParameter()
+  ~StringParameter() ITK_OVERRIDE
   {}
 
   std::string  m_Value;
diff --git a/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h b/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h
index 26203558e19aefc4cb1bc8674f86603d1b76de19..384fa97964566cdb91ce5537a33571c7ff1bcc8b 100644
--- a/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h
+++ b/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h
@@ -122,7 +122,7 @@ protected:
   CommandLineLauncher(const char * exp);
 
   /** Destructor */
-  virtual ~CommandLineLauncher();
+  ~CommandLineLauncher() ITK_OVERRIDE;
 
   /** Load the executable path. It looks for the key --modulePath,
     * extract and interpret as path the following strings.
diff --git a/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineParser.h b/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineParser.h
index be529fbffb27c65ebccc425e1ea6f4f97bcef91c..7c815f215afa1bbca0e95ca419082929fa9b2d40 100644
--- a/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineParser.h
+++ b/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineParser.h
@@ -87,7 +87,7 @@ protected:
   CommandLineParser();
 
   /** Destructor */
-  virtual ~CommandLineParser();
+  ~CommandLineParser() ITK_OVERRIDE;
 
 private:
   CommandLineParser(const CommandLineParser &); //purposely not implemented
diff --git a/Modules/Wrappers/QtWidget/include/itkQtProgressBar.h b/Modules/Wrappers/QtWidget/include/itkQtProgressBar.h
index c5719356821b0bd5fe01e85521b697a9f4e9e21a..9584e18d89132024fd7f792f89114973c2cf3065 100644
--- a/Modules/Wrappers/QtWidget/include/itkQtProgressBar.h
+++ b/Modules/Wrappers/QtWidget/include/itkQtProgressBar.h
@@ -36,7 +36,7 @@ public:
   QtProgressBar( QWidget *parent );
 
   /** Destructor */
-  ~QtProgressBar();
+  ~QtProgressBar() ITK_OVERRIDE;
 
   /** Get Command */
   RedrawCommandType * GetRedrawCommand( void ) const;
diff --git a/Modules/Wrappers/QtWidget/include/otbQtApplication.h b/Modules/Wrappers/QtWidget/include/otbQtApplication.h
index 59febb90b7ef09799097eef7437206fcced72801..1221efad58ef3aae252eb163908c965d137e5615 100644
--- a/Modules/Wrappers/QtWidget/include/otbQtApplication.h
+++ b/Modules/Wrappers/QtWidget/include/otbQtApplication.h
@@ -35,7 +35,7 @@ class ITK_ABI_EXPORT QtApplication : public QApplication
 public:
   QtApplication(int& argc, char** argv);
 
-  bool notify(QObject *object, QEvent* event);
+  bool notify(QObject *object, QEvent* event) ITK_OVERRIDE;
 
 signals:
 
diff --git a/Modules/Wrappers/QtWidget/include/otbQtFileSelectionWidget.h b/Modules/Wrappers/QtWidget/include/otbQtFileSelectionWidget.h
index f372525ea200e3b69d54af60544b1b20dd0bf8f9..336d0d38cbbc0503a4587f71d5311bab969813e0 100644
--- a/Modules/Wrappers/QtWidget/include/otbQtFileSelectionWidget.h
+++ b/Modules/Wrappers/QtWidget/include/otbQtFileSelectionWidget.h
@@ -41,7 +41,7 @@ class ITK_ABI_EXPORT QtFileSelectionWidget : public QWidget
   Q_OBJECT
 public:
   QtFileSelectionWidget();
-  virtual ~QtFileSelectionWidget();
+  ~QtFileSelectionWidget() ITK_OVERRIDE;
 
   bool IsChecked()
   {
diff --git a/Modules/Wrappers/QtWidget/include/otbQtLogOutput.h b/Modules/Wrappers/QtWidget/include/otbQtLogOutput.h
index b5b170a1ddd37b4cafec688d613381eb1e3ea1f4..15f46d1b639f28b58da01cc229176c7baf741a3a 100644
--- a/Modules/Wrappers/QtWidget/include/otbQtLogOutput.h
+++ b/Modules/Wrappers/QtWidget/include/otbQtLogOutput.h
@@ -50,16 +50,16 @@ public:
   itkNewMacro(QtLogOutput);
 
   /** flush a buffer */
-  virtual void Flush();
+  void Flush() ITK_OVERRIDE;
 
   /** Write to multiple outputs */
-  virtual void Write(double timestamp);
+  void Write(double timestamp) ITK_OVERRIDE;
 
   /** Write to a buffer */
-  virtual void Write(std::string const &content);
+  void Write(std::string const &content) ITK_OVERRIDE;
 
   /** Write to a buffer */
-  virtual void Write(std::string const &content, double timestamp);
+  void Write(std::string const &content, double timestamp) ITK_OVERRIDE;
 
 signals:
   void NewContentLog(QString);
@@ -69,9 +69,9 @@ protected:
   QtLogOutput();
 
   /** Destructor */
-  virtual ~QtLogOutput();
+  ~QtLogOutput() ITK_OVERRIDE;
 
-  void PrintSelf(std::ostream &os, itk::Indent indent) const;
+  void PrintSelf(std::ostream &os, itk::Indent indent) const ITK_OVERRIDE;
 };
 
 }
diff --git a/Modules/Wrappers/QtWidget/include/otbQtStringSelectionWidget.h b/Modules/Wrappers/QtWidget/include/otbQtStringSelectionWidget.h
index b5dd7353d38d2fed6a60206c801ced637039cbf9..280ce698dc194340b8581a98eb7419879f30905f 100644
--- a/Modules/Wrappers/QtWidget/include/otbQtStringSelectionWidget.h
+++ b/Modules/Wrappers/QtWidget/include/otbQtStringSelectionWidget.h
@@ -46,7 +46,7 @@ signals:
 
 public:
   QtStringSelectionWidget();
-  virtual ~QtStringSelectionWidget();
+  ~QtStringSelectionWidget() ITK_OVERRIDE;
 
   bool IsChecked()
   {
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetChoiceParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetChoiceParameter.h
index 71c9918f388e81a1287810d6833b46234cdadba1..8c8849876063914a448fa03e8e087b83cde4770a 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetChoiceParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetChoiceParameter.h
@@ -39,7 +39,7 @@ class ITK_ABI_EXPORT QtWidgetChoiceParameter : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetChoiceParameter(ChoiceParameter*, QtWidgetModel*);
-  virtual ~QtWidgetChoiceParameter();
+  ~QtWidgetChoiceParameter() ITK_OVERRIDE;
 
 protected slots:
   void SetValue( int value );
@@ -48,9 +48,9 @@ private:
   QtWidgetChoiceParameter(const QtWidgetChoiceParameter&); //purposely not implemented
   void operator=(const QtWidgetChoiceParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   ChoiceParameter::Pointer m_ChoiceParam;
 
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexInputImageParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexInputImageParameter.h
index 35a2eb8aa17ddd0bec369d2915e778ada9a682c9..bb020b662af85d29cf2471f2be62439cf6662519 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexInputImageParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexInputImageParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetComplexInputImageParameter : public QtWidgetParamet
   Q_OBJECT
 public:
   QtWidgetComplexInputImageParameter(ComplexInputImageParameter*, QtWidgetModel*);
-  virtual ~QtWidgetComplexInputImageParameter();
+  ~QtWidgetComplexInputImageParameter() ITK_OVERRIDE;
 
 protected slots:
   bool SetFileName( const QString& value );
@@ -50,9 +50,9 @@ private:
   QtWidgetComplexInputImageParameter(const QtWidgetComplexInputImageParameter&); //purposely not implemented
   void operator=(const QtWidgetComplexInputImageParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
 
   ComplexInputImageParameter::Pointer m_ComplexInputImageParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexOutputImageParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexOutputImageParameter.h
index 853a9f10c4b68f593d84161698cc7914c4076bd8..90b504b9f16811e62bfbd3245ca9d9f56edf50ca 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexOutputImageParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetComplexOutputImageParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetComplexOutputImageParameter : public QtWidgetParame
   Q_OBJECT
 public:
   QtWidgetComplexOutputImageParameter(ComplexOutputImageParameter*, QtWidgetModel*);
-  virtual ~QtWidgetComplexOutputImageParameter();
+  ~QtWidgetComplexOutputImageParameter() ITK_OVERRIDE;
 
   /** Get the PixelType*/
   //itkGetMacro(PixelType, int);
@@ -54,9 +54,9 @@ private:
   QtWidgetComplexOutputImageParameter(const QtWidgetComplexOutputImageParameter&); //purposely not implemented
   void operator=(const QtWidgetComplexOutputImageParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   std::string m_FileName;
   ComplexOutputImageParameter::Pointer m_OutputImageParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetDirectoryParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetDirectoryParameter.h
index ebc23afcd215f80cbc4c45124902154ac671143f..08c118df7fca0c4068e4225ad07d87b618da2ba3 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetDirectoryParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetDirectoryParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetDirectoryParameter : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetDirectoryParameter(DirectoryParameter*, QtWidgetModel*);
-  virtual ~QtWidgetDirectoryParameter();
+  ~QtWidgetDirectoryParameter() ITK_OVERRIDE;
 
 protected slots:
   void SetFileName( const QString& value );
@@ -50,9 +50,9 @@ private:
   QtWidgetDirectoryParameter(const QtWidgetDirectoryParameter&); //purposely not implemented
   void operator=(const QtWidgetDirectoryParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
 
   DirectoryParameter::Pointer m_DirectoryParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetEmptyParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetEmptyParameter.h
index 452c2cbaba5692bba08f634b3cc2c5edf024498f..0c9f25ea175b00374998c6766ca7c0048960bb4b 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetEmptyParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetEmptyParameter.h
@@ -40,15 +40,15 @@ class ITK_ABI_EXPORT QtWidgetEmptyParameter : public QtWidgetParameterBase
 
 public:
   QtWidgetEmptyParameter(EmptyParameter*, QtWidgetModel*);
-  virtual ~QtWidgetEmptyParameter();
+  ~QtWidgetEmptyParameter() ITK_OVERRIDE;
 
 private:
   QtWidgetEmptyParameter(const QtWidgetEmptyParameter&); //purposely not implemented
   void operator=(const QtWidgetEmptyParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 };
 
 
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetFloatParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetFloatParameter.h
index 6873261ed5c3f9c36a48433c568b6cb18c32ce45..2b98a899829313cba298a18c1f2d7b5de08a5794 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetFloatParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetFloatParameter.h
@@ -39,7 +39,7 @@ class ITK_ABI_EXPORT QtWidgetFloatParameter : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetFloatParameter(FloatParameter*, QtWidgetModel*);
-  virtual ~QtWidgetFloatParameter();
+  ~QtWidgetFloatParameter() ITK_OVERRIDE;
 
 protected slots:
   void SetValue( double value );
@@ -48,9 +48,9 @@ private:
   QtWidgetFloatParameter(const QtWidgetFloatParameter&); //purposely not implemented
   void operator=(const QtWidgetFloatParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   QHBoxLayout *           m_QHBoxLayout;
   QDoubleSpinBox *        m_QDoubleSpinBox;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputFilenameListParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputFilenameListParameter.h
index e47bb74f93b80114602eacff24b6b7972ab771dc..4d17c06e15f92471d599ea7fd9577ec038f63319 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputFilenameListParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputFilenameListParameter.h
@@ -38,7 +38,7 @@ class ITK_ABI_EXPORT QtWidgetInputFilenameListParameter : public QtWidgetParamet
   Q_OBJECT
 public:
   QtWidgetInputFilenameListParameter(InputFilenameListParameter*, QtWidgetModel*);
-  virtual ~QtWidgetInputFilenameListParameter();
+  ~QtWidgetInputFilenameListParameter() ITK_OVERRIDE;
 
 
 signals:
@@ -59,9 +59,9 @@ private:
   QtWidgetInputFilenameListParameter(const QtWidgetInputFilenameListParameter&); //purposely not implemented
   void operator=(const QtWidgetInputFilenameListParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   void RecreateFilenameList();
   void UpdateFileList( std::map<unsigned int, unsigned int> idMap );
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputFilenameParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputFilenameParameter.h
index 8669a837353b31f7c222ac368908464842ad2e53..e82aefc57fec77cb891c4df60cfb348e2f573056 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputFilenameParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputFilenameParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetInputFilenameParameter : public QtWidgetParameterBa
   Q_OBJECT
 public:
   QtWidgetInputFilenameParameter(InputFilenameParameter*, QtWidgetModel*);
-  virtual ~QtWidgetInputFilenameParameter();
+  ~QtWidgetInputFilenameParameter() ITK_OVERRIDE;
 
   inline const QLineEdit* GetInput() const;
   inline QLineEdit* GetInput();
@@ -53,9 +53,9 @@ private:
   QtWidgetInputFilenameParameter(const QtWidgetInputFilenameParameter&); //purposely not implemented
   void operator=(const QtWidgetInputFilenameParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
 
   InputFilenameParameter::Pointer m_FilenameParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageListParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageListParameter.h
index b127e8b67bd450e33e67053e7f13a907b88bb9c7..3a0b1ce2e6c8e53789d5d7d563cb1a7daec4e7c3 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageListParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageListParameter.h
@@ -38,7 +38,7 @@ class ITK_ABI_EXPORT QtWidgetInputImageListParameter : public QtWidgetParameterB
   Q_OBJECT
 public:
   QtWidgetInputImageListParameter(InputImageListParameter*, QtWidgetModel*);
-  virtual ~QtWidgetInputImageListParameter();
+  ~QtWidgetInputImageListParameter() ITK_OVERRIDE;
 
 
 signals:
@@ -59,9 +59,9 @@ private:
   QtWidgetInputImageListParameter(const QtWidgetInputImageListParameter&); //purposely not implemented
   void operator=(const QtWidgetInputImageListParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   void RecreateImageList();
   void UpdateFileList( std::map<unsigned int, unsigned int> idMap );
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageParameter.h
index 7fff85424a1d031713c3195bd9df87e2e506d4b2..f0d634c37248e6282ace6996be489f62113ce8eb 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputImageParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetInputImageParameter : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetInputImageParameter(InputImageParameter*, QtWidgetModel*);
-  virtual ~QtWidgetInputImageParameter();
+  ~QtWidgetInputImageParameter() ITK_OVERRIDE;
 
   inline const QLineEdit* GetInput() const;
   inline QLineEdit* GetInput();
@@ -53,9 +53,9 @@ private:
   QtWidgetInputImageParameter(const QtWidgetInputImageParameter&); //purposely not implemented
   void operator=(const QtWidgetInputImageParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
 
   InputImageParameter::Pointer m_InputImageParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputProcessXMLParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputProcessXMLParameter.h
index 952b1dec9fd0aaf1efbf9a213a54b1a6ff0fbf60..49a40dc793dcccb899befed61c411deac9adc463 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputProcessXMLParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputProcessXMLParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetInputProcessXMLParameter : public QtWidgetParameter
   Q_OBJECT
 public:
   QtWidgetInputProcessXMLParameter(InputProcessXMLParameter*, QtWidgetModel*);
-  virtual ~QtWidgetInputProcessXMLParameter();
+  ~QtWidgetInputProcessXMLParameter() ITK_OVERRIDE;
 
   inline const QLineEdit* GetInput() const;
   inline QLineEdit* GetInput();
@@ -53,9 +53,9 @@ private:
   QtWidgetInputProcessXMLParameter(const QtWidgetInputProcessXMLParameter&); //purposely not implemented
   void operator=(const QtWidgetInputProcessXMLParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
 
   InputProcessXMLParameter::Pointer m_XMLParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputVectorDataListParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputVectorDataListParameter.h
index 1a4100b7bd1c2b6d1f8a9d0bd487344b68fb7b09..595b13ef7b456daf15a4298947e74ae6e9cac157 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputVectorDataListParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputVectorDataListParameter.h
@@ -39,7 +39,7 @@ class ITK_ABI_EXPORT QtWidgetInputVectorDataListParameter : public QtWidgetParam
   Q_OBJECT
 public:
   QtWidgetInputVectorDataListParameter(InputVectorDataListParameter*, QtWidgetModel*);
-  virtual ~QtWidgetInputVectorDataListParameter();
+  ~QtWidgetInputVectorDataListParameter() ITK_OVERRIDE;
 
 
 signals:
@@ -60,9 +60,9 @@ private:
   QtWidgetInputVectorDataListParameter(const QtWidgetInputVectorDataListParameter&); //purposely not implemented
   void operator=(const QtWidgetInputVectorDataListParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   void RecreateVectorDataList();
   void UpdateFileList( std::map<unsigned int, unsigned int> idMap );
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputVectorDataParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputVectorDataParameter.h
index 1d1e49adc76484798959019b6e91c5dea72f9159..0b0843411faa1fda6a1388f83ed0f25d0646dd3d 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputVectorDataParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputVectorDataParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetInputVectorDataParameter : public QtWidgetParameter
   Q_OBJECT
 public:
   QtWidgetInputVectorDataParameter(InputVectorDataParameter*, QtWidgetModel*);
-  virtual ~QtWidgetInputVectorDataParameter();
+  ~QtWidgetInputVectorDataParameter() ITK_OVERRIDE;
 
   inline const QLineEdit* GetInput() const;
   inline QLineEdit* GetInput();
@@ -53,9 +53,9 @@ private:
   QtWidgetInputVectorDataParameter(const QtWidgetInputVectorDataParameter&); //purposely not implemented
   void operator=(const QtWidgetInputVectorDataParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
 
   InputVectorDataParameter::Pointer m_InputVectorDataParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetIntParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetIntParameter.h
index 9205b5110fd1876358e896d9211d074ab16acb4b..175a0ebf90f6bcaae2b25df7dce6f532f00a6d68 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetIntParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetIntParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetIntParameter : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetIntParameter(IntParameter*, QtWidgetModel*);
-  virtual ~QtWidgetIntParameter();
+  ~QtWidgetIntParameter() ITK_OVERRIDE;
 
 protected slots:
   void SetValue( int value );
@@ -49,9 +49,9 @@ private:
   QtWidgetIntParameter(const QtWidgetIntParameter&); //purposely not implemented
   void operator=(const QtWidgetIntParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   QHBoxLayout *         m_QHBoxLayout;
   QSpinBox *            m_QSpinBox;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetListViewParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetListViewParameter.h
index d96884738ac83c0e04c3911d0f5891a64d8cf9f4..6ad7eda8b45d82662d65a3848e41576d2d16b901 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetListViewParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetListViewParameter.h
@@ -39,7 +39,7 @@ class ITK_ABI_EXPORT QtWidgetListViewParameter : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetListViewParameter(ListViewParameter*, QtWidgetModel*);
-  virtual ~QtWidgetListViewParameter();
+  ~QtWidgetListViewParameter() ITK_OVERRIDE;
 
   std::vector<int>  GetSelectedItems()
   {
@@ -53,9 +53,9 @@ private:
   QtWidgetListViewParameter(const QtWidgetListViewParameter&); //purposely not implemented
   void operator=(const QtWidgetListViewParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   ListViewParameter::Pointer m_ListViewParam;
 
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h
index 209d17a6fc4ff8a2fd2477eae7b0bf9a38b991c3..12301eda5ed95bd9866d650537cbc68631f468ba 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT AppliThread : public QThread
       m_Application = app;
     }
 
-  virtual ~AppliThread();
+  ~AppliThread() ITK_OVERRIDE;
 
   inline void Execute()
   {
@@ -65,7 +65,7 @@ signals:
   void ExceptionRaised( QString what );
 
 protected:
-  virtual void run();
+  void run() ITK_OVERRIDE;
 
 private:
   AppliThread(const AppliThread&); //purposely not implemented
@@ -86,7 +86,7 @@ class ITK_ABI_EXPORT QtWidgetModel : public QObject
 public:
   QtWidgetModel(Application* app);
 
-  virtual ~QtWidgetModel();
+  ~QtWidgetModel() ITK_OVERRIDE;
 
   Application* GetApplication()
   {
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputFilenameParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputFilenameParameter.h
index e0459938f3aa64816164a57c9650320da379ae95..13e6e54ded96c597272ba798c84b4f4be2979d29 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputFilenameParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputFilenameParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetOutputFilenameParameter : public QtWidgetParameterB
   Q_OBJECT
 public:
   QtWidgetOutputFilenameParameter(OutputFilenameParameter*, QtWidgetModel*);
-  virtual ~QtWidgetOutputFilenameParameter();
+  ~QtWidgetOutputFilenameParameter() ITK_OVERRIDE;
 
   inline const QLineEdit* GetInput() const;
   inline QLineEdit* GetInput();
@@ -55,9 +55,9 @@ private:
   QtWidgetOutputFilenameParameter(const QtWidgetOutputFilenameParameter&); //purposely not implemented
   void operator=(const QtWidgetOutputFilenameParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
 
   OutputFilenameParameter::Pointer m_FilenameParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputImageParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputImageParameter.h
index d0906049e1be304af383749692a695db8d015466..f4628127a6017df5587eb3c87267b908127dd0a7 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputImageParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputImageParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetOutputImageParameter : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetOutputImageParameter(OutputImageParameter*, QtWidgetModel*);
-  virtual ~QtWidgetOutputImageParameter();
+  ~QtWidgetOutputImageParameter() ITK_OVERRIDE;
 
   inline const QLineEdit* GetInput() const;
   inline QLineEdit* GetInput();
@@ -59,9 +59,9 @@ private:
   QtWidgetOutputImageParameter(const QtWidgetOutputImageParameter&); //purposely not implemented
   void operator=(const QtWidgetOutputImageParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   std::string m_FileName;
   OutputImageParameter::Pointer m_OutputImageParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputProcessXMLParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputProcessXMLParameter.h
index 20c6bf5e9c060ddb0686a6402f16836b9d6a3745..e6840cab73a4e6a590c2b66f48603afc8e534fe1 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputProcessXMLParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputProcessXMLParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetOutputProcessXMLParameter : public QtWidgetParamete
   Q_OBJECT
 public:
   QtWidgetOutputProcessXMLParameter(OutputProcessXMLParameter*, QtWidgetModel*);
-  virtual ~QtWidgetOutputProcessXMLParameter();
+  ~QtWidgetOutputProcessXMLParameter() ITK_OVERRIDE;
 
   inline const QLineEdit* GetInput() const;
   inline QLineEdit* GetInput();
@@ -55,9 +55,9 @@ private:
   QtWidgetOutputProcessXMLParameter(const QtWidgetOutputProcessXMLParameter&); //purposely not implemented
   void operator=(const QtWidgetOutputProcessXMLParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
 
   OutputProcessXMLParameter::Pointer m_XMLParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputVectorDataParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputVectorDataParameter.h
index c5697100d3c43e4f1f97cc0dfee8fc442169ee1a..73e4d7b1f8e461b99ea48883c7e20a8e39443d9f 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputVectorDataParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputVectorDataParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetOutputVectorDataParameter : public QtWidgetParamete
   Q_OBJECT
 public:
   QtWidgetOutputVectorDataParameter(OutputVectorDataParameter*, QtWidgetModel*);
-  virtual ~QtWidgetOutputVectorDataParameter();
+  ~QtWidgetOutputVectorDataParameter() ITK_OVERRIDE;
 
   inline const QLineEdit* GetInput() const;
   inline QLineEdit* GetInput();
@@ -58,9 +58,9 @@ private:
   QtWidgetOutputVectorDataParameter(const QtWidgetOutputVectorDataParameter&); //purposely not implemented
   void operator=(const QtWidgetOutputVectorDataParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   std::string m_FileName;
   OutputVectorDataParameter::Pointer m_OutputVectorDataParam;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterBase.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterBase.h
index 97cd087a8c5f0ae7ba7ccf15e0ce440df502ab4e..fc59e97d08e6fb2d138d20355c70e1081f0b4c87 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterBase.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterBase.h
@@ -39,7 +39,7 @@ class ITK_ABI_EXPORT QtWidgetParameterBase : public QWidget
   Q_OBJECT
 public:
   QtWidgetParameterBase(Parameter *, QtWidgetModel*);
-  virtual ~QtWidgetParameterBase();
+  ~QtWidgetParameterBase() ITK_OVERRIDE;
 
   void CreateWidget();
 
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterFactory.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterFactory.h
index d8b1c2cde7309232cc50736527d3ade358fc3184..20803e254bbfd5bbf2576878ef8e643096e27f3d 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterFactory.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterFactory.h
@@ -59,7 +59,7 @@ public:
 
 protected:
   QtWidgetParameterFactory();
-  virtual ~QtWidgetParameterFactory();
+  ~QtWidgetParameterFactory() ITK_OVERRIDE;
 
 private:
   QtWidgetParameterFactory(const Self&); //purposely not implemented
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h
index b9fad1c6a40cf473bd6cccc586165de664272af1..78064e746b7d2464624de9311813717a9f6b18ba 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h
@@ -43,18 +43,18 @@ class ITK_ABI_EXPORT QtWidgetParameterGroup : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetParameterGroup(ParameterGroup::Pointer, QtWidgetModel*);
-  virtual ~QtWidgetParameterGroup();
+  ~QtWidgetParameterGroup() ITK_OVERRIDE;
 
 public slots:
-  virtual void SetActivationState( bool value );
+  void SetActivationState( bool value ) ITK_OVERRIDE;
 
 private:
   QtWidgetParameterGroup(const QtWidgetParameterGroup&); //purposely not implemented
   void operator=(const QtWidgetParameterGroup&); //purposely not implemented
 
-  void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   virtual void ProcessChild(Parameter * currentNode, bool status);
 
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterLabel.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterLabel.h
index 7ccbfcc9b8f5b4bd6579fcb7a8691935b50be096..b0da81025eda2b5391c246e883440d6741085c85 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterLabel.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterLabel.h
@@ -38,7 +38,7 @@ class ITK_ABI_EXPORT QtWidgetParameterLabel : public QWidget
   Q_OBJECT
 public:
   QtWidgetParameterLabel(Parameter*);
-  virtual ~QtWidgetParameterLabel();
+  ~QtWidgetParameterLabel() ITK_OVERRIDE;
 
 private:
   QtWidgetParameterLabel(const QtWidgetParameterLabel&); //purposely not implemented
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetProgressReport.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetProgressReport.h
index ed2b8275cb9f2bdd09254e88619257e73850dea8..8eda6f0de744953150ffedae3b5f1234b62f43f5 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetProgressReport.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetProgressReport.h
@@ -42,7 +42,7 @@ class ITK_ABI_EXPORT QtWidgetProgressReport : public QWidget
   Q_OBJECT
 public:
   QtWidgetProgressReport(QtWidgetModel * model);
-  virtual ~QtWidgetProgressReport();
+  ~QtWidgetProgressReport() ITK_OVERRIDE;
 
   void SetApplication(Application::Pointer app);
 
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetRAMParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetRAMParameter.h
index be60186e602e77b4c4349a31827a8e75e60613cc..97d748defb61a0a89acb84f440d62d3e4e08ab86 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetRAMParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetRAMParameter.h
@@ -40,7 +40,7 @@ class ITK_ABI_EXPORT QtWidgetRAMParameter : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetRAMParameter(RAMParameter*, QtWidgetModel*);
-  virtual ~QtWidgetRAMParameter();
+  ~QtWidgetRAMParameter() ITK_OVERRIDE;
 
 protected slots:
   void SetValue( int value );
@@ -49,9 +49,9 @@ private:
   QtWidgetRAMParameter(const QtWidgetRAMParameter&); //purposely not implemented
   void operator=(const QtWidgetRAMParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   QHBoxLayout *         m_QHBoxLayout;
   QSpinBox *            m_QSpinBox;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetSimpleProgressReport.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetSimpleProgressReport.h
index 7f64b46509b052b15e2a62c7588b0ac5d544c10c..66d776414b4730da7d6cf7fbf6bc17d301193fe8 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetSimpleProgressReport.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetSimpleProgressReport.h
@@ -42,7 +42,7 @@ class ITK_ABI_EXPORT QtWidgetSimpleProgressReport : public QWidget
   Q_OBJECT
 public:
   QtWidgetSimpleProgressReport(QtWidgetModel * model);
-  virtual ~QtWidgetSimpleProgressReport();
+  ~QtWidgetSimpleProgressReport() ITK_OVERRIDE;
 
   void SetApplication(Application::Pointer app);
 
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetStringListParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetStringListParameter.h
index 9e7acdb2cd8784a587288ff8828386c277f79f01..78d8cf473121eb1f295066eee8fdcdd5ac53ecd3 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetStringListParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetStringListParameter.h
@@ -38,7 +38,7 @@ class ITK_ABI_EXPORT QtWidgetStringListParameter : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetStringListParameter(StringListParameter*, QtWidgetModel*);
-  virtual ~QtWidgetStringListParameter();
+  ~QtWidgetStringListParameter() ITK_OVERRIDE;
 
 signals:
   void Change();
@@ -53,9 +53,9 @@ private:
   QtWidgetStringListParameter(const QtWidgetStringListParameter&); //purposely not implemented
   void operator=(const QtWidgetStringListParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   StringListParameter::Pointer m_StringListParam;
 
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetStringParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetStringParameter.h
index ee5daeb1ff3e7f98edea42a5d7696729424e3443..e6527661f7e71ac02e95b60af33e94f9e8725df1 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetStringParameter.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetStringParameter.h
@@ -39,7 +39,7 @@ class ITK_ABI_EXPORT QtWidgetStringParameter : public QtWidgetParameterBase
   Q_OBJECT
 public:
   QtWidgetStringParameter(StringParameter*, QtWidgetModel*);
-  virtual ~QtWidgetStringParameter();
+  ~QtWidgetStringParameter() ITK_OVERRIDE;
 
 protected slots:
   void SetValue( const QString& value );
@@ -48,9 +48,9 @@ private:
   QtWidgetStringParameter(const QtWidgetStringParameter&); //purposely not implemented
   void operator=(const QtWidgetStringParameter&); //purposely not implemented
 
-  virtual void DoCreateWidget();
+  void DoCreateWidget() ITK_OVERRIDE;
 
-  virtual void DoUpdateGUI();
+  void DoUpdateGUI() ITK_OVERRIDE;
 
   StringParameter::Pointer m_StringParam;
   QHBoxLayout *            m_HLayout;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetView.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetView.h
index 71d145a046d5724dd067808e4a048d4c7de0eb18..4ae011e02680d0ecafe40a42145bf1522ef942a2 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetView.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetView.h
@@ -39,7 +39,7 @@ class ITK_ABI_EXPORT QtWidgetView : public QWidget
   Q_OBJECT
 public:
   QtWidgetView(Application* app);
-  virtual ~QtWidgetView();
+  ~QtWidgetView() ITK_OVERRIDE;
 
   void CreateGui();
 
diff --git a/Modules/Wrappers/QtWidget/test/otbWrapperQtWidgetParameterFactory.cxx b/Modules/Wrappers/QtWidget/test/otbWrapperQtWidgetParameterFactory.cxx
index 160cd82bd7fba0e836bf23f0a6afc180483a1ad3..0b8694954b557204bcfb0adc6cf9cc1c21aa2342 100644
--- a/Modules/Wrappers/QtWidget/test/otbWrapperQtWidgetParameterFactory.cxx
+++ b/Modules/Wrappers/QtWidget/test/otbWrapperQtWidgetParameterFactory.cxx
@@ -51,19 +51,19 @@ protected:
   {
   }
 
-  virtual ~StubApplication()
+  ~StubApplication() ITK_OVERRIDE
   {
   }
 
-  void DoInit()
+  void DoInit() ITK_OVERRIDE
   {
   }
 
-  void DoUpdateParameters()
+  void DoUpdateParameters() ITK_OVERRIDE
   {
   }
 
-  void DoExecute()
+  void DoExecute() ITK_OVERRIDE
   {
   }
 };