http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
index 0ea9730..50ffb55 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
@@ -39,6 +39,9 @@ import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageManager.FlagsUpdateMode;
 import org.apache.james.mailbox.MessageMoveEvent;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.OverQuotaException;
 import org.apache.james.mailbox.fixture.MailboxFixture;
@@ -50,10 +53,9 @@ import org.apache.james.mailbox.model.Quota;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.quota.QuotaManager;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
-import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.util.EventCollector;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.assertj.core.api.AbstractListAssert;
 import org.assertj.core.api.ObjectAssert;
 import org.junit.Rule;
@@ -72,7 +74,6 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     private static final MessageUid messageUid2 = MessageUid.of(113);
 
     private static final Flags FLAGS = new Flags();
-    private static final MailboxSession SESSION = 
MailboxSessionUtil.create("any");
 
     @Rule
     public ExpectedException expectedException = ExpectedException.none();
@@ -85,17 +86,17 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
     private QuotaManager quotaManager;
     private MessageIdManagerTestSystem testingData;
     private EventCollector eventCollector;
-    private DefaultDelegatingMailboxListener delegatingMailboxListener;
+    private EventBus eventBus;
 
-    protected abstract MessageIdManagerTestSystem 
createTestSystem(QuotaManager quotaManager, DelegatingMailboxListener 
delegatingMailboxListener) throws Exception;
+    protected abstract MessageIdManagerTestSystem 
createTestSystem(QuotaManager quotaManager, EventBus eventBus) throws Exception;
 
     public void setUp() throws Exception {
-        delegatingMailboxListener = new DefaultDelegatingMailboxListener();
+        eventBus = new InVMEventBus(new InVmEventDelivery(new 
NoopMetricFactory()));
         eventCollector = new EventCollector();
         quotaManager = mock(QuotaManager.class);
 
         session = MailboxSessionUtil.create(ALICE);
-        testingData = createTestSystem(quotaManager, 
delegatingMailboxListener);
+        testingData = createTestSystem(quotaManager, eventBus);
         messageIdManager = testingData.getMessageIdManager();
 
         mailbox1 = testingData.createMailbox(MailboxFixture.INBOX_ALICE, 
session);
@@ -111,7 +112,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         MessageResult messageResult = 
messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.MINIMAL, session).get(0);
         MessageMetaData simpleMessageMetaData = 
messageResult.messageMetaData();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.delete(messageId, 
ImmutableList.of(mailbox1.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents())
@@ -136,7 +137,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         MessageResult messageResult2 = 
messageIdManager.getMessages(ImmutableList.of(messageId2), 
FetchGroupImpl.MINIMAL, session).get(0);
         MessageMetaData simpleMessageMetaData2 = 
messageResult2.messageMetaData();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.delete(ImmutableList.of(messageId1, messageId2), 
session);
 
         AbstractListAssert<?, List<? extends MailboxListener.Expunged>, 
MailboxListener.Expunged, ObjectAssert<MailboxListener.Expunged>> events =
@@ -155,7 +156,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.persist(mailbox2.getMailboxId(), 
messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.delete(messageId, 
ImmutableList.of(mailbox1.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -166,7 +167,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), 
messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -177,7 +178,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.persist(mailbox2.getMailboxId(), 
messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).hasSize(2);
@@ -192,7 +193,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.persist(mailbox2.getMailboxId(), 
messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId(), 
mailbox3.getMailboxId()), session);
 
         messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.MINIMAL, session);
@@ -228,7 +229,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         List<MessageResult> messageResults = 
messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.MINIMAL, session);
         assertThat(messageResults).hasSize(2);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox3.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).hasSize(3);
