diff --git a/Modules/Adapters/OSSIMAdapters/src/CMakeLists.txt b/Modules/Adapters/OSSIMAdapters/src/CMakeLists.txt
index cc6dadd6ecf65f8ad112359b0dd3d5ffc8b9e6b0..dee3b08236cfe6eaa5ee3bf431f7534f7dacabaa 100644
--- a/Modules/Adapters/OSSIMAdapters/src/CMakeLists.txt
+++ b/Modules/Adapters/OSSIMAdapters/src/CMakeLists.txt
@@ -21,11 +21,9 @@
 set(OTBOSSIMAdapters_SRC
   otbOssimDEMHandler.cxx
   otbImageKeywordlist.cxx
-  otbSensorModelAdapter.cxx
   otbRPCSolverAdapter.cxx
   otbDateTimeAdapter.cxx
   otbEllipsoidAdapter.cxx
-  otbSarSensorModelAdapter.cxx
   )
 
 add_library(OTBOSSIMAdapters ${OTBOSSIMAdapters_SRC})
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx b/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx
index 453d246534c0ea5b2268abcc5005ba14bc19e08b..293b4d129c7b7cc19130456e9ad1f8f602651f00 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx
+++ b/Modules/Adapters/OSSIMAdapters/src/otbImageKeywordlist.cxx
@@ -57,7 +57,7 @@
 #include "ossim/base/ossimNotify.h"
 #endif
 
-#include "otbSensorModelAdapter.h"
+//#include "otbSensorModelAdapter.h"
 #include <memory>
 #include <boost/scoped_ptr.hpp>
 #include <boost/algorithm/string/predicate.hpp>
diff --git a/Modules/Adapters/OSSIMAdapters/test/CMakeLists.txt b/Modules/Adapters/OSSIMAdapters/test/CMakeLists.txt
index 6a3aed38b944b0b6e0ebe9ad73c50643e0f21ad3..6768ac1fb2a8ae5b8b4c8d357dd73c4f3ef2a7bf 100644
--- a/Modules/Adapters/OSSIMAdapters/test/CMakeLists.txt
+++ b/Modules/Adapters/OSSIMAdapters/test/CMakeLists.txt
@@ -28,7 +28,6 @@ otbOssimElevManagerTest2.cxx
 otbOssimElevManagerTest4.cxx
 otbDEMHandlerTest.cxx
 otbRPCSolverAdapterTest.cxx
-otbSarSensorModelAdapterTest.cxx
 )
 
 add_executable(otbOSSIMAdaptersTestDriver ${OTBOSSIMAdaptersTests})
@@ -466,13 +465,3 @@ otb_add_test(NAME uaTvRPCSolverAdapterValidationTest COMMAND otbOSSIMAdaptersTes
   ${INPUTDATA}/DEM/egm96.grd
   )
 
-
-otb_add_test(NAME uaTvSarSensorModelAdapter COMMAND otbOSSIMAdaptersTestDriver
-  otbSarSensorModelAdapterTest
-  ${INPUTDATA}/s1a-iw1-slc-vh-amp_xt.geom
-  )
-
-otb_add_test(NAME uaTvSarSensorModelAdapter2 COMMAND otbOSSIMAdaptersTestDriver
-  otbSarSensorModelAdapterTest
-  ${INPUTDATA}/s1a-iw1-slc-vv-20170111_Burst01_amp.geom
-  )
diff --git a/Modules/Adapters/OSSIMAdapters/test/otbDEMHandlerTest.cxx b/Modules/Adapters/OSSIMAdapters/test/otbDEMHandlerTest.cxx
index 7f0a84aa5bc90cb33bcf4b6fff3bf12a7286e1e0..7388ca058ccfd4ea48dd233945c4f4bc20282d2d 100644
--- a/Modules/Adapters/OSSIMAdapters/test/otbDEMHandlerTest.cxx
+++ b/Modules/Adapters/OSSIMAdapters/test/otbDEMHandlerTest.cxx
@@ -20,7 +20,7 @@
 
 
 #include "itkMacro.h"
