diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/IOperationListener.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/IOperationListener.java
index dfcd0066a527c2a8f7099708f34cc68dc1f264a8..8959f297e09adf9fd0f61e5ff097ee3b3368522d 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/IOperationListener.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/operation/IOperationListener.java
@@ -7,6 +7,8 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 
 
 public interface IOperationListener<OPERATION extends IOperation, RESULT extends IOperationResult> {
+    public static final String LISTENER_PROPERTY_KEY = "operation-listener";
+
     public abstract void beforeOperation(IApplicationServerInternalApi api, Session session, OPERATION operation);
     public abstract void afterOperation(IApplicationServerInternalApi api, Session session, OPERATION operation, RESULT result, RuntimeException runtimeException);
 }
diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/shared/utils/AutoSymlink.java b/openbis/source/java/ch/ethz/sis/openbis/generic/shared/utils/AutoSymlink.java
index 7c046542dad40dd251b2e552b455b84891ff1c2f..ba2cb5d42e782a47b6770b45a7078e7bc6dbc1a5 100644
--- a/openbis/source/java/ch/ethz/sis/openbis/generic/shared/utils/AutoSymlink.java
+++ b/openbis/source/java/ch/ethz/sis/openbis/generic/shared/utils/AutoSymlink.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import java.util.Map;
 import java.util.Properties;
 
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.operation.IOperationListener;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.service.CustomASServiceProvider;
 import ch.systemsx.cisd.base.unix.Unix;
 import ch.systemsx.cisd.common.io.PropertyIOUtils;
@@ -50,8 +51,9 @@ public class AutoSymlink
                 new PluginType("services",
                         CustomASServiceProvider.SERVICES_PROPERTY_KEY);
         PluginType miscellaneous = new PluginType("miscellaneous", null);
+        PluginType apiListener = new PluginType("api-listener", IOperationListener.LISTENER_PROPERTY_KEY);
         CorePluginsInjector injector =
-                new CorePluginsInjector(ScannerType.AS, new IPluginType[] { maintenanceTasks, services, miscellaneous });
+                new CorePluginsInjector(ScannerType.AS, new IPluginType[] { maintenanceTasks, services, miscellaneous, apiListener });
         Map<String, File> pluginFolders = injector.injectCorePlugins(properties);
         createSymlinks(new File("webapps/openbis/WEB-INF/lib/"), pluginFolders);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/coreplugin/CorePluginsInjectingPropertyPlaceholderConfigurer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/coreplugin/CorePluginsInjectingPropertyPlaceholderConfigurer.java
index 5614e0a727731db2c01198e63f88cd3e078cc6d9..ce14b3101340986478fc2b408f2aa21921aa158f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/coreplugin/CorePluginsInjectingPropertyPlaceholderConfigurer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/coreplugin/CorePluginsInjectingPropertyPlaceholderConfigurer.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.server.coreplugin;
 import java.io.IOException;
 import java.util.Properties;
 
+import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.operation.IOperationListener;
 import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.service.CustomASServiceProvider;
 import ch.systemsx.cisd.common.maintenance.MaintenanceTaskUtils;
 import ch.systemsx.cisd.common.spring.ExposablePropertyPlaceholderConfigurer;
@@ -65,10 +66,11 @@ public class CorePluginsInjectingPropertyPlaceholderConfigurer extends
                         CustomImport.PropertyNames.CUSTOM_IMPORTS.getName());
         PluginType queryDatabases = new PluginType("query-databases", "query-databases");
         PluginType miscellaneous = new PluginType("miscellaneous", null);
+        PluginType apiListener = new PluginType("api-listener", IOperationListener.LISTENER_PROPERTY_KEY);
         PluginType webapps = PLUGIN_TYPE_WEBAPPS;
 
         new CorePluginsInjector(ScannerType.AS, new IPluginType[]
-        { maintenanceTasks, services, customImports, queryDatabases, miscellaneous, dssDataSources,
+        { maintenanceTasks, services, customImports, queryDatabases, miscellaneous, apiListener, dssDataSources,
                 webapps }).injectCorePlugins(properties);
 
         // Inject the web apps into jetty