diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServiceProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServiceProvider.java
index 76a66a2ab086215c4c6adf8e0c3ea604d1685258..08cd1d4d51aa854d5b1d2ee3ffd22058be38e978 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServiceProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServiceProvider.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.openbis.generic.server;
 
+import ch.systemsx.cisd.openbis.generic.shared.ISessionWorkspaceProvider;
+import ch.systemsx.cisd.openbis.generic.shared.SessionWorkspaceProvider;
 import org.springframework.context.ApplicationContext;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.plugin.service.IImportService;
@@ -50,6 +52,10 @@ public class CommonServiceProvider
                 .getBean(ResourceNames.COMMON_SERVER);
     }
 
+    public static ISessionWorkspaceProvider getSessionWorkspaceProvider() {
+        return (ISessionWorkspaceProvider) CommonServiceProvider.getApplicationContext().getBean(SessionWorkspaceProvider.INTERNAL_SERVICE_NAME);
+    }
+
     public static IImportService getImportService()
     {
         return (IImportService) applicationContext.getBean(ResourceNames.IMPORT_SERVICE);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ISessionWorkspaceProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ISessionWorkspaceProvider.java
index f56cb5851b5827ce9e9b9887e96c8a4bb0f13ccb..2ffa18f6ace124c77f8f779d14c42313fde47be7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ISessionWorkspaceProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ISessionWorkspaceProvider.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared;
 
-import java.io.File;
+import java.io.*;
 import java.util.Map;
 
 /**
@@ -31,4 +31,10 @@ public interface ISessionWorkspaceProvider
 
     void deleteSessionWorkspace(String sessionToken);
 
+    void write(String sessionToken, String relativePathToFile, InputStream inputStream) throws IOException;
+
+    InputStream read(String sessionToken, String relativePathToFile) throws IOException;
+
+    void delete(String sessionToken, String relativePathToFile) throws IOException;
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/SessionWorkspaceProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/SessionWorkspaceProvider.java
index b91828b094e38686e762c2e259d5d2faec9e7220..df835a991dcac37d1198d3b30b25caf5a9f91ac1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/SessionWorkspaceProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/SessionWorkspaceProvider.java
@@ -16,8 +16,9 @@
 
 package ch.systemsx.cisd.openbis.generic.shared;
 
-import java.io.File;
-import java.io.FileFilter;
+import java.io.*;
+import java.nio.file.Files;
+import java.nio.file.StandardCopyOption;
 import java.util.Map;
 import java.util.Properties;
 import java.util.TreeMap;
@@ -147,6 +148,27 @@ public class SessionWorkspaceProvider implements ISessionWorkspaceProvider
         }
     }
 
+    @Override
+    public void write(String sessionToken, String relativePathToFile, InputStream inputStream) throws IOException {
+        File sessionWorkspace = getSessionWorkspace(sessionToken);
+        File targetFile = new File(sessionWorkspace, relativePathToFile);
+        Files.copy(inputStream, targetFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
+    }
+
+    @Override
+    public InputStream read(String sessionToken, String relativePathToFile) throws IOException {
+        File sessionWorkspace = getSessionWorkspace(sessionToken);
+        File targetFile = new File(sessionWorkspace, relativePathToFile);
+        return Files.newInputStream(targetFile.toPath());
+    }
+
+    @Override
+    public void delete(String sessionToken, String relativePathToFile) throws IOException {
+        File sessionWorkspace = getSessionWorkspace(sessionToken);
+        File targetFile = new File(sessionWorkspace, relativePathToFile);
+        Files.delete(targetFile.toPath());
+    }
+
     @Resource(name = ExposablePropertyPlaceholderConfigurer.PROPERTY_CONFIGURER_BEAN_NAME)
     private void setServicePropertiesPlaceholder(ExposablePropertyPlaceholderConfigurer servicePropertiesPlaceholder)
     {