diff --git a/pom.xml b/pom.xml
index 8892823..3f559e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
   <artifactId>events</artifactId>
   <name>events</name>
   <packaging>jar</packaging>
-  <version>2.12</version>
+  <version>2.13</version>
 
   <properties>
     <Gerrit-ApiType>plugin</Gerrit-ApiType>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/events/BranchHelper.java b/src/main/java/com/googlesource/gerrit/plugins/events/BranchHelper.java
index 6ad01e9..c03be80 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/events/BranchHelper.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/events/BranchHelper.java
@@ -21,6 +21,7 @@
 import com.google.gerrit.server.project.ProjectControl;
 import com.google.gerrit.server.project.ProjectState;
 import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
 import com.google.inject.Inject;
 
 public class BranchHelper {
@@ -47,52 +48,83 @@
   }
 
   public static Branch.NameKey getBranch(JsonElement event) {
-    // Known events of this type:
-    //  CommentAddedEvent, ChangeMergedEvent, ChangeAbandonedEvent,
-    //  ChangeRestoredEvent, DraftPublishedEvent, MergeFailedEvent,
-    //  PatchSetCreatedEvent, ReviewerAddedEvent:
-    JsonElement projectParent = event.getAsJsonObject().get("change");
-    if (projectParent == null) {
-      // Known events of this type: RefUpdatedEvent
-      projectParent = event.getAsJsonObject().get("refUpdate");
-    }
-    if (projectParent == null) {
+    Branch.NameKey b = null;
+    if (event != null) {
+      JsonObject obj = event.getAsJsonObject();
       // Known events of this type:
       //  CommitReceivedEvent, RefReplicationDoneEvent, RefReplicatedEvent
-      projectParent = event;
-    }
-
-    if (projectParent != null) {
-      JsonElement project = projectParent.getAsJsonObject().get("project");
-      if (project != null) {
+      b = getBranch(obj);
+      if (b == null) {
         // Known events of this type:
         //  CommentAddedEvent, ChangeMergedEvent, ChangeAbandonedEvent,
         //  ChangeRestoredEvent, DraftPublishedEvent, MergeFailedEvent,
         //  PatchSetCreatedEvent, ReviewerAddedEvent:
-        JsonElement branch = projectParent.getAsJsonObject().get("branch");
-        if (branch == null) {
-          // Known events of this type: RefUpdatedEvent, CommitReceivedEvent
-          branch = projectParent.getAsJsonObject().get("refName");
+        b = getBranch(obj.get("change"));
+        if (b == null) {
+          // Known events of this type: RefUpdatedEvent
+          b = getBranch(obj.get("refUpdate"));
         }
-        if (branch == null) {
-          // Known events of this type:
-          //  RefReplicationDoneEvent, RefReplicatedEvent
-          branch = projectParent.getAsJsonObject().get("ref");
-        }
+      }
+    }
+    return b;
+  }
 
-        if (branch != null) {
-          return getBranch(project, branch);
+  protected static Branch.NameKey getBranch(JsonObject projectParent) {
+    Project.NameKey project = getProject(projectParent);
+    if (project != null) {
+      // Known events of this type:
+      //  CommentAddedEvent, ChangeMergedEvent, ChangeAbandonedEvent,
+      //  ChangeRestoredEvent, DraftPublishedEvent, MergeFailedEvent,
+      //  PatchSetCreatedEvent, ReviewerAddedEvent:
+      JsonElement branch = projectParent.get("branch");
+      if (branch == null) {
+        // Known events of this type: RefUpdatedEvent, CommitReceivedEvent
+        branch = projectParent.get("refName");
+      }
+      if (branch == null) {
+        // Known events of this type:
+        //  RefReplicationDoneEvent, RefReplicatedEvent
+        branch = projectParent.get("ref");
+      }
+
+      if (branch != null) {
+        String name = asString(branch);
+        if (name != null) {
+          return new Branch.NameKey(project, name);
         }
       }
     }
     return null;
   }
 
-  protected static Branch.NameKey getBranch(JsonElement project, JsonElement branch) {
-    return getBranch(project.getAsString(), branch.getAsString());
+  public static Project.NameKey getProject(JsonObject projectParent) {
+    if (projectParent != null) {
+      JsonElement project = projectParent.get("project");
+      if (project != null) {
+        String name = asString(project);
+        if (name == null) {
+          try {
+            projectParent = project.getAsJsonObject();
+            project = projectParent.get("name");
+            name = asString(project);
+          } catch (RuntimeException e) {
+          }
+        }
+        if (name != null) {
+          return new Project.NameKey(name);
+        }
+      }
+    }
+    return null;
   }
 
-  protected static Branch.NameKey getBranch(String project, String branch) {
-    return new Branch.NameKey(new Project.NameKey(project), (branch.startsWith("refs/") ? "" : "refs/heads/") + branch);
+  protected static String asString(JsonElement el) {
+    if (el != null) {
+      try {
+        return el.getAsString();
+      } catch (RuntimeException e) {
+      }
+    }
+    return null;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/events/CoreListener.java b/src/main/java/com/googlesource/gerrit/plugins/events/CoreListener.java
index 52a7916..004b48d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/events/CoreListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/events/CoreListener.java
@@ -14,10 +14,16 @@
 
 package com.googlesource.gerrit.plugins.events;
 
+import com.google.common.base.Supplier;
 import com.google.gerrit.common.EventListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.events.Event;
+import com.google.gerrit.server.events.ProjectNameKeySerializer;
+import com.google.gerrit.server.events.RefUpdatedEvent;
+import com.google.gerrit.server.events.SupplierSerializer;
 import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import java.io.IOException;
@@ -28,7 +34,11 @@
 public class CoreListener implements EventListener {
   private static Logger log = LoggerFactory.getLogger(CoreListener.class);
 
-  protected static final Gson gson = new Gson();
+  protected static final Gson gson =
+      new GsonBuilder()
+          .registerTypeAdapter(Supplier.class, new SupplierSerializer())
+          .registerTypeAdapter(Project.NameKey.class, new ProjectNameKeySerializer())
+          .create();
   protected final DynamicSet<StreamEventListener> listeners;
   protected final EventStore store;
 
diff --git a/test/test_events_plugin.sh b/test/test_events_plugin.sh
index 75b2d34..cc0ded4 100755
--- a/test/test_events_plugin.sh
+++ b/test/test_events_plugin.sh
@@ -201,9 +201,10 @@
 # ------------------------- Individual Event Tests ---------------------------
 GROUP=visible-events
 type=patchset-created
-capture_events
+capture_events 2
 ch1=$(create_change --draft "$REF_BRANCH" "$FILE_A") || exit
-result_type "$GROUP" "$type"
+result_type "$GROUP $type" "ref-updated"
+result_type "$GROUP" "$type" 2
 
 type=draft-published
 capture_events
@@ -228,8 +229,8 @@
 type=change-merged
 capture_events 2
 submit "$ch1,1"
-result_type "$GROUP" "$type"
-result_type "$GROUP" "ref-updated" 2
+result_type "$GROUP $type" "ref-updated"
+result_type "$GROUP" "$type" 2
 
 # reviewer-added needs to be tested via Rest-API
 