@@ -247,7 +248,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
         MessageId messageId = testingData.persist(mailbox2.getMailboxId(), 
messageUid1, newFlags, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(newFlags, 
MessageManager.FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -260,7 +261,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), 
messageUid1, newFlags, session);
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox2.getMailboxId()), session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(newFlags, 
MessageManager.FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -272,7 +273,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), 
messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(newFlags, 
MessageManager.FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -284,7 +285,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         Flags newFlags = new Flags(Flags.Flag.SEEN);
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), 
messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(newFlags, 
MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -297,7 +298,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         MessageId messageId = testingData.persist(mailbox1.getMailboxId(), 
messageUid1, FLAGS, session);
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(newFlags, 
MessageManager.FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).hasSize(2).allSatisfy(event -> 
assertThat(event).isInstanceOf(MailboxListener.FlagsUpdated.class));
@@ -308,7 +309,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.persist(mailbox2.getMailboxId(), 
messageUid1, FLAGS, session);
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         Flags newFlags = new Flags(Flags.Flag.SEEN);
         messageIdManager.setFlags(newFlags, 
MessageManager.FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
 
@@ -337,7 +338,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.delete(messageId, 
ImmutableList.of(mailbox1.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -348,7 +349,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.delete(ImmutableList.of(messageId), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -359,7 +360,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setFlags(FLAGS, FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox2.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();
@@ -370,7 +371,7 @@ public abstract class 
AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
 
-        delegatingMailboxListener.addGlobalListener(eventCollector, SESSION);
+        eventBus.register(eventCollector);
         messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId()), session);
 
         assertThat(eventCollector.getEvents()).isEmpty();

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
index 6cc6933..1661de2 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
@@ -28,6 +28,7 @@ import javax.mail.util.SharedByteArrayInputStream;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.MailboxIdRegistrationKey;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxId;
@@ -82,12 +83,13 @@ public class MessageIdManagerTestSystem {
             Mailbox mailbox = 
mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
             MailboxMessage message = createMessage(mailboxId, flags, 
messageId, uid);
             mapperFactory.getMessageMapper(mailboxSession).add(mailbox, 
message);
-            mailboxManager.getDelegationListener().event(EventFactory.added()
+            mailboxManager.getEventBus().dispatch(EventFactory.added()
                 .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailbox)
                 .addMessage(message)
-                .build());
+                .build(),
+                new MailboxIdRegistrationKey(mailboxId));
             return messageId;
         } catch (Exception e) {
             throw new RuntimeException(e);

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
index 86d4df3..b5b5ca1 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
@@ -29,6 +29,8 @@ import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.BadCredentialsException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
@@ -42,7 +44,6 @@ import org.apache.james.mailbox.model.MessageId.Factory;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.model.search.MailboxQuery;
 import org.apache.james.mailbox.model.search.PrefixedRegex;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -50,6 +51,7 @@ import 
org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -79,10 +81,10 @@ public class StoreMailboxManagerTest {
         authenticator.addUser(CURRENT_USER, CURRENT_USER_PASSWORD);
         authenticator.addUser(ADMIN, ADMIN_PASSWORD);
 
-        DefaultDelegatingMailboxListener delegatingListener = new 
DefaultDelegatingMailboxListener();
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new 
NoopMetricFactory()));
 
         StoreRightManager storeRightManager = new 
StoreRightManager(mockedMapperFactory, new UnionMailboxACLResolver(),
-                                                                    new 
SimpleGroupMembershipResolver(), delegatingListener);
+                                                                    new 
SimpleGroupMembershipResolver(), eventBus);
 
         StoreMailboxAnnotationManager annotationManager = new 
StoreMailboxAnnotationManager(mockedMapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, 
FakeAuthorizator.forUserAndAdmin(ADMIN, CURRENT_USER));
@@ -91,7 +93,7 @@ public class StoreMailboxManagerTest {
 
         storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, 
sessionProvider,
                 new JVMMailboxPathLocker(), new MessageParser(), 
messageIdFactory,
-                annotationManager, delegatingListener, storeRightManager, 
quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
+                annotationManager, eventBus, storeRightManager, 
quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
     }
 
     @Test(expected = MailboxNotFoundException.class)

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
index 5643181..6329e56 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.exception.DifferentDomainException;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
@@ -46,7 +47,6 @@ import org.apache.james.mailbox.model.MailboxACL.ACLCommand;
 import org.apache.james.mailbox.model.MailboxACL.Right;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
@@ -69,11 +69,11 @@ public class StoreRightManagerTest {
         mockedMailboxMapper = mock(MailboxMapper.class);
         mailboxAclResolver = new UnionMailboxACLResolver();
         groupMembershipResolver = new SimpleGroupMembershipResolver();
-        DelegatingMailboxListener delegatingMailboxListener = 
mock(DelegatingMailboxListener.class);
+        EventBus eventBus = mock(EventBus.class);
         when(mockedMapperFactory.getMailboxMapper(aliceSession))
             .thenReturn(mockedMailboxMapper);
 
-        storeRightManager = new StoreRightManager(mockedMapperFactory, 
mailboxAclResolver, groupMembershipResolver, delegatingMailboxListener);
+        storeRightManager = new StoreRightManager(mockedMapperFactory, 
mailboxAclResolver, groupMembershipResolver, eventBus);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
index 27a38b2..b942af1 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.mailbox.store.quota;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anySet;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -34,21 +36,24 @@ import javax.mail.Flags;
 import org.apache.james.core.User;
 import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
+import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.events.EventBus;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
-import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.junit.Before;
 import org.junit.Test;
 
 import com.google.common.collect.Lists;
 
+import reactor.core.publisher.Mono;
+
 public class ListeningCurrentQuotaUpdaterTest {
 
     private static final int SIZE = 45;
@@ -65,8 +70,10 @@ public class ListeningCurrentQuotaUpdaterTest {
     public void setUp() throws Exception {
         mockedQuotaRootResolver = mock(QuotaRootResolver.class);
         mockedCurrentQuotaManager = mock(StoreCurrentQuotaManager.class);
+        EventBus eventBus = mock(EventBus.class);
+        when(eventBus.dispatch(any(Event.class), 
anySet())).thenReturn(Mono.empty());
         testee = new ListeningCurrentQuotaUpdater(mockedCurrentQuotaManager, 
mockedQuotaRootResolver,
-            mock(DelegatingMailboxListener.class), mock(QuotaManager.class));
+            eventBus, mock(QuotaManager.class));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/cassandra/pom.xml 
b/mpt/impl/imap-mailbox/cassandra/pom.xml
index 39b0ebc..27d1dbb 100644
--- a/mpt/impl/imap-mailbox/cassandra/pom.xml
+++ b/mpt/impl/imap-mailbox/cassandra/pom.xml
@@ -53,6 +53,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mpt-imapmailbox-core</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
 
b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index 5ce4b21..76ed7ea 100644
--- 
a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -38,6 +38,8 @@ import 
org.apache.james.mailbox.cassandra.quota.CassandraGlobalMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerDomainMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao;
 import 
org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.MailboxManagerConfiguration;
@@ -45,7 +47,6 @@ import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
@@ -54,6 +55,7 @@ import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -89,8 +91,9 @@ public class CassandraHostSystem extends JamesImapHostSystem {
             cassandra.getTypesProvider(),
             messageIdFactory);
 
-        DefaultDelegatingMailboxListener delegatingMailboxListener = new 
DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new 
StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new 
SimpleGroupMembershipResolver(), delegatingMailboxListener);
+
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new 
NoopMetricFactory()));
+        StoreRightManager storeRightManager = new 
StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new 
SimpleGroupMembershipResolver(), eventBus);
 
         StoreMailboxAnnotationManager annotationManager = new 
StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, 
authorizator);
@@ -102,16 +105,16 @@ public class CassandraHostSystem extends 
JamesImapHostSystem {
             new CassandraGlobalMaxQuotaDao(session));
         CassandraCurrentQuotaManager currentQuotaManager = new 