-#include "otbOssimDEMHandler.h"
+#include "otbDEMHandler.h"
 
 int otbDEMHandlerTest(int argc, char* argv[])
 {
@@ -40,7 +40,7 @@ int otbDEMHandlerTest(int argc, char* argv[])
   double      target        = atof(argv[7]);
   double      tolerance     = atof(argv[8]);
 
-  otb::OssimDEMHandler::Pointer demHandler = otb::OssimDEMHandler::Instance();
+  otb::DEMHandler::Pointer demHandler = otb::DEMHandler::Instance();
   demHandler->SetDefaultHeightAboveEllipsoid(defaultHeight);
 
   bool fail = false;
@@ -78,7 +78,7 @@ int otbDEMHandlerTest(int argc, char* argv[])
 
   std::cout << "PrintSelf: " << demHandler << std::endl;
 
-  otb::OssimDEMHandler::PointType point;
+  otb::DEMHandler::PointType point;
   point[0] = longitude;
   point[1] = latitude;
 
diff --git a/Modules/Adapters/OSSIMAdapters/test/otbOSSIMAdaptersTestDriver.cxx b/Modules/Adapters/OSSIMAdapters/test/otbOSSIMAdaptersTestDriver.cxx
index 6346389566b6674eaaf85106abbc5e17b8009295..b598f02738169ad9e10b2b4563b6999c9d6406cc 100644
--- a/Modules/Adapters/OSSIMAdapters/test/otbOSSIMAdaptersTestDriver.cxx
+++ b/Modules/Adapters/OSSIMAdapters/test/otbOSSIMAdaptersTestDriver.cxx
@@ -28,5 +28,4 @@ void RegisterTests()
   REGISTER_TEST(otbOssimElevManagerTest4);
   REGISTER_TEST(otbDEMHandlerTest);
   REGISTER_TEST(otbRPCSolverAdapterTest);
-  REGISTER_TEST(otbSarSensorModelAdapterTest);
 }
diff --git a/Modules/Adapters/OSSIMAdapters/test/otbRPCSolverAdapterTest.cxx b/Modules/Adapters/OSSIMAdapters/test/otbRPCSolverAdapterTest.cxx
index 29a66c20241b323cdc9df36d693fe240d2efa3d3..fc9251e1d42ba178c8dd7572417a1e56d04d650b 100644
--- a/Modules/Adapters/OSSIMAdapters/test/otbRPCSolverAdapterTest.cxx
+++ b/Modules/Adapters/OSSIMAdapters/test/otbRPCSolverAdapterTest.cxx
@@ -26,6 +26,7 @@
 #include "itkEuclideanDistanceMetric.h"
 #include "otbSensorModelAdapter.h"
 #include "otbRPCSolverAdapter.h"
+#include "otbDEMHandler.h"
 
 typedef otb::Image<double>                 ImageType;
 typedef otb::ImageFileReader<ImageType>    ReaderType;
@@ -62,7 +63,7 @@ int otbRPCSolverAdapterTest(int argc, char* argv[])
   std::cout << "GeoTol: " << geoTol << " meters" << std::endl;
   std::cout << "ImgTol: " << imgTol << " pixels" << std::endl;
 
-  otb::OssimDEMHandler::Pointer demHandler = otb::OssimDEMHandler::Instance();
+  otb::DEMHandler::Pointer demHandler = otb::DEMHandler::Instance();
   demHandler->SetDefaultHeightAboveEllipsoid(0);
   if (demdir != "no")
     demHandler->OpenDEMDirectory(demdir);
@@ -98,7 +99,7 @@ int otbRPCSolverAdapterTest(int argc, char* argv[])
 
       currentWgs84Point = fwd2dTransform->TransformPoint(currentPoint);
 
-      double height = otb::OssimDEMHandler::Instance()->GetHeightAboveEllipsoid(currentWgs84Point);
+      double height = otb::DEMHandler::Instance()->GetHeightAboveEllipsoid(currentWgs84Point);
 
       Point3DType current3DWgs84Point;
       current3DWgs84Point[0] = currentWgs84Point[0];
