diff --git a/BUCK b/BUCK
index f2901e3..b80fa41 100644
--- a/BUCK
+++ b/BUCK
@@ -9,19 +9,13 @@
     'Gerrit-PluginName: rabbitmq',
     'Gerrit-Module: com.googlesource.gerrit.plugins.rabbitmq.Module',
     'Implementation-Title: Gerrit rabbitmq plugin',
-    'Implementation-URL: https://github.com/rinrinne/gerrit-rabbitmq-plugin',
-    'Implementation-Vendor: rinrinne',
   ],
   deps = [
     ':amqp-client',
+    ':commons-codec',
     ':commons-io',
     ':guice-multibindings',
   ],
-  provided_deps = [
-    '//lib:gson',
-    '//lib/commons:codec',
-    '//lib/commons:lang',
-  ],
 )
 
 java_library(
@@ -30,12 +24,11 @@
 )
 
 maven_jar(
-  name = 'amqp-client',
-  id = 'com.rabbitmq:amqp-client:3.5.2',
-  sha1 = '8d10edd29e08f78349bd1da9d18f81c9f8b90567',
-  license = 'MPL1.1',
-  exclude_java_sources = True,
-  visibility = [],
+  name = 'commons-codec',
+  id = 'commons-codec:commons-codec:1.4',
+  sha1 = '4216af16d38465bbab0f3dff8efa14204f7a399a',
+  license = 'Apache2.0',
+  exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
 )
 
 maven_jar(
@@ -46,6 +39,15 @@
 )
 
 maven_jar(
+  name = 'amqp-client',
+  id = 'com.rabbitmq:amqp-client:3.5.2',
+  sha1 = '8d10edd29e08f78349bd1da9d18f81c9f8b90567',
+  license = 'MPL1.1',
+  exclude_java_sources = True,
+  visibility = [],
+)
+
+maven_jar(
   name = 'guice-multibindings',
   id = 'com.google.inject.extensions:guice-multibindings:4.0',
   sha1 = 'f4509545b4470bbcc865aa500ad6fef2e97d28bf',
diff --git a/lib/BUCK b/lib/BUCK
index 06f7c02..07a8031 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -1,8 +1 @@
 include_defs('//bucklets/maven_jar.bucklet')
-
-maven_jar(
-  name = 'gson',
-  id = 'com.google.code.gson:gson:2.3.1',
-  sha1 = 'ecb6e1f8e4b0e84c4b886c2f14a1500caf309757',
-  license = 'Apache2.0',
-)
diff --git a/lib/commons/BUCK b/lib/commons/BUCK
deleted file mode 100644
index 7b7f70f..0000000
--- a/lib/commons/BUCK
+++ /dev/null
@@ -1,24 +0,0 @@
-include_defs('//bucklets/maven_jar.bucklet')
-
-maven_jar(
-  name = 'codec',
-  id = 'commons-codec:commons-codec:1.4',
-  sha1 = '4216af16d38465bbab0f3dff8efa14204f7a399a',
-  license = 'Apache2.0',
-  exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
-)
-
-maven_jar(
-  name = 'lang',
-  id = 'commons-lang:commons-lang:2.5',
-  sha1 = 'b0236b252e86419eef20c31a44579d2aee2f0a69',
-  license = 'Apache2.0',
-  exclude = ['META-INF/LICENSE.txt', 'META-INF/NOTICE.txt'],
-)
-
-maven_jar(
-  name = 'io',
-  id = 'commons-io:commons-io:1.4',
-  sha1 = 'a8762d07e76cfde2395257a5da47ba7c1dbd3dce',
-  license = 'Apache2.0',
-)
diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
index 1df977d..1ae48ff 100644
--- a/lib/gerrit/BUCK
+++ b/lib/gerrit/BUCK
@@ -1,12 +1,12 @@
 include_defs('//bucklets/maven_jar.bucklet')
 
-VER = '2.12.1'
+VER = '2.13.2'
 REPO = MAVEN_CENTRAL
 
 maven_jar(
   name = 'plugin-api',
   id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
-  sha1 = 'd15de32f16d538e83f02a033be0667c55ec5f8df',
+  sha1 = '3cdeb17c2b0f945e71135ef6abe5a1db59b9d313',
   license = 'Apache2.0',
   attach_source = False,
   repository = REPO,
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
index c07fcdc..762d78e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
@@ -17,7 +17,9 @@
 import com.google.gerrit.common.EventListener;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gson.Gson;
 import com.google.inject.AbstractModule;
+import com.google.inject.Singleton;
 import com.google.inject.assistedinject.FactoryModuleBuilder;
 import com.google.inject.multibindings.Multibinder;
 
@@ -30,6 +32,7 @@
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Message;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Monitor;
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Section;
+import com.googlesource.gerrit.plugins.rabbitmq.message.GsonProvider;
 import com.googlesource.gerrit.plugins.rabbitmq.message.MessagePublisher;
 import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
 import com.googlesource.gerrit.plugins.rabbitmq.message.PublisherFactory;
@@ -56,6 +59,7 @@
     install(new FactoryModuleBuilder().implement(Publisher.class, MessagePublisher.class).build(PublisherFactory.class));
     install(new FactoryModuleBuilder().implement(Properties.class, PluginProperties.class).build(PropertiesFactory.class));
     install(new FactoryModuleBuilder().implement(EventWorker.class, UserEventWorker.class).build(EventWorkerFactory.class));
+    bind(Gson.class).toProvider(GsonProvider.class).in(Singleton.class);
 
     DynamicSet.bind(binder(), LifecycleListener.class).to(Manager.class);
     DynamicSet.bind(binder(), EventListener.class).to(DefaultEventWorker.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/GsonProvider.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/GsonProvider.java
new file mode 100644
index 0000000..9aa38ed
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/message/GsonProvider.java
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.rabbitmq.message;
+
+import com.google.common.base.Supplier;
+import com.google.gerrit.server.events.SupplierSerializer;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.inject.Provider;
+
+public class GsonProvider implements Provider<Gson> {
+
+  @Override
+  public Gson get() {
+    return new GsonBuilder().registerTypeAdapter(Supplier.class,
+        new SupplierSerializer()).create();
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java
index 76ba4e8..a919dbd 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/worker/UserEventWorker.java
@@ -14,13 +14,16 @@
 
 package com.googlesource.gerrit.plugins.rabbitmq.worker;
 
-import com.google.gerrit.common.EventSource;
+import com.google.gerrit.common.UserScopedEventListener;
+import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.extensions.registration.RegistrationHandle;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.PluginUser;
 import com.google.gerrit.server.account.AccountResolver;
+import com.google.gerrit.server.events.Event;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.gerrit.server.util.RequestContext;
 import com.google.gerrit.server.util.ThreadLocalRequestContext;
@@ -35,34 +38,39 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.HashMap;
+import java.util.Map;
+
 public class UserEventWorker implements EventWorker {
 
   private static final Logger LOGGER = LoggerFactory.getLogger(UserEventWorker.class);
 
-  private final EventSource source;
+  private final DynamicSet<UserScopedEventListener> eventListeners;
   private final WorkQueue workQueue;
   private final AccountResolver accountResolver;
   private final IdentifiedUser.GenericFactory userFactory;
   private final ThreadLocalRequestContext threadLocalRequestContext;
   private final PluginUser pluginUser;
   private final SchemaFactory<ReviewDb> schemaFactory;
+  private final Map<Publisher, RegistrationHandle> eventListenerRegistrations;
 
   @Inject
   public UserEventWorker(
-      EventSource source,
+      DynamicSet<UserScopedEventListener> eventListeners,
       WorkQueue workQueue,
       AccountResolver accountResolver,
       IdentifiedUser.GenericFactory userFactory,
       ThreadLocalRequestContext threadLocalRequestContext,
       PluginUser pluginUser,
       SchemaFactory<ReviewDb> schemaFactory) {
-    this.source = source;
+    this.eventListeners = eventListeners;
     this.workQueue = workQueue;
     this.accountResolver = accountResolver;
     this.userFactory = userFactory;
     this.threadLocalRequestContext = threadLocalRequestContext;
     this.pluginUser = pluginUser;
     this.schemaFactory = schemaFactory;
+    eventListenerRegistrations = new HashMap<>();
   }
 
   @Override
@@ -104,14 +112,24 @@
               }
             });
         try {
-          userAccount = accountResolver.find(userName);
+          userAccount = accountResolver.find(db, userName);
           if (userAccount == null) {
             LOGGER.error("No single user could be found when searching for listenAs: {}", userName);
             return;
           }
-
-          IdentifiedUser user = userFactory.create(userAccount.getId());
-          source.addEventListener(publisher.getEventListener(), user);
+          final IdentifiedUser user = userFactory.create(userAccount.getId());
+          RegistrationHandle registration =
+              eventListeners.add(new UserScopedEventListener() {
+                @Override
+                public void onEvent(Event event) {
+                  publisher.getEventListener().onEvent(event);
+                }
+                @Override
+                public CurrentUser getUser() {
+                  return user;
+                }
+              });
+          eventListenerRegistrations.put(publisher, registration);
           LOGGER.info("Listen events as : {}", userName);
         } catch (OrmException e) {
           LOGGER.error("Could not query database for listenAs", e);
@@ -129,7 +147,11 @@
 
   @Override
   public void removePublisher(final Publisher publisher) {
-    source.removeEventListener(publisher.getEventListener());
+    RegistrationHandle registration =
+        eventListenerRegistrations.remove(publisher);
+    if (registration != null) {
+      registration.remove();
+    }
   }
 
   @Override
