diff --git a/BUILD b/BUILD
index ab3b9b8..70dd404 100644
--- a/BUILD
+++ b/BUILD
@@ -29,11 +29,10 @@
   resources = RESOURCES,
   manifest_entries = [
     'Gerrit-PluginName: cloud-notifications',
-    'Gerrit-ApiVersion: 2.14-SNAPSHOT',
+    'Gerrit-ApiVersion: 2.15',
     'Gerrit-Module: com.ruesga.gerrit.plugins.fcm.ApiModule',
     'Implementation-Title: Firebase Cloud Notifications Plugin',
-    'Implementation-URL: https://gerrit.googlesource.com/plugins/cloud-notifications',
-    'Implementation-Version: 2.14-SNAPSHOT'
+    'Implementation-URL: https://gerrit.googlesource.com/plugins/cloud-notifications'
   ],
   deps = DEPS
 )
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/ApiModule.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/ApiModule.java
index 9947f29..5ddff04 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/ApiModule.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/ApiModule.java
@@ -20,39 +20,12 @@
 import static com.ruesga.gerrit.plugins.fcm.server.DeviceResource.DEVICE_KIND;
 import static com.ruesga.gerrit.plugins.fcm.server.TokenResource.TOKEN_KIND;
 
-import com.google.gerrit.extensions.events.AssigneeChangedListener;
-import com.google.gerrit.extensions.events.ChangeAbandonedListener;
-import com.google.gerrit.extensions.events.ChangeMergedListener;
-import com.google.gerrit.extensions.events.ChangeRestoredListener;
-import com.google.gerrit.extensions.events.ChangeRevertedListener;
-import com.google.gerrit.extensions.events.CommentAddedListener;
-import com.google.gerrit.extensions.events.DraftPublishedListener;
-import com.google.gerrit.extensions.events.HashtagsEditedListener;
-import com.google.gerrit.extensions.events.LifecycleListener;
-import com.google.gerrit.extensions.events.ReviewerAddedListener;
-import com.google.gerrit.extensions.events.ReviewerDeletedListener;
-import com.google.gerrit.extensions.events.RevisionCreatedListener;
-import com.google.gerrit.extensions.events.TopicEditedListener;
-import com.google.gerrit.extensions.events.VoteDeletedListener;
+import com.google.gerrit.extensions.events.*;
 import com.google.gerrit.extensions.registration.DynamicMap;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.restapi.RestApiModule;
 import com.google.inject.Scopes;
-import com.ruesga.gerrit.plugins.fcm.DatabaseManager;
-import com.ruesga.gerrit.plugins.fcm.handlers.AssigneeChangedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.ChangeAbandonedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.ChangeMergedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.ChangeRestoredEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.ChangeRevertedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.CommentAddedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.DraftPublishedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.HashtagsEditedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.LifeCycleHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.ReviewerAddedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.ReviewerDeletedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.RevisionCreatedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.TopicEditedEventHandler;
-import com.ruesga.gerrit.plugins.fcm.handlers.VoteDeletedEventHandler;
+import com.ruesga.gerrit.plugins.fcm.handlers.*;
 import com.ruesga.gerrit.plugins.fcm.server.DeleteToken;
 import com.ruesga.gerrit.plugins.fcm.server.Devices;
 import com.ruesga.gerrit.plugins.fcm.server.GetCloudNotificationsConfigInfo;
@@ -89,8 +62,6 @@
                 .to(ChangeRevertedEventHandler.class);
         DynamicSet.bind(binder(), CommentAddedListener.class)
                 .to(CommentAddedEventHandler.class);
-        DynamicSet.bind(binder(), DraftPublishedListener.class)
-                .to(DraftPublishedEventHandler.class);
         DynamicSet.bind(binder(), HashtagsEditedListener.class)
                 .to(HashtagsEditedEventHandler.class);
         DynamicSet.bind(binder(), ReviewerDeletedListener.class)
@@ -103,6 +74,10 @@
                 .to(TopicEditedEventHandler.class);
         DynamicSet.bind(binder(), VoteDeletedListener.class)
                 .to(VoteDeletedEventHandler.class);
