diff --git a/Modules/IO/IOGDAL/src/otbGDALOverviewsBuilder.cxx b/Modules/IO/IOGDAL/src/otbGDALOverviewsBuilder.cxx
index c988cc5a6e5b970b733842e447b5fccc7116c89a..ee3d3e72e8f4f28cc8a674ab7537cd90fff07553 100644
--- a/Modules/IO/IOGDAL/src/otbGDALOverviewsBuilder.cxx
+++ b/Modules/IO/IOGDAL/src/otbGDALOverviewsBuilder.cxx
@@ -100,7 +100,32 @@ GDALOverviewsBuilder
 
   io->SetFileName( filename );
 
-  return !io->GetSubDatasetInfo( names, descs );
+  // no overview for containers
+  if(io->GetSubDatasetInfo( names, descs ))
+    return false;
+
+  // no overview for VSI datasets
+  if (filename.size()>8 && filename.compare(0, 4, "/vsi") == 0)
+    {
+    size_t pos = filename.find('/',4);
+    if (pos != std::string::npos)
+      {
+      bool isVSI = true;
+      for (unsigned int i=4; i<pos ; i++)
+        {
+        int c = filename[i];
+        if ( !(std::islower(c) || std::isdigit(c) || c == '_' ) )
+          {
+          isVSI = false;
+          break;
+          }
+        }
+      if (isVSI)
+        return false;
+      }
+    }
+
+  return true;
 }
 
 /***************************************************************************/