CassandraCurrentQuotaManager(session);
         StoreQuotaManager quotaManager = new 
StoreQuotaManager(currentQuotaManager, perUserMaxQuotaManager);
-        ListeningCurrentQuotaUpdater quotaUpdater = new 
ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, 
delegatingMailboxListener, quotaManager);
+        ListeningCurrentQuotaUpdater quotaUpdater = new 
ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, eventBus, 
quotaManager);
         QuotaComponents quotaComponents = new 
QuotaComponents(perUserMaxQuotaManager, quotaManager, quotaRootResolver, 
quotaUpdater);
 
         MessageSearchIndex index = new SimpleMessageSearchIndex(mapperFactory, 
mapperFactory, new DefaultTextExtractor());
 
         mailboxManager = new CassandraMailboxManager(mapperFactory, 
sessionProvider,
             new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory,
-            delegatingMailboxListener, annotationManager, storeRightManager, 
quotaComponents, index, MailboxManagerConfiguration.DEFAULT);
+            eventBus, annotationManager, storeRightManager, quotaComponents, 
index, MailboxManagerConfiguration.DEFAULT);
 
-        delegatingMailboxListener.addGlobalListener(quotaUpdater, 
sessionProvider.createSystemSession("admin"));
+        eventBus.register(quotaUpdater);
 
         SubscriptionManager subscriptionManager = new 
