diff --git a/Modules/IO/TestKernel/src/otbTestHelper.cxx b/Modules/IO/TestKernel/src/otbTestHelper.cxx
index 2b1e9f6cc3ba13cba5941c65eb5e9ca7247963fa..62b83b4f79e7a2a1b01fac3aafadc5ffac9c7f84 100644
--- a/Modules/IO/TestKernel/src/otbTestHelper.cxx
+++ b/Modules/IO/TestKernel/src/otbTestHelper.cxx
@@ -1074,29 +1074,27 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
   /* -------------------------------------------------------------------- */
   /*      Open data source.                                               */
   /* -------------------------------------------------------------------- */
-  OGRDataSource *ref_poDS = NULL;
-  OGRSFDriver *  ref_poDriver = NULL;
+  GDALDataset *ref_poDS = NULL;
+  GDALDriver *  ref_poDriver = NULL;
   //OGRGeometry *  ref_poSpatialFilter = NULL;
-  OGRDataSource *test_poDS = NULL;
-  OGRSFDriver *  test_poDriver = NULL;
+  GDALDataset *test_poDS = NULL;
+  GDALDriver *  test_poDriver = NULL;
   //OGRGeometry *  test_poSpatialFilter = NULL;
 
-  OGRRegisterAll();
-
-  ref_poDS = OGRSFDriverRegistrar::Open(ref_pszDataSource, !bReadOnly, &ref_poDriver);
+  ref_poDS = (GDALDataset*)GDALOpen(ref_pszDataSource, GA_Update);
   if (ref_poDS == NULL && !bReadOnly)
     {
-    ref_poDS = OGRSFDriverRegistrar::Open(ref_pszDataSource, FALSE, &ref_poDriver);
+    ref_poDS = (GDALDataset*)GDALOpen(ref_pszDataSource, GA_ReadOnly);
     if (ref_poDS != NULL && m_ReportErrors)
       {
       std::cout << "Had to open REF data source read-only.\n";
       bReadOnly = TRUE;
       }
     }
-  test_poDS = OGRSFDriverRegistrar::Open(test_pszDataSource, !bReadOnly, &test_poDriver);
+  test_poDS = (GDALDataset*)GDALOpen(test_pszDataSource, (bReadOnly?GA_ReadOnly:GA_Update));
   if (test_poDS == NULL && !bReadOnly)
     {
-    test_poDS = OGRSFDriverRegistrar::Open(test_pszDataSource, FALSE, &test_poDriver);
+    test_poDS = (GDALDataset*)GDALOpen(test_pszDataSource, GA_ReadOnly);
     if (test_poDS != NULL && m_ReportErrors)
       {
       std::cout << "Had to open REF data source read-only.\n";
@@ -1108,51 +1106,67 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
   /* -------------------------------------------------------------------- */
   if (ref_poDS == NULL)
     {
-    OGRSFDriverRegistrar *ref_poR = OGRSFDriverRegistrar::GetRegistrar();
+    GDALDriverManager * ref_poR = GetGDALDriverManager();
 
     if (m_ReportErrors)
       std::cout << "FAILURE:\n"
       "Unable to open REF datasource `" << ref_pszDataSource << "' with the following drivers." << std::endl;
     for (int iDriver = 0; iDriver < ref_poR->GetDriverCount(); ++iDriver)
       {
-      std::cout << "  -> " << ref_poR->GetDriver(iDriver)->GetName() << std::endl;
+      std::cout << "  -> " << GDALGetDriverShortName(ref_poR->GetDriver(iDriver)) << std::endl;
       }
     return (1);
     }
+  ref_poDriver = test_poDS->GetDriver();
   CPLAssert(ref_poDriver != NULL);
 
   if (test_poDS == NULL)
     {
-    OGRSFDriverRegistrar *test_poR = OGRSFDriverRegistrar::GetRegistrar();
+    GDALDriverManager *test_poR = GetGDALDriverManager();
 
     if (m_ReportErrors)
       std::cout << "FAILURE:\n"
       "Unable to open TEST datasource `" << test_pszDataSource << "' with the following drivers." << std::endl;
     for (int iDriver = 0; iDriver < test_poR->GetDriverCount(); ++iDriver)
       {
-      std::cout << "  -> " << test_poR->GetDriver(iDriver)->GetName() << std::endl;
+      std::cout << "  -> " << GDALGetDriverShortName(test_poR->GetDriver(iDriver)) << std::endl;
       }
     return (1);
     }
+  test_poDriver = test_poDS->GetDriver();
   CPLAssert(test_poDriver != NULL);
 
   /* -------------------------------------------------------------------- */
   /*      Some information messages.                                      */
   /* -------------------------------------------------------------------- */
-  otbCheckStringValue("INFO: using driver", ref_poDriver->GetName(), test_poDriver->GetName(), nbdiff, m_ReportErrors);
+  otbCheckStringValue("INFO: using driver", GDALGetDriverShortName(ref_poDriver), GDALGetDriverShortName(test_poDriver), nbdiff, m_ReportErrors);
+
+  // TODO: Improve this check as it will stop as soon as one of the
+  // list ends (i.e. it does not guarantee that all files are present)
+  char ** refFileList = ref_poDS->GetFileList();
+  char ** testFileList = test_poDS->GetFileList();
+
+  unsigned int fileId = 0;
 
-  std::string strRefName(ref_poDS->GetName());
-  std::string strTestName(test_poDS->GetName());
-  if (strRefName != strTestName)
+  while (refFileList[fileId] && testFileList[fileId])
     {
-    if (!m_ReportErrors)
+    std::string strRefName(refFileList[fileId]);
+    std::string strTestName(testFileList[fileId]);
+    if (strRefName != strTestName)
       {
-      otbPrintDiff("WARNING: INFO: Internal data source name poDS->GetName() were different",
-                   strRefName,
-                   strTestName);
+      if (!m_ReportErrors)
+        {
+        otbPrintDiff("WARNING: INFO: Internal data source files were different",
+                     strRefName,
+                     strTestName);
+        }
       }
+    ++fileId;
     }
 
+  CSLDestroy(refFileList);
+  CSLDestroy(testFileList);
+  
   /* -------------------------------------------------------------------- */
   /*      Process each data source layer.                                 */
   /* -------------------------------------------------------------------- */
@@ -1240,8 +1254,8 @@ int TestHelper::RegressionTestOgrFile(const char *testOgrFilename, const char *b
   /* -------------------------------------------------------------------- */
   /*      Close down.                                                     */
   /* -------------------------------------------------------------------- */
-  OGRDataSource::DestroyDataSource( ref_poDS );
-  OGRDataSource::DestroyDataSource( test_poDS );
+  GDALClose( ref_poDS );
+  GDALClose( test_poDS );
 
   return (nbdiff != 0) ? 1 : 0;
 }
@@ -1256,7 +1270,7 @@ void TestHelper::DumpOGRFeature(FILE* fpOut, OGRFeature* feature, char** papszOp
     return;
     }
 
-  fprintf(fpOut, "OGRFeature:%ld\n", feature->GetFID());
+  fprintf(fpOut, "OGRFeature:%lld\n", feature->GetFID());
 
   const char* pszDisplayFields =
     CSLFetchNameValue(papszOptions, "DISPLAY_FIELDS");
@@ -1374,6 +1388,8 @@ void TestHelper::DumpOGRGeometry(FILE* fp, OGRGeometry* geometry, const char * p
         }
       case wkbLinearRing:
         break;
+      default:
+        break;
       }
     }
   else if (pszDisplayGeometry == NULL || CSLTestBoolean(pszDisplayGeometry) ||