diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java
index 71f6d81d01bed9d9c2610f46a55250cef9b4c8b7..cde1ec1e40504448cf204ded3cfbdc8927f10d08 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java
@@ -23,6 +23,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -101,6 +102,7 @@ abstract public class AbstractDatasetDownloadServlet extends HttpServlet
         this.applicationContext = applicationContext;
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public final void init(final ServletConfig servletConfig) throws ServletException
     {
@@ -111,6 +113,12 @@ abstract public class AbstractDatasetDownloadServlet extends HttpServlet
             applicationContext =
                     (ApplicationContext) context
                             .getAttribute(DataStoreServer.APPLICATION_CONTEXT_KEY);
+
+            // Look for the additional configuration parameters and initialize the servlet using
+            // them
+            Enumeration<String> e = servletConfig.getInitParameterNames();
+            if (e.hasMoreElements())
+                doSpecificInitialization(e, servletConfig);
         } catch (Exception ex)
         {
             notificationLog.fatal("Failure during '" + servletConfig.getServletName()
@@ -119,6 +127,16 @@ abstract public class AbstractDatasetDownloadServlet extends HttpServlet
         }
     }
 
+    /**
+     * Do any additional initialization using information from the properties passed in. Subclasses
+     * may override.
+     */
+    protected synchronized void doSpecificInitialization(Enumeration<String> parameterNames,
+            ServletConfig servletConfig)
+    {
+        return;
+    }
+
     protected final HttpSession tryGetOrCreateSession(final HttpServletRequest request,
             String sessionIdOrNull)
     {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java
index aeb989f7d0ffcecc574279a8ebe1e50ca0e75899..0dfae8b47be94d6109c68e84688d638d7429046c 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/ConfigParameters.java
@@ -91,10 +91,13 @@ final class ConfigParameters
 
         private final String servletPath;
 
-        public PluginServlet(String servletClass, String servletPath)
+        private final Properties servletProperties;
+
+        public PluginServlet(String servletClass, String servletPath, Properties servletProperties)
         {
             this.servletClass = servletClass;
             this.servletPath = servletPath;
+            this.servletProperties = servletProperties;
         }
 
         public String getServletClass()
@@ -108,6 +111,12 @@ final class ConfigParameters
             return servletPath;
         }
 
+        /** Any additional properties specified in the properties file */
+        public Properties getServletProperties()
+        {
+            return servletProperties;
+        }
+
         @Override
         public String toString()
         {
@@ -155,7 +164,7 @@ final class ConfigParameters
                     PropertyUtils.getMandatoryProperty(servletProps, PLUGIN_SERVICE_CLASS_KEY);
             String servletPath =
                     PropertyUtils.getMandatoryProperty(servletProps, PLUGIN_SERVICE_PATH_KEY);
-            servlets.add(new PluginServlet(servletClass, servletPath));
+            servlets.add(new PluginServlet(servletClass, servletPath, servletProps));
         }
         return servlets;
     }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java
index f8e16e9a16acb8fab709f5be555702b6a6ebe6ff..47cc3cca3d9e77ad63093aac8d23dc096aa98c7a 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java
@@ -175,19 +175,22 @@ public class DataStoreServer
 
     private static void registerPluginServlets(Context context, List<PluginServlet> pluginServlets)
     {
-        for (PluginServlet servlet : pluginServlets)
+        for (PluginServlet pluginServlet : pluginServlets)
         {
             Class<?> classInstance;
             try
             {
-                classInstance = Class.forName(servlet.getServletClass());
+                classInstance = Class.forName(pluginServlet.getServletClass());
             } catch (ClassNotFoundException ex)
             {
                 throw EnvironmentFailureException.fromTemplate(
-                        "Error while loading servlet plugin class '%s': %s", servlet.getClass(), ex
-                                .getMessage());
+                        "Error while loading servlet plugin class '%s': %s", pluginServlet
+                                .getClass(), ex.getMessage());
             }
-            context.addServlet(classInstance, servlet.getServletPath());
+            ServletHolder holder =
+                    context.addServlet(classInstance, pluginServlet.getServletPath());
+            // Add any additional parameters to the init parameters
+            holder.setInitParameters(pluginServlet.getServletProperties());
         }
     }