From 3de2b3468cdb6b1ff4a4125e21c019e39ba3c07d Mon Sep 17 00:00:00 2001
From: Manuel Grizonnet <manuel.grizonnet@cnes.fr>
Date: Fri, 10 Jun 2016 14:49:33 +0200
Subject: [PATCH] ENH: Explicitly recognize virtual functions

    clang-tidy tool can insert missing override keyword as a macro so that missing [optional] virtual identifiers can be easily added.

    build otb with clang 3.8 and use cmake option CMAKE_EXPORT_COMPILE_COMMANDS=ON. Most modules and third parties have been activated.

    #Save override occurences in otb code
    cd src/Modules ; grep -nR "override" * > ~/temporary/override_otb.txt

    #Run clang modernize check using utility script which allow to process the code in parallel
    python run-clang-tidy.py -clang-tidy-binary ~/software/clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-14.04/bin/clang-tidy -checks=-*,modernize-use-override -header-filter=/home/grizonnetm/projets/otb/src/OTB/Modules/.*/.*/include/.* -j8 -fix -p ~/projets/otb/bin/release/OTB-clang3.8/ ~/projets/otb/src/OTB/Modules/*/*/src/*.cxx ~/projets/otb/src/OTB/Examples/*/*.cxx ~/projets/otb/src/OTB/Modules/*/*/test/*.cxx > ~/temporary/run-clang-tidy-log.txt

    #Replace override by ITK macro (to maintain compat with c++98)
    find . -type f -print -name "*.h" -o -name "*.txx" |xargs perl -pi -e 's/\ override/\ ITK_OVERRIDE/g'
---
 Examples/Application/ApplicationExample.cxx   |   6 +-
 .../ChangeDetectionFrameworkExample.cxx       |   2 +-
 Examples/Filtering/CompositeFilterExample.cxx |   4 +-
 .../GeometriesChangeSpatialReference.cxx      |   4 +-
 Examples/Registration/ImageRegistration1.cxx  |   4 +-
 Examples/Registration/ImageRegistration2.cxx  |   4 +-
 Examples/Registration/ImageRegistration5.cxx  |   4 +-
 Examples/Registration/ImageRegistration9.cxx  |   4 +-
 .../LAIAndPROSAILToSensorResponse.cxx         |   8 +-
 .../CurlAdapters/include/otbCurlHelper.h      |  12 +-
 .../include/otbCurlHelperInterface.h          |   2 +-
 .../CurlAdapters/include/otbCurlHelperStub.h  |  12 +-
 .../CurlAdapters/src/otbCurlHelper.cxx        |   6 +-
 .../GdalAdapters/include/otbGeometriesSet.h   |   4 +-
 .../include/otbGeometriesSource.h             |   4 +-
 .../include/otbGeometriesToGeometriesFilter.h |  10 +-
 .../include/otbOGRDataSourceWrapper.h         |   6 +-
 .../include/otbOGRFieldWrapper.txx            |   4 +-
 .../include/otbDEMConvertAdapter.h            |   2 +-
 .../OSSIMAdapters/include/otbDEMHandler.h     |   4 +-
 .../include/otbDateTimeAdapter.h              |   2 +-
 .../include/otbEllipsoidAdapter.h             |   2 +-
 .../include/otbFilterFunctionValues.h         |   4 +-
 .../otbGeometricSarSensorModelAdapter.h       |   2 +-
 .../include/otbMapProjectionAdapter.h         |   2 +-
 .../include/otbPlatformPositionAdapter.h      |   2 +-
 .../include/otbSensorModelAdapter.h           |   2 +-
 .../include/otbCommandLineArgumentParser.h    |   6 +-
 .../include/otbChannelSelectorFunctor.h       |   2 +-
 .../Common/include/otbCommandProgressUpdate.h |   4 +-
 .../otbComplexToIntensityImageFilter.h        |   2 +-
 .../otbComplexToVectorImageCastFilter.h       |   4 +-
 .../Common/include/otbDotProductImageFilter.h |   4 +-
 .../Common/include/otbFunctionToImageFilter.h |   8 +-
 .../otbImageAndVectorImageOperationFilter.h   |   6 +-
 .../otbImageRegionAdaptativeSplitter.h        |  14 +-
 ...RegionNonUniformMultidimensionalSplitter.h |  12 +-
 .../otbImageRegionSquareTileSplitter.h        |  12 +-
 .../include/otbImageRegionTileMapSplitter.h   |  12 +-
 ...otbImageToModulusAndDirectionImageFilter.h |   6 +-
 .../otbImaginaryImageToComplexImageFilter.h   |   2 +-
 .../Common/include/otbImportImageFilter.h     |  12 +-
 .../include/otbImportVectorImageFilter.h      |   2 +-
 .../Common/include/otbModelComponentBase.h    |   4 +-
 .../Common/include/otbModelComponentBase.txx  |   2 +-
 .../include/otbQuaternaryFunctorImageFilter.h |   6 +-
 .../Common/include/otbRGBAPixelConverter.h    |  12 +-
 Modules/Core/Common/include/otbRectangle.h    |   4 +-
 .../Common/include/otbStandardFilterWatcher.h |   6 +-
 .../include/otbStandardOneLineFilterWatcher.h |   6 +-
 .../Common/include/otbStandardWriterWatcher.h |  12 +-
 .../otbSubsampledImageRegionConstIterator.h   |   2 +-
 .../include/otbUnaryFunctorImageFilter.h      |   4 +-
 ...naryFunctorNeighborhoodVectorImageFilter.h |   8 +-
 .../otbUnaryFunctorVectorImageFilter.h        |   8 +-
 ...unctorWithIndexWithOutputSizeImageFilter.h |   8 +-
 .../otbVariableLengthVectorConverter.h        |  24 +--
 .../include/otbVectorImageToASImageAdaptor.h  |   2 +-
 .../Core/ImageBase/include/otbExtractROI.h    |   8 +-
 .../ImageBase/include/otbExtractROIBase.h     |  14 +-
 Modules/Core/ImageBase/include/otbImage.h     |   6 +-
 .../include/otbImageFunctionAdaptor.h         |  12 +-
 .../Core/ImageBase/include/otbImageIOBase.h   |   4 +-
 ...otbImageOfVectorsToMonoChannelExtractROI.h |   8 +-
 .../ImageBase/include/otbMetaImageFunction.h  |   6 +-
 .../include/otbMultiChannelExtractROI.h       |   8 +-
 .../include/otbMultiToMonoChannelExtractROI.h |   8 +-
 .../include/otbRemoteSensingRegion.h          |   6 +-
 .../Core/ImageBase/include/otbVectorImage.h   |   6 +-
 .../include/otbBCOInterpolateImageFunction.h  |  18 +-
 .../otbBSplineDecompositionImageFilter.h      |   6 +-
 .../otbBSplineInterpolateImageFunction.h      |  10 +-
 .../otbGenericInterpolateImageFunction.h      |   8 +-
 .../otbProlateInterpolateImageFunction.h      |   4 +-
 ...owedSincInterpolateImageBlackmanFunction.h |   4 +-
 ...ndowedSincInterpolateImageCosineFunction.h |   4 +-
 ...WindowedSincInterpolateImageFunctionBase.h |   4 +-
 ...owedSincInterpolateImageGaussianFunction.h |   4 +-
 ...dowedSincInterpolateImageHammingFunction.h |   4 +-
 ...dowedSincInterpolateImageLanczosFunction.h |   4 +-
 ...indowedSincInterpolateImageWelchFunction.h |   4 +-
 .../include/otbAttributesMapLabelObject.h     |   4 +-
 ...tbAttributesMapLabelObjectWithClassLabel.h |   6 +-
 .../otbAttributesMapOpeningLabelMapFilter.h   |   6 +-
 ...bBandsStatisticsAttributesLabelMapFilter.h |  12 +-
 .../otbImageToLabelMapWithAttributesFilter.h  |   8 +-
 .../otbKMeansAttributesLabelMapFilter.h       |   2 +-
 ...bLabelImageToLabelMapWithAdjacencyFilter.h |  14 +-
 .../otbLabelMapFeaturesFunctorImageFilter.h   |   6 +-
 .../Core/LabelMap/include/otbLabelMapSource.h |   4 +-
 .../otbLabelMapToAttributeImageFilter.h       |   8 +-
 .../include/otbLabelMapToSampleListFilter.h   |   8 +-
 .../include/otbLabelMapWithAdjacency.h        |   6 +-
 ...MapWithClassLabelToClassLabelImageFilter.h |   6 +-
 ...pWithClassLabelToLabeledSampleListFilter.h |   8 +-
 .../otbMinMaxAttributesLabelMapFilter.h       |   6 +-
 .../otbNormalizeAttributesLabelMapFilter.h    |   4 +-
 .../otbShapeAttributesLabelMapFilter.h        |  12 +-
 .../otbStatisticsAttributesLabelMapFilter.h   |   6 +-
 .../otbDefaultImageMetadataInterface.h        |  24 +--
 .../otbDefaultImageMetadataInterfaceFactory.h |   6 +-
 .../otbFormosatImageMetadataInterface.h       |  42 ++--
 ...otbFormosatImageMetadataInterfaceFactory.h |   6 +-
 .../include/otbIkonosImageMetadataInterface.h |  40 ++--
 .../otbIkonosImageMetadataInterfaceFactory.h  |   6 +-
 .../include/otbImageMetadataInterfaceBase.h   |   4 +-
 .../otbImageMetadataInterfaceFactory.h        |   2 +-
 .../otbOpticalDefaultImageMetadataInterface.h |  40 ++--
 ...icalDefaultImageMetadataInterfaceFactory.h |   6 +-
 .../otbOpticalImageMetadataInterface.h        |   6 +-
 .../otbOpticalImageMetadataInterfaceFactory.h |   2 +-
 .../otbPleiadesImageMetadataInterface.h       |  42 ++--
 ...otbPleiadesImageMetadataInterfaceFactory.h |   6 +-
 .../otbQuickBirdImageMetadataInterface.h      |  40 ++--
 ...tbQuickBirdImageMetadataInterfaceFactory.h |   6 +-
 .../otbRadarsat2ImageMetadataInterface.h      |  38 ++--
 ...tbRadarsat2ImageMetadataInterfaceFactory.h |   6 +-
 .../include/otbSarCalibrationLookupData.h     |   4 +-
 .../otbSarDefaultImageMetadataInterface.h     |  52 ++---
 ...bSarDefaultImageMetadataInterfaceFactory.h |   6 +-
 .../include/otbSarImageMetadataInterface.h    |   6 +-
 .../otbSarImageMetadataInterfaceFactory.h     |   2 +-
 .../otbSentinel1ImageMetadataInterface.h      |  36 ++--
 ...tbSentinel1ImageMetadataInterfaceFactory.h |   6 +-
 .../include/otbSpot6ImageMetadataInterface.h  |  42 ++--
 .../otbSpot6ImageMetadataInterfaceFactory.h   |   6 +-
 .../include/otbSpotImageMetadataInterface.h   |  42 ++--
 .../otbSpotImageMetadataInterfaceFactory.h    |   6 +-
 .../otbTerraSarImageMetadataInterface.h       |  42 ++--
 ...otbTerraSarImageMetadataInterfaceFactory.h |   6 +-
 .../otbWorldView2ImageMetadataInterface.h     |  40 ++--
 ...bWorldView2ImageMetadataInterfaceFactory.h |   6 +-
 .../Core/ObjectList/include/otbImageList.h    |  12 +-
 .../ObjectList/include/otbImageListSource.h   |   4 +-
 .../include/otbImageListToImageFilter.h       |   4 +-
 .../otbImageListToImageListApplyFilter.h      |  10 +-
 .../include/otbImageListToImageListFilter.h   |   4 +-
 .../include/otbImageListToSingleImageFilter.h |   6 +-
 .../include/otbImageListToVectorImageFilter.h |  10 +-
 .../include/otbImageToImageListFilter.h       |   4 +-
 .../Core/ObjectList/include/otbObjectList.h   |   4 +-
 .../ObjectList/include/otbObjectListSource.h  |   8 +-
 .../include/otbObjectListSource.txx           |   2 +-
 .../include/otbObjectListToObjectListFilter.h |   6 +-
 .../otbObjectListToObjectListFilter.txx       |   4 +-
 .../otbUnaryFunctorObjectListBooleanFilter.h  |   6 +-
 .../include/otbUnaryFunctorObjectListFilter.h |   6 +-
 .../include/otbVectorImageToImageListFilter.h |  10 +-
 .../include/otbImageToPointSetFilter.h        |   8 +-
 .../include/otbImageToPointSetFilter.txx      |   4 +-
 .../PointSet/include/otbPointSetExtractROI.h  |   6 +-
 .../PointSet/include/otbPointSetFunction.h    |   4 +-
 .../Core/PointSet/include/otbPointSetSource.h |   8 +-
 .../include/otbPointSetToPointSetFilter.h     |   4 +-
 .../include/otbRandomPointSetSource.h         |   4 +-
 .../otbThresholdImageToPointSetFilter.h       |   6 +-
 .../include/otbTransformPointSetFilter.h      |   6 +-
 .../include/otbDrawLineSpatialObjectFilter.h  |   6 +-
 .../otbDrawLineSpatialObjectListFilter.h      |   6 +-
 .../otbImageToLineSpatialObjectListFilter.h   |   4 +-
 .../include/otbLineSpatialObject.h            |  18 +-
 .../include/otbLineSpatialObjectList.h        |   2 +-
 ...otbLineSpatialObjectListToPointSetFilter.h |   4 +-
 .../include/otbSpatialObjectSource.h          |   4 +-
 .../otbSpatialObjectToImageDrawingFilter.h    |   8 +-
 ...umberOfDivisionsStrippedStreamingManager.h |   4 +-
 ...tbNumberOfDivisionsTiledStreamingManager.h |   4 +-
 ...otbNumberOfLinesStrippedStreamingManager.h |   4 +-
 .../otbPersistentFilterStreamingDecorator.h   |   8 +-
 .../include/otbPersistentImageFilter.h        |   4 +-
 .../otbPipelineMemoryPrintCalculator.h        |   4 +-
 .../otbRAMDrivenAdaptativeStreamingManager.h  |   4 +-
 .../otbRAMDrivenStrippedStreamingManager.h    |   4 +-
 .../otbRAMDrivenTiledStreamingManager.h       |   4 +-
 .../include/otbStreamingImageVirtualWriter.h  |  10 +-
 .../Streaming/include/otbStreamingManager.h   |   2 +-
 .../otbTileDimensionTiledStreamingManager.h   |   4 +-
 .../Transform/include/otbCompositeTransform.h |   4 +-
 .../Transform/include/otbForwardSensorModel.h |   6 +-
 .../include/otbGenericMapProjection.h         |   6 +-
 .../Transform/include/otbGenericRSTransform.h |  14 +-
 .../include/otbGeocentricTransform.h          |   4 +-
 .../otbImageToGenericRSOutputParameters.h     |   2 +-
 .../include/otbInverseLogPolarTransform.h     |  18 +-
 .../Transform/include/otbInverseSensorModel.h |   6 +-
 .../Transform/include/otbLogPolarTransform.h  |  18 +-
 .../Transform/include/otbSensorModelBase.h    |   4 +-
 .../include/otbStreamingWarpImageFilter.h     |  10 +-
 Modules/Core/Transform/include/otbTransform.h |  40 ++--
 .../Core/VectorDataBase/include/otbDataNode.h |   4 +-
 .../include/otbDataNodeFunctionBase.h         |   6 +-
 .../include/otbDataNodeImageFunction.h        |   6 +-
 .../include/otbDataNodeVectorDataFunction.h   |   6 +-
 .../otbPolyLineParametricPathWithValue.h      |   6 +-
 .../Core/VectorDataBase/include/otbPolygon.h  |  10 +-
 .../VectorDataBase/include/otbVectorData.h    |   6 +-
 .../include/otbVectorDataIOBase.h             |   4 +-
 .../include/otbVectorDataProperties.h         |   4 +-
 .../include/otbVectorDataSource.h             |   4 +-
 .../include/otbCloudDetectionFilter.h         |   6 +-
 .../include/otbCloudEstimatorFilter.h         |   6 +-
 .../otbDescriptorsListSampleGenerator.h       |  26 +--
 .../include/otbFlusserMomentsIFFactory.h      |   4 +-
 .../otbFourierMellinDescriptorsIFFactory.h    |   4 +-
 .../include/otbHaralickTexturesIFFactory.h    |   4 +-
 .../otbLabeledSampleLocalizationGenerator.h   |   6 +-
 .../include/otbLocalHistogramIFFactory.h      |   4 +-
 .../include/otbRadiometricMomentsIFFactory.h  |   4 +-
 .../otbStandardMetaImageFunctionBuilder.h     |   4 +-
 .../include/otbBreakAngularPathListFilter.h   |   6 +-
 .../include/otbGenericRoadExtractionFilter.h  |   6 +-
 .../include/otbImageToPathListAlignFilter.h   |   8 +-
 .../include/otbLikelihoodPathListFilter.h     |   6 +-
 .../include/otbLinkPathListFilter.h           |   6 +-
 ...otbModulusAndDirectionImageToImageFilter.h |   6 +-
 .../otbNeighborhoodScalarProductFilter.h      |   6 +-
 .../otbNonMaxRemovalByDirectionFilter.h       |   6 +-
 .../include/otbParallelLinePathListFilter.h   |   6 +-
 .../otbRemoveIsolatedByDirectionFilter.h      |   6 +-
 .../include/otbRemoveWrongDirectionFilter.h   |   6 +-
 .../include/otbRoadExtractionFilter.h         |   6 +-
 .../otbVectorDataToRoadDescriptionFilter.h    |   6 +-
 .../otbUrbanAreaDetectionImageFilter.h        |   4 +-
 .../Corner/include/otbHarrisImageFilter.h     |   6 +-
 .../include/otbHarrisImageToPointSetFilter.h  |   6 +-
 ...tialObjectListToRightAnglePointSetFilter.h |   8 +-
 ...tbVectorDataToRightAngleVectorDataFilter.h |   6 +-
 .../include/otbKeyPointDensityImageFilter.h   |   6 +-
 .../otbPointSetDensityEpanechnikovFunction.h  |   6 +-
 .../include/otbPointSetDensityFunction.h      |   6 +-
 .../otbPointSetDensityGaussianFunction.h      |   6 +-
 .../include/otbPointSetToDensityImageFilter.h |  10 +-
 ...ForwardFourierMellinTransformImageFilter.h |  10 +-
 ...otbFourierMellinDescriptorsImageFunction.h |  12 +-
 .../include/otbHessianToScalarImageFilter.h   |   2 +-
 ...OfOrientedGradientCovariantImageFunction.h |  12 +-
 .../otbImageToHessianDeterminantImageFilter.h |   6 +-
 .../include/otbImageToSIFTKeyPointSetFilter.h |   6 +-
 .../include/otbImageToSURFKeyPointSetFilter.h |   6 +-
 .../include/otbKeyPointSetsMatchingFilter.h   |   6 +-
 .../Feature/Descriptors/include/otbLandmark.h |   4 +-
 .../otbAssociativeSymmetricalSumImageFilter.h |   2 +-
 ...symmetricFusionOfLineDetectorImageFilter.h |   6 +-
 .../Edge/include/otbEdgeDensityImageFilter.h  |   6 +-
 .../Edge/include/otbEdgeDetectorImageFilter.h |   6 +-
 .../include/otbExtractSegmentsImageFilter.h   |   6 +-
 .../Feature/Edge/include/otbFillGapsFilter.h  |   6 +-
 .../otbHorizontalSobelVectorImageFilter.h     |   2 +-
 .../otbHoughTransform2DLinesImageFilter.h     |  12 +-
 .../otbLineCorrelationDetectorImageFilter.h   |   6 +-
 .../include/otbLineDetectorImageFilterBase.h  |  12 +-
 .../include/otbLineRatioDetectorImageFilter.h |   6 +-
 .../Edge/include/otbLineSegmentDetector.h     |   8 +-
 .../Edge/include/otbLocalHoughFilter.h        |   6 +-
 .../otbPersistentVectorizationImageFilter.h   |  10 +-
 ...tbPixelSuppressionByDirectionImageFilter.h |  10 +-
 .../Edge/include/otbSobelVectorImageFilter.h  |   2 +-
 .../include/otbStreamingLineSegmentDetector.h |   6 +-
 .../include/otbTouziEdgeDetectorImageFilter.h |  12 +-
 .../otbVerticalSobelVectorImageFilter.h       |   2 +-
 .../include/otbComplexMomentPathFunction.h    |   6 +-
 .../include/otbComplexMomentsImageFunction.h  |  12 +-
 .../include/otbFlusserMomentsImageFunction.h  |  12 +-
 .../Moments/include/otbFlusserPathFunction.h  |   6 +-
 .../include/otbGeometricMomentPathFunction.h  |   4 +-
 .../include/otbHuMomentsImageFunction.h       |  12 +-
 .../Moments/include/otbHuPathFunction.h       |   6 +-
 .../otbRadiometricMomentsImageFilter.h        |   8 +-
 .../otbRadiometricMomentsImageFunction.h      |  12 +-
 .../include/otbRealMomentPathFunction.h       |   4 +-
 .../include/otbRealMomentsImageFunction.h     |  12 +-
 .../include/otbAddCarvingPathFilter.h         |  10 +-
 .../include/otbImageToCarvingPathFilter.h     |   8 +-
 .../include/otbRemoveCarvingPathFilter.h      |   8 +-
 .../otbGreyLevelCooccurrenceIndexedList.h     |   4 +-
 .../otbHaralickTexturesImageFunction.h        |  12 +-
 .../include/otbSFSTexturesImageFilter.h       |  12 +-
 .../otbScalarImageToAdvancedTexturesFilter.h  |   8 +-
 ...tbScalarImageToHigherOrderTexturesFilter.h |   6 +-
 .../otbScalarImageToPanTexTextureFilter.h     |   6 +-
 .../include/otbScalarImageToTexturesFilter.h  |   8 +-
 .../include/otbTextureImageFunction.h         |  12 +-
 ...ctorNeighborhoodJoinHistogramImageFilter.h |  10 +-
 .../include/otbCBAMIChangeDetector.h          |   2 +-
 .../include/otbCorrelationChangeDetector.h    |   2 +-
 .../include/otbJoinHistogramMIImageFilter.h   |   2 +-
 .../otbKullbackLeiblerDistanceImageFilter.h   |   2 +-
 .../otbKullbackLeiblerProfileImageFilter.h    |   2 +-
 ...backLeiblerSupervizedDistanceImageFilter.h |   4 +-
 .../include/otbLHMIChangeDetector.h           |   2 +-
 .../include/otbMeanDifferenceImageFilter.h    |   2 +-
 .../include/otbMeanRatioImageFilter.h         |   2 +-
 ...ultivariateAlterationDetectorImageFilter.h |   6 +-
 .../include/otbReliefColormapFunctor.h        |   4 +-
 .../otbScalarToRainbowRGBPixelFunctor.h       |   4 +-
 .../include/otbConvolutionImageFilter.h       |  10 +-
 .../include/otbGaborFilterGenerator.h         |   6 +-
 .../otbOverlapSaveConvolutionImageFilter.h    |  10 +-
 .../include/otbDEMCaracteristicsExtractor.h   |   6 +-
 .../DEM/include/otbDEMToImageGenerator.h      |  10 +-
 .../otbAngularProjectionBinaryImageFilter.h   |   6 +-
 .../include/otbAngularProjectionImageFilter.h |   6 +-
 .../otbAngularProjectionSetImageFilter.h      |   4 +-
 .../otbEstimateInnerProductPCAImageFilter.h   |  10 +-
 .../include/otbFastICAImageFilter.h           |   6 +-
 ...astICAInternalOptimizerVectorImageFilter.h |  10 +-
 .../include/otbInnerProductPCAImageFilter.h   |   8 +-
 .../otbLocalActivityVectorImageFilter.h       |   2 +-
 .../include/otbMNFImageFilter.h               |   8 +-
 ...bMaximumAutocorrelationFactorImageFilter.h |   6 +-
 .../include/otbNAPCAImageFilter.h             |   4 +-
 .../otbNormalizeInnerProductPCAImageFilter.h  |  10 +-
 .../include/otbPCAImageFilter.h               |   8 +-
 .../otbSparseWvltToAngleMapperListFilter.h    |   8 +-
 .../include/otbAmplitudeFunctor.h             |  12 +-
 .../otbBinaryFunctorNeighborhoodImageFilter.h |   8 +-
 ...naryFunctorNeighborhoodVectorImageFilter.h |   8 +-
 .../include/otbBinaryImageDensityFunction.h   |  12 +-
 ...naryImageMinimalBoundingRegionCalculator.h |   6 +-
 .../otbBinaryImageToDensityImageFilter.h      |  10 +-
 .../include/otbBoxAndWhiskerImageFilter.h     |   8 +-
 .../include/otbChangeInformationImageFilter.h |   4 +-
 .../include/otbChangeLabelImageFilter.h       |   6 +-
 .../include/otbChangeNoDataValueFilter.h      |   4 +-
 .../include/otbClampImageFilter.h             |   8 +-
 .../include/otbClampVectorImageFilter.h       |   8 +-
 .../otbConcatenateScalarValueImageFilter.h    |   6 +-
 .../include/otbConcatenateVectorImageFilter.h |  10 +-
 ...bEuclideanDistanceMetricWithMissingValue.h |   6 +-
 ...lideanDistanceMetricWithMissingValuePow2.h |   6 +-
 .../otbFlexibleDistanceWithMissingValue.h     |   6 +-
 ...otbFunctionWithNeighborhoodToImageFilter.h |   8 +-
 .../include/otbGridResampleImageFilter.h      |  16 +-
 .../include/otbHillShadingFilter.h            |   2 +-
 .../include/otbImageToNoDataMaskFilter.h      |   4 +-
 .../include/otbImageToVectorImageCastFilter.h |   6 +-
 .../otbLocalGradientVectorImageFilter.h       |   2 +-
 .../include/otbLog10ThresholdedImageFilter.h  |   2 +-
 .../include/otbMatrixImageFilter.h            |   8 +-
 .../include/otbMultiplyByScalarImageFilter.h  |   2 +-
 .../otbNRIBandImagesToOneNComplexBandsImage.h |  10 +-
 .../otbOneRIBandImageToOneComplexBandImage.h  |   8 +-
 .../include/otbPerBandVectorImageFilter.h     |  10 +-
 .../include/otbPhaseFunctor.h                 |  12 +-
 .../include/otbPrintableImageFilter.h         |   6 +-
 ...ealAndImaginaryImageToComplexImageFilter.h |   2 +-
 .../otbRealImageToComplexImageFilter.h        |   2 +-
 .../include/otbShiftScaleImageAdaptor.h       |   2 +-
 .../include/otbShiftScaleVectorImageFilter.h  |   8 +-
 .../otbSpectralAngleDistanceImageFilter.h     |   8 +-
 .../include/otbSqrtSpectralAngleFunctor.h     |   4 +-
 ...tbStreamingInnerProductVectorImageFilter.h |  18 +-
 ...treamingMatrixTransposeMatrixImageFilter.h |  20 +-
 .../include/otbStreamingResampleImageFilter.h |  10 +-
 .../include/otbStreamingShrinkImageFilter.h   |  38 ++--
 .../include/otbThresholdVectorImageFilter.h   |   8 +-
 .../include/otbTileImageFilter.h              |  12 +-
 .../otbTwoNRIBandsImageToNComplexBandsImage.h |  10 +-
 .../otbUnaryFunctorNeighborhoodImageFilter.h  |   6 +-
 ...FunctorNeighborhoodWithOffsetImageFilter.h |   8 +-
 .../otbUnaryFunctorWithIndexImageFilter.h     |   6 +-
 ...tbUnaryImageFunctorWithVectorImageFilter.h |   8 +-
 .../otbVectorImageTo3DScalarImageFilter.h     |  10 +-
 .../otbVectorImageToAmplitudeImageFilter.h    |   4 +-
 .../otbVectorRescaleIntensityImageFilter.h    |  10 +-
 .../ImageNoise/include/otbFrostImageFilter.h  |  10 +-
 .../include/otbGammaMAPImageFilter.h          |  10 +-
 .../ImageNoise/include/otbKuanImageFilter.h   |  10 +-
 .../ImageNoise/include/otbLeeImageFilter.h    |  10 +-
 .../include/otbBandMathImageFilter.h          |  10 +-
 .../include/otbMaskMuParserFilter.h           |  10 +-
 .../include/otbMaskMuParserFunctor.h          |   2 +-
 .../Filtering/MathParser/include/otbParser.h  |   4 +-
 ...tbParserConditionDataNodeFeatureFunction.h |   6 +-
 .../Filtering/MathParser/src/otbParser.cxx    |   4 +-
 .../include/otbBandMathXImageFilter.h         |  14 +-
 .../MathParserX/include/otbParserX.h          |   4 +-
 .../MathParserX/include/otbParserXPlugins.h   | 198 +++++++++---------
 .../Filtering/MathParserX/src/otbParserX.cxx  |   4 +-
 .../otbMorphologicalPyramidAnalysisFilter.h   |  10 +-
 .../otbMorphologicalPyramidMRToMSConverter.h  |  12 +-
 .../otbMorphologicalPyramidResampler.h        |  12 +-
 ...tbMorphologicalPyramidSegmentationFilter.h |   8 +-
 .../otbMorphologicalPyramidSegmenter.h        |   8 +-
 .../otbMorphologicalPyramidSynthesisFilter.h  |   8 +-
 .../Path/include/otbCompacityPathFunction.h   |   6 +-
 .../Path/include/otbDrawPathFilter.h          |   6 +-
 .../Path/include/otbDrawPathListFilter.h      |   6 +-
 .../otbImageFittingPolygonListFilter.h        |   6 +-
 .../Path/include/otbImageToEdgePathFilter.h   |   8 +-
 .../Path/include/otbImageToPathFilter.h       |   4 +-
 .../Path/include/otbImageToPathListFilter.h   |   4 +-
 .../Path/include/otbOrientationPathFunction.h |   6 +-
 .../Filtering/Path/include/otbPathFunction.h  |   4 +-
 .../Path/include/otbPathListSource.h          |   2 +-
 .../include/otbPathListToHistogramGenerator.h |   8 +-
 .../include/otbPathListToPathListFilter.h     |   2 +-
 .../Path/include/otbPolyLineImageIterator.h   |   2 +-
 ...tbRegionImageToRectangularPathListFilter.h |   8 +-
 .../include/otbVectorizationPathListFilter.h  |   6 +-
 ...rToPolarisationDegreeAndPowerImageFilter.h |   2 +-
 ...MuellerToReciprocalCovarianceImageFilter.h |   2 +-
 ...MultiChannelsPolarimetricSynthesisFilter.h |  10 +-
 .../Polarimetry/include/otbPolarimetricData.h |   4 +-
 .../otbReciprocalBarnesDecompImageFilter.h    |   2 +-
 ...lCoherencyToReciprocalMuellerImageFilter.h |   2 +-
 ...alCovarianceToCoherencyDegreeImageFilter.h |   2 +-
 ...varianceToReciprocalCoherencyImageFilter.h |   2 +-
 .../include/otbReciprocalHAlphaImageFilter.h  |   2 +-
 .../otbReciprocalHuynenDecompImageFilter.h    |   2 +-
 ...oReciprocalCircularCovarianceImageFilter.h |   2 +-
 .../otbReciprocalPauliDecompImageFilter.h     |   2 +-
 .../include/otbSinclairImageFilter.h          |   6 +-
 .../otbSinclairReciprocalImageFilter.h        |   6 +-
 .../include/otbEckert4MapProjection.h         |   2 +-
 .../otbGCPsToRPCSensorModelImageFilter.h      |   8 +-
 .../include/otbGenericRSResampleImageFilter.h |  10 +-
 .../otbGenericRSResampleImageFilter.txx       |   2 +-
 .../include/otbGeographicalDistance.h         |   8 +-
 .../include/otbGeometriesProjectionFilter.h   |  12 +-
 .../otbImageToEnvelopeVectorDataFilter.h      |   8 +-
 .../otbImportGeoInformationImageFilter.h      |  10 +-
 .../include/otbLambert2EtenduProjection.h     |   2 +-
 .../include/otbLambert93Projection.h          |   2 +-
 .../otbLambertConformalConicMapProjection.h   |   2 +-
 .../otbLeastSquareAffineTransformEstimator.h  |   4 +-
 .../include/otbMapProjectionDeprecated.h      |   2 +-
 .../include/otbMollweidMapProjection.h        |   2 +-
 .../include/otbOrthoRectificationFilter.h     |   8 +-
 .../otbPhysicalToRPCSensorModelImageFilter.h  |   8 +-
 .../otbProjectiveProjectionImageFilter.h      |   6 +-
 .../Projection/include/otbROIdataConversion.h |  10 +-
 .../Projection/include/otbRationalTransform.h |  10 +-
 .../include/otbSVY21MapProjection.h           |   2 +-
 .../include/otbSinusoidalMapProjection.h      |   2 +-
 .../Projection/include/otbTileMapTransform.h  |   4 +-
 .../include/otbTransMercatorMapProjection.h   |   2 +-
 .../Projection/include/otbUtmMapProjection.h  |   2 +-
 .../otbVectorDataIntoImageProjectionFilter.h  |   4 +-
 .../include/otbVectorDataProjectionFilter.h   |  14 +-
 .../include/otbVectorDataTransformFilter.h    |  12 +-
 .../otbMeanShiftSmoothingImageFilter.h        |  16 +-
 .../include/otbConcatenateSampleListFilter.h  |   6 +-
 ...bContinuousMinimumMaximumImageCalculator.h |   4 +-
 ...otbGaussianAdditiveNoiseSampleListFilter.h |   6 +-
 .../include/otbHistogramStatisticsFunction.h  |   6 +-
 .../include/otbListSampleGenerator.h          |  10 +-
 .../Statistics/include/otbListSampleSource.h  |   6 +-
 .../otbListSampleToBalancedListSampleFilter.h |   8 +-
 .../otbListSampleToHistogramListGenerator.h   |   8 +-
 .../include/otbListSampleToListSampleFilter.h |   4 +-
 ...pleToVariableDimensionHistogramGenerator.h |   8 +-
 .../include/otbLocalHistogramImageFunction.h  |  12 +-
 .../include/otbNormalizeVectorImageFilter.h   |   4 +-
 .../include/otbShiftScaleSampleListFilter.h   |   6 +-
 .../include/otbStreamingCompareImageFilter.h  |  20 +-
 .../otbStreamingHistogramVectorImageFilter.h  |  18 +-
 .../include/otbStreamingMinMaxImageFilter.h   |  18 +-
 .../otbStreamingMinMaxVectorImageFilter.h     |  18 +-
 .../otbStreamingStatisticsImageFilter.h       |  18 +-
 ...reamingStatisticsMapFromLabelImageFilter.h |  20 +-
 .../otbStreamingStatisticsVectorImageFilter.h |  18 +-
 .../include/otbVarianceImageFilter.h          |  10 +-
 .../otbVectorImageToIntensityImageFilter.h    |   6 +-
 .../otbVectorImageToMatrixImageFilter.h       |  18 +-
 .../include/otbConcatenateVectorDataFilter.h  |   6 +-
 .../otbDBOverlapDataNodeFeatureFunction.h     |   6 +-
 ...sWithNeighborhoodDataNodeFeatureFunction.h |   6 +-
 .../otbSpectralAngleDataNodeFeatureFunction.h |   6 +-
 .../include/otbVectorDataAdapter.h            |  10 +-
 .../include/otbVectorDataExtractROI.h         |   6 +-
 .../otbVectorDataToRandomLineGenerator.h      |   6 +-
 ...ectorDataToSpecificDescriptionFilterBase.h |   4 +-
 .../include/otbVectorDataToVectorDataFilter.h |   8 +-
 .../Wavelet/include/otbSubsampleImageFilter.h |  20 +-
 .../Wavelet/include/otbWaveletFilterBank.h    |  44 ++--
 .../Wavelet/include/otbWaveletGenerator.h     |   2 +-
 .../include/otbWaveletHighPassOperator.h      |   4 +-
 .../include/otbWaveletLowPassOperator.h       |   4 +-
 .../Wavelet/include/otbWaveletOperatorBase.h  |   6 +-
 .../otbWaveletPacketDecompositionCosts.h      |   2 +-
 .../include/otbWaveletPacketTransform.h       |  10 +-
 .../Wavelet/include/otbWaveletTransform.h     |  10 +-
 .../Fusion/Fuzzy/include/otbFuzzyVariable.h   |   4 +-
 ...otbNeighborhoodMajorityVotingImageFilter.h |   6 +-
 .../include/otbBayesianFusionFilter.h         |   6 +-
 .../otbLmvmPanSharpeningFusionImageFilter.h   |   6 +-
 ...bSimpleRcsPanSharpeningFusionImageFilter.h |   6 +-
 .../include/otbLocalRxDetectorFilter.h        |  10 +-
 .../otbLocalRxDetectorNonThreadFilter.h       |   8 +-
 .../otbEigenvalueLikelihoodMaximisation.h     |   4 +-
 .../include/otbVcaImageFilter.h               |  12 +-
 .../include/otbVirtualDimensionality.h        |   4 +-
 .../include/otbISRAUnmixingImageFilter.h      |   4 +-
 .../Unmixing/include/otbMDMDNMFImageFilter.h  |  10 +-
 .../include/otbNCLSUnmixingImageFilter.h      |   4 +-
 .../include/otbSparseUnmixingImageFilter.h    |   4 +-
 .../otbUnConstrainedLeastSquareImageFilter.h  |   4 +-
 .../IO/Carto/include/otbCoordinateToName.h    |   4 +-
 .../otbImageToOSMVectorDataGenerator.h        |   4 +-
 .../Carto/include/otbMapFileProductWriter.h   |   6 +-
 .../include/otbOSMDataToVectorDataGenerator.h |   4 +-
 .../IO/Carto/include/otbPlaceNameToLonLat.h   |   4 +-
 Modules/IO/Carto/include/otbWorldFile.h       |   2 +-
 .../include/otbExtendedFilenameHelper.h       |   2 +-
 .../otbExtendedFilenameToReaderOptions.h      |   2 +-
 .../otbExtendedFilenameToWriterOptions.h      |   2 +-
 Modules/IO/IOBSQ/include/otbBSQImageIO.h      |  28 +--
 .../IO/IOBSQ/include/otbBSQImageIOFactory.h   |   6 +-
 .../IO/IOGDAL/include/otbGDALDatasetWrapper.h |   2 +-
 Modules/IO/IOGDAL/include/otbGDALImageIO.h    |  28 +--
 .../IO/IOGDAL/include/otbGDALImageIOFactory.h |   6 +-
 .../IOGDAL/include/otbGDALOverviewsBuilder.h  |   6 +-
 Modules/IO/IOGDAL/include/otbOGRIOHelper.h    |   2 +-
 .../IO/IOGDAL/include/otbOGRVectorDataIO.h    |  12 +-
 .../include/otbOGRVectorDataIOFactory.h       |   6 +-
 .../IOJPEG2000/include/otbJPEG2000ImageIO.h   |  28 +--
 .../include/otbJPEG2000ImageIOFactory.h       |   6 +-
 Modules/IO/IOKML/include/otbKMLVectorDataIO.h |  12 +-
 .../IOKML/include/otbKMLVectorDataIOFactory.h |   6 +-
 Modules/IO/IOLUM/include/otbLUMImageIO.h      |  28 +--
 .../IO/IOLUM/include/otbLUMImageIOFactory.h   |   6 +-
 Modules/IO/IOMSTAR/include/otbMSTARImageIO.h  |  28 +--
 .../IOMSTAR/include/otbMSTARImageIOFactory.h  |   6 +-
 Modules/IO/IOMW/include/otbMWImageIO.h        |  28 +--
 Modules/IO/IOMW/include/otbMWImageIOFactory.h |   6 +-
 Modules/IO/IOONERA/include/otbONERAImageIO.h  |  28 +--
 .../IOONERA/include/otbONERAImageIOFactory.h  |   6 +-
 Modules/IO/IORAD/include/otbRADImageIO.h      |  28 +--
 .../IO/IORAD/include/otbRADImageIOFactory.h   |   6 +-
 .../IO/IOTileMap/include/otbTileMapImageIO.h  |  36 ++--
 .../include/otbTileMapImageIOFactory.h        |   6 +-
 .../include/otbTileMapImageIOHelper.h         |   2 +-
 .../include/otbStatisticsXMLFileReader.h      |   6 +-
 .../include/otbStatisticsXMLFileWriter.h      |   4 +-
 .../IO/ImageIO/include/otbImageFileReader.h   |  10 +-
 .../IO/ImageIO/include/otbImageFileWriter.h   |   8 +-
 .../IO/ImageIO/include/otbImageIOFactory.h    |   2 +-
 .../include/otbImageSeriesFileReader.h        |  10 +-
 .../include/otbImageSeriesFileReaderBase.h    |  10 +-
 .../otbScalarBufferToImageFileWriter.h        |   8 +-
 .../KMZWriter/include/otbKmzProductWriter.h   |   6 +-
 .../include/otbDifferenceImageFilter.h        |  12 +-
 Modules/IO/TestKernel/include/otbTestHelper.h |   2 +-
 .../include/otbVectorDataFileReader.h         |   8 +-
 .../include/otbVectorDataFileWriter.h         |   8 +-
 .../include/otbVectorDataIOFactory.h          |   2 +-
 .../otbConfusionMatrixToMassOfBelief.h        |   6 +-
 .../otbDSFusionOfClassifiersImageFilter.h     |  10 +-
 .../include/otbJointMassOfBeliefFilter.h      |  10 +-
 .../DempsterShafer/include/otbMassOfBelief.h  |   4 +-
 .../include/otbStandardDSCostFunction.h       |  12 +-
 ...bVectorDataToDSValidatedVectorDataFilter.h |   6 +-
 .../LearningBase/include/otbDecisionTree.h    |   4 +-
 .../include/otbGaussianModelComponent.h       |  10 +-
 .../otbKMeansImageClassificationFilter.h      |   8 +-
 .../LearningBase/include/otbSEMClassifier.h   |   8 +-
 .../Learning/Markov/include/otbMRFEnergy.h    |   4 +-
 .../Markov/include/otbMRFEnergyEdgeFidelity.h |   4 +-
 .../otbMRFEnergyFisherClassification.h        |   6 +-
 .../Markov/include/otbMRFEnergyGaussian.h     |   4 +-
 .../otbMRFEnergyGaussianClassification.h      |   6 +-
 .../Markov/include/otbMRFEnergyPotts.h        |   4 +-
 .../Learning/Markov/include/otbMRFOptimizer.h |   2 +-
 .../Markov/include/otbMRFOptimizerICM.h       |   4 +-
 .../include/otbMRFOptimizerMetropolis.h       |   4 +-
 .../Learning/Markov/include/otbMRFSampler.h   |   2 +-
 .../Markov/include/otbMRFSamplerMAP.h         |   4 +-
 .../Markov/include/otbMRFSamplerRandom.h      |   4 +-
 .../Markov/include/otbMRFSamplerRandomMAP.h   |   6 +-
 .../include/otbMarkovRandomFieldFilter.h      |  12 +-
 Modules/Learning/SOM/include/otbPeriodicSOM.h |  14 +-
 Modules/Learning/SOM/include/otbSOM.h         |  10 +-
 .../SOM/include/otbSOMActivationBuilder.h     |   6 +-
 .../Learning/SOM/include/otbSOMClassifier.h   |   6 +-
 .../include/otbSOMImageClassificationFilter.h |   8 +-
 Modules/Learning/SOM/include/otbSOMMap.h      |   4 +-
 .../SOM/include/otbSOMWithMissingValue.h      |  14 +-
 .../SOM/include/otbSOMbasedImageFilter.h      |   4 +-
 .../otbExhaustiveExponentialOptimizer.h       |   6 +-
 .../include/otbLabelMapSVMClassifier.h        |   6 +-
 .../include/otbObjectDetectionClassifier.h    |  26 +--
 .../SVMLearning/include/otbSVMClassifier.h    |   8 +-
 .../otbSVMCrossValidationCostFunction.h       |   8 +-
 .../include/otbSVMImageClassificationFilter.h |   8 +-
 .../otbSVMImageClassificationWithRuleFilter.h |   8 +-
 .../include/otbSVMImageModelEstimator.h       |   6 +-
 .../SVMLearning/include/otbSVMMarginSampler.h |   6 +-
 .../SVMLearning/include/otbSVMModel.h         |   6 +-
 .../include/otbSVMModelEstimator.h            |   6 +-
 .../include/otbSVMPointSetModelEstimator.h    |   6 +-
 .../include/otbSVMSampleListModelEstimator.h  |   6 +-
 .../otbExhaustiveExponentialOptimizerTest.cxx |   8 +-
 .../otbOGRDataToClassStatisticsFilter.h       |  16 +-
 .../otbPolygonClassStatisticsAccumulator.h    |   2 +-
 .../include/otbBoostMachineLearningModel.h    |  16 +-
 .../otbBoostMachineLearningModelFactory.h     |   6 +-
 .../include/otbConfusionMatrixCalculator.h    |   4 +-
 .../include/otbConfusionMatrixMeasurements.h  |   2 +-
 .../Supervised/include/otbCvRTreesWrapper.h   |   2 +-
 .../otbDecisionTreeMachineLearningModel.h     |  16 +-
 ...bDecisionTreeMachineLearningModelFactory.h |   6 +-
 ...bGradientBoostedTreeMachineLearningModel.h |  16 +-
 ...ntBoostedTreeMachineLearningModelFactory.h |   6 +-
 .../include/otbImageClassificationFilter.h    |   8 +-
 ...otbKNearestNeighborsMachineLearningModel.h |  16 +-
 ...restNeighborsMachineLearningModelFactory.h |   6 +-
 .../include/otbLibSVMMachineLearningModel.h   |  16 +-
 .../otbLibSVMMachineLearningModelFactory.h    |   6 +-
 .../include/otbMachineLearningModel.h         |   4 +-
 .../include/otbMachineLearningModelFactory.h  |   2 +-
 .../otbMachineLearningModelFactoryBase.h      |   2 +-
 .../otbNeuralNetworkMachineLearningModel.h    |  16 +-
 ...NeuralNetworkMachineLearningModelFactory.h |   6 +-
 .../otbNormalBayesMachineLearningModel.h      |  16 +-
 ...tbNormalBayesMachineLearningModelFactory.h |   6 +-
 .../otbRandomForestsMachineLearningModel.h    |  16 +-
 ...RandomForestsMachineLearningModelFactory.h |   6 +-
 .../include/otbSVMMachineLearningModel.h      |  16 +-
 .../otbSVMMachineLearningModelFactory.h       |   6 +-
 .../include/otbImageListToRCC8GraphFilter.h   |   4 +-
 ...bImageMultiSegmentationToRCC8GraphFilter.h |   6 +-
 .../include/otbImageToImageRCC8Calculator.h   |   6 +-
 .../include/otbPolygonListToRCC8GraphFilter.h |   6 +-
 .../otbPolygonToPolygonRCC8Calculator.h       |   4 +-
 Modules/OBIA/RCC8/include/otbRCC8Edge.h       |   4 +-
 Modules/OBIA/RCC8/include/otbRCC8Graph.h      |   4 +-
 .../RCC8/include/otbRCC8GraphFileReader.h     |   6 +-
 .../RCC8/include/otbRCC8GraphFileWriter.h     |   8 +-
 .../OBIA/RCC8/include/otbRCC8GraphSource.h    |   4 +-
 Modules/OBIA/RCC8/include/otbRCC8VertexBase.h |   4 +-
 .../RCC8/include/otbRCC8VertexWithCompacity.h |   8 +-
 .../include/otbBuiltUpIndicesFunctor.h        |  12 +-
 .../include/otbGAndRIndexImageFilter.h        |   4 +-
 .../Indices/include/otbLandsatTMIndices.h     | 114 +++++-----
 .../otbMultiChannelGAndRIndexImageFilter.h    |   6 +-
 ...bMultiChannelRAndBAndNIRIndexImageFilter.h |   6 +-
 ...bMultiChannelRAndGAndNIRIndexImageFilter.h |   6 +-
 .../otbMultiChannelRAndNIRIndexImageFilter.h  |   6 +-
 .../include/otbNDVIDataNodeFeatureFunction.h  |   6 +-
 .../include/otbRAndBAndNIRIndexImageFilter.h  |   4 +-
 .../include/otbRAndGAndNIRIndexImageFilter.h  |   4 +-
 .../include/otbRAndNIRIndexImageFilter.h      |   4 +-
 .../Indices/include/otbSoilIndicesFunctor.h   |  24 +--
 .../include/otbVegetationIndicesFunctor.h     | 108 +++++-----
 .../Indices/include/otbWaterIndicesFunctor.h  |  22 +-
 .../otbWaterSqrtSpectralAngleImageFilter.h    |   2 +-
 .../otbLandsatTMSpectralRuleBasedClassifier.h |   4 +-
 .../include/otbAeronetData.h                  |   4 +-
 .../include/otbAeronetFileReader.h            |   6 +-
 .../otbAtmosphericCorrectionParameters.h      |   4 +-
 .../include/otbAtmosphericRadiativeTerms.h    |   8 +-
 .../otbImageMetadataCorrectionParameters.h    |   4 +-
 .../include/otbImageToLuminanceImageFilter.h  |   4 +-
 .../otbImageToReflectanceImageFilter.h        |   4 +-
 .../include/otbLuminanceToImageImageFilter.h  |   4 +-
 .../otbLuminanceToReflectanceImageFilter.h    |   4 +-
 .../otbReflectanceToImageImageFilter.h        |   4 +-
 .../otbReflectanceToLuminanceImageFilter.h    |   4 +-
 ...flectanceToSurfaceReflectanceImageFilter.h |   8 +-
 .../include/otbSpectralSensitivityReader.h    |   6 +-
 ...aceAdjacencyEffectCorrectionSchemeFilter.h |   8 +-
 .../include/otbWavelengthSpectralBands.h      |   4 +-
 .../include/otbSarBrightnessFunction.h        |  14 +-
 .../include/otbSarBrightnessToImageFilter.h   |   4 +-
 .../include/otbSarParametricMapFunction.h     |  12 +-
 .../otbSarRadiometricCalibrationFunction.h    |  12 +-
 ...tbSarRadiometricCalibrationToImageFilter.h |   6 +-
 .../otbTerraSarBrightnessImageFilter.h        |   4 +-
 .../include/otbAtmosphericEffects.h           |   2 +-
 .../include/otbImageSimulationMethod.h        |   6 +-
 .../otbLabelMapToSimulatedImageFilter.h       |  10 +-
 .../include/otbLabelToProSailParameters.h     |   4 +-
 .../otbLabelToSimulationParametersBase.h      |   2 +-
 .../Simulation/include/otbLeafParameters.h    |   4 +-
 .../Simulation/include/otbProspectModel.h     |  12 +-
 .../include/otbReduceSpectralResponse.h       |   4 +-
 ...bReduceSpectralResponseClassifierRAndNIR.h |   4 +-
 .../Simulation/include/otbSailModel.h         |  12 +-
 .../Simulation/include/otbSatelliteRSR.h      |   4 +-
 .../include/otbSimulationStep1Base.h          |   2 +-
 .../include/otbSimulationStep2Base.h          |   2 +-
 .../include/otbSpatialisationFilter.h         |   8 +-
 .../Simulation/include/otbSpectralResponse.h  |   4 +-
 ...otbSurfaceReflectanceToReflectanceFilter.h |   6 +-
 .../include/otbDisparityMapEstimationMethod.h |   6 +-
 .../include/otbDisparityMapMedianFilter.h     |  10 +-
 .../include/otbDisparityMapTo3DFilter.h       |  12 +-
 .../include/otbDisparityMapToDEMFilter.h      |  14 +-
 .../include/otbDisparityTranslateFilter.h     |  10 +-
 .../include/otbFineRegistrationImageFilter.h  |   8 +-
 .../include/otbMultiDisparityMapTo3DFilter.h  |  10 +-
 .../include/otbNCCRegistrationFilter.h        |   8 +-
 .../include/otbNCCRegistrationFunction.h      |  16 +-
 .../otbPixelWiseBlockMatchingImageFilter.h    |  14 +-
 .../include/otbSubPixelDisparityImageFilter.h |  14 +-
 ...nesInterpolateDisplacementFieldGenerator.h |   6 +-
 ...olateTransformDisplacementFieldGenerator.h |   8 +-
 ...earInterpolateDisplacementFieldGenerator.h |   6 +-
 ...earInterpolateDisplacementFieldGenerator.h |   6 +-
 ...tbNearestPointDisplacementFieldGenerator.h |   6 +-
 ...arestTransformDisplacementFieldGenerator.h |   6 +-
 .../otbPointSetToDisplacementFieldGenerator.h |   6 +-
 ...ithTransformToDisplacementFieldGenerator.h |   4 +-
 .../include/otbAdhesionCorrectionFilter.h     |   8 +-
 .../include/otbBijectionCoherencyFilter.h     |   8 +-
 .../Stereo/include/otbLineOfSightOptimizer.h  |   2 +-
 .../Stereo/include/otbMulti3DMapToDEMFilter.h |  14 +-
 ...otbStereoSensorModelToElevationMapFilter.h |  12 +-
 ...ereorectificationDisplacementFieldSource.h |  10 +-
 .../otbLabelObjectOpeningMuParserFilter.h     |  12 +-
 ...ponentSegmentationOBIAToVectorDataFilter.h |   6 +-
 .../otbLabelImageRegionMergingFilter.h        |  10 +-
 .../otbLabelImageRegionPruningFilter.h        |  10 +-
 .../otbLabelImageToOGRDataSourceFilter.h      |   8 +-
 .../include/otbLabelImageToVectorDataFilter.h |   6 +-
 .../include/otbLabelMapToVectorDataFilter.h   |   6 +-
 .../otbOGRDataSourceToLabelImageFilter.h      |   8 +-
 .../otbPersistentImageToOGRLayerFilter.h      |  12 +-
 .../otbPersistentImageToVectorDataFilter.h    |  12 +-
 .../include/otbRasterizeVectorDataFilter.h    |   8 +-
 .../include/otbVectorDataToLabelImageFilter.h |   8 +-
 .../include/otbVectorDataToLabelMapFilter.h   |   8 +-
 ...VectorDataToLabelMapWithAttributesFilter.h |   8 +-
 .../include/otbLabelToBoundaryImageFilter.h   |   2 +-
 ...tbLabelizeConfidenceConnectedImageFilter.h |   6 +-
 ...otbLabelizeConnectedThresholdImageFilter.h |   6 +-
 .../include/otbLabelizeImageFilterBase.h      |   6 +-
 ...LabelizeNeighborhoodConnectedImageFilter.h |   6 +-
 ...hiftConnectedComponentSegmentationFilter.h |   6 +-
 .../include/otbMeanShiftSegmentationFilter.h  |   4 +-
 .../Metrics/include/otbHooverInstanceFilter.h |  12 +-
 .../Metrics/include/otbHooverMatrixFilter.h   |   6 +-
 .../otbClosingOpeningMorphologicalFilter.h    |   6 +-
 .../otbConvexOrConcaveClassificationFilter.h  |   8 +-
 ...odesicMorphologyDecompositionImageFilter.h |   6 +-
 ...phologyIterativeDecompositionImageFilter.h |  12 +-
 .../otbGeodesicMorphologyLevelingFilter.h     |   6 +-
 .../include/otbImageToProfileFilter.h         |  10 +-
 .../otbMorphologicalClosingProfileFilter.h    |   6 +-
 .../otbMorphologicalOpeningProfileFilter.h    |   6 +-
 ...bMorphologicalProfilesSegmentationFilter.h |   4 +-
 ...ScaleConvexOrConcaveClassificationFilter.h |   6 +-
 .../otbOpeningClosingMorphologicalFilter.h    |   6 +-
 ...ivativeToMultiScaleCharacteristicsFilter.h |  10 +-
 .../otbProfileToProfileDerivativeFilter.h     |  10 +-
 .../otbOGRLayerStreamStitchingFilter.h        |   4 +-
 ...reamingImageToOGRLayerSegmentationFilter.h |   6 +-
 .../include/otbWatershedSegmentationFilter.h  |   4 +-
 .../ITK/include/itkImageRegionSplitter.h      |  12 +-
 .../itkTransformToDisplacementFieldSource.h   |  12 +-
 .../ITK/include/itkUnaryFunctorImageFilter.h  |   6 +-
 .../ITK/include/otbWarpImageFilter.h          |  16 +-
 .../Ice/include/otbFragmentShader.h           |   2 +-
 .../Ice/include/otbFragmentShaderRegistry.h   |   2 +-
 .../Visualization/Ice/include/otbGlActor.h    |   2 +-
 .../Ice/include/otbGlImageActor.h             |  26 +--
 .../Visualization/Ice/include/otbGlROIActor.h |  10 +-
 .../Ice/include/otbGlVectorActor.h            |  16 +-
 Modules/Visualization/Ice/include/otbGlView.h |   2 +-
 .../Ice/include/otbImageSettings.h            |   2 +-
 .../Ice/include/otbStandardShader.h           |   8 +-
 .../Ice/include/otbViewSettings.h             |   2 +-
 .../IceViewer/include/otbIceViewer.h          |   2 +-
 .../otbWrapperAddProcessToWatchEvent.h        |   8 +-
 .../include/otbWrapperApplication.h           |   2 +-
 .../include/otbWrapperApplicationFactory.h    |  12 +-
 .../otbWrapperApplicationFactoryBase.h        |   2 +-
 .../include/otbWrapperApplicationRegistry.h   |   2 +-
 .../include/otbWrapperChoiceParameter.h       |   6 +-
 .../otbWrapperComplexInputImageParameter.h    |   6 +-
 .../otbWrapperComplexOutputImageParameter.h   |   6 +-
 .../include/otbWrapperDirectoryParameter.h    |   8 +-
 .../include/otbWrapperDocExampleStructure.h   |   2 +-
 .../include/otbWrapperEmptyParameter.h        |   6 +-
 .../otbWrapperInputFilenameListParameter.h    |   6 +-
 .../otbWrapperInputFilenameParameter.h        |   6 +-
 .../otbWrapperInputImageListParameter.h       |   6 +-
 .../include/otbWrapperInputImageParameter.h   |   6 +-
 .../otbWrapperInputProcessXMLParameter.h      |   4 +-
 .../otbWrapperInputVectorDataListParameter.h  |   6 +-
 .../otbWrapperInputVectorDataParameter.h      |   6 +-
 .../include/otbWrapperListViewParameter.h     |   6 +-
 .../include/otbWrapperNumericalParameter.h    |   8 +-
 .../otbWrapperOutputFilenameParameter.h       |   6 +-
 .../include/otbWrapperOutputImageParameter.h  |   6 +-
 .../otbWrapperOutputProcessXMLParameter.h     |   6 +-
 .../otbWrapperOutputVectorDataParameter.h     |   4 +-
 .../include/otbWrapperParameter.h             |   2 +-
 .../include/otbWrapperParameterGroup.h        |   4 +-
 .../include/otbWrapperRAMParameter.h          |  10 +-
 .../include/otbWrapperRadiusParameter.h       |   4 +-
 .../include/otbWrapperStringListParameter.h   |   6 +-
 .../include/otbWrapperStringParameter.h       |   6 +-
 .../include/otbWrapperCommandLineLauncher.h   |   2 +-
 .../include/otbWrapperCommandLineParser.h     |   2 +-
 .../QtWidget/include/itkQtProgressBar.h       |   2 +-
 .../QtWidget/include/otbQtApplication.h       |   2 +-
 .../include/otbQtFileSelectionWidget.h        |   2 +-
 .../QtWidget/include/otbQtLogOutput.h         |  12 +-
 .../include/otbQtStringSelectionWidget.h      |   2 +-
 .../otbWrapperQtWidgetChoiceParameter.h       |   6 +-
 ...rapperQtWidgetComplexInputImageParameter.h |   6 +-
 ...apperQtWidgetComplexOutputImageParameter.h |   6 +-
 .../otbWrapperQtWidgetDirectoryParameter.h    |   6 +-
 .../otbWrapperQtWidgetEmptyParameter.h        |   6 +-
 .../otbWrapperQtWidgetFloatParameter.h        |   6 +-
 ...rapperQtWidgetInputFilenameListParameter.h |   6 +-
 ...otbWrapperQtWidgetInputFilenameParameter.h |   6 +-
 ...tbWrapperQtWidgetInputImageListParameter.h |   6 +-
 .../otbWrapperQtWidgetInputImageParameter.h   |   6 +-
 ...bWrapperQtWidgetInputProcessXMLParameter.h |   6 +-
 ...pperQtWidgetInputVectorDataListParameter.h |   6 +-
 ...bWrapperQtWidgetInputVectorDataParameter.h |   6 +-
 .../include/otbWrapperQtWidgetIntParameter.h  |   6 +-
 .../otbWrapperQtWidgetListViewParameter.h     |   6 +-
 .../include/otbWrapperQtWidgetModel.h         |   6 +-
 ...tbWrapperQtWidgetOutputFilenameParameter.h |   6 +-
 .../otbWrapperQtWidgetOutputImageParameter.h  |   6 +-
 ...WrapperQtWidgetOutputProcessXMLParameter.h |   6 +-
 ...WrapperQtWidgetOutputVectorDataParameter.h |   6 +-
 .../include/otbWrapperQtWidgetParameterBase.h |   2 +-
 .../otbWrapperQtWidgetParameterFactory.h      |   2 +-
 .../otbWrapperQtWidgetParameterGroup.h        |   8 +-
 .../otbWrapperQtWidgetParameterLabel.h        |   2 +-
 .../otbWrapperQtWidgetProgressReport.h        |   2 +-
 .../include/otbWrapperQtWidgetRAMParameter.h  |   6 +-
 .../otbWrapperQtWidgetSimpleProgressReport.h  |   2 +-
 .../otbWrapperQtWidgetStringListParameter.h   |   6 +-
 .../otbWrapperQtWidgetStringParameter.h       |   6 +-
 .../QtWidget/include/otbWrapperQtWidgetView.h |   2 +-
 .../otbWrapperQtWidgetParameterFactory.cxx    |   8 +-
 832 files changed, 3345 insertions(+), 3345 deletions(-)

diff --git a/Examples/Application/ApplicationExample.cxx b/Examples/Application/ApplicationExample.cxx
index c01c061b4c..1268ad8938 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 778497ba4d..3bb4c21abb 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 9b76116102..765ef5a957 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 46d869c510..7611ab2223 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 ded1c98470..c388d2cfee 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 250249c120..3e05bcb050 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 99ceedad46..9d7bca1777 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 5e1cd81eb7..99eaae233a 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 38c27e8133..09bea46d8a 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 b81ffce98c..ceeac5f173 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 fb8f07b18c..14b1472dd7 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 da7da9eea3..546aba961d 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 a44b6b2857..e464e78742 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 921f4de97e..4026c1afd9 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 aa1da8c42e..01e13bea82 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 f5b9de54a3..b487ba34ba 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 a16eabcbc5..ac9845e882 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 abd5a66901..e7e0dd2673 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 19312472cf..e821d7fe7b 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 c15b815b8f..7f6efa7fbc 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 f373409359..67c6bb6016 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 9764e772ca..05eecad8f9 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 d14e2f41f8..0a72158a8f 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 e4395106f9..4c1801ad71 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 b935f8e7e0..50366a012e 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 ea0535417b..47e57f0670 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 25808e93d4..af899c1fa6 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 8c7eef2f55..4b252f5a4f 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 8780dc3910..802938bbd0 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 7842014edd..4fd0842f39 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 6c2ab5ffc8..a91f59ad4b 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 763447c385..0cb2d45d07 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 34effe45e5..1441a8a66e 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 b01099fc25..fa2353835d 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 8689065323..d8ec5e0952 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 16ce4cd343..57384fd469 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 cf2a68bd8f..31120be9c7 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 a9ad5ccb23..7058757c60 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 34a3ea7800..69aa70fa0e 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 359edfd4c3..e0fe3a64ff 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 e84721599d..e1718630dd 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 c5a927129e..a2c78cc462 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 08ebbf63cd..be1f381e91 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 f8956cd307..5d2ef2af6f 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 7c04686518..c150f29ed7 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 80be874f90..0dd78cac31 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 e3ee8bcf3e..d20406bcaf 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 c6d6c07b4f..6717ed679a 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 53b9cb67cb..4a3258f7df 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 4508b4632c..e5123d6dcc 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 4bb1aa5ed3..60d4134824 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 def95bcbaa..3d95fe5b3f 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 e0df8601f8..2a6235feaf 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 ba29df414a..4db8be94e6 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 47bf386feb..638cb1341c 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 6ec57f90ef..acb981b118 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 2c8f53a92d..9814d61eb2 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 48832da89e..cfa49e3fb6 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 831456ad04..fb8edc42fa 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 7112ad4f6b..7d22920634 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 2d8e30dc15..2f2dc5316d 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 0f461ddecc..b668c93ad6 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 4abd41359b..41b5d5fa37 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 027e1497c8..3a4083bc9a 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 64b99d3584..ac8337f057 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 ed692e173d..59b54b713c 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 6214a9972a..e53bf01bde 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 8fb6381a2b..93e73353aa 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 95b7f12b1c..7dea7e9d8b 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 0baf3bb53d..926674fc4d 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 48cafebae4..7ed58cddc0 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 f84a97cb6c..4077c302c7 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 cc803f7f99..ee4b5dbbd5 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 705e93d5f4..16bdc3fc8e 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 ddbe8e3b19..855f42fdb3 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 a00ce82ee5..891ad8d91a 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 5eb242b636..7490727f41 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 2302606115..e6afcf9aff 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 2da34dd799..bca9d953a6 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 85e157536e..1c5793d14e 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 20f0fc6072..dad775d0df 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 abebf17ed6..5e016c5d8a 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 de7b7c9a6d..2a3495a2e5 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 b804c3efc3..4f0e3a9af1 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 82e020c6e4..563a8473bd 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 c16617bbc4..1b0032a2a7 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 a2c4a7e4b0..bc5e716760 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 3b597fe26e..0cac885b05 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 a4e077f082..f17418747e 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 3801e51ff1..3dbb4bc46c 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 ab9fb5c174..5e791981d9 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 38c3c4eaf3..04231b7ea4 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 92a132d29c..420d659679 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 f86b3f7798..faac75ab72 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 daa2f0c54a..4774c9a075 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 4f7ca0333c..12899f2835 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 4e61817e70..d665a70510 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 67465b9820..f48bf3b5bd 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 37f3fbe7b4..00f0337cec 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 775b42e909..45350ee841 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 f5fca02115..5364e509ca 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 e7860a1d78..6fd5ca792d 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 b2dc609d07..c99428a352 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 ec961bfa61..9859d04865 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 9bec791d4d..247027420b 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 2a68579033..13b56b7b2f 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 9f10f645f8..e94e7dd3a5 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 515d32b466..3647a8331f 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 c379df4a19..ec77c6e665 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 39f2db5910..7330b3e04d 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 135259d19a..934352f0b6 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 ea7f49d270..a5f4bcb91e 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 13e293b50d..586a249653 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 94d2313352..d0176eadd7 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 070138b369..cb95c859af 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 46439ca652..b9f72fc633 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 2aeb8a8f58..3a2eb1fca9 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 ef95f2b687..1b8b493478 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 dd6529ab24..f0dd509b9b 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 8eb0f38490..b43300bc7a 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 7ce844f420..142f6efe35 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 caa77c33d3..6eed671f30 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 c67ead32a4..bac6a64685 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 76964bb4fc..2798f55e49 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 269af29003..931e271ed1 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 5534e97e24..e00fda0da0 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 4e6555cf0c..2706658929 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 7413f1e8f0..1953721c7f 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 22687cfca5..d2b5adcfce 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 9a92a0b8bb..fedae74b36 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 3fb4b79d65..d8aa945fbb 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 7434ed9856..59f110620a 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 c828838a04..bdd2b8444a 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 2e2b02b0b9..0d983ad718 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 a43ee7437a..a345a7f288 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 8ed1dd401e..0fa624cff4 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 54d940b4f1..dcbd3e6005 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 259224ae17..9c56bc2b16 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 5c37ea17bb..c1a87ed00b 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 b2d67466d9..63d0f4a516 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 eb7781e5be..0b32f26fa7 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 858a4f377b..8ec66de28e 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 e23e1aa5af..7c24330794 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 5956404d7d..6db5bd7827 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 d0e73b6f70..887cf759cf 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 2555e22d1c..00d4422cad 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 ac644bdede..4e5f5c239e 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 20761f261b..afbc61ceff 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 c272fca339..2a080e8736 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 a454869c67..f832535c1d 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 ffb7a76c83..56dfeab436 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 784c4a5c4c..6832e9ae61 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 e731e9adf9..9129ba2737 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 de123b11c9..edeae03913 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 553dbd4041..9b392c695a 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 91227d3881..1140972ab8 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 620a06086b..e48e6aaee3 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 5fd838de30..26d7c48cb0 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 7563d8552e..69545ab03d 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 793cadc98e..93f50114cf 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 c65adda4ce..6b9b35555d 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 a41adde251..a52ea10939 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 04bb8441ef..03508ad550 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 76803062b3..fd5d428aa3 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 8287affd5b..f4e60e43bb 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 eab1aa67a8..5ea7705cc8 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 e8498fd0c9..7ecd51b264 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 1c539cf143..90ed9a66fa 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 9c04b81c12..97a546686a 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 894ad10d69..368658410f 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 b3555bccd8..25001c87b8 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 42f8e9f586..51f3e964db 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 c787dcf4d3..d31ab93092 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 5ff6a46655..b8222844b8 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 c69fb3f685..f31c7e78da 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 107d9fbf37..2c0bdac1c3 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 7c579ba232..96a4a9d874 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 48f09faa36..91df0412e5 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 a58c21a9ad..8ded2f27e7 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 d3796f80d4..6bfc1a632d 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 5db6fa1bc5..04d4d7d5e7 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 ec9562c324..3035ab5aae 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 d9956c78a5..94535c389c 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 7cc4447bb8..8277f4fe7b 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 fb4238fb07..5d7e1aa104 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 e0e8278fba..3bf2bf8083 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 429b08f1f9..b261f4fdb8 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 3b44ec0bed..84269e896e 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 87a215db60..a90e3c673c 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 ba6ba788f2..13b07f6fc1 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 afbb478f3f..9253bc5eb2 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 5234c09b40..21e8ed423a 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 2e10601596..8c2619b7cc 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 0c0da9eef9..ed10ebdd33 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 6f57b94fef..f5a627d70e 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 3be1c89cbc..eeeb3c3236 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 c6ed12cce9..92403ab868 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 cdbddf7281..9f8ece4ee0 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 4db33e36f3..6e54830a1a 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 41530eb4a7..add466d24e 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 89260e2b2d..15c9b4220a 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 3d3462bce6..0896d8cefb 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 88dc5df298..825eaef709 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 80e4af8bcd..1d6a0c5811 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 a8c4a2fe2d..265c96efea 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 d074abeeec..8e365e06f8 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 ab8c43ee58..7add54b4c0 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 9de74d093f..a83da56620 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 5252070600..8813f16b4d 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 23eb36eaa3..bd1d8307a8 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 623ad4b2cf..81a689065c 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 f144fdbaab..e3ae867e7a 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 53e02888ec..0f35411c58 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 ac84cda4ba..339598f177 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 532bf5559d..6317bab5fc 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 d207d34c2f..0e71a4e494 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 3f632bcd2a..23d1cacbc2 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 928f9f0e51..0408e43d10 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 60a84bf77b..08fcd11091 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 297410b318..71f2ebedc8 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 c934227476..7ebc2c6d67 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 7545483e5c..0118ffa98f 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 867af0a779..ae1cadbfd4 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 c066f5d904..3c1bdb5d59 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 2c2d8d91b0..0f087edbce 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 c4da86c681..2df55b421b 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 db6c0dcca4..d3c6714d85 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 f8e3c53f44..e3665b4e48 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 e124e78626..a048b81dc0 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 971e0436f9..0ed828941f 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 1415469f75..e6b84ffe1b 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 b8c5ff591a..a24ef98346 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 01ae83efe0..f099bc0ca4 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 88ee430561..e87dd53e1c 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 06de52a3f3..c6b29d9e7d 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 1dba5813fb..945efd0de0 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 59c6748426..0729c4070c 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 211c7f9fd2..02b84733a8 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 9531c7abac..767ac99282 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 39f5f54bcd..55cc097c8d 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 75552969d9..b03f14cf66 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 ab9f09cba6..eb60a34461 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 c6c4c16265..cab5398b5b 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 7aebf96e79..17daef5c95 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 a4955334bc..b869c4d990 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 04d6c3d0c3..55884565d0 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 229bd5abda..0c96d2b21e 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 2458433b08..3f5d32f21c 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 74e3a2e13b..3cb3f072ac 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 3b4c293983..9a7768e9c1 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 e16bccbee2..3f8683a245 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 ee9553d2b0..1cd81fbea1 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 3e4b2822b3..9b75da95b0 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 f2fd238609..23d574877d 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 08d394fa28..3a39c37f5a 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 f24598f7cf..ba905db84c 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 b1e985b97f..ae8cdff5bb 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 9ac7b3afd1..314caf2c54 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 a4f06b19e9..b71c195b0e 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 2983377272..4658981d5e 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 18ad7e351a..a2617918c8 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 46b3626365..e64cf226aa 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 1ed4926e35..7eca9a58e2 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 0d63785e6a..0e62c0345a 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 504b28c77a..780caa9b96 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 3583aaf8f0..9fabcf122f 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 d855bd5261..4babb0ba74 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 cf9702b036..2af2991273 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 97d8ef2763..96d8190449 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 59429902f8..394e380386 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 2451b080ad..dff792afa6 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 2235ed6be0..4a6e9ddc65 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 988a3e5b11..4808cce3f3 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 c0068f0e32..ffa392786f 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 aee9615e95..ec4e0b1c88 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 e029614723..cff67f6313 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 19a6a5debd..b4fe36b41a 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 fa8910fdcc..62bee5fe53 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 4e343fc963..228d5b54f5 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 028c46ab8e..80caa2a0f7 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 02f8a23005..4c489f0f96 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 31517f4bbe..b0f43c0632 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 df99c4979f..d8d461e0f9 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 0af665394b..bc488255a3 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 c9a896537e..5e5c8a606a 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 d6d08dddb3..a3efb85cfe 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 cba75ee655..a075d9f583 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 d4a5e93c7f..4c7612c74e 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 5498cc9cac..01b280719e 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 c397eba14e..4ddbfe05fd 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 02448bc2aa..2d69ac8450 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 9010d7db27..a6ac437f9d 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 d77801a8dd..7e00aba91a 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 f4842f0d0f..4dd22cef45 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 901e41a568..1b341f6994 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 579c16d999..f9eb1fbec0 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 e380ed588f..977410ff00 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 fdd5b49548..b07d13ca78 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 42368ea14d..77f901bef1 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 963e6eadbf..62c40ede82 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 6a9aa40b56..3d5994f72f 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 add14b8782..b084b68224 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 9402edcd3f..a8baed30d3 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 518196e15b..18a7ed1f8c 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 c7c02acc61..9ed5f9c5a5 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 3866a549b4..0575bfc298 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 fe918f5865..6227397ac4 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 1c0b552dfe..3f3a68a51e 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 27c2f2f573..56d6deaae2 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 c5fb71c8ca..7a4f8515a4 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 54faab6f56..e6e2cf0c0c 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 becc1d390e..1b38d267ce 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 5ef212dc84..edfecfa6d4 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 7cdee419e5..bad67e0981 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 b6706bbe4e..8b46602096 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 c2eb3ffbb2..73e17ea6e2 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 c52e658d07..e2f3ed3850 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 a327a6bcaa..3f5d41fb4f 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 0f4862f8a3..3c0dc39fb1 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 79bfe9c030..69a448b2f0 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 7836509dd1..263b4ad8fa 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 b38b428bdf..06d0ee4741 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 d0c779983c..b26d8a4fea 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 2aea702ab1..7ebee3bf6a 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 3679dd4446..0b5cf4663e 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 900df35a42..4f0f4ebf5b 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 a4866f222c..20b4c16b1f 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 6e179ae3cf..b78bb65531 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 62bbeff2bb..a2ce996de8 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 6aa3b2e47c..0acd5e5f32 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 2c948872ed..437189b305 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 9a6331b18a..258362d560 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 30d508aa21..c33fb06f74 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 ea5d1367d5..ce9c5ed716 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 a790b37a0e..b05bd243a0 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 06178f8be9..6f210df1e3 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 bb878ab949..f9d4e7972c 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 454b11df33..1c0b10bef7 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 ab3e1d3811..54eb0d3503 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 3f6cfbaf02..d58904fcc2 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 18f1465b09..e2e65d4dfd 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 7451997214..4a69fab7f0 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 7c950734ec..b249b07a1e 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 2dd917adb4..97acdb2d83 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 edf9d12185..ad6a937865 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 e3aed3ade9..570fd2b8c8 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 9525b667dc..0316365ac7 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 7341aadfc7..8beb79458e 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 431bd73669..dd4c382682 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 b8cf7b4782..615ccd0349 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 c2ac2a812a..89d8089595 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 ddbfb1a567..0208075de2 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 76d0da2f5f..e27d535bed 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 24038a5bb7..c888aacb1e 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 a31571fed7..5a12557a42 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 e0e1e61542..b12b59a622 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 961936b05d..fc4e81350c 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 e60a091176..4f404198e7 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 8b1f93d245..bbe82b4a28 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 c9b5d1bd81..a552191930 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 fdb2713907..87f4467051 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 cb1a41967b..ee86574bd1 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 18a45eb160..41f98d0602 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 4bbb5f79fc..f91d685ce7 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 9c80e7ffd1..4c1491f94c 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 0e54d13b09..0d573ed96d 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 a3fcfd4dcd..85c342bdea 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 9008cce9b2..3710eb2259 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 b6e6f6963f..735c26664b 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 5e15182a9e..d83ce8c735 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 ebf63c6cf3..c0c95a84b5 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 9ba384f7f0..1e0dfd653d 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 0fa8ce7894..0fdfa42056 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 eb8a373b9f..0609523f83 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 fafd8f946a..b7f3f32de0 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 f259390e06..0b25ef56ba 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 aad7ecf867..f2235e5020 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 cf557ec36a..2026a95f16 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 f7ed3240ec..9a3ccd26fa 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 f8bd0adb2a..e82874d20a 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 ed0d020562..9c91a2476b 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 83c831fae5..a10a729771 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 08e8e2b3ac..2158062e17 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 97ab6a777b..044d516170 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 904786e17b..187c7ef397 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 52d5eb9f6f..ea3a86fa8f 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 670203f4dc..afe2940495 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 bdeb1565ea..81ee894534 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 f54a400d5c..4e8af8afce 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 69b9a335d7..cd514094ec 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 436856831a..66a68f0571 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 535362cd81..11bd6bb1b3 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 e1b1b19ff8..eae5641c6b 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 568007a1da..9715674577 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 766a2b5eb7..bc3ac50fb4 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 e9c7fdbf0a..490183f2b2 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 53a38c2c11..8d746b57cc 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 6431149cd6..5c33640bb5 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 a402cb52b1..ae2c918d80 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 9d22d95841..43795b7fef 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 11aff0d012..ed8b885665 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 0aa2d86658..fd504d449c 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 900da39d18..092d5004a1 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 1de47c3859..eb3a4a4c26 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 4b6403f143..007adf573d 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 a025d9c337..ff7e0389a4 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 2ffb1b9a22..19e129c965 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 f34b83c503..06cb4bd39f 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 cb5938671d..abb6b7e92f 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 d083b7de40..0cb0257a77 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 8a8caa7b31..7d35691d7f 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 ab8ac23d87..21b0bbcdb7 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 1df4e8c8a2..9ec92d5c05 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 55bb5c9ecd..ddd6a80dc9 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 06f254308d..ac08f45515 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 47a8c503ea..101582ae6d 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 e755f1f350..bb2b680cd5 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 bd60be834c..c56e8cfdd9 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 22aa459ee8..aed35be49e 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 b5da047809..4b0e3ca509 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 512922dbb3..128f70098a 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 9b4e931260..064dda4c2e 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 27a1739567..e5cdf2ba87 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 ba70c78426..2d89ac1804 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 0bb68589c5..df8220fefc 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 26effa3d8f..8518232df0 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 07a44f6b40..537a60a00b 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 90b885c778..86560ea777 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 e64b0df172..ee0f67ac40 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 0992f8e563..a80fb8b7f5 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 feaa3e60af..eed49540b7 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 541eddb93c..8def533846 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 5adfb206ab..5b177826c6 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 1d6ca66b0e..47cbb7edab 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 57ec659d12..88656f3523 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 0489909517..6a8a8317eb 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 f684ff3807..8283c73326 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 471bee5567..2ab6f79997 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 a555e1a289..e14bacc23a 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 0fe63b0ef0..66e435a0c7 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 2060c4d16b..370f2918e4 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 8b75827095..b51bec48a9 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 e85e627b87..fca7ea6432 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 9286ff30d9..51e9c164a8 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 0d6eaf3427..de1862c79a 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 5ba1e63b74..200a78811c 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 4bac4b059d..c384337786 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 5876869d5b..ecad23a4f2 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 1f4dcab790..296b930747 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 eada89c0fd..6f6361372b 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 3e21f1939b..e34414f55b 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 c876944cd5..1c0ce1b5f8 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 b08f73682c..c2d6fe2e1c 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 e5b3888da8..94949fd199 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 2a5b07a391..45f78fa533 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 aa1792ca7a..9b1faa3df2 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 f0c0dbe349..ad5768780c 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 750e0e5276..f956537a80 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 238260482a..7926e9abf7 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 d81ec6e097..16846e8299 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 0c95602e5d..a435676355 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 c4ce0c9b9a..7399407d14 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 2aea72e42b..e6cefb7d07 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 95f560aea3..d8d1723097 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 b03c8eda32..a464ef413d 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 15e93edbda..923c398a57 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 f10cbb579a..b0812958ee 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 7e2939767e..8d7a130e35 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 e467edd33d..12767ec499 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 a9e508c914..ad37791050 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 cd1a9ba52b..69e9555e6d 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 8eb160a7b2..731c91f3c7 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 cca2604395..7b4a9f432b 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 f0f0b31573..61efafd421 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 92ac961372..c74a540efc 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 f4ca67bc3b..51c9ea0a50 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 68be4ad16b..8d49d71bab 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 f680eea930..09cd6c7982 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 2b612a2099..e6ca6cd775 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 d17c1dfd9b..19d437500a 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 e87374c43d..ed3db83bd4 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 38662c7de0..0ed7fdbb47 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 f6cf26a38e..853d73c31c 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 a792e7d889..d1147d0f0b 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 ce25b90ece..9074cf956c 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 f77b932d6b..aaee25a297 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 5594b7364a..6304757d47 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 db0c2959a0..dcd58296ad 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 c8542ca44a..8f4ba2cad7 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 117eefef8a..e52011f183 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 86f59e68c5..0390b099e5 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 3d1524811a..c07b06cf2f 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 8c931bb2f8..f5c130dc5d 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 1bb707cc41..6e6a5d3b98 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 07248e693f..b60a49658a 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 a9d30c807d..40c4cb5b2d 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 9625cd7389..d43b6413b1 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 4a869df003..ffa75b2a7b 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 7c259a63d6..3ddf428083 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 f57b27435a..00100ba887 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 4de59cbf3d..f5625e04ef 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 4c55fb8756..8b207173c3 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 920bd2f0d1..aa141ded0c 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 3510967409..d70e473e8e 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 96e72fe51f..873c41301e 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 d442a33fee..afd89f11f6 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 856d22b3b5..12dca4a8a6 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 5113a1ad43..09b8844680 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 a259920125..d19c3f5530 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 89c4a1a82e..7b675444e0 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 c258c75002..5f3cc815e1 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 7e0c8b61da..f78784694c 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 e0335c3403..4262a32160 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 6df03e24d7..a09ae724a5 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 4a2d5dc8d0..0c3b0b5c67 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 3571167e59..69dd784f3f 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 c8a1e3c794..8a0009c403 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 018c7b0f0d..27c327315c 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 4bd9e0a53e..741f27d08b 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 bbed681ee1..f5f7c496d1 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 689d8f9c4f..6df6f273a3 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 4383998365..33d6880c0f 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 539f4c30ba..f421cad501 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 62f509c617..b5d5bb2ba8 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 06cae9a522..41fd845b9c 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 8b9c2548f8..e869cb9492 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 592d69af70..2c216323a5 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 8d712a606f..3e1dde8d5d 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 08deb7f124..50d8e1d031 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 4078c40954..79c27b508e 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 49015a5a89..7fcf93252d 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 15125c3be1..4cf6d48003 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 92b68ddbd4..a12d39e2eb 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 f0df2b82e5..0755563e11 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 80256c2eb4..c1c43bd7db 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 8ad06ee8d4..a5b6d7df32 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 17b4d35764..d1b3176bae 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 c9cdbf3e42..5cffc62b9d 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 3d6eb560ed..c5e9c61b26 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 dcbb7cc4bc..b3f8b66ad6 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 d3836bc393..d925284352 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 316abad838..707f8c565f 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 73fbb33065..9d7a425159 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 203c31b36f..ed90de6d36 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 84457d064b..c243e476e2 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 8faca223c7..bac0cd9350 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 ed84fedfd3..6f4d54cd91 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 427303d96f..37b117b3e5 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 84b093f8c1..6b5c871faf 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 98e3d036b3..74499f4d46 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 2f21fda44c..8e8dc53954 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 7c3c11c362..ced8f739b4 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 2fdec1e669..ca8dcd2aff 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 e782ba0f13..b529e190e8 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 ecc4cb2651..9aba12d281 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 b8b95d5c28..ec3f880feb 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 e23db49440..f011851695 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 a1830d5cbc..78ba2da191 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 8fca36556d..55c93dede6 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 171d21fcfc..773d78cb3d 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 64a8b3be46..cff86e60e7 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 f576df6b73..efffa8af77 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 108da52247..d2aaae3e67 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 10878ea50f..e1b1c70f49 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 c14e9d8ddc..244debbdaf 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 8723fca4f2..a8ee6a143a 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 d07a9d7ddc..37379b600e 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 e24ca281d3..5a4632bd6c 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 fbd9f3a95b..bcbd810640 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 284b620338..9ea737ab80 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 6beaa6d2bf..a686eee2fd 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 f2c68b51a0..28b4c20de2 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 646488f586..0ff5dbfbbc 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 3232e4d9c5..b2ee93f9eb 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 1fa9479a67..caeed5eeb0 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 111d470af6..d5a761fb12 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 886e2de598..ce181a414e 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 854bed69c7..89f0e2a7db 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 5935f10ec1..f8aea7ec7e 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 ed26781f16..95a9371d5c 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 b289706f3d..c44f4276cd 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 368a80abd9..9dcaa0f722 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 4addba8065..9655b0f756 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 50ed01504b..3ebbfd8255 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 197f7b536e..dfaa1c110e 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 87b9ced538..3a333fea80 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 86232de21a..dbcf5bb0a2 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 4c41bcd68a..e3e9ec32f0 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 f64af6c8dd..b6298bc3bc 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 3c944874d1..381a1d119b 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 8f7799c71d..47f22fb617 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 6b86a2ada6..97a073bb53 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 dbb718bf27..5a473558dc 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 940938a8c1..920d413daf 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 0a1e1c2d50..c3750029e2 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 a812eca2b8..abf5a9f0c9 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 eb65e79f18..990ee6a03b 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 6c349b7ce4..2615283e02 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 2863d0ad81..5834da0f87 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 536a7608a9..dcfc2d7546 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 d7ce6d530c..ff626f27cb 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 54e3341041..73a03c0be6 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 30baf7aa30..029fb7d380 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 a1c915dc95..b66f790d58 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 f6ed68aa1d..156c772f15 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 3f29a10af3..c9fc45a2b1 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 068efe098a..ab2dbe7fdd 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 622923753e..0dc98e066f 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 13dbb91892..c9f4acc054 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 b18e39e15c..3f66f30518 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 94a7251152..492a45ac61 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 bffd966136..7705675fe4 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 8f4f182b07..3a8eef763a 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 60326de7a5..fcf5adaee0 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 8ecfcd2b51..f68ef83af3 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 c4e5c8a5be..726c3c2c94 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 942e3de986..eb8a8d069e 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 7a3e7e3a8e..a9e7e5e611 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 c976d666b1..681d03f44a 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 bc91145036..3ef3fd6dad 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 ebd510fba5..0f04f442f0 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 7b91712135..39cae56536 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 38ef31760e..eb7074d168 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 1ce5150418..bf13e04000 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 eb3fb5625c..4c20f280ee 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 ade79be226..4ffce97e22 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 7b7e80ebd2..cd85ae8ffa 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 60b6652d54..96b3bce681 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 fc3c1c9c1a..2fda2d6027 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 0006fc7d7b..dca5674c0f 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 e5d390f332..4d7492b785 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 7be265274e..a74a1db6a9 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 7cd094b864..5c4baa71ae 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 f109b672aa..1404c2005a 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 f111d9d7c0..5c8927cbf7 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 8f0d916b61..14e5b832d8 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 bb1340e33f..00b6902cab 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 10c57e1efb..bca9d5a455 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 3b3cc61f46..4371c98995 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 9f7994cb4d..1e63969473 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 2a42a0815c..ab919197f4 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 65b44f5dfa..cd36fcd9cb 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 0a61f9e95a..f987aaae11 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 68e2d53cbc..cba94498ee 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 dbf7660fae..993792fddf 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 9ace913146..14c981162f 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 f0d7ad4a72..74b0565019 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 65cf37d303..7a36b23b2f 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 06e454d9ad..853b1e86d4 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 bb1798a4ad..b52dd75830 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 7c67a4268e..1fe4f4e194 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 5cc401b58f..bc97817b0c 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 5870366819..e967db513b 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 1772f930b5..f43cfa2b81 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 28997f1ab1..d03ed1977c 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 26121b7d89..c5e3df0232 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 5f7a597463..1d54a0f021 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 af68323c92..df5e312274 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 99409bb1f7..2f137bf243 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 7c86e84013..3c3b823477 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 2f5fe34b8a..2ff0576851 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 c73c10b666..9abbff89b5 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 67a642e0ed..83840afece 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 10e1410f23..f205eac3e6 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 8250dd5299..9542eba839 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 47be340fc5..d6d117d3e7 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 1331f740d5..3dbeac8f70 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 523cdbccb1..8940d382a7 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 05984c7e7e..cd7869f729 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 1116fc7f88..06399b4dbb 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 5fe703e2c2..e501285654 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 91801a97be..9c2e663cb9 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 7c1ad1ac39..9899671e75 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 1bc5444ab1..45e00b2ba3 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 0e6eb212e1..b4aefb7c85 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 f3589107b5..eb8833c5c5 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 aad26a9cc1..f56ec78b0c 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 ce663bdbd2..be8d7a5586 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 5a1cca0dc7..442370f17f 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 27166a40f9..ee852cee15 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 bfaaff863b..22fbde2480 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 0758ae05b8..274c35cd21 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 3cf1ae1152..984a8f2903 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 cffd375942..042793f974 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 ae24c6b809..2820a8a5b0 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 99c547e07e..f1fd222d22 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 e01c3f6880..2d786adec7 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 5bc25dd6ad..32114ab347 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 fe28eaf9be..b7f0497d7a 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 f0e4d379be..57fd11605e 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 a9d5ca0aaf..4b2d9da15e 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 7e50cc5845..526edb25f2 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 0ae6de3734..068cab626b 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 b2a1fab682..52de8e8a2f 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 ffdf02cd52..bb3ff8bff5 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 cbdc4282d4..1c52eac29f 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 8f987463b0..39b9ee004e 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 a60acfc31b..8931b796ae 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 e7df1f96df..2c4e64a789 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 5ef63392f5..ef97a01d6d 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 81cecc3ca7..d3102261b7 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 c5dd9798e3..85ffab67da 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 fad2a985c4..7bee95770c 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 2fe6858d81..15e1da4af2 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 59e1cf42a5..a520c6791c 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 25d849d136..03575b55b6 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 7bb90449cb..0400d0d92e 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 3773eca435..c6e10156e0 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 b2a7af763f..1284b3068d 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 9cebbf5d4d..9b3f8acfbd 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 87a85bd0ec..1c85494c27 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 2ad1a455d2..23b5ff14ee 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 242439ddbc..7e951a1515 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 8643a00dfb..f3a264769e 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 b4d6817c76..2e1c71fa19 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 23a3a20fea..700e5adaa8 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 81eb0b9e5e..c1f0f3773a 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 0d258cd891..1646b6ae68 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 4e7727b944..90ed44da9d 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 0a262e79a0..0ca3567ba6 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 1cbbe1041e..693e7f0587 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 85faf23809..6ddb883859 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 14dd953410..822efbde85 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 bc4c943258..bc83a850ed 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 b3f4778f46..205e1bbd94 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 9e3e9a2f26..e085380139 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 f26a729e16..2e5e17e1ee 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 755d8856d6..47c929dd42 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 5dcf88b29f..9297700f18 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 5b394fd959..50f4ff7eb6 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 7057b20169..6c85ef4fec 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 200ceedde9..249be41249 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 fb2395bf90..2b6e907d50 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 c7290c5974..3cb0fd9b2f 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 0db26672c6..dc06d0fb3b 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 e7bdcf20e8..de12c24e38 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 d29e0a923d..45661292d3 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 2c2a999fb9..90086726cb 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 eef5ff4957..c6c20f4ef7 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 c826c615a8..39f39cbdb8 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 08330d8b9c..44a2c1916b 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 b6f6fc8ae3..44d8e23529 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 fe8b16dd9e..3ff845f4d0 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 7bcf55ab9f..a610b9b825 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 4280c2a344..a698af343a 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 98048b8aa8..e0046df414 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 4f606468e7..839659e70d 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 fea9821b8f..497878d132 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 2f16a8587d..5befddd5d9 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 8e0038df60..fc5cbd91c0 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 8109c31e97..2a9b77c394 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 8d223d88ee..8e268752d5 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 19f46d9a65..083a45df5b 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 6a33fa95fe..2be27f07fc 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 8f1e4b2fe2..d8f9d5d398 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 3b73e2135b..797ed995c1 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 5e6e7a7444..ad5e125f54 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 910777a247..469a0923bc 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 e833ae65af..f36e99d4cf 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 4538835ec7..7c479ecaf8 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 16b2de0dea..fadf4000d5 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 3ce2d7863f..551264ed88 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 14d28bc8e4..baab606d03 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 17ef657c78..c4fb0b426d 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 f8ee6e658e..b2c130f3e9 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 955a76b435..137fb11f0f 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 755cb26926..d38adeab07 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 095cc88264..e26932323d 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 ba6a46771e..cdf2cffd4f 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 5cff129f7f..e17a6cb94c 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 14eccd1f25..8720c610e5 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 5edf833fba..4cc2863499 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 9051bef4d3..1c174b94ce 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 c5573a114e..8f417442d9 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 0a13ef1469..6f87aedbee 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 1992608db8..ae18b7e794 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 9c2f295418..f093bda549 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 cb86b1e866..32c7e90c07 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 4c0e2fe9ce..7d3e8c8b65 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 1db4f6ecc2..9d43c95d2a 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 71df9b3830..f66ed006d3 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 7f9aac71f2..c87251bd2f 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 b50fa171e0..4518c3874a 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 5117a3af48..1eb3606d02 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 31bacce374..ed4fb25d91 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 3313e5a8d2..01b522f102 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 671caeef1c..ac45c32a59 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 c06d25dc47..afeabe8d67 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 c9bdcfd0eb..d990f4a635 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 e03311025f..3ef9f0d5c0 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 d4fc760291..23aab70a13 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 07cd91aeaa..f0d2ff9be0 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 2adb1c3550..6f5ce3af76 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 101eee7f74..66722afa38 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 26203558e1..384fa97964 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 be529fbffb..7c815f215a 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 c571935682..9584e18d89 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 59febb90b7..1221efad58 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 f372525ea2..336d0d38cb 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 b5b170a1dd..15f46d1b63 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 b5dd7353d3..280ce698dc 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 71c9918f38..8c88498760 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 35a2eb8aa1..bb020b662a 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 853a9f10c4..90b504b9f1 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 ebc23afcd2..08c118df7f 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 452c2cbaba..0c9f25ea17 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 6873261ed5..2b98a89982 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 e47bb74f93..4d17c06e15 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 8669a83735..e82aefc57f 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 b127e8b67b..3a0b1ce2e6 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 7fff85424a..f0d634c372 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 952b1dec9f..49a40dc793 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 1a4100b7bd..595b13ef7b 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 1d1e49adc7..0b0843411f 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 9205b5110f..175a0ebf90 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 d96884738a..6ad7eda8b4 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 209d17a6fc..12301eda5e 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 e0459938f3..13e6e54ded 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 d0906049e1..f4628127a6 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 20c6bf5e9c..e6840cab73 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 c5697100d3..73e4d7b1f8 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 97cd087a8c..fc59e97d08 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 d8b1c2cde7..20803e254b 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 b9fad1c6a4..78064e746b 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 7ccbfcc9b8..b0da81025e 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 ed2b8275cb..8eda6f0de7 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 be60186e60..97d748defb 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 7f64b46509..66d776414b 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 9e7acdb2cd..78d8cf4731 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 ee5daeb1ff..e6527661f7 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 71d145a046..4ae011e026 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 160cd82bd7..0b8694954b 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
   {
   }
 };
-- 
GitLab