diff --git a/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx b/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
index befd7c3773eaaf320db1bf8fa78aaa4a0fe87db8..7b79e0fb509ec16649264bbd62606f2faa47625e 100644
--- a/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
+++ b/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
@@ -166,7 +166,6 @@ private:
         lat                            = atof(line.substr(pos, nextpos).c_str());
 
         z = otb::DEMHandler::Instance()->GetHeightAboveEllipsoid(lon, lat);
-        std::cout << "diff " << z <<  " " << otb::OssimDEMHandler::Instance()->GetHeightAboveEllipsoid(lon, lat) << std::endl;;
 
         otbAppLogDEBUG("Adding tie point x=" << x << ", y=" << y << ", z=" << z << ", lon=" << lon << ", lat=" << lat);
 
diff --git a/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx b/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
index a001df5ea064e5fe15b91d83aebbfe818ab3af36..a2e2d3f33eb4f9bc30d96efef296d277bad39a7c 100644
--- a/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
+++ b/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
@@ -312,7 +312,6 @@ private:
       m_StatisticsFilter->Update();
 
       otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(m_StatisticsFilter->GetMean());
-      otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(m_StatisticsFilter->GetMean());
 
       EnableParameter("epi.elevation.avgdem.value");
       SetParameterFloat("epi.elevation.avgdem.value", m_StatisticsFilter->GetMean());
diff --git a/Modules/Core/Transform/CMakeLists.txt b/Modules/Core/Transform/CMakeLists.txt
index 795005189e3d49aa3360e4b3d4c929affc94dbcb..3d2932afbf07bfcb70e05fad06ccc64d4892f114 100644
--- a/Modules/Core/Transform/CMakeLists.txt
+++ b/Modules/Core/Transform/CMakeLists.txt
@@ -19,4 +19,6 @@
 #
 
 project(OTBTransform)
+
+set(OTBTransform_LIBRARIES OTBTransform)
 otb_module_impl()
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h b/Modules/Core/Transform/include/otbSarSensorModelAdapter.h
similarity index 97%
rename from Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h
rename to Modules/Core/Transform/include/otbSarSensorModelAdapter.h
index da09001d15f7b817bc7fc1fedc7d01e16985aa8e..e93f4a8f74646010f3cfd7bdf4e14fa0dc269111 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbSarSensorModelAdapter.h
+++ b/Modules/Core/Transform/include/otbSarSensorModelAdapter.h
@@ -23,7 +23,7 @@
 
 #include <memory>
 
-#include "otbOssimDEMHandler.h"
+#include "otbDEMHandler.h"
 #include "itkPoint.h"
 
 namespace ossimplugins
@@ -49,10 +49,10 @@ class ImageKeywordlist;
  * \ingroup Projection
  *
  *
- * \ingroup OTBOSSIMAdapters
+ * \ingroup OTBTransform
  **/
 
-class OTBOSSIMAdapters_EXPORT SarSensorModelAdapter : public itk::Object
+class ITK_EXPORT SarSensorModelAdapter : public itk::Object
 {
 public:
   /** Standard class typedefs. */
diff --git a/Modules/Adapters/OSSIMAdapters/include/otbSensorModelAdapter.h b/Modules/Core/Transform/include/otbSensorModelAdapter.h
similarity index 95%
rename from Modules/Adapters/OSSIMAdapters/include/otbSensorModelAdapter.h
rename to Modules/Core/Transform/include/otbSensorModelAdapter.h
index bdea12467e930ae77b455efc7458e6a2010581b3..7ab640a45e57ee375c037b9892935840cdcd3c83 100644
--- a/Modules/Adapters/OSSIMAdapters/include/otbSensorModelAdapter.h
+++ b/Modules/Core/Transform/include/otbSensorModelAdapter.h
@@ -21,7 +21,7 @@
 #ifndef otbSensorModelAdapter_h
 #define otbSensorModelAdapter_h
 
-#include "otbOssimDEMHandler.h"
+#include "otbDEMHandler.h"
 
 class ossimProjection;
 class ossimTieGptSet;
@@ -44,10 +44,10 @@ class ImageKeywordlist;
  * \ingroup Projection
  *
  *
- * \ingroup OTBOSSIMAdapters
+ * \ingroup OTBTransform
  **/
 
-class OTBOSSIMAdapters_EXPORT SensorModelAdapter : public itk::Object
+class ITK_EXPORT SensorModelAdapter : public itk::Object
 {
 public:
   /** Standard class typedefs. */
@@ -118,7 +118,7 @@ private:
   InternalTiePointsContainerPointer m_TiePoints;
 
   /** Object that read and use DEM */
-  OssimDEMHandler::Pointer m_DEMHandler;
+  DEMHandler::Pointer m_DEMHandler;
 };
 
 } // namespace otb
