diff --git a/gerrit-owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java b/gerrit-owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
index 39f07eb..d94b788 100644
--- a/gerrit-owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
+++ b/gerrit-owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
@@ -63,7 +63,7 @@
     try {
       repository = repositoryManager.openRepository(Project.NameKey.parse(projectName));
       try {
-        processUpdates(repository, event.getUpdates());
+        processEvent(repository, event);
       } finally {
         repository.close();
       }
@@ -72,30 +72,28 @@
     }
   }
 
-  private void processUpdates(Repository repository, List<Update> updates) {
-    for (Update update : updates) {
-      if (update.getRefName().startsWith(CHANGES_REF)) {
-        Change.Id id = Change.Id.fromRef(update.getRefName());
-        try {
-          Change change = db.get().changes().get(id);
-          PatchList patchList = getPatchList(update, change);
-          if (patchList != null) {
-            PathOwners owners = new PathOwners(accountResolver, repository, patchList);
-            reviewerManager.addReviewers(change, owners.get().values());
-          }
-        } catch (OrmException e) {
-          logger.warn("Could not open change: {}", id, e);
-        } catch (ReviewerManagerException e) {
-          logger.warn("Could not add reviewers for change: {}", id, e);
+  private void processEvent(Repository repository, Event event) {
+    if (event.getRefName().startsWith(CHANGES_REF)) {
+      Change.Id id = Change.Id.fromRef(event.getRefName());
+      try {
+        Change change = db.get().changes().get(id);
+        PatchList patchList = getPatchList(event, change);
+        if (patchList != null) {
+          PathOwners owners = new PathOwners(accountResolver, repository, patchList);
+          reviewerManager.addReviewers(change, owners.get().values());
         }
+      } catch (OrmException e) {
+        logger.warn("Could not open change: {}", id, e);
+      } catch (ReviewerManagerException e) {
+        logger.warn("Could not add reviewers for change: {}", id, e);
       }
     }
   }
 
-  private PatchList getPatchList(Update update, Change change) {
+  private PatchList getPatchList(Event event, Change change) {
     ObjectId newId = null;
-    if (update.getNewObjectId() != null) {
-      newId = ObjectId.fromString(update.getNewObjectId());
+    if (event.getNewObjectId() != null) {
+      newId = ObjectId.fromString(event.getNewObjectId());
     }
 
     PatchListKey plKey = new PatchListKey(change.getProject(), null, newId, IGNORE_NONE);
diff --git a/gerrit-owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java b/gerrit-owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java
index 571d0b4..d7ba7a3 100644
--- a/gerrit-owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java
+++ b/gerrit-owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java
@@ -17,6 +17,7 @@
 import javax.inject.Inject;
 import javax.inject.Provider;
 import javax.inject.Singleton;
+import java.io.IOException;
 import java.util.Collection;
 
 @Singleton
@@ -58,6 +59,8 @@
       throw new ReviewerManagerException(e);
     } catch (OrmException e) {
       throw new ReviewerManagerException(e);
+    } catch (IOException e) {
+      throw new ReviewerManagerException(e);
     }
   }
 }
