diff --git a/src/cdf.c b/src/cdf.c
index c3fd265d8aee8e48fdedfbe68df36667c1d7f9c7..354e766d75acd357cb1695a60cef24837cd32fc7 100644
--- a/src/cdf.c
+++ b/src/cdf.c
@@ -127,7 +127,7 @@ cdfOpenFile(const char *filename, const char *mode, int *filetype)
           if (*filetype == CDI_FILETYPE_NC4)
             writemode |= NC_NETCDF4;
           else if (*filetype == CDI_FILETYPE_NC4C)
-            writemode |= NC_NETCDF4 | NC_CLASSIC_MODEL;
+            writemode |= (NC_NETCDF4 | NC_CLASSIC_MODEL);
 #endif
           cdf_create(filename, writemode, &ncid);
           if (CDI_Version_Info) cdfComment(ncid);
diff --git a/src/cdf_int.c b/src/cdf_int.c
index 6bdb89b75bac25e89a770700563f9ce5000148a0..f1eb4bfbee6e36456f6475c96815d7686d6240d4 100644
--- a/src/cdf_int.c
+++ b/src/cdf_int.c
@@ -12,19 +12,42 @@
 
 #ifdef HAVE_LIBNETCDF
 
+static bool
+has_uri(const char *uri)
+{
+  char *pos = strstr(uri, "://");
+  if (pos)
+    {
+      const int len = pos - uri;
+      if (strncmp(uri, "file", len) == 0 || strncmp(uri, "https", len) == 0 || strncmp(uri, "s3", len) == 0) return true;
+    }
+
+  return false;
+}
+
 void
 cdf_create(const char *path, int cmode, int *ncidp)
 {
-  size_t initialsz = 0, chunksizehint = 0;
+  int status = -1;
+  size_t chunksizehint = 0;
+
+  if (has_uri(path))
+    {
+      status = nc_create(path, cmode, ncidp);
+    }
+  else
+    {
+      size_t initialsz = 0;
 
 #if defined(__SX__) || defined(ES)
-  chunksizehint = 16777216; /* 16 MB */
+      chunksizehint = 16777216; // 16 MB
 #endif
 
-  if (CDI_Netcdf_Chunksizehint != CDI_UNDEFID) chunksizehint = (size_t) CDI_Netcdf_Chunksizehint;
+      if (CDI_Netcdf_Chunksizehint != CDI_UNDEFID) chunksizehint = (size_t) CDI_Netcdf_Chunksizehint;
 
-  cdi_nc__create_funcp my_nc__create = (cdi_nc__create_funcp) namespaceSwitchGet(NSSWITCH_NC__CREATE).func;
-  int status = my_nc__create(path, cmode, initialsz, &chunksizehint, ncidp);
+      cdi_nc__create_funcp my_nc__create = (cdi_nc__create_funcp) namespaceSwitchGet(NSSWITCH_NC__CREATE).func;
+      status = my_nc__create(path, cmode, initialsz, &chunksizehint, ncidp);
+    }
 
   if (CDF_Debug || status != NC_NOERR) Message("ncid=%d  mode=%d  chunksizehint=%zu  file=%s", *ncidp, cmode, chunksizehint, path);