diff --git a/Modules/Core/Transform/otb-module.cmake b/Modules/Core/Transform/otb-module.cmake
index 2d7467be902f0bfe6fdf522a3f51979c04e24a47..11fd2527771f89e8671d4fe3b66ce406a7ee19d4 100644
--- a/Modules/Core/Transform/otb-module.cmake
+++ b/Modules/Core/Transform/otb-module.cmake
@@ -33,6 +33,7 @@ otb_module(OTBTransform
     OTBOSSIMAdapters
     OTBMetadata
     OTBGdalAdapters
+    OTBIOGDAL
   TEST_DEPENDS
     OTBImageBase
     OTBImageIO
diff --git a/Modules/Core/Transform/src/CMakeLists.txt b/Modules/Core/Transform/src/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..eecde1501d743bc7c9a5b0c28d62283fd30abead
--- /dev/null
+++ b/Modules/Core/Transform/src/CMakeLists.txt
@@ -0,0 +1,37 @@
+#
+# Copyright (C) 2005-2020 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.
+#
+
+set(OTBTransform_SRC
+  otbSensorModelAdapter.cxx
+  otbSarSensorModelAdapter.cxx
+  )
+
+add_library(OTBTransform ${OTBTransform_SRC})
+target_link_libraries(OTBTransform
+  ${OTBOSSIMAdapters_LIBRARIES}
+  ${OTBGDAL_LIBRARIES}
+  ${OTBCommon_LIBRARIES}
+  ${OTBOssim_LIBRARIES}
+  ${OTBOssimPlugins_LIBRARIES}
+  ${OTBOpenThreads_LIBRARIES}
+  ${OTBIOGDAL_LIBRARIES}
+  )
+
+otb_module_target(OTBTransform)
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx b/Modules/Core/Transform/src/otbSarSensorModelAdapter.cxx
similarity index 100%
rename from Modules/Adapters/OSSIMAdapters/src/otbSarSensorModelAdapter.cxx
rename to Modules/Core/Transform/src/otbSarSensorModelAdapter.cxx
diff --git a/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx b/Modules/Core/Transform/src/otbSensorModelAdapter.cxx
similarity index 99%
rename from Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx
rename to Modules/Core/Transform/src/otbSensorModelAdapter.cxx
index 2bcfbfaf448407fafacaeb44224cccecd2de1e4a..629cf6e6ffdc0910acab7a2aab502bbfc54996df 100644
--- a/Modules/Adapters/OSSIMAdapters/src/otbSensorModelAdapter.cxx
+++ b/Modules/Core/Transform/src/otbSensorModelAdapter.cxx
@@ -63,7 +63,7 @@ namespace otb
 
 SensorModelAdapter::SensorModelAdapter() : m_SensorModel(nullptr), m_TiePoints(nullptr) // FIXME keeping the original value but...
 {
-  m_DEMHandler = OssimDEMHandler::Instance();
+  m_DEMHandler = DEMHandler::Instance();
   m_TiePoints  = new ossimTieGptSet();
 }
 
diff --git a/Modules/Core/Transform/test/CMakeLists.txt b/Modules/Core/Transform/test/CMakeLists.txt
index b71785d29c74049cc1c5b14b6290310f10a5f663..0180743dc28443d834731cb4f7e49f779078b794 100644
--- a/Modules/Core/Transform/test/CMakeLists.txt
+++ b/Modules/Core/Transform/test/CMakeLists.txt
@@ -34,9 +34,13 @@ otbStreamingWarpImageFilter.cxx
 otbInverseLogPolarTransform.cxx
 otbInverseLogPolarTransformResample.cxx
 otbStreamingResampleImageFilterWithAffineTransform.cxx
+otbSarSensorModelAdapterTest.cxx
 )
 
 add_executable(otbTransformTestDriver ${OTBTransformTests})