StoreSubscriptionManager(mapperFactory);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/elasticsearch/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/elasticsearch/pom.xml 
b/mpt/impl/imap-mailbox/elasticsearch/pom.xml
index c3a8bd5..dc0f12b 100644
--- a/mpt/impl/imap-mailbox/elasticsearch/pom.xml
+++ b/mpt/impl/imap-mailbox/elasticsearch/pom.xml
@@ -56,6 +56,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-memory</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
 
b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
index f20d56b..c12e44d 100644
--- 
a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java
@@ -38,7 +38,6 @@ import 
org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imap.main.DefaultImapDecoderFactory;
 import org.apache.james.imap.processor.main.DefaultImapProcessorFactory;
 import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
@@ -49,6 +48,8 @@ import 
org.apache.james.mailbox.elasticsearch.json.MessageToElasticSearchJson;
 import org.apache.james.mailbox.elasticsearch.query.CriterionConverter;
 import org.apache.james.mailbox.elasticsearch.query.QueryConverter;
 import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
@@ -60,12 +61,12 @@ import 
org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.NoQuotaManager;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -106,8 +107,8 @@ public class ElasticSearchHostSystem extends 
JamesImapHostSystem {
         InMemoryMessageId.Factory messageIdFactory = new 
InMemoryMessageId.Factory();
 
         InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new 
InMemoryMailboxSessionMapperFactory();
-        DefaultDelegatingMailboxListener delegatingListener = new 
DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new 
StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), 
new SimpleGroupMembershipResolver(), delegatingListener);
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new 
NoopMetricFactory()));
+        StoreRightManager storeRightManager = new 
StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), 
new SimpleGroupMembershipResolver(), eventBus);
         StoreMailboxAnnotationManager annotationManager = new 
StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
 
         SessionProvider sessionProvider = new SessionProvider(authenticator, 
authorizator);
@@ -135,13 +136,13 @@ public class ElasticSearchHostSystem extends 
JamesImapHostSystem {
             new JVMMailboxPathLocker(),
             new MessageParser(),
             messageIdFactory,
-            delegatingListener,
+            eventBus,
             annotationManager,
             storeRightManager,
             quotaComponents,
             searchIndex);
 
-        delegatingListener.addGlobalListener(searchIndex, 
MailboxSessionUtil.create("admin"));
+        eventBus.register(searchIndex);
 
         ImapProcessor defaultImapProcessorFactory =
             DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager,

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/jpa/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/jpa/pom.xml 
b/mpt/impl/imap-mailbox/jpa/pom.xml
index fdb9b1f..6f28763 100644
--- a/mpt/impl/imap-mailbox/jpa/pom.xml
+++ b/mpt/impl/imap-mailbox/jpa/pom.xml
@@ -39,6 +39,11 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-jpa</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
 
b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
index cf3c594..c15466d 100644
--- 
a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
@@ -35,6 +35,8 @@ import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.jpa.JPAMailboxFixture;
 import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
 import org.apache.james.mailbox.jpa.JPASubscriptionManager;
