diff --git a/src/cdi.h b/src/cdi.h
index 97c655857f4cbb27c65201d236b15af6633f42df..81d67f8534fd9b3f392b6caadeadb17c511cd193 100644
--- a/src/cdi.h
+++ b/src/cdi.h
@@ -353,7 +353,8 @@ int     cdiEncodeTime(int hour, int minute, int second);
 int     cdiGetFiletype(const char *uri, int *byteorder);
 int     cdiGetProtocol(const char *uri, const char **filename);
 
-int  streamOpenReadNCMem(int ncid);
+int     streamOpenReadNCMem(int ncid);
+int     streamOpenWriteNCMem(int ncid);
 
 //      streamOpenRead: Open a dataset for reading
 int     streamOpenRead(const char *path);
diff --git a/src/stream.c b/src/stream.c
index df3249dccb6ea56e3d26be5a2c6cc7ae38ee9250..cdbc645e42791a71a6b77372044d404f4e0524fd 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -714,9 +714,9 @@ streamOpenID(const char *filename, char filemode, int filetype, int resH)
 }
 
 int
-streamOpenReadNCMem(int ncidp)
+streamOpenNCMem(int ncidp, char mode)
 {
-
+  cdiInitialize();
   stream_t *streamptr = stream_new_entry(CDI_UNDEFID);
   int streamID = CDI_ESYSTEM;
 
@@ -730,23 +730,34 @@ streamOpenReadNCMem(int ncidp)
   nc_inq_path(ncidp, &actual_length, filename);
 
   streamptr->filename = strdup(filename);
-  streamptr->filemode = 'r';
+  streamptr->filemode = mode;
   streamptr->filetype = CDI_FILETYPE_NC4;
   streamptr->fileID = ncidp;
 
-  int status = stream_create_vlist(streamptr, NULL);
-  if (status < 0)
+  if (mode == 'r')
     {
-      streamID = status;
-      if (streamptr->record) Free(streamptr->record);
-      reshRemove(streamptr->self, &streamOps);
+      int status = stream_create_vlist(streamptr, NULL);
+      if (status < 0)
+        {
+          streamID = status;
+          if (streamptr->record) Free(streamptr->record);
+          reshRemove(streamptr->self, &streamOps);
+        }
     }
 
-  streamPrintP(streamptr, stdout);
-
   return streamID;
 }
 
+int
+streamOpenReadNCMem(int ncidp)
+{
+  return streamOpenNCMem(ncidp, 'r');
+}
+int
+streamOpenWriteNCMem(int ncidp)
+{
+  return streamOpenNCMem(ncidp, 'w');
+}
 static int
 streamOpen(const char *filename, const char *filemode, int filetype)
 {
@@ -931,7 +942,6 @@ streamOpenRead(const char *filename)
           if (streamptr->record) Free(streamptr->record);
           reshRemove(streamptr->self, &streamOps);
         }
-      streamPrintP(streamptr, stdout);
     }
 
   return streamID;