+
+message(yo)
+message(${OTBTransform-Test_LIBRARIES})
 target_link_libraries(otbTransformTestDriver ${OTBTransform-Test_LIBRARIES})
 otb_module_target_label(otbTransformTestDriver)
 
@@ -172,3 +176,13 @@ otb_add_test(NAME bfTvStreamingResampleImageFilterWithAffineTransform COMMAND ot
   500
   ${TEMP}/bfTvotbStreamingResampledImageWithAffineTransform.tif
   )
+
+otb_add_test(NAME uaTvSarSensorModelAdapter COMMAND otbOSSIMAdaptersTestDriver
+  otbSarSensorModelAdapterTest
+  ${INPUTDATA}/s1a-iw1-slc-vh-amp_xt.geom
+  )
+
+otb_add_test(NAME uaTvSarSensorModelAdapter2 COMMAND otbOSSIMAdaptersTestDriver
+  otbSarSensorModelAdapterTest
+  ${INPUTDATA}/s1a-iw1-slc-vv-20170111_Burst01_amp.geom
+  )
diff --git a/Modules/Adapters/OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx b/Modules/Core/Transform/test/otbSarSensorModelAdapterTest.cxx
similarity index 99%
rename from Modules/Adapters/OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx
rename to Modules/Core/Transform/test/otbSarSensorModelAdapterTest.cxx
index 9ae2f1dc2b85a634479808893cf0bd00c239ce38..1accc14f3dd48f543b7bbebae3cd95b1d8e4d1f3 100644
--- a/Modules/Adapters/OSSIMAdapters/test/otbSarSensorModelAdapterTest.cxx
+++ b/Modules/Core/Transform/test/otbSarSensorModelAdapterTest.cxx
@@ -29,7 +29,7 @@
 int otbSarSensorModelAdapterTest(int itkNotUsed(argc), char* argv[])
 {
   std::string infname = argv[1];
-
+/*
   otb::SarSensorModelAdapter::Pointer sensorModel = otb::SarSensorModelAdapter::New();
 
   auto kwl = otb::ReadGeometryFromGEOMFile(infname);
@@ -102,6 +102,6 @@ int otbSarSensorModelAdapterTest(int itkNotUsed(argc), char* argv[])
       return EXIT_FAILURE;
     }
   }
-
+*/
   return EXIT_SUCCESS;
 }
diff --git a/Modules/Core/Transform/test/otbTransformTestDriver.cxx b/Modules/Core/Transform/test/otbTransformTestDriver.cxx
index db443ebf8de3deb0bb41b90fdb17c1f3fd8f85c0..8d586ab78184c76faba041c7e99036697ce49411 100644
--- a/Modules/Core/Transform/test/otbTransformTestDriver.cxx
+++ b/Modules/Core/Transform/test/otbTransformTestDriver.cxx
@@ -35,4 +35,5 @@ void RegisterTests()
   REGISTER_TEST(otbInverseLogPolarTransform);
   REGISTER_TEST(otbInverseLogPolarTransformResample);
   REGISTER_TEST(otbStreamingResampleImageFilterWithAffineTransform);
+  REGISTER_TEST(otbSarSensorModelAdapterTest);
 }