@@ -48,7 +50,6 @@ import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
@@ -59,6 +60,7 @@ import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.quota.StoreQuotaManager;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -101,23 +103,24 @@ public class JPAHostSystem extends JamesImapHostSystem {
         GroupMembershipResolver groupMembershipResolver = new 
SimpleGroupMembershipResolver();
         MessageParser messageParser = new MessageParser();
 
-        DefaultDelegatingMailboxListener delegatingListener = new 
DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new 
StoreRightManager(mapperFactory, aclResolver, groupMembershipResolver, 
delegatingListener);
+
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new 
NoopMetricFactory()));
+        StoreRightManager storeRightManager = new 
StoreRightManager(mapperFactory, aclResolver, groupMembershipResolver, 
eventBus);
         StoreMailboxAnnotationManager annotationManager = new 
StoreMailboxAnnotationManager(mapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, 
authorizator);
         DefaultUserQuotaRootResolver quotaRootResolver = new 
DefaultUserQuotaRootResolver(sessionProvider, mapperFactory);
         JpaCurrentQuotaManager currentQuotaManager = new 
JpaCurrentQuotaManager(entityManagerFactory);
         maxQuotaManager = new JPAPerUserMaxQuotaManager(new 
JPAPerUserMaxQuotaDAO(entityManagerFactory));
         StoreQuotaManager storeQuotaManager = new 
StoreQuotaManager(currentQuotaManager, maxQuotaManager);
-        ListeningCurrentQuotaUpdater quotaUpdater = new 
ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, 
delegatingListener, storeQuotaManager);
+        ListeningCurrentQuotaUpdater quotaUpdater = new 
ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, eventBus, 
storeQuotaManager);
         QuotaComponents quotaComponents = new QuotaComponents(maxQuotaManager, 
storeQuotaManager, quotaRootResolver, quotaUpdater);
         MessageSearchIndex index = new SimpleMessageSearchIndex(mapperFactory, 
mapperFactory, new DefaultTextExtractor());
 
         mailboxManager = new OpenJPAMailboxManager(mapperFactory, 
sessionProvider, messageParser, new DefaultMessageId.Factory(),
-            delegatingListener, annotationManager, storeRightManager, 
quotaComponents, index);
+            eventBus, annotationManager, storeRightManager, quotaComponents, 
index);
 
-        delegatingListener.addGlobalListener(quotaUpdater, 
sessionProvider.createSystemSession("admin"));
-        delegatingListener.addGlobalListener(new 
MailboxAnnotationListener(mapperFactory, sessionProvider), 
sessionProvider.createSystemSession("admin"));
+        eventBus.register(quotaUpdater);
+        eventBus.register(new MailboxAnnotationListener(mapperFactory, 
sessionProvider));
 
         SubscriptionManager subscriptionManager = new 
JPASubscriptionManager(mapperFactory);
         

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/lucenesearch/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/lucenesearch/pom.xml 
b/mpt/impl/imap-mailbox/lucenesearch/pom.xml
index 875ca8a..beeaf79 100644
--- a/mpt/impl/imap-mailbox/lucenesearch/pom.xml
+++ b/mpt/impl/imap-mailbox/lucenesearch/pom.xml
@@ -37,6 +37,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-memory</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
 
b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
index 8163306..2035304 100644
--- 
a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
@@ -35,7 +35,8 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
-import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
@@ -46,11 +47,11 @@ import org.apache.james.mailbox.store.SessionProvider;
 import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
 import org.apache.james.mailbox.store.quota.NoQuotaManager;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -98,10 +99,10 @@ public class LuceneSearchHostSystem extends 
JamesImapHostSystem {
     private void initFields() {
        
         try {
-            DefaultDelegatingMailboxListener delegatingMailboxListener = new 
DefaultDelegatingMailboxListener();
+            InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new 
NoopMetricFactory()));
 
             InMemoryMailboxSessionMapperFactory mapperFactory = new 
InMemoryMailboxSessionMapperFactory();
-            StoreRightManager rightManager = new 
StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new 
SimpleGroupMembershipResolver(), delegatingMailboxListener);
+            StoreRightManager rightManager = new 
StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new 
SimpleGroupMembershipResolver(), eventBus);
             JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
             InMemoryMessageId.Factory messageIdFactory = new 
