diff --git a/datastore_server/.classpath b/datastore_server/.classpath
index 5690297cf29c832c9712d3eac4d54aff6ea5a400..489b20ce9168771de72ef0bda010f159cf134122 100644
--- a/datastore_server/.classpath
+++ b/datastore_server/.classpath
@@ -31,5 +31,6 @@
 	<classpathentry kind="lib" path="/libraries/jaxb/jaxb-api.jar" sourcepath="/libraries/jaxb/jaxb-api-src.zip"/>
 	<classpathentry kind="lib" path="/libraries/jaxb/jaxb-impl.jar"/>
 	<classpathentry kind="lib" path="/libraries/jaxb/jsr173_1.0_api.jar"/>
+	<classpathentry kind="lib" path="/libraries/activation/activation.jar"/>
 	<classpathentry kind="output" path="targets/classes"/>
 </classpath>
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java
index d21aa531d1bf7c2c692d235faeed8382ea6e906b..461995d39da1675f646d49232c80166367453a47 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java
@@ -31,6 +31,7 @@ import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.activation.MimetypesFileTypeMap;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
@@ -40,6 +41,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
+import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
@@ -71,6 +73,10 @@ public class DatasetDownloadServlet extends HttpServlet
 
     static final String BINARY_CONTENT_TYPE = "binary";
 
+    static final String PLAIN_TEXT_CONTENT_TYPE = "text/plain";
+
+    private static final MimetypesFileTypeMap MIMETYPES = new MimetypesFileTypeMap();
+
     private static final long serialVersionUID = 1L;
 
     protected static final Logger operationLog =
@@ -79,6 +85,24 @@ public class DatasetDownloadServlet extends HttpServlet
     protected static final Logger notificationLog =
             LogFactory.getLogger(LogCategory.NOTIFY, DatasetDownloadServlet.class);
 
+    // @Private
+    static String getMimeType(File f, boolean plainTextMode)
+    {
+        if (plainTextMode)
+        {
+             return BINARY_CONTENT_TYPE;
+        } else
+        {
+            if (FilenameUtils.getExtension(f.getName()).length() == 0)
+            {
+                return PLAIN_TEXT_CONTENT_TYPE;
+            } else
+            {
+                return MIMETYPES.getContentType(f.getName().toLowerCase());
+            }
+        }
+    }
+
     private static final Comparator<File> FILE_COMPARATOR = new Comparator<File>()
         {
             public int compare(File file1, File file2)
@@ -214,7 +238,7 @@ public class DatasetDownloadServlet extends HttpServlet
         RenderingContext context =
                 new RenderingContext(rootDir, requestParams.getURLPrefix(), requestParams
                         .getPathInfo());
-        renderPage(rendererFactory, response, dataSet, context);
+        renderPage(rendererFactory, response, dataSet, context, requestParams);
     }
 
     private IRendererFactory createRendererFactory(boolean plainTextMode)
@@ -290,7 +314,8 @@ public class DatasetDownloadServlet extends HttpServlet
     }
 
     private void renderPage(IRendererFactory rendererFactory, HttpServletResponse response,
-            ExternalDataPE dataSet, RenderingContext renderingContext) throws IOException
+            ExternalDataPE dataSet, RenderingContext renderingContext, RequestParams requestParams)
+            throws IOException
     {
         File file = renderingContext.getFile();
         if (file.exists() == false)
@@ -302,7 +327,7 @@ public class DatasetDownloadServlet extends HttpServlet
             createPage(rendererFactory, response, dataSet, renderingContext, file);
         } else
         {
-            deliverFile(response, dataSet, file);
+            deliverFile(response, dataSet, file, requestParams.isPlainTextMode());
         }
     }
 
@@ -354,8 +379,8 @@ public class DatasetDownloadServlet extends HttpServlet
         }
     }
 
-    private void deliverFile(final HttpServletResponse response, ExternalDataPE dataSet, File file)
-            throws IOException, FileNotFoundException
+    private void deliverFile(final HttpServletResponse response, ExternalDataPE dataSet, File file,
+            boolean plainTextMode) throws IOException, FileNotFoundException
     {
         long size = file.length();
         if (operationLog.isInfoEnabled())
@@ -367,7 +392,7 @@ public class DatasetDownloadServlet extends HttpServlet
         response.setHeader("Content-Disposition", "inline; filename=" + file.getName());
         ServletOutputStream outputStream = null;
         FileInputStream fileInputStream = null;
-        response.setContentType(BINARY_CONTENT_TYPE);
+        response.setContentType(getMimeType(file, plainTextMode));
         try
         {
             outputStream = response.getOutputStream();
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServletTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServletTest.java
index fdce0b982dcaa9741cdb592cdf54f5d306b14151..313d6ed834527b033e52dad77f8716517d2474c6 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServletTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServletTest.java
@@ -155,6 +155,17 @@ public class DatasetDownloadServletTest
         context.assertIsSatisfied();
     }
 
+    @Test
+    public void testGetMimetype()
+    {
+        assertEquals("image/tiff", DatasetDownloadServlet.getMimeType(new File("/some/image.tiff"), false));
+        assertEquals("binary", DatasetDownloadServlet.getMimeType(new File("/some/image.tiff"), true));
+        assertEquals("image/tiff", DatasetDownloadServlet.getMimeType(new File("/some/image.TIF"), false));
+        assertEquals("binary", DatasetDownloadServlet.getMimeType(new File("/some/image.TIF"), true));
+        assertEquals("application/pdf", DatasetDownloadServlet.getMimeType(new File("doc.pdf"), false));
+        assertEquals("text/plain", DatasetDownloadServlet.getMimeType(new File("/dir/filewithoutext"), false));
+    }
+
     @Test
     public void testInitialDoGet() throws Exception
     {
@@ -305,7 +316,7 @@ public class DatasetDownloadServletTest
         context.checking(new Expectations()
             {
                 {
-                    one(response).setContentType(DatasetDownloadServlet.BINARY_CONTENT_TYPE);
+                    one(response).setContentType("text/plain");
                     one(response).setContentLength(EXAMPLE_FILE_CONTENT.length());
                     one(response).setHeader("Content-Disposition",
                             "inline; filename=" + EXAMPLE_FILE_NAME);