+        DynamicSet.bind(binder(), PrivateStateChangedListener.class)
+                .to(PrivateStateChangedEventHandler.class);
+        DynamicSet.bind(binder(), WorkInProgressStateChangedListener.class)
+                .to(WIPStateChangedEventHandler.class);
 
         // Configure the Rest API
         DynamicMap.mapOf(binder(), DEVICE_KIND);
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/AssigneeChangedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/AssigneeChangedEventHandler.java
index fa050ea..af788c1 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/AssigneeChangedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/AssigneeChangedEventHandler.java
@@ -18,10 +18,12 @@
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.common.AccountInfo;
 import com.google.gerrit.extensions.events.AssigneeChangedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -47,16 +49,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeAbandonedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeAbandonedEventHandler.java
index 6a7a859..86c6bf6 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeAbandonedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeAbandonedEventHandler.java
@@ -17,10 +17,12 @@
 
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.ChangeAbandonedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -35,21 +37,25 @@
 
     @Inject
     public ChangeAbandonedEventHandler(
-            @PluginName String pluginName,
+          @PluginName String pluginName,
             FcmUploaderWorker uploader,
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeMergedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeMergedEventHandler.java
index bf8bc5a..5570996 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeMergedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeMergedEventHandler.java
@@ -17,10 +17,12 @@
 
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.ChangeMergedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -40,16 +42,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeRestoredEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeRestoredEventHandler.java
index a0976d9..2fa44aa 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeRestoredEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeRestoredEventHandler.java
@@ -17,10 +17,12 @@
 
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.ChangeRestoredListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -40,16 +42,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeRevertedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeRevertedEventHandler.java
index e859a17..c46aadd 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeRevertedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ChangeRevertedEventHandler.java
@@ -17,10 +17,12 @@
 
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.ChangeRevertedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -40,16 +42,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/CommentAddedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/CommentAddedEventHandler.java
index 0ebe7dc..b047fc6 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/CommentAddedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/CommentAddedEventHandler.java
@@ -15,14 +15,14 @@
  */
 package com.ruesga.gerrit.plugins.fcm.handlers;
 
-import org.apache.commons.lang.StringUtils;
-
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.CommentAddedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -32,6 +32,8 @@
 import com.ruesga.gerrit.plugins.fcm.rest.CloudNotificationEvents;
 import com.ruesga.gerrit.plugins.fcm.workers.FcmUploaderWorker;
 
+import org.apache.commons.lang.StringUtils;
+
 public class CommentAddedEventHandler extends EventHandler
         implements CommentAddedListener {
 
@@ -42,16 +44,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
@@ -66,11 +72,11 @@
     public void onCommentAdded(Event event) {
         Notification notification = createNotification(event);
         if (event.getComment() != null) {
-            notification.extra =
-                    StringUtils.abbreviate(event.getComment(), 250);
+          notification.extra =
+              StringUtils.abbreviate(event.getComment(), 250);
         }
         notification.body = formatAccount(event.getWho())
-                + " commented on this change";
+            + " commented on this change";
 
         notify(notification, event);
     }
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/EventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/EventHandler.java
index 9c28cb2..99a8cdf 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/EventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/EventHandler.java
@@ -22,10 +22,9 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
+import com.google.common.collect.ImmutableSet;
+import com.google.gerrit.common.data.GroupDescription;
+import com.google.gerrit.common.data.GroupReference;
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.api.changes.NotifyHandling;
 import com.google.gerrit.extensions.client.ReviewerState;
@@ -33,22 +32,28 @@
 import com.google.gerrit.extensions.common.ChangeInfo;
 import com.google.gerrit.extensions.events.ChangeEvent;
 import com.google.gerrit.extensions.events.RevisionEvent;
+import com.google.gerrit.index.query.Predicate;
+import com.google.gerrit.index.query.QueryParseException;
+import com.google.gerrit.index.query.QueryResult;
 import com.google.gerrit.reviewdb.client.Account;
+import com.google.gerrit.reviewdb.client.AccountGroup;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
 import com.google.gerrit.server.account.AccountState;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
-import com.google.gerrit.server.account.WatchConfig.ProjectWatchKey;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
+import com.google.gerrit.server.account.ProjectWatches.ProjectWatchKey;
 import com.google.gerrit.server.config.AllProjectsName;
-import com.google.gerrit.server.query.Predicate;
-import com.google.gerrit.server.query.QueryParseException;
-import com.google.gerrit.server.query.QueryResult;
+import com.google.gerrit.server.git.NotifyConfig;
+import com.google.gerrit.server.project.ProjectCache;
+import com.google.gerrit.server.project.ProjectState;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeData;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
+import com.google.gerrit.server.query.change.SingleGroupUser;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gwtorm.server.OrmException;
@@ -56,9 +61,13 @@
 import com.ruesga.gerrit.plugins.fcm.messaging.Notification;
 import com.ruesga.gerrit.plugins.fcm.workers.FcmUploaderWorker;
 
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 public abstract class EventHandler {
 
-    static final Logger log =
+    private static final Logger log =
             LoggerFactory.getLogger(EventHandler.class);
 
     private final String pluginName;
@@ -66,8 +75,11 @@
     private final AllProjectsName allProjectsName;
     private final ChangeQueryBuilder cqb;
     private final ChangeQueryProcessor cqp;
+    private final ProjectCache projectCache;
+    private final GroupBackend groupBackend;
     private final Provider<InternalAccountQuery> accountQueryProvider;
     private final GenericFactory identifiedUserFactory;
+    private final Provider<AnonymousUser> anonymousProvider;
     private final Gson gson;
 
     public EventHandler(
@@ -76,17 +88,22 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super();
         this.pluginName = pluginName;
         this.uploader = uploader;
         this.allProjectsName = allProjectsName;
         this.cqb = cqb;
         this.cqp = cqp;
+        this.projectCache = projectCache;
+        this.groupBackend = groupBackend;
         this.accountQueryProvider = accountQueryProvider;
         this.identifiedUserFactory = identifiedUserFactory;
+        this.anonymousProvider = anonymousProvider;
         this.gson = new GsonBuilder().create();
     }
 
@@ -94,7 +111,7 @@
 
     protected abstract NotifyType getNotifyType();
 
-    protected Gson getSerializer() {
+    Gson getSerializer() {
         return this.gson;
     }
 
@@ -169,7 +186,10 @@
 
         // 3.- Watchers
         ChangeData changeData = obtainChangeData(change);
-        notifiedUsers.addAll(getWatchers(getNotifyType(), changeData));
+        if (changeData != null) {
+            notifiedUsers.addAll(getWatchers(getNotifyType(), changeData,
+                    !safeBoolean(change.workInProgress) && !safeBoolean(change.isPrivate)));
+        }
 
         // 4.- Remove the author of this event (he doesn't need to get
         // the notification)
@@ -178,14 +198,14 @@
         return new ArrayList<>(notifiedUsers);
     }
 
-    public final Set<Integer> getWatchers(NotifyType type, ChangeData change) {
+    private Set<Integer> getWatchers(NotifyType type, ChangeData change, boolean includeWatchersFromNotifyConfig) {
         Set<Integer> watchers = new HashSet<>();
         try {
             Set<Account.Id> projectWatchers = new HashSet<>();
             for (AccountState a : accountQueryProvider.get().byWatchedProject(
                     change.project())) {
                 Account.Id accountId = a.getAccount().getId();
-                for (Map.Entry<ProjectWatchKey, Set<NotifyType>> e : a.getProjectWatches().entrySet()) {
+                for (Map.Entry<ProjectWatchKey, ImmutableSet<NotifyType>> e : a.getProjectWatches().entrySet()) {
                     if (change.project().equals(e.getKey().project())
                             && add(watchers, accountId, e.getKey(), e.getValue(), type, change)) {
                         // We only want to prevent matching All-Projects if this filter hits
@@ -194,16 +214,37 @@
                 }
             }
 
-            for (AccountState a : accountQueryProvider.get().byWatchedProject(
-                    allProjectsName)) {
-              for (Map.Entry<ProjectWatchKey, Set<NotifyType>> e : a.getProjectWatches().entrySet()) {
-                if (allProjectsName.equals(e.getKey().project())) {
-                  Account.Id accountId = a.getAccount().getId();
-                  if (!projectWatchers.contains(accountId)) {
-                    add(watchers, accountId, e.getKey(), e.getValue(), type, change);
-                  }
+            for (AccountState a : accountQueryProvider.get().byWatchedProject(allProjectsName)) {
+              for (Map.Entry<ProjectWatchKey, ImmutableSet<NotifyType>> e : a.getProjectWatches().entrySet()) {
+                    if (allProjectsName.equals(e.getKey().project())) {
+                        Account.Id accountId = a.getAccount().getId();
+                        if (!projectWatchers.contains(accountId)) {
+                            add(watchers, accountId, e.getKey(), e.getValue(), type, change);
+                        }
+                    }
                 }
-              }
+            }
+
+            if (includeWatchersFromNotifyConfig) {
+                ProjectState projectState = projectCache.get(change.project());
+                if (projectState != null) {
+                    for (ProjectState state : projectState.tree()) {
+                        for (NotifyConfig nc : state.getConfig().getNotifyConfigs()) {
+                            if (nc.isNotify(type)) {
+                                try {
+                                    add(watchers, nc, change);
+                                } catch (QueryParseException e) {
+                                    log.warn(
+                                        "Project {} has invalid notify {} filter \"{}\": {}",
+                                        state.getName(),
+                                        nc.getName(),
+                                        nc.getFilter(),
+                                        e.getMessage());
+                                }
+                            }
+                        }
+                    }
+                }
             }
 
         } catch (OrmException ex) {
@@ -233,11 +274,27 @@
         return false;
     }
 
+    private void add(Set<Integer> watchers, NotifyConfig nc, ChangeData change)
+            throws OrmException, QueryParseException {
+        for (GroupReference ref : nc.getGroups()) {
+            CurrentUser user = new SingleGroupUser(ref.getUUID());
+            if (filterMatch(user, nc.getFilter(), change)) {
+                deliverToMembers(watchers, ref.getUUID());
+            }
+        }
+    }
+
     private boolean filterMatch(
             CurrentUser user, String filter, ChangeData change)
             throws OrmException, QueryParseException {
-        ChangeQueryBuilder qb = cqb.asUser(user);
-        Predicate<ChangeData> p = qb.is_visible();
+        ChangeQueryBuilder qb;
+        Predicate<ChangeData> p = null;
+        if (user == null) {
+            qb = cqb.asUser(anonymousProvider.get());
+        } else {
+            qb = cqb.asUser(user);
+            p = qb.is_visible();
+        }
 
         if (filter != null) {
             Predicate<ChangeData> filterPredicate = qb.parse(filter);
@@ -269,6 +326,37 @@
         return null;
     }
 
+    private void deliverToMembers(Set<Integer> watchers, AccountGroup.UUID startUUID) {
+        Set<AccountGroup.UUID> seen = new HashSet<>();
+        List<AccountGroup.UUID> q = new ArrayList<>();
+
+        seen.add(startUUID);
+        q.add(startUUID);
+
+        while (!q.isEmpty()) {
+            AccountGroup.UUID uuid = q.remove(q.size() - 1);
+            GroupDescription.Basic group = groupBackend.get(uuid);
+            if (group == null) {
+                continue;
+            }
+
+            if (!(group instanceof GroupDescription.Internal)) {
+                // Non-internal groups cannot be expanded by the server.
+                continue;
+            }
+
+            GroupDescription.Internal ig = (GroupDescription.Internal) group;
+            for (Account.Id id : ig.getMembers()) {
+                watchers.add(id.get());
+            }
+            for (AccountGroup.UUID m : ig.getSubgroups()) {
+                if (seen.add(m)) {
+                    q.add(m);
+                }
+            }
+        }
+    }
+
     protected String formatAccount(AccountInfo account) {
         if (account.name != null) {
             return account.name;
@@ -278,4 +366,8 @@
         }
         return account.email;
     }
+
+    boolean safeBoolean(Boolean value) {
+        return value != null && value;
+    }
 }
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/HashtagsEditedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/HashtagsEditedEventHandler.java
index 992fd5d..d112072 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/HashtagsEditedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/HashtagsEditedEventHandler.java
@@ -17,10 +17,12 @@
 
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.HashtagsEditedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -46,16 +48,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
@@ -70,12 +76,10 @@
     public void onHashtagsEdited(Event event) {
         HashtagsInfo hashtags = new HashtagsInfo();
         if (event.getRemovedHashtags() != null) {
-            hashtags.removed = event.getRemovedHashtags().toArray(
-                    new String[event.getRemovedHashtags().size()]);
+            hashtags.removed = event.getRemovedHashtags().toArray(new String[0]);
         }
         if (event.getAddedHashtags() != null) {
-            hashtags.added = event.getAddedHashtags().toArray(
-                    new String[event.getAddedHashtags().size()]);
+            hashtags.added = event.getAddedHashtags().toArray(new String[0]);
         }
         Notification notification = createNotification(event);
         notification.extra = getSerializer().toJson(hashtags);
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/DraftPublishedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/PrivateStateChangedEventHandler.java
similarity index 66%
rename from src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/DraftPublishedEventHandler.java
rename to src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/PrivateStateChangedEventHandler.java
index eaffee9..eb32e45 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/DraftPublishedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/PrivateStateChangedEventHandler.java
@@ -16,11 +16,13 @@
 package com.ruesga.gerrit.plugins.fcm.handlers;
 
 import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.extensions.events.DraftPublishedListener;
+import com.google.gerrit.extensions.events.PrivateStateChangedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -30,30 +32,34 @@
 import com.ruesga.gerrit.plugins.fcm.rest.CloudNotificationEvents;
 import com.ruesga.gerrit.plugins.fcm.workers.FcmUploaderWorker;
 
-public class DraftPublishedEventHandler extends EventHandler
-        implements DraftPublishedListener {
+public class PrivateStateChangedEventHandler extends EventHandler
+        implements PrivateStateChangedListener {
 
     @Inject
-    public DraftPublishedEventHandler(
+    public PrivateStateChangedEventHandler(
             @PluginName String pluginName,
             FcmUploaderWorker uploader,
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
-        return CloudNotificationEvents.DRAFT_PUBLISHED_EVENT;
+        return CloudNotificationEvents.PRIVATE_STATE_CHANGED_EVENT;
     }
 
     protected NotifyType getNotifyType() {
@@ -61,11 +67,11 @@
     }
 
     @Override
-    public void onDraftPublished(Event event) {
+    public void onPrivateStateChanged(Event event) {
         Notification notification = createNotification(event);
         notification.body = formatAccount(event.getWho())
-                + " published a draft on this change";
-
+                + " change state of this change to " +
+                      (safeBoolean(event.getChange().isPrivate) ? "private" : "public");
         notify(notification, event);
     }
 
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ReviewerAddedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ReviewerAddedEventHandler.java
index bb4b561..49e66c1 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ReviewerAddedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ReviewerAddedEventHandler.java
@@ -20,10 +20,12 @@
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.common.AccountInfo;
 import com.google.gerrit.extensions.events.ReviewerAddedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -43,16 +45,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ReviewerDeletedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ReviewerDeletedEventHandler.java
index ffbabcf..1ea1258 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ReviewerDeletedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/ReviewerDeletedEventHandler.java
@@ -17,10 +17,12 @@
 
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.ReviewerDeletedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -40,16 +42,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/RevisionCreatedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/RevisionCreatedEventHandler.java
index 946d113..e410510 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/RevisionCreatedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/RevisionCreatedEventHandler.java
@@ -17,10 +17,12 @@
 
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.RevisionCreatedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -40,16 +42,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/TopicEditedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/TopicEditedEventHandler.java
index e255b6b..24102b6 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/TopicEditedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/TopicEditedEventHandler.java
@@ -17,10 +17,12 @@
 
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.events.TopicEditedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -45,16 +47,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/VoteDeletedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/VoteDeletedEventHandler.java
index a54b3c9..3f639d8 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/VoteDeletedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/VoteDeletedEventHandler.java
@@ -20,10 +20,12 @@
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.extensions.common.ApprovalInfo;
 import com.google.gerrit.extensions.events.VoteDeletedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -53,16 +55,20 @@
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
@@ -91,11 +97,11 @@
 
     private VoteDeletedInfo toVoteDeletedInfo(Event event) {
         VoteDeletedInfo info = new VoteDeletedInfo();
-        Collection<ApprovalInfo> approvals = event.getRemoved().values();
+        Collection<ApprovalInfo> approvals = event.getOldApprovals().values();
         int count = approvals.size();
         info.votes = new VoteDeletedEntryInfo[count];
         for (int i = 0; i < count; i++)
-        for (ApprovalInfo approval : event.getRemoved().values()) {
+        for (ApprovalInfo approval : event.getOldApprovals().values()) {
             info.votes[i] = new VoteDeletedEntryInfo();
             info.votes[i].vote = approval.tag + + approval.value;
             info.votes[i].account = formatAccount(approval);
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/DraftPublishedEventHandler.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/WIPStateChangedEventHandler.java
similarity index 66%
copy from src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/DraftPublishedEventHandler.java
copy to src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/WIPStateChangedEventHandler.java
index eaffee9..9179b1f 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/DraftPublishedEventHandler.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/WIPStateChangedEventHandler.java
@@ -16,11 +16,13 @@
 package com.ruesga.gerrit.plugins.fcm.handlers;
 
 import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.extensions.events.DraftPublishedListener;
+import com.google.gerrit.extensions.events.WorkInProgressStateChangedListener;
+import com.google.gerrit.server.AnonymousUser;
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
+import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.account.ProjectWatches.NotifyType;
 import com.google.gerrit.server.config.AllProjectsName;
-import com.google.gerrit.server.account.CapabilityControl;
-import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
@@ -30,30 +32,34 @@
 import com.ruesga.gerrit.plugins.fcm.rest.CloudNotificationEvents;
 import com.ruesga.gerrit.plugins.fcm.workers.FcmUploaderWorker;
 
-public class DraftPublishedEventHandler extends EventHandler
-        implements DraftPublishedListener {
+public class WIPStateChangedEventHandler extends EventHandler
+        implements WorkInProgressStateChangedListener {
 
     @Inject
-    public DraftPublishedEventHandler(
+    public WIPStateChangedEventHandler(
             @PluginName String pluginName,
             FcmUploaderWorker uploader,
             AllProjectsName allProjectsName,
             ChangeQueryBuilder cqb,
             ChangeQueryProcessor cqp,
+            ProjectCache projectCache,
+            GroupBackend groupBackend,
             Provider<InternalAccountQuery> accountQueryProvider,
-            CapabilityControl.Factory capabilityControlFactory,
-            GenericFactory identifiedUserFactory) {
+            GenericFactory identifiedUserFactory,
+            Provider<AnonymousUser> anonymousProvider) {
         super(pluginName,
                 uploader,
                 allProjectsName,
                 cqb, cqp,
+                projectCache,
+                groupBackend,
                 accountQueryProvider,
-                capabilityControlFactory,
-                identifiedUserFactory);
+                identifiedUserFactory,
+                anonymousProvider);
     }
 
     protected int getEventType() {
-        return CloudNotificationEvents.DRAFT_PUBLISHED_EVENT;
+        return CloudNotificationEvents.WIP_STATE_CHANGED_EVENT;
     }
 
     protected NotifyType getNotifyType() {
@@ -61,11 +67,11 @@
     }
 
     @Override
-    public void onDraftPublished(Event event) {
+    public void onWorkInProgressStateChanged(Event event) {
         Notification notification = createNotification(event);
         notification.body = formatAccount(event.getWho())
-                + " published a draft on this change";
-
+                + " change state of this change to " +
+                    (safeBoolean(event.getChange().isPrivate) ? "WIP" : "ready");
         notify(notification, event);
     }
 
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/messaging/Notification.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/messaging/Notification.java
index cfe4a92..69a45ba 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/messaging/Notification.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/messaging/Notification.java
@@ -35,7 +35,7 @@
 
     @Override
     public Object clone() {
-        Notification other = new Notification();
+      Notification other = new Notification();
         other.when = when;
         other.who = who;
         other.token = token;
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/rest/CloudNotificationEvents.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/rest/CloudNotificationEvents.java
index 0aa40b3..4fe7b0e 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/rest/CloudNotificationEvents.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/rest/CloudNotificationEvents.java
@@ -21,7 +21,7 @@
     public static final int CHANGE_RESTORED_EVENT = 0x04;
     public static final int CHANGE_REVERTED_EVENT = 0x08;
     public static final int COMMENT_ADDED_EVENT = 0x10;
-    public static final int DRAFT_PUBLISHED_EVENT = 0x20;
+    // removed => public static final int DRAFT_PUBLISHED_EVENT = 0x20;
     public static final int HASHTAG_CHANGED_EVENT = 0x40;
     public static final int REVIEWER_ADDED_EVENT = 0x80;
     public static final int REVIEWER_DELETED_EVENT = 0x100;
@@ -29,4 +29,6 @@
     public static final int TOPIC_CHANGED_EVENT = 0x400;
     public static final int ASSIGNEE_CHANGED_EVENT = 0x800;
     public static final int VOTE_DELETED_EVENT = 0x1000;
+    public static final int PRIVATE_STATE_CHANGED_EVENT = 0x2000;
+    public static final int WIP_STATE_CHANGED_EVENT = 0x4000;
 }
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/server/DeviceResource.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/server/DeviceResource.java
index a6cd2e7..d090140 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/server/DeviceResource.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/server/DeviceResource.java
@@ -26,7 +26,7 @@
 
     private final String device;
 
-    public DeviceResource(IdentifiedUser user, String device) {
+    DeviceResource(IdentifiedUser user, String device) {
       super(user);
       this.device = device;
     }
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/server/TokenResource.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/server/TokenResource.java
index 336343f..e91c3b6 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/server/TokenResource.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/server/TokenResource.java
@@ -24,7 +24,7 @@
 
     private final String token;
 
-    public TokenResource(DeviceResource rsrc, String token) {
+    TokenResource(DeviceResource rsrc, String token) {
       super(rsrc.getUser(), rsrc.getDevice());
       this.token = token;
     }
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/workers/FcmUploaderWorker.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/workers/FcmUploaderWorker.java
index b03aa65..ee0b4de 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/workers/FcmUploaderWorker.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/workers/FcmUploaderWorker.java
@@ -17,7 +17,6 @@
 
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
-import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.URL;
@@ -92,12 +91,7 @@
         }
 
         for (final Integer accountId : notifiedAccounts) {
-            this.executor.submit(new Runnable() {
-                @Override
-                public void run() {
-                    asyncNotify(accountId, notification);
-                }
-            });
+            this.executor.submit(() -> asyncNotify(accountId, notification));
         }
     }
 
@@ -133,34 +127,20 @@
             conn.setRequestProperty(
                     "Content-Length", Integer.toString(data.length()));
 
-            DataOutputStream os = new DataOutputStream(conn.getOutputStream());
-            try {
+            try (DataOutputStream os = new DataOutputStream(conn.getOutputStream())) {
                 os.write(data.getBytes());
                 os.flush();
-            } finally {
-                try {
-                    os.close();
-                } catch (IOException ex) {
-                    // Ignore
-                }
             }
 
             int responseCode = conn.getResponseCode();
             if (responseCode == 200) {
                 StringBuilder response = new StringBuilder();
-                BufferedReader in = new BufferedReader(
-                        new InputStreamReader(conn.getInputStream()));
-                try {
+                try (BufferedReader in = new BufferedReader(
+                        new InputStreamReader(conn.getInputStream()))) {
                     String inputLine;
                     while ((inputLine = in.readLine()) != null) {
                         response.append(inputLine);
                     }
-                } finally {
-                    try {
-                        in.close();
-                    } catch (IOException ex) {
-                        // Ignore
-                    }
                 }
 
                 // Process the server response
@@ -280,12 +260,8 @@
             log.debug("[%s] Retry fcm notification to %s after %d seconds",
                     pluginName, submit.request.to, retryAfter);
         }
-        this.delayedExecutor.schedule(new Runnable() {
-            @Override
-            public void run() {
-                sendNotification(submit);
-            }
-        }, retryAfter, TimeUnit.SECONDS);
+        this.delayedExecutor.schedule(() ->
+                sendNotification(submit), retryAfter, TimeUnit.SECONDS);
     }
 
 }
diff --git a/src/main/resources/Documentation/api.md b/src/main/resources/Documentation/api.md
index d61d4c1..feaf9d2 100644
--- a/src/main/resources/Documentation/api.md
+++ b/src/main/resources/Documentation/api.md
@@ -200,7 +200,7 @@
 
 `COMMENT_ADDED_EVENT = 0x08`
 
-`DRAFT_PUBLISHED_EVENT = 0x10`
+`DRAFT_PUBLISHED_EVENT = 0x10  (deprecated in 2.15)`
 
 `HASHTAG_CHANGED_EVENT = 0x20`
 
@@ -216,6 +216,10 @@
 
 `VOTE_DELETED_EVENT = 0x1000`
 
+`PRIVATE_STATE_CHANGED_EVENT = 0x2000`
+
+`WIP_STATE_CHANGED_EVENT = 0x4000`
+
 ***
 
 **CloudNotificationResponseMode**
