diff --git a/Modules/Adapters/GdalAdapters/include/otbOGRExtendedFilenameToOptions.h b/Modules/Adapters/GdalAdapters/include/otbOGRExtendedFilenameToOptions.h
index d0a1ba667e77012701d71ac75b733c64ed86f802..243b1d0f050771ce84749343b5857c524cf51ef4 100644
--- a/Modules/Adapters/GdalAdapters/include/otbOGRExtendedFilenameToOptions.h
+++ b/Modules/Adapters/GdalAdapters/include/otbOGRExtendedFilenameToOptions.h
@@ -79,10 +79,11 @@ public:
   void SetGDALLayerOptions( const GDALOptionType & options );
   void AddGDALLayerOptions( const GDALOptionType & options );
 
-
+  static Pointer GetGDALLayerOptionsHelper( const GDALOptionType & options );
 
 protected:
   OGRExtendedFilenameToOptions();
+  OGRExtendedFilenameToOptions( const GDALOptionType & options );
   ~OGRExtendedFilenameToOptions() override {};
 
 private:
diff --git a/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx b/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx
index 4ea0057464dc0d4e0ef9a9ff3d4278edf000f963..b48d6911789bf0aef9df414e46c9edda7d9dd058 100644
--- a/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx
+++ b/Modules/Adapters/GdalAdapters/src/otbOGRDataSourceWrapper.cxx
@@ -284,6 +284,12 @@ otb::ogr::Layer otb::ogr::DataSource::CreateLayer(
   // Other mode : Check if the layer already exists.
   otb::ogr::Layer layer = GetLayer(name); // won't throw on failure
 
+  FileNameHelperType::Pointer layerOptionHelper = 
+    FileNameHelperType::GetGDALLayerOptionsHelper( m_LayerOptions );
+  layerOptionHelper->AddGDALLayerOptions( papszOptions );
+  std::vector<std::string> layerOptions = 
+    layerOptionHelper->GetGDALLayerOptions();
+
   switch (m_OpenMode)
   {
   case Modes::Update_LayerOverwrite:
@@ -296,7 +302,11 @@ otb::ogr::Layer otb::ogr::DataSource::CreateLayer(
 
     // Then create it
     OGRLayer * ol = m_DataSource->CreateLayer(
-      name.c_str(), poSpatialRef, eGType, otb::ogr::StringListConverter(papszOptions).to_ogr());
+      name.c_str() ,
+      poSpatialRef ,
+      eGType ,
+      otb::ogr::StringListConverter( layerOptions ).to_ogr() );
+
     if (!ol)
       {
       itkGenericExceptionMacro(<< "Failed to create the layer <"<<name
@@ -319,7 +329,11 @@ otb::ogr::Layer otb::ogr::DataSource::CreateLayer(
       {
       // Then create it
       OGRLayer * ol = m_DataSource->CreateLayer(
-        name.c_str(), poSpatialRef, eGType, otb::ogr::StringListConverter(papszOptions).to_ogr());
+        name.c_str() ,
+        poSpatialRef ,
+        eGType ,
+        otb::ogr::StringListConverter( layerOptions ).to_ogr() );
+
       if (!ol)
         {
         itkGenericExceptionMacro(<< "Failed to create the layer <"<<name
@@ -343,7 +357,11 @@ otb::ogr::Layer otb::ogr::DataSource::CreateLayer(
 
     // Case where the layer does not exists
     OGRLayer * ol = m_DataSource->CreateLayer(
-      name.c_str(), poSpatialRef, eGType, otb::ogr::StringListConverter(papszOptions).to_ogr());
+          name.c_str() ,
+          poSpatialRef ,
+          eGType ,
+          otb::ogr::StringListConverter( layerOptions ).to_ogr() );
+
     if (!ol)
       {
       itkGenericExceptionMacro(<< "Failed to create the layer <"<<name
@@ -384,9 +402,18 @@ otb::ogr::Layer otb::ogr::DataSource::CopyLayer(
     default:
       break;
   }
+  
+  FileNameHelperType::Pointer layerOptionHelper = 
+    FileNameHelperType::GetGDALLayerOptionsHelper( m_LayerOptions );
+  layerOptionHelper->AddGDALLayerOptions( papszOptions );
+  std::vector<std::string> layerOptions = 
+    layerOptionHelper->GetGDALLayerOptions();
 
   OGRLayer * l0 = &srcLayer.ogr();
-  OGRLayer * ol = m_DataSource->CopyLayer(l0, newName.c_str(), otb::ogr::StringListConverter(papszOptions).to_ogr());
+  OGRLayer * ol = m_DataSource->CopyLayer( 
+                  l0 ,
+                  newName.c_str() ,
+                  otb::ogr::StringListConverter( layerOptions ).to_ogr() );
   if (!ol)
     {
     itkGenericExceptionMacro(<< "Failed to copy the layer <"
diff --git a/Modules/Adapters/GdalAdapters/src/otbOGRExtendedFilenameToOptions.cxx b/Modules/Adapters/GdalAdapters/src/otbOGRExtendedFilenameToOptions.cxx
index 59defd8f47054ab591348f29af36aafb3d3b6353..69892352cda38ca197fe6b21f2cc691ad46a215d 100644
--- a/Modules/Adapters/GdalAdapters/src/otbOGRExtendedFilenameToOptions.cxx
+++ b/Modules/Adapters/GdalAdapters/src/otbOGRExtendedFilenameToOptions.cxx
@@ -36,6 +36,23 @@ OGRExtendedFilenameToOptions()
 
 }
 
+OGRExtendedFilenameToOptions::
+OGRExtendedFilenameToOptions( const GDALOptionType & options ):
+m_LayerOptions()
+{
+  this->SetGDALLayerOptions( options );
+}
+
+OGRExtendedFilenameToOptions::Pointer
+OGRExtendedFilenameToOptions::
+GetGDALLayerOptionsHelper( const GDALOptionType & options )
+{
+  Pointer res = new OGRExtendedFilenameToOptions( options );
+  res->UnRegister();
+  return res;
+}
+
+
 void
 OGRExtendedFilenameToOptions::
 SetExtendedFileName(const char *extFname)