diff --git a/src/main/java/com/googlesource/gerrit/plugins/refprotection/BackupRef.java b/src/main/java/com/googlesource/gerrit/plugins/refprotection/BackupRef.java
index af075c9..1f257bf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/refprotection/BackupRef.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/refprotection/BackupRef.java
@@ -28,6 +28,8 @@
 import com.google.gerrit.extensions.restapi.BadRequestException;
 import com.google.gerrit.extensions.restapi.ResourceConflictException;
 import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.data.AccountAttribute;
+import com.google.gerrit.server.data.RefUpdateAttribute;
 import com.google.gerrit.server.events.RefUpdatedEvent;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.project.CreateBranch;
@@ -84,24 +86,26 @@
       }
 
       try (RevWalk revWalk = new RevWalk(git)) {
+        RefUpdateAttribute refUpdate = event.refUpdate.get();
         if (cfg.getFromGerritConfig(pluginName).getBoolean("createTag",
             false)) {
           TagBuilder tag = new TagBuilder();
+          AccountAttribute submitter = event.submitter.get();
           tag.setTagger(
-              new PersonIdent(event.submitter.name, event.submitter.email));
+              new PersonIdent(submitter.name, submitter.email));
           tag.setObjectId(revWalk
-              .parseCommit(ObjectId.fromString(event.refUpdate.oldRev)));
+              .parseCommit(ObjectId.fromString(refUpdate.oldRev)));
           String update = "Non-fast-forward update to";
-          if (event.refUpdate.newRev.equals(ObjectId.zeroId().getName())) {
+          if (refUpdate.newRev.equals(ObjectId.zeroId().getName())) {
             update = "Deleted";
           }
           String type = "branch";
           String fullMessage = "";
-          if (event.refUpdate.refName.startsWith(R_TAGS)) {
+          if (refUpdate.refName.startsWith(R_TAGS)) {
             type = "tag";
             try {
               RevTag origTag =
-                  revWalk.parseTag(ObjectId.fromString(event.refUpdate.oldRev));
+                  revWalk.parseTag(ObjectId.fromString(refUpdate.oldRev));
               SimpleDateFormat format = new SimpleDateFormat("EEE MMM d HH:mm:ss yyyy ZZZZ");
               PersonIdent taggerIdent = origTag.getTaggerIdent();
               String tagger =
@@ -117,7 +121,7 @@
               log.warn("Unable to read original tag details", e);
             }
           }
-          tag.setMessage(update + " " + type + " " + event.refUpdate.refName + fullMessage);
+          tag.setMessage(update + " " + type + " " + refUpdate.refName + fullMessage);
           tag.setTag(backupRef);
 
           ObjectInserter inserter = git.newObjectInserter();
@@ -152,7 +156,7 @@
           // We need to parse the commit to ensure if it's a tag, we get the
           // commit the tag points to!
           input.revision = ObjectId.toString(
-              revWalk.parseCommit(ObjectId.fromString(event.refUpdate.oldRev))
+              revWalk.parseCommit(ObjectId.fromString(refUpdate.oldRev))
                   .getId());
 
           try {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java
index 0ca08f4..0188990 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/refprotection/RefUpdateListener.java
@@ -31,6 +31,7 @@
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.data.RefUpdateAttribute;
 import com.google.gerrit.server.events.Event;
 import com.google.gerrit.server.events.RefUpdatedEvent;
 import com.google.gerrit.server.git.GitRepositoryManager;
@@ -117,7 +118,7 @@
    * @return True if a new ref, otherwise False.
    */
   private boolean isNewRef(RefUpdatedEvent event) {
-    return event.refUpdate.oldRev.equals(ObjectId.zeroId().getName());
+    return event.refUpdate.get().oldRev.equals(ObjectId.zeroId().getName());
   }
 
   /**
@@ -127,10 +128,11 @@
    * @return True if a ref deletion, otherwise False.
    */
   private boolean isRefDeleted(RefUpdatedEvent event) {
-    if (event.refUpdate.newRev.equals(ObjectId.zeroId().getName())) {
+    RefUpdateAttribute refUpdate = event.refUpdate.get();
+    if (refUpdate.newRev.equals(ObjectId.zeroId().getName())) {
       log.info(String.format(
           "Ref Deleted: project [%s] refname [%s] old object id [%s]",
-          event.getProjectNameKey().toString(), event.getRefName(), event.refUpdate.oldRev));
+          event.getProjectNameKey().toString(), event.getRefName(), refUpdate.oldRev));
       return true;
     }
     return false;
@@ -149,12 +151,11 @@
       // attempting a check would cause a MissingObjectException.
       return false;
     }
+    RefUpdateAttribute refUpdate = event.refUpdate.get();
     try (Repository repo = repoManager.openRepository(project.getNameKey())) {
       try (RevWalk walk = new RevWalk(repo)) {
-        RevCommit oldCommit =
-            walk.parseCommit(repo.resolve(event.refUpdate.oldRev));
-        RevCommit newCommit =
-            walk.parseCommit(repo.resolve(event.refUpdate.newRev));
+        RevCommit oldCommit = walk.parseCommit(repo.resolve(refUpdate.oldRev));
+        RevCommit newCommit = walk.parseCommit(repo.resolve(refUpdate.newRev));
         return !walk.isMergedInto(oldCommit, newCommit);
       }
     }
