diff --git a/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx b/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx
index 4918543fde8fcb5baec907452060a9b13eac46f8..7755d65f8cb28d3f7400dcc3bf962c7e5fbefbb6 100644
--- a/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx
+++ b/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx
@@ -21,8 +21,7 @@
 #include "otbWrapperApplication.h"
 #include "otbWrapperApplicationFactory.h"
 
-#include "otbMapProjections.h"
-#include "otbUtils.h"
+#include "otbMapProjectionAdapter.h"
 
 namespace otb
 {
diff --git a/Modules/Filtering/Projection/test/CMakeLists.txt b/Modules/Filtering/Projection/test/CMakeLists.txt
index dd71babbce34ea7cd1dd58463f2ef161fa8b505d..022daa7b56d1c82b62f3118785246c1807c3cb74 100644
--- a/Modules/Filtering/Projection/test/CMakeLists.txt
+++ b/Modules/Filtering/Projection/test/CMakeLists.txt
@@ -44,7 +44,6 @@ otbOrthoRectificationFilterNew.cxx
 otbImageToGenericRSOutputParameters.cxx
 otbGeometriesProjectionFilterFromMapToGeo.cxx
 otbROIdataConversion.cxx
-otbProjectionBaseNew.cxx
 otbVectorDataProjectionFilterFromMapToGeo.cxx
 otbPhysicalToRPCSensorModelImageFilter.cxx
 otbGeometriesProjectionFilterFromGeoToMap.cxx
@@ -536,8 +535,6 @@ otb_add_test(NAME leTvROIdataConversion COMMAND otbProjectionTestDriver
   ${TEMP}/leTvROIdataConversion.txt
   )
 
-otb_add_test(NAME prTuProjectionBaseNew COMMAND otbProjectionTestDriver  otbProjectionBaseNew )
-
 otb_add_test(NAME prTvVectorDataProjectionFilterFromMapToGeo COMMAND otbProjectionTestDriver
   --compare-ogr ${NOTOL}
   ${BASELINE_FILES}/prTvVectorDataProjectionFilterFromMapToGeo.kml
diff --git a/Modules/Filtering/Projection/test/otbMapProjection.cxx b/Modules/Filtering/Projection/test/otbMapProjection.cxx
index a245fc4f1de823dcaaa6a4f6d3d05695f5cbb047..b98e839787448e3e66c4c811a09f5820de145009 100644
--- a/Modules/Filtering/Projection/test/otbMapProjection.cxx
+++ b/Modules/Filtering/Projection/test/otbMapProjection.cxx
@@ -87,9 +87,9 @@ int otbMapProjection(int itkNotUsed(argc), char* argv[])
   file << lLambert93->TransformPoint(point2);
   file << std::endl << std::endl;
 
-
-
-  otb::MercatorForwardProjection::Pointer lMercatorProjection2 = otb::MercatorForwardProjection::New();
+  typedef otb::GenericMapProjection<otb::TransformDirection::FORWARD> MercatorForwardProjection;
+  MercatorForwardProjection::Pointer lMercatorProjection2 = MercatorForwardProjection::New();
+  lMercatorProjection2->SetWkt(std::string("Mercator"));
   point2 = lMercatorProjection2->TransformPoint(point);
   file << lMercatorProjection2->GetWkt() << std::endl << std::endl;
   file << "Forward projection: " << std::endl;
@@ -97,8 +97,9 @@ int otbMapProjection(int itkNotUsed(argc), char* argv[])
   file << point2;
   file << std::endl << std::endl;
 
-
-  otb::MercatorInverseProjection::Pointer lMercatorProjection = otb::MercatorInverseProjection::New();
+  typedef otb::GenericMapProjection<otb::TransformDirection::INVERSE> MercatorInverseProjection;
+  MercatorInverseProjection::Pointer lMercatorProjection = MercatorInverseProjection::New();
+  lMercatorProjection->SetWkt(std::string("Mercator"));
   file << lMercatorProjection->GetWkt() << std::endl << std::endl;
   file << "Inverse projection: " << std::endl;
   file << point2 << " -> ";
diff --git a/Modules/Filtering/Projection/test/otbMapProjectionsNew.cxx b/Modules/Filtering/Projection/test/otbMapProjectionsNew.cxx
index 38ceab4477c31fc83ca5c9fed04bdbb3fc427e7d..f29644125f041f53e74452508beb949a7d929d3c 100644
--- a/Modules/Filtering/Projection/test/otbMapProjectionsNew.cxx
+++ b/Modules/Filtering/Projection/test/otbMapProjectionsNew.cxx
@@ -29,90 +29,31 @@
 
 int otbMapProjectionsNew(int itkNotUsed(argc), char* itkNotUsed(argv)[])
 {
-  otb::AlbersInverseProjection::Pointer      lAlbersProjection = otb::AlbersInverseProjection::New();
-  otb::AlbersForwardProjection::Pointer      lAlbersProjection2 = otb::AlbersForwardProjection::New();
-  otb::AzimEquDistInverseProjection::Pointer lAzimEquDistProjection = otb::AzimEquDistInverseProjection::New();
-  otb::AzimEquDistForwardProjection::Pointer lAzimEquDistProjection2 = otb::AzimEquDistForwardProjection::New();
-  //Comment for OTB 2.2.0 because OSSIM error code -> generate Exception Fault on VS 7.1 only on Debug mode.
-  //        otb::BngInverseProjection::Pointer lBngProjection = otb::BngInverseProjection::New();
-  //        otb::BngForwardProjection::Pointer lBngProjection2 = otb::BngForwardProjection::New();
-  otb::BonneInverseProjection::Pointer                 lBonneProjection = otb::BonneInverseProjection::New();
-  otb::BonneForwardProjection::Pointer                 lBonneProjection2 = otb::BonneForwardProjection::New();
-  otb::CadrgInverseProjection::Pointer                 lCadrgProjection = otb::CadrgInverseProjection::New();
-  otb::CadrgForwardProjection::Pointer                 lCadrgProjection2 = otb::CadrgForwardProjection::New();
-  otb::CassiniInverseProjection::Pointer               lCassiniProjection = otb::CassiniInverseProjection::New();
-  otb::CassiniForwardProjection::Pointer               lCassiniProjection2 = otb::CassiniForwardProjection::New();
-  otb::CylEquAreaInverseProjection::Pointer            lCylEquAreaProjection = otb::CylEquAreaInverseProjection::New();
-  otb::CylEquAreaForwardProjection::Pointer            lCylEquAreaProjection2 = otb::CylEquAreaForwardProjection::New();
   otb::Eckert4InverseProjection::Pointer               lEckert4Projection = otb::Eckert4InverseProjection::New();
   otb::Eckert4ForwardProjection::Pointer               lEckert4Projection2 = otb::Eckert4ForwardProjection::New();
-  otb::Eckert6InverseProjection::Pointer               lEckert6Projection = otb::Eckert6InverseProjection::New();
-  otb::Eckert6ForwardProjection::Pointer               lEckert6Projection2 = otb::Eckert6ForwardProjection::New();
-  otb::GnomonicInverseProjection::Pointer              lGnomonicProjection = otb::GnomonicInverseProjection::New();
-  otb::GnomonicForwardProjection::Pointer              lGnomonicProjection2 = otb::GnomonicForwardProjection::New();
   otb::LambertConformalConicInverseProjection::Pointer lLambertConformalConicProjection =
     otb::LambertConformalConicInverseProjection::New();
   otb::LambertConformalConicForwardProjection::Pointer lLambertConformalConicProjection2 =
     otb::LambertConformalConicForwardProjection::New();
-  otb::LlxyInverseProjection::Pointer              lLlxyProjection = otb::LlxyInverseProjection::New();
-  otb::LlxyForwardProjection::Pointer              lLlxyProjection2 = otb::LlxyForwardProjection::New();
-  otb::EquDistCylInverseProjection::Pointer        lEquDistCylProjection = otb::EquDistCylInverseProjection::New();
-  otb::EquDistCylForwardProjection::Pointer        lEquDistCylProjection2 = otb::EquDistCylForwardProjection::New();
-  otb::MercatorInverseProjection::Pointer          lMercatorProjection = otb::MercatorInverseProjection::New();
-  otb::MercatorForwardProjection::Pointer          lMercatorProjection2 = otb::MercatorForwardProjection::New();
-  otb::MillerInverseProjection::Pointer            lMillerProjection = otb::MillerInverseProjection::New();
-  otb::MillerForwardProjection::Pointer            lMillerProjection2 = otb::MillerForwardProjection::New();
+  otb::Lambert2EtenduInverseProjection::Pointer lLambert2Etendu = otb::Lambert2EtenduInverseProjection::New();
+  otb::Lambert2EtenduForwardProjection::Pointer lLambert2Etendu2 = otb::Lambert2EtenduForwardProjection::New();
+  otb::Lambert3CartoSudInverseProjection::Pointer lLambert3CartoSud = otb::Lambert3CartoSudInverseProjection::New();
+  otb::Lambert3CartoSudForwardProjection::Pointer lLambert3CartoSud2 = otb::Lambert3CartoSudForwardProjection::New();
+  otb::Lambert93InverseProjection::Pointer      lLambert93 = otb::Lambert93InverseProjection::New();
+  otb::Lambert93ForwardProjection::Pointer      lLambert93_2 = otb::Lambert93ForwardProjection::New();
   otb::MollweidInverseProjection::Pointer          lMollweidProjection = otb::MollweidInverseProjection::New();
   otb::MollweidForwardProjection::Pointer          lMollweidProjection2 = otb::MollweidForwardProjection::New();
-  otb::NewZealandMapGridInverseProjection::Pointer lNewZealandMapGridProjection =
-    otb::NewZealandMapGridInverseProjection::New();
-  otb::NewZealandMapGridForwardProjection::Pointer lNewZealandMapGridProjection2 =
-    otb::NewZealandMapGridForwardProjection::New();
-  otb::ObliqueMercatorInverseProjection::Pointer lObliqueMercatorProjection =
-    otb::ObliqueMercatorInverseProjection::New();
-  otb::ObliqueMercatorForwardProjection::Pointer lObliqueMercatorProjection2 =
-    otb::ObliqueMercatorForwardProjection::New();
-  otb::OrthoGraphicInverseProjection::Pointer lOrthoGraphicProjection =
-    otb::OrthoGraphicInverseProjection::New();
-  otb::OrthoGraphicForwardProjection::Pointer lOrthoGraphicProjection2 =
-    otb::OrthoGraphicForwardProjection::New();
-  otb::PolarStereoInverseProjection::Pointer          lPolarStereoProjection = otb::PolarStereoInverseProjection::New();
-  otb::PolarStereoForwardProjection::Pointer          lPolarStereoProjection2 = otb::PolarStereoForwardProjection::New();
-  otb::PolyconicInverseProjection::Pointer            lPolyconicProjection = otb::PolyconicInverseProjection::New();
-  otb::PolyconicForwardProjection::Pointer            lPolyconicProjection2 = otb::PolyconicForwardProjection::New();
   otb::SinusoidalInverseProjection::Pointer           lSinusoidalProjection = otb::SinusoidalInverseProjection::New();
   otb::SinusoidalForwardProjection::Pointer           lSinusoidalProjection2 = otb::SinusoidalForwardProjection::New();
-  otb::SpaceObliqueMercatorInverseProjection::Pointer lSpaceObliqueMercatorProjection =
-    otb::SpaceObliqueMercatorInverseProjection::New();
-  otb::SpaceObliqueMercatorForwardProjection::Pointer lSpaceObliqueMercatorProjection2 =
-    otb::SpaceObliqueMercatorForwardProjection::New();
-  otb::StereographicInverseProjection::Pointer lStereographicProjection =
-    otb::StereographicInverseProjection::New();
-  otb::StereographicForwardProjection::Pointer lStereographicProjection2 =
-    otb::StereographicForwardProjection::New();
-  otb::TransCylEquAreaInverseProjection::Pointer lTransCylEquAreaProjection =
-    otb::TransCylEquAreaInverseProjection::New();
-  otb::TransCylEquAreaForwardProjection::Pointer lTransCylEquAreaProjection2 =
-    otb::TransCylEquAreaForwardProjection::New();
+  otb::SVY21InverseProjection::Pointer          lSVY21 = otb::SVY21InverseProjection::New();
+  otb::SVY21ForwardProjection::Pointer          lSVY21_2 = otb::SVY21ForwardProjection::New();
   otb::TransMercatorInverseProjection::Pointer lTransMercatorProjection =
     otb::TransMercatorInverseProjection::New();
   otb::TransMercatorForwardProjection::Pointer lTransMercatorProjection2 =
     otb::TransMercatorForwardProjection::New();
-  otb::UpsInverseProjection::Pointer           lUpsProjection = otb::UpsInverseProjection::New();
-  otb::UpsForwardProjection::Pointer           lUpsProjection2 = otb::UpsForwardProjection::New();
   otb::UtmInverseProjection::Pointer           lUtmProjection = otb::UtmInverseProjection::New();
   otb::UtmForwardProjection::Pointer           lUtmProjection2 = otb::UtmForwardProjection::New();
-  otb::VanDerGrintenInverseProjection::Pointer lVanDerGrintenProjection =
-    otb::VanDerGrintenInverseProjection::New();
-  otb::VanDerGrintenForwardProjection::Pointer lVanDerGrintenProjection2 =
-    otb::VanDerGrintenForwardProjection::New();
-  otb::Lambert2EtenduInverseProjection::Pointer lLambert2Etendu = otb::Lambert2EtenduInverseProjection::New();
-  otb::Lambert2EtenduForwardProjection::Pointer lLambert2Etendu2 = otb::Lambert2EtenduForwardProjection::New();
-  otb::Lambert93InverseProjection::Pointer      lLambert93 = otb::Lambert93InverseProjection::New();
-  otb::Lambert93ForwardProjection::Pointer      lLambert93_2 = otb::Lambert93ForwardProjection::New();
-  otb::SVY21InverseProjection::Pointer          lSVY21 = otb::SVY21InverseProjection::New();
-  otb::SVY21ForwardProjection::Pointer          lSVY21_2 = otb::SVY21ForwardProjection::New();
-
+  
   return EXIT_SUCCESS;
 }
 
diff --git a/Modules/Filtering/Projection/test/otbProjectionBaseNew.cxx b/Modules/Filtering/Projection/test/otbProjectionBaseNew.cxx
deleted file mode 100644
index 53e3e6a917bd846f43ff4d7edf043aa5151d3e15..0000000000000000000000000000000000000000
--- a/Modules/Filtering/Projection/test/otbProjectionBaseNew.cxx
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2005-2017 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include "itkMacro.h"
-#include <iostream>
-
-#include "otbMapProjections.h"
-
-int otbProjectionBaseNew(int itkNotUsed(argc), char * itkNotUsed(argv)[])
-{
-  otb::AlbersInverseProjection::Pointer      lAlbersProjection = otb::AlbersInverseProjection::New();
-  otb::AzimEquDistForwardProjection::Pointer lAzimEquDistProjection = otb::AzimEquDistForwardProjection::New();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx b/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx
index d5b90afcebb8152a7304b33fe580e0bc776716f5..1f249676ab2ef6a796052c400d3b3e33390b57c4 100644
--- a/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx
+++ b/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx
@@ -51,7 +51,6 @@ void RegisterTests()
   REGISTER_TEST(otbImageToGenericRSOutputParameters);
   REGISTER_TEST(otbGeometriesProjectionFilterFromMapToGeo);
   REGISTER_TEST(otbROIdataConversion);
-  REGISTER_TEST(otbProjectionBaseNew);
   REGISTER_TEST(otbVectorDataProjectionFilterFromMapToGeo);
   REGISTER_TEST(otbPhysicalToRPCSensorModelImageFilter);
   REGISTER_TEST(otbGeometriesProjectionFilterFromGeoToMap);
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperMapProjectionParametersHandler.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperMapProjectionParametersHandler.cxx
index 8c00e08c56cc8a22971a4b69aa2bcc635e5dd9ee..364fb600359f0964f7d4b35a99e5a8bb0e63c0ec 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperMapProjectionParametersHandler.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperMapProjectionParametersHandler.cxx
@@ -134,8 +134,8 @@ const std::string MapProjectionParametersHandler::GetProjectionRefFromChoice(con
     {
     case Map_Utm:
     {
-    typedef UtmInverseProjection  UtmProjectionType;
-    UtmProjectionType::Pointer    utmProjection = UtmProjectionType::New();
+    otb::UtmInverseProjection::Pointer utmProjection =
+     otb::UtmInverseProjection::New();
 
     // Set the zone
     utmProjection->SetZone(app->GetParameterInt(zoneKey.str()));
@@ -152,15 +152,15 @@ const std::string MapProjectionParametersHandler::GetProjectionRefFromChoice(con
     break;
     case Map_Lambert2:
     {
-    typedef Lambert2EtenduForwardProjection Lambert2ProjectionType;
-    Lambert2ProjectionType::Pointer lambert2Projection = Lambert2ProjectionType::New();
+    otb::Lambert2EtenduForwardProjection::Pointer lambert2Projection =
+      otb::Lambert2EtenduForwardProjection::New();
     return lambert2Projection->GetWkt();
     }
     break;
     case Map_Lambert93:
     {
-    typedef otb::Lambert93InverseProjection Lambert93ProjectionType;
-    Lambert93ProjectionType::Pointer lambert93Projection = Lambert93ProjectionType::New();
+    otb::Lambert93InverseProjection::Pointer lambert93Projection =
+      otb::Lambert93InverseProjection::New();
     return lambert93Projection->GetWkt();
     }
     break;