diff --git a/CMake/otbTestNullPtr.cpp b/CMake/otbTestNullPtr.cpp
index c46836eff42b14fef79db615217ef2c4cb9d265e..8abf4a6cae5a8d0a61d726a2e3fc91c08c2e5a42 100644
--- a/CMake/otbTestNullPtr.cpp
+++ b/CMake/otbTestNullPtr.cpp
@@ -1,6 +1,6 @@
 
 int main(int argc, char *argv[])
 {
-  int *p = nullptr;
+  int *p = ITK_NULLPTR;
   return 0;
 }
diff --git a/Examples/Filtering/GeometriesChangeSpatialReference.cxx b/Examples/Filtering/GeometriesChangeSpatialReference.cxx
index 536f26ffeb44d1e0ea03d2671689ba04ac0f9af9..0253b8a5160bf925f8bf089e282e667d1da49863 100644
--- a/Examples/Filtering/GeometriesChangeSpatialReference.cxx
+++ b/Examples/Filtering/GeometriesChangeSpatialReference.cxx
@@ -62,7 +62,7 @@ private:
 otb::ogr::UniqueGeometryPtr
 ReprojectTransformationFunctor::operator()(OGRGeometry const* in) const
 {
-  otb::ogr::UniqueGeometryPtr out(in ? in->clone() : 0);
+  otb::ogr::UniqueGeometryPtr out(in ? in->clone() : ITK_NULLPTR);
   if (out)
     {
     const OGRErr err = out->transform(m_reprojector.get());
@@ -204,7 +204,7 @@ int main (int argc, char **argv)
 
     otb::ogr::DataSource::Pointer output
       = options.workingInplace ? input
-      : options.outputIsStdout ? 0
+      : options.outputIsStdout ? ITK_NULLPTR
       : otb::ogr::DataSource::New( options.outputFile, otb::ogr::DataSource::Modes::Update_LayerCreateOnly);
     std::cout << "input: " << otb::ogr::version_proxy::GetFileListAsStringVector(&input->ogr())[0] << " should be: " << options.inputFile << "\n";
     if (output)
@@ -231,7 +231,7 @@ int main (int argc, char **argv)
       }
     else
       {
-      filter->UpdateOutputData(0);
+      filter->UpdateOutputData(ITK_NULLPTR);
       assert(filter->GetOutput() && "output not set");
       filter->GetOutput()->Print(std::cout, 0);
       }
diff --git a/Examples/Filtering/GeometriesFilter.cxx b/Examples/Filtering/GeometriesFilter.cxx
index 8150eceb979ff948ef7ea480913c0a887f387d94..35faff8aff18699e5cde37e1b95abe03e776348d 100644
--- a/Examples/Filtering/GeometriesFilter.cxx
+++ b/Examples/Filtering/GeometriesFilter.cxx
@@ -32,7 +32,7 @@ struct SwapXYFunctor
   typedef OGRGeometry TransformedElementType;
   otb::ogr::UniqueGeometryPtr operator()(OGRGeometry const* in) const
     {
-    otb::ogr::UniqueGeometryPtr out(in ? in->clone() : 0);
+    otb::ogr::UniqueGeometryPtr out(in ? in->clone() : ITK_NULLPTR);
     if (out)
       {
 #if GDAL_VERSION_NUM >= 1900
@@ -71,7 +71,7 @@ int main (int argc, char **argv)
 
     otb::ogr::DataSource::Pointer output
       = workingInplace ? input
-      : outputIsStdout ? 0
+      : outputIsStdout ? ITK_NULLPTR
       :                  otb::ogr::DataSource::New( outputFile, otb::ogr::DataSource::Modes::Update_LayerCreateOnly);
     std::cout << "input: " << otb::ogr::version_proxy::GetFileListAsStringVector(&input->ogr())[0] << " should be: " << inputFile << "\n";
     if (output)
@@ -94,7 +94,7 @@ int main (int argc, char **argv)
       }
     else
       {
-      filter->UpdateOutputData(0);
+      filter->UpdateOutputData(ITK_NULLPTR);
       assert(filter->GetOutput() && "output not set");
       filter->GetOutput()->Print(std::cout, 0);
       }
diff --git a/Examples/IO/OGRWrappersExample.cxx b/Examples/IO/OGRWrappersExample.cxx
index 23afc27e91695939586b279e3ce22b21686a3916..d7e3f0d7c37c3aec18b3e8cdd0af69a7cf571459 100644
--- a/Examples/IO/OGRWrappersExample.cxx
+++ b/Examples/IO/OGRWrappersExample.cxx
@@ -106,7 +106,7 @@ int main(int argc, char * argv[])
     otb::ogr::DataSource::Pointer destination = otb::ogr::DataSource::New(
       argv[2], otb::ogr::DataSource::Modes::Update_LayerCreateOnly);
     otb::ogr::Layer destLayer = destination->CreateLayer(
-      argv[2], 0, wkbMultiPolygon);
+      argv[2], ITK_NULLPTR, wkbMultiPolygon);
 // Software Guide : EndCodeSnippet
 
 // Software Guide : BeginLatex
diff --git a/Examples/Learning/SEMModelEstimatorExample.cxx b/Examples/Learning/SEMModelEstimatorExample.cxx
index 86f3e58f967d80e4c73031f65bd4ad32af0b87e6..cbe329d52fb8da24025e915274e0ab85c33e5764 100644
--- a/Examples/Learning/SEMModelEstimatorExample.cxx
+++ b/Examples/Learning/SEMModelEstimatorExample.cxx
@@ -100,7 +100,7 @@ int main(int argc, char * argv[])
 //  Software Guide : EndCodeSnippet
 
     char * fileNameIn = argv[1];
-    char * fileNameImgInit = NULL;
+    char * fileNameImgInit = ITK_NULLPTR;
     char * fileNameOut = argv[2];
     int    numberOfClasses = atoi(argv[3]);
     int    numberOfIteration = atoi(argv[4]);
@@ -146,7 +146,7 @@ int main(int argc, char * argv[])
 //  Software Guide : EndLatex
 
 //  Software Guide : BeginCodeSnippet
-    if (fileNameImgInit != NULL)
+    if (fileNameImgInit != ITK_NULLPTR)
       {
       typedef otb::ImageFileReader<OutputImageType> ImgInitReaderType;
       ImgInitReaderType::Pointer segReader = ImgInitReaderType::New();
diff --git a/Examples/Learning/SOMExample.cxx b/Examples/Learning/SOMExample.cxx
index 3f56132f43b30be9ecbaeb790f6f1f38b8e8f6ae..aa867d4433c3097573a2f61fc9466d64064a50fc 100644
--- a/Examples/Learning/SOMExample.cxx
+++ b/Examples/Learning/SOMExample.cxx
@@ -406,7 +406,7 @@ int main(int itkNotUsed(argc), char* argv[])
 //  Software Guide : EndLatex
 
 // Software Guide : BeginCodeSnippet
-  if (actMapFileName != NULL)
+  if (actMapFileName != ITK_NULLPTR)
     {
     ActivationWriterType::Pointer actWriter = ActivationWriterType::New();
     actWriter->SetFileName(actMapFileName);
diff --git a/Examples/Projections/OrthoRectificationExample.cxx b/Examples/Projections/OrthoRectificationExample.cxx
index 2acfc9caf0d1b7cb4c46a72afe556e3d3e84fcae..2a529cf77a643ec371d336a7bfda8e6fdbf2454f 100644
--- a/Examples/Projections/OrthoRectificationExample.cxx
+++ b/Examples/Projections/OrthoRectificationExample.cxx
@@ -152,8 +152,8 @@ int main(int argc, char* argv[])
   orthoRectifFilter->SetDisplacementFieldSpacing(gridSpacing);
 
   ImageType::PointType origin;
-  origin[0] = strtod(argv[5], NULL);
-  origin[1] = strtod(argv[6], NULL);
+  origin[0] = strtod(argv[5], ITK_NULLPTR);
+  origin[1] = strtod(argv[6], ITK_NULLPTR);
   orthoRectifFilter->SetOutputOrigin(origin);
 // Software Guide : EndCodeSnippet
 
diff --git a/Examples/Projections/SensorModelExample.cxx b/Examples/Projections/SensorModelExample.cxx
index b162762e692b9c20bbb32b17085ff19d64ed4de2..2b6b9fc8e0d86bb77d4af1d637ffdb5682c68145 100644
--- a/Examples/Projections/SensorModelExample.cxx
+++ b/Examples/Projections/SensorModelExample.cxx
@@ -184,8 +184,8 @@ int main(int argc, char* argv[])
   spacing[1] = -0.00001;
 
   ImageType::PointType origin;
-  origin[0] = strtod(argv[3], NULL);         //longitude
-  origin[1] = strtod(argv[4], NULL);         //latitude
+  origin[0] = strtod(argv[3], ITK_NULLPTR);         //longitude
+  origin[1] = strtod(argv[4], ITK_NULLPTR);         //latitude
 
   ImageType::RegionType region;
 
diff --git a/Examples/Simulation/LAIAndPROSAILToSensorResponse.cxx b/Examples/Simulation/LAIAndPROSAILToSensorResponse.cxx
index ef71b0422a5d65ae5608367fbf670c4dd8177644..b972fd7b4ebb8d15083317b005c27794eec19179 100644
--- a/Examples/Simulation/LAIAndPROSAILToSensorResponse.cxx
+++ b/Examples/Simulation/LAIAndPROSAILToSensorResponse.cxx
@@ -130,7 +130,7 @@ public:
 protected:
   ImageUniqueValuesCalculator()
     {
-    m_Image = NULL;
+    m_Image = ITK_NULLPTR;
     }
   ~ImageUniqueValuesCalculator() ITK_OVERRIDE
   {
@@ -469,7 +469,7 @@ private:
 
 int main(int argc, char *argv[])
 {
-  char *cmifname = NULL;
+  char *cmifname = ITK_NULLPTR;
   if (argc != 10)
     {
     if (argc == 11) // cloud mask filename optional parameter
@@ -804,7 +804,7 @@ int main(int argc, char *argv[])
   miReader->UpdateOutputInformation();
   MaskImageType::Pointer maskImage = miReader->GetOutput();
 
-  if (cmifname != NULL)
+  if (cmifname != ITK_NULLPTR)
     {
 
     MaskReaderType::Pointer cmiReader = MaskReaderType::New();
diff --git a/Examples/Tutorials/OrthoFusion.cxx b/Examples/Tutorials/OrthoFusion.cxx
index 46209ceaed8ccbfae0238396830c910d16aaf01e..a1ae3c6354bee480462c303f0e65d70bab9c11e0 100644
--- a/Examples/Tutorials/OrthoFusion.cxx
+++ b/Examples/Tutorials/OrthoFusion.cxx
@@ -139,8 +139,8 @@ int main(int argc, char* argv[])
   spacing[1] = atof(argv[11]);
 
   ImageType::PointType origin;
-  origin[0] = strtod(argv[6], NULL);
-  origin[1] = strtod(argv[7], NULL);
+  origin[0] = strtod(argv[6], ITK_NULLPTR);
+  origin[1] = strtod(argv[7], ITK_NULLPTR);
   // Software Guide : EndCodeSnippet
 
   //  Software Guide : BeginLatex
diff --git a/Modules/Adapters/CurlAdapters/src/otbCurlHelper.cxx b/Modules/Adapters/CurlAdapters/src/otbCurlHelper.cxx
index e464e78742c4e9a9346d51fea972a2bc19b64ab8..f72a10905174e4ba22d48221f26a7f7c57244d02 100644
--- a/Modules/Adapters/CurlAdapters/src/otbCurlHelper.cxx
+++ b/Modules/Adapters/CurlAdapters/src/otbCurlHelper.cxx
@@ -175,7 +175,7 @@ public:
   {
     m_File = fopen(infname, "wb");
 
-    if (m_File == NULL)
+    if (m_File == ITK_NULLPTR)
       {
       itkExceptionMacro(<<" otbCurlHelper::FileResource : failed to open the file ."<< infname);
       }
diff --git a/Modules/Adapters/GdalAdapters/include/otbOGRDataSourceWrapper.h b/Modules/Adapters/GdalAdapters/include/otbOGRDataSourceWrapper.h
index 512111e9421e21958910eb4b3fbefa71d86a93ee..c1c9cee5f3729dffcf854e1cba42abf29e45ab5d 100644
--- a/Modules/Adapters/GdalAdapters/include/otbOGRDataSourceWrapper.h
+++ b/Modules/Adapters/GdalAdapters/include/otbOGRDataSourceWrapper.h
@@ -276,7 +276,7 @@ public:
    *  \return the extent of all layers
    *  \throw itk::ExceptionObject if the layers extents can not be retrieved.
    */
-  OGREnvelope GetGlobalExtent(bool force = false, std::string * outwkt=0) const;
+  OGREnvelope GetGlobalExtent(bool force = false, std::string * outwkt=ITK_NULLPTR) const;
 
   /** Grafts data and information from one data source to another.
    * \deprecated \c OGRLayer has an embedded input iterator. As a consequence,
@@ -323,7 +323,7 @@ public:
    */
   Layer CreateLayer(
     std::string        const& name,
-    OGRSpatialReference     * poSpatialRef = NULL,
+    OGRSpatialReference     * poSpatialRef = ITK_NULLPTR,
     OGRwkbGeometryType        eGType = wkbUnknown,
     std::vector<std::string> const& papszOptions = std::vector<std::string>());
 
@@ -363,7 +363,7 @@ public:
   Layer CopyLayer(
     Layer            & srcLayer,
     std::string const& newName,
-    char            ** papszOptions = NULL);
+    char            ** papszOptions = ITK_NULLPTR);
   //@}
 
   /**\name Layers access
@@ -466,7 +466,7 @@ public:
    * \see <em>Imperfect C++</em>, Matthew Wilson, Addisson-Welsey, par 24.6
    */
   operator int boolean ::* () const {
-    return m_DataSource ? &boolean::i : 0;
+    return m_DataSource ? &boolean::i : ITK_NULLPTR;
     }
 
   /** Flushes all changes to disk.
diff --git a/Modules/Adapters/GdalAdapters/include/otbOGRHelpers.h b/Modules/Adapters/GdalAdapters/include/otbOGRHelpers.h
index f15f249b1d34d0983f1c54355873b7fa0dabb119..713715283d3ede9ca891e7e2185e1ed5df612fae 100644
--- a/Modules/Adapters/GdalAdapters/include/otbOGRHelpers.h
+++ b/Modules/Adapters/GdalAdapters/include/otbOGRHelpers.h
@@ -76,7 +76,7 @@ struct StringListConverter
       {
       m_raw.push_back(b->c_str());
       }
-    m_raw.push_back(0);
+    m_raw.push_back(ITK_NULLPTR);
     assert(CSLCount(const_cast <char**>(&m_raw[0])) == static_cast<int>(boost::size(strings)));
     }
   /**
@@ -85,7 +85,7 @@ struct StringListConverter
   char ** to_ogr() const
     {
     return m_raw.size() == 1
-            ? NULL
+            ? ITK_NULLPTR
             : const_cast <char**>(&m_raw[0]);
     }
 private:
diff --git a/Modules/Adapters/GdalAdapters/include/otbOGRLayerWrapper.h b/Modules/Adapters/GdalAdapters/include/otbOGRLayerWrapper.h
index b26ebbce5690248fc5ae2b8ddda4001a0ddb2c29..851ce7eecee4639f8342369c0a8f587ecaf30493 100644
--- a/Modules/Adapters/GdalAdapters/include/otbOGRLayerWrapper.h
+++ b/Modules/Adapters/GdalAdapters/include/otbOGRLayerWrapper.h
@@ -230,7 +230,7 @@ public:
    */
   operator int boolean ::* () const
     {
-    return m_Layer ? &boolean::i : 0;
+    return m_Layer ? &boolean::i : ITK_NULLPTR;
     }
 
   /** Access to raw \c OGRLayer.
@@ -332,12 +332,12 @@ public:
     struct enabler {};
   public:
     feature_iter()
-      : m_Layer(0), m_Crt(0) {}
+      : m_Layer(ITK_NULLPTR), m_Crt(ITK_NULLPTR) {}
     explicit feature_iter(otb::ogr::Layer & layer)
       : m_Layer(&layer), m_Crt(layer.GetNextFeature()) {}
     template <class OtherValue> feature_iter(
       feature_iter<OtherValue> const& other,
-      typename boost::enable_if<boost::is_convertible<OtherValue*,Value*> >::type* = 0
+      typename boost::enable_if<boost::is_convertible<OtherValue*,Value*> >::type* = ITK_NULLPTR
     )
       : m_Layer(other.m_Layer), m_Crt(other.m_Crt)
       {}
diff --git a/Modules/Adapters/GdalAdapters/src/otbGeometriesToGeometriesFilter.cxx b/Modules/Adapters/GdalAdapters/src/otbGeometriesToGeometriesFilter.cxx
index bec8f7a6eee1fff0d588f025bf98057d190e2729..214aaedc7065d706a5cd6537c27b8b95799ef45d 100644
--- a/Modules/Adapters/GdalAdapters/src/otbGeometriesToGeometriesFilter.cxx
+++ b/Modules/Adapters/GdalAdapters/src/otbGeometriesToGeometriesFilter.cxx
@@ -216,7 +216,7 @@ void otb::GeometriesToGeometriesFilter::GenerateData(void )
 OGRSpatialReference* otb::GeometriesToGeometriesFilter::DoDefineNewLayerSpatialReference(
   ogr::Layer const& itkNotUsed(source)) const
 {
-  return 0;
+  return ITK_NULLPTR;
 }
 
 /*virtual*/
diff --git a/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx b/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx
index 891c22b662caa6df44cf8d1c0b04507dbc4289d2..a3d312e2aca44f1cecaec6acb4d2a862cebb6341 100644
--- a/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx
+++ b/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx
@@ -40,7 +40,7 @@
 /*===========================================================================*/
 bool otb::ogr::DataSource::Clear()
 {
-  Reset(0);
+  Reset(ITK_NULLPTR);
   return true;
 }
 
@@ -104,7 +104,7 @@ char const* DeduceDriverName(std::string filename)
       boost::bind(&ExtensionDriverAssociation::Matches, _1, extension));
   if (whichIt ==  boost::end(k_ExtensionDriverMap))
     {
-    return 0; // nothing found
+    return ITK_NULLPTR; // nothing found
     }
   return whichIt->driverName;
   }
@@ -112,7 +112,7 @@ char const* DeduceDriverName(std::string filename)
 
 
 otb::ogr::DataSource::DataSource()
-: m_DataSource(0),
+: m_DataSource(ITK_NULLPTR),
   m_OpenMode(Modes::Update_LayerUpdate),
   m_FirstModifiableLayerID(0)
 {
@@ -195,7 +195,7 @@ otb::ogr::DataSource::New(std::string const& datasourceName, Modes::type mode)
 
   ogr::version_proxy::GDALDatasetType * ds = ogr::version_proxy::Open(datasourceName.c_str(),true);
 
-  bool ds_exists = (ds!=NULL);
+  bool ds_exists = (ds!=ITK_NULLPTR);
 
   ogr::version_proxy::Close(ds);
   
@@ -343,7 +343,7 @@ otb::ogr::Layer otb::ogr::DataSource::CreateLayer(
   }
 
   itkGenericExceptionMacro(<< "GDALDataset opening mode not supported");
-  return Layer(0, false); // keep compiler happy
+  return Layer(ITK_NULLPTR, false); // keep compiler happy
 }
 
 otb::ogr::Layer otb::ogr::DataSource::CopyLayer(
@@ -542,7 +542,7 @@ otb::ogr::Layer otb::ogr::DataSource::ExecuteSQL(
     // Cannot use the deleter made for result sets obtained from
     // GDALDataset::ExecuteSQL because it checks for non-nullity....
     // *sigh*
-    return otb::ogr::Layer(0, modifiable);
+    return otb::ogr::Layer(ITK_NULLPTR, modifiable);
 #endif
     }
   return otb::ogr::Layer(layer_ptr, *m_DataSource, modifiable);
diff --git a/Modules/Adapters/GdalAdapters/src/otbOGRLayerWrapper.cxx b/Modules/Adapters/GdalAdapters/src/otbOGRLayerWrapper.cxx
index b37eb9be8ef26199efffbecc08ab6e28ae944e96..7b48b0998ccf3f05bc185fb1bce874f5672b371e 100644
--- a/Modules/Adapters/GdalAdapters/src/otbOGRLayerWrapper.cxx
+++ b/Modules/Adapters/GdalAdapters/src/otbOGRLayerWrapper.cxx
@@ -270,7 +270,7 @@ OGRSpatialReference const* otb::ogr::Layer::GetSpatialRef() const
 std::string otb::ogr::Layer::GetProjectionRef() const
 {
   assert(m_Layer && "OGRLayer not initialized");
-  char * wkt = 0;
+  char * wkt = ITK_NULLPTR;
   OGRSpatialReference const* srs = GetSpatialRef();
   if(srs)
     {
diff --git a/Modules/Adapters/GdalAdapters/src/otbOGRVersionProxy1x.cxx b/Modules/Adapters/GdalAdapters/src/otbOGRVersionProxy1x.cxx
index 6020ec3ebb0ab995e8098a3a86654497dd2aef4b..8a21d09882a99b96a0c098b5a46181970f9f1717 100644
--- a/Modules/Adapters/GdalAdapters/src/otbOGRVersionProxy1x.cxx
+++ b/Modules/Adapters/GdalAdapters/src/otbOGRVersionProxy1x.cxx
@@ -57,7 +57,7 @@ bool Delete(const char * name)
 {
   // Open dataset
   GDALDatasetType * poDS = Open(name,false);
-  GDALDriverType * poDriver = NULL;
+  GDALDriverType * poDriver = ITK_NULLPTR;
   if(poDS)
     {
     poDriver = poDS->GetDriver();
diff --git a/Modules/Adapters/GdalAdapters/test/otbOGRDataSourceWrapperNew.cxx b/Modules/Adapters/GdalAdapters/test/otbOGRDataSourceWrapperNew.cxx
index 6e6eb7301bb9bb27a268e427a6eb0fe36b684294..ff19e550f6de320fc3b77ba95334ab4f3713ae2e 100644
--- a/Modules/Adapters/GdalAdapters/test/otbOGRDataSourceWrapperNew.cxx
+++ b/Modules/Adapters/GdalAdapters/test/otbOGRDataSourceWrapperNew.cxx
@@ -188,7 +188,7 @@ BOOST_AUTO_TEST_CASE(OGRDataSource_shp_overwrite)
   ogr::DataSource::Pointer ds
     = ogr::DataSource::New(filename, ogr::DataSource::Modes::Overwrite);
   BOOST_ASSERT(ds);
-  ogr::Layer l = ds -> CreateLayer(layer1, 0, wkbPoint);
+  ogr::Layer l = ds -> CreateLayer(layer1, ITK_NULLPTR, wkbPoint);
   OGRFeatureDefn & defn = l.GetLayerDefn();
   l.CreateField(k_f0);
   l.CreateField(k_f1);
@@ -222,7 +222,7 @@ BOOST_AUTO_TEST_CASE(OGRDataSource_shp_overwrite)
   ogr::DataSource::Pointer ds
     = ogr::DataSource::New(filename, ogr::DataSource::Modes::Overwrite);
   BOOST_ASSERT(ds);
-  ogr::Layer l = ds -> CreateLayer(layer1, 0, wkbPoint);
+  ogr::Layer l = ds -> CreateLayer(layer1, ITK_NULLPTR, wkbPoint);
   OGRFeatureDefn & defn = l.GetLayerDefn();
   l.CreateField(k_f0);
   l.CreateField(k_f1);
@@ -473,7 +473,7 @@ BOOST_AUTO_TEST_CASE(OGRDataSource_sqlite_overwrite)
   ogr::DataSource::Pointer ds
     = ogr::DataSource::New(filename, ogr::DataSource::Modes::Overwrite);
   BOOST_ASSERT(ds);
-  ogr::Layer l = ds -> CreateLayer(layer1, 0, wkbPoint);
+  ogr::Layer l = ds -> CreateLayer(layer1, ITK_NULLPTR, wkbPoint);
   OGRFeatureDefn & defn = l.GetLayerDefn();
   l.CreateField(k_f0);
   l.CreateField(k_f1);
@@ -507,7 +507,7 @@ BOOST_AUTO_TEST_CASE(OGRDataSource_sqlite_overwrite)
   ogr::DataSource::Pointer ds
     = ogr::DataSource::New(filename, ogr::DataSource::Modes::Overwrite);
   BOOST_ASSERT(ds);
-  ogr::Layer l = ds -> CreateLayer(layer1, 0, wkbPoint);
+  ogr::Layer l = ds -> CreateLayer(layer1, ITK_NULLPTR, wkbPoint);
   OGRFeatureDefn & defn = l.GetLayerDefn();
   l.CreateField(k_f0);
   l.CreateField(k_f1);
@@ -600,7 +600,7 @@ BOOST_AUTO_TEST_CASE(OGRDataSource_sqlite_overwrite)
 
   // Check that we can read the file
   BOOST_ASSERT(ds);
-  ogr::Layer l = ds -> CreateLayer(layer1, 0, wkbPoint);
+  ogr::Layer l = ds -> CreateLayer(layer1, ITK_NULLPTR, wkbPoint);
   BOOST_CHECK_EQUAL(l.GetFeatureCount(true), 0);
 
 //  OGRFeatureDefn & defn = l.GetLayerDefn();
@@ -675,7 +675,7 @@ BOOST_AUTO_TEST_CASE(Add_n_Del_Fields)
     ogr::FieldDefn f5(*defn.GetFieldDefn(5));
     BOOST_CHECK_EQUAL(f5, k_f5);
 
-    BOOST_CHECK_EQUAL(defn.GetFieldDefn(6), (void*)0);
+    BOOST_CHECK_EQUAL(defn.GetFieldDefn(6), (void*)ITK_NULLPTR);
     }
 
 #if GDAL_VERSION_NUM >= 1900
@@ -799,7 +799,7 @@ BOOST_AUTO_TEST_CASE(OGRDataSource_new_shp_with_features)
   const std::string k_shp = "SomeShapeFileWithFeatures";
   ogr::DataSource::Pointer ds = ogr::DataSource::New(k_shp+".shp", ogr::DataSource::Modes::Overwrite);
 
-  ogr::Layer l = ds -> CreateLayer(k_one, 0, wkbPoint);
+  ogr::Layer l = ds -> CreateLayer(k_one, ITK_NULLPTR, wkbPoint);
 
   OGRFeatureDefn & defn = l.GetLayerDefn();
   l.CreateField(k_f0);
@@ -837,7 +837,7 @@ BOOST_AUTO_TEST_CASE(Local_Geometries)
 BOOST_AUTO_TEST_CASE(Add_n_Read_Geometries)
 {
   ogr::DataSource::Pointer ds = ogr::DataSource::New();
-  ogr::Layer l = ds -> CreateLayer(k_one, 0, wkbPoint);
+  ogr::Layer l = ds -> CreateLayer(k_one, ITK_NULLPTR, wkbPoint);
 
   OGRFeatureDefn & defn = l.GetLayerDefn();
   for (int u=-10; u!=10; ++u) {
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbDEMConvertAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbDEMConvertAdapter.cxx
index c351930bd2c748d0fade932c4e586c19ed506eea..4144f07eaa1bce5e9affb68b9c359b7fb23ca58a 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbDEMConvertAdapter.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbDEMConvertAdapter.cxx
@@ -89,7 +89,7 @@ int DEMConvertAdapter::Convert(std::string tempFilename, std::string output)
   ih->initialize();
 
   ossimRefPtr<ossimImageSource> source = ih.get();
-  ossimRefPtr<ossimBandSelector> bs = 0;
+  ossimRefPtr<ossimBandSelector> bs = ITK_NULLPTR;
 
 
   // Get the image rectangle for the rrLevel selected.
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbDEMHandler.cxx b/Modules/Adapters/OSSIMAdapters/src/otbDEMHandler.cxx
index e5dd39cc7773ddae6fa2a9dd53c85e94434c0a82..64eaef2f8008fb7859481b05877914c69dfc505a 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbDEMHandler.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbDEMHandler.cxx
@@ -48,15 +48,15 @@
 namespace otb
 {
 /** Initialize the singleton */
-DEMHandler::Pointer DEMHandler::m_Singleton = NULL;
+DEMHandler::Pointer DEMHandler::m_Singleton = ITK_NULLPTR;
 
 DEMHandler::Pointer DEMHandler::Instance()
 {
-  if(m_Singleton.GetPointer() == NULL)
+  if(m_Singleton.GetPointer() == ITK_NULLPTR)
     {
     m_Singleton = itk::ObjectFactory<Self>::Create();
 
-    if(m_Singleton.GetPointer() == NULL)
+    if(m_Singleton.GetPointer() == ITK_NULLPTR)
       {
       m_Singleton = new DEMHandler;
       }
@@ -149,7 +149,7 @@ bool
 DEMHandler
 ::OpenGeoidFile(const char* geoidFile)
 {
-  if ((ossimGeoidManager::instance()->findGeoidByShortName("geoid1996")) == 0)
+  if ((ossimGeoidManager::instance()->findGeoidByShortName("geoid1996")) == ITK_NULLPTR)
     {
     otbMsgDevMacro(<< "Opening geoid: " << geoidFile);
     ossimFilename           geoid(geoidFile);
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbDateTimeAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbDateTimeAdapter.cxx
index 16dd4ecc5d9a7c9f4e66cfd9e5d984e0c40409b5..e4e086db444fe1434b296170474a024cddce136d 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbDateTimeAdapter.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbDateTimeAdapter.cxx
@@ -29,7 +29,7 @@ DateTimeAdapter::DateTimeAdapter()
 
 DateTimeAdapter::~DateTimeAdapter()
 {
-  if (m_LocalTm != NULL)
+  if (m_LocalTm != ITK_NULLPTR)
     {
     delete m_LocalTm;
     }
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbEllipsoidAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbEllipsoidAdapter.cxx
index 3141cb4de36964507773c862d8bc72d82f837bb2..363afa67d03886e222fbc107c9b3948341814a34 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbEllipsoidAdapter.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbEllipsoidAdapter.cxx
@@ -41,7 +41,7 @@ EllipsoidAdapter::EllipsoidAdapter()
 
 EllipsoidAdapter::~EllipsoidAdapter()
 {
-  if (m_Ellipsoid != NULL)
+  if (m_Ellipsoid != ITK_NULLPTR)
     {
     delete m_Ellipsoid;
     }
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbGeometricSarSensorModelAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbGeometricSarSensorModelAdapter.cxx
index b0fa03d0626aa833632640b906418fd06a14ccd3..983aef60cca3602acc3592956bc4c1aabf1dc9ff 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbGeometricSarSensorModelAdapter.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbGeometricSarSensorModelAdapter.cxx
@@ -42,16 +42,16 @@
 namespace otb {
 
 GeometricSarSensorModelAdapter::GeometricSarSensorModelAdapter():
-  m_SensorModel(NULL)
+  m_SensorModel(ITK_NULLPTR)
 {
 }
 
 GeometricSarSensorModelAdapter::~GeometricSarSensorModelAdapter()
 {
-  if (m_SensorModel != NULL)
+  if (m_SensorModel != ITK_NULLPTR)
     {
     delete m_SensorModel;
-    m_SensorModel = NULL;
+    m_SensorModel = ITK_NULLPTR;
     }
 }
 
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx b/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx
index 1e506fd35c5839d9756109dca179e8ddf98cf301..272eb98d72f38adf4e8735c520725d2ebde1cf3b 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx
@@ -258,7 +258,7 @@ ReadGeometryFromImage(const std::string& filename, bool checkRpcTag)
 
     // Free memory
     delete projection;
-    projection = 0;
+    projection = ITK_NULLPTR;
 
     }
 
@@ -433,15 +433,15 @@ ReadGeometryFromRPCTag(const std::string& filename)
 
   //  try to use GeoTiff RPC tag if present.
   // Warning : RPC in subdatasets are not supported
-  GDALDriverH identifyDriverH = GDALIdentifyDriver(filename.c_str(), NULL);
-  if(identifyDriverH == NULL)
+  GDALDriverH identifyDriverH = GDALIdentifyDriver(filename.c_str(), ITK_NULLPTR);
+  if(identifyDriverH == ITK_NULLPTR)
     {
     // If no driver has identified the dataset, don't try to open it and exit
     return otb_kwl;
     }
 
   GDALDatasetH datasetH = GDALOpen(filename.c_str(), GA_ReadOnly);
-  if (datasetH != NULL)
+  if (datasetH != ITK_NULLPTR)
     {
     GDALDataset* dataset = static_cast<GDALDataset*>(datasetH);
     GDALRPCInfo rpcStruct;
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbMapProjectionAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbMapProjectionAdapter.cxx
index b61797163a4b2ff108b793bb0643e1b0f9be4137..8e161bfb3b1253a59b43bc6bb30319dcef5f6326 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbMapProjectionAdapter.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbMapProjectionAdapter.cxx
@@ -73,13 +73,13 @@ namespace otb
 {
 
 MapProjectionAdapter::MapProjectionAdapter():
-  m_MapProjection(NULL), m_ProjectionRefWkt(""), m_ReinstanciateProjection(true)
+  m_MapProjection(ITK_NULLPTR), m_ProjectionRefWkt(""), m_ReinstanciateProjection(true)
 {
 }
 
 MapProjectionAdapter::~MapProjectionAdapter()
 {
-  if (m_MapProjection != NULL)
+  if (m_MapProjection != ITK_NULLPTR)
     {
     delete m_MapProjection;
     }
@@ -88,7 +88,7 @@ MapProjectionAdapter::~MapProjectionAdapter()
 MapProjectionAdapter::InternalMapProjectionPointer MapProjectionAdapter::GetMapProjection()
 {
   itkDebugMacro("returning MapProjection address " << this->m_MapProjection);
-  if ((m_ReinstanciateProjection) || (m_MapProjection == NULL))
+  if ((m_ReinstanciateProjection) || (m_MapProjection == ITK_NULLPTR))
     {
     this->InstanciateProjection();
     }
@@ -99,7 +99,7 @@ MapProjectionAdapter::InternalMapProjectionPointer MapProjectionAdapter::GetMapP
 MapProjectionAdapter::InternalMapProjectionConstPointer MapProjectionAdapter::GetMapProjection() const
 {
   itkDebugMacro("returning MapProjection address " << this->m_MapProjection);
-  if ((m_ReinstanciateProjection) || (m_MapProjection == NULL))
+  if ((m_ReinstanciateProjection) || (m_MapProjection == ITK_NULLPTR))
     {
     itkExceptionMacro(<< "m_MapProjection not up-to-date, call InstanciateProjection() first");
     }
@@ -111,7 +111,7 @@ std::string MapProjectionAdapter::GetWkt() const
 {
   ossimKeywordlist kwl;
   this->GetMapProjection();
-  if (m_MapProjection == NULL)
+  if (m_MapProjection == ITK_NULLPTR)
     {
     return "";
     }
@@ -217,7 +217,7 @@ std::string MapProjectionAdapter::GetParameter(const std::string& key) const
 
 bool MapProjectionAdapter::InstanciateProjection()
 {
-  if ((this->m_ReinstanciateProjection) || (m_MapProjection == NULL))
+  if ((this->m_ReinstanciateProjection) || (m_MapProjection == ITK_NULLPTR))
     {
     ossimKeywordlist      kwl;
     ossimOgcWktTranslator wktTranslator;
@@ -248,7 +248,7 @@ bool MapProjectionAdapter::InstanciateProjection()
       // ossimUtmProjection for example)
       ossimString name(m_ProjectionRefWkt);
       m_MapProjection = ossimMapProjectionFactory::instance()->createProjection(name);
-      if (m_MapProjection == NULL)
+      if (m_MapProjection == ITK_NULLPTR)
         {
         // Trying directly extending the m_ProjectionRefWkt (convert the
         // Utm to ossimUtmProjection for example)
@@ -258,7 +258,7 @@ bool MapProjectionAdapter::InstanciateProjection()
         m_MapProjection = ossimMapProjectionFactory::instance()->createProjection(extendedName);
        }
 
-      if (m_MapProjection == NULL) return false;
+      if (m_MapProjection == ITK_NULLPTR) return false;
 
       }
 
@@ -272,7 +272,7 @@ bool MapProjectionAdapter::InstanciateProjection()
 void MapProjectionAdapter::InverseTransform(double x, double y, double z,
                                        double& lon, double& lat, double& h)
 {
-  if (m_MapProjection == NULL)
+  if (m_MapProjection == ITK_NULLPTR)
     {
     otbMsgDevMacro(<< "WARNING: Using identity");
     lon = x;
@@ -296,7 +296,7 @@ void MapProjectionAdapter::InverseTransform(double x, double y, double z,
 void MapProjectionAdapter::ForwardTransform(double lon, double lat, double h,
                                        double& x, double& y, double& z)
 {
-  if (m_MapProjection == NULL)
+  if (m_MapProjection == ITK_NULLPTR)
     {
     otbMsgDevMacro(<< "WARNING: Using identity");
     x = lon;
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbPlatformPositionAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbPlatformPositionAdapter.cxx
index 3853baa4801bbd8155e451365d10793957aa7ec4..a0ccace85c320d42144e821dff61f348827d2484 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbPlatformPositionAdapter.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbPlatformPositionAdapter.cxx
@@ -30,16 +30,16 @@
 namespace otb {
 
 PlatformPositionAdapter::PlatformPositionAdapter():
-  m_SensorModel(NULL)
+  m_SensorModel(ITK_NULLPTR)
 {
 }
 
 PlatformPositionAdapter::~PlatformPositionAdapter()
 {
-  if (m_SensorModel != NULL)
+  if (m_SensorModel != ITK_NULLPTR)
     {
     delete m_SensorModel;
-    m_SensorModel = NULL;
+    m_SensorModel = ITK_NULLPTR;
     }
 }
 
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx b/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx
index 8f9ef695293f9e3ca61624fd34c6f8774e32969f..69debaf5bed275e7ffff8decc1a76fae35c73147 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx
@@ -51,7 +51,7 @@ namespace otb
 {
 
 SensorModelAdapter::SensorModelAdapter():
-  m_SensorModel(NULL), m_TiePoints(NULL) // FIXME keeping the original value but...
+  m_SensorModel(ITK_NULLPTR), m_TiePoints(ITK_NULLPTR) // FIXME keeping the original value but...
 {
   m_DEMHandler = DEMHandler::Instance();
   m_TiePoints = new ossimTieGptSet();
@@ -59,15 +59,15 @@ SensorModelAdapter::SensorModelAdapter():
 
 SensorModelAdapter::~SensorModelAdapter()
 {
-  if (m_SensorModel != NULL)
+  if (m_SensorModel != ITK_NULLPTR)
     {
     delete m_SensorModel;
-    m_SensorModel = NULL;
+    m_SensorModel = ITK_NULLPTR;
     }
-  if(m_TiePoints!=NULL)
+  if(m_TiePoints!=ITK_NULLPTR)
     {
     delete m_TiePoints;
-    m_TiePoints = NULL;
+    m_TiePoints = ITK_NULLPTR;
     }
 }
 
@@ -80,7 +80,7 @@ void SensorModelAdapter::CreateProjection(const ImageKeywordlist& image_kwl)
   otbMsgDevMacro(<< "* type: " << geom.find("type"));
 
   m_SensorModel = ossimSensorModelFactory::instance()->createProjection(geom);
-  if (m_SensorModel == NULL)
+  if (m_SensorModel == ITK_NULLPTR)
     {
       m_SensorModel = ossimplugins::ossimPluginProjectionFactory::instance()->createProjection(geom);
     }
@@ -88,7 +88,7 @@ void SensorModelAdapter::CreateProjection(const ImageKeywordlist& image_kwl)
 
 bool SensorModelAdapter::IsValidSensorModel()
 {
-  if (m_SensorModel == NULL)
+  if (m_SensorModel == ITK_NULLPTR)
     {
       return false;
     }
@@ -101,7 +101,7 @@ bool SensorModelAdapter::IsValidSensorModel()
 void SensorModelAdapter::ForwardTransformPoint(double x, double y, double z,
                                                double& lon, double& lat, double& h) const
 {
-  if (this->m_SensorModel == NULL)
+  if (this->m_SensorModel == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "ForwardTransformPoint(): Invalid sensor model (m_SensorModel pointer is null)");
     }
@@ -120,7 +120,7 @@ void SensorModelAdapter::ForwardTransformPoint(double x, double y, double z,
 void SensorModelAdapter::ForwardTransformPoint(double x, double y,
                                                double& lon, double& lat, double& h) const
 {
-  if (this->m_SensorModel == NULL)
+  if (this->m_SensorModel == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "ForwardTransformPoint(): Invalid sensor model (m_SensorModel pointer is null)");
     }
@@ -139,7 +139,7 @@ void SensorModelAdapter::ForwardTransformPoint(double x, double y,
 void SensorModelAdapter::InverseTransformPoint(double lon, double lat, double h,
                                                double& x, double& y, double& z) const
 {
-  if (this->m_SensorModel == NULL)
+  if (this->m_SensorModel == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "InverseTransformPoint(): Invalid sensor model (m_SensorModel pointer is null)");
     }
@@ -159,7 +159,7 @@ void SensorModelAdapter::InverseTransformPoint(double lon, double lat, double h,
 void SensorModelAdapter::InverseTransformPoint(double lon, double lat,
                                                double& x, double& y, double& z) const
 {
-  if (this->m_SensorModel == NULL)
+  if (this->m_SensorModel == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "InverseTransformPoint(): Invalid sensor model (m_SensorModel pointer is null)");
     }
@@ -215,27 +215,27 @@ double SensorModelAdapter::Optimize()
   double precision = 0.;
 
   // If tie points and model are allocated
-  if(m_SensorModel != NULL)
+  if(m_SensorModel != ITK_NULLPTR)
     {
     // try to retrieve a sensor model
 
-    ossimSensorModel * sensorModel = NULL;
+    ossimSensorModel * sensorModel = ITK_NULLPTR;
 	sensorModel = dynamic_cast<ossimSensorModel *>(m_SensorModel);
 
-    ossimRpcProjection * simpleRpcModel = NULL;
+    ossimRpcProjection * simpleRpcModel = ITK_NULLPTR;
     simpleRpcModel = dynamic_cast<ossimRpcProjection *>(m_SensorModel);
 
      //Handle expections
-	 if ( (sensorModel == NULL ) && (simpleRpcModel == NULL ) )
+	 if ( (sensorModel == ITK_NULLPTR ) && (simpleRpcModel == ITK_NULLPTR ) )
 		itkExceptionMacro(<< "Optimize(): error, both dynamic_cast from ossimProjection* to ossimSensorModel* / ossimRpcProjection* failed.");
 
 
-    if(sensorModel != NULL )
+    if(sensorModel != ITK_NULLPTR )
       {
 			// Call optimize fit
 			precision  = sensorModel->optimizeFit(*m_TiePoints);
       }
-    else if (simpleRpcModel != NULL)
+    else if (simpleRpcModel != ITK_NULLPTR)
 	  {
 		  	// Call optimize fit
 			precision  = simpleRpcModel->optimizeFit(*m_TiePoints);
@@ -256,39 +256,39 @@ bool SensorModelAdapter::ReadGeomFile(const std::string & infile)
 
   m_SensorModel = ossimSensorModelFactory::instance()->createProjection(geom);
 
-  if (m_SensorModel == NULL)
+  if (m_SensorModel == ITK_NULLPTR)
     {
     m_SensorModel = ossimplugins::ossimPluginProjectionFactory::instance()->createProjection(geom);
     }
 
-  return (m_SensorModel != NULL);
+  return (m_SensorModel != ITK_NULLPTR);
 }
 
 bool SensorModelAdapter::WriteGeomFile(const std::string & outfile)
 {
   // If tie points and model are allocated
-  if(m_SensorModel != NULL)
+  if(m_SensorModel != ITK_NULLPTR)
     {
     // try to retrieve a sensor model
-    ossimSensorModel * sensorModel = NULL;
+    ossimSensorModel * sensorModel = ITK_NULLPTR;
     sensorModel = dynamic_cast<ossimSensorModel *>(m_SensorModel);
 
-    ossimRpcProjection * simpleRpcModel = NULL;
+    ossimRpcProjection * simpleRpcModel = ITK_NULLPTR;
     simpleRpcModel = dynamic_cast<ossimRpcProjection *>(m_SensorModel);
 
 	//Handle expections
-	if ( (sensorModel == NULL ) && (simpleRpcModel == NULL ) )
+	if ( (sensorModel == ITK_NULLPTR ) && (simpleRpcModel == ITK_NULLPTR ) )
 		itkExceptionMacro(<< "Optimize(): error, both dynamic_cast from ossimProjection* to ossimSensorModel* / ossimRpcProjection* failed.");
 
 
 	ossimKeywordlist geom;
     bool success = false;
-    if(sensorModel != NULL )
+    if(sensorModel != ITK_NULLPTR )
       {
 			// Save state
 			success = sensorModel->saveState(geom);
       }
-    else if (simpleRpcModel != NULL)
+    else if (simpleRpcModel != ITK_NULLPTR)
 	  {
 			// Save state
 			success = simpleRpcModel->saveState(geom);
diff --git a/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx b/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx
index d6153c48801e1c8046e98c762061ae0811fc24e3..5ef1ccaed7b02d6521b7f87f5773b817f74ee766 100644
--- a/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx
+++ b/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx
@@ -77,7 +77,7 @@ private:
       std::string shapefile = GetParameterString("inshp");
 
        otb::ogr::DataSource::Pointer ogrDS;
-       otb::ogr::Layer layer(NULL, false);
+       otb::ogr::Layer layer(ITK_NULLPTR, false);
 
        OGRSpatialReference oSRS("");
        std::vector<std::string> options;
@@ -130,7 +130,7 @@ private:
            
            featValue.push_back(mv);
            feature = layer.ogr().GetNextFeature();
-           goesOn = feature.addr() != 0;
+           goesOn = feature.addr() != ITK_NULLPTR;
          }
   
       MeasurementType mean; mean.SetSize(nbFeatures);
diff --git a/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx b/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx
index 50a8a736e05dab904f5c622fc8868cdb58758841..b1161dddd7a2fd9e8bd66bf930f299aa7ca29e46 100644
--- a/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx
@@ -96,7 +96,7 @@ private:
       std::string shapefile = GetParameterString("inshp");
 
       otb::ogr::DataSource::Pointer ogrDS;
-      otb::ogr::Layer layer(NULL, false);
+      otb::ogr::Layer layer(ITK_NULLPTR, false);
       
       OGRSpatialReference oSRS("");
       std::vector<std::string> options;
@@ -168,7 +168,7 @@ private:
          input->PushBack(mv);
          target->PushBack(feature.ogr().GetFieldAsInteger("class"));
          feature = layer.ogr().GetNextFeature();
-         goesOn = feature.addr() != 0;
+         goesOn = feature.addr() != ITK_NULLPTR;
        }
 
     ShiftScaleFilterType::Pointer trainingShiftScaleFilter = ShiftScaleFilterType::New();
@@ -210,7 +210,7 @@ private:
         feature2.ogr().SetField(GetParameterString("cfield").c_str(),(int)labelListSample->GetMeasurementVector(count)[0]);
          layer2.SetFeature(feature2);
          feature2 = layer2.ogr().GetNextFeature();
-         goesOn2 = feature2.addr() != 0;
+         goesOn2 = feature2.addr() != ITK_NULLPTR;
          count++;
        }
     
diff --git a/Modules/Applications/AppClassification/app/otbTrainOGRLayersClassifier.cxx b/Modules/Applications/AppClassification/app/otbTrainOGRLayersClassifier.cxx
index 33b752fb4616f0a06023e71e26b65b086084387c..5dc706145af502e65ebe30ab45ae55e5a8fbe873 100644
--- a/Modules/Applications/AppClassification/app/otbTrainOGRLayersClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbTrainOGRLayersClassifier.cxx
@@ -95,7 +95,7 @@ private:
       std::string shapefile = GetParameterString("inshp");
 
        otb::ogr::DataSource::Pointer ogrDS;
-       otb::ogr::Layer layer(NULL, false);
+       otb::ogr::Layer layer(ITK_NULLPTR, false);
 
        OGRSpatialReference oSRS("");
        std::vector<std::string> options;
@@ -170,7 +170,7 @@ private:
              target->PushBack(feature.ogr().GetFieldAsInteger(GetParameterString("cfield").c_str()));
            }
          feature = layer.ogr().GetNextFeature();
-         goesOn = feature.addr() != 0;
+         goesOn = feature.addr() != ITK_NULLPTR;
        }
 
     ShiftScaleFilterType::Pointer trainingShiftScaleFilter = ShiftScaleFilterType::New();
diff --git a/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx b/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx
index 6284f6b58965bcd906dc7d7e00c24bed8b45baa5..d0089f61a9d1011c013c4f6153e21f34e4a16c42 100644
--- a/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx
+++ b/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx
@@ -202,7 +202,7 @@ private:
 
   }
 
-  void Match(FloatImageType * im1, FloatImageType * im2, RSTransformType * rsTransform, RSTransformType * rsTransform1ToWGS84,RSTransformType * rsTransform2ToWGS84, std::ofstream & file, OGRMultiLineString * mls = NULL)
+  void Match(FloatImageType * im1, FloatImageType * im2, RSTransformType * rsTransform, RSTransformType * rsTransform1ToWGS84,RSTransformType * rsTransform2ToWGS84, std::ofstream & file, OGRMultiLineString * mls = ITK_NULLPTR)
   {
     MatchingFilterType::Pointer matchingFilter = MatchingFilterType::New();
 
@@ -501,7 +501,7 @@ private:
       if(IsParameterEnabled("outvector"))
         {
         // Create the datasource (for matches export)
-        otb::ogr::Layer layer(NULL, false);
+        otb::ogr::Layer layer(ITK_NULLPTR, false);
         otb::ogr::DataSource::Pointer ogrDS;
 
         ogrDS = otb::ogr::DataSource::New(GetParameterString("outvector"), otb::ogr::DataSource::Modes::Overwrite);
diff --git a/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx b/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx
index e09f0d852b1ef7355546399df9bcc1203e5d01d3..82ad12495626d09a2fb9b57d8ad04ef1c6211e18 100644
--- a/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx
@@ -133,7 +133,7 @@ private:
       unsigned int nbComponents = inImage->GetNumberOfComponentsPerPixel();
       ListViewParameter *clParam = dynamic_cast<ListViewParameter*>(GetParameterByKey("cl"));
       // Update the values of the channels to be selected if nbComponents is changed
-      if (clParam != NULL && clParam->GetNbChoices() != nbComponents)
+      if (clParam != ITK_NULLPTR && clParam->GetNbChoices() != nbComponents)
         {
 
         ClearChoices("cl");
diff --git a/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx b/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx
index ea59c1430a5f23f97ae45d5e96ff18209e99edce..8936100c8428de08dbee25e9fa985bd3e9b7c0e1 100644
--- a/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx
+++ b/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx
@@ -261,7 +261,7 @@ private:
 if(IsParameterEnabled("outvector"))
   {
   // Create the datasource (for matches export)
-  otb::ogr::Layer layer(NULL, false);
+  otb::ogr::Layer layer(ITK_NULLPTR, false);
   otb::ogr::DataSource::Pointer ogrDS;
 
   ogrDS = otb::ogr::DataSource::New(GetParameterString("outvector"), otb::ogr::DataSource::Modes::Overwrite);
diff --git a/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx b/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
index aacb3bfe2cd6a58cabae92e46ad268d2a1cca796..a0c32c67e2299a166034230f2fca71505d5f0156 100644
--- a/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
+++ b/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
@@ -319,7 +319,7 @@ private:
 if(IsParameterEnabled("outvector"))
   {
   // Create the datasource (for matches export)
-  otb::ogr::Layer layer(NULL, false);
+  otb::ogr::Layer layer(ITK_NULLPTR, false);
   otb::ogr::DataSource::Pointer ogrDS;
 
   ogrDS = otb::ogr::DataSource::New(GetParameterString("outvector"), otb::ogr::DataSource::Modes::Overwrite);
diff --git a/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx b/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx
index 39e39d5258b7f21b4d3f37d48ba08f1b2ec68c32..af019a208fb12c73cb6aac19408fbcee13b11d71 100644
--- a/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx
@@ -597,7 +597,7 @@ private:
         WriteTile(changeLabel->GetOutput(),row,column,"RELAB");
 
         // Remove previous tile (not needed anymore)
-        readerIn = 0; // release the input file
+        readerIn = ITK_NULLPTR; // release the input file
         RemoveFile(tileIn);
         }
       }
@@ -654,7 +654,7 @@ private:
           m_FilesToRemoveAfterExecute.push_back(tmpfile);
 
           // Clean previous tiles (not needed anymore)
-          readerIn = 0; // release the input file
+          readerIn = ITK_NULLPTR; // release the input file
           RemoveFile(tileIn);
           }
         }
@@ -686,7 +686,7 @@ private:
   void AfterExecuteAndWriteOutputs() ITK_OVERRIDE
   {
     // Release input files
-    m_FinalReader = 0;
+    m_FinalReader = ITK_NULLPTR;
 
     if(IsParameterEnabled("cleanup"))
       {
diff --git a/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx b/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx
index df54787f26dc442578b712b082d95b7c2ff75ffd..9a0c070e995925392b067ed4d42508694f0b2151 100644
--- a/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx
@@ -154,7 +154,7 @@ private:
     std::vector<ImageType::PixelType>sum2(regionCount+1,defaultValue);
 
     otb::ogr::DataSource::Pointer ogrDS;
-    otb::ogr::Layer layer(NULL, false);
+    otb::ogr::Layer layer(ITK_NULLPTR, false);
 
     OGRSpatialReference oSRS(projRef.c_str());
     std::vector<std::string> options;
@@ -258,7 +258,7 @@ private:
     std::ostringstream sqloss;
     sqloss.str("");
     sqloss<<"SELECT * FROM \""<<layername<<"\" ORDER BY label";
-    otb::ogr::Layer layerTmp=ogrDS->ExecuteSQL(sqloss.str().c_str(), NULL, NULL);
+    otb::ogr::Layer layerTmp=ogrDS->ExecuteSQL(sqloss.str().c_str(), ITK_NULLPTR, ITK_NULLPTR);
     otb::ogr::Feature firstFeature = layerTmp.ogr().GetNextFeature();
 
     //Geometry fusion
@@ -271,7 +271,7 @@ private:
       OGRMultiPolygon geomToMerge;
       geomToMerge.addGeometry(firstFeature.GetGeometry());
       bool merging = true;
-      otb::ogr::Feature nextFeature(NULL);
+      otb::ogr::Feature nextFeature(ITK_NULLPTR);
       bool haveMerged=false;
 
       while(merging)
@@ -345,7 +345,7 @@ private:
     if(extension==".shp"){
     sqloss.str("");
     sqloss<<"REPACK "<<layername;
-    ogrDS->ogr().ExecuteSQL(sqloss.str().c_str(), NULL, NULL);
+    ogrDS->ogr().ExecuteSQL(sqloss.str().c_str(), ITK_NULLPTR, ITK_NULLPTR);
     }
 
     ogrDS->SyncToDisk();
diff --git a/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx b/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx
index 3e600c82a7d480995ef9ecce733c683f53c51b28..3f8bcd0a9b6e2f112df06773c3336ee7d8ca76d4 100644
--- a/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx
@@ -449,7 +449,7 @@ private:
     const std::string segType = GetParameterString("filter");
 
     otb::ogr::DataSource::Pointer ogrDS;
-    otb::ogr::Layer layer(NULL, false);
+    otb::ogr::Layer layer(ITK_NULLPTR, false);
 
     std::string projRef = GetParameterFloatVectorImage("in")->GetProjectionRef();
 
@@ -686,7 +686,7 @@ private:
 
            std::string repack("REPACK ");
            repack = repack + shpLayerName;
-           ogrDS->ExecuteSQL(repack, NULL, NULL);
+           ogrDS->ExecuteSQL(repack, ITK_NULLPTR, ITK_NULLPTR);
          }
        }
       }
diff --git a/Modules/Applications/AppStereo/app/otbStereoFramework.cxx b/Modules/Applications/AppStereo/app/otbStereoFramework.cxx
index 80dbe412d3d6f714b24fd9a865da0278124373b0..2c28ba79ab264ebd7da438bf12977b26623f4421 100644
--- a/Modules/Applications/AppStereo/app/otbStereoFramework.cxx
+++ b/Modules/Applications/AppStereo/app/otbStereoFramework.cxx
@@ -899,9 +899,9 @@ private:
         }
 
       // Compute disparities
-      FilterType* blockMatcherFilterPointer = NULL;
-      FilterType* invBlockMatcherFilterPointer = NULL;
-      FilterType* subPixelFilterPointer = NULL;
+      FilterType* blockMatcherFilterPointer = ITK_NULLPTR;
+      FilterType* invBlockMatcherFilterPointer = ITK_NULLPTR;
+      FilterType* subPixelFilterPointer = ITK_NULLPTR;
       BijectionFilterType::Pointer bijectFilter;
 
       // pointer
diff --git a/Modules/Core/CommandLineParser/include/otbCommandLineArgumentParser.h b/Modules/Core/CommandLineParser/include/otbCommandLineArgumentParser.h
index 3a524c0496c63d95c602ccacc62ab6a5ff78431f..0c9cf53cfd836c2a124b13cb9c49f0034878bcee 100644
--- a/Modules/Core/CommandLineParser/include/otbCommandLineArgumentParser.h
+++ b/Modules/Core/CommandLineParser/include/otbCommandLineArgumentParser.h
@@ -237,12 +237,12 @@ public:
   /** Add a new option with fixed number of parameters */
   void AddOption(const std::string& name,
                  const std::string& comment,
-                 const std::string& synonym = NULL,
+                 const std::string& synonym = ITK_NULLPTR,
                  int nParameters = 1,
                  bool obligatory = true);
 
   /** Add a new option with unknown number of parameters */
-  void AddOptionNParams(const std::string& name, const std::string& comment, const std::string& synonym = NULL, bool obligatory = true);
+  void AddOptionNParams(const std::string& name, const std::string& comment, const std::string& synonym = ITK_NULLPTR, bool obligatory = true);
 
   /** Interpret options from the command line */
   void ParseCommandLine(int argc, char *argv[],
diff --git a/Modules/Core/CommandLineParser/src/otbCommandLineArgumentParser.cxx b/Modules/Core/CommandLineParser/src/otbCommandLineArgumentParser.cxx
index eff12c580afaa74fea3393e75100712f069df772..29cfb9dfd2308462a6c787c50aa0a3a758fb5a53 100644
--- a/Modules/Core/CommandLineParser/src/otbCommandLineArgumentParser.cxx
+++ b/Modules/Core/CommandLineParser/src/otbCommandLineArgumentParser.cxx
@@ -280,7 +280,7 @@ bool CommandLineArgumentParser::TryParseCommandLine(int argc, char *argv[],
       bool goOnFlag(true);
       while (goOnFlag == true)
         {
-        if (argv[i + 1] != NULL)
+        if (argv[i + 1] != ITK_NULLPTR)
           {
           std::string strArgv = std::string(argv[i + 1]);
           if (strArgv[0] == '-' )
diff --git a/Modules/Core/Common/include/otbImageAndVectorImageOperationFilter.txx b/Modules/Core/Common/include/otbImageAndVectorImageOperationFilter.txx
index 83c4db4d7e11813eb4f14f1708d0a71ebda295bf..5e254ae9514f740e689b753aaec132c942a73c87 100644
--- a/Modules/Core/Common/include/otbImageAndVectorImageOperationFilter.txx
+++ b/Modules/Core/Common/include/otbImageAndVectorImageOperationFilter.txx
@@ -71,7 +71,7 @@ const typename ImageAndVectorImageOperationFilter<TInputImage, TVectorInputImage
 ImageAndVectorImageOperationFilter<TInputImage, TVectorInputImage, TOutputImage>
 ::GetVectorInput()
 {
-  if (this->GetNumberOfInputs() < 2) return 0;
+  if (this->GetNumberOfInputs() < 2) return ITK_NULLPTR;
 
   return dynamic_cast<const VectorInputImageType*>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Core/Common/include/otbImageToModulusAndDirectionImageFilter.txx b/Modules/Core/Common/include/otbImageToModulusAndDirectionImageFilter.txx
index 0f7b6eadced007654179235b385d0f93025a1248..b4a229f0a944774cb8f12eed08f570340c4ef55e 100644
--- a/Modules/Core/Common/include/otbImageToModulusAndDirectionImageFilter.txx
+++ b/Modules/Core/Common/include/otbImageToModulusAndDirectionImageFilter.txx
@@ -62,7 +62,7 @@ GetOutput()
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>
            (this->itk::ProcessObject::GetOutput(0));
@@ -92,7 +92,7 @@ GetOutputDirection()
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageDirectionType *>
            (this->itk::ProcessObject::GetOutput(1));
diff --git a/Modules/Core/Common/include/otbImportImageFilter.txx b/Modules/Core/Common/include/otbImportImageFilter.txx
index 452f84591f16228cf3e8886756ff15b492f484d9..a7cfa5a9f66cc424ae88bb958263e6817c97ae37 100644
--- a/Modules/Core/Common/include/otbImportImageFilter.txx
+++ b/Modules/Core/Common/include/otbImportImageFilter.txx
@@ -43,7 +43,7 @@ ImportImageFilter<TOutputImage>
     }
   m_Direction.SetIdentity();
 
-  m_ImportPointer = 0;
+  m_ImportPointer = ITK_NULLPTR;
   m_FilterManageMemory = false;
   m_Size = 0;
 }
diff --git a/Modules/Core/Common/include/otbModelComponentBase.txx b/Modules/Core/Common/include/otbModelComponentBase.txx
index 843ad7834a9c25c48dca2f0e3e216d37cb33ab35..b0b6b348b8f8e54f183988a8d2cc1db0fce37f99 100644
--- a/Modules/Core/Common/include/otbModelComponentBase.txx
+++ b/Modules/Core/Common/include/otbModelComponentBase.txx
@@ -34,9 +34,9 @@ template<class TSample>
 ModelComponentBase<TSample>
 ::ModelComponentBase()
 {
-  m_Sample = 0;
-  m_PdfFunction = 0;
-  m_CdfFunction = 0;
+  m_Sample = ITK_NULLPTR;
+  m_PdfFunction = ITK_NULLPTR;
+  m_CdfFunction = ITK_NULLPTR;
   m_SampleModified = 0;
 }
 
@@ -48,7 +48,7 @@ ModelComponentBase<TSample>
   Superclass::PrintSelf(os, indent);
 
   os << indent << "Sample: ";
-  if (m_Sample != 0)
+  if (m_Sample != ITK_NULLPTR)
     {
     os << m_Sample << std::endl;
     }
@@ -58,7 +58,7 @@ ModelComponentBase<TSample>
     }
 
   os << indent << "Membership Function for pdf: ";
-  if (m_PdfFunction != 0)
+  if (m_PdfFunction != ITK_NULLPTR)
     {
     os << m_PdfFunction << std::endl;
     }
@@ -68,7 +68,7 @@ ModelComponentBase<TSample>
     }
 
   os << indent << "Membership Function for cdf: ";
-  if (m_CdfFunction != 0)
+  if (m_CdfFunction != ITK_NULLPTR)
     {
     os << m_CdfFunction << std::endl;
     }
diff --git a/Modules/Core/Common/src/otbConfigurationManager.cxx b/Modules/Core/Common/src/otbConfigurationManager.cxx
index 562924a071efcce5d8865d165156e5c3721d7393..43f1b683a9e0ebb14a65203ba8bd8dce8db79285 100644
--- a/Modules/Core/Common/src/otbConfigurationManager.cxx
+++ b/Modules/Core/Common/src/otbConfigurationManager.cxx
@@ -47,7 +47,7 @@ ConfigurationManager::RAMValueType ConfigurationManager::GetMaxRAMHint()
   if(itksys::SystemTools::GetEnv("OTB_MAX_RAM_HINT",svalue))
     {
 
-    unsigned long int tmp = strtoul(svalue.c_str(),NULL,10);
+    unsigned long int tmp = strtoul(svalue.c_str(),ITK_NULLPTR,10);
     
     if(tmp)
       {
diff --git a/Modules/Core/Common/src/otbFilterWatcherBase.cxx b/Modules/Core/Common/src/otbFilterWatcherBase.cxx
index bd88046e43f82123da7ce2666dcfafaf35932e81..570dbbf03e6d263527a4604f6ae9b4fe1061cb05 100644
--- a/Modules/Core/Common/src/otbFilterWatcherBase.cxx
+++ b/Modules/Core/Common/src/otbFilterWatcherBase.cxx
@@ -26,7 +26,7 @@ namespace otb
 FilterWatcherBase
 ::FilterWatcherBase()
 : m_Comment("Not watching an object"),
-  m_Process(0),
+  m_Process(ITK_NULLPTR),
   m_StartTag(0),
   m_EndTag(0),
   m_ProgressTag(0),
diff --git a/Modules/Core/Common/src/otbSystem.cxx b/Modules/Core/Common/src/otbSystem.cxx
index 50301533a7ab884a2dbce213332106ca0ab7fc7e..c0a063035aa42999f0519c08e24f52eff0631a60 100644
--- a/Modules/Core/Common/src/otbSystem.cxx
+++ b/Modules/Core/Common/src/otbSystem.cxx
@@ -124,9 +124,9 @@ std::vector<std::string> System::Readdir(const std::string& pszPath)
 
   if (pszPath.empty() == true) path = ".";
 
-  if ((hDir = opendir(path.c_str())) != NULL)
+  if ((hDir = opendir(path.c_str())) != ITK_NULLPTR)
     {
-    while ((psDirEntry = readdir(hDir)) != NULL)
+    while ((psDirEntry = readdir(hDir)) != ITK_NULLPTR)
       {
       listFileFind.push_back(psDirEntry->d_name);
       }
diff --git a/Modules/Core/Common/src/otbWriterWatcherBase.cxx b/Modules/Core/Common/src/otbWriterWatcherBase.cxx
index cce575ef8249c347d834419f34f4f627ec803578..5ba4efff048469af8771d870560d682fa679be0b 100644
--- a/Modules/Core/Common/src/otbWriterWatcherBase.cxx
+++ b/Modules/Core/Common/src/otbWriterWatcherBase.cxx
@@ -28,7 +28,7 @@ WriterWatcherBase
 {
   // Initialize state
   m_Comment = "Not watching any object";
-  m_Process = 0;
+  m_Process = ITK_NULLPTR;
   m_StartFilterTag = 0;
   m_EndFilterTag = 0;
   m_ProgressFilterTag = 0;
diff --git a/Modules/Core/Common/test/otbSystemTest.cxx b/Modules/Core/Common/test/otbSystemTest.cxx
index f8fd3ecf5d89f7473bf625cea1f8fa7f267dcc0b..e2adb3ab9d772a3487f7b68cdf936f45daf5775b 100644
--- a/Modules/Core/Common/test/otbSystemTest.cxx
+++ b/Modules/Core/Common/test/otbSystemTest.cxx
@@ -29,10 +29,10 @@ int otbSystemTest(int itkNotUsed(argc), char * argv[])
   std::ostringstream msg;
 
   // Check instanciation test
-  otb::System * var(NULL);
+  otb::System * var(ITK_NULLPTR);
   var = new otb::System();
   delete var;
-  var = NULL;
+  var = ITK_NULLPTR;
 
   if (itksys::SystemTools::FileExists(inputFileName, true) == false)
     {
diff --git a/Modules/Core/ImageBase/src/otbImageIOBase.cxx b/Modules/Core/ImageBase/src/otbImageIOBase.cxx
index 058d1a829ad698069ceec7f8df67ed68660aa2e7..5b0c9d3831b74605e9514f02831a81fac31288a9 100644
--- a/Modules/Core/ImageBase/src/otbImageIOBase.cxx
+++ b/Modules/Core/ImageBase/src/otbImageIOBase.cxx
@@ -86,7 +86,7 @@ void ImageIOBase::Resize(const unsigned int numDimensions,
                          const unsigned int* dimensions)
 {
   m_NumberOfDimensions = numDimensions;
-  if (dimensions != NULL)
+  if (dimensions != ITK_NULLPTR)
     {
     for (unsigned int i=0; i < m_NumberOfDimensions; i++)
       {
diff --git a/Modules/Core/ImageBase/test/otbMultiChannelExtractROI.cxx b/Modules/Core/ImageBase/test/otbMultiChannelExtractROI.cxx
index 910d3aa4861dd57e75e413e400d25382016b2edc..b675ef7af78409f102d271211701cc98bb387be5 100644
--- a/Modules/Core/ImageBase/test/otbMultiChannelExtractROI.cxx
+++ b/Modules/Core/ImageBase/test/otbMultiChannelExtractROI.cxx
@@ -37,7 +37,7 @@ int generic_otbMultiChannelExtractROI(int itkNotUsed(argc), char * argv[], const
   typename ExtractROIFilterType::Pointer extractROIFilter = ExtractROIFilterType::New();
   int cpt(0), nbcanaux(0);
 
-  while (argv[cpt] != NULL)
+  while (argv[cpt] != ITK_NULLPTR)
     {
     std::string strArgv(argv[cpt]);
     if (strArgv == "-startX")
@@ -76,7 +76,7 @@ int generic_otbMultiChannelExtractROI(int itkNotUsed(argc), char * argv[], const
       bool searchChannels(true);
       while (searchChannels == true)
         {
-        if (argv[cpt] == NULL)
+        if (argv[cpt] == ITK_NULLPTR)
           {
           searchChannels = false;
           }
diff --git a/Modules/Core/ImageBase/test/otbMultiToMonoChannelExtractROI.cxx b/Modules/Core/ImageBase/test/otbMultiToMonoChannelExtractROI.cxx
index d992ab51fa76abaf61814808eff3c6d22650728f..739dc5fb254938549a8b6839215d3f8690426ea3 100644
--- a/Modules/Core/ImageBase/test/otbMultiToMonoChannelExtractROI.cxx
+++ b/Modules/Core/ImageBase/test/otbMultiToMonoChannelExtractROI.cxx
@@ -33,7 +33,7 @@ int generic_otbMultiToMonoChannelExtractROI(int itkNotUsed(argc),
   typename ExtractROIFilterType::Pointer extractROIFilter = ExtractROIFilterType::New();
   int cpt(0);
 
-  while (argv[cpt] != NULL)
+  while (argv[cpt] != ITK_NULLPTR)
     {
     std::string strArgv(argv[cpt]);
     if (strArgv == "-startX")
diff --git a/Modules/Core/Interpolation/include/otbBSplineInterpolateImageFunction.txx b/Modules/Core/Interpolation/include/otbBSplineInterpolateImageFunction.txx
index 930151d251f3a581abab9999297ede5557dda200..7539a2ac2f86fed6b1318168bc12c330acab74e1 100644
--- a/Modules/Core/Interpolation/include/otbBSplineInterpolateImageFunction.txx
+++ b/Modules/Core/Interpolation/include/otbBSplineInterpolateImageFunction.txx
@@ -95,7 +95,7 @@ BSplineInterpolateImageFunction<TImageType, TCoordRep, TCoefficientType>
     }
   else
     {
-    m_Coefficients = NULL;
+    m_Coefficients = ITK_NULLPTR;
     }
 }
 
diff --git a/Modules/Core/Interpolation/include/otbGenericInterpolateImageFunction.txx b/Modules/Core/Interpolation/include/otbGenericInterpolateImageFunction.txx
index 28322f2850e8c2f6d3d96aae80564d0400c18798..8ad04c8440664730af29010b25007768a9d6254b 100644
--- a/Modules/Core/Interpolation/include/otbGenericInterpolateImageFunction.txx
+++ b/Modules/Core/Interpolation/include/otbGenericInterpolateImageFunction.txx
@@ -30,8 +30,8 @@ GenericInterpolateImageFunction<TInputImage, TFunction, TBoundaryCondition, TCoo
 {
   m_WindowSize = 1;
   this->SetRadius(1);
-  m_OffsetTable = NULL;
-  m_WeightOffsetTable = NULL;
+  m_OffsetTable = ITK_NULLPTR;
+  m_WeightOffsetTable = ITK_NULLPTR;
   m_TablesHaveBeenGenerated = false;
   m_NormalizeWeight =  false;
 }
@@ -51,21 +51,21 @@ GenericInterpolateImageFunction<TInputImage, TFunction, TBoundaryCondition, TCoo
 ::ResetOffsetTable()
 {
   // Clear the offset table
-  if (m_OffsetTable != NULL)
+  if (m_OffsetTable != ITK_NULLPTR)
     {
     delete[] m_OffsetTable;
-    m_OffsetTable = NULL;
+    m_OffsetTable = ITK_NULLPTR;
     }
 
   // Clear the weights tales
-  if (m_WeightOffsetTable != NULL)
+  if (m_WeightOffsetTable != ITK_NULLPTR)
     {
     for (unsigned int i = 0; i < m_OffsetTableSize; ++i)
       {
       delete[] m_WeightOffsetTable[i];
       }
     delete[] m_WeightOffsetTable;
-    m_WeightOffsetTable = NULL;
+    m_WeightOffsetTable = ITK_NULLPTR;
     }
 }
 
@@ -123,7 +123,7 @@ GenericInterpolateImageFunction<TInputImage, TFunction, TBoundaryCondition, TCoo
   // Initialize the neighborhood
   SizeType radius;
   radius.Fill(this->GetRadius());
-  if (this->GetInputImage() != NULL)
+  if (this->GetInputImage() != ITK_NULLPTR)
     {
     IteratorType it = IteratorType(radius,  this->GetInputImage(), this->GetInputImage()->GetBufferedRegion());
     // Compute the offset tables (we ignore all the zero indices
diff --git a/Modules/Core/LabelMap/include/otbAttributesMapLabelObject.h b/Modules/Core/LabelMap/include/otbAttributesMapLabelObject.h
index ccc6977901849e5cf30d37289d0f5216837815ca..c3fbefea68e72347cc707345986682be3a4bbc1a 100644
--- a/Modules/Core/LabelMap/include/otbAttributesMapLabelObject.h
+++ b/Modules/Core/LabelMap/include/otbAttributesMapLabelObject.h
@@ -274,7 +274,7 @@ public:
 
     // copy the data of the current type if possible
     const Self * src = dynamic_cast<const Self *>(lo);
-    if (src == NULL)
+    if (src == ITK_NULLPTR)
       {
       return;
       }
diff --git a/Modules/Core/LabelMap/include/otbAttributesMapLabelObjectWithClassLabel.h b/Modules/Core/LabelMap/include/otbAttributesMapLabelObjectWithClassLabel.h
index 88d8321fc13f7809885d6acdae7cd87c1000200b..56888e933a813e8c7794f93ce4ee5926e194ad8b 100644
--- a/Modules/Core/LabelMap/include/otbAttributesMapLabelObjectWithClassLabel.h
+++ b/Modules/Core/LabelMap/include/otbAttributesMapLabelObjectWithClassLabel.h
@@ -108,7 +108,7 @@ public:
 
     // copy the data of the current type if possible
     const Self * src = dynamic_cast<const Self *>( lo );
-    if( src == NULL )
+    if( src == ITK_NULLPTR )
       {
       return;
       }
diff --git a/Modules/Core/LabelMap/include/otbImageToLabelMapWithAttributesFilter.txx b/Modules/Core/LabelMap/include/otbImageToLabelMapWithAttributesFilter.txx
index 24cab3fd19d28f800ca47132116d4f0cfa209cee..e93f51f1654a522130370aa540ccc3f88af7ee59 100644
--- a/Modules/Core/LabelMap/include/otbImageToLabelMapWithAttributesFilter.txx
+++ b/Modules/Core/LabelMap/include/otbImageToLabelMapWithAttributesFilter.txx
@@ -76,7 +76,7 @@ ImageToLabelMapWithAttributesFilter<TInputImage, TLabeledImage, TOutputLabel, TO
 {
     if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const  InputImageType* >
@@ -90,7 +90,7 @@ ImageToLabelMapWithAttributesFilter<TInputImage, TLabeledImage, TOutputLabel, TO
 {
     if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const  LabeledImageType* >
diff --git a/Modules/Core/LabelMap/include/otbLabelMapSource.txx b/Modules/Core/LabelMap/include/otbLabelMapSource.txx
index 252421399a9c32503edf4ede8a39ef287647ec67..c3aaff869db73e2447bda4fdcc8b657e3f40f06c 100644
--- a/Modules/Core/LabelMap/include/otbLabelMapSource.txx
+++ b/Modules/Core/LabelMap/include/otbLabelMapSource.txx
@@ -62,7 +62,7 @@ LabelMapSource<TOutputLabelMap>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputLabelMapType *> (this->ProcessObject::GetOutput(0));
 }
diff --git a/Modules/Core/LabelMap/include/otbLabelMapToSampleListFilter.txx b/Modules/Core/LabelMap/include/otbLabelMapToSampleListFilter.txx
index b85660a898d08bf7d93e9d0c43c7217e87d47c76..603cca39a65eae6977bf63c635e39cb36600fed3 100644
--- a/Modules/Core/LabelMap/include/otbLabelMapToSampleListFilter.txx
+++ b/Modules/Core/LabelMap/include/otbLabelMapToSampleListFilter.txx
@@ -70,7 +70,7 @@ LabelMapToSampleListFilter<TInputLabelMap,TOutputListSample,TMeasurementFunctor>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const InputLabelMapType* >
diff --git a/Modules/Core/LabelMap/include/otbLabelObjectToPolygonFunctor.h b/Modules/Core/LabelMap/include/otbLabelObjectToPolygonFunctor.h
index bba63cd462de32d974a6a9e449299a22efdaf1c7..1a48b06d234982b31c2643b80ddf9b5fcad916da 100644
--- a/Modules/Core/LabelMap/include/otbLabelObjectToPolygonFunctor.h
+++ b/Modules/Core/LabelMap/include/otbLabelObjectToPolygonFunctor.h
@@ -117,7 +117,7 @@ public:
   }
 
   /** Constructor */
-  LabelObjectToPolygonFunctor() : m_Polygon(NULL),
+  LabelObjectToPolygonFunctor() : m_Polygon(ITK_NULLPTR),
     m_CurrentState(UP_LEFT),
     m_PositionFlag(LEFT_END),
     m_StartingPoint(),
diff --git a/Modules/Core/LabelMap/include/otbShapeAttributesLabelMapFilter.txx b/Modules/Core/LabelMap/include/otbShapeAttributesLabelMapFilter.txx
index bf5bff1184600d73c9bf57739017272e8b738c7b..35b7f251909caadc6a416e1f1177d9bbdb123998 100644
--- a/Modules/Core/LabelMap/include/otbShapeAttributesLabelMapFilter.txx
+++ b/Modules/Core/LabelMap/include/otbShapeAttributesLabelMapFilter.txx
@@ -46,7 +46,7 @@ ShapeAttributesLabelObjectFunctor<TLabelObject, TLabelImage>
   m_ComputeFlusser(true),
   m_ComputePolygon(true),
   m_ReducedAttributeSet(true),
-  m_LabelImage(NULL)
+  m_LabelImage(ITK_NULLPTR)
 {}
 
 /** The comparator (!=) */
diff --git a/Modules/Core/ObjectList/include/otbImageListSource.txx b/Modules/Core/ObjectList/include/otbImageListSource.txx
index 7976b7a253a7bf213a7da48e1cfe37b8a6f48b84..5cf7009ea4a535dd3261262b2e1191b23c2a708a 100644
--- a/Modules/Core/ObjectList/include/otbImageListSource.txx
+++ b/Modules/Core/ObjectList/include/otbImageListSource.txx
@@ -43,7 +43,7 @@ ImageListSource<TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageListType *> (this->ProcessObject::GetOutput(0));
 }
diff --git a/Modules/Core/ObjectList/include/otbImageListToImageFilter.txx b/Modules/Core/ObjectList/include/otbImageListToImageFilter.txx
index bb873fa298c058341fd450647736a1c49f2a7b27..c264a457f0666d63c6c1e30448119811f6c1538c 100644
--- a/Modules/Core/ObjectList/include/otbImageListToImageFilter.txx
+++ b/Modules/Core/ObjectList/include/otbImageListToImageFilter.txx
@@ -56,7 +56,7 @@ ImageListToImageFilter<TInputImage, TOutputImage>
   if (this->GetNumberOfInputs() < 1)
     {
     // exit
-    return 0;
+    return ITK_NULLPTR;
     }
   // else return the first input
   return static_cast<InputImageListType *>
diff --git a/Modules/Core/ObjectList/include/otbImageListToImageListFilter.txx b/Modules/Core/ObjectList/include/otbImageListToImageListFilter.txx
index 8368704204887cc0f7332c34249efe3d351bf615..d9cf8cb16b7d911ec2cf38ad7103f968eb424d66 100644
--- a/Modules/Core/ObjectList/include/otbImageListToImageListFilter.txx
+++ b/Modules/Core/ObjectList/include/otbImageListToImageListFilter.txx
@@ -56,7 +56,7 @@ ImageListToImageListFilter<TInputImage, TOutputImage>
   if (this->GetNumberOfInputs() < 1)
     {
     // exit
-    return 0;
+    return ITK_NULLPTR;
     }
   // else return the first input
   return static_cast<InputImageListType *>
diff --git a/Modules/Core/ObjectList/include/otbImageListToSingleImageFilter.txx b/Modules/Core/ObjectList/include/otbImageListToSingleImageFilter.txx
index 57a7c29267ef004b4f3558d35bd42801d6d16246..e833202b7994c56b9cf24ba0c01a8e7faa9d926e 100644
--- a/Modules/Core/ObjectList/include/otbImageListToSingleImageFilter.txx
+++ b/Modules/Core/ObjectList/include/otbImageListToSingleImageFilter.txx
@@ -47,7 +47,7 @@ ImageListToSingleImageFilter<TImageType>
   if (this->GetNumberOfInputs() != 1)
     {
     // exit
-    return 0;
+    return ITK_NULLPTR;
     }
   // else return the first input
   return static_cast<OutputImagePointerType>(
diff --git a/Modules/Core/ObjectList/include/otbImageToImageListFilter.txx b/Modules/Core/ObjectList/include/otbImageToImageListFilter.txx
index 5cc0d6591df4ed104572c473f0764f4b8d95c0dd..5e82a124b73573d5c0efea66cfd44da06d7f6f78 100644
--- a/Modules/Core/ObjectList/include/otbImageToImageListFilter.txx
+++ b/Modules/Core/ObjectList/include/otbImageToImageListFilter.txx
@@ -56,7 +56,7 @@ ImageToImageListFilter<TInputImage, TOutputImage>
   if (this->GetNumberOfInputs() < 1)
     {
     // exit
-    return 0;
+    return ITK_NULLPTR;
     }
   // else return the first input
   return static_cast<TInputImage *>
diff --git a/Modules/Core/ObjectList/include/otbObjectListSource.txx b/Modules/Core/ObjectList/include/otbObjectListSource.txx
index 5085cbcc04285434fa2208f53cd81f766b6dbd81..29142c6d49c0c322a4138634da717c1dc1703e45 100644
--- a/Modules/Core/ObjectList/include/otbObjectListSource.txx
+++ b/Modules/Core/ObjectList/include/otbObjectListSource.txx
@@ -62,7 +62,7 @@ ObjectListSource<TOutputList>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<TOutputList*>
diff --git a/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.txx b/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.txx
index ee09c19a4013b03621454d95cd73628c18597e57..99edfd1302d6445698e3887a84e5b2164f0d53b7 100644
--- a/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.txx
+++ b/Modules/Core/ObjectList/include/otbObjectListToObjectListFilter.txx
@@ -51,7 +51,7 @@ ObjectListToObjectListFilter<TInputList, TOutputList>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TInputList *>
diff --git a/Modules/Core/PointSet/include/otbImageToPointSetFilter.txx b/Modules/Core/PointSet/include/otbImageToPointSetFilter.txx
index 0978188a01766538acf354dc80bed6b37a6d88cd..d79425d3661068272dd853c9d146af89c908ba66 100644
--- a/Modules/Core/PointSet/include/otbImageToPointSetFilter.txx
+++ b/Modules/Core/PointSet/include/otbImageToPointSetFilter.txx
@@ -94,7 +94,7 @@ const typename ImageToPointSetFilter<TInputImage, TOutputPointSet>::InputImageTy
 ImageToPointSetFilter<TInputImage, TOutputPointSet>
 ::GetInput(void)
 {
-  if (this->GetNumberOfInputs() < 1) return 0;
+  if (this->GetNumberOfInputs() < 1) return ITK_NULLPTR;
 
   return dynamic_cast<const InputImageType*>
            (this->ProcessObjectType::GetInput(0));
diff --git a/Modules/Core/PointSet/include/otbPointSetSource.txx b/Modules/Core/PointSet/include/otbPointSetSource.txx
index 4ccd106ff173edf07f60e45da9546ca5a910fbe8..c5f0dc68428b28badc3fa349dd08dc175c3f6d6e 100644
--- a/Modules/Core/PointSet/include/otbPointSetSource.txx
+++ b/Modules/Core/PointSet/include/otbPointSetSource.txx
@@ -63,7 +63,7 @@ PointSetSource<TOutputPointSet>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<TOutputPointSet*>
diff --git a/Modules/Core/PointSet/include/otbPointSetToPointSetFilter.txx b/Modules/Core/PointSet/include/otbPointSetToPointSetFilter.txx
index 1444215a5d0184aa5d2898599812603dd9d4dac1..358a274e234f1803e23fa3e21d48614f03ef112a 100644
--- a/Modules/Core/PointSet/include/otbPointSetToPointSetFilter.txx
+++ b/Modules/Core/PointSet/include/otbPointSetToPointSetFilter.txx
@@ -85,7 +85,7 @@ typename PointSetToPointSetFilter<TInputPointSet, TOutputPointSet>::InputPointSe
 PointSetToPointSetFilter<TInputPointSet, TOutputPointSet>
 ::GetInput(void)
 {
-  if (this->GetNumberOfInputs() < 1) return 0;
+  if (this->GetNumberOfInputs() < 1) return ITK_NULLPTR;
 
   return static_cast<InputPointSetType*>
            (this->ProcessObjectType::GetInput(0));
diff --git a/Modules/Core/SpatialObjects/include/otbLineSpatialObject.h b/Modules/Core/SpatialObjects/include/otbLineSpatialObject.h
index 72806900a0059eb48f60939f5bf51b556b398d08..05601adfbd98cfed48a4716bee769961ba8215c3 100644
--- a/Modules/Core/SpatialObjects/include/otbLineSpatialObject.h
+++ b/Modules/Core/SpatialObjects/include/otbLineSpatialObject.h
@@ -89,14 +89,14 @@ 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 ITK_OVERRIDE;
+                     unsigned int depth = 0, char * name = ITK_NULLPTR) 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 ITK_OVERRIDE;
+               unsigned int depth = 0, char * name = ITK_NULLPTR) const ITK_OVERRIDE;
 
   /** Returns true if the point is inside the line, false otherwise. */
   bool IsInside(const PointType& point,
diff --git a/Modules/Core/SpatialObjects/include/otbLineSpatialObject.txx b/Modules/Core/SpatialObjects/include/otbLineSpatialObject.txx
index e8afd0803b496d4bba9f4e158053263167b83f18..e6cf4a154690b7ec9ee655fd233159992683b36f 100644
--- a/Modules/Core/SpatialObjects/include/otbLineSpatialObject.txx
+++ b/Modules/Core/SpatialObjects/include/otbLineSpatialObject.txx
@@ -223,7 +223,7 @@ LineSpatialObject<VDimension>
 {
   // otbMsgDevMacro( "Checking the point [" << point << "] is on the Line" );
 
-  if (name == NULL)
+  if (name == ITK_NULLPTR)
     {
     if (IsInside(point))
       {
diff --git a/Modules/Core/SpatialObjects/include/otbSpatialObjectSource.txx b/Modules/Core/SpatialObjects/include/otbSpatialObjectSource.txx
index 56af7dbf0d728768601f6f0535c5a73fd8a6b1ef..a2faa58a69b77d2968db5bae7a26725e421d83d4 100644
--- a/Modules/Core/SpatialObjects/include/otbSpatialObjectSource.txx
+++ b/Modules/Core/SpatialObjects/include/otbSpatialObjectSource.txx
@@ -43,7 +43,7 @@ SpatialObjectSource<TSpatialObject>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<SpatialObjectType *> (this->ProcessObject::GetOutput(0));
 }
diff --git a/Modules/Core/SpatialObjects/include/otbSpatialObjectToImageDrawingFilter.txx b/Modules/Core/SpatialObjects/include/otbSpatialObjectToImageDrawingFilter.txx
index ebf3d464622b4846cd704a8a9c2d64fd9b40ac62..197c7048366324753a21b235b3d0627fc82bf8bb 100644
--- a/Modules/Core/SpatialObjects/include/otbSpatialObjectToImageDrawingFilter.txx
+++ b/Modules/Core/SpatialObjects/include/otbSpatialObjectToImageDrawingFilter.txx
@@ -82,7 +82,7 @@ SpatialObjectToImageDrawingFilter<TInputSpatialObject, TOutputImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TInputSpatialObject *>
diff --git a/Modules/Core/Streaming/src/otbPipelineMemoryPrintCalculator.cxx b/Modules/Core/Streaming/src/otbPipelineMemoryPrintCalculator.cxx
index 8b0dce603df2d2da4333ff6c0ee1421cedb976e7..757d339e50d8cf62250dfdaf507df771a3399e83 100644
--- a/Modules/Core/Streaming/src/otbPipelineMemoryPrintCalculator.cxx
+++ b/Modules/Core/Streaming/src/otbPipelineMemoryPrintCalculator.cxx
@@ -33,7 +33,7 @@ const double PipelineMemoryPrintCalculator::MegabyteToByte = vcl_pow(2.0, 20);
 PipelineMemoryPrintCalculator
 ::PipelineMemoryPrintCalculator()
   : m_MemoryPrint(0),
-    m_DataToWrite(NULL),
+    m_DataToWrite(ITK_NULLPTR),
     m_BiasCorrectionFactor(1.),
     m_VisitedProcessObjects()
 {}
diff --git a/Modules/Core/Transform/include/otbCompositeTransform.txx b/Modules/Core/Transform/include/otbCompositeTransform.txx
index 70ac7cb5ac832712dbbe196fe846e6ff5a0fb73b..01464e4f2cddb268dd59a4a427fa4d3ff9bc8f67 100644
--- a/Modules/Core/Transform/include/otbCompositeTransform.txx
+++ b/Modules/Core/Transform/include/otbCompositeTransform.txx
@@ -40,8 +40,8 @@ CompositeTransform<TFirstTransform,
     NOutputDimensions>
 ::CompositeTransform() : Superclass(ParametersDimension)
 {
-  m_FirstTransform = 0;
-  m_SecondTransform = 0;
+  m_FirstTransform = ITK_NULLPTR;
+  m_SecondTransform = ITK_NULLPTR;
 }
 
 template<class TFirstTransform,
diff --git a/Modules/Core/Transform/include/otbGenericMapProjection.txx b/Modules/Core/Transform/include/otbGenericMapProjection.txx
index 8c56ffefaf35f5ff730f6a222563fc7adcf00f61..11df836313dc0243f412aa58d20f0d9b58153ac0 100644
--- a/Modules/Core/Transform/include/otbGenericMapProjection.txx
+++ b/Modules/Core/Transform/include/otbGenericMapProjection.txx
@@ -130,7 +130,7 @@ bool
 GenericMapProjection<TDirectionOfMapping, TScalarType, NInputDimensions, NOutputDimensions>
 ::IsProjectionDefined() const
 {
-  return (m_MapProjection->GetMapProjection() != NULL);
+  return (m_MapProjection->GetMapProjection() != ITK_NULLPTR);
 }
 
 template<TransformDirection::TransformationDirection TDirectionOfMapping, class TScalarType, unsigned int NInputDimensions,
diff --git a/Modules/Core/Transform/include/otbGenericRSTransform.txx b/Modules/Core/Transform/include/otbGenericRSTransform.txx
index 56cff2ad98c2d58e1f1629b00998898616ccbf13..4d000da9f4cbcc624207f516eef288c16ca2797e 100644
--- a/Modules/Core/Transform/include/otbGenericRSTransform.txx
+++ b/Modules/Core/Transform/include/otbGenericRSTransform.txx
@@ -43,9 +43,9 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
   m_OutputSpacing.Fill(1);
   m_OutputOrigin.Fill(0);
 
-  m_Transform = NULL;
-  m_InputTransform = NULL;
-  m_OutputTransform = NULL;
+  m_Transform = ITK_NULLPTR;
+  m_InputTransform = ITK_NULLPTR;
+  m_OutputTransform = ITK_NULLPTR;
   m_TransformUpToDate = false;
   m_TransformAccuracy = Projection::UNKNOWN;
 }
@@ -96,8 +96,8 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
   otbMsgDevMacro(<< " * Output Spacing: " << m_OutputSpacing);
 
   //Make sure that the state is clean:
-  m_InputTransform = NULL;
-  m_OutputTransform = NULL;
+  m_InputTransform = ITK_NULLPTR;
+  m_OutputTransform = ITK_NULLPTR;
 
   bool firstTransformGiveGeo = true;
   bool inputTransformIsSensor = false;
@@ -158,8 +158,8 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
     m_InputTransform = itk::IdentityTransform<double, NInputDimensions>::New();
 //     firstTransformGiveGeo = false;
 
-    OGRSpatialReferenceH hSRS = NULL;
-    hSRS = OSRNewSpatialReference(NULL);
+    OGRSpatialReferenceH hSRS = ITK_NULLPTR;
+    hSRS = OSRNewSpatialReference(ITK_NULLPTR);
     const char * wktString = m_InputProjectionRef.c_str();
     if (OSRImportFromWkt(hSRS, (char **) &wktString) != OGRERR_NONE)
       {
@@ -283,7 +283,7 @@ GenericRSTransform<TScalarType, NInputDimensions, NOutputDimensions>
 ::GetInverse(Self * inverseTransform) const
 {
   // Test the inverseTransform pointer
-  if (inverseTransform == NULL)
+  if (inverseTransform == ITK_NULLPTR)
     {
     return false;
     }
diff --git a/Modules/Core/Transform/src/otbGeoInformationConversion.cxx b/Modules/Core/Transform/src/otbGeoInformationConversion.cxx
index 1d1f5e14aae16c5ca9986db84b04200645455ff0..a12255dc8854af7437d9fc1e9e1a4e09688fc685 100644
--- a/Modules/Core/Transform/src/otbGeoInformationConversion.cxx
+++ b/Modules/Core/Transform/src/otbGeoInformationConversion.cxx
@@ -29,12 +29,12 @@ namespace otb
 
 std::string GeoInformationConversion::ToWKT(int srid)
 {
-  char * wkt = NULL;
+  char * wkt = ITK_NULLPTR;
   std::string ret;
 
   // Build the srs from the epsg number
-  OGRSpatialReferenceH hSRS = NULL;
-  hSRS = OSRNewSpatialReference(NULL);
+  OGRSpatialReferenceH hSRS = ITK_NULLPTR;
+  hSRS = OSRNewSpatialReference(ITK_NULLPTR);
 
   if (OSRImportFromEPSG(hSRS, srid ) == OGRERR_NONE)
     {
diff --git a/Modules/Core/Transform/test/otbCreateProjectionWithOSSIM.cxx b/Modules/Core/Transform/test/otbCreateProjectionWithOSSIM.cxx
index 4fad71c80ee774803766728bbba71491c327a87a..80b94814ecebcc55352f4393543565f9b595e18d 100644
--- a/Modules/Core/Transform/test/otbCreateProjectionWithOSSIM.cxx
+++ b/Modules/Core/Transform/test/otbCreateProjectionWithOSSIM.cxx
@@ -82,9 +82,9 @@ int otbCreateProjectionWithOSSIM(int argc, char* argv[])
   ossimGpt ossimGPoint(0, 0);
   ossimDpt ossimDPoint;
   otbGenericMsgDebugMacro(<< "Creating projection...");
-  ossimProjection * model = NULL;
+  ossimProjection * model = ITK_NULLPTR;
   model = ossimProjectionFactoryRegistry::instance()->createProjection(geom);
-  if (model == NULL)
+  if (model == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "Invalid Model * == NULL !");
     }
diff --git a/Modules/Core/Transform/test/otbCreateProjectionWithOTB.cxx b/Modules/Core/Transform/test/otbCreateProjectionWithOTB.cxx
index ef4ab4c021f28ca816d2cdcb86c770d33f6ffec6..8b7d5a4694f86f839ae7ea665a2e6d99706470c2 100644
--- a/Modules/Core/Transform/test/otbCreateProjectionWithOTB.cxx
+++ b/Modules/Core/Transform/test/otbCreateProjectionWithOTB.cxx
@@ -87,10 +87,10 @@ int otbCreateProjectionWithOTB(int argc, char* argv[])
 
   ossimGpt          ossimGPoint(0, 0);
   ossimDpt          ossimDPoint;
-  ossimProjection * model = NULL;
+  ossimProjection * model = ITK_NULLPTR;
   otbGenericMsgDebugMacro(<< "Creating projection...");
   model = ossimProjectionFactoryRegistry::instance()->createProjection(geom);
-  if (model == NULL)
+  if (model == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "Invalid Model * == NULL !");
     }
diff --git a/Modules/Core/Transform/test/otbGenericRSTransform.cxx b/Modules/Core/Transform/test/otbGenericRSTransform.cxx
index 44bd55b12c39767092d45846d665cc0c88da8374..2899c5e20f71b8ed6aa9399b0ec767f23cf8b33c 100644
--- a/Modules/Core/Transform/test/otbGenericRSTransform.cxx
+++ b/Modules/Core/Transform/test/otbGenericRSTransform.cxx
@@ -38,13 +38,13 @@ int otbGenericRSTransform(int itkNotUsed(argc), char* argv[])
 
   // Build wgs ref
   oSRS.SetWellKnownGeogCS("WGS84");
-  char * wgsRef = NULL;
+  char * wgsRef = ITK_NULLPTR;
   oSRS.exportToWkt(&wgsRef);
 
   // Build UTM ref
   oSRS.SetProjCS("UTM");
   oSRS.SetUTM(31, true);
-  char * utmRef = NULL;
+  char * utmRef = ITK_NULLPTR;
   oSRS.exportToWkt(&utmRef);
 
   // Build Lambert II ref
@@ -56,7 +56,7 @@ int otbGenericRSTransform(int itkNotUsed(argc), char* argv[])
   double falseNorthingL2 = 2200000;
   oSRS.SetProjCS("Lambert II ");
   oSRS.SetLCC(stdParallel1, stdParallel2, originLatL2, originLongL2, falseEastingL2, falseNorthingL2);
-  char * lambertRef = NULL;
+  char * lambertRef = ITK_NULLPTR;
   oSRS.exportToWkt(&lambertRef);
 
   // Build the Transmercator ref
@@ -66,7 +66,7 @@ int otbGenericRSTransform(int itkNotUsed(argc), char* argv[])
   oSRS.SetProjCS("Transmercator ");
   oSRS.SetWellKnownGeogCS("WGS84");
   oSRS.SetTM(originLatTmt, originLongTmt, 1, 0, 0);
-  char * tmtRef = NULL;
+  char * tmtRef = ITK_NULLPTR;
   oSRS.exportToWkt(&tmtRef);
 
   TransformType::Pointer wgs2utm        = TransformType::New();
diff --git a/Modules/Core/Transform/test/otbGenericRSTransformWithSRID.cxx b/Modules/Core/Transform/test/otbGenericRSTransformWithSRID.cxx
index 811e32d1b483177c4ede4dee563bedfb3c840752..40474c4bedbdf5c638efd801ba4e633319007a55 100644
--- a/Modules/Core/Transform/test/otbGenericRSTransformWithSRID.cxx
+++ b/Modules/Core/Transform/test/otbGenericRSTransformWithSRID.cxx
@@ -50,7 +50,7 @@ int otbGenericRSTransformWithSRID(int itkNotUsed(argc), char* argv[])
   double falseNorthingL2 = 2200000;
   oSRS.SetProjCS("Lambert II ");
   oSRS.SetLCC(stdParallel1, stdParallel2, originLatL2, originLongL2, falseEastingL2, falseNorthingL2);
-  char * lambertRef = NULL;
+  char * lambertRef = ITK_NULLPTR;
   oSRS.exportToWkt(&lambertRef);
 
   // Build the Transmercator ref
@@ -60,7 +60,7 @@ int otbGenericRSTransformWithSRID(int itkNotUsed(argc), char* argv[])
   oSRS.SetProjCS("Transmercator ");
   oSRS.SetWellKnownGeogCS("WGS84");
   oSRS.SetTM(originLatTmt, originLongTmt, 1, 0, 0);
-  char * tmtRef = NULL;
+  char * tmtRef = ITK_NULLPTR;
   oSRS.exportToWkt(&tmtRef);
 
   TransformType::Pointer wgs2utm        = TransformType::New();
diff --git a/Modules/Core/VectorDataBase/include/otbDataNode.txx b/Modules/Core/VectorDataBase/include/otbDataNode.txx
index d6b01366972963925760ec4abab938e90a1e1ed7..191ba431a0058195c3e8538436fcfd1c1ea33db0 100644
--- a/Modules/Core/VectorDataBase/include/otbDataNode.txx
+++ b/Modules/Core/VectorDataBase/include/otbDataNode.txx
@@ -602,7 +602,7 @@ DataNode<TPrecision, VDimension, TValuePrecision>
     default: break;
     }
 
-  return NULL;
+  return ITK_NULLPTR;
 }
 
 template <class TPrecision, unsigned int VDimension, class TValuePrecision>
diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.txx b/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.txx
index 1531e7ee7767a789563491d27120579d97569366..22746aa1fef1ef6e72e652e65ed38ef054d52265 100644
--- a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.txx
+++ b/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.txx
@@ -30,7 +30,7 @@ template <class TImage, class TOutput, class TCoordRep, class TPrecision>
 DataNodeImageFunction<TImage, TOutput, TCoordRep, TPrecision>
 ::DataNodeImageFunction()
 {
-  m_Image = NULL;
+  m_Image = ITK_NULLPTR;
   m_StartIndex.Fill(0);
   m_EndIndex.Fill(0);
   m_StartContinuousIndex.Fill(0.0f);
diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.txx b/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.txx
index cba0ab4013709df58d17e8cadff9a638ac572836..64c338b4490f82f4e13fe6be6b0aaeed8c9285c3 100644
--- a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.txx
+++ b/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.txx
@@ -30,7 +30,7 @@ template <class TOutput, class TCoordRep, class TPrecision>
 DataNodeVectorDataFunction<TOutput, TCoordRep, TPrecision>
 ::DataNodeVectorDataFunction()
 {
-  m_VectorData = NULL;
+  m_VectorData = ITK_NULLPTR;
 }
 
 
diff --git a/Modules/Core/VectorDataBase/include/otbVectorDataIOBase.h b/Modules/Core/VectorDataBase/include/otbVectorDataIOBase.h
index 26314b498fd80edfaa2438ec54ff1321bd628673..ae857e67d78a9c84f8c211152ee3bd6975ec6061 100644
--- a/Modules/Core/VectorDataBase/include/otbVectorDataIOBase.h
+++ b/Modules/Core/VectorDataBase/include/otbVectorDataIOBase.h
@@ -144,7 +144,7 @@ public:
   /** Writes the data to disk from the memory buffer provided. Make sure
    * that the IORegions has been set properly. The buffer is cast to a
    * pointer to the beginning of the image data. */
-  virtual void Write(const itk::DataObject* data, char ** papszOptions = NULL) = 0;
+  virtual void Write(const itk::DataObject* data, char ** papszOptions = ITK_NULLPTR) = 0;
 
 protected:
   VectorDataIOBase();
diff --git a/Modules/Core/VectorDataBase/include/otbVectorDataProperties.h b/Modules/Core/VectorDataBase/include/otbVectorDataProperties.h
index 41cd90dd4dbb0466b75cb79e1c7735e7e3b80cf8..3a0b71ee0b5448ffd1bc13a47e3991a4e839448b 100644
--- a/Modules/Core/VectorDataBase/include/otbVectorDataProperties.h
+++ b/Modules/Core/VectorDataBase/include/otbVectorDataProperties.h
@@ -81,7 +81,7 @@ public:
   void ComputeBoundingRegion();
 protected:
   /** Constructor */
-  VectorDataProperties() : m_VectorDataObject(NULL) {};
+  VectorDataProperties() : m_VectorDataObject(ITK_NULLPTR) {};
   /** Destructor */
   ~VectorDataProperties() ITK_OVERRIDE {}
   /**PrintSelf method */
diff --git a/Modules/Core/VectorDataBase/include/otbVectorDataSource.txx b/Modules/Core/VectorDataBase/include/otbVectorDataSource.txx
index 4940d52ab44e0186ad5d27a2302a6ff7b14e5a3a..ea56e45eb2dab09952d33e097b3b4d272e5750d5 100644
--- a/Modules/Core/VectorDataBase/include/otbVectorDataSource.txx
+++ b/Modules/Core/VectorDataBase/include/otbVectorDataSource.txx
@@ -107,7 +107,7 @@ VectorDataSource<TOutputVectorData>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputVectorDataType *> (this->ProcessObject::GetOutput(0));
 }
diff --git a/Modules/Core/VectorDataBase/src/otbVectorDataKeywordlist.cxx b/Modules/Core/VectorDataBase/src/otbVectorDataKeywordlist.cxx
index 90737a9d85b63de77b119a7d9a1e2685f6367e78..c90712c0f18b8a502965c21a33f796e81d93ed20 100644
--- a/Modules/Core/VectorDataBase/src/otbVectorDataKeywordlist.cxx
+++ b/Modules/Core/VectorDataBase/src/otbVectorDataKeywordlist.cxx
@@ -458,7 +458,7 @@ VectorDataKeywordlist
       }
     case OFTString:
       {
-      if (field.second.String != NULL)
+      if (field.second.String != ITK_NULLPTR)
         {
         output << field.second.String;
         }
@@ -522,7 +522,7 @@ VectorDataKeywordlist
       }
     case OFTString:
       {
-      if (field.second.String != NULL)
+      if (field.second.String != ITK_NULLPTR)
         {
         CPLFree(outField.second.String);
         outField.second.String = CPLStrdup(field.second.String);
diff --git a/Modules/Core/VectorDataBase/test/otbPolygon.cxx b/Modules/Core/VectorDataBase/test/otbPolygon.cxx
index 73b5639e27e9e22de6f146247430350531b746e7..19068b6c18ae3802b7d86a22b98b9956f46684c9 100644
--- a/Modules/Core/VectorDataBase/test/otbPolygon.cxx
+++ b/Modules/Core/VectorDataBase/test/otbPolygon.cxx
@@ -37,7 +37,7 @@ int otbPolygon(int itkNotUsed(argc), char * argv[])
   // Reading vertices from command line
   int  cpt = 2;
   bool first = true;
-  while (argv[cpt] != NULL && argv[cpt + 1] != NULL)
+  while (argv[cpt] != ITK_NULLPTR && argv[cpt + 1] != ITK_NULLPTR)
     {
     if (argv[cpt][0] == 'n')
       {
diff --git a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.txx b/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.txx
index 9693e7dbf2ec55dc864aa85cd0327b46f462fce5..03e8e300818fd607260825df72dbda8ca96dda33 100644
--- a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.txx
+++ b/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.txx
@@ -69,7 +69,7 @@ LabeledSampleLocalizationGenerator<TVectorData>
 {
   if (this->GetNumberOfInputs() < idx)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const VectorDataType *>(this->Superclass::GetInput(idx));
diff --git a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.txx b/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.txx
index 33d2865bb19f43203b9e58a3e783099db5103a43..d2b03ac77bce37a420bf8da4b8a49245b9052d01 100644
--- a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.txx
+++ b/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.txx
@@ -50,7 +50,7 @@ LikelihoodPathListFilter<TPath, TImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const ImageType *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.txx b/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.txx
index 7aaf57768a1e2c270c349565c13a0e482f0c6e39..6d9cbf320d75dc9fd3b8ae2f46b4602723881013 100644
--- a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.txx
+++ b/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.txx
@@ -67,7 +67,7 @@ GetInput(void)
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TInputImage *>
@@ -83,7 +83,7 @@ GetInputDirection(void)
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TInputImageDirection *>
diff --git a/Modules/Detection/RoadExtraction/test/otbAlignImageToPath.cxx b/Modules/Detection/RoadExtraction/test/otbAlignImageToPath.cxx
index 2f0998969c3c47991e4605d769d1a2cd79f7f7aa..9a36942b3f1deb28633e8c59540b06fa7b017af3 100644
--- a/Modules/Detection/RoadExtraction/test/otbAlignImageToPath.cxx
+++ b/Modules/Detection/RoadExtraction/test/otbAlignImageToPath.cxx
@@ -108,7 +108,7 @@ int otbAlignImageToPath(int itkNotUsed(argc), char * argv[])
   otbGenericMsgDebugMacro(<< "Writing :");
 
   FILE *file = fopen(outputFilename, "w");
-  if (file == NULL)
+  if (file == ITK_NULLPTR)
     {
     fprintf(stderr, "Error, can't open file");
     exit(-1);
diff --git a/Modules/Detection/RoadExtraction/test/otbBreakAngularPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbBreakAngularPathListFilter.cxx
index f523961ba4db29c1160c0b3d239ea3bd58941594..c6426993e3328acebc39f6d023fd0b143b3a7e78 100644
--- a/Modules/Detection/RoadExtraction/test/otbBreakAngularPathListFilter.cxx
+++ b/Modules/Detection/RoadExtraction/test/otbBreakAngularPathListFilter.cxx
@@ -45,7 +45,7 @@ int otbBreakAngularPathListFilter(int itkNotUsed(argc), char * argv[])
   ++cpt;
   ListPoints.clear();
 
-  while (argv[cpt] != NULL)
+  while (argv[cpt] != ITK_NULLPTR)
     {
     if (argv[cpt][0] == '|')
       {
diff --git a/Modules/Detection/RoadExtraction/test/otbLikelihoodPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbLikelihoodPathListFilter.cxx
index 6a7334b1fb0e149f7c66763ccdfc13f7ba404d1d..c9b6e495c23a07c79e3465492f480ef5b8d9e717 100644
--- a/Modules/Detection/RoadExtraction/test/otbLikelihoodPathListFilter.cxx
+++ b/Modules/Detection/RoadExtraction/test/otbLikelihoodPathListFilter.cxx
@@ -39,7 +39,7 @@ int otbLikelihoodPathListFilter(int itkNotUsed(argc), char * argv[])
   int cpt = 3;
   ListPoints.clear();
 
-  while (argv[cpt] != NULL)
+  while (argv[cpt] != ITK_NULLPTR)
     {
     if (argv[cpt][0] == '|')
       {
diff --git a/Modules/Detection/RoadExtraction/test/otbLinkPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbLinkPathListFilter.cxx
index d9d571980317afe648795065862a212a8c29a2b3..5cdee745edeaaf5769baa2ed6778c21c07187dc0 100644
--- a/Modules/Detection/RoadExtraction/test/otbLinkPathListFilter.cxx
+++ b/Modules/Detection/RoadExtraction/test/otbLinkPathListFilter.cxx
@@ -40,7 +40,7 @@ int otbLinkPathListFilter(int itkNotUsed(argc), char * argv[])
   int cpt = 4;
   ListPoints.clear();
 
-  while (argv[cpt] != NULL)
+  while (argv[cpt] != ITK_NULLPTR)
     {
     if (argv[cpt][0] == '|')
       {
diff --git a/Modules/Detection/RoadExtraction/test/otbRemoveTortuousPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbRemoveTortuousPathListFilter.cxx
index 0e9f47db6d8d52d27098f6ef10d66038bd8e8876..388a709c0b0e9fe4be923f7eebaef40e13fdc813 100644
--- a/Modules/Detection/RoadExtraction/test/otbRemoveTortuousPathListFilter.cxx
+++ b/Modules/Detection/RoadExtraction/test/otbRemoveTortuousPathListFilter.cxx
@@ -35,7 +35,7 @@ int otbRemoveTortuousPathListFilter(int itkNotUsed(argc), char * argv[])
   int cpt = 3;
   ListPoints.clear();
 
-  while (argv[cpt] != NULL)
+  while (argv[cpt] != ITK_NULLPTR)
     {
     if (argv[cpt][0] == '|')
       {
diff --git a/Modules/Detection/RoadExtraction/test/otbSimplifyPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbSimplifyPathListFilter.cxx
index 52db85ed5bb92d4cb68b9777cdee7849351f9a36..a5265309a4ccc6d7e640c3cabd00898acf04b024 100644
--- a/Modules/Detection/RoadExtraction/test/otbSimplifyPathListFilter.cxx
+++ b/Modules/Detection/RoadExtraction/test/otbSimplifyPathListFilter.cxx
@@ -35,7 +35,7 @@ int otbSimplifyPathListFilter(int itkNotUsed(argc), char * argv[])
   int cpt = 3;
   ListPoints.clear();
 
-  while (argv[cpt] != NULL)
+  while (argv[cpt] != ITK_NULLPTR)
     {
     if (argv[cpt][0] == '|')
       {
diff --git a/Modules/Feature/Descriptors/test/otbImageToSIFTKeyPointSetFilterOutputAscii.cxx b/Modules/Feature/Descriptors/test/otbImageToSIFTKeyPointSetFilterOutputAscii.cxx
index 5747f57e4fcbb3915166ec5425dc3152df5157a4..2e81edd548a04f7ef6026fb00fa1ad753d13f00a 100644
--- a/Modules/Feature/Descriptors/test/otbImageToSIFTKeyPointSetFilterOutputAscii.cxx
+++ b/Modules/Feature/Descriptors/test/otbImageToSIFTKeyPointSetFilterOutputAscii.cxx
@@ -66,7 +66,7 @@ int otbImageToSIFTKeyPointSetFilterOutputAscii(int itkNotUsed(argc), char * argv
   filter->Update();
 
   PointsIteratorType pIt = filter->GetOutput()->GetPoints()->Begin();
-  if (filter->GetOutput()->GetPointData() == NULL)
+  if (filter->GetOutput()->GetPointData() == ITK_NULLPTR)
     {
     std::cerr << "No sift point found!" << std::endl;
     return EXIT_FAILURE; //Avoid the subsequent segfault, but need to check if that what the test want to do
diff --git a/Modules/Feature/Edge/include/otbHoughTransform2DLinesImageFilter.txx b/Modules/Feature/Edge/include/otbHoughTransform2DLinesImageFilter.txx
index eefe6b3aa6a4edc8fd3c9184d80161f796434fea..c832c542901b735d35b73428e8856b2ff827002f 100644
--- a/Modules/Feature/Edge/include/otbHoughTransform2DLinesImageFilter.txx
+++ b/Modules/Feature/Edge/include/otbHoughTransform2DLinesImageFilter.txx
@@ -50,7 +50,7 @@ HoughTransform2DLinesImageFilter<TInputPixelType, TOutputPixelType>
   m_Variance = 5;
   m_OldModifiedTime = 0;
   m_OldNumberOfLines = 0;
-  m_SimplifyAccumulator = NULL;
+  m_SimplifyAccumulator = ITK_NULLPTR;
 }
 
 template<typename TInputPixelType, typename TOutputPixelType>
diff --git a/Modules/Feature/Edge/include/otbLineDetectorImageFilterBase.txx b/Modules/Feature/Edge/include/otbLineDetectorImageFilterBase.txx
index e60a2c72463e1cdf2ab5da28a29cacb6bc0c2d4d..c9454462870c8c709c0c8d88e8f4adabfa85a72f 100644
--- a/Modules/Feature/Edge/include/otbLineDetectorImageFilterBase.txx
+++ b/Modules/Feature/Edge/include/otbLineDetectorImageFilterBase.txx
@@ -290,11 +290,11 @@ LineDetectorImageFilterBase<TInputImage, TOutputImage, TOutputImageDirection, In
       // Contains for the 4 directions the the pixels belonging to each zone
       //std::vector<double> PixelValues[NB_DIR][NB_ZONE];
       // ROMAIN
-      std::vector<double>** PixelValues = NULL;
+      std::vector<double>** PixelValues = ITK_NULLPTR;
       PixelValues = new std::vector<double>*[NB_DIR];
       for (unsigned int i = 0; i < NB_DIR; ++i)
         {
-        PixelValues[i] = NULL;
+        PixelValues[i] = ITK_NULLPTR;
         PixelValues[i] = new std::vector<double>[NB_ZONE];
         }
       //otbMsgDevMacro( << "\tCentre Xc/Yc="<<Xc<<" "<<Yc<<" Yc12/Yc13="<<Yc12<<" "<<Yc13);
@@ -377,10 +377,10 @@ LineDetectorImageFilterBase<TInputImage, TOutputImage, TOutputImageDirection, In
       for (unsigned int i = 0; i < NB_DIR; ++i)
         {
         delete[] PixelValues[i];
-        PixelValues[i] = NULL;
+        PixelValues[i] = ITK_NULLPTR;
         }
       delete[] PixelValues;
-      PixelValues = NULL;
+      PixelValues = ITK_NULLPTR;
       }
 
     }
diff --git a/Modules/Feature/Edge/include/otbLineSegmentDetector.txx b/Modules/Feature/Edge/include/otbLineSegmentDetector.txx
index f7c08df38cc7d3bf8845243381255b0ab1417de4..e3eea277d01cd1d7570f97403b36f611fe92c535 100644
--- a/Modules/Feature/Edge/include/otbLineSegmentDetector.txx
+++ b/Modules/Feature/Edge/include/otbLineSegmentDetector.txx
@@ -77,7 +77,7 @@ LineSegmentDetector<TInputImage, TPrecision>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const InputImageType *>(this->Superclass::GetInput(0));
diff --git a/Modules/Feature/Edge/include/otbPixelSuppressionByDirectionImageFilter.txx b/Modules/Feature/Edge/include/otbPixelSuppressionByDirectionImageFilter.txx
index aa453b206f1844c43032fdd24891927c4d405910..42864f631b376417b92247d2ec8459f717e7496b 100644
--- a/Modules/Feature/Edge/include/otbPixelSuppressionByDirectionImageFilter.txx
+++ b/Modules/Feature/Edge/include/otbPixelSuppressionByDirectionImageFilter.txx
@@ -69,7 +69,7 @@ PixelSuppressionByDirectionImageFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TInputImage *>
@@ -84,7 +84,7 @@ PixelSuppressionByDirectionImageFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TInputImage *>
diff --git a/Modules/Feature/Textures/include/otbSFSTexturesImageFilter.txx b/Modules/Feature/Textures/include/otbSFSTexturesImageFilter.txx
index be677eb68963509964aef437714ba9a0cabeba69..670e5c643cbe169b848a8594587f5c75a5560864 100644
--- a/Modules/Feature/Textures/include/otbSFSTexturesImageFilter.txx
+++ b/Modules/Feature/Textures/include/otbSFSTexturesImageFilter.txx
@@ -76,7 +76,7 @@ SFSTexturesImageFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   if (this->GetTexturesStatus()[0] == false)
     {
@@ -108,7 +108,7 @@ SFSTexturesImageFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   if (this->GetTexturesStatus()[1] == false)
     {
@@ -140,7 +140,7 @@ SFSTexturesImageFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   if (this->GetTexturesStatus()[2] == false)
     {
@@ -173,7 +173,7 @@ SFSTexturesImageFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   if (this->GetTexturesStatus()[3] == false)
     {
@@ -205,7 +205,7 @@ SFSTexturesImageFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 5)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   if (this->GetTexturesStatus()[4] == false)
     {
@@ -237,7 +237,7 @@ SFSTexturesImageFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 6)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   if (this->GetTexturesStatus()[5] == false)
     {
diff --git a/Modules/Feature/Textures/include/otbScalarImageToAdvancedTexturesFilter.txx b/Modules/Feature/Textures/include/otbScalarImageToAdvancedTexturesFilter.txx
index cdf84808e9d14124ae1d919a910500e9b89745d4..e0463ab5c888f97a007d5ad62ba27d7a596dfbd1 100644
--- a/Modules/Feature/Textures/include/otbScalarImageToAdvancedTexturesFilter.txx
+++ b/Modules/Feature/Textures/include/otbScalarImageToAdvancedTexturesFilter.txx
@@ -66,7 +66,7 @@ ScalarImageToAdvancedTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(0));
 }
@@ -79,7 +79,7 @@ ScalarImageToAdvancedTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(1));
 }
@@ -92,7 +92,7 @@ ScalarImageToAdvancedTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(2));
 }
@@ -105,7 +105,7 @@ ScalarImageToAdvancedTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(3));
 }
@@ -118,7 +118,7 @@ ScalarImageToAdvancedTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 5)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(4));
 }
@@ -131,7 +131,7 @@ ScalarImageToAdvancedTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 6)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(5));
 }
@@ -144,7 +144,7 @@ ScalarImageToAdvancedTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 7)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(6));
 }
@@ -157,7 +157,7 @@ ScalarImageToAdvancedTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 8)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(7));
 }
@@ -170,7 +170,7 @@ ScalarImageToAdvancedTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 9)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(8));
 }
@@ -183,7 +183,7 @@ ScalarImageToAdvancedTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 10)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(9));
 }
diff --git a/Modules/Feature/Textures/include/otbScalarImageToHigherOrderTexturesFilter.txx b/Modules/Feature/Textures/include/otbScalarImageToHigherOrderTexturesFilter.txx
index 7e3c6bd181d155c3a13dd05b170f93eeb9958ec9..66d4a4b65a75403e3c66805807f7e0d475868452 100644
--- a/Modules/Feature/Textures/include/otbScalarImageToHigherOrderTexturesFilter.txx
+++ b/Modules/Feature/Textures/include/otbScalarImageToHigherOrderTexturesFilter.txx
@@ -86,7 +86,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(0));
 }
@@ -99,7 +99,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(1));
 }
@@ -112,7 +112,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(2));
 }
@@ -125,7 +125,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(3));
 }
@@ -138,7 +138,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 5)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(4));
 }
@@ -151,7 +151,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 6)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(5));
 }
@@ -164,7 +164,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 7)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(6));
 }
@@ -177,7 +177,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 8)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(7));
 }
@@ -190,7 +190,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 9)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(8));
 }
@@ -203,7 +203,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 10)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(9));
 }
@@ -216,7 +216,7 @@ ScalarImageToHigherOrderTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 11)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(10));
 }
diff --git a/Modules/Feature/Textures/include/otbScalarImageToTexturesFilter.txx b/Modules/Feature/Textures/include/otbScalarImageToTexturesFilter.txx
index 0e70914b73938d64dfef9fabd8ebd72f5b19dd45..7607041871d61f8c447782bea6563db62fbbd35d 100644
--- a/Modules/Feature/Textures/include/otbScalarImageToTexturesFilter.txx
+++ b/Modules/Feature/Textures/include/otbScalarImageToTexturesFilter.txx
@@ -67,7 +67,7 @@ ScalarImageToTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(0));
 }
@@ -80,7 +80,7 @@ ScalarImageToTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(1));
 }
@@ -93,7 +93,7 @@ ScalarImageToTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(2));
 }
@@ -106,7 +106,7 @@ ScalarImageToTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(3));
 }
@@ -119,7 +119,7 @@ ScalarImageToTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 5)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(4));
 }
@@ -132,7 +132,7 @@ ScalarImageToTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 6)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(5));
 }
@@ -145,7 +145,7 @@ ScalarImageToTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 7)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(6));
 }
@@ -158,7 +158,7 @@ ScalarImageToTexturesFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 8)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->GetOutput(7));
 }
diff --git a/Modules/Feature/Textures/test/otbScalarImageToHigherOrderTexturesFilter.cxx b/Modules/Feature/Textures/test/otbScalarImageToHigherOrderTexturesFilter.cxx
index a72f059f04a478643a44965ffe05577e95f07226..8f120fa87e543f913de6de24431dc42e21e0995e 100644
--- a/Modules/Feature/Textures/test/otbScalarImageToHigherOrderTexturesFilter.cxx
+++ b/Modules/Feature/Textures/test/otbScalarImageToHigherOrderTexturesFilter.cxx
@@ -218,15 +218,15 @@ int otbScalarImageToHigherOrderTexturesFilter(int argc, char * argv[])
     std::cout << "Testing radius = " << radius << " and default offsets" << std::endl;
 
     ImageType::Pointer inputImage = ReadInputImage(infname);
-    std::vector<ImageType::Pointer> results = Compute(inputImage, nbBins, radius, 0);
+    std::vector<ImageType::Pointer> results = Compute(inputImage, nbBins, radius, ITK_NULLPTR);
 
-    if ( ValidateAt(inputImage, results, nbBins, radius, 0, 7, 11) == EXIT_FAILURE )
+    if ( ValidateAt(inputImage, results, nbBins, radius, ITK_NULLPTR, 7, 11) == EXIT_FAILURE )
       return EXIT_FAILURE;
-    if ( ValidateAt(inputImage, results, nbBins, radius, 0, 5, 5) == EXIT_FAILURE )
+    if ( ValidateAt(inputImage, results, nbBins, radius, ITK_NULLPTR, 5, 5) == EXIT_FAILURE )
       return EXIT_FAILURE;
-    if ( ValidateAt(inputImage, results, nbBins, radius, 0, 7, 11) == EXIT_FAILURE )
+    if ( ValidateAt(inputImage, results, nbBins, radius, ITK_NULLPTR, 7, 11) == EXIT_FAILURE )
       return EXIT_FAILURE;
-    if ( ValidateAt(inputImage, results, nbBins, radius, 0, 10, 5) == EXIT_FAILURE )
+    if ( ValidateAt(inputImage, results, nbBins, radius, ITK_NULLPTR, 10, 5) == EXIT_FAILURE )
       return EXIT_FAILURE;
   }
 
diff --git a/Modules/Filtering/ChangeDetection/include/otbBinaryFunctorNeighborhoodJoinHistogramImageFilter.txx b/Modules/Filtering/ChangeDetection/include/otbBinaryFunctorNeighborhoodJoinHistogramImageFilter.txx
index e59b38064992291afc22aaa95c9c409fa36c9c2e..101b289b5783404d3e94362db462835719d43a61 100644
--- a/Modules/Filtering/ChangeDetection/include/otbBinaryFunctorNeighborhoodJoinHistogramImageFilter.txx
+++ b/Modules/Filtering/ChangeDetection/include/otbBinaryFunctorNeighborhoodJoinHistogramImageFilter.txx
@@ -74,7 +74,7 @@ BinaryFunctorNeighborhoodJoinHistogramImageFilter<TInputImage1, TInputImage2, TO
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage1 *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -87,7 +87,7 @@ BinaryFunctorNeighborhoodJoinHistogramImageFilter<TInputImage1, TInputImage2, TO
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage2 *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerSupervizedDistanceImageFilter.txx b/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerSupervizedDistanceImageFilter.txx
index b5f9234106e2bf6881b3ae0823e94ee285303ba4..3c454f851d481cc5f1381253496f4e6b0c1f5305 100644
--- a/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerSupervizedDistanceImageFilter.txx
+++ b/Modules/Filtering/ChangeDetection/include/otbKullbackLeiblerSupervizedDistanceImageFilter.txx
@@ -33,8 +33,8 @@ template <class TInput1, class TInput2, class TInputROIImage, class TOutput>
 KullbackLeiblerSupervizedDistance<TInput1, TInput2, TInputROIImage, TOutput>
 ::KullbackLeiblerSupervizedDistance ()
 {
-  m_CumROI1 = NULL;
-  m_CumROI2 = NULL;
+  m_CumROI1 = ITK_NULLPTR;
+  m_CumROI2 = ITK_NULLPTR;
 }
 
 template <class TInput1, class TInput2, class TInputROIImage, class TOutput>
@@ -42,10 +42,10 @@ KullbackLeiblerSupervizedDistance<TInput1, TInput2, TInputROIImage, TOutput>
 ::~KullbackLeiblerSupervizedDistance ()
 {
   delete m_CumROI1;
-  m_CumROI1 = NULL;
+  m_CumROI1 = ITK_NULLPTR;
 
   delete m_CumROI2;
-  m_CumROI2 = NULL;
+  m_CumROI2 = ITK_NULLPTR;
 }
 
 template <class TInput1, class TInput2, class TInputROIImage, class TOutput>
@@ -66,7 +66,7 @@ KullbackLeiblerSupervizedDistance<TInput1, TInput2, TInputROIImage, TOutput>
   conversion1->SetROIImage(imgROI);
   conversion1->Update();
 
-  if (m_CumROI1 != NULL) delete m_CumROI1;
+  if (m_CumROI1 != ITK_NULLPTR) delete m_CumROI1;
 
   m_CumROI1 = new CumulantsForEdgeworth<ROIInputType1> (conversion1->GetOutput());
 
@@ -89,7 +89,7 @@ KullbackLeiblerSupervizedDistance<TInput1, TInput2, TInputROIImage, TOutput>
   conversion2->SetROIImage(imgROI);
   conversion2->Update();
 
-  if (m_CumROI2 != NULL) delete m_CumROI2;
+  if (m_CumROI2 != ITK_NULLPTR) delete m_CumROI2;
 
   m_CumROI2 = new CumulantsForEdgeworth<ROIInputType2> (conversion2->GetOutput());
 
diff --git a/Modules/Filtering/ChangeDetection/include/otbMultivariateAlterationDetectorImageFilter.txx b/Modules/Filtering/ChangeDetection/include/otbMultivariateAlterationDetectorImageFilter.txx
index 24190c3eb48e15490e5a4365021318e0e0bb1283..6080c210dc1968d7bf8eb1404df85e0d8fa0c00b 100644
--- a/Modules/Filtering/ChangeDetection/include/otbMultivariateAlterationDetectorImageFilter.txx
+++ b/Modules/Filtering/ChangeDetection/include/otbMultivariateAlterationDetectorImageFilter.txx
@@ -54,7 +54,7 @@ MultivariateAlterationDetectorImageFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -76,7 +76,7 @@ MultivariateAlterationDetectorImageFilter<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionBinaryImageFilter.txx b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionBinaryImageFilter.txx
index fc3110f25f46125b6282161ecb2c24c64f92743b..8e1d2702bd61f86c1427277838a922571eb018ca 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionBinaryImageFilter.txx
+++ b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionBinaryImageFilter.txx
@@ -56,7 +56,7 @@ AngularProjectionBinaryImageFilter< TInputImage, TOutputImage, TPrecision >
 {
   if ( this->GetNumberOfInputs() < 1 )
   {
-    return 0;
+    return ITK_NULLPTR;
   }
 
   return static_cast<const TInputImage * > (this->itk::ProcessObject::GetInput(0) );
@@ -69,7 +69,7 @@ AngularProjectionBinaryImageFilter< TInputImage, TOutputImage, TPrecision >
 {
   if ( this->GetNumberOfInputs() < 2 )
   {
-    return 0;
+    return ITK_NULLPTR;
   }
 
   return static_cast<const TInputImage * > (this->itk::ProcessObject::GetInput(1));
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionImageFilter.txx b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionImageFilter.txx
index 33cf38a13a1226295232898bc0abc805f8014dda..a6ce735a8388ba7a9000b70ec96f276a45d6460b 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionImageFilter.txx
+++ b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionImageFilter.txx
@@ -50,7 +50,7 @@ AngularProjectionImageFilter< TInputImage, TOutputImage, TAngleArray, TPrecision
 {
   if ( i >= this->GetNumberOfInputs() )
   {
-    return 0;
+    return ITK_NULLPTR;
   }
 
   return static_cast<const InputImageType * >
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionSetImageFilter.txx b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionSetImageFilter.txx
index fd98c1b9422fe84d24fbb051a14ec80e80ba19b0..5b138d768fd83fbcaf5f55f14162cb47a11f1c22 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionSetImageFilter.txx
+++ b/Modules/Filtering/DimensionalityReduction/include/otbAngularProjectionSetImageFilter.txx
@@ -53,7 +53,7 @@ AngularProjectionSetImageFilter< TInputImage, TOutputImage, TAngleList, TPrecisi
 {
   if ( i >= this->GetNumberOfInputs() )
   {
-    return 0;
+    return ITK_NULLPTR;
   }
 
   return static_cast<const InputImageType * >
diff --git a/Modules/Filtering/DimensionalityReduction/include/otbSparseWvltToAngleMapperListFilter.txx b/Modules/Filtering/DimensionalityReduction/include/otbSparseWvltToAngleMapperListFilter.txx
index c99bedf39a508f1c6d51bc0f83f032efc290d6b9..35c966a414010a0810c9a1c2b3d98ae35e7439d6 100644
--- a/Modules/Filtering/DimensionalityReduction/include/otbSparseWvltToAngleMapperListFilter.txx
+++ b/Modules/Filtering/DimensionalityReduction/include/otbSparseWvltToAngleMapperListFilter.txx
@@ -55,7 +55,7 @@ SparseWvltToAngleMapperListFilter< TInputImageList, TOutputSampleList, VNbInputI
 {
   if ( i >= this->GetNumberOfInputs() )
   {
-    return 0;
+    return ITK_NULLPTR;
   }
 
   return static_cast<const InputImageListType * >
diff --git a/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodImageFilter.txx b/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodImageFilter.txx
index d5e13ccf188d868af5d9a1bd862ed48eca65f78d..b3169949d80a3f289732714706f0b09cccbeed33 100644
--- a/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodImageFilter.txx
+++ b/Modules/Filtering/ImageManipulation/include/otbBinaryFunctorNeighborhoodImageFilter.txx
@@ -72,7 +72,7 @@ BinaryFunctorNeighborhoodImageFilter<TInputImage1, TInputImage2, TOutputImage, T
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage1 *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -85,7 +85,7 @@ BinaryFunctorNeighborhoodImageFilter<TInputImage1, TInputImage2, TOutputImage, T
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage2 *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Filtering/ImageManipulation/include/otbChangeInformationImageFilter.txx b/Modules/Filtering/ImageManipulation/include/otbChangeInformationImageFilter.txx
index d56a694eda9ffc14a4cc987e152e86a889748323..6f694fccc86de223a0c60d3b296844f575314161 100644
--- a/Modules/Filtering/ImageManipulation/include/otbChangeInformationImageFilter.txx
+++ b/Modules/Filtering/ImageManipulation/include/otbChangeInformationImageFilter.txx
@@ -75,7 +75,7 @@ ChangeInformationImageFilter<TInputImage>
     // enable this key for metadata change
     m_ChangedKeys.insert(key);
     itk::MetaDataDictionary &dict = this->GetMetaDataDictionary();
-    if (value == NULL)
+    if (value == ITK_NULLPTR)
       {
       // Remove meta-data from dictionary
       this->RemoveKeyFromDictionary(dict,key);
diff --git a/Modules/Filtering/ImageManipulation/include/otbMaskedIteratorDecorator.txx b/Modules/Filtering/ImageManipulation/include/otbMaskedIteratorDecorator.txx
index c4c0fed42bef02f0998c15f6bb06b528247aa1c8..ce75332a0e3badf3e9770f29a57d2dff2db69ec0 100644
--- a/Modules/Filtering/ImageManipulation/include/otbMaskedIteratorDecorator.txx
+++ b/Modules/Filtering/ImageManipulation/include/otbMaskedIteratorDecorator.txx
@@ -31,7 +31,7 @@ MaskedIteratorDecorator<TIteratorType,TMaskIteratorType>
                           const RegionType& region)
 {
   m_ItImage = TIteratorType(image,region);
-  if (mask == NULL)
+  if (mask == ITK_NULLPTR)
     {
     m_UseMask = false;
     }
diff --git a/Modules/Filtering/ImageManipulation/include/otbPrintableImageFilter.txx b/Modules/Filtering/ImageManipulation/include/otbPrintableImageFilter.txx
index 407fa2350bcdfa52855d6f280aa2a7b10d608ce0..ad4143123da0127e5e55674c85586e5cb3ca1f65 100644
--- a/Modules/Filtering/ImageManipulation/include/otbPrintableImageFilter.txx
+++ b/Modules/Filtering/ImageManipulation/include/otbPrintableImageFilter.txx
@@ -80,7 +80,7 @@ PrintableImageFilter<TInputImage, TMaskImage>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<MaskImageType *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Filtering/ImageManipulation/include/otbStreamingMatrixTransposeMatrixImageFilter.h b/Modules/Filtering/ImageManipulation/include/otbStreamingMatrixTransposeMatrixImageFilter.h
index eab69d6aa1bf3e7bbb1c99821795fde8f4e93955..bb7f8efcf402fe75c3aa5076eebd41e2cf0dabd4 100644
--- a/Modules/Filtering/ImageManipulation/include/otbStreamingMatrixTransposeMatrixImageFilter.h
+++ b/Modules/Filtering/ImageManipulation/include/otbStreamingMatrixTransposeMatrixImageFilter.h
@@ -148,7 +148,7 @@ public:
   {
     if (this->GetNumberOfInputs() < 1)
       {
-      return 0;
+      return ITK_NULLPTR;
       }
     else return (static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(0)));
   }
@@ -157,7 +157,7 @@ public:
   {
     if (this->GetNumberOfInputs() < 2)
       {
-      return 0;
+      return ITK_NULLPTR;
       }
     else return (static_cast<const TInputImage2 *>(this->itk::ProcessObject::GetInput(1)));
   }
diff --git a/Modules/Filtering/ImageManipulation/test/otbChangeInformationImageFilter.cxx b/Modules/Filtering/ImageManipulation/test/otbChangeInformationImageFilter.cxx
index 2a6a7e2a904cee67cfa8d15e7bf7d3be65126ece..d3a6c078f51e2bcff95a852ab08ee64667a69e30 100644
--- a/Modules/Filtering/ImageManipulation/test/otbChangeInformationImageFilter.cxx
+++ b/Modules/Filtering/ImageManipulation/test/otbChangeInformationImageFilter.cxx
@@ -36,7 +36,7 @@ int otbChangeInformationImageFilter(int itkNotUsed(argc), char * argv[])
   std::string newProj("Fake ProjRef");
   filter->SetOutputMetaData<std::string>(otb::MetaDataKey::ProjectionRefKey,&newProj);
   // erase that choice
-  filter->SetOutputMetaData<std::string>(otb::MetaDataKey::ProjectionRefKey,NULL);
+  filter->SetOutputMetaData<std::string>(otb::MetaDataKey::ProjectionRefKey,ITK_NULLPTR);
   // add a no data to the image
   std::vector<bool> flags;
   flags.push_back(true);
diff --git a/Modules/Filtering/ImageManipulation/test/otbMaskedIteratorDecorator.cxx b/Modules/Filtering/ImageManipulation/test/otbMaskedIteratorDecorator.cxx
index 37f7a18c14f6f4d269f742e91a8b47e7c5bcf668..d93396d4953d885b03dbf4dd768382bf75bb6ec2 100644
--- a/Modules/Filtering/ImageManipulation/test/otbMaskedIteratorDecorator.cxx
+++ b/Modules/Filtering/ImageManipulation/test/otbMaskedIteratorDecorator.cxx
@@ -345,12 +345,12 @@ int otbMaskedIteratorDecoratorExtended(int itkNotUsed(argc), char * itkNotUsed(a
 
   std::cout << std::endl << "itk::ImageRegionIterator without mask: ";
   ret = TripleTest< itk::ImageRegionIterator<ImageType>,
-                    itk::ImageRegionIterator<MaskType> >(image, NULL, region);
+                    itk::ImageRegionIterator<MaskType> >(image, ITK_NULLPTR, region);
   retGlobal = (ret == EXIT_FAILURE ? EXIT_FAILURE : retGlobal);
 
   std::cout << std::endl << "itk::ImageRegionConstIterator without mask: ";
   ret = TripleTest< itk::ImageRegionConstIterator<ImageType>,
-                    itk::ImageRegionConstIterator<MaskType> >(image, NULL, region);
+                    itk::ImageRegionConstIterator<MaskType> >(image, ITK_NULLPTR, region);
   retGlobal = (ret == EXIT_FAILURE ? EXIT_FAILURE : retGlobal);
 
   return retGlobal;
diff --git a/Modules/Filtering/ImageManipulation/test/otbRegionProjectionResampler.cxx b/Modules/Filtering/ImageManipulation/test/otbRegionProjectionResampler.cxx
index 4984bdad5f0d3c5d558987e4d25a31fc98fc5291..acbbbdb90c728409821275b864fc5930737aae3e 100644
--- a/Modules/Filtering/ImageManipulation/test/otbRegionProjectionResampler.cxx
+++ b/Modules/Filtering/ImageManipulation/test/otbRegionProjectionResampler.cxx
@@ -107,8 +107,8 @@ int otbRegionProjectionResampler(int argc, char* argv[])
   spacing[0] = atof(argv[8]);
   spacing[1] = atof(argv[9]);
 
-  origin[0] = strtod(argv[3], NULL);         // origin longitude.
-  origin[1] = strtod(argv[4], NULL);         // origin latitude.
+  origin[0] = strtod(argv[3], ITK_NULLPTR);         // origin longitude.
+  origin[1] = strtod(argv[4], ITK_NULLPTR);         // origin latitude.
 
   otbGenericMsgDebugMacro(<< "Origin " << origin);
 
diff --git a/Modules/Filtering/Path/include/otbDrawPathListFilter.txx b/Modules/Filtering/Path/include/otbDrawPathListFilter.txx
index 0b60c2a6887a4bfe1421a827d46b3b1b9a2155d3..ebfca07e0a63309112b10e0eb2372804399df0fb 100644
--- a/Modules/Filtering/Path/include/otbDrawPathListFilter.txx
+++ b/Modules/Filtering/Path/include/otbDrawPathListFilter.txx
@@ -56,7 +56,7 @@ DrawPathListFilter<TInputImage, TInputPath, TOutputImage>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const InputPathListType *>(this->ProcessObjectType::GetInput(1));
 }
diff --git a/Modules/Filtering/Path/include/otbImageFittingPolygonListFilter.txx b/Modules/Filtering/Path/include/otbImageFittingPolygonListFilter.txx
index baf4292944bb075a64413238e86faec8106ff6f5..89943767c0a41991746776e8fbab54b1e4cd9738 100644
--- a/Modules/Filtering/Path/include/otbImageFittingPolygonListFilter.txx
+++ b/Modules/Filtering/Path/include/otbImageFittingPolygonListFilter.txx
@@ -53,7 +53,7 @@ ImageFittingPolygonListFilter<TPath, TImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const ImageType *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Filtering/Path/include/otbImageToPathListFilter.txx b/Modules/Filtering/Path/include/otbImageToPathListFilter.txx
index df505f0a597bdcee05b22d8e74d82aeaf9481e47..b67b226f89cebfff83400ac1adc0a9fb70269736 100644
--- a/Modules/Filtering/Path/include/otbImageToPathListFilter.txx
+++ b/Modules/Filtering/Path/include/otbImageToPathListFilter.txx
@@ -58,7 +58,7 @@ ImageToPathListFilter<TInputImage, TOutputPath>
 
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TInputImage *>
diff --git a/Modules/Filtering/Path/include/otbPathFunction.txx b/Modules/Filtering/Path/include/otbPathFunction.txx
index 43ee43a072c221459edd6a1a592e7c9296594b5d..971f4587454f772eed96760bf49cb37e0bb05d3c 100644
--- a/Modules/Filtering/Path/include/otbPathFunction.txx
+++ b/Modules/Filtering/Path/include/otbPathFunction.txx
@@ -30,7 +30,7 @@ template <class TInputPath, class TOutput>
 PathFunction<TInputPath, TOutput>
 ::PathFunction()
 {
-  m_Path = NULL;
+  m_Path = ITK_NULLPTR;
 }
 
 /**
diff --git a/Modules/Filtering/Path/include/otbPathListToHistogramGenerator.txx b/Modules/Filtering/Path/include/otbPathListToHistogramGenerator.txx
index 35f6302317757d66a1d723fcd130717a8b3dc958..850b32dea38ab663480fa45565858a9ab4d216bc 100644
--- a/Modules/Filtering/Path/include/otbPathListToHistogramGenerator.txx
+++ b/Modules/Filtering/Path/include/otbPathListToHistogramGenerator.txx
@@ -53,7 +53,7 @@ PathListToHistogramGenerator<TPath, TFunction>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const PathListType* >
     (this->itk::ProcessObject::GetInput(0) );
diff --git a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.txx b/Modules/Filtering/Path/include/otbVectorizationPathListFilter.txx
index 038ceb4bb21c109801baca1eb243a72dbe6b9e0a..ef7c42fe40dd6d25ded284cfb63e07fbc0cebff7 100644
--- a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.txx
+++ b/Modules/Filtering/Path/include/otbVectorizationPathListFilter.txx
@@ -52,7 +52,7 @@ VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputModulus*>(this->itk::ProcessObject::GetInput(0));
 }
@@ -73,7 +73,7 @@ VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputDirection *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Filtering/Path/test/otbRegionImageToRectangularPathListFilter.cxx b/Modules/Filtering/Path/test/otbRegionImageToRectangularPathListFilter.cxx
index e088c294b2879de526044720c50535f4ab07a838..a42753cdeb05eb21854847906284a6a1dd0b6f95 100644
--- a/Modules/Filtering/Path/test/otbRegionImageToRectangularPathListFilter.cxx
+++ b/Modules/Filtering/Path/test/otbRegionImageToRectangularPathListFilter.cxx
@@ -62,7 +62,7 @@ int otbRegionImageToRectangularPathListFilter(int itkNotUsed(argc), char * argv[
   ListType::Iterator listIt = pathList->Begin();
 
   FILE *file = fopen(outputFilename, "w");
-  if (file == NULL)
+  if (file == ITK_NULLPTR)
     {
     fprintf(stderr, "Error, can't open file");
     exit(-1);
diff --git a/Modules/Filtering/Polarimetry/test/otbMultiChannelsPolarimetricSynthesisFilter.cxx b/Modules/Filtering/Polarimetry/test/otbMultiChannelsPolarimetricSynthesisFilter.cxx
index dab9e4dd1ca5db03bd08444c750bec0a2c3cffcd..8f13439f1012ba94353382eafa65f9ce806faef7 100644
--- a/Modules/Filtering/Polarimetry/test/otbMultiChannelsPolarimetricSynthesisFilter.cxx
+++ b/Modules/Filtering/Polarimetry/test/otbMultiChannelsPolarimetricSynthesisFilter.cxx
@@ -34,10 +34,10 @@ int otbMultiChannelsPolarimetricSynthesisFilter(int itkNotUsed(argc), char * arg
 
   const char * outputFilename = argv[4];
 
-  double PsiI = strtod(argv[5], NULL);
-  double KhiI = strtod(argv[6], NULL);
-  double PsiR = strtod(argv[7], NULL);
-  double KhiR = strtod(argv[8], NULL);
+  double PsiI = strtod(argv[5], ITK_NULLPTR);
+  double KhiI = strtod(argv[6], ITK_NULLPTR);
+  double PsiR = strtod(argv[7], ITK_NULLPTR);
+  double KhiR = strtod(argv[8], ITK_NULLPTR);
 
   typedef std::complex <double> InputPixelType;
   typedef double                OutputPixelType;
diff --git a/Modules/Filtering/Polarimetry/test/otbVectorMultiChannelsPolarimetricSynthesisFilter.cxx b/Modules/Filtering/Polarimetry/test/otbVectorMultiChannelsPolarimetricSynthesisFilter.cxx
index 66fa248109683e15d70562a0abe40e26c48b7d82..61b4c6a95971464251fb4a653918a30f307fb96e 100644
--- a/Modules/Filtering/Polarimetry/test/otbVectorMultiChannelsPolarimetricSynthesisFilter.cxx
+++ b/Modules/Filtering/Polarimetry/test/otbVectorMultiChannelsPolarimetricSynthesisFilter.cxx
@@ -31,10 +31,10 @@ int otbVectorMultiChannelsPolarimetricSynthesisFilter(int itkNotUsed(argc), char
   const char * inputFilename  = argv[1];
   const char * outputFilename = argv[2];
 
-  double PsiI = strtod(argv[3], NULL);
-  double KhiI = strtod(argv[4], NULL);
-  double PsiR = strtod(argv[5], NULL);
-  double KhiR = strtod(argv[6], NULL);
+  double PsiI = strtod(argv[3], ITK_NULLPTR);
+  double KhiI = strtod(argv[4], ITK_NULLPTR);
+  double PsiR = strtod(argv[5], ITK_NULLPTR);
+  double KhiR = strtod(argv[6], ITK_NULLPTR);
 
   typedef std::complex <double> InputPixelType;
   typedef double                OutputPixelType;
diff --git a/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.txx b/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.txx
index 990119d130132fd4fd3f4fb480646ef7570cdb01..10c6fab1ddfd297f70eb5a151fc22096bd1a22ff 100644
--- a/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.txx
+++ b/Modules/Filtering/Projection/include/otbGenericRSResampleImageFilter.txx
@@ -295,12 +295,12 @@ GenericRSResampleImageFilter<TInputImage, TOutputImage>
     bool hem = (geoPoint[1]>1e-10)?true:false;
 
     // Build the output UTM projection ref
-    OGRSpatialReferenceH oSRS = OSRNewSpatialReference(NULL);
+    OGRSpatialReferenceH oSRS = OSRNewSpatialReference(ITK_NULLPTR);
     OSRSetProjCS(oSRS, "UTM");
     OSRSetWellKnownGeogCS(oSRS, "WGS84");
     OSRSetUTM(oSRS, zone, hem);
 
-    char * utmRefC = NULL;
+    char * utmRefC = ITK_NULLPTR;
     OSRExportToWkt(oSRS, &utmRefC);
     projectionRef = utmRefC;
 
diff --git a/Modules/Filtering/Projection/include/otbGeometriesProjectionFilter.txx b/Modules/Filtering/Projection/include/otbGeometriesProjectionFilter.txx
index c6c3fdf32c0b9fc0c70577b5929a29694f828b7e..b5eace98aa320e098c75e850e9e3698d87b697af 100644
--- a/Modules/Filtering/Projection/include/otbGeometriesProjectionFilter.txx
+++ b/Modules/Filtering/Projection/include/otbGeometriesProjectionFilter.txx
@@ -32,7 +32,7 @@ otb::ogr::UniqueGeometryPtr
 otb::internal::ReprojectTransformationFunctor::ByCopy::operator()(TGeometry const* in) const
 {
   boost::interprocess::unique_ptr<TGeometry, ogr::internal::GeometryDeleter>
-    out(in ? static_cast <TGeometry*>(in->clone()) : 0); // OGR clone doesn't use covariant return ...
+    out(in ? static_cast <TGeometry*>(in->clone()) : ITK_NULLPTR); // OGR clone doesn't use covariant return ...
   if (out)
     m_Reprojector.do_transform(*out);
   ogr::UniqueGeometryPtr res(out.release());
diff --git a/Modules/Filtering/Projection/include/otbImageToEnvelopeVectorDataFilter.txx b/Modules/Filtering/Projection/include/otbImageToEnvelopeVectorDataFilter.txx
index c0804d4155f5606c9ab689376be49e80c82548cc..3f7908bae6ec7eda55ceeec97042b2806ec7cd51 100644
--- a/Modules/Filtering/Projection/include/otbImageToEnvelopeVectorDataFilter.txx
+++ b/Modules/Filtering/Projection/include/otbImageToEnvelopeVectorDataFilter.txx
@@ -54,7 +54,7 @@ const TInputImage *
 ImageToEnvelopeVectorDataFilter<TInputImage, TOutputVectorData>
 ::GetInput(void)
 {
-  if (this->GetNumberOfInputs() < 1) return 0;
+  if (this->GetNumberOfInputs() < 1) return ITK_NULLPTR;
 
   return dynamic_cast<const InputImageType*>
            (this->itk::ProcessObject::GetInput(0));
diff --git a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.txx b/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.txx
index a3b781c1f37ba5ea09f1ff1b011e664277fb301f..eb3b407617fd033f366ab68fe10665a3a61e0839 100644
--- a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.txx
+++ b/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.txx
@@ -26,7 +26,7 @@ namespace otb
 
 template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision>
 OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision>
-::OrthoRectificationFilter(): m_MapProjection(NULL)
+::OrthoRectificationFilter(): m_MapProjection(ITK_NULLPTR)
 {}
 
 template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision>
diff --git a/Modules/Filtering/Projection/include/otbVectorDataTransformFilter.txx b/Modules/Filtering/Projection/include/otbVectorDataTransformFilter.txx
index ae07c0f89f5a7f6519b4158ec6dcb09e274c6e94..9bf0281aff7b3f5af64cf29c75614b915b9054ba 100644
--- a/Modules/Filtering/Projection/include/otbVectorDataTransformFilter.txx
+++ b/Modules/Filtering/Projection/include/otbVectorDataTransformFilter.txx
@@ -38,7 +38,7 @@ VectorDataTransformFilter<TInputVectorData, TOutputVectorData>
   // use the otb::Transform or we loose the capability of using all the existing
   // itk transform, so we just keep it as NULL and you have to be careful not
   // to burn yourself when using it.
-  m_Transform = NULL;
+  m_Transform = ITK_NULLPTR;
 }
 
 /**
diff --git a/Modules/Filtering/Projection/src/otbGeometriesProjectionFilter.cxx b/Modules/Filtering/Projection/src/otbGeometriesProjectionFilter.cxx
index 24c477ccc13749b1535fee3ae4dafc8fd2ad283c..35d0ff4787cf73f4aeade22b120fe4be4d47fd08 100644
--- a/Modules/Filtering/Projection/src/otbGeometriesProjectionFilter.cxx
+++ b/Modules/Filtering/Projection/src/otbGeometriesProjectionFilter.cxx
@@ -216,7 +216,7 @@ OGRSpatialReference* otb::GeometriesProjectionFilter::DoDefineNewLayerSpatialRef
     }
   else
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 }
 
diff --git a/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx b/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx
index 223b841a6cf566468bfe7f8b16f072855c3edfd1..afa4ed6c4a4c50c0ffb242ffa13a67f3d79205e7 100644
--- a/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx
+++ b/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx
@@ -107,8 +107,8 @@ int otbGCPsToRPCSensorModelImageFilterAndOrtho(int argc, char* argv[])
   orthoRectifFilter->SetOutputSpacing(spacing);
 
   ImageType::PointType origin;
-  origin[0] = strtod(argv[3], NULL);         //Origin easting
-  origin[1] = strtod(argv[4], NULL);         //Origin northing
+  origin[0] = strtod(argv[3], ITK_NULLPTR);         //Origin easting
+  origin[1] = strtod(argv[4], ITK_NULLPTR);         //Origin northing
   orthoRectifFilter->SetOutputOrigin(origin);
 
   utmMapProjection->SetZone(atoi(argv[9]));
diff --git a/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx b/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
index 2c529aedac1268cb89e30d6cda28680931368a21..2d9dce59a0c9f26b37771de13f54a9186806cd66 100644
--- a/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
+++ b/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
@@ -85,7 +85,7 @@ int otbGenericRSResampleImageFilter(int itkNotUsed(argc), char* argv[])
   OGRSpatialReference    oSRS;
   oSRS.SetProjCS("UTM");
   oSRS.SetUTM(31, true);
-  char * utmRef = NULL;
+  char * utmRef = ITK_NULLPTR;
   oSRS.exportToWkt(&utmRef);
 
   // Displacement Field spacing
diff --git a/Modules/Filtering/Projection/test/otbGenericRSTransformFromImage.cxx b/Modules/Filtering/Projection/test/otbGenericRSTransformFromImage.cxx
index 2afa82d52df492277a90b30c19dbe5ea54b47d80..fee540a43bf37d2422a1f38f8a35541fcdd0a29e 100644
--- a/Modules/Filtering/Projection/test/otbGenericRSTransformFromImage.cxx
+++ b/Modules/Filtering/Projection/test/otbGenericRSTransformFromImage.cxx
@@ -56,7 +56,7 @@ int otbGenericRSTransformFromImage(int itkNotUsed(argc), char* argv[])
   // Build wgs ref
   OGRSpatialReference oSRS;
   oSRS.SetWellKnownGeogCS("WGS84");
-  char * wgsRef = NULL;
+  char * wgsRef = ITK_NULLPTR;
   oSRS.exportToWkt(&wgsRef);
 
   // Instanciate WGS->Image transform
@@ -106,7 +106,7 @@ int otbGenericRSTransformImageAndMNTToWGS84ConversionChecking(int itkNotUsed(arg
   // Build wgs ref
   OGRSpatialReference oSRS;
   oSRS.SetWellKnownGeogCS("WGS84");
-  char * wgsRef = NULL;
+  char * wgsRef = ITK_NULLPTR;
   oSRS.exportToWkt(&wgsRef);
 
   DistanceType::Pointer distance = DistanceType::New();
diff --git a/Modules/Filtering/Projection/test/otbOrthoRectificationFilter.cxx b/Modules/Filtering/Projection/test/otbOrthoRectificationFilter.cxx
index 4312136b7ff553f72670afe44a5dbb0428fed80b..24b31d14e02e122b2635f4d1413df5498ef3eb05 100644
--- a/Modules/Filtering/Projection/test/otbOrthoRectificationFilter.cxx
+++ b/Modules/Filtering/Projection/test/otbOrthoRectificationFilter.cxx
@@ -82,8 +82,8 @@ int otbOrthoRectificationFilter(int argc, char* argv[])
   orthoRectifFilter->SetOutputSpacing(spacing);
 
   VectorImageType::PointType origin;
-  origin[0] = strtod(argv[3], NULL);         //Origin easting
-  origin[1] = strtod(argv[4], NULL);         //Origin northing
+  origin[0] = strtod(argv[3], ITK_NULLPTR);         //Origin easting
+  origin[1] = strtod(argv[4], ITK_NULLPTR);         //Origin northing
   orthoRectifFilter->SetOutputOrigin(origin);
 
   utmMapProjection->SetZone(atoi(argv[9]));
diff --git a/Modules/Filtering/Projection/test/otbSensorModel.cxx b/Modules/Filtering/Projection/test/otbSensorModel.cxx
index 30e5456c9ca1265f0a33784a2b924b1b63062cf2..5c2e116d169dcf26a70a65ca78139791956e8dd2 100644
--- a/Modules/Filtering/Projection/test/otbSensorModel.cxx
+++ b/Modules/Filtering/Projection/test/otbSensorModel.cxx
@@ -65,11 +65,11 @@ int produceGCP(char * outputgcpfilename, const otb::ImageKeywordlist& kwlist, bo
   kwlist.convertToOSSIMKeywordlist(ossimKwlist);
   
   ossimProjection* ossimSensorModel = ossimSensorModelFactory::instance()->createProjection(ossimKwlist);
-  if (ossimSensorModel == NULL)
+  if (ossimSensorModel == ITK_NULLPTR)
   {
       ossimSensorModel = ossimplugins::ossimPluginProjectionFactory::instance()->createProjection(ossimKwlist);
   }
-  if (ossimSensorModel == NULL) // Model validity
+  if (ossimSensorModel == ITK_NULLPTR) // Model validity
   {
 	std::cerr << "Invalid sensor model (ossimSensorModel is NULL)" << std::endl;
     return EXIT_FAILURE;
@@ -216,7 +216,7 @@ int otbSensorModel(int argc, char* argv[])
   // Build wgs ref
   OGRSpatialReference oSRS;
   oSRS.SetWellKnownGeogCS("WGS84");
-  char * wgsRef = NULL;
+  char * wgsRef = ITK_NULLPTR;
   oSRS.exportToWkt(&wgsRef);
 
   typedef otb::GenericRSTransform<>       GRSTransformType;
@@ -251,11 +251,11 @@ int otbSensorModel(int argc, char* argv[])
   kwlist.convertToOSSIMKeywordlist(ossimKwlist);
   
   ossimProjection* ossimSensorModel = ossimSensorModelFactory::instance()->createProjection(ossimKwlist);
-  if (ossimSensorModel == NULL)
+  if (ossimSensorModel == ITK_NULLPTR)
   {
       ossimSensorModel = ossimplugins::ossimPluginProjectionFactory::instance()->createProjection(ossimKwlist);
   }
-  if (ossimSensorModel == NULL) // Model validity
+  if (ossimSensorModel == ITK_NULLPTR) // Model validity
   {
 	std::cerr << "Invalid sensor model (ossimSensorModel is NULL)" << std::endl;
     return EXIT_FAILURE;
diff --git a/Modules/Filtering/Statistics/include/otbListSampleGenerator.txx b/Modules/Filtering/Statistics/include/otbListSampleGenerator.txx
index 8b21b56eaeffcc071c95164aac1841400bedf644..8945cda273f15bcfa2c85305865776a9141396d5 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleGenerator.txx
+++ b/Modules/Filtering/Statistics/include/otbListSampleGenerator.txx
@@ -97,7 +97,7 @@ ListSampleGenerator<TImage, TVectorData>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const ImageType *>(this->ProcessObject::GetInput(0));
@@ -121,7 +121,7 @@ ListSampleGenerator<TImage, TVectorData>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const VectorDataType *>(this->ProcessObject::GetInput(1));
diff --git a/Modules/Filtering/Statistics/include/otbListSampleToBalancedListSampleFilter.txx b/Modules/Filtering/Statistics/include/otbListSampleToBalancedListSampleFilter.txx
index 6a98e8deecafe531af8f7be5685c220775dd60b7..3c411abe62443f1210b0abcff34dec296f47fda5 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleToBalancedListSampleFilter.txx
+++ b/Modules/Filtering/Statistics/include/otbListSampleToBalancedListSampleFilter.txx
@@ -86,7 +86,7 @@ ListSampleToBalancedListSampleFilter<TInputSampleList, TLabelSampleList, TOutput
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const  LabelSampleListType* >
diff --git a/Modules/Filtering/Statistics/include/otbListSampleToHistogramListGenerator.txx b/Modules/Filtering/Statistics/include/otbListSampleToHistogramListGenerator.txx
index ad4370cb19f9851d5c249ee3ac915f077aa06373..f5e8324b49ec68d23afaf6280ac0de1ead0c27cd 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleToHistogramListGenerator.txx
+++ b/Modules/Filtering/Statistics/include/otbListSampleToHistogramListGenerator.txx
@@ -69,7 +69,7 @@ ListSampleToHistogramListGenerator<TListSample,THistogramMeasurement, TFrequency
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const ListSampleType* >
     (this->itk::ProcessObject::GetInput(0) );
diff --git a/Modules/Filtering/Statistics/include/otbListSampleToListSampleFilter.txx b/Modules/Filtering/Statistics/include/otbListSampleToListSampleFilter.txx
index 3d7ef2ac1c72c5cfe20a72e30a6974f5c99c4f8e..80ed0d7146af735a4e1baeea575fbfdfe34d1c9a 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleToListSampleFilter.txx
+++ b/Modules/Filtering/Statistics/include/otbListSampleToListSampleFilter.txx
@@ -49,7 +49,7 @@ ListSampleToListSampleFilter<TInputSampleList, TOutputSampleList>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const InputSampleListType * >
diff --git a/Modules/Filtering/Statistics/include/otbListSampleToVariableDimensionHistogramGenerator.txx b/Modules/Filtering/Statistics/include/otbListSampleToVariableDimensionHistogramGenerator.txx
index dd1123c660a7589472db8e21b4af30891786471b..b2c66e5cc461787ce48c240491f8bff672be9229 100644
--- a/Modules/Filtering/Statistics/include/otbListSampleToVariableDimensionHistogramGenerator.txx
+++ b/Modules/Filtering/Statistics/include/otbListSampleToVariableDimensionHistogramGenerator.txx
@@ -64,7 +64,7 @@ ListSampleToVariableDimensionHistogramGenerator<TListSample, THistogramMeasureme
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const ListSampleType* >
     (this->itk::ProcessObject::GetInput(0) );
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbConcatenateVectorDataFilter.txx b/Modules/Filtering/VectorDataManipulation/include/otbConcatenateVectorDataFilter.txx
index ddc3fd4f4e8b0228f2183855b62e74569339568c..7c41c0f2a0066ec1676ded69305f22fdbd347922 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbConcatenateVectorDataFilter.txx
+++ b/Modules/Filtering/VectorDataManipulation/include/otbConcatenateVectorDataFilter.txx
@@ -71,7 +71,7 @@ ConcatenateVectorDataFilter<TVectorData>
 {
   if (this->GetNumberOfInputs() < idx)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const VectorDataType *>(this->Superclass::GetInput(idx));
 }
@@ -123,7 +123,7 @@ void
 ConcatenateVectorDataFilter<TVectorData>
 ::ProcessNode(TreeNodeType * source, DataNodeType * outputDocument)
 {
-  if (source == 0)
+  if (source == ITK_NULLPTR)
     return;
 
 
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToSpecificDescriptionFilterBase.txx b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToSpecificDescriptionFilterBase.txx
index 1806d0733323f1d8052adf5d18607bf461685c10..24e40c819575ee57ec210cfce376befaa132397e 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToSpecificDescriptionFilterBase.txx
+++ b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToSpecificDescriptionFilterBase.txx
@@ -51,7 +51,7 @@ VectorDataToSpecificDescriptionFilterBase<TVectorData>
 {
   if (this->GetNumberOfInputs() < idx+2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const DataObject *>
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToVectorDataFilter.txx b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToVectorDataFilter.txx
index 6ff5429638615569bc1d4d66532a6a7a6c04ac64..4524933da9ed3a6680c032b39ddf000a0d8ef582 100644
--- a/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToVectorDataFilter.txx
+++ b/Modules/Filtering/VectorDataManipulation/include/otbVectorDataToVectorDataFilter.txx
@@ -53,7 +53,7 @@ VectorDataToVectorDataFilter<TInputVectorData, TOutputVectorData>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TInputVectorData *>
diff --git a/Modules/Fusion/Fuzzy/src/otbFuzzyDescriptorsModelManager.cxx b/Modules/Fusion/Fuzzy/src/otbFuzzyDescriptorsModelManager.cxx
index fd28876504fb7a2a5e05c810067c09bebfbaa29e..692e3b1495ccf08e9380809f6d009b44c368a5f1 100644
--- a/Modules/Fusion/Fuzzy/src/otbFuzzyDescriptorsModelManager.cxx
+++ b/Modules/Fusion/Fuzzy/src/otbFuzzyDescriptorsModelManager.cxx
@@ -120,7 +120,7 @@ FuzzyDescriptorsModelManager
 
   // Iterate through the tree to get all the stats
   for( TiXmlElement* currentStat = root.FirstChildElement().ToElement();
-       currentStat != NULL;
+       currentStat != ITK_NULLPTR;
        currentStat = currentStat->NextSiblingElement() )
     {
       PairType currentDescriptor;
@@ -133,7 +133,7 @@ FuzzyDescriptorsModelManager
       ParameterType param;
 
       for( TiXmlElement* sample = currentStat->FirstChildElement("Parameter");
-           sample != NULL;
+           sample != ITK_NULLPTR;
            sample = sample->NextSiblingElement() )
         {
           // Get the current value of the descriptor
diff --git a/Modules/Fusion/PanSharpening/include/otbFusionImageBase.h b/Modules/Fusion/PanSharpening/include/otbFusionImageBase.h
index aef6003fa65fa6e91b8cb95d118213c2edceb0bc..8cc7c49b87f3592b023b5d1abd31ec49ee6a99bf 100644
--- a/Modules/Fusion/PanSharpening/include/otbFusionImageBase.h
+++ b/Modules/Fusion/PanSharpening/include/otbFusionImageBase.h
@@ -98,7 +98,7 @@ public:
   {
     if (this->GetNumberOfInputs() < 1)
       {
-      return 0;
+      return ITK_NULLPTR;
       }
     else return (static_cast<const InputMultiSpectralImageType *>(this->itk::ProcessObject::GetInput(0)));
   }
@@ -107,7 +107,7 @@ public:
   {
     if (this->GetNumberOfInputs() < 2)
       {
-      return 0;
+      return ITK_NULLPTR;
       }
     else return (static_cast<const InputMultiSpectralInterpImageType *>(this->itk::ProcessObject::GetInput(1)));
   }
@@ -116,7 +116,7 @@ public:
   {
     if (this->GetNumberOfInputs() < 3)
       {
-      return 0;
+      return ITK_NULLPTR;
       }
     else return (static_cast<const InputPanchroImageType *>(this->itk::ProcessObject::GetInput(2)));
   }
diff --git a/Modules/Fusion/PanSharpening/include/otbLmvmPanSharpeningFusionImageFilter.txx b/Modules/Fusion/PanSharpening/include/otbLmvmPanSharpeningFusionImageFilter.txx
index 2dee5c593fdae3473b931e7bbd7865f962006528..5c6acc98f5df56cfd29df214f35bb87e3362a0c7 100644
--- a/Modules/Fusion/PanSharpening/include/otbLmvmPanSharpeningFusionImageFilter.txx
+++ b/Modules/Fusion/PanSharpening/include/otbLmvmPanSharpeningFusionImageFilter.txx
@@ -86,7 +86,7 @@ LmvmPanSharpeningFusionImageFilter
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TPanImageType *>
@@ -115,7 +115,7 @@ LmvmPanSharpeningFusionImageFilter
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TXsImageType *>
diff --git a/Modules/Fusion/PanSharpening/include/otbSimpleRcsPanSharpeningFusionImageFilter.txx b/Modules/Fusion/PanSharpening/include/otbSimpleRcsPanSharpeningFusionImageFilter.txx
index be4602186361074f17ea7f3bb57b2bcc9e44b7d3..4ddbe4831764bef8a4b72abe65c251009b9f6670 100644
--- a/Modules/Fusion/PanSharpening/include/otbSimpleRcsPanSharpeningFusionImageFilter.txx
+++ b/Modules/Fusion/PanSharpening/include/otbSimpleRcsPanSharpeningFusionImageFilter.txx
@@ -75,7 +75,7 @@ SimpleRcsPanSharpeningFusionImageFilter
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TPanImageType *>
@@ -104,7 +104,7 @@ SimpleRcsPanSharpeningFusionImageFilter
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TXsImageType *>
diff --git a/Modules/Hyperspectral/Unmixing/include/otbSparseUnmixingImageFilter.txx b/Modules/Hyperspectral/Unmixing/include/otbSparseUnmixingImageFilter.txx
index 830cd37e31f7fcbecf1f21513e8b8eff9a16a3b5..8b84cb874fc8287a8177aa7661074ef11b1a42d0 100644
--- a/Modules/Hyperspectral/Unmixing/include/otbSparseUnmixingImageFilter.txx
+++ b/Modules/Hyperspectral/Unmixing/include/otbSparseUnmixingImageFilter.txx
@@ -75,7 +75,7 @@ SparseUnmixingImageFilter< TInputImage, TOutputImage, VNbInputImage, TPrecision,
 {
   if ( i >= this->GetNumberOfInputs() )
   {
-    return 0;
+    return ITK_NULLPTR;
   }
 
   return static_cast<const InputImageType * >
diff --git a/Modules/IO/Carto/include/otbImageToOSMVectorDataGenerator.txx b/Modules/IO/Carto/include/otbImageToOSMVectorDataGenerator.txx
index e8da8dedefed517200c0c571cb8b0d0f5d30b668..b7cbbe177c066ef6d1312bce5dd15de932fa0119 100644
--- a/Modules/IO/Carto/include/otbImageToOSMVectorDataGenerator.txx
+++ b/Modules/IO/Carto/include/otbImageToOSMVectorDataGenerator.txx
@@ -57,7 +57,7 @@ ImageToOSMVectorDataGenerator<TImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const  ImageType* >
diff --git a/Modules/IO/Carto/include/otbMapFileProductWriter.txx b/Modules/IO/Carto/include/otbMapFileProductWriter.txx
index da8f09e84776bbf49b34f7fcc1d3e677f0212261..f960e0b2f2ca79bac9f974884e011681de441553 100644
--- a/Modules/IO/Carto/include/otbMapFileProductWriter.txx
+++ b/Modules/IO/Carto/include/otbMapFileProductWriter.txx
@@ -84,7 +84,7 @@ MapFileProductWriter<TInputImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TInputImage * >
diff --git a/Modules/IO/Carto/src/otbOSMDataToVectorDataGenerator.cxx b/Modules/IO/Carto/src/otbOSMDataToVectorDataGenerator.cxx
index 6d16f6ed7ddf9055f0875d0fa5a8a69a36c9f28c..3aa7df3e2bba20543081295b309ca05d99ac0a81 100644
--- a/Modules/IO/Carto/src/otbOSMDataToVectorDataGenerator.cxx
+++ b/Modules/IO/Carto/src/otbOSMDataToVectorDataGenerator.cxx
@@ -139,7 +139,7 @@ void OSMDataToVectorDataGenerator::ParseXmlFile()
   // Iterate through the tree to get all the nodes and store them in
   // a std::map
   for( TiXmlElement* node = root.FirstChild("node").ToElement();
-       node != NULL  && strcmp(node->Value(),"node")==0;
+       node != ITK_NULLPTR  && strcmp(node->Value(),"node")==0;
        node = node->NextSiblingElement() )
     {
     int id = 0;
@@ -168,7 +168,7 @@ void OSMDataToVectorDataGenerator::ParseXmlFile()
 
   // Iterate through the tree to get all the fields ways with tag k=key
   for( TiXmlElement* currentLayer = root.FirstChildElement("way").ToElement();
-       currentLayer != NULL && strcmp(currentLayer->Value(),"way") ==0;
+       currentLayer != ITK_NULLPTR && strcmp(currentLayer->Value(),"way") ==0;
        currentLayer = currentLayer->NextSiblingElement() )
     {
     bool foundKey = false;
@@ -180,7 +180,7 @@ void OSMDataToVectorDataGenerator::ParseXmlFile()
 
       // Iterate through the node tag to find the "key"
       for( TiXmlElement* currentTag = currentLayer->FirstChild("tag")->ToElement();
-           currentTag != NULL;
+           currentTag != ITK_NULLPTR;
            currentTag = currentTag->NextSiblingElement() )
         {
         std::string result = currentTag->Attribute("k");
@@ -211,7 +211,7 @@ void OSMDataToVectorDataGenerator::ParseXmlFile()
 
         // put the current layer pointer to the begining
         for( TiXmlElement* currentNode = currentLayer->FirstChildElement("nd");
-             currentNode != NULL;
+             currentNode != ITK_NULLPTR;
              currentNode = currentNode->NextSiblingElement() )
           {
           int value=0;
diff --git a/Modules/IO/ExtendedFilename/src/otbExtendedFilenameHelper.cxx b/Modules/IO/ExtendedFilename/src/otbExtendedFilenameHelper.cxx
index 49cd5f44c10304c6f4b0e254b88cc185dadbdd02..c89b2cb7b2915015e0647807644a12dd49613229 100644
--- a/Modules/IO/ExtendedFilename/src/otbExtendedFilenameHelper.cxx
+++ b/Modules/IO/ExtendedFilename/src/otbExtendedFilenameHelper.cxx
@@ -24,7 +24,7 @@ void
 ExtendedFilenameHelper
 ::SetExtendedFileName(const char *extFname)
 {
-  if (extFname == NULL)
+  if (extFname == ITK_NULLPTR)
   {
     itkGenericExceptionMacro( << "Filename is NULL" );
   }
diff --git a/Modules/IO/IOBSQ/src/otbBSQImageIO.cxx b/Modules/IO/IOBSQ/src/otbBSQImageIO.cxx
index 9d1fa0e37b6f8f7f27f2e667903629cfad4db352..fd7039484e722837700d11c9b05a19735a1d0c1a 100644
--- a/Modules/IO/IOBSQ/src/otbBSQImageIO.cxx
+++ b/Modules/IO/IOBSQ/src/otbBSQImageIO.cxx
@@ -54,7 +54,7 @@ BSQImageIO::BSQImageIO()
   // (consistency between ImageIO, see Mantis #942)
   m_Origin[0] = 0.5;
   m_Origin[1] = 0.5;
-  m_ChannelsFile = NULL;
+  m_ChannelsFile = ITK_NULLPTR;
   m_FlagWriteImageInformation = true;
 
   this->AddSupportedWriteExtension(".hd");
@@ -71,7 +71,7 @@ BSQImageIO::~BSQImageIO()
     {
     m_HeaderFile.close();
     }
-  if (m_ChannelsFile !=  NULL)
+  if (m_ChannelsFile !=  ITK_NULLPTR)
     {
     for (unsigned int numComponent = 0; numComponent < this->GetNumberOfComponents(); numComponent++)
       {
@@ -152,7 +152,7 @@ void BSQImageIO::Read(void* buffer)
   step = step * (unsigned long) (this->GetComponentSize());
 
   char * value = new char[numberOfBytesToBeRead];
-  if (value == NULL)
+  if (value == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "BSQImageIO::Read(): Bad alloc");
     return;
@@ -528,7 +528,7 @@ void BSQImageIO::Write(const void* buffer)
   const char * p = static_cast<const char *>(buffer);
 
   char* value = new char[numberOfBytesToBeWrite];
-  if (value == NULL)
+  if (value == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "Memory allocation error");
     return;
diff --git a/Modules/IO/IOGDAL/include/otbOGRVectorDataIO.h b/Modules/IO/IOGDAL/include/otbOGRVectorDataIO.h
index 39067cf0822c9ee1262abe8a8b590f3330d39ba0..d912fc3153017bdd507218bdedba334832d9d483 100644
--- a/Modules/IO/IOGDAL/include/otbOGRVectorDataIO.h
+++ b/Modules/IO/IOGDAL/include/otbOGRVectorDataIO.h
@@ -98,7 +98,7 @@ public:
   bool CanWriteFile(const char*) const ITK_OVERRIDE;
 
   /** Writes the data to disk from the memory buffer provided */
-  void Write(const itk::DataObject* data,  char ** papszOptions = NULL) ITK_OVERRIDE;
+  void Write(const itk::DataObject* data,  char ** papszOptions = ITK_NULLPTR) ITK_OVERRIDE;
 
 protected:
   /** Constructor.*/
diff --git a/Modules/IO/IOGDAL/src/otbGDALDatasetWrapper.cxx b/Modules/IO/IOGDAL/src/otbGDALDatasetWrapper.cxx
index c1d23d23a190c7037ccfadc494b5c722f0b66f3c..8842ef89e349972de700894b958bd83340e90a05 100644
--- a/Modules/IO/IOGDAL/src/otbGDALDatasetWrapper.cxx
+++ b/Modules/IO/IOGDAL/src/otbGDALDatasetWrapper.cxx
@@ -26,7 +26,7 @@ namespace otb
 {
 
 GDALDatasetWrapper
-::GDALDatasetWrapper(): m_Dataset(NULL)
+::GDALDatasetWrapper(): m_Dataset(ITK_NULLPTR)
 {
 }
 
@@ -41,7 +41,7 @@ GDALDatasetWrapper
     // GDALDriverManagerWrapper::Open(). So, it should be destroyed by
     // GDALClose() (see
     // http://gdal.org/classGDALDataset.html#a4d110533d799bac7dcfad3c41d30c0e7).
-    m_Dataset = NULL;
+    m_Dataset = ITK_NULLPTR;
     }
 }
 
@@ -66,7 +66,7 @@ GDALDatasetWrapper
 bool
 GDALDatasetWrapper::IsJPEG2000() const
 {
-  if (m_Dataset == NULL)
+  if (m_Dataset == ITK_NULLPTR)
     {
     return false;
     }
diff --git a/Modules/IO/IOGDAL/src/otbGDALDriverManagerWrapper.cxx b/Modules/IO/IOGDAL/src/otbGDALDriverManagerWrapper.cxx
index 747d851f3a4b7d60c0e4936af49b69a76460ac1e..6eb7a346fda5c32d6b19ca3f0f1c63800a113ec0 100644
--- a/Modules/IO/IOGDAL/src/otbGDALDriverManagerWrapper.cxx
+++ b/Modules/IO/IOGDAL/src/otbGDALDriverManagerWrapper.cxx
@@ -29,7 +29,7 @@ GDALDriverManagerWrapper::GDALDriverManagerWrapper()
 {
     GDALAllRegister();
 
-    GDALDriver* driver = 0;
+    GDALDriver* driver = ITK_NULLPTR;
 
     // Ignore incompatible Jpeg2000 drivers (Jasper)
     driver = GetGDALDriverManager()->GetDriverByName( "JPEG2000" );
@@ -63,8 +63,8 @@ GDALDriverManagerWrapper::Open( std::string filename ) const
     }
 
   // test if a driver can identify the dataset
-  GDALDriverH identifyDriverH = GDALIdentifyDriver(filename.c_str(), NULL);
-  if(identifyDriverH == NULL)
+  GDALDriverH identifyDriverH = GDALIdentifyDriver(filename.c_str(), ITK_NULLPTR);
+  if(identifyDriverH == ITK_NULLPTR)
     {
     // don't try to open it and exit
     return datasetWrapper;
@@ -83,7 +83,7 @@ GDALDriverManagerWrapper::Open( std::string filename ) const
 
   GDALDatasetH dataset = GDALOpen(filename.c_str(), GA_ReadOnly);
 
-  if (dataset != NULL)
+  if (dataset != ITK_NULLPTR)
     {
     datasetWrapper = GDALDatasetWrapper::New();
     datasetWrapper->m_Dataset = static_cast<GDALDataset*>(dataset);
@@ -100,14 +100,14 @@ GDALDriverManagerWrapper::Create( std::string driverShortName, std::string filen
   GDALDatasetWrapper::Pointer datasetWrapper;
 
   GDALDriver*  driver = GetDriverByName( driverShortName );
-  if(driver != NULL)
+  if(driver != ITK_NULLPTR)
     {
     GDALDataset* dataset = driver->Create(filename.c_str(),
                                           nXSize, nYSize,
                                           nBands, eType,
                                           papszOptions );
 
-    if (dataset != NULL)
+    if (dataset != ITK_NULLPTR)
       {
       datasetWrapper = GDALDatasetWrapper::New();
       datasetWrapper->m_Dataset = dataset;
diff --git a/Modules/IO/IOGDAL/src/otbGDALImageIO.cxx b/Modules/IO/IOGDAL/src/otbGDALImageIO.cxx
index 41b09e667343af6e94f625334fa65e94ff9128c0..796458b295a3b58c736200105e336c1fe8608407 100644
--- a/Modules/IO/IOGDAL/src/otbGDALImageIO.cxx
+++ b/Modules/IO/IOGDAL/src/otbGDALImageIO.cxx
@@ -172,7 +172,7 @@ GDALImageIO::~GDALImageIO()
 bool GDALImageIO::CanReadFile(const char* file)
 {
   // First check the extension
-  if (file == NULL)
+  if (file == ITK_NULLPTR)
     {
     itkDebugMacro(<< "No filename specified.");
     return false;
@@ -202,7 +202,7 @@ void GDALImageIO::Read(void* buffer)
   unsigned char *p = static_cast<unsigned char *>(buffer);
 
   // Check if conversion succeed
-  if (p == NULL)
+  if (p == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "GDAL : Bad alloc");
     return;
@@ -418,7 +418,7 @@ void GDALImageIO::Read(void* buffer)
                                                        m_PxType->pixType,
                                                        nbBands,
                                                        // We want to read all bands
-                                                       NULL,
+                                                       ITK_NULLPTR,
                                                        pixelOffset,
                                                        lineOffset,
                                                        bandOffset);
@@ -449,7 +449,7 @@ bool GDALImageIO::GetSubDatasetInfo(std::vector<std::string> &names, std::vector
          (strcmp(m_Dataset->GetDataSet()->GetDriver()->GetDescription(),"HDF5") == 0) ||
 	 (strcmp(m_Dataset->GetDataSet()->GetDriver()->GetDescription(),"SENTINEL2") == 0) ) )
     {
-    for (int cpt = 0; papszMetadata[cpt] != NULL; ++cpt)
+    for (int cpt = 0; papszMetadata[cpt] != ITK_NULLPTR; ++cpt)
       {
       std::string key, name;
       if (System::ParseHdfSubsetName(papszMetadata[cpt], key, name))
@@ -602,7 +602,7 @@ void GDALImageIO::InternalReadImageInformation()
     std::vector<std::string> names;
     if( CSLCount(papszMetadata) > 0 )
       {
-      for( int cpt = 0; papszMetadata[cpt] != NULL; ++cpt )
+      for( int cpt = 0; papszMetadata[cpt] != ITK_NULLPTR; ++cpt )
         {
         std::string key, name;
         if (System::ParseHdfSubsetName(papszMetadata[cpt], key, name))
@@ -891,7 +891,7 @@ void GDALImageIO::InternalReadImageInformation()
 
   if (m_NumberOfDimensions == 3) m_Spacing[2] = 1;
 
-  char** papszMetadata = dataset->GetMetadata(NULL);
+  char** papszMetadata = dataset->GetMetadata(ITK_NULLPTR);
 
   /* -------------------------------------------------------------------- */
   /*      Report general info.                                            */
@@ -915,16 +915,16 @@ void GDALImageIO::InternalReadImageInformation()
   /* -------------------------------------------------------------------- */
   /* Get the projection coordinate system of the image : ProjectionRef  */
   /* -------------------------------------------------------------------- */
-  if (dataset->GetProjectionRef() != NULL && !std::string(dataset->GetProjectionRef()).empty())
+  if (dataset->GetProjectionRef() != ITK_NULLPTR && !std::string(dataset->GetProjectionRef()).empty())
     {
-    OGRSpatialReferenceH pSR = OSRNewSpatialReference(NULL);
+    OGRSpatialReferenceH pSR = OSRNewSpatialReference(ITK_NULLPTR);
 
-    const char *         pszProjection = NULL;
+    const char *         pszProjection = ITK_NULLPTR;
     pszProjection =  dataset->GetProjectionRef();
 
     if (OSRImportFromWkt(pSR, (char **) (&pszProjection)) == OGRERR_NONE)
       {
-      char * pszPrettyWkt = NULL;
+      char * pszPrettyWkt = ITK_NULLPTR;
       OSRExportToPrettyWkt(pSR, &pszPrettyWkt, FALSE);
 
       itk::EncapsulateMetaData<std::string> (dict, MetaDataKey::ProjectionRefKey,
@@ -938,10 +938,10 @@ void GDALImageIO::InternalReadImageInformation()
                                             static_cast<std::string>(dataset->GetProjectionRef()));
       }
 
-    if (pSR != NULL)
+    if (pSR != ITK_NULLPTR)
       {
       OSRRelease(pSR);
-      pSR = NULL;
+      pSR = ITK_NULLPTR;
       }
     }
   else
@@ -970,7 +970,7 @@ void GDALImageIO::InternalReadImageInformation()
 
     // assert( gcpProj!=NULL );
 
-    if( gcpProj!=NULL )
+    if( gcpProj!=ITK_NULLPTR )
       gcpProjectionKey = gcpProj;
     }
 
@@ -1084,12 +1084,12 @@ void GDALImageIO::InternalReadImageInformation()
   /*      Report metadata.                                                */
   /* -------------------------------------------------------------------- */
 
-  papszMetadata = dataset->GetMetadata(NULL);
+  papszMetadata = dataset->GetMetadata(ITK_NULLPTR);
   if (CSLCount(papszMetadata) > 0)
     {
     std::string key;
 
-    for (int cpt = 0; papszMetadata[cpt] != NULL; ++cpt)
+    for (int cpt = 0; papszMetadata[cpt] != ITK_NULLPTR; ++cpt)
       {
       std::ostringstream lStream;
       lStream << MetaDataKey::MetadataKey << cpt;
@@ -1103,7 +1103,7 @@ void GDALImageIO::InternalReadImageInformation()
   /* Special case for JPEG2000, also look in the GML boxes */
   if (m_Dataset->IsJPEG2000())
     {
-    char **gmlMetadata = NULL;
+    char **gmlMetadata = ITK_NULLPTR;
     GDALJP2Metadata jp2Metadata;
     if (jp2Metadata.ReadAndParse(m_FileName.c_str()))
       {
@@ -1117,7 +1117,7 @@ void GDALImageIO::InternalReadImageInformation()
         std::string key;
         int cptOffset = CSLCount(papszMetadata);
 
-        for (int cpt = 0; gmlMetadata[cpt] != NULL; ++cpt)
+        for (int cpt = 0; gmlMetadata[cpt] != ITK_NULLPTR; ++cpt)
           {
           std::ostringstream lStream;
           lStream << MetaDataKey::MetadataKey << (cpt+cptOffset);
@@ -1140,7 +1140,7 @@ void GDALImageIO::InternalReadImageInformation()
     {
     std::string key;
 
-    for (int cpt = 0; papszMetadata[cpt] != NULL; ++cpt)
+    for (int cpt = 0; papszMetadata[cpt] != ITK_NULLPTR; ++cpt)
       {
       std::ostringstream lStream;
       lStream << MetaDataKey::SubMetadataKey << cpt;
@@ -1200,7 +1200,7 @@ void GDALImageIO::InternalReadImageInformation()
     GDALRasterBandH hBand;
     hBand = GDALGetRasterBand(dataset, iBand + 1);
     if ((GDALGetRasterColorInterpretation(hBand) == GCI_PaletteIndex)
-        && (hTable = GDALGetRasterColorTable(hBand)) != NULL)
+        && (hTable = GDALGetRasterColorTable(hBand)) != ITK_NULLPTR)
       {
       m_IsIndexed = true;
 
@@ -1269,7 +1269,7 @@ void GDALImageIO::InternalReadImageInformation()
 bool GDALImageIO::CanWriteFile(const char* name)
 {
   // First check the filename
-  if (name == NULL)
+  if (name == ITK_NULLPTR)
     {
     itkDebugMacro(<< "No filename specified.");
     return false;
@@ -1286,8 +1286,8 @@ bool GDALImageIO::CanWriteFile(const char* name)
 
   // Check the driver for support of Create or at least CreateCopy
   GDALDriver* driver = GDALDriverManagerWrapper::GetInstance().GetDriverByName(gdalDriverShortName);
-  if ( GDALGetMetadataItem( driver, GDAL_DCAP_CREATE, NULL ) == NULL
-       && GDALGetMetadataItem( driver, GDAL_DCAP_CREATECOPY, NULL ) == NULL )
+  if ( GDALGetMetadataItem( driver, GDAL_DCAP_CREATE, ITK_NULLPTR ) == ITK_NULLPTR
+       && GDALGetMetadataItem( driver, GDAL_DCAP_CREATECOPY, ITK_NULLPTR ) == ITK_NULLPTR )
     {
     itkDebugMacro(<< "The driver " << GDALGetDriverShortName(driver) << " does not support writing");
     return false;
@@ -1301,12 +1301,12 @@ bool GDALImageIO::CanStreamWrite()
   std::string gdalDriverShortName = FilenameToGdalDriverShortName(m_FileName);
   GDALDriver* driver = GDALDriverManagerWrapper::GetInstance().GetDriverByName(gdalDriverShortName);
 
-  if (driver == NULL)
+  if (driver == ITK_NULLPTR)
     {
     itkDebugMacro(<< "Unable to instantiate driver " << gdalDriverShortName);
     m_CanStreamWrite = false;
     }
-  if ( GDALGetMetadataItem( driver, GDAL_DCAP_CREATE, NULL ) != NULL )
+  if ( GDALGetMetadataItem( driver, GDAL_DCAP_CREATE, ITK_NULLPTR ) != ITK_NULLPTR )
     {
     m_CanStreamWrite = true;
     }
@@ -1327,7 +1327,7 @@ void GDALImageIO::Write(const void* buffer)
     }
 
   // Check if conversion succeed
-  if (buffer == NULL)
+  if (buffer == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "GDAL : Bad alloc");
     return;
@@ -1381,7 +1381,7 @@ void GDALImageIO::Write(const void* buffer)
                                                        m_PxType->pixType,
                                                        m_NbBands,
                                                        // We want to write all bands
-                                                       NULL,
+                                                       ITK_NULLPTR,
                                                        // Pixel offset
                                                        // is nbComp * BytePerPixel
                                                        m_BytePerPixel * m_NbBands,
@@ -1410,7 +1410,7 @@ void GDALImageIO::Write(const void* buffer)
     std::string realFileName = GetGdalWriteImageFileName(gdalDriverShortName, m_FileName);
 
     GDALDriver* driver = GDALDriverManagerWrapper::GetInstance().GetDriverByName(gdalDriverShortName);
-    if (driver == NULL)
+    if (driver == ITK_NULLPTR)
       {
       itkExceptionMacro(<< "Unable to instantiate driver " << gdalDriverShortName << " to write " << m_FileName);
       }
@@ -1418,7 +1418,7 @@ void GDALImageIO::Write(const void* buffer)
     GDALCreationOptionsType creationOptions = m_CreationOptions;
     GDALDataset* hOutputDS = driver->CreateCopy( realFileName.c_str(), m_Dataset->GetDataSet(), FALSE,
                                                  otb::ogr::StringListConverter(creationOptions).to_ogr(),
-                                                 NULL, NULL );
+                                                 ITK_NULLPTR, ITK_NULLPTR );
     if(!hOutputDS)
     {
       itkExceptionMacro(<< "Error while writing image (GDAL format) '"
@@ -1781,7 +1781,7 @@ void GDALImageIO::InternalWriteImageInformation(const void* buffer)
       std::string  tag = svalue.substr(0, equalityPos);
       std::string  value = svalue.substr(equalityPos + 1);
       otbMsgDevMacro(<< "Metadata: " << tag << "=" << value);
-      dataset->SetMetadataItem(tag.c_str(), value.c_str(), NULL);
+      dataset->SetMetadataItem(tag.c_str(), value.c_str(), ITK_NULLPTR);
       }
     }
 
@@ -1852,7 +1852,7 @@ std::string GDALImageIO::FilenameToGdalDriverShortName(const std::string& name)
   else if ( extension == ".j2k" || extension == ".jp2" || extension == ".jpx")
   {
     // Try different JPEG2000 drivers
-    GDALDriver *driver = NULL;
+    GDALDriver *driver = ITK_NULLPTR;
     driver = GDALDriverManagerWrapper::GetInstance().GetDriverByName("JP2OpenJPEG");
     if (driver)
       {
diff --git a/Modules/IO/IOGDAL/src/otbGDALOverviewsBuilder.cxx b/Modules/IO/IOGDAL/src/otbGDALOverviewsBuilder.cxx
index c61bb67a4b623ebe00e9f970b2d0a0b1356172fd..40393537b984fa30665b237d5925ec44c94947cc 100644
--- a/Modules/IO/IOGDAL/src/otbGDALOverviewsBuilder.cxx
+++ b/Modules/IO/IOGDAL/src/otbGDALOverviewsBuilder.cxx
@@ -72,10 +72,10 @@ GDAL_COMPRESSION_NAMES[ GDAL_COMPRESSION_COUNT ] =
 std::string
 GetConfigOption( const char * key )
 {
-  const char * value = CPLGetConfigOption( key, NULL );
+  const char * value = CPLGetConfigOption( key, ITK_NULLPTR );
   
   return
-    value==NULL
+    value==ITK_NULLPTR
     ? std::string()
     : std::string( value );
 }
@@ -516,7 +516,7 @@ GDALOverviewsBuilder
       static_cast< int >( m_NbResolutions - 1 ),
       &ovwlist.front(),
       0, // All bands
-      NULL, // All bands
+      ITK_NULLPTR, // All bands
       ( GDALProgressFunc )otb_UpdateGDALProgress,
       this );
 
diff --git a/Modules/IO/IOGDAL/src/otbOGRIOHelper.cxx b/Modules/IO/IOGDAL/src/otbOGRIOHelper.cxx
index 6cc3890ac278ad4b67c9731e58aadea10694e3bb..212d75c607ae63b2fde625fbbeb1e226b97c8a9e 100644
--- a/Modules/IO/IOGDAL/src/otbOGRIOHelper.cxx
+++ b/Modules/IO/IOGDAL/src/otbOGRIOHelper.cxx
@@ -31,7 +31,7 @@ OGRIOHelper
 {
   OGRPoint * ogrPoint = (OGRPoint *) ogrGeometry;
 
-  if (ogrPoint == NULL)
+  if (ogrPoint == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "Failed to convert OGRGeometry to OGRPoint");
     }
@@ -60,7 +60,7 @@ OGRIOHelper
 {
   OGRLineString * ogrLine = (OGRLineString *) ogrGeometry;
 
-  if (ogrLine == NULL)
+  if (ogrLine == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "Failed to convert OGRGeometry to OGRLine");
     }
@@ -102,7 +102,7 @@ OGRIOHelper
 {
   OGRPolygon * ogrPolygon = (OGRPolygon *) ogrGeometry;
 
-  if (ogrPolygon == NULL)
+  if (ogrPolygon == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "Failed to convert OGRGeometry to OGRPolygon");
     }
@@ -187,7 +187,7 @@ void OGRIOHelper
   unsigned int   counter = 0;
   itk::TimeProbe chrono;
 
-  while ((feature = layer->GetNextFeature()) != NULL)
+  while ((feature = layer->GetNextFeature()) != ITK_NULLPTR)
     {
     chrono.Start();
 
@@ -197,7 +197,7 @@ void OGRIOHelper
     /** Temporary geometry container */
     OGRGeometry * geometry = feature->GetGeometryRef();
 
-    if (geometry == NULL)
+    if (geometry == ITK_NULLPTR)
       {
       OGRFeature::DestroyFeature(feature);
       chrono.Stop();
@@ -674,7 +674,7 @@ unsigned int OGRIOHelper
                                                kwl);
 
     // Create the field once
-    if (ogrCurrentLayer != NULL && !fieldsAddedToOGRLayer)
+    if (ogrCurrentLayer != ITK_NULLPTR && !fieldsAddedToOGRLayer)
       {
       // Take into account the fields stored in the
       // vectordatakeywordlist
@@ -710,8 +710,8 @@ unsigned int OGRIOHelper
       }
       case DOCUMENT:
       {
-      ogrCurrentLayer = m_DataSource->CreateLayer(dataNode->GetNodeId(), oSRS, wkbUnknown, NULL);
-      if (ogrCurrentLayer == NULL)
+      ogrCurrentLayer = m_DataSource->CreateLayer(dataNode->GetNodeId(), oSRS, wkbUnknown, ITK_NULLPTR);
+      if (ogrCurrentLayer == ITK_NULLPTR)
         {
         //itkExceptionMacro(<<"Failed to create layer "<<dataNode->GetNodeId());
         std::cout << "Failed to create layer " << dataNode->GetNodeId() << std::endl;
@@ -742,7 +742,7 @@ unsigned int OGRIOHelper
         }
 
       //Save it in the structure
-      if (ogrCollection == NULL)
+      if (ogrCollection == ITK_NULLPTR)
         {
         OGRFeature *ogrFeature;
         ogrFeature = OGRFeature::CreateFeature(ogrCurrentLayer->GetLayerDefn());
@@ -800,7 +800,7 @@ unsigned int OGRIOHelper
         }
 
       //Save it in the structure
-      if (ogrCollection == NULL)
+      if (ogrCollection == ITK_NULLPTR)
         {
         OGRFeature *ogrFeature;
         ogrFeature = OGRFeature::CreateFeature(ogrCurrentLayer->GetLayerDefn());
@@ -885,7 +885,7 @@ unsigned int OGRIOHelper
         }
 
       //Save it in the structure
-      if (ogrCollection == NULL)
+      if (ogrCollection == ITK_NULLPTR)
         {
         OGRFeature *ogrFeature;
         ogrFeature = OGRFeature::CreateFeature(ogrCurrentLayer->GetLayerDefn());
@@ -918,7 +918,7 @@ unsigned int OGRIOHelper
       }
       case FEATURE_MULTIPOINT:
       {
-      if (ogrCollection != NULL)
+      if (ogrCollection != ITK_NULLPTR)
         {
         itkExceptionMacro(<< "Problem while creating multipoint.");
         }
@@ -941,7 +941,7 @@ unsigned int OGRIOHelper
       }
       case FEATURE_MULTILINE:
       {
-      if (ogrCollection != NULL)
+      if (ogrCollection != ITK_NULLPTR)
         {
         itkExceptionMacro(<< "Problem while creating multiline.");
         }
@@ -966,7 +966,7 @@ unsigned int OGRIOHelper
       }
       case FEATURE_MULTIPOLYGON:
       {
-      if (ogrCollection != NULL)
+      if (ogrCollection != ITK_NULLPTR)
         {
         itkExceptionMacro(<< "Problem while creating multipolygon.");
         }
@@ -989,7 +989,7 @@ unsigned int OGRIOHelper
       }
       case FEATURE_COLLECTION:
       {
-      if (ogrCollection != NULL)
+      if (ogrCollection != ITK_NULLPTR)
         {
         itkExceptionMacro(<< "Problem while creating collection.");
         }
@@ -1031,7 +1031,7 @@ std::vector<OGRLayer*> OGRIOHelper
 {
 
   // Create the in memory datasource if NULL
-  if (inMemoryDataSource == NULL)
+  if (inMemoryDataSource == ITK_NULLPTR)
     {
     const char * driverName = "Memory";
     ogr::version_proxy::GDALDriverType * ogrDriver = ogr::version_proxy::GetDriverByName(driverName);
@@ -1057,7 +1057,7 @@ std::vector<OGRLayer*> OGRIOHelper
                                                kwl);
 
     // Create the field once
-    if (ogrCurrentLayer != NULL && !fieldsAddedToOGRLayer)
+    if (ogrCurrentLayer != ITK_NULLPTR && !fieldsAddedToOGRLayer)
       {
       // Take into account the fields stored in the
       // vectordatakeywordlist
@@ -1088,8 +1088,8 @@ std::vector<OGRLayer*> OGRIOHelper
       case DOCUMENT:
       {
       ogrCurrentLayer = inMemoryDataSource->CreateLayer(dataNode->GetNodeId(), oSRS,
-                                      wkbUnknown, NULL);
-      if (ogrCurrentLayer == NULL)
+                                      wkbUnknown, ITK_NULLPTR);
+      if (ogrCurrentLayer == ITK_NULLPTR)
         {
         std::cout << "Failed to create layer " << dataNode->GetNodeId() << std::endl;
         }
diff --git a/Modules/IO/IOGDAL/src/otbOGRVectorDataIO.cxx b/Modules/IO/IOGDAL/src/otbOGRVectorDataIO.cxx
index ec46d6e2f48f22e55ac27796acc790b3305c1f56..4bc2b52bbef2d169bf507fbf98e67d5e72a237f5 100644
--- a/Modules/IO/IOGDAL/src/otbOGRVectorDataIO.cxx
+++ b/Modules/IO/IOGDAL/src/otbOGRVectorDataIO.cxx
@@ -35,7 +35,7 @@ namespace otb
 
 OGRVectorDataIO
 ::OGRVectorDataIO() :
-  m_DataSource(NULL)
+  m_DataSource(ITK_NULLPTR)
 {
   // OGR factory registration
   OGRRegisterAll();
@@ -44,7 +44,7 @@ OGRVectorDataIO
 
 OGRVectorDataIO::~OGRVectorDataIO()
 {
-  if (m_DataSource != NULL)
+  if (m_DataSource != ITK_NULLPTR)
     {
     this->CloseInternalDataSource();
     }
@@ -56,7 +56,7 @@ OGRVectorDataIO::CanReadFile(const char* filename) const
 {
   otb::ogr::version_proxy::GDALDatasetType * poDS = ogr::version_proxy::Open(filename, true);
   
-  if (poDS == NULL)
+  if (poDS == ITK_NULLPTR)
     {
     std::cerr<<"Can not read file "<<filename<<" with GDALOpen"<<std::endl;
     return false;
@@ -88,14 +88,14 @@ OGRVectorDataIO
     itkExceptionMacro(<<"Failed to dynamic cast to otb::VectorData (this should never happen)");
     }
 
-  if (m_DataSource != NULL)
+  if (m_DataSource != ITK_NULLPTR)
     {
     this->CloseInternalDataSource();
     }
 
   m_DataSource = ogr::version_proxy::Open(this->m_FileName.c_str(),true);
 
-  if (m_DataSource == NULL)
+  if (m_DataSource == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "Failed to open data file " << this->m_FileName);
     }
@@ -110,11 +110,11 @@ OGRVectorDataIO
   DataTreePointerType tree = data->GetDataTree();
   DataNodePointerType root = tree->GetRoot()->Get();
 
-  OGRSpatialReference * oSRS = NULL;
+  OGRSpatialReference * oSRS = ITK_NULLPTR;
   //We take the assumption that the spatial reference is common to all layers
   oSRS = m_DataSource->GetLayer(0)->GetSpatialRef();
 
-  if (oSRS != NULL)
+  if (oSRS != ITK_NULLPTR)
     {
     char * projectionRefChar;
     oSRS->exportToWkt(&projectionRefChar);
@@ -185,7 +185,7 @@ void OGRVectorDataIO::CloseInternalDataSource()
 {
   assert(m_DataSource != NULL && "m_DataSource cannot be NULL");
   ogr::version_proxy::Close(m_DataSource);
-  m_DataSource = NULL;
+  m_DataSource = ITK_NULLPTR;
 }
 
 
@@ -219,13 +219,13 @@ void OGRVectorDataIO::Write(const itk::DataObject* datag, char ** /** unused */)
   ogr::version_proxy::GDALDriverType * ogrDriver =
     ogr::version_proxy::GetDriverByName(this->GetOGRDriverName(this->m_FileName).data());
 
-  if (ogrDriver == NULL)
+  if (ogrDriver == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "No OGR driver found to write file " << this->m_FileName);
     }
 
   // free an existing previous data source, if any
-  if (m_DataSource != NULL)
+  if (m_DataSource != ITK_NULLPTR)
     {
     ogr::version_proxy::Close(m_DataSource);
     }
@@ -237,7 +237,7 @@ void OGRVectorDataIO::Write(const itk::DataObject* datag, char ** /** unused */)
   m_DataSource = ogr::version_proxy::Create(ogrDriver,this->m_FileName.c_str());
 
   // check the created data source
-  if (m_DataSource == NULL)
+  if (m_DataSource == ITK_NULLPTR)
     {
     itkExceptionMacro(
       << "Failed to create OGR data source for file " << this->m_FileName <<
@@ -259,7 +259,7 @@ void OGRVectorDataIO::Write(const itk::DataObject* datag, char ** /** unused */)
     }
 
   //TODO georeference here from OGRSpatialReference http://www.gdal.org/ogr/classOGRDataSource.html
-  OGRSpatialReference * oSRS = NULL;
+  OGRSpatialReference * oSRS = ITK_NULLPTR;
   if (projectionInformationAvailable)
     {
     oSRS = static_cast<OGRSpatialReference *>(OSRNewSpatialReference(projectionRefWkt.c_str()));
@@ -267,16 +267,16 @@ void OGRVectorDataIO::Write(const itk::DataObject* datag, char ** /** unused */)
 
   // Retrieving root node
   DataTreeConstPointerType tree = data->GetDataTree();
-  if (tree->GetRoot() == NULL)
+  if (tree->GetRoot() == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "Data tree is empty: Root == NULL");
     }
   DataNodePointerType root = tree->GetRoot()->Get();
 
   unsigned int layerKept;
-  OGRLayer *   ogrCurrentLayer = NULL;
+  OGRLayer *   ogrCurrentLayer = ITK_NULLPTR;
 //   OGRFeatureVectorType ogrFeatures;
-  OGRGeometryCollection * ogrCollection = NULL;
+  OGRGeometryCollection * ogrCollection = ITK_NULLPTR;
   // OGRGeometry * ogrCurrentGeometry = NULL;
 
   // Get the input tree root
@@ -290,9 +290,9 @@ void OGRVectorDataIO::Write(const itk::DataObject* datag, char ** /** unused */)
   (void)layerKept; // keep compiler happy
 
   otb::ogr::version_proxy::Close(m_DataSource);
-  m_DataSource = NULL;
+  m_DataSource = ITK_NULLPTR;
 
-  if (oSRS != NULL)
+  if (oSRS != ITK_NULLPTR)
     {
     OSRRelease(oSRS);
     }
diff --git a/Modules/IO/IOGDAL/test/otbGDALImageIOTestWriteMetadata.cxx b/Modules/IO/IOGDAL/test/otbGDALImageIOTestWriteMetadata.cxx
index e226828a0253b550982c8907fc1aef1ce4ebcf3e..76f079c3470c798f5477f2052721ebc1b10f4b5a 100644
--- a/Modules/IO/IOGDAL/test/otbGDALImageIOTestWriteMetadata.cxx
+++ b/Modules/IO/IOGDAL/test/otbGDALImageIOTestWriteMetadata.cxx
@@ -462,7 +462,7 @@ bool writeReadDatasetMetadata(std::string filename, std::vector<std::string> opt
   GDALAllRegister();
   poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat);
 
-  if( poDriver == NULL )
+  if( poDriver == ITK_NULLPTR )
     {
     std::cout << "impossible to get the driver" <<std::endl;
     return false;
@@ -481,14 +481,14 @@ bool writeReadDatasetMetadata(std::string filename, std::vector<std::string> opt
     }
 
   GDALDataset *poDstDS;
-  char **papszOptions = NULL;
+  char **papszOptions = ITK_NULLPTR;
 
   // Create dataset
   poDstDS = poDriver->Create( filename.c_str(), 128, 128, 1, GDT_Byte,
                               papszOptions );
 
   OGRSpatialReference oSRS_GCP;
-  char *pszSRS_WKT_GCP = NULL;
+  char *pszSRS_WKT_GCP = ITK_NULLPTR;
   oSRS_GCP.SetWellKnownGeogCS( "WGS84" );
   oSRS_GCP.exportToWkt( &pszSRS_WKT_GCP );
 
@@ -522,7 +522,7 @@ bool writeReadDatasetMetadata(std::string filename, std::vector<std::string> opt
 
   // Set ProjectionRef
   OGRSpatialReference oSRS_ProjRef;
-  char *pszSRS_WKT_ProjRef = NULL;
+  char *pszSRS_WKT_ProjRef = ITK_NULLPTR;
   if (setProjectionRef || setProjectionRef_UTM)
   {
     oSRS_ProjRef.SetWellKnownGeogCS( "WGS84" );
@@ -595,7 +595,7 @@ bool writeReadDatasetMetadata(std::string filename, std::vector<std::string> opt
   GDALDataset  *poDataset;
 
   poDataset = (GDALDataset *) GDALOpen( filename.c_str(), GA_ReadOnly );
-  if( poDataset == NULL )
+  if( poDataset == ITK_NULLPTR )
      return false;
 
   // Get some information from file
diff --git a/Modules/IO/IOGDAL/test/otbGDALReadPxlComplex.cxx b/Modules/IO/IOGDAL/test/otbGDALReadPxlComplex.cxx
index 8fc75af28c34feea171d023e8ab6748adeaf7cdf..e2638847a3fc2210b1e3e55e07b04e083685e742 100644
--- a/Modules/IO/IOGDAL/test/otbGDALReadPxlComplex.cxx
+++ b/Modules/IO/IOGDAL/test/otbGDALReadPxlComplex.cxx
@@ -54,7 +54,7 @@ int otbGDALReadPxlComplexGeneric(int argc, char * argv[])
   GDALAllRegister();
 
   poDataset = (GDALDataset *) GDALOpen( argv[1], GA_ReadOnly );
-  if( poDataset == NULL )
+  if( poDataset == ITK_NULLPTR )
     return EXIT_FAILURE;
 
   // Get some information from file
@@ -86,7 +86,7 @@ int otbGDALReadPxlComplexGeneric(int argc, char * argv[])
                                        loadBuffer, // pData
                                        sizeX, sizeY,
                                        pxlTypeInFile,
-                                       nbBand, NULL,
+                                       nbBand, ITK_NULLPTR,
                                        pixelOffset, lineOffset, bandOffset);
   // Check if gdal call succeed
   if (lCrGdal == CE_Failure)
diff --git a/Modules/IO/IOJPEG2000/src/otbJPEG2000ImageIO.cxx b/Modules/IO/IOJPEG2000/src/otbJPEG2000ImageIO.cxx
index e98c1a7e3e0acb250c96ace2d20928bb14c27fef..e1d79be76d8f537d0885878e6a82d49802a54e98 100644
--- a/Modules/IO/IOJPEG2000/src/otbJPEG2000ImageIO.cxx
+++ b/Modules/IO/IOJPEG2000/src/otbJPEG2000ImageIO.cxx
@@ -175,7 +175,7 @@ public:
     if (m_JP2Metadata.pszProjection)
       return m_JP2Metadata.pszProjection;
     else
-      return NULL;
+      return ITK_NULLPTR;
   };
 
   /** Get the GML box from file*/
@@ -183,7 +183,7 @@ public:
     if (m_JP2Metadata.papszGMLMetadata)
       return m_JP2Metadata.papszGMLMetadata;
     else
-      return NULL;
+      return ITK_NULLPTR;
   };
 
   // Get the origin from GML box (use tinyxml to parse the GML box)
@@ -428,9 +428,9 @@ boost::shared_ptr<opj_image_t> JPEG2000InternalReader::DecodeTile(unsigned int t
 
   // Set default event mgr
   // catch events using our callbacks and give a local context      
-  opj_set_info_handler(codec.get(), info_callback,00);
-  opj_set_warning_handler(codec.get(), warning_callback,00);
-  opj_set_error_handler(codec.get(), error_callback,00);
+  opj_set_info_handler(codec.get(), info_callback,ITK_NULLPTR);
+  opj_set_warning_handler(codec.get(), warning_callback,ITK_NULLPTR);
+  opj_set_error_handler(codec.get(), error_callback,ITK_NULLPTR);
   
   // Setup the decoder decoding parameters using user parameters
   if (!opj_setup_decoder(codec.get(), &parameters))
@@ -441,7 +441,7 @@ boost::shared_ptr<opj_image_t> JPEG2000InternalReader::DecodeTile(unsigned int t
 
   // Read the main header of the codestream and if necessary the JP2
   // boxes
-  opj_image_t * unsafeOpjImgPtr = NULL;
+  opj_image_t * unsafeOpjImgPtr = ITK_NULLPTR;
 
   if (!opj_read_header(stream.get(), codec.get(),&unsafeOpjImgPtr))
     {
@@ -512,9 +512,9 @@ int JPEG2000InternalReader::Initialize()
 
     // Set default event mgr
     // catch events using our callbacks and give a local context      
-    opj_set_info_handler(codec.get(), info_callback,00);
-    opj_set_warning_handler(codec.get(), warning_callback,00);
-    opj_set_error_handler(codec.get(), error_callback,00);
+    opj_set_info_handler(codec.get(), info_callback,ITK_NULLPTR);
+    opj_set_warning_handler(codec.get(), warning_callback,ITK_NULLPTR);
+    opj_set_error_handler(codec.get(), error_callback,ITK_NULLPTR);
 
     // Setup the decoder decoding parameters using user parameters
     if (!opj_setup_decoder(codec.get(), &parameters))
@@ -526,7 +526,7 @@ int JPEG2000InternalReader::Initialize()
 
     // Read the main header of the codestream and if necessary the JP2
     // boxes
-    opj_image_t * unsafeOpjImgPtr = NULL;
+    opj_image_t * unsafeOpjImgPtr = ITK_NULLPTR;
 
     if (!opj_read_header(stream.get(), codec.get(),&unsafeOpjImgPtr))
       {
@@ -829,7 +829,7 @@ JPEG2000ImageIO::~JPEG2000ImageIO()
 
 bool JPEG2000ImageIO::CanReadFile(const char* filename)
 {
-  if (filename == NULL)
+  if (filename == ITK_NULLPTR)
     {
     itkDebugMacro(<< "No filename specified.");
     return false;
@@ -931,7 +931,7 @@ void JPEG2000ImageIO::Read(void* buffer)
   chrono.Start();
 
   // Check if conversion succeed
-  if (buffer == NULL)
+  if (buffer == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "JPEG2000ImageIO : Bad alloc");
     return;
@@ -1369,7 +1369,7 @@ void JPEG2000ImageIO::ReadImageInformation()
       otbMsgDevMacro(<< "JPEG2000 file has GMLMetadata!");
       std::string key;
 
-      for (int cpt = 0; papszGMLMetadata[cpt] != NULL; ++cpt)
+      for (int cpt = 0; papszGMLMetadata[cpt] != ITK_NULLPTR; ++cpt)
         {
         std::ostringstream lStream;
         lStream << MetaDataKey::MetadataKey << cpt;
@@ -1384,14 +1384,14 @@ void JPEG2000ImageIO::ReadImageInformation()
     /* ProjectionRef*/
     if (lJP2MetadataReader.GetProjectionRef() && !std::string(lJP2MetadataReader.GetProjectionRef()).empty() )
       {
-      OGRSpatialReferenceH pSR = OSRNewSpatialReference(NULL);
+      OGRSpatialReferenceH pSR = OSRNewSpatialReference(ITK_NULLPTR);
 
-      const char * pszProjection = NULL;
+      const char * pszProjection = ITK_NULLPTR;
       pszProjection =  lJP2MetadataReader.GetProjectionRef();
 
       if (OSRImportFromWkt(pSR, (char **) (&pszProjection)) == OGRERR_NONE)
         {
-        char * pszPrettyWkt = NULL;
+        char * pszPrettyWkt = ITK_NULLPTR;
         OSRExportToPrettyWkt(pSR, &pszPrettyWkt, FALSE);
 
         itk::EncapsulateMetaData<std::string> (dict, MetaDataKey::ProjectionRefKey,
@@ -1405,10 +1405,10 @@ void JPEG2000ImageIO::ReadImageInformation()
                                               static_cast<std::string>(lJP2MetadataReader.GetProjectionRef()));
         }
 
-      if (pSR != NULL)
+      if (pSR != ITK_NULLPTR)
         {
         OSRRelease(pSR);
-        pSR = NULL;
+        pSR = ITK_NULLPTR;
         }
       }
     else
diff --git a/Modules/IO/IOKML/include/otbKMLVectorDataIO.h b/Modules/IO/IOKML/include/otbKMLVectorDataIO.h
index ddbed80312a986ad8d42438a80524b4db03ce2bd..971da8555733aa95449789992fb01a0f892a8fb0 100644
--- a/Modules/IO/IOKML/include/otbKMLVectorDataIO.h
+++ b/Modules/IO/IOKML/include/otbKMLVectorDataIO.h
@@ -99,7 +99,7 @@ public:
   bool CanWriteFile(const char*) const ITK_OVERRIDE;
 
   /** Writes the data to disk from the data structure provided */
-  void Write(const itk::DataObject* data, char ** papszOptions = NULL) ITK_OVERRIDE;
+  void Write(const itk::DataObject* data, char ** papszOptions = ITK_NULLPTR) ITK_OVERRIDE;
 
 protected:
   /** Constructor.*/
diff --git a/Modules/IO/IOKML/src/otbKMLVectorDataIO.cxx b/Modules/IO/IOKML/src/otbKMLVectorDataIO.cxx
index abc2e04901ff6be986672ea0722d4743840b72f1..68f6a9811b321a1ddd45b906d43a229c8ded7c4a 100644
--- a/Modules/IO/IOKML/src/otbKMLVectorDataIO.cxx
+++ b/Modules/IO/IOKML/src/otbKMLVectorDataIO.cxx
@@ -102,7 +102,7 @@ KMLVectorDataIO::PrintIndented(const std::string& item, int depth)
 void
 KMLVectorDataIO::WalkFeature(const kmldom::FeaturePtr& feature, DataNodePointerType father)
 {
-  DataNodePointerType node = NULL;
+  DataNodePointerType node = ITK_NULLPTR;
 
   if (!feature) return;
 
@@ -127,7 +127,7 @@ void
 KMLVectorDataIO::WalkContainer(const kmldom::ContainerPtr& container, DataNodePointerType father)
 {
 
-  DataNodePointerType node = NULL;
+  DataNodePointerType node = ITK_NULLPTR;
 
   for (size_t i = 0; i < container->get_feature_array_size(); ++i)
     {
@@ -201,7 +201,7 @@ KMLVectorDataIO::WalkGeometry(const kmldom::GeometryPtr& geometry, DataNodePoint
 {
 
   // Creation of a node
-  DataNodePointerType node = NULL;
+  DataNodePointerType node = ITK_NULLPTR;
 
   if (!geometry)
     {
@@ -268,7 +268,7 @@ KMLVectorDataIO
 ::ConvertGeometryToPointNode(const kmldom::GeometryPtr& geometry)
 {
 
-  if (geometry == NULL)
+  if (geometry == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "Failed to convert kmldom::GeometryPtr to PointNode");
     }
@@ -300,7 +300,7 @@ KMLVectorDataIO
 ::ConvertGeometryToLineStringNode(const kmldom::GeometryPtr& geometry)
 {
 
-  if (geometry == NULL)
+  if (geometry == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "Failed to convert kmldom::GeometryPtr to LineNode");
     }
@@ -336,7 +336,7 @@ KMLVectorDataIO
 ::ConvertGeometryToLinearRingNode(const kmldom::GeometryPtr& geometry)
 {
 
-  if (geometry == NULL)
+  if (geometry == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "Failed to convert kmldom::GeometryPtr to LineNode");
     }
@@ -372,7 +372,7 @@ KMLVectorDataIO
 ::ConvertGeometryToPolygonNode(const kmldom::GeometryPtr& geometry)
 {
 
-  if (geometry == NULL)
+  if (geometry == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "Failed to convert kmldom::GeometryPtr to LineNode");
     }
@@ -554,7 +554,7 @@ void KMLVectorDataIO::Write(const itk::DataObject* datag, char ** itkNotUsed(pap
 
   //Create the factory
   kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory();
-  if (factory == NULL)
+  if (factory == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "Impossible to create the KML Factory to write file " << this->m_FileName);
     }
@@ -570,9 +570,9 @@ void KMLVectorDataIO::Write(const itk::DataObject* datag, char ** itkNotUsed(pap
   TreeIteratorType it(tree);
   it.GoToBegin();
 
-  kmldom::DocumentPtr      currentDocument = NULL;
-  kmldom::FolderPtr        currentFolder = NULL;
-  kmldom::MultiGeometryPtr currentMultiGeometry = NULL;
+  kmldom::DocumentPtr      currentDocument = ITK_NULLPTR;
+  kmldom::FolderPtr        currentFolder = ITK_NULLPTR;
+  kmldom::MultiGeometryPtr currentMultiGeometry = ITK_NULLPTR;
 
   InternalTreeNodeType * inputRoot = const_cast<InternalTreeNodeType *>(tree->GetRoot());
   ProcessNodeWrite(inputRoot, factory, kml, currentDocument, currentFolder, currentMultiGeometry);
@@ -671,7 +671,7 @@ void KMLVectorDataIO::ProcessNodeWrite(InternalTreeNodeType * source,
         kmldom::PointPtr point = factory->CreatePoint();
         point->set_coordinates(coordinates);
 
-        if (currentMultiGeometry != NULL)
+        if (currentMultiGeometry != ITK_NULLPTR)
           {
           currentMultiGeometry->add_geometry(point);
           }
@@ -680,7 +680,7 @@ void KMLVectorDataIO::ProcessNodeWrite(InternalTreeNodeType * source,
 
           kmldom::PlacemarkPtr placemark = factory->CreatePlacemark();
           placemark->set_geometry(point);
-          if (currentFolder != NULL)
+          if (currentFolder != ITK_NULLPTR)
             {
             currentFolder->add_feature(placemark);
             }
@@ -718,7 +718,7 @@ void KMLVectorDataIO::ProcessNodeWrite(InternalTreeNodeType * source,
           ++vIt;
           }
 
-        if (currentMultiGeometry != NULL)
+        if (currentMultiGeometry != ITK_NULLPTR)
           {
           currentMultiGeometry->add_geometry(line);
           }
@@ -726,7 +726,7 @@ void KMLVectorDataIO::ProcessNodeWrite(InternalTreeNodeType * source,
           {
           kmldom::PlacemarkPtr placemark = factory->CreatePlacemark();
           placemark->set_geometry(line);
-          if (currentFolder != NULL)
+          if (currentFolder != ITK_NULLPTR)
             {
             currentFolder->add_feature(placemark);
             }
@@ -837,7 +837,7 @@ void KMLVectorDataIO::ProcessNodeWrite(InternalTreeNodeType * source,
           innerboundaryis->clear_linearring();
           }
 
-        if (currentMultiGeometry != NULL)
+        if (currentMultiGeometry != ITK_NULLPTR)
           {
           currentMultiGeometry->add_geometry(polygon);
           }
@@ -845,7 +845,7 @@ void KMLVectorDataIO::ProcessNodeWrite(InternalTreeNodeType * source,
           {
           kmldom::PlacemarkPtr placemark = factory->CreatePlacemark();
           placemark->set_geometry(polygon);
-          if (currentFolder != NULL)
+          if (currentFolder != ITK_NULLPTR)
             {
             currentFolder->add_feature(placemark);
             }
@@ -863,7 +863,7 @@ void KMLVectorDataIO::ProcessNodeWrite(InternalTreeNodeType * source,
         currentMultiGeometry = multi;
         kmldom::PlacemarkPtr placemark = factory->CreatePlacemark();
         placemark->set_geometry(multi);
-        if (currentFolder != NULL)
+        if (currentFolder != ITK_NULLPTR)
           {
           currentFolder->add_feature(placemark);
           }
diff --git a/Modules/IO/IOLUM/src/otbLUMImageIO.cxx b/Modules/IO/IOLUM/src/otbLUMImageIO.cxx
index 1e4378c0b19257e943395469fb9ca8d00c87db77..451c73a12fc974c22b2fa3a6819349b2661517f1 100644
--- a/Modules/IO/IOLUM/src/otbLUMImageIO.cxx
+++ b/Modules/IO/IOLUM/src/otbLUMImageIO.cxx
@@ -412,7 +412,7 @@ void LUMImageIO::WriteImageInformation()
     m_File.write(value, headerLength);
     }
   delete[] value;
-  value = NULL;
+  value = ITK_NULLPTR;
   //Set m_TypeLum
   if (0) {}
   otbSetTypeLumMacro(CHAR,   "08BI", "08LI")
@@ -464,7 +464,7 @@ int LUMImageIO::CaiGetTypeLum(const char *          type_code,
   taille = -1;
   int nbbits = -1;
   ind = 0;
-  pch0 = NULL;
+  pch0 = ITK_NULLPTR;
 
   std::string str_type_code(type_code);
   while ((trouve == -1) && (ind < m_CaiLumTyp.size()))
@@ -499,17 +499,17 @@ int LUMImageIO::CaiGetTypeLum(const char *          type_code,
       pch0 = const_cast<char *>(strstr(type_code, "U"));
       if (taille == 1)
         {
-        if (pch0 == NULL) sprintf(cod_pix, "OCT");
+        if (pch0 == ITK_NULLPTR) sprintf(cod_pix, "OCT");
         else sprintf(cod_pix, "UOCT");
         }
       else if (taille == 2)
         {
-        if (pch0 == NULL) sprintf(cod_pix, "I2");
+        if (pch0 == ITK_NULLPTR) sprintf(cod_pix, "I2");
         else sprintf(cod_pix, "UI2");
         }
       else if (taille == 4)
         {
-        if (pch0 == NULL) sprintf(cod_pix, "I4");
+        if (pch0 == ITK_NULLPTR) sprintf(cod_pix, "I4");
         else sprintf(cod_pix, "UI4");
         }
       else taille = -1;
diff --git a/Modules/IO/IOMSTAR/src/otbMSTARImageIO.cxx b/Modules/IO/IOMSTAR/src/otbMSTARImageIO.cxx
index 7ac218c33b3dde7341661cb4ff75d4323d138a08..b5112efe57b07a9563b580442e9a27128e53fdf9 100644
--- a/Modules/IO/IOMSTAR/src/otbMSTARImageIO.cxx
+++ b/Modules/IO/IOMSTAR/src/otbMSTARImageIO.cxx
@@ -60,9 +60,9 @@ MSTARImageIO::MSTARImageIO()
 
   m_BytePerPixel = 0;
 
-  MSTARfp = NULL;        /* Input FILE ptr to MSTAR image file     */
-  HDRfp = NULL;          /* Output FILE ptr to MSTAR header file   */
-  RAWfp = NULL;
+  MSTARfp = ITK_NULLPTR;        /* Input FILE ptr to MSTAR image file     */
+  HDRfp = ITK_NULLPTR;          /* Output FILE ptr to MSTAR header file   */
+  RAWfp = ITK_NULLPTR;
 
   i = 0;
   j = 0;
@@ -83,13 +83,13 @@ MSTARImageIO::MSTARImageIO()
   littleushortval = 0;
   littlefloatval = 0.;
 
-  MSTARname = NULL;      /* Input MSTAR filename           */
+  MSTARname = ITK_NULLPTR;      /* Input MSTAR filename           */
 
-  tptr = NULL;  /* Temp buffer ptr */
-  phdr = NULL;  /* Ptr to buffer to hold Phoenix header */
+  tptr = ITK_NULLPTR;  /* Temp buffer ptr */
+  phdr = ITK_NULLPTR;  /* Ptr to buffer to hold Phoenix header */
 
-  FSCENEdata = NULL; /* Ptr to Fullscene data buffer */
-  CHIPdata = NULL;   /* Ptr to CHIp data buffer      */
+  FSCENEdata = ITK_NULLPTR; /* Ptr to Fullscene data buffer */
+  CHIPdata = ITK_NULLPTR;   /* Ptr to CHIp data buffer      */
 
   
 
@@ -98,10 +98,10 @@ MSTARImageIO::MSTARImageIO()
 /** Destructor */
 MSTARImageIO::~MSTARImageIO()
 {
-  if (phdr != NULL)
+  if (phdr != ITK_NULLPTR)
     {
     free(phdr);
-    phdr = NULL;
+    phdr = ITK_NULLPTR;
     }
 }
 
@@ -117,7 +117,7 @@ bool MSTARImageIO::CanReadFile(const char* filename)
   MSTARname = filename;
 
   MSTARfp = fopen(MSTARname, "rb");
-  if (MSTARfp == NULL)
+  if (MSTARfp == ITK_NULLPTR)
     {
     otbMsgDevMacro(<< "\nError: Unable to open [" << MSTARname << "] for reading!\n");
     return false;
@@ -133,18 +133,18 @@ bool MSTARImageIO::CanReadFile(const char* filename)
     {
     otbMsgDevMacro(<< "\nError: Unable in reading [" << MSTARname << "] header... Only read ["<< returnVal <<" of 1024 bytes !\n");
     fclose(MSTARfp);
-    MSTARfp = NULL;
+    MSTARfp = ITK_NULLPTR;
     return false;
     }
   rewind(MSTARfp);
 
   /* Extract Phoenix Summary header length */
   tptr = (char *) strstr(tbuff, "PhoenixHeaderLength= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
 //    fprintf(stderr,"Can not determine Phoenix header length!\n");
     fclose(MSTARfp);
-    MSTARfp = NULL;
+    MSTARfp = ITK_NULLPTR;
     return false;
     }
   else
@@ -154,11 +154,11 @@ bool MSTARImageIO::CanReadFile(const char* filename)
 
   /* Check for and extract native header length */
   tptr = (char *) strstr(tbuff, "native_header_length= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
 //    fprintf(stderr,"Can not determine native header length!\n");
     fclose(MSTARfp);
-    MSTARfp = NULL;
+    MSTARfp = ITK_NULLPTR;
     return false;
     }
   else
@@ -168,7 +168,7 @@ bool MSTARImageIO::CanReadFile(const char* filename)
 
   /* Extract MSTAR column width */
   tptr = (char *) strstr(tbuff, "NumberOfColumns= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
     otbMsgDevMacro(<< "Error: Can not determine MSTAR image width");
     fclose(MSTARfp);
@@ -182,11 +182,11 @@ bool MSTARImageIO::CanReadFile(const char* filename)
 
   /* Extract MSTAR row height */
   tptr = (char *) strstr(tbuff, "NumberOfRows= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
     otbMsgDevMacro(<< "Error: Can not determine MSTAR image height!");
     fclose(MSTARfp);
-    MSTARfp = NULL;
+    MSTARfp = ITK_NULLPTR;
     return false;
     }
   else
@@ -237,7 +237,7 @@ bool MSTARImageIO::CanReadFile(const char* filename)
 // free(phdr);
 
   fclose(MSTARfp);
-  MSTARfp = NULL;
+  MSTARfp = ITK_NULLPTR;
   otbMsgDevMacro(<< "Can read MSTAR");
   return bool(true);
 }
@@ -267,7 +267,7 @@ void MSTARImageIO::Read(void* buffer)
 {
 
   MSTARfp = fopen(MSTARname, "rb");
-  if (MSTARfp == NULL)
+  if (MSTARfp == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "Error: Unable to open file for reading!\n\n " << m_FileName.c_str() << ").");
     }
@@ -287,7 +287,7 @@ void MSTARImageIO::Read(void* buffer)
 
   /* Extract Phoenix Summary header length */
   tptr = (char *) strstr(tbuff, "PhoenixHeaderLength= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
     fclose(MSTARfp);
     itkExceptionMacro(<< "Error: Can not determine Phoenix header length!");
@@ -299,7 +299,7 @@ void MSTARImageIO::Read(void* buffer)
 
   /* Check for and extract native header length */
   tptr = (char *) strstr(tbuff, "native_header_length= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
     fclose(MSTARfp);
     itkExceptionMacro(<< "Can not determine native header length!\n");
@@ -311,7 +311,7 @@ void MSTARImageIO::Read(void* buffer)
 
   /* Extract MSTAR column width */
   tptr = (char *) strstr(tbuff, "NumberOfColumns= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
     fclose(MSTARfp);
     itkExceptionMacro(<< "Error: Can not determine MSTAR image width");
@@ -324,7 +324,7 @@ void MSTARImageIO::Read(void* buffer)
 
   /* Extract MSTAR row height */
   tptr = (char *) strstr(tbuff, "NumberOfRows= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
     fclose(MSTARfp);
     itkExceptionMacro(<< "Error: Can not determine MSTAR image height!");
@@ -431,7 +431,7 @@ void MSTARImageIO::Read(void* buffer)
       bytesPerImage = totchunks * sizeof(float);
       CHIPdata = (float *) malloc(bytesPerImage);
 
-      if (CHIPdata == (float *) NULL)
+      if (CHIPdata == (float *) ITK_NULLPTR)
         {
         fclose(MSTARfp);
         itkExceptionMacro("Error: Unable to malloc CHIP memory!\n");
@@ -476,7 +476,7 @@ void MSTARImageIO::Read(void* buffer)
     case FSCENE_IMAGE:
       bytesPerImage = nchunks * sizeof(short);
       FSCENEdata = (unsigned short *) malloc(bytesPerImage);
-      if (FSCENEdata == (unsigned short *) NULL)
+      if (FSCENEdata == (unsigned short *) ITK_NULLPTR)
         {
         fclose(MSTARfp);
         itkExceptionMacro(<< "Error: Unable to malloc fullscene memory!\n");
@@ -587,7 +587,7 @@ void MSTARImageIO::ReadImageInformation()
 
   MSTARname = m_FileName.c_str();
   MSTARfp = fopen(MSTARname, "rb");
-  if (MSTARfp == NULL)
+  if (MSTARfp == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "Error: Unable to open file for reading!\n\n " << m_FileName.c_str());
     }
@@ -607,7 +607,7 @@ void MSTARImageIO::ReadImageInformation()
 
   /* Extract Phoenix Summary header length */
   tptr = (char *) strstr(tbuff, "PhoenixHeaderLength= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
     fclose(MSTARfp);
     itkExceptionMacro(<< "Error: Can not determine Phoenix header length!");
@@ -619,7 +619,7 @@ void MSTARImageIO::ReadImageInformation()
 
   /* Check for and extract native header length */
   tptr = (char *) strstr(tbuff, "native_header_length= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
     fclose(MSTARfp);
     itkExceptionMacro(<< "Can not determine native header length!\n");
@@ -631,7 +631,7 @@ void MSTARImageIO::ReadImageInformation()
 
   /* Extract MSTAR column width */
   tptr = (char *) strstr(tbuff, "NumberOfColumns= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
     fclose(MSTARfp);
     itkExceptionMacro(<< "Error: Can not determine MSTAR image width");
@@ -644,7 +644,7 @@ void MSTARImageIO::ReadImageInformation()
 
   /* Extract MSTAR row height */
   tptr = (char *) strstr(tbuff, "NumberOfRows= ");
-  if (tptr == (char *) NULL)
+  if (tptr == (char *) ITK_NULLPTR)
     {
     fclose(MSTARfp);
     itkExceptionMacro(<< "Error: Can not determine MSTAR image height!");
diff --git a/Modules/IO/IOONERA/src/otbONERAImageIO.cxx b/Modules/IO/IOONERA/src/otbONERAImageIO.cxx
index 02357654298a30e4bb033875c1323c6cc149c179..b4766e4ff38d87e2800ef695c05e4616067a1c71 100644
--- a/Modules/IO/IOONERA/src/otbONERAImageIO.cxx
+++ b/Modules/IO/IOONERA/src/otbONERAImageIO.cxx
@@ -230,7 +230,7 @@ void ONERAImageIO::Read(void* buffer)
     }
 
   delete[] value;
-  value = NULL;
+  value = ITK_NULLPTR;
 
 }
 
@@ -514,7 +514,7 @@ void ONERAImageIO::Write(const void* buffer)
     }
 
   delete[] tempmemory;
-  tempmemory = NULL;
+  tempmemory = ITK_NULLPTR;
 }
 
 // To be consistent with the behavior of GDALImageIO
diff --git a/Modules/IO/IORAD/src/otbRADImageIO.cxx b/Modules/IO/IORAD/src/otbRADImageIO.cxx
index acea472769aa0ebc0efa7ae636088f6dd1a4f422..98fcf67ea9533c5589aef75a7dbca45dcf151d0a 100644
--- a/Modules/IO/IORAD/src/otbRADImageIO.cxx
+++ b/Modules/IO/IORAD/src/otbRADImageIO.cxx
@@ -61,7 +61,7 @@ RADImageIO::RADImageIO()
   // (consistency between ImageIO, see Mantis #942)
   m_Origin[0] = 0.5;
   m_Origin[1] = 0.5;
-  m_ChannelsFile = NULL;
+  m_ChannelsFile = ITK_NULLPTR;
   m_FlagWriteImageInformation = true;
 
   this->AddSupportedWriteExtension(".rad");
@@ -79,7 +79,7 @@ RADImageIO::~RADImageIO()
     {
     m_HeaderFile.close();
     }
-  if (m_ChannelsFile !=  NULL)
+  if (m_ChannelsFile !=  ITK_NULLPTR)
     {
     for (unsigned int numChannel = 0; numChannel < m_NbOfChannels; ++numChannel)
       {
@@ -158,7 +158,7 @@ void RADImageIO::Read(void* buffer)
   step = step * (unsigned long) (this->GetComponentSize());
 
   char * value = new char[numberOfBytesToBeRead];
-  if (value == NULL)
+  if (value == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "RADImageIO::Read(): Bad alloc");
     return;
@@ -220,7 +220,7 @@ void RADImageIO::Read(void* buffer)
     }
 
   delete[] value;
-  value = NULL;
+  value = ITK_NULLPTR;
 
 }
 
@@ -544,7 +544,7 @@ void RADImageIO::Write(const void* buffer)
   const char * p = static_cast<const char *>(buffer);
 
   char* value = new char[numberOfBytesToBeWrite];
-  if (value == NULL)
+  if (value == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "RADImageIO::Write : Bad Alloc");
     return;
diff --git a/Modules/IO/IOTileMap/src/otbTileMapImageIO.cxx b/Modules/IO/IOTileMap/src/otbTileMapImageIO.cxx
index 38205436c17995f6712c19d3a81067e3fdc8573a..41d6044df7dd285e6168ce92edb9ec9a5030515d 100644
--- a/Modules/IO/IOTileMap/src/otbTileMapImageIO.cxx
+++ b/Modules/IO/IOTileMap/src/otbTileMapImageIO.cxx
@@ -105,7 +105,7 @@ TileMapImageIO::~TileMapImageIO()
 bool TileMapImageIO::CanReadFile(const char* file)
 {
   // First check the extension
-  if (file == NULL)
+  if (file == ITK_NULLPTR)
     {
     itkDebugMacro(<< "No filename specified.");
     return false;
@@ -146,7 +146,7 @@ void TileMapImageIO::PrintSelf(std::ostream& os, itk::Indent indent) const
 void TileMapImageIO::Read(void* buffer)
 {
   unsigned char * p = static_cast<unsigned char *>(buffer);
-  if (p == NULL)
+  if (p == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "Memory allocation error");
     return;
@@ -353,7 +353,7 @@ void TileMapImageIO::GenerateBuffer(unsigned char *p)
 void TileMapImageIO::ReadTile(const std::string& filename, void * buffer)
 {
   otbMsgDevMacro(<< "Retrieving " << filename);
-  unsigned char *           bufferCacheFault = NULL;
+  unsigned char *           bufferCacheFault = ITK_NULLPTR;
 
   otb::ImageIOBase::Pointer imageIO;
   imageIO = otb::GDALImageIO::New();
@@ -529,7 +529,7 @@ void TileMapImageIO::ReadImageInformation()
 bool TileMapImageIO::CanWriteFile(const char* name)
 {
   // First if filename is provided
-  if (name == NULL)
+  if (name == ITK_NULLPTR)
     {
     itkDebugMacro(<< "No filename specified.");
     return false;
@@ -554,7 +554,7 @@ void TileMapImageIO::Write(const void* buffer)
 {
 
   const unsigned char * p = static_cast<const unsigned char *>(buffer);
-  if (p == NULL)
+  if (p == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "Memory allocation error");
     return;
diff --git a/Modules/IO/IOXML/include/otbStatisticsXMLFileReader.txx b/Modules/IO/IOXML/include/otbStatisticsXMLFileReader.txx
index 2bf86d544e8239a972b5551163c2c8130b9eba7f..cf7bf353476274c0c7ffd5df6f1de1b4d061545f 100644
--- a/Modules/IO/IOXML/include/otbStatisticsXMLFileReader.txx
+++ b/Modules/IO/IOXML/include/otbStatisticsXMLFileReader.txx
@@ -179,7 +179,7 @@ StatisticsXMLFileReader<TMeasurementVector>
     {
     // Iterate through the tree to get all the stats
     for( TiXmlElement* currentStat = root->FirstChildElement();
-         currentStat != NULL;
+         currentStat != ITK_NULLPTR;
          currentStat = currentStat->NextSiblingElement() )
       {
       InputDataType   currentStatisticVector;
@@ -193,7 +193,7 @@ StatisticsXMLFileReader<TMeasurementVector>
       std::vector<double>   tempMeasurementVector;
 
       for( TiXmlElement* sample = currentStat->FirstChildElement("StatisticVector");
-     sample != NULL;
+     sample != ITK_NULLPTR;
      sample = sample->NextSiblingElement() )
         {
         // Get the current value of the statistic vector
@@ -220,24 +220,24 @@ StatisticsXMLFileReader<TMeasurementVector>
     {
     // Iterate through the tree to get all the stats
     for( TiXmlElement* currentStat = root->FirstChildElement();
-         currentStat != NULL;
+         currentStat != ITK_NULLPTR;
          currentStat = currentStat->NextSiblingElement() )
       {
       GenericMapType currentMap;
       std::string currentName(currentStat->Attribute("name"));
 
       for( TiXmlElement* sample = currentStat->FirstChildElement("StatisticMap");
-          sample != NULL;
+          sample != ITK_NULLPTR;
           sample = sample->NextSiblingElement() )
         {
         // Get the current pair of the statistic map
         const char *c_key = sample->Attribute("key");
         const char *c_value = sample->Attribute("value");
-        if (c_key == NULL)
+        if (c_key == ITK_NULLPTR)
           {
           itkExceptionMacro("'key' attribute not found in StatisticMap !");
           }
-        if (c_value == NULL)
+        if (c_value == ITK_NULLPTR)
           {
           itkExceptionMacro("'value' attribute not found in StatisticMap !");
           }
diff --git a/Modules/IO/IOXML/include/otbStatisticsXMLFileWriter.txx b/Modules/IO/IOXML/include/otbStatisticsXMLFileWriter.txx
index b3f7e16a11ceda2992fad9ad05743964c54777bf..9f669178e2e13e6c113a9b5048a57a4210230cea 100644
--- a/Modules/IO/IOXML/include/otbStatisticsXMLFileWriter.txx
+++ b/Modules/IO/IOXML/include/otbStatisticsXMLFileWriter.txx
@@ -81,7 +81,7 @@ StatisticsXMLFileWriter<TMeasurementVector>
   TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" );
   doc.LinkEndChild( decl );
 
-  TiXmlElement * root = NULL;
+  TiXmlElement * root = ITK_NULLPTR;
   if (m_MeasurementVectorContainer.size())
     {
     root = new TiXmlElement( "FeatureStatistics");
@@ -110,7 +110,7 @@ StatisticsXMLFileWriter<TMeasurementVector>
     }
     
   // Iterate on map containers
-  TiXmlElement * mapRoot = NULL;
+  TiXmlElement * mapRoot = ITK_NULLPTR;
   if (m_GenericMapContainer.size())
     {
     mapRoot = new TiXmlElement( "GeneralStatistics");
diff --git a/Modules/IO/ImageIO/include/otbImageFileWriter.txx b/Modules/IO/ImageIO/include/otbImageFileWriter.txx
index 49de27982d944782f46eafc54536f2c061325d1e..0798c41ac8c7bee360e83d08697138c88faf3571 100644
--- a/Modules/IO/ImageIO/include/otbImageFileWriter.txx
+++ b/Modules/IO/ImageIO/include/otbImageFileWriter.txx
@@ -256,7 +256,7 @@ ImageFileWriter<TInputImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const InputImageType*>(this->ProcessObject::GetInput(0));
@@ -803,7 +803,7 @@ ImageFileWriter<TInputImage>
 {
   this->m_FilenameHelper->SetExtendedFileName(extendedFileName);
   m_FileName = this->m_FilenameHelper->GetSimpleFileName();
-  m_ImageIO = NULL;
+  m_ImageIO = ITK_NULLPTR;
   this->Modified();
 }
 
diff --git a/Modules/IO/ImageIO/include/otbScalarBufferToImageFileWriter.txx b/Modules/IO/ImageIO/include/otbScalarBufferToImageFileWriter.txx
index 2c788496d31c9403ef0bedd75de5330ccd677c4b..ecde17980088d4eba9b8cf722eaf816c863dbac7 100644
--- a/Modules/IO/ImageIO/include/otbScalarBufferToImageFileWriter.txx
+++ b/Modules/IO/ImageIO/include/otbScalarBufferToImageFileWriter.txx
@@ -27,7 +27,7 @@ namespace otb
 {
 template<class TBufferType, class TOutputPixelType>
 ScalarBufferToImageFileWriter<TBufferType, TOutputPixelType>
-::ScalarBufferToImageFileWriter() : m_Buffer(NULL), m_NumberOfChannels(0), m_InverseXSpacing(false)
+::ScalarBufferToImageFileWriter() : m_Buffer(ITK_NULLPTR), m_NumberOfChannels(0), m_InverseXSpacing(false)
 {
   m_Writer = WriterType::New();
   m_ImageSize.Fill(0);
diff --git a/Modules/IO/ImageIO/src/otbImageIOFactory.cxx b/Modules/IO/ImageIO/src/otbImageIOFactory.cxx
index 82967f8c1a891568bd044c1ad40cf569fb959bfb..ab5701227068dae285da26bd6fab53277028548b 100644
--- a/Modules/IO/ImageIO/src/otbImageIOFactory.cxx
+++ b/Modules/IO/ImageIO/src/otbImageIOFactory.cxx
@@ -82,7 +82,7 @@ ImageIOFactory::CreateImageIO(const char* path, FileModeType mode)
 
       }
     }
-  return 0;
+  return ITK_NULLPTR;
 }
 
 void
diff --git a/Modules/IO/ImageIO/test/otbImageIOFactoryNew.cxx b/Modules/IO/ImageIO/test/otbImageIOFactoryNew.cxx
index 28eb252d3ce9c0b4100e980208151e24d44021f1..7c1eec765cac076b2da15a57a363c2990d858509 100644
--- a/Modules/IO/ImageIO/test/otbImageIOFactoryNew.cxx
+++ b/Modules/IO/ImageIO/test/otbImageIOFactoryNew.cxx
@@ -25,6 +25,6 @@
 int otbImageIOFactoryNew(int itkNotUsed(argc), char * itkNotUsed(argv) [])
 {
   otb::ImageIOFactory *lImageIOFactory;
-  lImageIOFactory = NULL;
-  return lImageIOFactory != NULL; //to avoid unused variable warning
+  lImageIOFactory = ITK_NULLPTR;
+  return lImageIOFactory != ITK_NULLPTR; //to avoid unused variable warning
 }
diff --git a/Modules/IO/ImageIO/test/otbScalarBufferToImageFileWriterTest.cxx b/Modules/IO/ImageIO/test/otbScalarBufferToImageFileWriterTest.cxx
index 1961cd4e439c1f4b60924bf4ddec7cf3859bce5e..9c7ff8bff373a2a4957ea1ac975946728e6c0cd7 100644
--- a/Modules/IO/ImageIO/test/otbScalarBufferToImageFileWriterTest.cxx
+++ b/Modules/IO/ImageIO/test/otbScalarBufferToImageFileWriterTest.cxx
@@ -57,7 +57,7 @@ int otbScalarBufferToImageFileWriterTest(int itkNotUsed(argc), char* argv[])
   filter->Update();
 
   delete[] tab;
-  tab = NULL;
+  tab = ITK_NULLPTR;
 
   return EXIT_SUCCESS;
 }
diff --git a/Modules/IO/KMZWriter/include/otbKmzProductWriter.txx b/Modules/IO/KMZWriter/include/otbKmzProductWriter.txx
index 8cbca3b1dc4c08a022798b7607c7cbe85164b5da..be2875927df2790e07c2885d7728b75ec9da292b 100644
--- a/Modules/IO/KMZWriter/include/otbKmzProductWriter.txx
+++ b/Modules/IO/KMZWriter/include/otbKmzProductWriter.txx
@@ -47,7 +47,7 @@ KmzProductWriter<TInputImage>
 {
   // Reset the boost::intrusive_ptr<KmzFile> :
   // TODO : when upgrading boost > 1.42 use method release().
-  m_KmzFile = NULL;
+  m_KmzFile = ITK_NULLPTR;
 }
 
 /**
@@ -84,7 +84,7 @@ KmzProductWriter<TInputImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TInputImage * >
@@ -270,7 +270,7 @@ KmzProductWriter<TInputImage>
   // Build wgs ref to compute long/lat
   OGRSpatialReference oSRS;
   oSRS.SetWellKnownGeogCS("WGS84");
-  char * wgsRef = NULL;
+  char * wgsRef = ITK_NULLPTR;
   oSRS.exportToWkt(&wgsRef);
 
   // Update image base information
diff --git a/Modules/IO/TestKernel/include/otbTestHelper.h b/Modules/IO/TestKernel/include/otbTestHelper.h
index a6a615db84e207429fe06bdbb1f1459c4616a06b..f7efa67a880e873e7aaf4d9b82b4db1763f68261 100644
--- a/Modules/IO/TestKernel/include/otbTestHelper.h
+++ b/Modules/IO/TestKernel/include/otbTestHelper.h
@@ -141,8 +141,8 @@ private:
                    OGRLayer * test_poLayer, const char *test_pszWHERE, OGRGeometry *test_poSpatialFilter,
                    int& nbdiff) const;
 
-  static void DumpOGRFeature(FILE* fileid, OGRFeature* feature, char** papszOptions = NULL);
-  static void DumpOGRGeometry(FILE* fileid, OGRGeometry* geometry, const char * pszPrefix, char** papszOptions = NULL);
+  static void DumpOGRFeature(FILE* fileid, OGRFeature* feature, char** papszOptions = ITK_NULLPTR);
+  static void DumpOGRGeometry(FILE* fileid, OGRGeometry* geometry, const char * pszPrefix, char** papszOptions = ITK_NULLPTR);
 
   double m_ToleranceDiffValue;
   double m_Epsilon;
diff --git a/Modules/IO/TestKernel/src/otbTestDriver.cxx b/Modules/IO/TestKernel/src/otbTestDriver.cxx
index 4fbeeb755b34d97d8eff4a2887e1fbccc87721b8..8e96ad71846a4070a7728639b3d17db0e3d64a36 100644
--- a/Modules/IO/TestKernel/src/otbTestDriver.cxx
+++ b/Modules/IO/TestKernel/src/otbTestDriver.cxx
@@ -176,7 +176,7 @@ int main(int ac, char* av[])
     {
     argv[i + 1] = remainingArgs[i];
     }
-  argv[remainingArgs.size() + 1] = NULL;
+  argv[remainingArgs.size() + 1] = ITK_NULLPTR;
 
   /** Call to the otbTestMain */
   return otbTestMain(static_cast<int>(remainingArgs.size()), argv);
@@ -194,7 +194,7 @@ int Execute(int argc, char * argv[])
   itksysProcess_SetPipeShared(process, itksysProcess_Pipe_STDOUT, true);
   itksysProcess_SetPipeShared(process, itksysProcess_Pipe_STDERR, true);
   itksysProcess_Execute(process);
-  itksysProcess_WaitForExit(process, NULL);
+  itksysProcess_WaitForExit(process, ITK_NULLPTR);
   int retCode = itksysProcess_GetExitValue(process);
   return retCode;
 }
diff --git a/Modules/IO/TestKernel/src/otbTestHelper.cxx b/Modules/IO/TestKernel/src/otbTestHelper.cxx
index a10623362fb4d57475e5bce773c8df8929cf6c49..6dae89b62f79cd226c543be12c181692abb593a0 100644
--- a/Modules/IO/TestKernel/src/otbTestHelper.cxx
+++ b/Modules/IO/TestKernel/src/otbTestHelper.cxx
@@ -1076,31 +1076,31 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
   /* -------------------------------------------------------------------- */
   /*      Open data source.                                               */
   /* -------------------------------------------------------------------- */
-  otb::ogr::version_proxy::GDALDatasetType *ref_poDS = NULL;
-  otb::ogr::version_proxy::GDALDriverType *  ref_poDriver = NULL;
+  otb::ogr::version_proxy::GDALDatasetType *ref_poDS = ITK_NULLPTR;
+  otb::ogr::version_proxy::GDALDriverType *  ref_poDriver = ITK_NULLPTR;
   //OGRGeometry *  ref_poSpatialFilter = NULL;
-  otb::ogr::version_proxy::GDALDatasetType *test_poDS = NULL;
-  otb::ogr::version_proxy::GDALDriverType *  test_poDriver = NULL;
+  otb::ogr::version_proxy::GDALDatasetType *test_poDS = ITK_NULLPTR;
+  otb::ogr::version_proxy::GDALDriverType *  test_poDriver = ITK_NULLPTR;
   //OGRGeometry *  test_poSpatialFilter = NULL;
 
   ref_poDS = otb::ogr::version_proxy::Open(ref_pszDataSource, false);
-  if (ref_poDS == NULL && !bReadOnly)
+  if (ref_poDS == ITK_NULLPTR && !bReadOnly)
     {
     ref_poDS = otb::ogr::version_proxy::Open(ref_pszDataSource, true);
     bReadOnly = TRUE;
-    if (ref_poDS != NULL && m_ReportErrors)
+    if (ref_poDS != ITK_NULLPTR && m_ReportErrors)
       {
       std::cout << "Had to open REF data source read-only."<<std::endl;
       }
     }
   test_poDS = otb::ogr::version_proxy::Open(ref_pszDataSource, bReadOnly);
-  if (test_poDS == NULL && !bReadOnly)
+  if (test_poDS == ITK_NULLPTR && !bReadOnly)
     {
     test_poDS = otb::ogr::version_proxy::Open(ref_pszDataSource, bReadOnly);
 
     bReadOnly = TRUE;
 
-    if (test_poDS != NULL && m_ReportErrors)
+    if (test_poDS != ITK_NULLPTR && m_ReportErrors)
       {
       std::cout << "Had to open TEST data source read-only."<<std::endl;
       }
@@ -1108,7 +1108,7 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
   /* -------------------------------------------------------------------- */
   /*      Report failure                                                  */
   /* -------------------------------------------------------------------- */
-  if (ref_poDS == NULL)
+  if (ref_poDS == ITK_NULLPTR)
     {
 
     if (m_ReportErrors)
@@ -1127,7 +1127,7 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
   ref_poDriver = ref_poDS->GetDriver();
   CPLAssert(ref_poDriver != NULL);
 
-  if (test_poDS == NULL)
+  if (test_poDS == ITK_NULLPTR)
     {
     if (m_ReportErrors)
       {
@@ -1183,14 +1183,14 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
     OGRLayer *ref_poLayer = ref_poDS->GetLayer(iLayer);
     OGRLayer *test_poLayer = test_poDS->GetLayer(iLayer);
 
-    if (ref_poLayer == NULL)
+    if (ref_poLayer == ITK_NULLPTR)
       {
       if (m_ReportErrors)
         std::cout << "FAILURE: Couldn't fetch advertised layer " << iLayer <<
         " for REF data source" << std::endl;
       return (1);
       }
-    if (test_poLayer == NULL)
+    if (test_poLayer == ITK_NULLPTR)
       {
       if (m_ReportErrors)
         std::cout << "FAILURE: Couldn't fetch advertised layer " << iLayer <<
@@ -1199,20 +1199,20 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
       }
 
     //Check Layer inforamtion
-    ogrReportOnLayer(ref_poLayer, NULL, NULL, test_poLayer, NULL, NULL, nbdiff);
+    ogrReportOnLayer(ref_poLayer, ITK_NULLPTR, ITK_NULLPTR, test_poLayer, ITK_NULLPTR, ITK_NULLPTR, nbdiff);
 
     //If no difference, check the feature
     if (nbdiff == 0)
       {
-      OGRFeature *      ref_poFeature = NULL;
-      OGRFeature *      test_poFeature = NULL;
+      OGRFeature *      ref_poFeature = ITK_NULLPTR;
+      OGRFeature *      test_poFeature = ITK_NULLPTR;
       std::string       basefilename(test_pszDataSource);
       int               nbFeature(0);
       std::stringstream oss2;
       oss2.str("");
       oss2 << iLayer;
 
-      while ((ref_poFeature = ref_poLayer->GetNextFeature()) != NULL)
+      while ((ref_poFeature = ref_poLayer->GetNextFeature()) != ITK_NULLPTR)
         {
         test_poFeature = test_poLayer->GetNextFeature();
         std::stringstream oss;
@@ -1223,9 +1223,9 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
                                    + "_ref.txt";
         std::string test_filename = basefilename + "_temporary_layer_" + oss2.str() + "_feature_" + oss.str()
                                     + "_test.txt";
-        FILE *ref_f(NULL);
+        FILE *ref_f(ITK_NULLPTR);
         ref_f = fopen(ref_filename.c_str(), "w");
-        if (ref_f == NULL)
+        if (ref_f == ITK_NULLPTR)
           {
           itkGenericExceptionMacro(<< "Impossible to create ASCII file <" << ref_filename << ">.");
           }
@@ -1233,9 +1233,9 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
         OGRFeature::DestroyFeature( ref_poFeature );
         fclose(ref_f);
 
-        FILE *test_f(NULL);
+        FILE *test_f(ITK_NULLPTR);
         test_f = fopen(test_filename.c_str(), "w");
-        if (test_f == NULL)
+        if (test_f == ITK_NULLPTR)
           {
           itkGenericExceptionMacro(<< "Impossible to create ASCII file <" << test_filename << ">.");
           }
@@ -1268,7 +1268,7 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
 
 void TestHelper::DumpOGRFeature(FILE* fpOut, OGRFeature* feature, char** papszOptions)
 {
-  if (fpOut == NULL) fpOut = stdout;
+  if (fpOut == ITK_NULLPTR) fpOut = stdout;
 
   if(!feature)
     {
@@ -1280,7 +1280,7 @@ void TestHelper::DumpOGRFeature(FILE* fpOut, OGRFeature* feature, char** papszOp
 
   const char* pszDisplayFields =
     CSLFetchNameValue(papszOptions, "DISPLAY_FIELDS");
-  if (pszDisplayFields == NULL || CSLTestBoolean(pszDisplayFields))
+  if (pszDisplayFields == ITK_NULLPTR || CSLTestBoolean(pszDisplayFields))
     {
     for (int iField = 0; iField < feature->GetFieldCount(); iField++)
       {
@@ -1296,21 +1296,21 @@ void TestHelper::DumpOGRFeature(FILE* fpOut, OGRFeature* feature, char** papszOp
       }
     }
 
-  if (feature->GetStyleString() != NULL)
+  if (feature->GetStyleString() != ITK_NULLPTR)
     {
     const char* pszDisplayStyle =
       CSLFetchNameValue(papszOptions, "DISPLAY_STYLE");
-    if (pszDisplayStyle == NULL || CSLTestBoolean(pszDisplayStyle))
+    if (pszDisplayStyle == ITK_NULLPTR || CSLTestBoolean(pszDisplayStyle))
       {
       fprintf(fpOut, "  Style = %s\n", feature->GetStyleString());
       }
     }
 
-  if (feature->GetGeometryRef() != NULL)
+  if (feature->GetGeometryRef() != ITK_NULLPTR)
     {
     const char* pszDisplayGeometry =
       CSLFetchNameValue(papszOptions, "DISPLAY_GEOMETRY");
-    if (!(pszDisplayGeometry != NULL && EQUAL(pszDisplayGeometry, "NO")))
+    if (!(pszDisplayGeometry != ITK_NULLPTR && EQUAL(pszDisplayGeometry, "NO")))
       {
       DumpOGRGeometry(fpOut, feature->GetGeometryRef(), "  ", papszOptions);
       }
@@ -1321,15 +1321,15 @@ void TestHelper::DumpOGRFeature(FILE* fpOut, OGRFeature* feature, char** papszOp
 
 void TestHelper::DumpOGRGeometry(FILE* fp, OGRGeometry* geometry, const char * pszPrefix, char** papszOptions)
 {
-  char *pszWkt = NULL;
+  char *pszWkt = ITK_NULLPTR;
 
-  if (pszPrefix == NULL) pszPrefix = "";
+  if (pszPrefix == ITK_NULLPTR) pszPrefix = "";
 
-  if (fp == NULL) fp = stdout;
+  if (fp == ITK_NULLPTR) fp = stdout;
 
   const char* pszDisplayGeometry =
     CSLFetchNameValue(papszOptions, "DISPLAY_GEOMETRY");
-  if (pszDisplayGeometry != NULL && EQUAL(pszDisplayGeometry, "SUMMARY"))
+  if (pszDisplayGeometry != ITK_NULLPTR && EQUAL(pszDisplayGeometry, "SUMMARY"))
     {
     OGRLineString *        poLine;
     OGRPolygon *           poPoly;
@@ -1398,7 +1398,7 @@ void TestHelper::DumpOGRGeometry(FILE* fp, OGRGeometry* geometry, const char * p
         break;
       }
     }
-  else if (pszDisplayGeometry == NULL || CSLTestBoolean(pszDisplayGeometry) ||
+  else if (pszDisplayGeometry == ITK_NULLPTR || CSLTestBoolean(pszDisplayGeometry) ||
            EQUAL(pszDisplayGeometry, "WKT"))
     {
     if (geometry->exportToWkt(&pszWkt) == OGRERR_NONE)
@@ -1856,13 +1856,13 @@ void TestHelper::ogrReportOnLayer(OGRLayer * ref_poLayer,
   /* -------------------------------------------------------------------- */
   otbCheckStringValue("pszWHERE", ref_pszWHERE, test_pszWHERE, nbdiff, m_ReportErrors);
 
-  if (ref_pszWHERE != NULL) ref_poLayer->SetAttributeFilter(ref_pszWHERE);
+  if (ref_pszWHERE != ITK_NULLPTR) ref_poLayer->SetAttributeFilter(ref_pszWHERE);
 
-  if (ref_poSpatialFilter != NULL) ref_poLayer->SetSpatialFilter(ref_poSpatialFilter);
+  if (ref_poSpatialFilter != ITK_NULLPTR) ref_poLayer->SetSpatialFilter(ref_poSpatialFilter);
 
-  if (test_pszWHERE != NULL) test_poLayer->SetAttributeFilter(test_pszWHERE);
+  if (test_pszWHERE != ITK_NULLPTR) test_poLayer->SetAttributeFilter(test_pszWHERE);
 
-  if (test_poSpatialFilter != NULL) test_poLayer->SetSpatialFilter(test_poSpatialFilter);
+  if (test_poSpatialFilter != ITK_NULLPTR) test_poLayer->SetSpatialFilter(test_poSpatialFilter);
 
   /* -------------------------------------------------------------------- */
   /*      Report various overall information.                             */
@@ -1893,12 +1893,12 @@ void TestHelper::ogrReportOnLayer(OGRLayer * ref_poLayer,
   char *ref_pszWKT;
   char *test_pszWKT;
 
-  if (ref_poLayer->GetSpatialRef() == NULL) ref_pszWKT = CPLStrdup("(unknown)");
+  if (ref_poLayer->GetSpatialRef() == ITK_NULLPTR) ref_pszWKT = CPLStrdup("(unknown)");
   else
     {
     ref_poLayer->GetSpatialRef()->exportToPrettyWkt(&ref_pszWKT);
     }
-  if (test_poLayer->GetSpatialRef() == NULL) test_pszWKT = CPLStrdup("(unknown)");
+  if (test_poLayer->GetSpatialRef() == ITK_NULLPTR) test_pszWKT = CPLStrdup("(unknown)");
   else
     {
     test_poLayer->GetSpatialRef()->exportToPrettyWkt(&test_pszWKT);
diff --git a/Modules/IO/VectorDataIO/include/otbVectorDataFileReader.txx b/Modules/IO/VectorDataIO/include/otbVectorDataFileReader.txx
index 318a055c33454f050fe38de91829ffdf7c994d15..88b92507cbe9137963f988de3c8265229ee1c701 100644
--- a/Modules/IO/VectorDataIO/include/otbVectorDataFileReader.txx
+++ b/Modules/IO/VectorDataIO/include/otbVectorDataFileReader.txx
@@ -37,7 +37,7 @@ namespace otb
 template <class TOutputVectorData>
 VectorDataFileReader<TOutputVectorData>
 ::VectorDataFileReader() :
-  m_VectorDataIO(NULL),
+  m_VectorDataIO(ITK_NULLPTR),
   m_UserSpecifiedVectorDataIO(false),
   m_FileName("")
 {
diff --git a/Modules/IO/VectorDataIO/include/otbVectorDataFileWriter.txx b/Modules/IO/VectorDataIO/include/otbVectorDataFileWriter.txx
index 486de4260ed1d1083c08f361aca27388e6f4385c..ee9d9935ad6ac668e51c4ed6aea28eb1f0452bef 100644
--- a/Modules/IO/VectorDataIO/include/otbVectorDataFileWriter.txx
+++ b/Modules/IO/VectorDataIO/include/otbVectorDataFileWriter.txx
@@ -34,7 +34,7 @@ template <class TInputVectorData>
 VectorDataFileWriter<TInputVectorData>
 ::VectorDataFileWriter() :
   m_FileName(""),
-  m_VectorDataIO(0),
+  m_VectorDataIO(ITK_NULLPTR),
   m_UserSpecifiedVectorDataIO(false),
   m_FactorySpecifiedVectorDataIO(false)
 {
@@ -67,7 +67,7 @@ VectorDataFileWriter<TInputVectorData>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<TInputVectorData*>
@@ -94,7 +94,7 @@ VectorDataFileWriter<TInputVectorData>
   itkDebugMacro(<< "Writing a vector data file");
 
   // Make sure input is available
-  if (input == 0)
+  if (input == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "No input to writer!");
     }
diff --git a/Modules/IO/VectorDataIO/src/otbVectorDataIOFactory.cxx b/Modules/IO/VectorDataIO/src/otbVectorDataIOFactory.cxx
index 3ce568ab0000652baec9e557c8cdb5f74bf90013..82993d2789f11b71f3f5ea032e4477360b7376dc 100644
--- a/Modules/IO/VectorDataIO/src/otbVectorDataIOFactory.cxx
+++ b/Modules/IO/VectorDataIO/src/otbVectorDataIOFactory.cxx
@@ -74,7 +74,7 @@ VectorDataIOFactory
 
       }
     }
-  return 0;
+  return ITK_NULLPTR;
 }
 
 void
diff --git a/Modules/Learning/DempsterShafer/include/otbDSFusionOfClassifiersImageFilter.txx b/Modules/Learning/DempsterShafer/include/otbDSFusionOfClassifiersImageFilter.txx
index af6a06d6435bd79a40a7f60e3c57aa0862e202e1..f05b56e40458ced1e93d35458d91a1833e4aefa0 100644
--- a/Modules/Learning/DempsterShafer/include/otbDSFusionOfClassifiersImageFilter.txx
+++ b/Modules/Learning/DempsterShafer/include/otbDSFusionOfClassifiersImageFilter.txx
@@ -59,7 +59,7 @@ DSFusionOfClassifiersImageFilter<TInputImage, TOutputImage, TMaskImage>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const MaskImageType *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Learning/DempsterShafer/include/otbJointMassOfBeliefFilter.txx b/Modules/Learning/DempsterShafer/include/otbJointMassOfBeliefFilter.txx
index 6446d238503e928426f93424abb7e9c45db71c48..d45ccde5b205ed4517e7b6fb79642804e414ea00 100644
--- a/Modules/Learning/DempsterShafer/include/otbJointMassOfBeliefFilter.txx
+++ b/Modules/Learning/DempsterShafer/include/otbJointMassOfBeliefFilter.txx
@@ -83,7 +83,7 @@ JointMassOfBeliefFilter<TMassFunction>
 {
   if(this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<MassFunctionType *>(this->itk::ProcessObject::GetOutput(0));
 }
diff --git a/Modules/Learning/LearningBase/include/otbGaussianModelComponent.txx b/Modules/Learning/LearningBase/include/otbGaussianModelComponent.txx
index f823ea30a3dce5d5c62706c4f4dbda5a9e627a11..d4ab209ef3b1e0f51ca2a25f80f12642a16d7857 100644
--- a/Modules/Learning/LearningBase/include/otbGaussianModelComponent.txx
+++ b/Modules/Learning/LearningBase/include/otbGaussianModelComponent.txx
@@ -35,8 +35,8 @@ template<class TSample>
 GaussianModelComponent<TSample>
 ::GaussianModelComponent()
 {
-  m_CovarianceEstimator = 0;
-  m_GaussianMembershipFunction = 0;
+  m_CovarianceEstimator = ITK_NULLPTR;
+  m_GaussianMembershipFunction = ITK_NULLPTR;
 }
 
 template<class TSample>
diff --git a/Modules/Learning/LearningBase/include/otbKMeansImageClassificationFilter.txx b/Modules/Learning/LearningBase/include/otbKMeansImageClassificationFilter.txx
index 861aefe4ffba956374c1f5f472e43152cf7af969..9a4a3146b6b85cafb558756e02535af8ef2f6cb9 100644
--- a/Modules/Learning/LearningBase/include/otbKMeansImageClassificationFilter.txx
+++ b/Modules/Learning/LearningBase/include/otbKMeansImageClassificationFilter.txx
@@ -52,7 +52,7 @@ KMeansImageClassificationFilter<TInputImage, TOutputImage, VMaxSampleDimension,
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const MaskImageType *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Learning/LearningBase/include/otbSEMClassifier.txx b/Modules/Learning/LearningBase/include/otbSEMClassifier.txx
index bf5674f7be8ec5248dcbadbca733e4ad13832982..28ae59d6db5246eba647c98ec6bdadcb77ad5841 100644
--- a/Modules/Learning/LearningBase/include/otbSEMClassifier.txx
+++ b/Modules/Learning/LearningBase/include/otbSEMClassifier.txx
@@ -42,15 +42,15 @@ SEMClassifier<TInputImage, TOutputImage>
   m_TerminationCode = NOT_CONVERGED;
   m_ExternalLabels = 0;
   m_ComponentDeclared = 0;
-  m_Sample = 0;
+  m_Sample = ITK_NULLPTR;
   m_NbSamples = 0;
-  m_SampleList = 0;
+  m_SampleList = ITK_NULLPTR;
   m_NbChange = 0;
   m_TerminationThreshold = 1E-5;
   m_Neighborhood = 1;
 
-  m_OutputImage = 0;
-  m_Output = 0;
+  m_OutputImage = ITK_NULLPTR;
+  m_Output = ITK_NULLPTR;
 
 }
 
@@ -164,7 +164,7 @@ SEMClassifier<TInputImage, TOutputImage>
   typename TInputImage::SizeType size = imgLabels->GetBufferedRegion().GetSize();
   int                            theSize = (int) size[0] * size[1];
 
-  if (m_Sample == NULL)
+  if (m_Sample == ITK_NULLPTR)
     {
     m_ClassLabels.resize(theSize);
 
diff --git a/Modules/Learning/Markov/include/otbMRFSamplerRandomMAP.h b/Modules/Learning/Markov/include/otbMRFSamplerRandomMAP.h
index 0b28f166341448eac108b8d6e4f7b6b09c6fe708..1b8a953a656a2ef757b480dde4591c340a6778e1 100644
--- a/Modules/Learning/Markov/include/otbMRFSamplerRandomMAP.h
+++ b/Modules/Learning/Markov/include/otbMRFSamplerRandomMAP.h
@@ -74,8 +74,8 @@ public:
     if ((nClasses != this->m_NumberOfClasses) || (m_EnergiesInvalid == true))
       {
       this->m_NumberOfClasses = nClasses;
-      if (m_Energy != NULL) free(m_Energy);
-      if (m_RepartitionFunction != NULL) free(m_RepartitionFunction);
+      if (m_Energy != ITK_NULLPTR) free(m_Energy);
+      if (m_RepartitionFunction != ITK_NULLPTR) free(m_RepartitionFunction);
       m_Energy = (double *) calloc(this->m_NumberOfClasses, sizeof(double));
       m_RepartitionFunction = (double *) calloc(this->m_NumberOfClasses, sizeof(double));
       this->Modified();
@@ -156,8 +156,8 @@ public:
 protected:
   // The constructor and destructor.
   MRFSamplerRandomMAP() :
-    m_RepartitionFunction(NULL),
-    m_Energy(NULL),
+    m_RepartitionFunction(ITK_NULLPTR),
+    m_Energy(ITK_NULLPTR),
     m_EnergiesInvalid(true)
     {
     m_Generator = RandomGeneratorType::GetInstance();
@@ -165,8 +165,8 @@ protected:
     }
   ~MRFSamplerRandomMAP() ITK_OVERRIDE
     {
-    if (m_Energy != NULL) free(m_Energy);
-    if (m_RepartitionFunction != NULL) free(m_RepartitionFunction);
+    if (m_Energy != ITK_NULLPTR) free(m_Energy);
+    if (m_RepartitionFunction != ITK_NULLPTR) free(m_RepartitionFunction);
     }
 
 private:
diff --git a/Modules/Learning/Markov/include/otbMarkovRandomFieldFilter.txx b/Modules/Learning/Markov/include/otbMarkovRandomFieldFilter.txx
index 91d9354f0c6af854dc5b039d3e007f209430c173..804a4df1aa2be7d8a049feed96f35df21b033b62 100644
--- a/Modules/Learning/Markov/include/otbMarkovRandomFieldFilter.txx
+++ b/Modules/Learning/Markov/include/otbMarkovRandomFieldFilter.txx
@@ -79,7 +79,7 @@ MarkovRandomFieldFilter<TInputImage, TClassifiedImage>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TrainingImageType *>
            (this->itk::ProcessObject::GetInput(1));
@@ -318,7 +318,7 @@ MarkovRandomFieldFilter<TInputImage, TClassifiedImage>
        - 2 * m_InputImageNeighborhoodRadius[i]);
     }
 
-  srand((unsigned) time(0));
+  srand((unsigned) time(ITK_NULLPTR));
 
   if (!m_EnergyRegularization)
     {
diff --git a/Modules/Learning/SOM/include/otbSOMImageClassificationFilter.txx b/Modules/Learning/SOM/include/otbSOMImageClassificationFilter.txx
index d2f1a05fb7450838d0325a1b639d21903bdaf210..36dfa8b430ab0fcae6d9ff417665e4e7c43b21e1 100644
--- a/Modules/Learning/SOM/include/otbSOMImageClassificationFilter.txx
+++ b/Modules/Learning/SOM/include/otbSOMImageClassificationFilter.txx
@@ -52,7 +52,7 @@ SOMImageClassificationFilter<TInputImage, TOutputImage, TSOMMap, TMaskImage>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const MaskImageType *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Learning/SVMLearning/include/otbSVMImageClassificationFilter.txx b/Modules/Learning/SVMLearning/include/otbSVMImageClassificationFilter.txx
index e81146ad62821653e33606541a7915e10124a24f..7c1d5e2717e6e6640c02f8d897e1ed872c82b400 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMImageClassificationFilter.txx
+++ b/Modules/Learning/SVMLearning/include/otbSVMImageClassificationFilter.txx
@@ -52,7 +52,7 @@ SVMImageClassificationFilter<TInputImage, TOutputImage, TMaskImage>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const MaskImageType *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Learning/SVMLearning/include/otbSVMImageClassificationWithRuleFilter.txx b/Modules/Learning/SVMLearning/include/otbSVMImageClassificationWithRuleFilter.txx
index 72cc653cb53273f9c1ed12bc8e423adb32606277..a682561743257fb952451f267e4e8ef47753e7ea 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMImageClassificationWithRuleFilter.txx
+++ b/Modules/Learning/SVMLearning/include/otbSVMImageClassificationWithRuleFilter.txx
@@ -40,7 +40,7 @@ SVMImageClassificationWithRuleFilter<TInputImage, TOutputImage, TMaskImage>
 {
   Superclass::GenerateOutputInformation();
 
-  if (this->GetModel() == NULL)
+  if (this->GetModel() == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "No model for classification");
     }
@@ -60,7 +60,7 @@ SVMImageClassificationWithRuleFilter<TInputImage, TOutputImage, TMaskImage>
 {
   Superclass::AllocateOutputs();
 
-  if (this->GetModel() == NULL)
+  if (this->GetModel() == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "No model for classification");
     }
diff --git a/Modules/Learning/SVMLearning/include/otbSVMImageModelEstimator.txx b/Modules/Learning/SVMLearning/include/otbSVMImageModelEstimator.txx
index c92d5034ae8ef86f53dce54715f122b433508612..082138ca37ea3b69abf3338af49082e15c1bc889 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMImageModelEstimator.txx
+++ b/Modules/Learning/SVMLearning/include/otbSVMImageModelEstimator.txx
@@ -75,7 +75,7 @@ SVMImageModelEstimator<TInputImage, TTrainingImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TInputImage *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -87,7 +87,7 @@ SVMImageModelEstimator<TInputImage, TTrainingImage>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TTrainingImage *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Learning/SVMLearning/include/otbSVMModel.h b/Modules/Learning/SVMLearning/include/otbSVMModel.h
index 482f306659108f93ebd85f588ca713eddcd6ecc0..030abc9df4a532ffe75456e5dd452baecd111d2a 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMModel.h
+++ b/Modules/Learning/SVMLearning/include/otbSVMModel.h
@@ -324,13 +324,13 @@ public:
   double * GetRho(void) const
   {
     if (m_Model) return m_Model->rho;
-    return NULL;
+    return ITK_NULLPTR;
   }
   /** Return the support vectors */
   svm_node ** GetSupportVectors(void)
   {
     if (m_Model) return m_Model->SV;
-    return NULL;
+    return ITK_NULLPTR;
   }
   /** Set the support vectors and changes the l number of support vectors accordind to sv.*/
   void SetSupportVectors(svm_node ** sv, int nbOfSupportVector);
@@ -339,7 +339,7 @@ public:
   double ** GetAlpha(void)
   {
     if (m_Model) return m_Model->sv_coef;
-    return NULL;
+    return ITK_NULLPTR;
   }
   /** Set the alphas values (SV Coef) */
   void SetAlpha(double ** alpha, int nbOfSupportVector);
@@ -348,14 +348,14 @@ public:
   int * GetLabels()
   {
     if (m_Model) return m_Model->label;
-    return NULL;
+    return ITK_NULLPTR;
   }
 
   /** Get the number of SV per classes */
   int * GetNumberOfSVPerClasse()
   {
     if (m_Model) return m_Model->nSV;
-    return NULL;
+    return ITK_NULLPTR;
   }
 
   struct svm_problem& GetProblem()
diff --git a/Modules/Learning/SVMLearning/include/otbSVMModel.txx b/Modules/Learning/SVMLearning/include/otbSVMModel.txx
index 324d67f94afeb34617c31eb4310c8cba268b5769..a0b5abb5809a1c010acaa700d6baf692da9d7ba1 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMModel.txx
+++ b/Modules/Learning/SVMLearning/include/otbSVMModel.txx
@@ -43,10 +43,10 @@ SVMModel<TValue, TLabel>::SVMModel()
   this->DoProbabilityEstimates(false);
 
   m_Parameters.nr_weight = 0;
-  m_Parameters.weight_label = NULL;
-  m_Parameters.weight = NULL;
+  m_Parameters.weight_label = ITK_NULLPTR;
+  m_Parameters.weight = ITK_NULLPTR;
 
-  m_Model = NULL;
+  m_Model = ITK_NULLPTR;
 
   this->Initialize();
 }
@@ -83,8 +83,8 @@ SVMModel<TValue, TLabel>::Initialize()
 
   // Intialize problem
   m_Problem.l = 0;
-  m_Problem.y = NULL;
-  m_Problem.x = NULL;
+  m_Problem.y = ITK_NULLPTR;
+  m_Problem.x = ITK_NULLPTR;
 
   m_ProblemUpToDate = false;
 }
@@ -111,7 +111,7 @@ SVMModel<TValue, TLabel>::DeleteModel()
     {
     svm_free_and_destroy_model(&m_Model);
     }
-  m_Model = NULL;
+  m_Model = ITK_NULLPTR;
 }
 
 template <class TValue, class TLabel>
@@ -122,7 +122,7 @@ SVMModel<TValue, TLabel>::DeleteProblem()
   if (m_Problem.y)
     {
     delete[] m_Problem.y;
-    m_Problem.y = NULL;
+    m_Problem.y = ITK_NULLPTR;
     }
 
   if (m_Problem.x)
@@ -135,7 +135,7 @@ SVMModel<TValue, TLabel>::DeleteProblem()
         }
       }
     delete[] m_Problem.x;
-    m_Problem.x = NULL;
+    m_Problem.x = ITK_NULLPTR;
     }
   m_Problem.l = 0;
   m_ProblemUpToDate = false;
@@ -358,7 +358,7 @@ SVMModel<TValue, TLabel>::EvaluateLabel(const MeasurementType& measure) const
   int nr_class = svm_get_nr_class(m_Model);
 
   // Allocate space for labels
-  double *prob_estimates = NULL;
+  double *prob_estimates = ITK_NULLPTR;
 
   // Eventually allocate space for probabilities
   if (predict_probability)
@@ -532,7 +532,7 @@ SVMModel<TValue, TLabel>::LoadModel(const char* model_file_name)
 {
   this->DeleteModel();
   m_Model = svm_load_model(model_file_name);
-  if (m_Model == 0)
+  if (m_Model == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "Problem while loading SVM model "
                       << std::string(model_file_name));
@@ -563,10 +563,10 @@ SVMModel<TValue, TLabel>::SetSupportVectors(svm_node ** sv, int nbOfSupportVecto
 
   for (int n = 0; n < m_Model->l; ++n)
     {
-    m_Model->SV[n] = NULL;
+    m_Model->SV[n] = ITK_NULLPTR;
     }
   delete[] (m_Model->SV);
-  m_Model->SV = NULL;
+  m_Model->SV = ITK_NULLPTR;
 
   m_Model->SV = new struct svm_node*[m_Model->l];
 
diff --git a/Modules/Learning/SVMLearning/include/otbSVMModelEstimator.txx b/Modules/Learning/SVMLearning/include/otbSVMModelEstimator.txx
index df7ec69f587055e32a59d49de2f1b61fb9f0630f..6e1ffe113b9f79a6653aa6578934c781b17238a0 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMModelEstimator.txx
+++ b/Modules/Learning/SVMLearning/include/otbSVMModelEstimator.txx
@@ -52,7 +52,7 @@ SVMModelEstimator<InputPixelType, LabelPixelType>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<ModelType *>(this->itk::ProcessObject::GetOutput(0));
 }
diff --git a/Modules/Learning/SVMLearning/include/otbSVMPointSetModelEstimator.txx b/Modules/Learning/SVMLearning/include/otbSVMPointSetModelEstimator.txx
index 4734e9ed852ee2f66cd2d18f8896f24ebf85d637..e4e3e6b0c0cd2c51151f29d3a22f7de45b5f4b03 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMPointSetModelEstimator.txx
+++ b/Modules/Learning/SVMLearning/include/otbSVMPointSetModelEstimator.txx
@@ -74,7 +74,7 @@ SVMPointSetModelEstimator<TInputPointSet, TTrainingPointSet>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TInputPointSet *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -86,7 +86,7 @@ SVMPointSetModelEstimator<TInputPointSet, TTrainingPointSet>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TTrainingPointSet *>(this->itk::ProcessObject::GetInput(1));
 }
diff --git a/Modules/Learning/SVMLearning/include/otbSVMSampleListModelEstimator.txx b/Modules/Learning/SVMLearning/include/otbSVMSampleListModelEstimator.txx
index d85122ec1c5bbd6cce57cb79e9890b09fa8b4fc0..a379ab5dddb61bba83a8ad410e7bc440f8f76566 100644
--- a/Modules/Learning/SVMLearning/include/otbSVMSampleListModelEstimator.txx
+++ b/Modules/Learning/SVMLearning/include/otbSVMSampleListModelEstimator.txx
@@ -79,7 +79,7 @@ SVMSampleListModelEstimator<TInputSampleList, TTrainingSampleList, TMeasurementF
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const InputSampleListType* >
@@ -98,7 +98,7 @@ SVMSampleListModelEstimator<TInputSampleList, TTrainingSampleList, TMeasurementF
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TrainingSampleListType* >
diff --git a/Modules/Learning/SVMLearning/test/otbSVMImageModelEstimatorModelAccessor.cxx b/Modules/Learning/SVMLearning/test/otbSVMImageModelEstimatorModelAccessor.cxx
index 7bfa58be34b3ac8177bafebfdc4effe9c0c3812c..b8804b12b32f29e3fab4ecb2cd3565d859d2e984 100644
--- a/Modules/Learning/SVMLearning/test/otbSVMImageModelEstimatorModelAccessor.cxx
+++ b/Modules/Learning/SVMLearning/test/otbSVMImageModelEstimatorModelAccessor.cxx
@@ -82,13 +82,13 @@ int otbSVMImageModelEstimatorModelAccessor(int itkNotUsed(argc), char* argv[])
 
   f << " - GetSupportVectors() [nb support vector][]" << std::endl;
   svm_node ** SVs = ptrModel->GetSupportVectors();
-  if (SVs == NULL)
+  if (SVs == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "SVs NULL");
     }
   for (unsigned int i = 0; i < nbSupportVector; ++i)
     {
-    if (SVs[i] == NULL) itkGenericExceptionMacro(<< "SVs " << i << " NULL");
+    if (SVs[i] == ITK_NULLPTR) itkGenericExceptionMacro(<< "SVs " << i << " NULL");
     f << std::endl;
     f << "  SV[" << i << "]:";
     const svm_node *p = SVs[i];
@@ -115,7 +115,7 @@ int otbSVMImageModelEstimatorModelAccessor(int itkNotUsed(argc), char* argv[])
   f << " - GetRho() [nr_class*(nr_class-1)/2]" << std::endl;
   unsigned int taille = nbClass * (nbClass - 1) / 2;
   double *     rhos = ptrModel->GetRho();
-  if (rhos == NULL)
+  if (rhos == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "rhos NULL");
     }
@@ -128,13 +128,13 @@ int otbSVMImageModelEstimatorModelAccessor(int itkNotUsed(argc), char* argv[])
   f << std::endl;
   f << " - GetAlpha() [nb class-1][nb support vector]" << std::endl;
   double ** alphas = ptrModel->GetAlpha();
-  if (alphas == NULL)
+  if (alphas == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "alphas NULL");
     }
   for (unsigned int i = 0; i < nbClass - 1; ++i)
     {
-    if (alphas[i] == NULL) itkGenericExceptionMacro(<< "alphas " << i << " NULL");
+    if (alphas[i] == ITK_NULLPTR) itkGenericExceptionMacro(<< "alphas " << i << " NULL");
     f << "     ";
     for (unsigned int j = 0; j < nbSupportVector; ++j)
       {
diff --git a/Modules/Learning/SVMLearning/test/otbSVMModelAccessor.cxx b/Modules/Learning/SVMLearning/test/otbSVMModelAccessor.cxx
index 4549a9c732ff60d59f2565b648da694d7f1e3d6e..5523f789697d79a15fc95be3c2a6ac2f3f7a052a 100644
--- a/Modules/Learning/SVMLearning/test/otbSVMModelAccessor.cxx
+++ b/Modules/Learning/SVMLearning/test/otbSVMModelAccessor.cxx
@@ -48,13 +48,13 @@ int otbSVMModelAccessor(int itkNotUsed(argc), char* argv[])
 
   f << " - GetSupportVectors() [nb support vector][]" << std::endl;
   svm_node ** SVs = ptrModel->GetSupportVectors();
-  if (SVs == NULL)
+  if (SVs == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "SVs NULL");
     }
   for (unsigned int i = 0; i < nbSupportVector; ++i)
     {
-    if (SVs[i] == NULL) itkGenericExceptionMacro(<< "SVs " << i << " NULL");
+    if (SVs[i] == ITK_NULLPTR) itkGenericExceptionMacro(<< "SVs " << i << " NULL");
     f << std::endl;
     f << "  SV[" << i << "]:";
     const svm_node *p = SVs[i];
@@ -69,7 +69,7 @@ int otbSVMModelAccessor(int itkNotUsed(argc), char* argv[])
   f << " - GetRho() [nr_class*(nr_class-1)/2]" << std::endl;
   unsigned int taille = nbClass * (nbClass - 1) / 2;
   double *     rhos = ptrModel->GetRho();
-  if (rhos == NULL)
+  if (rhos == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "rhos NULL");
     }
@@ -82,13 +82,13 @@ int otbSVMModelAccessor(int itkNotUsed(argc), char* argv[])
   f << std::endl;
   f << " - GetAlpha() [nb class-1][nb support vector]" << std::endl;
   double ** alphas = ptrModel->GetAlpha();
-  if (alphas == NULL)
+  if (alphas == ITK_NULLPTR)
     {
     itkGenericExceptionMacro(<< "alphas NULL");
     }
   for (unsigned int i = 0; i < nbClass - 1; ++i)
     {
-    if (alphas[i] == NULL) itkGenericExceptionMacro(<< "alphas " << i << " NULL");
+    if (alphas[i] == ITK_NULLPTR) itkGenericExceptionMacro(<< "alphas " << i << " NULL");
     f << "     ";
     for (unsigned int j = 0; j < nbSupportVector; ++j)
       {
diff --git a/Modules/Learning/Sampling/include/otbOGRDataToClassStatisticsFilter.txx b/Modules/Learning/Sampling/include/otbOGRDataToClassStatisticsFilter.txx
index 0fee32a39d6595adf774f1a876749ccefa5f9d62..2ebd0fdd505100e8ca0074f3e334aa2f32293de6 100644
--- a/Modules/Learning/Sampling/include/otbOGRDataToClassStatisticsFilter.txx
+++ b/Modules/Learning/Sampling/include/otbOGRDataToClassStatisticsFilter.txx
@@ -52,7 +52,7 @@ PersistentOGRDataToClassStatisticsFilter<TInputImage,TMaskImage>
 {
   if (this->GetNumberOfInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const otb::ogr::DataSource *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -72,7 +72,7 @@ PersistentOGRDataToClassStatisticsFilter<TInputImage,TMaskImage>
 {
   if (this->GetNumberOfInputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMaskImage *>(this->itk::ProcessObject::GetInput(2));
 }
@@ -83,7 +83,7 @@ PersistentOGRDataToClassStatisticsFilter<TInputImage,TMaskImage>
 ::Synthetize(void)
 {
   otb::ogr::DataSource* vectors = const_cast<otb::ogr::DataSource*>(this->GetOGRData());
-  vectors->GetLayer(m_LayerIndex).SetSpatialFilter(NULL);
+  vectors->GetLayer(m_LayerIndex).SetSpatialFilter(ITK_NULLPTR);
   
   ClassCountMapType &classCount = this->GetClassCountOutput()->Get();
   PolygonSizeMapType &polygonSize = this->GetPolygonSizeOutput()->Get();
@@ -129,7 +129,7 @@ PersistentOGRDataToClassStatisticsFilter<TInputImage,TMaskImage>
 {
   if (this->GetNumberOfOutputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const ClassCountObjectType *>(this->itk::ProcessObject::GetOutput(1));
 }
@@ -141,7 +141,7 @@ PersistentOGRDataToClassStatisticsFilter<TInputImage,TMaskImage>
 {
   if (this->GetNumberOfOutputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<ClassCountObjectType *>(this->itk::ProcessObject::GetOutput(1));
 }
@@ -153,7 +153,7 @@ PersistentOGRDataToClassStatisticsFilter<TInputImage,TMaskImage>
 {
   if (this->GetNumberOfOutputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const PolygonSizeObjectType *>(this->itk::ProcessObject::GetOutput(2));
 }
@@ -165,7 +165,7 @@ PersistentOGRDataToClassStatisticsFilter<TInputImage,TMaskImage>
 {
     if (this->GetNumberOfOutputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<PolygonSizeObjectType *>(this->itk::ProcessObject::GetOutput(2));
 }
diff --git a/Modules/Learning/Sampling/include/otbPolygonClassStatisticsAccumulator.txx b/Modules/Learning/Sampling/include/otbPolygonClassStatisticsAccumulator.txx
index def2370b43e3f419a3c0e2f32854150b623f8de8..dd5ce69797b09d22b62dc8dd08084252b3c529fd 100644
--- a/Modules/Learning/Sampling/include/otbPolygonClassStatisticsAccumulator.txx
+++ b/Modules/Learning/Sampling/include/otbPolygonClassStatisticsAccumulator.txx
@@ -71,7 +71,7 @@ PolygonClassStatisticsAccumulator
     case wkbPoint25D:
       {
       OGRPoint* castPoint = dynamic_cast<OGRPoint*>(geom);
-      if (castPoint == NULL)
+      if (castPoint == ITK_NULLPTR)
         {
         // Wrong Type !
         break;
diff --git a/Modules/Learning/Supervised/include/otbBoostMachineLearningModel.txx b/Modules/Learning/Supervised/include/otbBoostMachineLearningModel.txx
index dfd656a223f1275056c8b6d06310a5c56b527cea..8d20ca5f7f5d16068ed2b136e6e53791d59c71d8 100644
--- a/Modules/Learning/Supervised/include/otbBoostMachineLearningModel.txx
+++ b/Modules/Learning/Supervised/include/otbBoostMachineLearningModel.txx
@@ -61,7 +61,7 @@ BoostMachineLearningModel<TInputValue,TOutputValue>
   cv::Mat labels;
   otb::ListSampleToMat<TargetListSampleType>(this->GetTargetListSample(),labels);
 
-  CvBoostParams params = CvBoostParams(m_BoostType, m_WeakCount, m_WeightTrimRate, m_MaxDepth, false, 0);
+  CvBoostParams params = CvBoostParams(m_BoostType, m_WeakCount, m_WeightTrimRate, m_MaxDepth, false, ITK_NULLPTR);
   params.split_criteria = m_SplitCrit;
 
   //train the Boost model
@@ -92,7 +92,7 @@ BoostMachineLearningModel<TInputValue,TOutputValue>
 
   target[0] = static_cast<TOutputValue>(result);
 
-  if (quality != NULL)
+  if (quality != ITK_NULLPTR)
     {
     (*quality) = static_cast<ConfidenceValueType>(
       m_BoostModel->predict(sample,missing,cv::Range::all(),false,true));
@@ -107,7 +107,7 @@ BoostMachineLearningModel<TInputValue,TOutputValue>
 ::Save(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_BoostModel->save(filename.c_str(), 0);
+    m_BoostModel->save(filename.c_str(), ITK_NULLPTR);
   else
     m_BoostModel->save(filename.c_str(), name.c_str());
 }
@@ -118,7 +118,7 @@ BoostMachineLearningModel<TInputValue,TOutputValue>
 ::Load(const std::string & filename, const std::string & name)
 {
   if (name == "")
-      m_BoostModel->load(filename.c_str(), 0);
+      m_BoostModel->load(filename.c_str(), ITK_NULLPTR);
   else
       m_BoostModel->load(filename.c_str(), name.c_str());
 }
diff --git a/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModel.txx b/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModel.txx
index ddaf2e871f8b575ab28966f6c47b0c4b48926cde..07ce3a1129c93a9225e9dae06b4c208779a6093b 100644
--- a/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModel.txx
+++ b/Modules/Learning/Supervised/include/otbDecisionTreeMachineLearningModel.txx
@@ -64,7 +64,7 @@ DecisionTreeMachineLearningModel<TInputValue,TOutputValue>
   cv::Mat labels;
   otb::ListSampleToMat<TargetListSampleType>(this->GetTargetListSample(),labels);
 
-  float * priors = m_Priors.empty() ? 0 : &m_Priors.front();
+  float * priors = m_Priors.empty() ? ITK_NULLPTR : &m_Priors.front();
 
   CvDTreeParams params = CvDTreeParams(m_MaxDepth, m_MinSampleCount, m_RegressionAccuracy,
                                        m_UseSurrogates, m_MaxCategories, m_CVFolds, m_Use1seRule, m_TruncatePrunedTree, priors);
@@ -96,7 +96,7 @@ DecisionTreeMachineLearningModel<TInputValue,TOutputValue>
 
   target[0] = static_cast<TOutputValue>(result);
 
-  if (quality != NULL)
+  if (quality != ITK_NULLPTR)
     {
     if (!this->m_ConfidenceIndex)
       {
@@ -113,7 +113,7 @@ DecisionTreeMachineLearningModel<TInputValue,TOutputValue>
 ::Save(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_DTreeModel->save(filename.c_str(), 0);
+    m_DTreeModel->save(filename.c_str(), ITK_NULLPTR);
   else
     m_DTreeModel->save(filename.c_str(), name.c_str());
 }
@@ -124,7 +124,7 @@ DecisionTreeMachineLearningModel<TInputValue,TOutputValue>
 ::Load(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_DTreeModel->load(filename.c_str(), 0);
+    m_DTreeModel->load(filename.c_str(), ITK_NULLPTR);
   else
     m_DTreeModel->load(filename.c_str(), name.c_str());
 }
diff --git a/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModel.txx b/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModel.txx
index 49451c7be681596964bdb8ca4ecf0355753800e0..53e6931575e6f134115a21d5587fa7a006a8f173 100644
--- a/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModel.txx
+++ b/Modules/Learning/Supervised/include/otbGradientBoostedTreeMachineLearningModel.txx
@@ -92,7 +92,7 @@ GradientBoostedTreeMachineLearningModel<TInputValue,TOutputValue>
 
   target[0] = static_cast<TOutputValue>(result);
 
-  if (quality != NULL)
+  if (quality != ITK_NULLPTR)
     {
     if (!this->m_ConfidenceIndex)
       {
@@ -109,7 +109,7 @@ GradientBoostedTreeMachineLearningModel<TInputValue,TOutputValue>
 ::Save(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_GBTreeModel->save(filename.c_str(), 0);
+    m_GBTreeModel->save(filename.c_str(), ITK_NULLPTR);
   else
     m_GBTreeModel->save(filename.c_str(), name.c_str());
 }
@@ -120,7 +120,7 @@ GradientBoostedTreeMachineLearningModel<TInputValue,TOutputValue>
 ::Load(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_GBTreeModel->load(filename.c_str(), 0);
+    m_GBTreeModel->load(filename.c_str(), ITK_NULLPTR);
   else
     m_GBTreeModel->load(filename.c_str(), name.c_str());
 }
diff --git a/Modules/Learning/Supervised/include/otbImageClassificationFilter.txx b/Modules/Learning/Supervised/include/otbImageClassificationFilter.txx
index 95c00b5a1b2850d2af614bf9f26963b280ba6903..72614862a991acc87bd75ed14ff4e6d3fdc103cb 100644
--- a/Modules/Learning/Supervised/include/otbImageClassificationFilter.txx
+++ b/Modules/Learning/Supervised/include/otbImageClassificationFilter.txx
@@ -57,7 +57,7 @@ ImageClassificationFilter<TInputImage, TOutputImage, TMaskImage>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const MaskImageType *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -70,7 +70,7 @@ ImageClassificationFilter<TInputImage, TOutputImage, TMaskImage>
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<ConfidenceImageType *>(this->itk::ProcessObject::GetOutput(1));
 }
diff --git a/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModel.txx b/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModel.txx
index 83b55bb7a2ffa33945252ee9ec8adb06b40cc429..2a6705d1aa1aa5093d50201fe06731318f97ce38 100644
--- a/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModel.txx
+++ b/Modules/Learning/Supervised/include/otbKNearestNeighborsMachineLearningModel.txx
@@ -93,10 +93,10 @@ KNearestNeighborsMachineLearningModel<TInputValue,TTargetValue>
 
   float result;
   cv::Mat nearest(1,m_K,CV_32FC1);
-  result = m_KNearestModel->find_nearest(sample, m_K,0,0,&nearest,0);
+  result = m_KNearestModel->find_nearest(sample, m_K,ITK_NULLPTR,ITK_NULLPTR,&nearest,ITK_NULLPTR);
 
   // compute quality if asked (only happens in classification mode)
-  if (quality != NULL)
+  if (quality != ITK_NULLPTR)
     {
     assert(!this->m_RegressionMode);
     unsigned int accuracy = 0;
diff --git a/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModel.txx b/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModel.txx
index 443f35571780d29a0fefb3b19fe5cdc347735104..70da67ed4ef9dea8dd124f0b6e5844f9545bcf13 100644
--- a/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModel.txx
+++ b/Modules/Learning/Supervised/include/otbLibSVMMachineLearningModel.txx
@@ -79,7 +79,7 @@ LibSVMMachineLearningModel<TInputValue,TOutputValue>
 
   target = m_SVMestimator->GetModel()->EvaluateLabel(mfunctor(input));
 
-  if (quality != NULL)
+  if (quality != ITK_NULLPTR)
     {
     if (!this->m_ConfidenceIndex)
       {
diff --git a/Modules/Learning/Supervised/include/otbMachineLearningModel.h b/Modules/Learning/Supervised/include/otbMachineLearningModel.h
index dea22a6177ed7c7f152c9ac314679954200a265a..3bc693cbc459fa35cb39821fe19ceed663b210ec 100644
--- a/Modules/Learning/Supervised/include/otbMachineLearningModel.h
+++ b/Modules/Learning/Supervised/include/otbMachineLearningModel.h
@@ -100,7 +100,7 @@ public:
   virtual void Train() =0;
 
   /** Predict values using the model */
-  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality = NULL) const = 0;
+  virtual TargetSampleType Predict(const InputSampleType& input, ConfidenceValueType *quality = ITK_NULLPTR) const = 0;
 
   /** Classify all samples in InputListSample and fill TargetListSample with the associated label */
   void PredictAll();
diff --git a/Modules/Learning/Supervised/include/otbMachineLearningModelFactory.txx b/Modules/Learning/Supervised/include/otbMachineLearningModelFactory.txx
index 7fe0d4301ec2140673fe1add92107798edd75b38..627c30b58e05bb1cd35420c176baa9b1cbcc403d 100644
--- a/Modules/Learning/Supervised/include/otbMachineLearningModelFactory.txx
+++ b/Modules/Learning/Supervised/include/otbMachineLearningModelFactory.txx
@@ -81,7 +81,7 @@ for(typename std::list<MachineLearningModelTypePointer>::iterator k = possibleMa
 
       }
     }
-  return 0;
+  return ITK_NULLPTR;
 }
 
 template <class TInputValue, class TOutputValue>
diff --git a/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModel.txx b/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModel.txx
index 7be83ac9904336b019b66459cc3b2d7b3c1c521d..508118a7b958cbfd3e0680fe79d4617068385d4e 100644
--- a/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModel.txx
+++ b/Modules/Learning/Supervised/include/otbNeuralNetworkMachineLearningModel.txx
@@ -40,7 +40,7 @@ NeuralNetworkMachineLearningModel<TInputValue, TOutputValue>::NeuralNetworkMachi
   m_TermCriteriaType(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS),
   m_MaxIter(1000),
   m_Epsilon(0.01),
-  m_CvMatOfLabels(0)
+  m_CvMatOfLabels(ITK_NULLPTR)
 {
   this->m_ConfidenceIndex = true;
   this->m_IsRegressionSupported = true;
@@ -74,7 +74,7 @@ void NeuralNetworkMachineLearningModel<TInputValue, TOutputValue>::LabelsToMat(c
                                                                                cv::Mat & output)
 {
   unsigned int nbSamples = 0;
-  if (labels != NULL)
+  if (labels != ITK_NULLPTR)
     {
     nbSamples = labels->Size();
     }
@@ -244,7 +244,7 @@ typename NeuralNetworkMachineLearningModel<TInputValue, TOutputValue>::TargetSam
       }
     }
 
-  if (quality != NULL)
+  if (quality != ITK_NULLPTR)
     {
     (*quality) = static_cast<ConfidenceValueType>(maxResponse) - static_cast<ConfidenceValueType>(secondResponse);
     }
@@ -260,8 +260,8 @@ void NeuralNetworkMachineLearningModel<TInputValue, TOutputValue>::Save(const st
   if ( !name.empty() )
     lname = name.c_str();
 
-  CvFileStorage* fs = 0;
-  fs = cvOpenFileStorage(filename.c_str(), 0, CV_STORAGE_WRITE);
+  CvFileStorage* fs = ITK_NULLPTR;
+  fs = cvOpenFileStorage(filename.c_str(), ITK_NULLPTR, CV_STORAGE_WRITE);
   if ( !fs )
     {
     itkExceptionMacro("Could not open the file " << filename << " for writing");
@@ -277,7 +277,7 @@ template<class TInputValue, class TOutputValue>
 void NeuralNetworkMachineLearningModel<TInputValue, TOutputValue>::Load(const std::string & filename,
                                                                         const std::string & name)
 {
-  const char* lname = 0;
+  const char* lname = ITK_NULLPTR;
   if ( !name.empty() )
     lname = name.c_str();
 
diff --git a/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModel.txx b/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModel.txx
index cb10272f71d45f5e1c7738b196aeb21a2da6e21e..b4ef2c295546a8cc3b9ba003ea091f31a9d0d2a6 100644
--- a/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModel.txx
+++ b/Modules/Learning/Supervised/include/otbNormalBayesMachineLearningModel.txx
@@ -76,7 +76,7 @@ NormalBayesMachineLearningModel<TInputValue,TOutputValue>
 
   target[0] = static_cast<TOutputValue>(result);
 
-  if (quality != NULL)
+  if (quality != ITK_NULLPTR)
     {
     if (!this->HasConfidenceIndex())
       {
@@ -93,7 +93,7 @@ NormalBayesMachineLearningModel<TInputValue,TOutputValue>
 ::Save(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_NormalBayesModel->save(filename.c_str(), 0);
+    m_NormalBayesModel->save(filename.c_str(), ITK_NULLPTR);
   else
     m_NormalBayesModel->save(filename.c_str(), name.c_str());
 }
@@ -104,7 +104,7 @@ NormalBayesMachineLearningModel<TInputValue,TOutputValue>
 ::Load(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_NormalBayesModel->load(filename.c_str(), 0);
+    m_NormalBayesModel->load(filename.c_str(), ITK_NULLPTR);
   else
     m_NormalBayesModel->load(filename.c_str(), name.c_str());
 }
diff --git a/Modules/Learning/Supervised/include/otbOpenCVUtils.h b/Modules/Learning/Supervised/include/otbOpenCVUtils.h
index 2a7720a42b98c4cda164ba34072a2089cda99e2a..01ee23f57c734c0b8d44b199c383ac1f992b2ebd 100644
--- a/Modules/Learning/Supervised/include/otbOpenCVUtils.h
+++ b/Modules/Learning/Supervised/include/otbOpenCVUtils.h
@@ -66,7 +66,7 @@ namespace otb
     unsigned int sampleIdx = 0;
 
     // Check for valid listSample
-    if(listSample != NULL && listSample->Size() > 0)
+    if(listSample != ITK_NULLPTR && listSample->Size() > 0)
       {
        // Retrieve samples count
        unsigned int sampleCount = listSample->Size();
diff --git a/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModel.txx b/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModel.txx
index be24152a2390c0c2245c6fd1162e01be1898c623..cb95be8e75b5edfaa0893c0f6f61050c3b339fb2 100644
--- a/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModel.txx
+++ b/Modules/Learning/Supervised/include/otbRandomForestsMachineLearningModel.txx
@@ -79,7 +79,7 @@ RandomForestsMachineLearningModel<TInputValue,TOutputValue>
   //Define random forests paramneters
   //FIXME do this in the constructor?
 
-  float * priors = m_Priors.empty() ? 0 : &m_Priors.front();
+  float * priors = m_Priors.empty() ? ITK_NULLPTR : &m_Priors.front();
 
   CvRTParams params = CvRTParams(m_MaxDepth,                    // max depth
                                  m_MinSampleCount,              // min sample count
@@ -124,7 +124,7 @@ RandomForestsMachineLearningModel<TInputValue,TOutputValue>
 
   target[0] = static_cast<TOutputValue>(result);
 
-  if (quality != NULL)
+  if (quality != ITK_NULLPTR)
     {
     if(m_ComputeMargin)
       (*quality) = m_RFModel->predict_margin(sample);
@@ -141,7 +141,7 @@ RandomForestsMachineLearningModel<TInputValue,TOutputValue>
 ::Save(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_RFModel->save(filename.c_str(), 0);
+    m_RFModel->save(filename.c_str(), ITK_NULLPTR);
   else
     m_RFModel->save(filename.c_str(), name.c_str());
 }
@@ -152,7 +152,7 @@ RandomForestsMachineLearningModel<TInputValue,TOutputValue>
 ::Load(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_RFModel->load(filename.c_str(), 0);
+    m_RFModel->load(filename.c_str(), ITK_NULLPTR);
   else
     m_RFModel->load(filename.c_str(), name.c_str());
 }
diff --git a/Modules/Learning/Supervised/include/otbSVMMachineLearningModel.txx b/Modules/Learning/Supervised/include/otbSVMMachineLearningModel.txx
index df4aace3d26b7c7ebcbc6d2f15873569f76457b9..57006ce0d7945dcf6fdc8a38ea28d5a5e7940d19 100644
--- a/Modules/Learning/Supervised/include/otbSVMMachineLearningModel.txx
+++ b/Modules/Learning/Supervised/include/otbSVMMachineLearningModel.txx
@@ -84,7 +84,7 @@ SVMMachineLearningModel<TInputValue,TOutputValue>
 
   // Set up SVM's parameters
   CvTermCriteria term_crit   = cvTermCriteria(m_TermCriteriaType, m_MaxIter, m_Epsilon);
-  CvSVMParams params( m_SVMType, m_KernelType, m_Degree, m_Gamma, m_Coef0, m_C, m_Nu, m_P, NULL , term_crit );
+  CvSVMParams params( m_SVMType, m_KernelType, m_Degree, m_Gamma, m_Coef0, m_C, m_Nu, m_P, ITK_NULLPTR , term_crit );
 
   // Train the SVM
   if (!m_ParameterOptimization)
@@ -131,7 +131,7 @@ SVMMachineLearningModel<TInputValue,TOutputValue>
 
   target[0] = static_cast<TOutputValue>(result);
 
-  if (quality != NULL)
+  if (quality != ITK_NULLPTR)
     {
     (*quality) = m_SVMModel->predict(sample,true);
     }
@@ -145,7 +145,7 @@ SVMMachineLearningModel<TInputValue,TOutputValue>
 ::Save(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_SVMModel->save(filename.c_str(), 0);
+    m_SVMModel->save(filename.c_str(), ITK_NULLPTR);
   else
     m_SVMModel->save(filename.c_str(), name.c_str());
 }
@@ -156,7 +156,7 @@ SVMMachineLearningModel<TInputValue,TOutputValue>
 ::Load(const std::string & filename, const std::string & name)
 {
   if (name == "")
-    m_SVMModel->load(filename.c_str(), 0);
+    m_SVMModel->load(filename.c_str(), ITK_NULLPTR);
   else
     m_SVMModel->load(filename.c_str(), name.c_str());
 }
diff --git a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.txx b/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.txx
index 2a93c2adb6b35b92575953825d49e6cf5dafb103..823c6f8ce4fd992b4b74fb0437a471f19e4cca4d 100644
--- a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.txx
+++ b/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.txx
@@ -56,7 +56,7 @@ ImageListToRCC8GraphFilter<TInputImage, TOutputGraph>
   if (this->GetNumberOfInputs() < 1)
     {
     // exit
-    return 0;
+    return ITK_NULLPTR;
     }
   // else return the first input
   return static_cast<InputImageListType *>
diff --git a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.txx b/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.txx
index a2819f97b8619d1b4b4b7f98d086d0a59c18cb33..0a23937ce71d66960d174c6729ffc26cdc265c22 100644
--- a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.txx
+++ b/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.txx
@@ -59,7 +59,7 @@ PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TPolygonList *>
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.txx b/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.txx
index af908a965b13efc238c1fbc6254d803f1f8a3c79..abbf30b885d3d4493da708784cd907ec3adfc039 100644
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.txx
+++ b/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.txx
@@ -92,7 +92,7 @@ RCC8GraphFileWriter<TInputGraph>
   itkDebugMacro(<< "Writing a RCC8Graph file");
 
   // Make sure input is available
-  if (input == 0)
+  if (input == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "No input to writer!");
     }
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.txx b/Modules/OBIA/RCC8/include/otbRCC8GraphSource.txx
index a3ea3d05193d15166cacc8278a8f30841643f0bb..4768504d6f703159accec7cec08f26bd3dc1441b 100644
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.txx
+++ b/Modules/OBIA/RCC8/include/otbRCC8GraphSource.txx
@@ -43,7 +43,7 @@ RCC8GraphSource<TOutputGraph>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputGraphType *> (this->ProcessObject::GetOutput(0));
 }
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToSurfaceReflectanceImageFilter.txx b/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToSurfaceReflectanceImageFilter.txx
index f17f85d3f74c369be07648daaac3f3948acc2a2d..5ca467736311c21a769c58756008dd026a330b53 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToSurfaceReflectanceImageFilter.txx
+++ b/Modules/Radiometry/OpticalCalibration/include/otbReflectanceToSurfaceReflectanceImageFilter.txx
@@ -84,7 +84,7 @@ void
 ReflectanceToSurfaceReflectanceImageFilter<TInputImage, TOutputImage>
 ::UpdateAtmosphericRadiativeTerms()
  {
-  if (this->GetInput() == NULL)
+  if (this->GetInput() == ITK_NULLPTR)
     {
       itkExceptionMacro(<< "Input must be set before updating the atmospheric radiative terms");
     }
@@ -161,7 +161,7 @@ ReflectanceToSurfaceReflectanceImageFilter<TInputImage, TOutputImage>
 ::UpdateFunctors()
  {
 
-  if (this->GetInput() == NULL)
+  if (this->GetInput() == ITK_NULLPTR)
     {
     itkExceptionMacro(<< "Input must be set before updating the functors");
     }
diff --git a/Modules/Radiometry/OpticalCalibration/include/otbSurfaceAdjacencyEffectCorrectionSchemeFilter.txx b/Modules/Radiometry/OpticalCalibration/include/otbSurfaceAdjacencyEffectCorrectionSchemeFilter.txx
index fc1be89537bc1be22700895f003ac6201bc977b6..b91d7f59e611ad9d7649fa3612daf9b91e13f2a9 100644
--- a/Modules/Radiometry/OpticalCalibration/include/otbSurfaceAdjacencyEffectCorrectionSchemeFilter.txx
+++ b/Modules/Radiometry/OpticalCalibration/include/otbSurfaceAdjacencyEffectCorrectionSchemeFilter.txx
@@ -79,7 +79,7 @@ void
 SurfaceAdjacencyEffectCorrectionSchemeFilter<TInputImage, TOutputImage>
 ::UpdateAtmosphericRadiativeTerms()
 {
-  if (this->GetInput() == NULL)
+  if (this->GetInput() == ITK_NULLPTR)
     {
       itkExceptionMacro(<< "Input must be set before updating the atmospheric radiative terms");
     }
diff --git a/Modules/Radiometry/OpticalCalibration/src/otbAeronetFileReader.cxx b/Modules/Radiometry/OpticalCalibration/src/otbAeronetFileReader.cxx
index e212a8989b584317d3c5c32bc9813eebecaf377c..4d77bab074cc60aa6966e9eb628fa964fdb2b2ca 100644
--- a/Modules/Radiometry/OpticalCalibration/src/otbAeronetFileReader.cxx
+++ b/Modules/Radiometry/OpticalCalibration/src/otbAeronetFileReader.cxx
@@ -101,7 +101,7 @@ AeronetFileReader
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<AeronetData *> (this->ProcessObject::GetOutput(0));
 }
diff --git a/Modules/Radiometry/OpticalCalibration/src/otbSIXSTraits.cxx b/Modules/Radiometry/OpticalCalibration/src/otbSIXSTraits.cxx
index 78f6a2f070c9f81c1dbc466b6b31123ce9b7a9f4..44cbd60b4f29d82db2786be3f1a6d9877c5c08d8 100644
--- a/Modules/Radiometry/OpticalCalibration/src/otbSIXSTraits.cxx
+++ b/Modules/Radiometry/OpticalCalibration/src/otbSIXSTraits.cxx
@@ -98,7 +98,7 @@ SIXSTraits::ComputeAtmosphericParameters(
     otb_6s_integer iinf =
       static_cast<otb_6s_integer>((wlinf - (float) .25) / SIXSStepOfWavelengthSpectralBandValues + (float) 1.5);
     otb_6s_integer      cpt = iinf - 1;
-    otb_6s_doublereal * s(NULL);
+    otb_6s_doublereal * s(ITK_NULLPTR);
     s = new otb_6s_doublereal[S_6S_SIZE];
     memset(s, 0, S_6S_SIZE * sizeof(otb_6s_doublereal));
     const ValuesVectorType& FilterFunctionValues6S = WavelengthSpectralBand->GetFilterFunctionValues6S();
@@ -128,7 +128,7 @@ SIXSTraits::ComputeAtmosphericParameters(
                                     &tdif_up_aer);
     otbMsgDevMacro(<< "Done call 6S main function!");
     delete[] s;
-    s = NULL;
+    s = ITK_NULLPTR;
     }
   catch (std::bad_alloc& err)
     {
diff --git a/Modules/Radiometry/OpticalCalibration/src/otbSpectralSensitivityReader.cxx b/Modules/Radiometry/OpticalCalibration/src/otbSpectralSensitivityReader.cxx
index 403bbe65875691356cbf36df36118b10f8fcadfe..a61a70717cf1f2460280306f37034a29fc6d749e 100644
--- a/Modules/Radiometry/OpticalCalibration/src/otbSpectralSensitivityReader.cxx
+++ b/Modules/Radiometry/OpticalCalibration/src/otbSpectralSensitivityReader.cxx
@@ -50,7 +50,7 @@ SpectralSensitivityReader
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<WavelengthSpectralBandVectorType *> (this->ProcessObject::GetOutput(0));
 }
@@ -61,7 +61,7 @@ SpectralSensitivityReader
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const WavelengthSpectralBandVectorType *> (this->ProcessObject::GetOutput(0));
 }
diff --git a/Modules/Radiometry/OpticalCalibration/test/otbSIXSTraitsTest.cxx b/Modules/Radiometry/OpticalCalibration/test/otbSIXSTraitsTest.cxx
index 1e45bbf7f0786d63a22901528ec01b0d9cf6182d..84db26dec399649133c843f31c12104ca4b69aab 100644
--- a/Modules/Radiometry/OpticalCalibration/test/otbSIXSTraitsTest.cxx
+++ b/Modules/Radiometry/OpticalCalibration/test/otbSIXSTraitsTest.cxx
@@ -20,7 +20,7 @@
 
 int otbSIXSTraitsTest(int itkNotUsed(argc), char * itkNotUsed(argv)[])
 {
-  otb::SIXSTraits *var(NULL);
+  otb::SIXSTraits *var(ITK_NULLPTR);
   var = new otb::SIXSTraits();
   delete var;
   return EXIT_SUCCESS;
diff --git a/Modules/Radiometry/Simulation/include/otbReduceSpectralResponse.txx b/Modules/Radiometry/Simulation/include/otbReduceSpectralResponse.txx
index 7484c17a818deedf41a19d1e13a23430b63778e5..3105b757c33235c59e7db09f7fe84ac9be6e0543 100644
--- a/Modules/Radiometry/Simulation/include/otbReduceSpectralResponse.txx
+++ b/Modules/Radiometry/Simulation/include/otbReduceSpectralResponse.txx
@@ -81,7 +81,7 @@ ReduceSpectralResponse<TSpectralResponse , TRSR>
 
     if(m_ReflectanceMode)
       {
-      if (solarIrradiance == 0)
+      if (solarIrradiance == ITK_NULLPTR)
         {
         itkExceptionMacro(<<"Error occurs getting solar irradiance. Solar irradiance is mandatory using the reflectance mode.");
         }
diff --git a/Modules/Radiometry/Simulation/include/otbSurfaceReflectanceToReflectanceFilter.txx b/Modules/Radiometry/Simulation/include/otbSurfaceReflectanceToReflectanceFilter.txx
index 8ead55df919d57e8109f545daf7e50144e8a3c78..0f0aa8160aa4ffee115c44515a3a3b747f1ecdd7 100644
--- a/Modules/Radiometry/Simulation/include/otbSurfaceReflectanceToReflectanceFilter.txx
+++ b/Modules/Radiometry/Simulation/include/otbSurfaceReflectanceToReflectanceFilter.txx
@@ -46,7 +46,7 @@ void
 SurfaceReflectanceToReflectanceFilter<TInputImage, TOutputImage>
 ::UpdateAtmosphericRadiativeTerms()
 {
-  if (this->GetInput() == NULL)
+  if (this->GetInput() == ITK_NULLPTR)
     {
       itkExceptionMacro(<< "Input must be set before updating the atmospheric radiative terms");
     }
diff --git a/Modules/Radiometry/Simulation/src/otbProspectModel.cxx b/Modules/Radiometry/Simulation/src/otbProspectModel.cxx
index 71edbf4d3a09db46bb177bdb46c2c74ae7f3b338..ea1525bf74a3dba4360dc7d21b8b444360efc1bf 100644
--- a/Modules/Radiometry/Simulation/src/otbProspectModel.cxx
+++ b/Modules/Radiometry/Simulation/src/otbProspectModel.cxx
@@ -64,7 +64,7 @@ ProspectModel
    if(this->GetNumberOfInputs() != 1)
    {
       //exit
-      return 0;
+      return ITK_NULLPTR;
    }
    return static_cast<LeafParametersType *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -85,7 +85,7 @@ ProspectModel
    if(this->GetNumberOfOutputs() < 2)
    {
       //exit
-      return 0;
+      return ITK_NULLPTR;
    }
    return static_cast<SpectralResponseType *>(this->itk::ProcessObject::GetOutput(0));
 }
@@ -98,7 +98,7 @@ ProspectModel
    if(this->GetNumberOfOutputs() < 2)
    {
       //exit
-      return 0;
+      return ITK_NULLPTR;
    }
    return static_cast<SpectralResponseType *>(this->itk::ProcessObject::GetOutput(1));
 }
diff --git a/Modules/Radiometry/Simulation/src/otbSailModel.cxx b/Modules/Radiometry/Simulation/src/otbSailModel.cxx
index 2d6b66fae20177039eeb8e5a56f847832fc331bb..94fb477e827156eb5719e7e0b0776183b22699f7 100644
--- a/Modules/Radiometry/Simulation/src/otbSailModel.cxx
+++ b/Modules/Radiometry/Simulation/src/otbSailModel.cxx
@@ -69,7 +69,7 @@ SailModel
    if(this->GetNumberOfInputs() != 2)
    {
       //exit
-      return 0;
+      return ITK_NULLPTR;
    }
    return static_cast<SpectralResponseType *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -89,7 +89,7 @@ SailModel
    if(this->GetNumberOfInputs() != 2)
    {
       //exit
-      return 0;
+      return ITK_NULLPTR;
    }
    return static_cast<SpectralResponseType *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -110,7 +110,7 @@ SailModel
    if(this->GetNumberOfOutputs() < 4)
    {
       //exit
-      return 0;
+      return ITK_NULLPTR;
    }
    return static_cast<SpectralResponseType *>(this->itk::ProcessObject::GetOutput(0));
 }
@@ -123,7 +123,7 @@ SailModel
    if(this->GetNumberOfOutputs() < 4)
    {
       //exit
-      return 0;
+      return ITK_NULLPTR;
    }
    return static_cast<SpectralResponseType *>(this->itk::ProcessObject::GetOutput(1));
 }
@@ -136,7 +136,7 @@ SailModel
    if(this->GetNumberOfOutputs() < 4)
    {
       //exit
-      return 0;
+      return ITK_NULLPTR;
    }
    return static_cast<SpectralResponseType *>(this->itk::ProcessObject::GetOutput(2));
 }
@@ -149,7 +149,7 @@ SailModel
    if(this->GetNumberOfOutputs() < 4)
    {
       //exit
-      return 0;
+      return ITK_NULLPTR;
    }
    return static_cast<SpectralResponseType *>(this->itk::ProcessObject::GetOutput(3));
 }
diff --git a/Modules/Registration/DisparityMap/include/otbDisparityMapEstimationMethod.txx b/Modules/Registration/DisparityMap/include/otbDisparityMapEstimationMethod.txx
index 91e84ea592c3acfbf909952a6d88b336414c47d3..ffd6e10d2469691366ec40df27704c981a8056ad 100644
--- a/Modules/Registration/DisparityMap/include/otbDisparityMapEstimationMethod.txx
+++ b/Modules/Registration/DisparityMap/include/otbDisparityMapEstimationMethod.txx
@@ -39,10 +39,10 @@ DisparityMapEstimationMethod<TFixedImage, TMovingImage, TPointSet>
   //this->SetNumberOfRequiredOutputs(1);
   // this->SetReleaseDataFlag(false);
   this->SetReleaseDataBeforeUpdateFlag(false);
-  m_Transform    = 0; // has to be provided by the user.
-  m_Interpolator = 0; // has to be provided by the user.
-  m_Metric       = 0; // has to be provided by the user.
-  m_Optimizer    = 0; // has to be provided by the user.
+  m_Transform    = ITK_NULLPTR; // has to be provided by the user.
+  m_Interpolator = ITK_NULLPTR; // has to be provided by the user.
+  m_Metric       = ITK_NULLPTR; // has to be provided by the user.
+  m_Optimizer    = ITK_NULLPTR; // has to be provided by the user.
   m_WinSize.Fill(15);
   m_ExploSize.Fill(10);
   m_InitialTransformParameters = ParametersType(1);
diff --git a/Modules/Registration/DisparityMap/include/otbDisparityMapMedianFilter.txx b/Modules/Registration/DisparityMap/include/otbDisparityMapMedianFilter.txx
index e0de95814d9ef894a4807d08b1206d420f2127d2..d924888bbc9e623d28f7a1c3d27e170daf2bb127 100644
--- a/Modules/Registration/DisparityMap/include/otbDisparityMapMedianFilter.txx
+++ b/Modules/Registration/DisparityMap/include/otbDisparityMapMedianFilter.txx
@@ -61,7 +61,7 @@ DisparityMapMedianFilter<TInputImage, TOutputImage, TMask>
 {
   if (this->GetNumberOfInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMask *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -73,7 +73,7 @@ DisparityMapMedianFilter<TInputImage, TOutputImage, TMask>
 {
   if (this->GetNumberOfOutputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TMask *>(this->itk::ProcessObject::GetOutput(1));
 }
@@ -86,7 +86,7 @@ DisparityMapMedianFilter<TInputImage, TOutputImage, TMask>
 {
   if (this->GetNumberOfOutputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TOutputImage *>(this->itk::ProcessObject::GetOutput(2));
 }
@@ -98,7 +98,7 @@ DisparityMapMedianFilter<TInputImage, TOutputImage, TMask>
 {
   if (this->GetNumberOfOutputs()<4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TMask *>(this->itk::ProcessObject::GetOutput(3));
 }
diff --git a/Modules/Registration/DisparityMap/include/otbDisparityMapTo3DFilter.txx b/Modules/Registration/DisparityMap/include/otbDisparityMapTo3DFilter.txx
index 80a2b6fdee5535c7df96f0635c11d2be898a3b09..1278d5c34cf8063e109b8b4d39630772ae665ee4 100644
--- a/Modules/Registration/DisparityMap/include/otbDisparityMapTo3DFilter.txx
+++ b/Modules/Registration/DisparityMap/include/otbDisparityMapTo3DFilter.txx
@@ -103,7 +103,7 @@ DisparityMapTo3DFilter<TDisparityImage,TOutputImage,TEpipolarGridImage,TMaskImag
 {
   if(this->GetNumberOfInputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -116,7 +116,7 @@ DisparityMapTo3DFilter<TDisparityImage,TOutputImage,TEpipolarGridImage,TMaskImag
 {
   if(this->GetNumberOfInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -129,7 +129,7 @@ DisparityMapTo3DFilter<TDisparityImage,TOutputImage,TEpipolarGridImage,TMaskImag
 {
   if(this->GetNumberOfInputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TEpipolarGridImage *>(this->itk::ProcessObject::GetInput(2));
 }
@@ -142,7 +142,7 @@ DisparityMapTo3DFilter<TDisparityImage,TOutputImage,TEpipolarGridImage,TMaskImag
 {
   if(this->GetNumberOfInputs()<4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TEpipolarGridImage *>(this->itk::ProcessObject::GetInput(3));
 }
@@ -155,7 +155,7 @@ DisparityMapTo3DFilter<TDisparityImage,TOutputImage,TEpipolarGridImage,TMaskImag
 {
   if(this->GetNumberOfInputs()<5)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMaskImage *>(this->itk::ProcessObject::GetInput(4));
 }
diff --git a/Modules/Registration/DisparityMap/include/otbDisparityMapToDEMFilter.txx b/Modules/Registration/DisparityMap/include/otbDisparityMapToDEMFilter.txx
index cb729c9ec51ab78780dca01fa1d7bdcd89572b2e..900addc6432961f0362c45374ffa769d54cc6dd5 100644
--- a/Modules/Registration/DisparityMap/include/otbDisparityMapToDEMFilter.txx
+++ b/Modules/Registration/DisparityMap/include/otbDisparityMapToDEMFilter.txx
@@ -131,7 +131,7 @@ DisparityMapToDEMFilter<TDisparityImage,TInputImage,TOutputDEMImage,TEpipolarGri
 {
   if(this->GetNumberOfInputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -144,7 +144,7 @@ DisparityMapToDEMFilter<TDisparityImage,TInputImage,TOutputDEMImage,TEpipolarGri
 {
   if(this->GetNumberOfInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -157,7 +157,7 @@ DisparityMapToDEMFilter<TDisparityImage,TInputImage,TOutputDEMImage,TEpipolarGri
 {
   if(this->GetNumberOfInputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(2));
 }
@@ -170,7 +170,7 @@ DisparityMapToDEMFilter<TDisparityImage,TInputImage,TOutputDEMImage,TEpipolarGri
 {
   if(this->GetNumberOfInputs()<4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(3));
 }
@@ -183,7 +183,7 @@ DisparityMapToDEMFilter<TDisparityImage,TInputImage,TOutputDEMImage,TEpipolarGri
 {
   if(this->GetNumberOfInputs()<5)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TEpipolarGridImage *>(this->itk::ProcessObject::GetInput(4));
 }
@@ -196,7 +196,7 @@ DisparityMapToDEMFilter<TDisparityImage,TInputImage,TOutputDEMImage,TEpipolarGri
 {
   if(this->GetNumberOfInputs()<6)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TEpipolarGridImage *>(this->itk::ProcessObject::GetInput(5));
 }
@@ -209,7 +209,7 @@ DisparityMapToDEMFilter<TDisparityImage,TInputImage,TOutputDEMImage,TEpipolarGri
 {
   if(this->GetNumberOfInputs()<7)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMaskImage *>(this->itk::ProcessObject::GetInput(6));
 }
@@ -235,7 +235,7 @@ DisparityMapToDEMFilter<TDisparityImage,TInputImage,TOutputDEMImage,TEpipolarGri
 {
   if(this->GetNumberOfOutputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TOutputDEMImage *>(this->itk::ProcessObject::GetOutput(0));
 }
@@ -688,7 +688,7 @@ DisparityMapToDEMFilter<TDisparityImage,TInputImage,TOutputDEMImage,TEpipolarGri
 
   typename TEpipolarGridImage::RegionType gridRegion = leftGrid->GetLargestPossibleRegion();
 
-  TOutputDEMImage * tmpDEM = NULL;
+  TOutputDEMImage * tmpDEM = ITK_NULLPTR;
   typename TOutputDEMImage::RegionType outputRequestedRegion = outputDEM->GetRequestedRegion();
 
   typename TDisparityImage::RegionType disparityRegion;
diff --git a/Modules/Registration/DisparityMap/include/otbDisparityTranslateFilter.txx b/Modules/Registration/DisparityMap/include/otbDisparityTranslateFilter.txx
index 734f07ac4332f5dbb2976664176c1f31615fa980..caa46b902ffbcbbb947e90905b187d459c3a861a 100644
--- a/Modules/Registration/DisparityMap/include/otbDisparityTranslateFilter.txx
+++ b/Modules/Registration/DisparityMap/include/otbDisparityTranslateFilter.txx
@@ -102,7 +102,7 @@ DisparityTranslateFilter<TDisparityImage,TGridImage,TSensorImage,TMaskImage>
 {
   if (this->GetNumberOfInputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -114,7 +114,7 @@ DisparityTranslateFilter<TDisparityImage,TGridImage,TSensorImage,TMaskImage>
 {
   if (this->GetNumberOfInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -126,7 +126,7 @@ DisparityTranslateFilter<TDisparityImage,TGridImage,TSensorImage,TMaskImage>
 {
   if (this->GetNumberOfInputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TGridImage *>(this->itk::ProcessObject::GetInput(2));
 }
@@ -138,7 +138,7 @@ DisparityTranslateFilter<TDisparityImage,TGridImage,TSensorImage,TMaskImage>
 {
   if (this->GetNumberOfInputs()<4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TGridImage *>(this->itk::ProcessObject::GetInput(3));
 }
@@ -150,7 +150,7 @@ DisparityTranslateFilter<TDisparityImage,TGridImage,TSensorImage,TMaskImage>
 {
   if (this->GetNumberOfInputs()<5)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMaskImage *>(this->itk::ProcessObject::GetInput(4));
 }
@@ -162,7 +162,7 @@ DisparityTranslateFilter<TDisparityImage,TGridImage,TSensorImage,TMaskImage>
 {
   if (this->GetNumberOfInputs()<6)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TSensorImage *>(this->itk::ProcessObject::GetInput(5));
 }
@@ -174,7 +174,7 @@ DisparityTranslateFilter<TDisparityImage,TGridImage,TSensorImage,TMaskImage>
 {
   if (this->GetNumberOfOutputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TDisparityImage *>(this->itk::ProcessObject::GetOutput(0));
 }
@@ -186,7 +186,7 @@ DisparityTranslateFilter<TDisparityImage,TGridImage,TSensorImage,TMaskImage>
 {
   if (this->GetNumberOfOutputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TDisparityImage *>(this->itk::ProcessObject::GetOutput(1));
 }
diff --git a/Modules/Registration/DisparityMap/include/otbFineRegistrationImageFilter.txx b/Modules/Registration/DisparityMap/include/otbFineRegistrationImageFilter.txx
index 48c457f24ab430fe4901fd2419c89d5b6c08bb47..1eb1d442f6a49debc4d3a631e8ec9e3cb138945e 100644
--- a/Modules/Registration/DisparityMap/include/otbFineRegistrationImageFilter.txx
+++ b/Modules/Registration/DisparityMap/include/otbFineRegistrationImageFilter.txx
@@ -66,7 +66,7 @@ FineRegistrationImageFilter<TInputImage, T0utputCorrelation, TOutputDisplacement
   // Default offset
   m_InitialOffset.Fill(0);
 
-  m_Transform = NULL;
+  m_Transform = ITK_NULLPTR;
  }
 
 template <class TInputImage, class T0utputCorrelation, class TOutputDisplacementField>
@@ -94,7 +94,7 @@ FineRegistrationImageFilter<TInputImage, T0utputCorrelation, TOutputDisplacement
  {
   if (this->GetNumberOfInputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(0));
  }
@@ -106,7 +106,7 @@ FineRegistrationImageFilter<TInputImage, T0utputCorrelation, TOutputDisplacement
  {
   if (this->GetNumberOfInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(1));
  }
@@ -118,7 +118,7 @@ FineRegistrationImageFilter<TInputImage, T0utputCorrelation, TOutputDisplacement
  {
   if (this->GetNumberOfOutputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TOutputDisplacementField *>(this->itk::ProcessObject::GetOutput(1));
  }
diff --git a/Modules/Registration/DisparityMap/include/otbMultiDisparityMapTo3DFilter.txx b/Modules/Registration/DisparityMap/include/otbMultiDisparityMapTo3DFilter.txx
index ca14ed47d548d2411e1a78b204440cedd2ae3d8b..b41b60447c06f772df29cb8f47838356bf1ede34 100644
--- a/Modules/Registration/DisparityMap/include/otbMultiDisparityMapTo3DFilter.txx
+++ b/Modules/Registration/DisparityMap/include/otbMultiDisparityMapTo3DFilter.txx
@@ -119,7 +119,7 @@ MultiDisparityMapTo3DFilter<TDisparityImage,TOutputImage,TMaskImage,TResidueImag
 {
   if ((3 * (index + 1)) > this->GetNumberOfRequiredInputs())
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(3 * index));
 }
@@ -132,7 +132,7 @@ MultiDisparityMapTo3DFilter<TDisparityImage,TOutputImage,TMaskImage,TResidueImag
 {
   if ((3 * (index + 1)) > this->GetNumberOfRequiredInputs())
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(3 * index + 1));
 }
@@ -145,7 +145,7 @@ MultiDisparityMapTo3DFilter<TDisparityImage,TOutputImage,TMaskImage,TResidueImag
 {
   if ((3 * (index + 1)) > this->GetNumberOfRequiredInputs())
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMaskImage *>(this->itk::ProcessObject::GetInput(3 * index + 2));
 }
diff --git a/Modules/Registration/DisparityMap/include/otbNCCRegistrationFunction.txx b/Modules/Registration/DisparityMap/include/otbNCCRegistrationFunction.txx
index 0563fc7fff603bc0de78f7aadedb90066aab6b84..4648acbbad8d50e14839931db815a66cbc0ee2e3 100644
--- a/Modules/Registration/DisparityMap/include/otbNCCRegistrationFunction.txx
+++ b/Modules/Registration/DisparityMap/include/otbNCCRegistrationFunction.txx
@@ -50,8 +50,8 @@ NCCRegistrationFunction<TFixedImage, TMovingImage, TDisplacementField>
   m_TimeStep = 1.0;
   m_DenominatorThreshold = 1e-9;
   m_IntensityDifferenceThreshold = 0.001;
-  this->SetMovingImage(NULL);
-  this->SetFixedImage(NULL);
+  this->SetMovingImage(ITK_NULLPTR);
+  this->SetFixedImage(ITK_NULLPTR);
   m_FixedImageSpacing.Fill(1.0);
   m_FixedImageOrigin.Fill(0.0);
   m_FixedImageGradientCalculator = GradientCalculatorType::New();
diff --git a/Modules/Registration/DisparityMap/include/otbPixelWiseBlockMatchingImageFilter.txx b/Modules/Registration/DisparityMap/include/otbPixelWiseBlockMatchingImageFilter.txx
index cf0c92ad8163c5f78f194b156547c18aced7480d..5199a2c546884cc776913bb9938731046867af69 100644
--- a/Modules/Registration/DisparityMap/include/otbPixelWiseBlockMatchingImageFilter.txx
+++ b/Modules/Registration/DisparityMap/include/otbPixelWiseBlockMatchingImageFilter.txx
@@ -129,7 +129,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if (this->GetNumberOfInputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -143,7 +143,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if(this->GetNumberOfInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -157,7 +157,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if(this->GetNumberOfInputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMaskImage *>(this->itk::ProcessObject::GetInput(2));
 }
@@ -171,7 +171,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if(this->GetNumberOfInputs()<4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMaskImage *>(this->itk::ProcessObject::GetInput(3));
 }
@@ -185,7 +185,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if (this->GetNumberOfOutputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TOutputMetricImage *>(this->itk::ProcessObject::GetOutput(0));
 }
@@ -199,7 +199,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if (this->GetNumberOfOutputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TOutputMetricImage *>(this->itk::ProcessObject::GetOutput(0));
 }
@@ -214,7 +214,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if (this->GetNumberOfOutputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TOutputDisparityImage *>(this->itk::ProcessObject::GetOutput(1));
 }
@@ -228,7 +228,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
 if (this->GetNumberOfOutputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TOutputDisparityImage *>(this->itk::ProcessObject::GetOutput(1));
 }
@@ -242,7 +242,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if (this->GetNumberOfOutputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TOutputDisparityImage *>(this->itk::ProcessObject::GetOutput(2));
 }
@@ -256,7 +256,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
 if (this->GetNumberOfOutputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TOutputDisparityImage *>(this->itk::ProcessObject::GetOutput(2));
 }
@@ -292,7 +292,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if(this->GetNumberOfInputs()<5)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TOutputDisparityImage *>(this->itk::ProcessObject::GetInput(4));
 }
@@ -306,7 +306,7 @@ TOutputDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if(this->GetNumberOfInputs()<6)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TOutputDisparityImage *>(this->itk::ProcessObject::GetInput(5));
 }
diff --git a/Modules/Registration/DisparityMap/include/otbSubPixelDisparityImageFilter.txx b/Modules/Registration/DisparityMap/include/otbSubPixelDisparityImageFilter.txx
index 617b9e7aae21d8b1349832abd502b82b63600e44..2a787e1d5f4ea0dc7d5134543aedc125955897c7 100644
--- a/Modules/Registration/DisparityMap/include/otbSubPixelDisparityImageFilter.txx
+++ b/Modules/Registration/DisparityMap/include/otbSubPixelDisparityImageFilter.txx
@@ -152,7 +152,7 @@ TDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if (this->GetNumberOfIndexedInputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -166,7 +166,7 @@ TDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if(this->GetNumberOfIndexedInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -180,7 +180,7 @@ TDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if(this->GetNumberOfIndexedInputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(2));
 }
@@ -194,7 +194,7 @@ TDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if(this->GetNumberOfIndexedInputs()<4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(3));
 }
@@ -208,7 +208,7 @@ TDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if(this->GetNumberOfIndexedInputs()<5)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMaskImage *>(this->itk::ProcessObject::GetInput(4));
 }
@@ -222,7 +222,7 @@ TDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if(this->GetNumberOfIndexedInputs()<6)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMaskImage *>(this->itk::ProcessObject::GetInput(5));
 }
@@ -250,7 +250,7 @@ TDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
 if (this->GetNumberOfOutputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TDisparityImage *>(this->itk::ProcessObject::GetOutput(0));
 }
@@ -278,7 +278,7 @@ TDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
 if (this->GetNumberOfOutputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TDisparityImage *>(this->itk::ProcessObject::GetOutput(1));
 }
@@ -306,7 +306,7 @@ TDisparityImage,TMaskImage,TBlockMatchingFunctor>
 {
   if (this->GetNumberOfOutputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TOutputMetricImage *>(this->itk::ProcessObject::GetOutput(2));
 }
diff --git a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.txx b/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.txx
index 92deb823478f6848f95cc441f8d59b4cabf01618..5fb36334dfa2045ac766f9b832bd3a46e36a5476 100644
--- a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.txx
+++ b/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.txx
@@ -31,7 +31,7 @@ template <class TPointSet, class TDisplacementField>
 PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField>
 ::PointSetWithTransformToDisplacementFieldGenerator()
 {
-  m_Transform = 0;    // has to be provided by the user
+  m_Transform = ITK_NULLPTR;    // has to be provided by the user
 }
 /**
  * PrintSelf Method
diff --git a/Modules/Registration/Stereo/include/otbAdhesionCorrectionFilter.txx b/Modules/Registration/Stereo/include/otbAdhesionCorrectionFilter.txx
index 69a3db5c85345291d77c22d0a2d915c0bc651733..9a06a335198822481b6dc312776baea87b0308e7 100644
--- a/Modules/Registration/Stereo/include/otbAdhesionCorrectionFilter.txx
+++ b/Modules/Registration/Stereo/include/otbAdhesionCorrectionFilter.txx
@@ -97,7 +97,7 @@ AdhesionCorrectionFilter<TImage, TMask>
 {
   if (this->GetNumberOfInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TImage *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -109,7 +109,7 @@ AdhesionCorrectionFilter<TImage, TMask>
 {
   if (this->GetNumberOfInputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMask *>(this->itk::ProcessObject::GetInput(2));
 }
@@ -121,7 +121,7 @@ AdhesionCorrectionFilter<TImage, TMask>
 {
   if (this->GetNumberOfInputs()<4)
   {
-    return 0;
+    return ITK_NULLPTR;
   }
   return static_cast<const TImage *>(this->itk::ProcessObject::GetInput(3));
 }
@@ -133,7 +133,7 @@ AdhesionCorrectionFilter<TImage, TMask>
 {
   if (this->GetNumberOfInputs()<5)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMask *>(this->itk::ProcessObject::GetInput(4));
 }
@@ -145,7 +145,7 @@ AdhesionCorrectionFilter<TImage, TMask>
 {
   if (this->GetNumberOfOutputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TMask *>(this->itk::ProcessObject::GetOutput(1));
 }
@@ -157,7 +157,7 @@ AdhesionCorrectionFilter<TImage, TMask>
 {
   if (this->GetNumberOfOutputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TImage *>(this->itk::ProcessObject::GetOutput(2));
 }
diff --git a/Modules/Registration/Stereo/include/otbBijectionCoherencyFilter.txx b/Modules/Registration/Stereo/include/otbBijectionCoherencyFilter.txx
index 0f68fdc88c51f677dceb862f4c18b9b843ce1b3e..3175bbd02d0f07c1672e5f3c9ac3cb89defc1baf 100644
--- a/Modules/Registration/Stereo/include/otbBijectionCoherencyFilter.txx
+++ b/Modules/Registration/Stereo/include/otbBijectionCoherencyFilter.txx
@@ -87,7 +87,7 @@ BijectionCoherencyFilter<TDisparityImage,TOutputImage>
 {
   if (this->GetNumberOfInputs()<1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -99,7 +99,7 @@ BijectionCoherencyFilter<TDisparityImage,TOutputImage>
 {
   if (this->GetNumberOfInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -111,7 +111,7 @@ BijectionCoherencyFilter<TDisparityImage,TOutputImage>
 {
   if (this->GetNumberOfInputs()<3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(2));
 }
@@ -123,7 +123,7 @@ BijectionCoherencyFilter<TDisparityImage,TOutputImage>
 {
   if (this->GetNumberOfInputs()<4)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TDisparityImage *>(this->itk::ProcessObject::GetInput(3));
 }
diff --git a/Modules/Registration/Stereo/include/otbMulti3DMapToDEMFilter.txx b/Modules/Registration/Stereo/include/otbMulti3DMapToDEMFilter.txx
index 58ddda92290db32d2dc09375cd370143aaa8fc85..262c74d7ed1ef6f13e98b879c077b89ed25979d3 100644
--- a/Modules/Registration/Stereo/include/otbMulti3DMapToDEMFilter.txx
+++ b/Modules/Registration/Stereo/include/otbMulti3DMapToDEMFilter.txx
@@ -104,7 +104,7 @@ Multi3DMapToDEMFilter<T3DImage, TMaskImage, TOutputDEMImage>::Get3DMapInput(unsi
 {
   if ((2 * (index + 1)) > this->GetNumberOfInputs())
     {
-    return NULL;
+    return ITK_NULLPTR;
     }
   return static_cast<const T3DImage *> (this->itk::ProcessObject::GetInput(2 * index));
 }
@@ -115,7 +115,7 @@ Multi3DMapToDEMFilter<T3DImage, TMaskImage, TOutputDEMImage>::GetMaskInput(unsig
 {
   if ((2 * (index + 1)) > this->GetNumberOfInputs())
     {
-    return NULL;
+    return ITK_NULLPTR;
     }
   return static_cast<const TMaskImage *> (this->itk::ProcessObject::GetInput(2 * index + 1));
 }
@@ -137,7 +137,7 @@ Multi3DMapToDEMFilter<T3DImage, TMaskImage, TOutputDEMImage>::GetDEMOutput()
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TOutputDEMImage *> (this->itk::ProcessObject::GetOutput(0));
 }
@@ -567,8 +567,8 @@ void Multi3DMapToDEMFilter<T3DImage, TMaskImage, TOutputDEMImage>::ThreadedGener
   InputInternalPixelType maxLat = std::max(regionLat1, regionLat2);
   */
 
-  TOutputDEMImage * tmpDEM = NULL;
-  AccumulatorImageType *tmpAcc = NULL;
+  TOutputDEMImage * tmpDEM = ITK_NULLPTR;
+  AccumulatorImageType *tmpAcc = ITK_NULLPTR;
   typename TOutputDEMImage::RegionType outputRequestedRegion = outputPtr->GetRequestedRegion();
 
   typename T3DImage::RegionType splitRegion;
diff --git a/Modules/Registration/Stereo/include/otbStereoSensorModelToElevationMapFilter.txx b/Modules/Registration/Stereo/include/otbStereoSensorModelToElevationMapFilter.txx
index 01ecbc081231ed32dc8da6e9728b74f51603f14b..581783af3661b5b6c2bea7ccc342c70ba664ca11 100644
--- a/Modules/Registration/Stereo/include/otbStereoSensorModelToElevationMapFilter.txx
+++ b/Modules/Registration/Stereo/include/otbStereoSensorModelToElevationMapFilter.txx
@@ -84,7 +84,7 @@ StereoSensorModelToElevationFilter<TInputImage, TOutputHeight>
 {
   if(this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(0));
 }
@@ -96,7 +96,7 @@ StereoSensorModelToElevationFilter<TInputImage, TOutputHeight>
 {
   if(this->GetNumberOfInputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<const TInputImage *>(this->itk::ProcessObject::GetInput(1));
 }
@@ -108,7 +108,7 @@ StereoSensorModelToElevationFilter<TInputImage, TOutputHeight>
 {
   if(this->GetNumberOfOutputs()<2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<TOutputHeight *>(this->itk::ProcessObject::GetOutput(1));
 }
diff --git a/Modules/Registration/Stereo/include/otbStereorectificationDisplacementFieldSource.txx b/Modules/Registration/Stereo/include/otbStereorectificationDisplacementFieldSource.txx
index 0c4c07c79114162f4f630a9fc4b327780f39e099..f5f210a1f14442038fca54c00866d8913f95926c 100644
--- a/Modules/Registration/Stereo/include/otbStereorectificationDisplacementFieldSource.txx
+++ b/Modules/Registration/Stereo/include/otbStereorectificationDisplacementFieldSource.txx
@@ -78,7 +78,7 @@ StereorectificationDisplacementFieldSource<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->itk::ProcessObject::GetOutput(0));
 }
@@ -104,7 +104,7 @@ StereorectificationDisplacementFieldSource<TInputImage, TOutputImage>
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>(this->itk::ProcessObject::GetOutput(1));
 }
diff --git a/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx b/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx
index a06c79db289808499d923459f3413ec45bbd1a4a..585ba0b90ca5949e74e3a86ca3297e7033b79170 100644
--- a/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx
+++ b/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx
@@ -124,8 +124,8 @@ int otbMulti3DMapToDEMFilterEPSG(int argc, char* argv[])
   multiFilter->SetOutputSpacing(spacing);
 
   VectorImageType::PointType origin;
-  origin[0] = strtod(argv[argc-7], NULL);
-  origin[1] = strtod(argv[argc-6], NULL);
+  origin[0] = strtod(argv[argc-7], ITK_NULLPTR);
+  origin[1] = strtod(argv[argc-6], ITK_NULLPTR);
   multiFilter->SetOutputOrigin(origin);
 
   std::string projectionRef=otb::GeoInformationConversion::ToWKT( atoi(argv[argc-1]));
@@ -380,8 +380,8 @@ spacing[1] = atof(argv[argc-1]);
 multiFilter->SetOutputSpacing(spacing);
 
 VectorImageType::PointType origin;
-origin[0] = strtod(argv[argc-6], NULL);
-origin[1] = strtod(argv[argc-5], NULL);
+origin[0] = strtod(argv[argc-6], ITK_NULLPTR);
+origin[1] = strtod(argv[argc-5], ITK_NULLPTR);
 multiFilter->SetOutputOrigin(origin);
 
 
diff --git a/Modules/Segmentation/CCOBIA/test/otbConnectedComponentMuParserFunctorTest.cxx b/Modules/Segmentation/CCOBIA/test/otbConnectedComponentMuParserFunctorTest.cxx
index d8634f59a28614db36c0f8f258cf08ca13dceaf0..e49652a2c972f8786d903aa17bebe71e4a66abfb 100644
--- a/Modules/Segmentation/CCOBIA/test/otbConnectedComponentMuParserFunctorTest.cxx
+++ b/Modules/Segmentation/CCOBIA/test/otbConnectedComponentMuParserFunctorTest.cxx
@@ -45,7 +45,7 @@ int otbConnectedComponentMuParserFunctorTest(int argc, char *argv[])
    }
    else
        {
-       maskFilename = NULL;
+       maskFilename = ITK_NULLPTR;
        }
 
   typedef float InputPixelType;
@@ -74,7 +74,7 @@ int otbConnectedComponentMuParserFunctorTest(int argc, char *argv[])
 
  filter->SetInput(reader->GetOutput());
 
- if(NULL != maskFilename)
+ if(ITK_NULLPTR != maskFilename)
  {
   maskReader = MaskReaderType::New();
   maskReader->SetFileName(maskFilename);
diff --git a/Modules/Segmentation/Conversion/include/otbLabelImageRegionMergingFilter.txx b/Modules/Segmentation/Conversion/include/otbLabelImageRegionMergingFilter.txx
index 07cedbc9b6dc080afeb2d31e5ee5c189ab58084d..808293e743c1e692aba296e54f52319724e62aeb 100644
--- a/Modules/Segmentation/Conversion/include/otbLabelImageRegionMergingFilter.txx
+++ b/Modules/Segmentation/Conversion/include/otbLabelImageRegionMergingFilter.txx
@@ -90,7 +90,7 @@ LabelImageRegionMergingFilter<TInputLabelImage, TInputSpectralImage, TOutputLabe
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-      return 0;
+      return ITK_NULLPTR;
     }
   return static_cast<OutputLabelImageType *>(this->itk::ProcessObject::GetOutput(0));
 }
@@ -114,7 +114,7 @@ LabelImageRegionMergingFilter<TInputLabelImage, TInputSpectralImage, TOutputLabe
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-      return 0;
+      return ITK_NULLPTR;
     }
   return static_cast<OutputClusteredImageType *>(this->itk::ProcessObject::GetOutput(1));
 }
diff --git a/Modules/Segmentation/Conversion/include/otbLabelImageRegionPruningFilter.txx b/Modules/Segmentation/Conversion/include/otbLabelImageRegionPruningFilter.txx
index 1ad390d8786270acbac9fae938890706581b91df..082e4eaebcde7f92a487ba944d2973bc12b81a7e 100644
--- a/Modules/Segmentation/Conversion/include/otbLabelImageRegionPruningFilter.txx
+++ b/Modules/Segmentation/Conversion/include/otbLabelImageRegionPruningFilter.txx
@@ -91,7 +91,7 @@ LabelImageRegionPruningFilter<TInputLabelImage, TInputSpectralImage, TOutputLabe
 {
   if (this->GetNumberOfOutputs() < 1)
     {
-      return 0;
+      return ITK_NULLPTR;
     }
   return static_cast<OutputLabelImageType *>(this->itk::ProcessObject::GetOutput(0));
 }
@@ -115,7 +115,7 @@ LabelImageRegionPruningFilter<TInputLabelImage, TInputSpectralImage, TOutputLabe
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-      return 0;
+      return ITK_NULLPTR;
     }
   return static_cast<OutputClusteredImageType *>(this->itk::ProcessObject::GetOutput(1));
 }
diff --git a/Modules/Segmentation/Conversion/include/otbLabelImageToOGRDataSourceFilter.txx b/Modules/Segmentation/Conversion/include/otbLabelImageToOGRDataSourceFilter.txx
index d6673f0980712c8530ca1486e0ddd6cad63b5ccf..3a8c9bec74b559831fad1c07c26237f4e26d4f06 100644
--- a/Modules/Segmentation/Conversion/include/otbLabelImageToOGRDataSourceFilter.txx
+++ b/Modules/Segmentation/Conversion/include/otbLabelImageToOGRDataSourceFilter.txx
@@ -78,7 +78,7 @@ LabelImageToOGRDataSourceFilter<TInputImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const InputImageType *>(this->Superclass::GetInput(0));
@@ -100,7 +100,7 @@ LabelImageToOGRDataSourceFilter<TInputImage>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const InputImageType *>(this->Superclass::GetInput(1));
@@ -204,14 +204,14 @@ LabelImageToOGRDataSourceFilter<TInputImage>
     //Create the output layer for GDALPolygonize().
     ogr::DataSource::Pointer ogrDS = ogr::DataSource::New();
 
-    OGRLayerType outputLayer = ogrDS->CreateLayer("layer",NULL,wkbPolygon);
+    OGRLayerType outputLayer = ogrDS->CreateLayer("layer",ITK_NULLPTR,wkbPolygon);
 
     OGRFieldDefn field(m_FieldName.c_str(),OFTInteger);
     outputLayer.CreateField(field, true);
 
     //Call GDALPolygonize()
     char ** options;
-    options = NULL;
+    options = ITK_NULLPTR;
     char * option[1];
     if (m_Use8Connected == true)
     {
@@ -271,12 +271,12 @@ LabelImageToOGRDataSourceFilter<TInputImage>
       }
       maskDataset->SetGeoTransform(geoTransform);
 
-      GDALPolygonize(dataset->GetRasterBand(1), maskDataset->GetRasterBand(1), &outputLayer.ogr(), 0, options, NULL, NULL);
+      GDALPolygonize(dataset->GetRasterBand(1), maskDataset->GetRasterBand(1), &outputLayer.ogr(), 0, options, ITK_NULLPTR, ITK_NULLPTR);
       GDALClose(maskDataset);
     }
     else
     {
-      GDALPolygonize(dataset->GetRasterBand(1), NULL, &outputLayer.ogr(), 0, options, NULL, NULL);
+      GDALPolygonize(dataset->GetRasterBand(1), ITK_NULLPTR, &outputLayer.ogr(), 0, options, ITK_NULLPTR, ITK_NULLPTR);
     }
 
     this->SetNthOutput(0,ogrDS);
diff --git a/Modules/Segmentation/Conversion/include/otbLabelImageToVectorDataFilter.txx b/Modules/Segmentation/Conversion/include/otbLabelImageToVectorDataFilter.txx
index 493127e11566873c75ed78f5b2d6454f81d1f639..d27f06596a4b1ced5d6e07661207d86797d273bb 100644
--- a/Modules/Segmentation/Conversion/include/otbLabelImageToVectorDataFilter.txx
+++ b/Modules/Segmentation/Conversion/include/otbLabelImageToVectorDataFilter.txx
@@ -59,7 +59,7 @@ LabelImageToVectorDataFilter<TInputImage, TPrecision>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const InputImageType *>(this->Superclass::GetInput(0));
@@ -81,7 +81,7 @@ LabelImageToVectorDataFilter<TInputImage, TPrecision>
 {
   if (this->GetNumberOfInputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const InputImageType *>(this->Superclass::GetInput(1));
@@ -184,14 +184,14 @@ LabelImageToVectorDataFilter<TInputImage, TPrecision>
     //Create the output layer for GDALPolygonize().
     ogr::DataSource::Pointer ogrDS = ogr::DataSource::New();
 
-    OGRLayerType outputLayer = ogrDS->CreateLayer("layer",NULL,wkbPolygon);
+    OGRLayerType outputLayer = ogrDS->CreateLayer("layer",ITK_NULLPTR,wkbPolygon);
 
     OGRFieldDefn field(m_FieldName.c_str(),OFTInteger);
     outputLayer.CreateField(field, true);
 
     //Call GDALPolygonize()
     char ** options;
-    options = NULL;
+    options = ITK_NULLPTR;
     char * option[1];
     if (m_Use8Connected == true)
     {
@@ -251,12 +251,12 @@ LabelImageToVectorDataFilter<TInputImage, TPrecision>
       }
       maskDataset->SetGeoTransform(geoTransform);
 
-      GDALPolygonize(dataset->GetRasterBand(1), maskDataset->GetRasterBand(1), &outputLayer.ogr(), 0, options, NULL, NULL);
+      GDALPolygonize(dataset->GetRasterBand(1), maskDataset->GetRasterBand(1), &outputLayer.ogr(), 0, options, ITK_NULLPTR, ITK_NULLPTR);
       GDALClose(maskDataset);
     }
     else
     {
-      GDALPolygonize(dataset->GetRasterBand(1), NULL, &outputLayer.ogr(), 0, options, NULL, NULL);
+      GDALPolygonize(dataset->GetRasterBand(1), ITK_NULLPTR, &outputLayer.ogr(), 0, options, ITK_NULLPTR, ITK_NULLPTR);
     }
 
 
diff --git a/Modules/Segmentation/Conversion/include/otbLabelMapToVectorDataFilter.txx b/Modules/Segmentation/Conversion/include/otbLabelMapToVectorDataFilter.txx
index 046971179d5761a5f6687d2789e68305b0a94b77..358d3c58ab88a50295a76d25ddd382730b88f632 100644
--- a/Modules/Segmentation/Conversion/include/otbLabelMapToVectorDataFilter.txx
+++ b/Modules/Segmentation/Conversion/include/otbLabelMapToVectorDataFilter.txx
@@ -56,7 +56,7 @@ LabelMapToVectorDataFilter<TLabelMap, TVectorData, TFieldsFunctor>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TLabelMap *>
diff --git a/Modules/Segmentation/Conversion/include/otbOGRDataSourceToLabelImageFilter.txx b/Modules/Segmentation/Conversion/include/otbOGRDataSourceToLabelImageFilter.txx
index 69b8e325f45c80d0dc20259fe885037e2f396c1c..4106b2faedb4299eb2b89421bbc9dbb9504a8bf4 100644
--- a/Modules/Segmentation/Conversion/include/otbOGRDataSourceToLabelImageFilter.txx
+++ b/Modules/Segmentation/Conversion/include/otbOGRDataSourceToLabelImageFilter.txx
@@ -235,7 +235,7 @@ OGRDataSourceToLabelImageFilter<TOutputImage>::GenerateData()
   GDALSetGeoTransform(dataset,const_cast<double*>(geoTransform.GetDataPointer()));
 
   // Burn the geometries into the dataset
-   if (dataset != NULL)
+   if (dataset != ITK_NULLPTR)
      {
      std::vector<std::string> options;
 
@@ -250,9 +250,9 @@ OGRDataSourceToLabelImageFilter<TOutputImage>::GenerateData()
                           &m_BandsToBurn[0],
                           m_SrcDataSetLayers.size(),
                           &(m_SrcDataSetLayers[0]),
-                          NULL, NULL, &foreground[0],
+                          ITK_NULLPTR, ITK_NULLPTR, &foreground[0],
                           ogr::StringListConverter(options).to_ogr(),
-                          NULL, NULL );
+                          ITK_NULLPTR, ITK_NULLPTR );
      // release the dataset
      GDALClose( dataset );
      }
diff --git a/Modules/Segmentation/Conversion/include/otbPersistentImageToOGRLayerFilter.txx b/Modules/Segmentation/Conversion/include/otbPersistentImageToOGRLayerFilter.txx
index 94c0ac94fa2c98b0125ed8ba9f475206c4c6a377..39ce2c28148f4cb0503e232f5056ba0d9c333fd7 100644
--- a/Modules/Segmentation/Conversion/include/otbPersistentImageToOGRLayerFilter.txx
+++ b/Modules/Segmentation/Conversion/include/otbPersistentImageToOGRLayerFilter.txx
@@ -33,7 +33,7 @@ namespace otb
 
 template<class TImage>
 PersistentImageToOGRLayerFilter<TImage>
-::PersistentImageToOGRLayerFilter() : m_OGRLayer(NULL, false)
+::PersistentImageToOGRLayerFilter() : m_OGRLayer(ITK_NULLPTR, false)
 {
    m_StreamSize.Fill(0);
 }
diff --git a/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.h b/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.h
index 0e330f01d0e3b8035379470213e671dbc903c173..bd0187cb43f9f59d59a0da360d7cec242fb037ce 100644
--- a/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.h
@@ -138,7 +138,7 @@ protected:
   RasterizeVectorDataFilter();
   ~RasterizeVectorDataFilter() ITK_OVERRIDE
   {
-    if (m_OGRDataSourcePointer != NULL)
+    if (m_OGRDataSourcePointer != ITK_NULLPTR)
       {
       ogr::version_proxy::Close(m_OGRDataSourcePointer);
       }
diff --git a/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.txx b/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.txx
index 425710d5162e06a844ba228bb9847cc36aad5c57..7bcab2be19d32d3510d89fd17937a460df64e37c 100644
--- a/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.txx
+++ b/Modules/Segmentation/Conversion/include/otbRasterizeVectorDataFilter.txx
@@ -25,7 +25,7 @@ namespace otb
 template<class TVectorData, class TInputImage, class TOutputImage>
 RasterizeVectorDataFilter<TVectorData, TInputImage, TOutputImage>
 ::RasterizeVectorDataFilter()
- : m_OGRDataSourcePointer(0)
+ : m_OGRDataSourcePointer(ITK_NULLPTR)
 {
   this->SetNumberOfRequiredInputs(1);
 }
@@ -64,7 +64,7 @@ RasterizeVectorDataFilter<TVectorData, TInputImage, TOutputImage>
     // Get the projection ref of the current VectorData
     std::string projectionRefWkt = vd->GetProjectionRef();
     bool        projectionInformationAvailable = !projectionRefWkt.empty();
-    OGRSpatialReference * oSRS = NULL;
+    OGRSpatialReference * oSRS = ITK_NULLPTR;
 
     if (projectionInformationAvailable)
       {
@@ -83,14 +83,14 @@ RasterizeVectorDataFilter<TVectorData, TInputImage, TOutputImage>
 
     // Iterative method to build the layers from a VectorData
     OGRRegisterAll();
-    OGRLayer *   ogrCurrentLayer = NULL;
+    OGRLayer *   ogrCurrentLayer = ITK_NULLPTR;
     std::vector<OGRLayer *> ogrLayerVector;
     otb::OGRIOHelper::Pointer IOConversion = otb::OGRIOHelper::New();
 
     // The method ConvertDataTreeNodeToOGRLayers create the
     // OGRDataSource but don t release it. Destruction is done in the
     // desctructor
-    m_OGRDataSourcePointer = NULL;
+    m_OGRDataSourcePointer = ITK_NULLPTR;
     ogrLayerVector = IOConversion->ConvertDataTreeNodeToOGRLayers(inputRoot,
                                                                   m_OGRDataSourcePointer,
                                                                   ogrCurrentLayer,
@@ -103,7 +103,7 @@ RasterizeVectorDataFilter<TVectorData, TInputImage, TOutputImage>
       }
 
     // Destroy the oSRS
-    if (oSRS != NULL)
+    if (oSRS != ITK_NULLPTR)
       {
       OSRRelease(oSRS);
       }
@@ -184,15 +184,15 @@ RasterizeVectorDataFilter<TVectorData, TInputImage, TOutputImage>::GenerateData(
   GDALSetGeoTransform(dataset,const_cast<double*>(geoTransform.GetDataPointer()));
 
   // Burn the geometries into the dataset
-   if (dataset != NULL)
+   if (dataset != ITK_NULLPTR)
      {
      GDALRasterizeLayers( dataset, m_BandsToBurn.size(),
                           &(m_BandsToBurn[0]),
                           m_SrcDataSetLayers.size(),
                           &(m_SrcDataSetLayers[0]),
-                          NULL, NULL, &(m_FullBurnValues[0]),
-                          NULL,
-                          GDALDummyProgress, NULL );
+                          ITK_NULLPTR, ITK_NULLPTR, &(m_FullBurnValues[0]),
+                          ITK_NULLPTR,
+                          GDALDummyProgress, ITK_NULLPTR );
 
      // release the dataset
      GDALClose( dataset );
diff --git a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.h b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.h
index e06e5da6b9e4dc7989df116d3bc24505c6e93f4b..ac5f4d68951ebdfca59969a4bbd6eaa7fa662d0e 100644
--- a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.h
+++ b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.h
@@ -132,7 +132,7 @@ protected:
       OGR_G_DestroyGeometry(m_SrcDataSetGeometries[idx]);
       }
 
-    if (m_OGRDataSourcePointer != NULL)
+    if (m_OGRDataSourcePointer != ITK_NULLPTR)
       {
       ogr::version_proxy::Close(m_OGRDataSourcePointer);
       }
diff --git a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.txx b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.txx
index 105b2e8d0790d9caf620a54c92ee0e46b75b87a7..80de3b44e97fc338e96036500ac1610bfce1cc46 100644
--- a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.txx
+++ b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelImageFilter.txx
@@ -32,7 +32,7 @@ namespace otb
 template<class TVectorData, class TOutputImage>
 VectorDataToLabelImageFilter<TVectorData, TOutputImage>
 ::VectorDataToLabelImageFilter()
- : m_OGRDataSourcePointer(0),
+ : m_OGRDataSourcePointer(ITK_NULLPTR),
    m_BurnAttribute("FID")
 {
   this->SetNumberOfRequiredInputs(1);
@@ -165,7 +165,7 @@ VectorDataToLabelImageFilter<TVectorData, TOutputImage>
     // Get the projection ref of the current VectorData
     std::string projectionRefWkt = vd->GetProjectionRef();
     bool        projectionInformationAvailable = !projectionRefWkt.empty();
-    OGRSpatialReference * oSRS = NULL;
+    OGRSpatialReference * oSRS = ITK_NULLPTR;
 
     if (projectionInformationAvailable)
       {
@@ -183,14 +183,14 @@ VectorDataToLabelImageFilter<TVectorData, TOutputImage>
     InternalTreeNodeType * inputRoot = const_cast<InternalTreeNodeType *>(tree->GetRoot());
 
     // Iterative method to build the layers from a VectorData
-    OGRLayer *   ogrCurrentLayer = NULL;
+    OGRLayer *   ogrCurrentLayer = ITK_NULLPTR;
     std::vector<OGRLayer *> ogrLayerVector;
     otb::OGRIOHelper::Pointer IOConversion = otb::OGRIOHelper::New();
 
     // The method ConvertDataTreeNodeToOGRLayers create the
     // OGRDataSource but don t release it. Destruction is done in the
     // desctructor
-    m_OGRDataSourcePointer = NULL;
+    m_OGRDataSourcePointer = ITK_NULLPTR;
     ogrLayerVector = IOConversion->ConvertDataTreeNodeToOGRLayers(inputRoot,
                                                                   m_OGRDataSourcePointer,
                                                                   ogrCurrentLayer,
@@ -210,10 +210,10 @@ VectorDataToLabelImageFilter<TVectorData, TOutputImage>
       // Get the geometries of the layer
       OGRFeatureH hFeat;
       OGR_L_ResetReading( (OGRLayerH)(ogrLayerVector[idx2]) );
-      while( ( hFeat = OGR_L_GetNextFeature( (OGRLayerH)(ogrLayerVector[idx2]) )) != NULL )
+      while( ( hFeat = OGR_L_GetNextFeature( (OGRLayerH)(ogrLayerVector[idx2]) )) != ITK_NULLPTR )
         {
         OGRGeometryH hGeom;
-        if( OGR_F_GetGeometryRef( hFeat ) == NULL )
+        if( OGR_F_GetGeometryRef( hFeat ) == ITK_NULLPTR )
           {
           OGR_F_Destroy( hFeat );
           continue;
@@ -241,7 +241,7 @@ VectorDataToLabelImageFilter<TVectorData, TOutputImage>
         }
 
     // Destroy the oSRS
-    if (oSRS != NULL)
+    if (oSRS != ITK_NULLPTR)
       {
       OSRRelease(oSRS);
       }
@@ -309,15 +309,15 @@ VectorDataToLabelImageFilter<TVectorData, TOutputImage>::GenerateData()
   GDALSetGeoTransform(dataset,const_cast<double*>(geoTransform.GetDataPointer()));
 
   // Burn the geometries into the dataset
-   if (dataset != NULL)
+   if (dataset != ITK_NULLPTR)
      {
      GDALRasterizeGeometries( dataset, m_BandsToBurn.size(),
                           &(m_BandsToBurn[0]),
                           m_SrcDataSetGeometries.size(),
                           &(m_SrcDataSetGeometries[0]),
-                          NULL, NULL, &(m_FullBurnValues[0]),
-                          NULL,
-                          GDALDummyProgress, NULL );
+                          ITK_NULLPTR, ITK_NULLPTR, &(m_FullBurnValues[0]),
+                          ITK_NULLPTR,
+                          GDALDummyProgress, ITK_NULLPTR );
 
      // release the dataset
      GDALClose( dataset );
diff --git a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapWithAttributesFilter.txx b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapWithAttributesFilter.txx
index 21fa5200d10c093ed20464f68e40f82b621c3cf5..e7d1ac88d95914d8c2fdb318c75d3f0ee8816103 100644
--- a/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapWithAttributesFilter.txx
+++ b/Modules/Segmentation/Conversion/include/otbVectorDataToLabelMapWithAttributesFilter.txx
@@ -224,7 +224,7 @@ VectorDataToLabelMapWithAttributesFilter<TVectorData, TLabelMap>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const TVectorData *>
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyDecompositionImageFilter.txx b/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyDecompositionImageFilter.txx
index e830f7e5fa58af1fcc579ceeda82d9665d5123ea..bb910c8192f934669b3efd463e67d840b26c6acd 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyDecompositionImageFilter.txx
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbGeodesicMorphologyDecompositionImageFilter.txx
@@ -100,7 +100,7 @@ GeodesicMorphologyDecompositionImageFilter<TInputImage, TOutputImage, TStructuri
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>
            (this->itk::ProcessObject::GetOutput(1));
@@ -116,7 +116,7 @@ GeodesicMorphologyDecompositionImageFilter<TInputImage, TOutputImage, TStructuri
 {
   if (this->GetNumberOfOutputs() < 3)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<OutputImageType *>
            (this->itk::ProcessObject::GetOutput(2));
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbProfileDerivativeToMultiScaleCharacteristicsFilter.txx b/Modules/Segmentation/MorphologicalProfiles/include/otbProfileDerivativeToMultiScaleCharacteristicsFilter.txx
index ea6dfc405b473e0de7039da1a2c8c7ce36c0ed65..841bc57c78ab336321f618073ab63a33c2ad6f1e 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbProfileDerivativeToMultiScaleCharacteristicsFilter.txx
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbProfileDerivativeToMultiScaleCharacteristicsFilter.txx
@@ -43,7 +43,7 @@ ProfileDerivativeToMultiScaleCharacteristicsFilter<TInputImage, TOutputImage, TL
 {
   if (this->GetNumberOfOutputs() < 2)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
   return static_cast<LabeledImageType *>
            (this->itk::ProcessObject::GetOutput(1));
diff --git a/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.txx b/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.txx
index d9073ed4cdcfd8ba379e3fa4728edda89badc345..4e8b88b0961b01098aeed170a42cb3fd032e0d69 100644
--- a/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.txx
+++ b/Modules/Segmentation/OGRProcessing/include/otbOGRLayerStreamStitchingFilter.txx
@@ -31,7 +31,7 @@ namespace otb
 
 template<class TImage>
 OGRLayerStreamStitchingFilter<TImage>
-::OGRLayerStreamStitchingFilter() : m_Radius(2), m_OGRLayer(NULL, false)
+::OGRLayerStreamStitchingFilter() : m_Radius(2), m_OGRLayer(ITK_NULLPTR, false)
 {
    m_StreamSize.Fill(0);
 }
@@ -52,7 +52,7 @@ OGRLayerStreamStitchingFilter<TInputImage>
 {
   if (this->GetNumberOfInputs() < 1)
     {
-    return 0;
+    return ITK_NULLPTR;
     }
 
   return static_cast<const InputImageType *>(this->Superclass::GetInput(0));
diff --git a/Modules/Segmentation/OGRProcessing/test/otbOGRLayerStreamStitchingFilter.cxx b/Modules/Segmentation/OGRProcessing/test/otbOGRLayerStreamStitchingFilter.cxx
index ce622a15a80a5067b210008e930315d33f33c863..a18726e4d9bfca10b8779adc8325c6268a0e14b6 100644
--- a/Modules/Segmentation/OGRProcessing/test/otbOGRLayerStreamStitchingFilter.cxx
+++ b/Modules/Segmentation/OGRProcessing/test/otbOGRLayerStreamStitchingFilter.cxx
@@ -85,7 +85,7 @@ int otbOGRLayerStreamStitchingFilter(int argc, char * argv[])
   //REPACK the layer to remove features marked as deleted in the Shapefile.
   std::string sql("REPACK ");
   sql = sql + layerName;
-  ogrDS->ExecuteSQL(sql , NULL, NULL);
+  ogrDS->ExecuteSQL(sql , ITK_NULLPTR, ITK_NULLPTR);
 
   return EXIT_SUCCESS;
 }
diff --git a/Modules/ThirdParty/ITK/include/otbWarpImageFilter.txx b/Modules/ThirdParty/ITK/include/otbWarpImageFilter.txx
index 14341e4168c77def5464aa6072eb5486cd9a7c52..4cbfd2d363c2c6aa9443239d3ccea9c5f0fd1e2c 100644
--- a/Modules/ThirdParty/ITK/include/otbWarpImageFilter.txx
+++ b/Modules/ThirdParty/ITK/include/otbWarpImageFilter.txx
@@ -205,7 +205,7 @@ WarpImageFilter<TInputImage,TOutputImage,TDisplacementField>
 ::AfterThreadedGenerateData()
 {
   // Disconnect input image from interpolator
-  m_Interpolator->SetInputImage( NULL );
+  m_Interpolator->SetInputImage( ITK_NULLPTR );
 }
 
 
diff --git a/Modules/ThirdParty/MuParserX/src/mpCompat.h.in b/Modules/ThirdParty/MuParserX/src/mpCompat.h.in
index e9c2feee92281e9b4342a6e91bfb45281bca0940..0df5b70b1ce99910a818a2d0846910f61adc8ed2 100644
--- a/Modules/ThirdParty/MuParserX/src/mpCompat.h.in
+++ b/Modules/ThirdParty/MuParserX/src/mpCompat.h.in
@@ -27,7 +27,7 @@
 #endif
 
 #if @OTB_MUPARSERX_HIDE_NULLPTR@
-#define nullptr NULL
+#define ITK_NULLPTR NULL
 #endif
 
 #endif
diff --git a/Modules/Visualization/Ice/include/otbGlImageActor.h b/Modules/Visualization/Ice/include/otbGlImageActor.h
index ad5e125f5428c651d6d4698ac721d05076735f55..618185de68c12aa0bcb2cb7a853814cce898cc28 100644
--- a/Modules/Visualization/Ice/include/otbGlImageActor.h
+++ b/Modules/Visualization/Ice/include/otbGlImageActor.h
@@ -226,7 +226,7 @@ protected:
         m_RedIdx(1),
         m_GreenIdx(2),
         m_BlueIdx(3),
-        m_RescaleFilter(NULL)
+        m_RescaleFilter(ITK_NULLPTR)
     {
       m_UL.Fill(0);
       m_UR.Fill(0);
diff --git a/Modules/Visualization/Ice/include/otbGlView.h b/Modules/Visualization/Ice/include/otbGlView.h
index 7c479ecaf8910bfe6007cd6c6bf7c55d33696b37..af90769098e4073484cd0b97d275ab942be161cf 100644
--- a/Modules/Visualization/Ice/include/otbGlView.h
+++ b/Modules/Visualization/Ice/include/otbGlView.h
@@ -325,7 +325,7 @@ GlView
   const otb::GeoInterface * geo =
     dynamic_cast< const GeoInterface * >( actor.GetPointer() );
 
-  if( geo==NULL )
+  if( geo==ITK_NULLPTR )
     return false;
 
 
@@ -619,7 +619,7 @@ GlView
   const GeoInterface * geo =
     dynamic_cast< const GeoInterface * >( actor.GetPointer() );
 
-  if( geo==NULL )
+  if( geo==ITK_NULLPTR )
     return false;
 
   // Get viewport current center and spacing.
diff --git a/Modules/Visualization/Ice/src/otbFragmentShaderRegistry.cxx b/Modules/Visualization/Ice/src/otbFragmentShaderRegistry.cxx
index 6cc5b293ccca85eae27c9a875b90a63cc92d6336..d0265c5fe66bb2a75272675a75b1bef053449709 100644
--- a/Modules/Visualization/Ice/src/otbFragmentShaderRegistry.cxx
+++ b/Modules/Visualization/Ice/src/otbFragmentShaderRegistry.cxx
@@ -56,7 +56,7 @@ void FragmentShaderRegistry::RegisterShader(const std::string& name, const std::
   
   const char * source_cstr = source.c_str();
   
-  glShaderSource(shader, 1, &source_cstr,NULL);
+  glShaderSource(shader, 1, &source_cstr,ITK_NULLPTR);
   glCompileShader(shader);
 
   GLint compiled;
@@ -75,7 +75,7 @@ void FragmentShaderRegistry::RegisterShader(const std::string& name, const std::
     
     delete [] logs;
     // For safety!
-    logs = NULL;
+    logs = ITK_NULLPTR;
     
     // Shader must be destroyed here!
     glDeleteShader( shader );
diff --git a/Modules/Visualization/Ice/src/otbGlVectorActor.cxx b/Modules/Visualization/Ice/src/otbGlVectorActor.cxx
index d16f27579b83f77cf9b61e6f9ab0c65796fc922c..d707d63846a346318dff778c890219659179b868 100644
--- a/Modules/Visualization/Ice/src/otbGlVectorActor.cxx
+++ b/Modules/Visualization/Ice/src/otbGlVectorActor.cxx
@@ -207,8 +207,8 @@ void GlVectorActor::SetCurrentLayer(const std::string & layername)
   m_CurrentLayer = m_OGRDataSource->GetLayerChecked(layername).GetName();
   
   // Clear transforms
-  m_VectorToViewportTransform = NULL;
-  m_ViewportToVectorTransform = NULL;
+  m_VectorToViewportTransform = ITK_NULLPTR;
+  m_ViewportToVectorTransform = ITK_NULLPTR;
 
   // Clear features
   m_InternalFeatures.clear();
@@ -368,7 +368,7 @@ void GlVectorActor::UpdateData()
       {
       std::ostringstream oss;
       oss<<"SELECT * FROM "<<m_CurrentLayer<<" WHERE OGR_GEOM_AREA>"<<100*areaOfScreenPixel;
-      filtered = m_OGRDataSource->ExecuteSQL(oss.str(), &spatialFilter,NULL);
+      filtered = m_OGRDataSource->ExecuteSQL(oss.str(), &spatialFilter,ITK_NULLPTR);
       }
    
     m_InternalFeatures.clear();
@@ -424,7 +424,7 @@ void GeometryRender(const OGRPolygon * in, GLUtesselator * tesselator, bool fill
 
       gluTessProperty(tesselator, GLU_TESS_BOUNDARY_ONLY, !fill);
       // Begin a new polygon
-      gluTessBeginPolygon(tesselator, NULL);
+      gluTessBeginPolygon(tesselator, ITK_NULLPTR);
       
       // Render the outer boundary
       gluTessBeginContour(tesselator);
@@ -470,7 +470,7 @@ void GeometryRender(const OGRPolygon * in, GLUtesselator * tesselator, bool fill
 
         gluTessProperty(tesselator, GLU_TESS_BOUNDARY_ONLY, true);
         // Begin a new polygon
-        gluTessBeginPolygon(tesselator, NULL);
+        gluTessBeginPolygon(tesselator, ITK_NULLPTR);
         
         // Render the outer boundary
         gluTessBeginContour(tesselator);
diff --git a/Modules/Visualization/Ice/src/otbGlVersionChecker.cxx b/Modules/Visualization/Ice/src/otbGlVersionChecker.cxx
index 5ed75842efe7ea1bf23318c47dcd1ce6cb042672..ceca0f503c50f88c5a56ac75ddce3dd009999fb1 100644
--- a/Modules/Visualization/Ice/src/otbGlVersionChecker.cxx
+++ b/Modules/Visualization/Ice/src/otbGlVersionChecker.cxx
@@ -39,7 +39,7 @@ GlVersionChecker
 {
   const GLubyte * glVersionStr = glGetString( GL_VERSION );
 
-  if( glVersionStr==NULL )
+  if( glVersionStr==ITK_NULLPTR )
     {
     std::ostringstream oss;
 
@@ -60,7 +60,7 @@ GlVersionChecker
 {
   const GLubyte * slVersionStr = glGetString( GL_SHADING_LANGUAGE_VERSION );
 
-  if( slVersionStr==NULL )
+  if( slVersionStr==ITK_NULLPTR )
     {
     std::ostringstream oss;
 
@@ -85,7 +85,7 @@ GlVersionChecker
   // If OpenGL version is at least 2.0, get (and return) GLSL version
   // (before checking against OpenGL required version).
   if( GlVersionChecker::VerCmp( glVersion, "2.0" )<0 )
-    glslVersion = NULL;
+    glslVersion = ITK_NULLPTR;
   else
     glslVersion = GlVersionChecker::GLSLVersion();
 
@@ -113,7 +113,7 @@ GlVersionChecker
 {
   //
   // Special case: empty strings returns 0.0.0 and true.
-  if( version==NULL || strlen( version )==0 )
+  if( version==ITK_NULLPTR || strlen( version )==0 )
     {
     major = 0;
     minor = 0;
@@ -142,7 +142,7 @@ GlVersionChecker
 
   const char * minorStr = strchr( version, '.' );
 
-  if( minorStr==NULL )
+  if( minorStr==ITK_NULLPTR )
     return false;
 
   minor = atoi( ++minorStr );
@@ -156,7 +156,7 @@ GlVersionChecker
 
   // In this case, it is Ok to return because version of the form
   // Major.minor are handled.
-  if( releaseStr==NULL )
+  if( releaseStr==ITK_NULLPTR )
     return true;
 
   release = atoi( ++releaseStr );
diff --git a/Modules/Visualization/Ice/src/otbGlView.cxx b/Modules/Visualization/Ice/src/otbGlView.cxx
index cb4a287d90a0043cd92cdbb3b6371bcb9feae2f7..185684a247cc2db93c615338a05faed9e30ab69c 100644
--- a/Modules/Visualization/Ice/src/otbGlView.cxx
+++ b/Modules/Visualization/Ice/src/otbGlView.cxx
@@ -461,7 +461,7 @@ GlView
       }
 
   delete[] glBuffer;
-  glBuffer = NULL;
+  glBuffer = ITK_NULLPTR;
 
   //
   // Setup import RGBA-image filter.
diff --git a/Modules/Visualization/Ice/src/otbStandardShader.cxx b/Modules/Visualization/Ice/src/otbStandardShader.cxx
index b82b7699547f5b65fa971c4840f33c6362f30022..66e4817f56f9e2bbb84c897e298f5cfcf6aa73b1 100644
--- a/Modules/Visualization/Ice/src/otbStandardShader.cxx
+++ b/Modules/Visualization/Ice/src/otbStandardShader.cxx
@@ -46,8 +46,8 @@ StandardShader::~StandardShader()
 
 std::string StandardShader::GetSource() const
 {
-  const char * glVersion = NULL;
-  const char * glslVersion = NULL;
+  const char * glVersion = ITK_NULLPTR;
+  const char * glslVersion = ITK_NULLPTR;
   if(!otb::GlVersionChecker::CheckGLCapabilities( glVersion, glslVersion))
     {
     itkExceptionMacro(<<" Required GL and GLSL versions were not found (GL version is "<<glVersion<<", should be at least "<<otb::GlVersionChecker::REQUIRED_GL_VERSION<<", GLSL version is "<<glslVersion<<", should be at least "<<otb::GlVersionChecker::REQUIRED_GLSL_VERSION<<")");
diff --git a/Modules/Visualization/IceViewer/src/otbIce.cxx b/Modules/Visualization/IceViewer/src/otbIce.cxx
index 6d3ec67a9470c081c028deff77f377dfeadc9ce8..e43df3d85d9ae61ebd51388135537107c337c6b3 100644
--- a/Modules/Visualization/IceViewer/src/otbIce.cxx
+++ b/Modules/Visualization/IceViewer/src/otbIce.cxx
@@ -39,13 +39,13 @@ int main(int argc, char * argv[])
 
   otb::DEMHandler::Pointer demHandler = otb::DEMHandler::Instance();
   
-  if(demdir != NULL)
+  if(demdir != ITK_NULLPTR)
     {
     std::cout<<"Configuring DEM directory: "<<demdir<<std::endl;
     demHandler->OpenDEMDirectory(demdir);
     }
 
-  if(geoidfile != NULL)
+  if(geoidfile != ITK_NULLPTR)
     {
     std::cout<<"Configuring geoid file: "<<geoidfile<<std::endl;
     demHandler->OpenGeoidFile(geoidfile);
diff --git a/Modules/Visualization/IceViewer/src/otbIceViewer.cxx b/Modules/Visualization/IceViewer/src/otbIceViewer.cxx
index 3782d2705e19383295bb573598d1a92228f4b7f9..7f38e909ba9f96351530422ca238ab50f47d8e28 100644
--- a/Modules/Visualization/IceViewer/src/otbIceViewer.cxx
+++ b/Modules/Visualization/IceViewer/src/otbIceViewer.cxx
@@ -38,7 +38,7 @@ GlVectorActor::ColorType BuildColor(double r, double g, double b)
 }
 
 IceViewer::IceViewer()
-  : m_Window(NULL),
+  : m_Window(ITK_NULLPTR),
     m_View(),
     m_FastRendering(false),
     m_SelectedActor(""),
@@ -71,7 +71,7 @@ IceViewer::IceViewer()
 
 IceViewer::~IceViewer()
 {
-  if(m_Window != NULL)
+  if(m_Window != ITK_NULLPTR)
     {
     glfwDestroyWindow(m_Window);
     }
@@ -88,8 +88,8 @@ void IceViewer::AddImage(const std::string & fname, const std::string & key, con
   
   otb::GlImageActor::Pointer actor = otb::GlImageActor::New();
 
-  const char * glVersion = NULL;
-  const char * glslVersion = NULL;
+  const char * glVersion = ITK_NULLPTR;
+  const char * glslVersion = ITK_NULLPTR;
 
   if( GlVersionChecker::CheckGLCapabilities( glVersion,
 					     glslVersion ) )
@@ -226,19 +226,19 @@ void IceViewer::Initialize(unsigned int w, unsigned int h, const std::string & n
   // Initialize glut (ugly workaround)
   int fake_argc = 1;
   char fake_name[] = "fake";
-  char * fake_argv[] = {fake_name,NULL};
+  char * fake_argv[] = {fake_name,ITK_NULLPTR};
   glutInit(&fake_argc,fake_argv);
 
   // Set glfw errors callback
   glfwSetErrorCallback(error_callback);
   
   // Create the window
-  if(m_Window != NULL)
+  if(m_Window != ITK_NULLPTR)
     {
     glfwDestroyWindow(m_Window);
     }
   
-  m_Window = glfwCreateWindow(w, h,name.c_str(), NULL, NULL);
+  m_Window = glfwCreateWindow(w, h,name.c_str(), ITK_NULLPTR, ITK_NULLPTR);
   if (!m_Window)
     {
     itkExceptionMacro(<<"Could not create glfw window.");
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
index 3df1c1937b3efdacfef62d4d37cacb606cf4174d..a98e762721c589d5a32fc623f05975cfa8a66085 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
@@ -178,7 +178,7 @@ void Application::UpdateParameters()
       {
       Parameter* param = GetParameterByKey(inXMLKey);
       InputProcessXMLParameter* inXMLParam = dynamic_cast<InputProcessXMLParameter*>(param);
-      if(inXMLParam!=NULL)
+      if(inXMLParam!=ITK_NULLPTR)
         {
         inXMLParam->Read(this);
         m_IsInXMLParsed = true;
@@ -208,7 +208,7 @@ int Application::Execute()
          UseSpecificSeed = true;
       Parameter* param = GetParameterByKey(key);
       IntParameter* randParam = dynamic_cast<IntParameter*> (param);
-      if(randParam!=NULL)
+      if(randParam!=ITK_NULLPTR)
         {
         int seed = randParam->GetValue();
         itk::Statistics::MersenneTwisterRandomVariateGenerator::GetInstance()->SetSeed(seed);
@@ -247,7 +247,7 @@ int Application::ExecuteAndWriteOutput()
           {
           Parameter* param = GetParameterByKey(key);
           RAMParameter* ramParam = dynamic_cast<RAMParameter*>(param);
-          if(ramParam!=NULL)
+          if(ramParam!=ITK_NULLPTR)
             {
             ram = ramParam->GetValue();
             useRAM = true;
@@ -266,7 +266,7 @@ int Application::ExecuteAndWriteOutput()
           Parameter* param = GetParameterByKey(key);
           OutputImageParameter* outputParam = dynamic_cast<OutputImageParameter*>(param);
 
-          if(outputParam!=NULL)
+          if(outputParam!=ITK_NULLPTR)
             {
             outputParam->InitializeWriters();
             if (useRAM)
@@ -284,7 +284,7 @@ int Application::ExecuteAndWriteOutput()
           {
           Parameter* param = GetParameterByKey(key);
           OutputVectorDataParameter* outputParam = dynamic_cast<OutputVectorDataParameter*>(param);
-          if(outputParam!=NULL)
+          if(outputParam!=ITK_NULLPTR)
             {
             outputParam->InitializeWriters();
             std::ostringstream progressId;
@@ -299,7 +299,7 @@ int Application::ExecuteAndWriteOutput()
           Parameter* param = GetParameterByKey(key);
           ComplexOutputImageParameter* outputParam = dynamic_cast<ComplexOutputImageParameter*>(param);
           
-          if(outputParam!=NULL)
+          if(outputParam!=ITK_NULLPTR)
             {
             outputParam->InitializeWriters();
             if (useRAM)
@@ -319,7 +319,7 @@ int Application::ExecuteAndWriteOutput()
           {
           Parameter* param = GetParameterByKey(key);
           OutputProcessXMLParameter* outXMLParam = dynamic_cast<OutputProcessXMLParameter*>(param);
-          if(outXMLParam!=NULL)
+          if(outXMLParam!=ITK_NULLPTR)
             {
             outXMLParam->Write(this);
             }
@@ -1140,7 +1140,7 @@ std::vector<std::string> Application::GetParameterStringList(std::string paramet
 
 FloatVectorImageType* Application::GetParameterImage(std::string parameter)
 {
-  FloatVectorImageType::Pointer ret = NULL;
+  FloatVectorImageType::Pointer ret = ITK_NULLPTR;
   Parameter* param = GetParameterByKey(parameter);
 
   if (dynamic_cast<InputImageParameter*> (param))
@@ -1158,7 +1158,7 @@ FloatVectorImageType* Application::GetParameterImage(std::string parameter)
 
 FloatVectorImageListType* Application::GetParameterImageList(std::string parameter)
 {
-  FloatVectorImageListType::Pointer ret=NULL;
+  FloatVectorImageListType::Pointer ret=ITK_NULLPTR;
   Parameter* param = GetParameterByKey(parameter);
 
   if (dynamic_cast<InputImageListParameter*>(param))
@@ -1176,7 +1176,7 @@ FloatVectorImageListType* Application::GetParameterImageList(std::string paramet
 
 ComplexFloatVectorImageType* Application::GetParameterComplexImage(std::string parameter)
 {
-  ComplexFloatVectorImageType::Pointer ret=NULL;
+  ComplexFloatVectorImageType::Pointer ret=ITK_NULLPTR;
   Parameter* param = GetParameterByKey(parameter);
 
   if (dynamic_cast<ComplexInputImageParameter*>(param))
@@ -1194,7 +1194,7 @@ ComplexFloatVectorImageType* Application::GetParameterComplexImage(std::string p
 
 VectorDataType* Application::GetParameterVectorData(std::string parameter)
 {
-  VectorDataType::Pointer ret=NULL;
+  VectorDataType::Pointer ret=ITK_NULLPTR;
   Parameter* param = GetParameterByKey(parameter);
 
   if (dynamic_cast<InputVectorDataParameter*>(param))
@@ -1211,7 +1211,7 @@ VectorDataType* Application::GetParameterVectorData(std::string parameter)
 
 VectorDataListType* Application::GetParameterVectorDataList(std::string parameter)
 {
-  VectorDataListType::Pointer ret=NULL;
+  VectorDataListType::Pointer ret=ITK_NULLPTR;
   Parameter* param = GetParameterByKey(parameter);
 
   if (dynamic_cast<InputVectorDataListParameter*>(param))
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplicationRegistry.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplicationRegistry.cxx
index ea668936fe0b9d70de53a3190e8d14fa8f88d365..aa2cb096c31a090e7d907ea735443e825b809cfb 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplicationRegistry.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplicationRegistry.cxx
@@ -68,7 +68,7 @@ public:
         {
         if ((*it).first == app)
           {
-          (*it).first = NULL;
+          (*it).first = ITK_NULLPTR;
           }
         ++it;
         }
@@ -82,13 +82,13 @@ public:
     AppHandleContainerType::iterator it;
     for (it = m_Container.begin() ; it != m_Container.end() ; ++it)
       {
-      if ((*it).first == NULL)
+      if ((*it).first == ITK_NULLPTR)
         {
         itk::DynamicLoader::CloseLibrary( static_cast<itk::LibHandle>((*it).second));
-        (*it).second = NULL;
+        (*it).second = ITK_NULLPTR;
         }
       }
-    m_Container.remove(AppHandlePairType((Application*) NULL, (void*) NULL));
+    m_Container.remove(AppHandlePairType((Application*) ITK_NULLPTR, (void*) ITK_NULLPTR));
     }
 
   /** close all handles at program exit */
@@ -223,7 +223,7 @@ typedef itk::ObjectFactoryBase * ( *ITK_LOAD_FUNCTION )();
 Application::Pointer
 ApplicationRegistry::CreateApplicationFaster(const std::string& name)
 {
-  ApplicationPointer appli = NULL;
+  ApplicationPointer appli = ITK_NULLPTR;
 
   std::string appExtension = itksys::DynamicLoader::LibExtension();
 #ifdef __APPLE__
@@ -329,7 +329,7 @@ ApplicationRegistry::GetAvailableApplications(bool useFactory)
           {
           appSet.insert(name);
           }
-        appli = NULL;
+        appli = ITK_NULLPTR;
         }
       }
     }
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperComplexInputImageParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperComplexInputImageParameter.cxx
index 7f4bb8cfe32fcbd10fec3484a5fdf1a873af6f76..63ad78e157814c40839d7c127cd12dc3b8de968f 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperComplexInputImageParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperComplexInputImageParameter.cxx
@@ -148,9 +148,9 @@ ComplexInputImageParameter::HasValue() const
 void
 ComplexInputImageParameter::ClearValue()
 {
-  m_Image   = NULL;
-  m_Reader = NULL;
-  m_Caster = NULL;
+  m_Image   = ITK_NULLPTR;
+  m_Reader = ITK_NULLPTR;
+  m_Caster = ITK_NULLPTR;
   m_FileName = "";
   m_PreviousFileName="";
   m_UseFilename = true;
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperComplexOutputImageParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperComplexOutputImageParameter.cxx
index 2421c4fe81851b4f26f2d41f0a2ade417cbc74e8..5784d3a9154d5b85c76e6e23c96724a9cd06ab9d 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperComplexOutputImageParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperComplexOutputImageParameter.cxx
@@ -162,7 +162,7 @@ ComplexOutputImageParameter::GetWriter()
     type = 1;
     }
 
-  itk::ProcessObject* writer = 0;
+  itk::ProcessObject* writer = ITK_NULLPTR;
   switch ( GetComplexPixelType() )
     {
     case ComplexImagePixelType_float:
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputFilenameListParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputFilenameListParameter.cxx
index 226a412a2d1a7bd17a60f7ce1a0f7b9dc77ad6fe..9169676cd0c9a0cabdeee1239c697be4f1b502c4 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputFilenameListParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputFilenameListParameter.cxx
@@ -81,7 +81,7 @@ InputFilenameListParameter::SetListFromFileName(const std::vector<std::string> &
 void
 InputFilenameListParameter::AddNullElement()
 {
-  m_FilenameList->PushBack(NULL);
+  m_FilenameList->PushBack(ITK_NULLPTR);
   SetActive(false);
   this->Modified();
 }
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageListParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageListParameter.cxx
index 1516830f431007ad6b84f9666003ccd4b87ded55..ae1acf31b3bc357df601d4d68990bfe059f22e79 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageListParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageListParameter.cxx
@@ -83,8 +83,8 @@ InputImageListParameter::SetListFromFileName(const std::vector<std::string> & fi
 void
 InputImageListParameter::AddNullElement()
 {
-  m_ReaderList->PushBack(NULL);
-  m_ImageList->PushBack(NULL);
+  m_ReaderList->PushBack(ITK_NULLPTR);
+  m_ImageList->PushBack(ITK_NULLPTR);
   SetActive(false);
   this->Modified();
 }
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameter.cxx
index 98f7d9d843b437789fd7776d4f59eba4a584be55..5d15296a5cfa020ad5db9ebf5edf2c3d85afd9da 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameter.cxx
@@ -104,9 +104,9 @@ InputImageParameter::HasValue() const
 void
 InputImageParameter::ClearValue()
 {
- m_Image  = NULL;
- m_Reader = NULL;
- m_Caster = NULL;
+ m_Image  = ITK_NULLPTR;
+ m_Reader = ITK_NULLPTR;
+ m_Caster = ITK_NULLPTR;
  m_FileName = "";
  m_PreviousFileName="";
  m_UseFilename = true;
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputProcessXMLParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputProcessXMLParameter.cxx
index be17bb948f81ea97a661a1e7fb6165db44f0ccd3..4f267cdda639de6b7d95ab83082c02d4a57d7c4f 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputProcessXMLParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputProcessXMLParameter.cxx
@@ -137,7 +137,7 @@ InputProcessXMLParameter::GetChildNodeTextOf(TiXmlElement *parentElement, std::s
 
   if(parentElement)
     {
-    TiXmlElement* childElement = 0;
+    TiXmlElement* childElement = ITK_NULLPTR;
     childElement = parentElement->FirstChildElement(key.c_str());
 
     //same as childElement->GetText() does but that call is failing if there is
@@ -251,7 +251,7 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
   ParameterGroup::Pointer paramGroup = this_->GetParameterList();
 
   // Iterate through the parameter list
-  for( TiXmlElement* n_Parameter = n_AppNode->FirstChildElement("parameter"); n_Parameter != NULL;
+  for( TiXmlElement* n_Parameter = n_AppNode->FirstChildElement("parameter"); n_Parameter != ITK_NULLPTR;
        n_Parameter = n_Parameter->NextSiblingElement() )
     {
     std::string key,typeAsString, value, paramName;
@@ -273,11 +273,11 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
       param->SetUserValue(true);
       param->SetActive(true);
 
-      TiXmlElement* n_Values = NULL;
+      TiXmlElement* n_Values = ITK_NULLPTR;
       n_Values = n_Parameter->FirstChildElement("values");
       if(n_Values)
         {
-        for(TiXmlElement* n_Value = n_Values->FirstChildElement("value"); n_Value != NULL;
+        for(TiXmlElement* n_Value = n_Values->FirstChildElement("value"); n_Value != ITK_NULLPTR;
             n_Value = n_Value->NextSiblingElement())
           {
           values.push_back(n_Value->GetText());
@@ -292,7 +292,7 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
       else if (type == ParameterType_OutputImage)
         {
         OutputImageParameter *paramDown = dynamic_cast<OutputImageParameter*>(param);
-        if(paramDown!=NULL)
+        if(paramDown!=ITK_NULLPTR)
           {
           paramDown->SetFileName(value);
           std::string pixTypeAsString  = GetChildNodeTextOf(n_Parameter, "pixtype");
@@ -303,19 +303,19 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
       else if (type == ParameterType_ComplexOutputImage)
         {
         ComplexOutputImageParameter* paramDown = dynamic_cast<ComplexOutputImageParameter*>(param);
-        if(paramDown!=NULL)
+        if(paramDown!=ITK_NULLPTR)
           paramDown->SetFileName(value);
         }
       else if (type == ParameterType_Directory)
         {
         DirectoryParameter* paramDown = dynamic_cast<DirectoryParameter*>(param);
-        if(paramDown!=NULL)
+        if(paramDown!=ITK_NULLPTR)
           paramDown->SetValue(value);
         }
       else if (type == ParameterType_InputFilename)
         {
         InputFilenameParameter* paramDown = dynamic_cast<InputFilenameParameter*>(param);
-        if(paramDown!=NULL)
+        if(paramDown!=ITK_NULLPTR)
           paramDown->SetValue(value);
         }
       else if (type == ParameterType_InputImage)
@@ -323,7 +323,7 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
         if(itksys::SystemTools::FileExists(value.c_str()))
           {
           InputImageParameter* paramDown = dynamic_cast<InputImageParameter*>(param);
-          if(paramDown!=NULL)
+          if(paramDown!=ITK_NULLPTR)
             {
             paramDown->SetFromFileName(value);
             if (!paramDown->SetFromFileName(value))
@@ -342,7 +342,7 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
         if(itksys::SystemTools::FileExists(value.c_str()))
           {
           ComplexInputImageParameter* paramDown = dynamic_cast<ComplexInputImageParameter*>(param);
-          if(paramDown!=NULL)
+          if(paramDown!=ITK_NULLPTR)
             paramDown->SetFromFileName(value);
           }
         }
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputVectorDataListParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputVectorDataListParameter.cxx
index b6784a8ff613045a2c1cf216fac98c7efadd7d97..b065d11a679b5f1ec86fe6474add252ca8124fd7 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputVectorDataListParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputVectorDataListParameter.cxx
@@ -84,8 +84,8 @@ InputVectorDataListParameter::SetListFromFileName(const std::vector<std::string>
 void
 InputVectorDataListParameter::AddNullElement()
 {
-  m_ReaderList->PushBack(NULL);
-  m_VectorDataList->PushBack(NULL);
+  m_ReaderList->PushBack(ITK_NULLPTR);
+  m_VectorDataList->PushBack(ITK_NULLPTR);
   SetActive(false);
   this->Modified();
 }
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputVectorDataParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputVectorDataParameter.cxx
index a2ed97c85221c5443e81ff72c47733cd229894c1..83705329c1d27981b746dff41c8df62449363e97 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputVectorDataParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputVectorDataParameter.cxx
@@ -120,8 +120,8 @@ InputVectorDataParameter::HasValue() const
 void
 InputVectorDataParameter::ClearValue()
 {
- m_VectorData  = NULL;
- m_Reader = NULL;
+ m_VectorData  = ITK_NULLPTR;
+ m_Reader = ITK_NULLPTR;
  m_FileName = "";
 }
 
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputImageParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputImageParameter.cxx
index ec02594f477975de87349a3276a0e9c162e40d72..6ac918e80cce76fb39aecb30cfd89271d89d86b0 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputImageParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputImageParameter.cxx
@@ -332,7 +332,7 @@ OutputImageParameter::GetWriter()
   // 1 : VectorImage
   // 2 : RGBAImage
   // 3 : RGBImage
-  itk::ProcessObject* writer = 0;
+  itk::ProcessObject* writer = ITK_NULLPTR;
   if (dynamic_cast<UInt8VectorImageType*> (m_Image.GetPointer())
       || dynamic_cast<Int16VectorImageType*> (m_Image.GetPointer())
       || dynamic_cast<UInt16VectorImageType*> (m_Image.GetPointer())
@@ -428,7 +428,7 @@ OutputImageParameter::GetWriter()
       break;
       }
     }
-  if (0 == writer)
+  if (ITK_NULLPTR == writer)
     {
     itkExceptionMacro("Unknown Writer type.");
     }
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputProcessXMLParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputProcessXMLParameter.cxx
index b03401d2970ab006f93e165ff3bd422369f37f25..faa67a7c8b6289647cfc4490c1f4eb5c52fa1e79 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputProcessXMLParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputProcessXMLParameter.cxx
@@ -181,7 +181,7 @@ OutputProcessXMLParameter::Write(Application::Pointer app)
          {
            EmptyParameter* eParam = dynamic_cast<EmptyParameter *> (param);
 
-           if(eParam!=NULL)
+           if(eParam!=ITK_NULLPTR)
              {
              //Dont use app->HasUserValue which returns false always because of
              //EmptyParameter::HasValue() is false for EmptyParameter
@@ -211,7 +211,7 @@ OutputProcessXMLParameter::Write(Application::Pointer app)
           {
            OutputImageParameter *imgParam = dynamic_cast<OutputImageParameter *>(param);
            
-           if(imgParam!=NULL)
+           if(imgParam!=ITK_NULLPTR)
              {
              value = imgParam->GetFileName();
              ImagePixelType pixType = imgParam->GetPixelType();
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx
index e172ad37c8ecbbcd1e21ccea41a51286bfa5887e..2ccd5b153cf831b787bee2ffd991306d7bdba1ea 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx
@@ -173,7 +173,7 @@ const std::string defaultXMLFileName = std::string(GetName())  + ".xml";
   tmpParam->SetActive(false);
   AddParameter(tmpParam);
 
-  tmpParam = NULL;
+  tmpParam = ITK_NULLPTR;
   /*
   AddParameter(ParameterType_OutputProcessXML,  key,   descr);
   SetParameterDescription(key, descr);
@@ -193,7 +193,7 @@ void ParameterGroup::AddInXMLParameter()
   tmpParam->SetActive(false);
   AddParameter(tmpParam);
 
-  tmpParam = NULL;
+  tmpParam = ITK_NULLPTR;
   /*
   AddParameter(ParameterType_InputProcessXML,  key,   descr);
   SetParameterDescription(key, descr);
diff --git a/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx b/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx
index 20971d4032a15f16424bf26759edd7feb9a0c45e..77d4b95ff04335bcccf5bf1f12fe9a08ccd0d9e7 100644
--- a/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx
+++ b/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx
@@ -100,18 +100,18 @@ std::string PrepareExpressionFromXML(std::string filename)
 
   expression.append(moduleName);
 
-  for( TiXmlElement* n_Parameter = n_AppNode->FirstChildElement("parameter"); n_Parameter != NULL;
+  for( TiXmlElement* n_Parameter = n_AppNode->FirstChildElement("parameter"); n_Parameter != ITK_NULLPTR;
        n_Parameter = n_Parameter->NextSiblingElement() )
     {
     std::string key="-";
     key.append(GetChildNodeTextOf(n_Parameter, "key"));
 
-    TiXmlElement* n_Values = NULL;
+    TiXmlElement* n_Values = ITK_NULLPTR;
     n_Values = n_Parameter->FirstChildElement("values");
     if(n_Values)
       {
       std::string values;
-      for(TiXmlElement* n_Value = n_Values->FirstChildElement("value"); n_Value != NULL;
+      for(TiXmlElement* n_Value = n_Values->FirstChildElement("value"); n_Value != ITK_NULLPTR;
           n_Value = n_Value->NextSiblingElement())
         {
         values.append(n_Value->GetText());
@@ -197,19 +197,19 @@ std::vector<std::string> PrepareVectorExpressionFromXML(std::string filename)
 
   expression.push_back(CleanWord(moduleName));
 
-  for( TiXmlElement* n_Parameter = n_AppNode->FirstChildElement("parameter"); n_Parameter != NULL;
+  for( TiXmlElement* n_Parameter = n_AppNode->FirstChildElement("parameter"); n_Parameter != ITK_NULLPTR;
        n_Parameter = n_Parameter->NextSiblingElement() )
     {
     std::string key="-";
     key.append(GetChildNodeTextOf(n_Parameter, "key"));
     expression.push_back(CleanWord(key));
 
-    TiXmlElement* n_Values = NULL;
+    TiXmlElement* n_Values = ITK_NULLPTR;
     n_Values = n_Parameter->FirstChildElement("values");
     if(n_Values)
       {
       std::string values;
-      for(TiXmlElement* n_Value = n_Values->FirstChildElement("value"); n_Value != NULL;
+      for(TiXmlElement* n_Value = n_Values->FirstChildElement("value"); n_Value != ITK_NULLPTR;
           n_Value = n_Value->NextSiblingElement())
         {
         expression.push_back(CleanWord(n_Value->GetText()));
@@ -315,7 +315,7 @@ const std::string GetChildNodeTextOf(TiXmlElement *parentElement, std::string ke
 
   if(parentElement)
     {
-    TiXmlElement* childElement = 0;
+    TiXmlElement* childElement = ITK_NULLPTR;
     childElement = parentElement->FirstChildElement(key.c_str());
 
     //same as childElement->GetText() does but that call is failing if there is
diff --git a/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx b/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx
index 48b82b9a6fecc73d99b1ec612a02f632633060b9..eafc98e45fe8834f0af95319f88618c9a1c2e391 100644
--- a/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx
+++ b/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx
@@ -54,7 +54,7 @@ namespace Wrapper
 CommandLineLauncher::CommandLineLauncher() :
   /*m_Expression(""),*/m_VExpression(), m_WatcherList(), m_ReportProgress(true), m_MaxKeySize(0)
 {
-  m_Application = NULL;
+  m_Application = ITK_NULLPTR;
   m_Parser = CommandLineParser::New();
   m_LogOutput = itk::StdStreamLogOutput::New();
   m_LogOutput->SetStream(std::cout);
@@ -67,7 +67,7 @@ CommandLineLauncher::CommandLineLauncher() :
 CommandLineLauncher::CommandLineLauncher(const char *) /*:
   m_Expression(exp)*/
 {
-  m_Application = NULL;
+  m_Application = ITK_NULLPTR;
   m_Parser = CommandLineParser::New();
 }
 
@@ -81,7 +81,7 @@ void CommandLineLauncher::DeleteWatcherList()
   for (unsigned int i = 0; i < m_WatcherList.size(); i++)
     {
     delete m_WatcherList[i];
-    m_WatcherList[i] = NULL;
+    m_WatcherList[i] = ITK_NULLPTR;
     }
   m_WatcherList.clear();
 }
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetChoiceParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetChoiceParameter.cxx
index e9761c669c01fb82596f79c24e0a7b463b542158..30ceffaf0724b7b74ae5a40f669b8b6c7772c281 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetChoiceParameter.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetChoiceParameter.cxx
@@ -29,10 +29,10 @@ QtWidgetChoiceParameter::QtWidgetChoiceParameter( ChoiceParameter* param,
                                             QtWidgetModel* m ) :
   QtWidgetParameterBase(param, m),
   m_ChoiceParam(param),
-  m_ComboBox( NULL ),
-  m_StackWidget( NULL ),
-  m_VLayout( NULL ),
-  m_VLayoutGroup( NULL ),
+  m_ComboBox( ITK_NULLPTR ),
+  m_StackWidget( ITK_NULLPTR ),
+  m_VLayout( ITK_NULLPTR ),
+  m_VLayoutGroup( ITK_NULLPTR ),
   m_WidgetList()
 {
 }
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputFilenameParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputFilenameParameter.cxx
index d7d486b7a96a2cd2f3b830fb9abc37fc62939fe3..596adee725abc357e7bdb0fec4ba65afcd1583ed 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputFilenameParameter.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputFilenameParameter.cxx
@@ -26,9 +26,9 @@ namespace Wrapper
 QtWidgetInputFilenameParameter::QtWidgetInputFilenameParameter(InputFilenameParameter* param, QtWidgetModel* m)
 : QtWidgetParameterBase(param, m),
   m_FilenameParam(param),
-  m_HLayout( NULL ),
-  m_Input( NULL ),
-  m_Button( NULL )
+  m_HLayout( ITK_NULLPTR ),
+  m_Input( ITK_NULLPTR ),
+  m_Button( ITK_NULLPTR )
 {
 }
 
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputImageParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputImageParameter.cxx
index f3d52f95161e8e64e73bd91201ca23bc8df9f3ea..2ffc527bea6ae74deb3144d7d9684517ea3c3189 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputImageParameter.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputImageParameter.cxx
@@ -26,9 +26,9 @@ namespace Wrapper
 QtWidgetInputImageParameter::QtWidgetInputImageParameter(InputImageParameter* param, QtWidgetModel* m)
 : QtWidgetParameterBase(param, m),
   m_InputImageParam(param),
-  m_HLayout( NULL ),
-  m_Input( NULL ),
-  m_Button( NULL )
+  m_HLayout( ITK_NULLPTR ),
+  m_Input( ITK_NULLPTR ),
+  m_Button( ITK_NULLPTR )
 {
 }
 
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputVectorDataParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputVectorDataParameter.cxx
index 1fb3033ee74d345c9c15b187df4fa7e6350bad4b..a227ec5997dc48bddb0bec7bada491af8a45ab31 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputVectorDataParameter.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputVectorDataParameter.cxx
@@ -25,9 +25,9 @@ namespace Wrapper
 QtWidgetInputVectorDataParameter::QtWidgetInputVectorDataParameter(InputVectorDataParameter* param, QtWidgetModel* m)
 : QtWidgetParameterBase(param, m),
   m_InputVectorDataParam(param),
-  m_HLayout( NULL ),
-  m_Input( NULL ),
-  m_Button( NULL )
+  m_HLayout( ITK_NULLPTR ),
+  m_Input( ITK_NULLPTR ),
+  m_Button( ITK_NULLPTR )
 {
 }
 
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx
index 4fa6519fc89ad7bf059de83fb330c2decc9662d3..c1b2dac7befb4f15a0dc274f2a76956981faabc9 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx
@@ -58,12 +58,12 @@ public:
 
   static bool CanCreate( Parameter* param )
   {
-    return dynamic_cast<TParameterType *>(param) != 0;
+    return dynamic_cast<TParameterType *>(param) != ITK_NULLPTR;
   }
 
   static QtWidgetParameterBase* Create( Parameter* param, QtWidgetModel* model )
   {
-    QtWidgetParameterBase* widget = 0;
+    QtWidgetParameterBase* widget = ITK_NULLPTR;
     TParameterType* specificParam = dynamic_cast<TParameterType *>(param);
 
     if (specificParam)
@@ -85,7 +85,7 @@ QtWidgetParameterFactory::~QtWidgetParameterFactory()
 QtWidgetParameterBase*
 QtWidgetParameterFactory::CreateQtWidget( Parameter* param, QtWidgetModel* model )
 {
-  QtWidgetParameterBase* widget = 0;
+  QtWidgetParameterBase* widget = ITK_NULLPTR;
 
 #define CREATEWIDGET( ParameterType, WidgetType ) \
   else if ( QtWidgetParameterGenericFactory<ParameterType,  WidgetType>::CanCreate(param) ) \
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx
index d6a20a385b46375398b61f84b0723a53762f6cce..2f1ae5aa5b8c6d4a21d72bf7b9deac6e2e7e82a4 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx
@@ -56,7 +56,7 @@ void QtWidgetParameterGroup::DoCreateWidget()
     {
     Parameter* param = m_ParamList->GetParameterByIndex(i);
 
-    if (param != 0)
+    if (param != ITK_NULLPTR)
       {
       ParameterGroup* paramAsGroup = dynamic_cast<ParameterGroup*>(param);
       ChoiceParameter* paramAsChoice = dynamic_cast<ChoiceParameter*>(param);
@@ -64,10 +64,10 @@ void QtWidgetParameterGroup::DoCreateWidget()
       InputProcessXMLParameter* paramAsOutXML = dynamic_cast<InputProcessXMLParameter*>(param);
 
       bool paramIsXML = false;
-      if(paramAsInXML != 0 || paramAsOutXML != 0)
+      if(paramAsInXML != ITK_NULLPTR || paramAsOutXML != ITK_NULLPTR)
         paramIsXML = true;
 
-      if (paramAsGroup == 0 && paramAsChoice == 0 && !paramIsXML)
+      if (paramAsGroup == ITK_NULLPTR && paramAsChoice == ITK_NULLPTR && !paramIsXML)
         {
         // Label (col 1)
         QWidget* label = new QtWidgetParameterLabel( param );
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetProgressReport.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetProgressReport.cxx
index 67c4e4787ec3cff5b367e4ef559432ff5f68a1d4..8d3fa58dd321cb17159e20baee99581250d56a46 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetProgressReport.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetProgressReport.cxx
@@ -96,7 +96,7 @@ void QtWidgetProgressReport::RemoveLayout()
 {
   // Remove the children of the layout (progress bar widgets)
   QLayoutItem *child;
-  while ((child = this->layout()->takeAt(0)) != 0)
+  while ((child = this->layout()->takeAt(0)) != ITK_NULLPTR)
     {
     delete child->widget();
     delete child;
diff --git a/Modules/Wrappers/SWIG/src/itkPyCommand.cxx b/Modules/Wrappers/SWIG/src/itkPyCommand.cxx
index e7b17d9f23e0df157bff10bc859104faeee5a307..e3f3916d3e0e802a4d2e67d1f4f961858c504f79 100644
--- a/Modules/Wrappers/SWIG/src/itkPyCommand.cxx
+++ b/Modules/Wrappers/SWIG/src/itkPyCommand.cxx
@@ -21,7 +21,7 @@ namespace itk
 
 PyCommand::PyCommand()
 {
-    this->obj = NULL;
+    this->obj = ITK_NULLPTR;
 }
 
 PyCommand::~PyCommand()
@@ -30,7 +30,7 @@ PyCommand::~PyCommand()
     {
         Py_DECREF(this->obj);
     }
-    this->obj = NULL;
+    this->obj = ITK_NULLPTR;
 }
 
 void PyCommand::SetCommandCallable(PyObject *theObj)
@@ -87,7 +87,7 @@ void PyCommand::PyExecute()
     {
         PyObject *result;
 
-        result = PyEval_CallObject(this->obj, (PyObject *)NULL);
+        result = PyEval_CallObject(this->obj, (PyObject *)ITK_NULLPTR);
 
         if (result)
         {