diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractTabularDataGraphServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractTabularDataGraphServlet.java
index 3c266ac943506b082d0f03ef7b90f300cc7f0618..960c128cd6fc034706aa919118281f95a38faee5 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractTabularDataGraphServlet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractTabularDataGraphServlet.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.dss.generic.server;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.Date;
 import java.util.Enumeration;
@@ -27,9 +28,12 @@ import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.common.spring.ExposablePropertyPlaceholderConfigurer;
 import ch.systemsx.cisd.openbis.dss.generic.server.graph.ITabularDataGraph;
 import ch.systemsx.cisd.openbis.dss.generic.server.graph.TabularDataGraphCollectionConfiguration;
+import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
 import ch.systemsx.cisd.openbis.dss.generic.shared.utils.ITabularData;
+import ch.systemsx.cisd.openbis.dss.generic.shared.utils.SessionWorkspaceUtil;
 
 /**
  * @author Chandrasekhar Ramakrishnan
@@ -77,7 +81,7 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow
         public RequestParams(HttpServletRequest request)
         {
             sessionId = getRequiredParameter(request, Utils.SESSION_ID_PARAM);
-            datasetCode = getRequiredParameter(request, DATASET_CODE_PARAM);
+            datasetCode = getOptionalParameter(request, DATASET_CODE_PARAM);
             filePathOrNull = getOptionalParameter(request, FILE_PATH_PARAM);
             graphName = getOptionalParameter(request, GRAPH_TYPE_CODE, "dynamic");
             width = getIntParam(request, WIDTH_PARAM, 0);
@@ -179,6 +183,30 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow
             String datasetCode = params.datasetCode;
             String filePathOrNull = params.filePathOrNull;
 
+            if (datasetCode == null)
+            {
+                ExposablePropertyPlaceholderConfigurer config =
+                        (ExposablePropertyPlaceholderConfigurer) ServiceProvider
+                                .getApplicationContext()
+                                .getBean(
+                                        ExposablePropertyPlaceholderConfigurer.PROPERTY_CONFIGURER_BEAN_NAME);
+
+                String workspace =
+                        config.getResolvedProps().getProperty(
+                                SessionWorkspaceUtil.SESSION_WORKSPACE_ROOT_DIR_KEY);
+
+                if (workspace == null)
+                {
+                    workspace = SessionWorkspaceUtil.SESSION_WORKSPACE_ROOT_DIR_DEFAULT;
+                }
+
+                File sessionWorkspace =
+                        new SessionWorkspaceProvider(new File(workspace), sessionId)
+                                .getSessionWorkspace();
+
+                filePathOrNull = sessionWorkspace.getAbsolutePath() + "/" + filePathOrNull;
+            }
+
             // Get the session and user from the request
             HttpSession session = tryGetOrCreateSession(request, sessionId);
             if (session == null)
@@ -189,7 +217,18 @@ public abstract class AbstractTabularDataGraphServlet extends AbstractDatasetDow
             // Check that the user has view access to the data
             // NOTE: This throws an exception -- it may be nicer to return an image for a
             // non-accessible dataset...
-            ensureDatasetAccessible(datasetCode, session, sessionId);
+            if (datasetCode != null)
+            {
+                ensureDatasetAccessible(datasetCode, session, sessionId);
+            } else
+            {
+                if (filePathOrNull == null || new File(filePathOrNull).exists() == false)
+                {
+                    throw new UserFailureException("File '" + filePathOrNull
+                            + "' is not accessible.");
+                }
+
+            }
 
             // Get the tabular data
             ITabularData fileLines = getDatasetLines(request, datasetCode, filePathOrNull);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DynamicFileTabularDataGraphServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DynamicFileTabularDataGraphServlet.java
index 170155147ce49e64b7c805d9a88602dce8537277..eb49d319be7c09310de7d04ad3a64de16cb75ab2 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DynamicFileTabularDataGraphServlet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DynamicFileTabularDataGraphServlet.java
@@ -67,8 +67,6 @@ public class DynamicFileTabularDataGraphServlet extends FileTabularDataGraphServ
         DynamicTabularDataGraphCollectionConfiguration config =
                 new DynamicTabularDataGraphCollectionConfiguration();
 
-        config.setColumnDelimiter(commonConfig.getColumnDelimiter());
-
         Properties props = new Properties();
 
         if (name != null)
@@ -85,6 +83,7 @@ public class DynamicFileTabularDataGraphServlet extends FileTabularDataGraphServ
 
             config.setImageHeight(graphConfig.getImageHeight());
             config.setImageWidth(graphConfig.getImageWidth());
+            config.setColumnDelimiter(commonConfig.getColumnDelimiter());
         } else
         {
             name = DYNAMIC_GRAPH_NAME;
@@ -195,6 +194,7 @@ public class DynamicFileTabularDataGraphServlet extends FileTabularDataGraphServ
     protected synchronized void doSpecificInitialization(Enumeration<String> parameterNames,
             ServletConfig servletConfig)
     {
+
         if (commonConfig == null)
         {
             String propertiesFilePath = servletConfig.getInitParameter(PROPERTIES_FILE_KEY);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/FileTabularDataGraphServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/FileTabularDataGraphServlet.java
index 4f056fd39dd45ec08233ddecf09ed5a9ef19e6c4..43949fa53127057c5516bef76d9156f3119caf45 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/FileTabularDataGraphServlet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/FileTabularDataGraphServlet.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.dss.generic.server;
 
+import java.io.File;
 import java.io.IOException;
 
 import javax.servlet.http.HttpServletRequest;
@@ -49,16 +50,32 @@ public class FileTabularDataGraphServlet extends AbstractTabularDataGraphServlet
 
         RequestParams requestParams = new RequestParams(request);
 
-        IHierarchicalContentProvider contentProvider =
-                applicationContext.getHierarchicalContentProvider(requestParams.getSessionId());
-        IHierarchicalContent content = contentProvider.asContent(dataSetCode);
-        IHierarchicalContentNode node = content.getNode(pathOrNull);
-
-        ITabularData data =
-                CsvFileReaderHelper.getDatasetFileLines(node.getFile(), getConfiguration(request));
-
-        content.close();
+        File file;
+        IHierarchicalContent content = null;
+        try
+        {
+            if (dataSetCode == null)
+            {
+                file = new File(pathOrNull);
+            } else
+            {
+                IHierarchicalContentProvider contentProvider =
+                        applicationContext.getHierarchicalContentProvider(requestParams
+                                .getSessionId());
+                content = contentProvider.asContent(dataSetCode);
+                IHierarchicalContentNode node = content.getNode(pathOrNull);
+                file = node.getFile();
+            }
 
-        return data;
+            ITabularData data =
+                    CsvFileReaderHelper.getDatasetFileLines(file, getConfiguration(request));
+            return data;
+        } finally
+        {
+            if (content != null)
+            {
+                content.close();
+            }
+        }
     }
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SessionWorkspaceUtil.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SessionWorkspaceUtil.java
index 32c7d3b290d2b29578c76b5dfb5ad2125f8d74fc..c9b3e314959706b2fc5dc662608f2851f73f654e 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SessionWorkspaceUtil.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SessionWorkspaceUtil.java
@@ -23,14 +23,14 @@ import ch.systemsx.cisd.common.filesystem.QueueingPathRemoverService;
 
 /**
  * Utility functions for session workspace.
- *
+ * 
  * @author Franz-Josef Elmer
  */
 public class SessionWorkspaceUtil
 {
-    private static final String SESSION_WORKSPACE_ROOT_DIR_KEY = "session-workspace-root-dir";
+    public static final String SESSION_WORKSPACE_ROOT_DIR_KEY = "session-workspace-root-dir";
 
-    private static final String SESSION_WORKSPACE_ROOT_DIR_DEFAULT = "data/sessionWorkspace";
+    public static final String SESSION_WORKSPACE_ROOT_DIR_DEFAULT = "data/sessionWorkspace";
 
     public static File getSessionWorkspace(Properties properties)
     {