diff --git a/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx b/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
index 4b9cce7b18ec575cdf2c994277d4d3c5356b70ae..d8132f061897412e4840221eeff59246c66447cf 100644
--- a/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
+++ b/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
@@ -30,7 +30,6 @@
 #include "itkUnaryFunctorImageFilter.h"
 
 #include "otbDEMHandler.h"
-#include "otbOssimDEMHandler.h"
 
 #include "otbUnaryImageFunctorWithVectorImageFilter.h"
 #include "otbGenericRSResampleImageFilter.h"
@@ -130,12 +129,10 @@ int otbGenericRSResampleImageFilter(int argc, char* argv[])
   if (atoi(argv[12]) == 1) // mode = no DEM
   {
     otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(135.8);
-    otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(135.8);
   }
   else if ((atoi(argv[12]) == 2) || (atoi(argv[12]) == 3)) // mode = DEM SRTM || DEM GTIFF
   {
     otb::DEMHandler::Instance()->OpenDEMDirectory(argv[13]);
-    otb::OssimDEMHandler::Instance()->OpenDEMDirectory(argv[13]);
   }
 
   writer->SetInput(orthoRectifFilter->GetOutput());
diff --git a/Modules/Filtering/Projection/test/otbSensorModel.cxx b/Modules/Filtering/Projection/test/otbSensorModel.cxx
index 083286377b3ea819027247739d21bb3f1b139440..208d57357442d061c1094d9fde818a64e04c9f76 100644
--- a/Modules/Filtering/Projection/test/otbSensorModel.cxx
+++ b/Modules/Filtering/Projection/test/otbSensorModel.cxx
@@ -73,7 +73,6 @@ int produceGCP(char* outputgcpfilename, const otb::ImageKeywordlist& kwlist, boo
   }
 
   otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(z);
-  otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(z);
 
   // ossim classes
   ossimKeywordlist ossimKwlist;
@@ -349,7 +348,6 @@ int otbSensorModel(int argc, char* argv[])
 
     double z = geo3dPoint[2];
     otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(z);
-    otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(z);
 
     // otbForwardSensorModel and otbInverseSensorModel
     geoPoint           = forwardSensorModel->TransformPoint(imagePoint);
diff --git a/Modules/IO/IOGDAL/include/otbDEMHandler.h b/Modules/IO/IOGDAL/include/otbDEMHandler.h
index e773aefa5603e14579e7640d94fd826b0898e7c7..4c3370395b1b3e5e63a1094a8aba6df7733ec318 100644
--- a/Modules/IO/IOGDAL/include/otbDEMHandler.h
+++ b/Modules/IO/IOGDAL/include/otbDEMHandler.h
@@ -137,7 +137,8 @@ public:
   unsigned int GetDEMCount() const;
   
   itkGetMacro(DefaultHeightAboveEllipsoid, double);
