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 7117d03..9947f29 100644
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/ApiModule.java
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/ApiModule.java
@@ -33,6 +33,7 @@
 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.registration.DynamicMap;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.restapi.RestApiModule;
@@ -51,6 +52,7 @@
 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.server.DeleteToken;
 import com.ruesga.gerrit.plugins.fcm.server.Devices;
 import com.ruesga.gerrit.plugins.fcm.server.GetCloudNotificationsConfigInfo;
@@ -99,6 +101,8 @@
                 .to(RevisionCreatedEventHandler.class);
         DynamicSet.bind(binder(), TopicEditedListener.class)
                 .to(TopicEditedEventHandler.class);
+        DynamicSet.bind(binder(), VoteDeletedListener.class)
+                .to(VoteDeletedEventHandler.class);
 
         // Configure the Rest API
         DynamicMap.mapOf(binder(), DEVICE_KIND);
@@ -111,4 +115,5 @@
         post(DEVICE_KIND, TOKEN_ENTRY_POINT).to(PostToken.class);
         delete(TOKEN_KIND).to(DeleteToken.class);
     }
-}
\ No newline at end of file
+}
+
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 db56c43..9c28cb2 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
@@ -278,4 +278,4 @@
         }
         return account.email;
     }
-}
\ No newline at end of file
+}
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
new file mode 100644
index 0000000..a54b3c9
--- /dev/null
+++ b/src/main/java/com/ruesga/gerrit/plugins/fcm/handlers/VoteDeletedEventHandler.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2016 Jorge Ruesga
+ *
+ * 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.ruesga.gerrit.plugins.fcm.handlers;
+
+import java.util.Collection;
+
+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.IdentifiedUser.GenericFactory;
+import com.google.gerrit.server.account.CapabilityControl;
+import com.google.gerrit.server.account.WatchConfig.NotifyType;
+import com.google.gerrit.server.config.AllProjectsName;
+import com.google.gerrit.server.query.account.InternalAccountQuery;
+import com.google.gerrit.server.query.change.ChangeQueryBuilder;
+import com.google.gerrit.server.query.change.ChangeQueryProcessor;
+import com.google.gson.annotations.SerializedName;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.ruesga.gerrit.plugins.fcm.messaging.Notification;
+import com.ruesga.gerrit.plugins.fcm.rest.CloudNotificationEvents;
+import com.ruesga.gerrit.plugins.fcm.workers.FcmUploaderWorker;
+
+public class VoteDeletedEventHandler extends EventHandler
+        implements VoteDeletedListener {
+
+    private static class VoteDeletedEntryInfo {
+        @SerializedName("vote") public String vote;
+        @SerializedName("account") public String account;
+    }
+
+    private static class VoteDeletedInfo {
+        @SerializedName("votes") public VoteDeletedEntryInfo[] votes;
+    }
+
+    @Inject
+    public VoteDeletedEventHandler(
+            @PluginName String pluginName,
+            FcmUploaderWorker uploader,
+            AllProjectsName allProjectsName,
+            ChangeQueryBuilder cqb,
+            ChangeQueryProcessor cqp,
+            Provider<InternalAccountQuery> accountQueryProvider,
+            CapabilityControl.Factory capabilityControlFactory,
+            GenericFactory identifiedUserFactory) {
+        super(pluginName,
+                uploader,
+                allProjectsName,
+                cqb, cqp,
+                accountQueryProvider,
+                capabilityControlFactory,
+                identifiedUserFactory);
+    }
+
+    protected int getEventType() {
+        return CloudNotificationEvents.VOTE_DELETED_EVENT;
+    }
+
+    protected NotifyType getNotifyType() {
+        return NotifyType.ALL_COMMENTS;
+    }
+
+    @Override
+    public void onVoteDeleted(Event event) {
+        VoteDeletedInfo info = toVoteDeletedInfo(event);
+        final String msg;
+        if (info.votes.length == 1) {
+            msg = " remove " + info.votes[0].vote + " by " + info.votes[0].account;
+        } else {
+            msg = " remove multiple votes";
+        }
+        Notification notification = createNotification(event);
+        notification.extra = getSerializer().toJson(info);
+        notification.body = formatAccount(event.getWho()) + msg;
+
+        notify(notification, event);
+    }
+
+    private VoteDeletedInfo toVoteDeletedInfo(Event event) {
+        VoteDeletedInfo info = new VoteDeletedInfo();
+        Collection<ApprovalInfo> approvals = event.getRemoved().values();
+        int count = approvals.size();
+        info.votes = new VoteDeletedEntryInfo[count];
+        for (int i = 0; i < count; i++)
+        for (ApprovalInfo approval : event.getRemoved().values()) {
+            info.votes[i] = new VoteDeletedEntryInfo();
+            info.votes[i].vote = approval.tag + + approval.value;
+            info.votes[i].account = formatAccount(approval);
+        }
+        return info;
+    }
+}
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 4487788..0aa40b3 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
@@ -28,4 +28,5 @@
     public static final int PATCHSET_CREATED_EVENT = 0x200;
     public static final int TOPIC_CHANGED_EVENT = 0x400;
     public static final int ASSIGNEE_CHANGED_EVENT = 0x800;
+    public static final int VOTE_DELETED_EVENT = 0x1000;
 }
diff --git a/src/main/resources/Documentation/api.md b/src/main/resources/Documentation/api.md
index eb838ce..d61d4c1 100644
--- a/src/main/resources/Documentation/api.md
+++ b/src/main/resources/Documentation/api.md
@@ -116,7 +116,7 @@
       "responseMode": "NOTIFICATION"
     }
 
-As a response, this method returs the registered *CloudNotificationInfo* entity (see below).
+As a response, this method returns the registered *CloudNotificationInfo* entity (see below).
 
 *Response*
 
@@ -212,6 +212,10 @@
 
 `TOPIC_CHANGED_EVENT = 0x200`
 
+`ASSIGNEE_CHANGED_EVENT = 0x800`
+
+`VOTE_DELETED_EVENT = 0x1000`
+
 ***
 
 **CloudNotificationResponseMode**