InMemoryMessageId.Factory();
             SessionProvider sessionProvider = new 
SessionProvider(authenticator, authorizator);
@@ -113,7 +114,7 @@ public class LuceneSearchHostSystem extends 
JamesImapHostSystem {
                 locker,
                 new MessageParser(),
                 messageIdFactory,
-                delegatingMailboxListener,
+                eventBus,
                 new StoreMailboxAnnotationManager(mapperFactory, rightManager),
                 rightManager,
                 QuotaComponents.disabled(sessionProvider, mapperFactory),
@@ -121,7 +122,7 @@ public class LuceneSearchHostSystem extends 
JamesImapHostSystem {
 
             searchIndex.setEnableSuffixMatch(true);
 
-            delegatingMailboxListener.addGlobalListener(searchIndex, 
sessionProvider.createSystemSession("admin"));
+            eventBus.register(searchIndex);
 
             SubscriptionManager subscriptionManager = new 
StoreSubscriptionManager(mapperFactory);
 
@@ -137,7 +138,7 @@ public class LuceneSearchHostSystem extends 
JamesImapHostSystem {
                 new DefaultImapEncoderFactory().buildImapEncoder(),
                 defaultImapProcessorFactory);
 
-        } catch (IOException | MailboxException e) {
+        } catch (IOException e) {
             throw new RuntimeException(e);
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/maildir/pom.xml
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/maildir/pom.xml 
b/mpt/impl/imap-mailbox/maildir/pom.xml
index 41b0584..8f66a55 100644
--- a/mpt/impl/imap-mailbox/maildir/pom.xml
+++ b/mpt/impl/imap-mailbox/maildir/pom.xml
@@ -33,6 +33,11 @@
     <dependencies>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-maildir</artifactId>
             <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
 
b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
index de93a3d..688fe71 100644
--- 
a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java
@@ -33,6 +33,8 @@ import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.events.InVMEventBus;
+import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
 import org.apache.james.mailbox.maildir.MaildirMailboxSessionMapperFactory;
 import org.apache.james.mailbox.maildir.MaildirStore;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
@@ -42,13 +44,13 @@ import 
org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.StoreRightManager;
 import org.apache.james.mailbox.store.StoreSubscriptionManager;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.QuotaComponents;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
+import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.mpt.api.ImapFeatures;
 import org.apache.james.mpt.api.ImapFeatures.Feature;
@@ -56,15 +58,11 @@ import org.apache.james.mpt.host.JamesImapHostSystem;
 
 public class MaildirHostSystem extends JamesImapHostSystem {
 
-    public static final String META_DATA_DIRECTORY = "target/user-meta-data";
+    private static final String META_DATA_DIRECTORY = "target/user-meta-data";
     private static final String MAILDIR_HOME = "target/Maildir";
     private static final ImapFeatures SUPPORTED_FEATURES = ImapFeatures.of();
     
     private StoreMailboxManager mailboxManager;
-
-    public static JamesImapHostSystem build() throws Exception {
-        return new MaildirHostSystem();
-    }
     
     @Override
     public void beforeTest() throws Exception {
@@ -78,15 +76,15 @@ public class MaildirHostSystem extends JamesImapHostSystem {
         GroupMembershipResolver groupMembershipResolver = new 
SimpleGroupMembershipResolver();
         MessageParser messageParser = new MessageParser();
 
-        DefaultDelegatingMailboxListener delegatingListener = new 
DefaultDelegatingMailboxListener();
-        StoreRightManager storeRightManager = new 
StoreRightManager(mailboxSessionMapperFactory, aclResolver, 
groupMembershipResolver, delegatingListener);
+        InVMEventBus eventBus = new InVMEventBus(new InVmEventDelivery(new 
NoopMetricFactory()));
+        StoreRightManager storeRightManager = new 
StoreRightManager(mailboxSessionMapperFactory, aclResolver, 
groupMembershipResolver, eventBus);
         StoreMailboxAnnotationManager annotationManager = new 
StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager);
         SessionProvider sessionProvider = new SessionProvider(authenticator, 
authorizator);
         QuotaComponents quotaComponents = 
QuotaComponents.disabled(sessionProvider, mailboxSessionMapperFactory);
         MessageSearchIndex index = new 
SimpleMessageSearchIndex(mailboxSessionMapperFactory, 
mailboxSessionMapperFactory, new DefaultTextExtractor());
 
         mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, 
sessionProvider, locker,
-            messageParser, new DefaultMessageId.Factory(), annotationManager, 
delegatingListener, storeRightManager, quotaComponents,
+            messageParser, new DefaultMessageId.Factory(), annotationManager, 
eventBus, storeRightManager, quotaComponents,
             index, MailboxManagerConfiguration.DEFAULT);
 
         ImapProcessor defaultImapProcessorFactory =

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
----------------------------------------------------------------------
diff --git 
a/server/app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
 
b/server/app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
index f060891..9480061 100644
--- 
a/server/app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
+++ 
b/server/app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
@@ -22,8 +22,8 @@ package org.apache.james.app.spring;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.container.spring.context.JamesServerApplicationContext;
-import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.events.Group;
+import org.apache.james.mailbox.events.InVMEventBus;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.assertj.core.api.Condition;
 import org.junit.After;
@@ -31,10 +31,10 @@ import org.junit.Before;
 import org.junit.Test;
 
 public class JamesSpringContextTest {
-    private static final Condition<MailboxListener> QUOTA_UPDATER_LISTENER = 
new Condition<MailboxListener>() {
+    private static final Condition<Group> QUOTA_UPDATER_LISTENER = new 
Condition<Group>() {
         @Override
-        public boolean matches(MailboxListener mailboxListener) {
-            return mailboxListener instanceof ListeningCurrentQuotaUpdater;
+        public boolean matches(Group group) {
+            return ListeningCurrentQuotaUpdater.GROUP.equals(group);
         }
     };
     private static final int ONCE = 1;
@@ -55,9 +55,9 @@ public class JamesSpringContextTest {
 
     @Test
     public void springShouldLoadAndAddOnlyOneQuotaUpdaterListener() {
-        DefaultDelegatingMailboxListener mailboxListener = 
context.getBean(DefaultDelegatingMailboxListener.class);
+        InVMEventBus eventBus = context.getBean(InVMEventBus.class);
 
-        assertThat(mailboxListener.getRegistry().getGlobalListeners())
+        assertThat(eventBus.registeredGroups())
             .areExactly(ONCE, QUOTA_UPDATER_LISTENER);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
index c9a8f4c..6c95c9c 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
@@ -185,7 +185,7 @@ public class CassandraMailboxModule extends AbstractModule {
 
         Multibinder.newSetBinder(binder(), 
MailboxManagerDefinition.class).addBinding().to(CassandraMailboxManagerDefinition.class);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(MailboxAnnotationListener.class);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index eaadda6..006d323 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -74,7 +74,7 @@ public class ElasticSearchMailboxModule extends 
AbstractModule {
         
bind(MessageSearchIndex.class).to(ElasticSearchListeningMessageSearchIndex.class);
         
bind(ListeningMessageSearchIndex.class).to(ElasticSearchListeningMessageSearchIndex.class);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ElasticSearchListeningMessageSearchIndex.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
index 78bc752..80f2575 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchQuotaSearcherModule.java
@@ -51,7 +51,7 @@ public class ElasticSearchQuotaSearcherModule extends 
AbstractModule {
 
     @Override
     protected void configure() {
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ElasticSearchQuotaMailboxListener.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
 
b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
index bbe0590..1ceeb0d 100644
--- 
a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
+++ 
b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
@@ -106,7 +106,7 @@ public class JPAMailboxModule extends AbstractModule {
         
         Multibinder.newSetBinder(binder(), 
MailboxManagerDefinition.class).addBinding().to(JPAMailboxManagerDefinition.class);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(MailboxAnnotationListener.class);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
 
b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
index 118adf1..925ea99 100644
--- 
a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
+++ 
b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
@@ -55,7 +55,7 @@ public class JpaQuotaModule extends AbstractModule {
 
         bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
         bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class);
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ListeningCurrentQuotaUpdater.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
 
b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
index 79ea234..4b93211 100644
--- 
a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
+++ 
b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
@@ -43,7 +43,7 @@ public class LuceneSearchMailboxModule extends AbstractModule 
{
         bind(MessageSearchIndex.class).to(LuceneMessageSearchIndex.class);
         
bind(ListeningMessageSearchIndex.class).to(LuceneMessageSearchIndex.class);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(LuceneMessageSearchIndex.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/mailbox/pom.xml
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/pom.xml 
b/server/container/guice/mailbox/pom.xml
index 51053c1..32b6591 100644
--- a/server/container/guice/mailbox/pom.xml
+++ b/server/container/guice/mailbox/pom.xml
@@ -38,6 +38,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-memory</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-guice-configuration</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
index 9921b23..3ec0a61 100644
--- 
a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
+++ 
b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
@@ -26,10 +26,10 @@ import javax.inject.Inject;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.lifecycle.api.Configurable;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.InVMEventBus;
 import org.apache.james.mailbox.events.delivery.EventDelivery;
 import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
-import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
-import org.apache.james.mailbox.store.event.DelegatingMailboxListener;
 import org.apache.james.mailbox.store.event.MailboxAnnotationListener;
 import org.apache.james.mailbox.store.event.MailboxListenerRegistry;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
@@ -45,8 +45,6 @@ import com.google.inject.multibindings.Multibinder;
 public class DefaultEventModule extends AbstractModule {
     @Override
     protected void configure() {
-        bind(DefaultDelegatingMailboxListener.class).in(Scopes.SINGLETON);
-        
bind(DelegatingMailboxListener.class).to(DefaultDelegatingMailboxListener.class);
 
         Multibinder.newSetBinder(binder(), 
ConfigurationPerformer.class).addBinding().to(ListenerRegistrationPerformer.class);
 
@@ -57,10 +55,13 @@ public class DefaultEventModule extends AbstractModule {
         bind(MailboxListenersLoaderImpl.class).in(Scopes.SINGLETON);
         bind(MailboxListenerRegistry.class).in(Scopes.SINGLETON);
         
bind(MailboxListenersLoader.class).to(MailboxListenersLoaderImpl.class);
-        Multibinder.newSetBinder(binder(), MailboxListener.class);
+        Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class);
 
         bind(InVmEventDelivery.class).in(Scopes.SINGLETON);
         bind(EventDelivery.class).to(InVmEventDelivery.class);
+
+        bind(InVMEventBus.class).in(Scopes.SINGLETON);
+        bind(EventBus.class).to(InVMEventBus.class);
     }
 
     @Singleton

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
 
b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
index 2432baa..3bb2430 100644
--- 
a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
+++ 
b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
@@ -122,7 +122,7 @@ public class MemoryMailboxModule extends AbstractModule {
             .addBinding()
             .to(MemoryMailboxManagerDefinition.class);
 
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(MailboxAnnotationListener.class);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
 
b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
index 5bd73fc..9216f78 100644
--- 
a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
+++ 
b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
@@ -55,7 +55,7 @@ public class MemoryQuotaModule extends AbstractModule {
 
         bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
         bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class);
-        Multibinder.newSetBinder(binder(), MailboxListener.class)
+        Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class)
             .addBinding()
             .to(ListeningCurrentQuotaUpdater.class);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/89f168de/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
index c35225b..307f4b5 100644
--- 
a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
+++ 
b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
@@ -102,7 +102,7 @@ public class JMAPModule extends AbstractModule {
 
         
bind(MailQueueItemDecoratorFactory.class).to(PostDequeueDecoratorFactory.class).in(Scopes.SINGLETON);
 
-        Multibinder.newSetBinder(binder(), 
MailboxListener.class).addBinding().to(PropagateLookupRightListener.class);
+        Multibinder.newSetBinder(binder(), 
MailboxListener.GroupMailboxListener.class).addBinding().to(PropagateLookupRightListener.class);
     }
 
     @Provides


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to