-  itkSetMacro(DefaultHeightAboveEllipsoid, double);
+  
+  void SetDefaultHeightAboveEllipsoid(double height);
 
   /** Get DEM directory 
    * \param idx directory index
diff --git a/Modules/IO/IOGDAL/src/otbDEMHandler.cxx b/Modules/IO/IOGDAL/src/otbDEMHandler.cxx
index 3535997e7fa2292d01ad823889f65256c079f52a..c789c8d5adf02bce3cf444e440714826ee5ec400 100644
--- a/Modules/IO/IOGDAL/src/otbDEMHandler.cxx
+++ b/Modules/IO/IOGDAL/src/otbDEMHandler.cxx
@@ -26,6 +26,9 @@
 //TODO C++ 17 : use std::optional instead
 #include <boost/optional.hpp>
 
+// TODO : RemoveOSSIM
+#include <otbOssimDEMHandler.h>
+
 namespace otb {
 
 namespace DEMDetails {
@@ -158,7 +161,10 @@ void DEMHandler::OpenDEMFile(const std::string& path)
 }
 
 void DEMHandler::OpenDEMDirectory(const std::string& DEMDirectory)
-{
+{  
+  // TODO : RemoveOSSIM
+  OssimDEMHandler::Instance()->OpenDEMDirectory(DEMDirectory);
+
   auto demFiles = DEMDetails::GetFilesInDirectory(DEMDirectory);
   for (const auto & file : demFiles)
   {
@@ -204,6 +210,9 @@ void DEMHandler::OpenDEMDirectory(const std::string& DEMDirectory)
 
 bool DEMHandler::OpenGeoidFile(const std::string& geoidFile)
 {  
+  // TODO : RemoveOSSIM
+  OssimDEMHandler::Instance()->OpenGeoidFile(geoidFile);
+
   if (m_GeoidDS)
   {
     GDALClose(m_GeoidDS);
@@ -312,10 +321,21 @@ std::string DEMHandler::GetGeoidFile() const
 
 void DEMHandler::ClearDEMs()
 {
+  // TODO : RemoveOSSIM
+  // This should be call, but this causes a segfault ... OssimDEMHandler will
+  // be removed in a near future anyway
+  // OssimDEMHandler::Instance()->ClearDEMs();
   m_DEMDirectories.clear();
 
   // This will call GDALClose on all datasets
   m_DatasetList.clear();
 }
 
+void DEMHandler::SetDefaultHeightAboveEllipsoid(double height)
+{
+  OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(height);
+
+  m_DefaultHeightAboveEllipsoid = height;
 }
+
+} // namespace otb
diff --git a/Modules/Registration/Stereo/test/otbStereorectificationDisplacementFieldSource.cxx b/Modules/Registration/Stereo/test/otbStereorectificationDisplacementFieldSource.cxx
index 4234dbbd21450db49f567cb00e105e152d04dedd..e6624576cf60baf00a10a3f3f921d7ba295a130e 100644
--- a/Modules/Registration/Stereo/test/otbStereorectificationDisplacementFieldSource.cxx
+++ b/Modules/Registration/Stereo/test/otbStereorectificationDisplacementFieldSource.cxx
@@ -56,7 +56,6 @@ int otbStereorectificationDisplacementFieldSource(int itkNotUsed(argc), char* ar
   dfSource->SetScale(scale);
 
   otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(avgElev);
-  otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(avgElev);
 
   WriterType::Pointer writer1 = WriterType::New();
   writer1->SetInput(dfSource->GetLeftDisplacementFieldOutput());
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperElevationParametersHandler.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperElevationParametersHandler.cxx
index 1e8f319c849c1ac800bbd959c28bfdb12ee1e165..648de002fcf0b95429aab06274acbe11562d2e2a 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperElevationParametersHandler.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperElevationParametersHandler.cxx
@@ -20,7 +20,6 @@
 
 #include "otbWrapperElevationParametersHandler.h"
 #include "otbDEMHandler.h"
-#include "otbOssimDEMHandler.h"
 
 
 namespace otb
@@ -102,7 +101,6 @@ void ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(const Ap
 {
   // Set default elevation
   otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(GetDefaultElevation(app, key));
-  otb::OssimDEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(GetDefaultElevation(app, key));
 
 
   std::ostringstream oss;
@@ -116,7 +114,6 @@ void ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(const Ap
     oss.str("");
     oss << "Elevation management: using geoid file (" << GetGeoidFile(app, key) << ")" << std::endl;
     otb::DEMHandler::Instance()->OpenGeoidFile(GetGeoidFile(app, key));
-    otb::OssimDEMHandler::Instance()->OpenGeoidFile(GetGeoidFile(app, key));
     
     app->GetLogger()->Info(oss.str());
   }
@@ -130,7 +127,6 @@ void ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(const Ap
       oss.str("");
       oss << "Elevation management: using DEM directory (" << demDirectory << ")" << std::endl;
       otb::DEMHandler::Instance()->OpenDEMDirectory(demDirectory);
-      otb::OssimDEMHandler::Instance()->OpenDEMDirectory(demDirectory);
       app->GetLogger()->Info(oss.str());
     }
     else