diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
index 214c3ee..24121f4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
@@ -22,15 +22,16 @@
 import com.google.gerrit.entities.Patch.ChangeType;
 import com.google.gerrit.entities.PatchSet;
 import com.google.gerrit.extensions.api.GerritApi;
-import com.google.gerrit.extensions.api.changes.AddReviewerInput;
 import com.google.gerrit.extensions.api.changes.ReviewInput;
+import com.google.gerrit.extensions.api.changes.ReviewerInput;
 import com.google.gerrit.server.account.AccountCache;
 import com.google.gerrit.server.account.AccountState;
 import com.google.gerrit.server.account.Emails;
-import com.google.gerrit.server.patch.PatchList;
-import com.google.gerrit.server.patch.PatchListCache;
-import com.google.gerrit.server.patch.PatchListEntry;
-import com.google.gerrit.server.patch.PatchListNotAvailableException;
+import com.google.gerrit.server.patch.DiffNotAvailableException;
+import com.google.gerrit.server.patch.DiffOperations;
+import com.google.gerrit.server.patch.DiffOptions;
+import com.google.gerrit.server.patch.filediff.FileDiffOutput;
+import com.google.gerrit.server.patch.filediff.TaggedEdit;
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
 import java.io.IOException;
@@ -41,6 +42,7 @@
 import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.Set;
+import java.util.stream.Collectors;
 import org.eclipse.jgit.api.BlameCommand;
 import org.eclipse.jgit.api.errors.GitAPIException;
 import org.eclipse.jgit.blame.BlameResult;
@@ -53,6 +55,7 @@
 public class ReviewersByBlame implements Runnable {
 
   private static final Logger log = LoggerFactory.getLogger(ReviewersByBlame.class);
+  private static final int DEFAULT_BASE = 0;
 
   private final RevCommit commit;
   private final Change change;
@@ -63,7 +66,7 @@
 
   private final Emails emails;
   private final AccountCache accountCache;
-  private final PatchListCache patchListCache;
+  private final DiffOperations diffOperations;
   private final GerritApi gApi;
 
   public interface Factory {
@@ -80,7 +83,7 @@
   public ReviewersByBlame(
       Emails emails,
       AccountCache accountCache,
-      PatchListCache patchListCache,
+      DiffOperations diffOperations,
       GerritApi gApi,
       @Assisted RevCommit commit,
       @Assisted Change change,
@@ -90,7 +93,7 @@
       @Assisted String ignoreFileRegEx) {
     this.emails = emails;
     this.accountCache = accountCache;
-    this.patchListCache = patchListCache;
+    this.diffOperations = diffOperations;
     this.gApi = gApi;
     this.commit = commit;
     this.change = change;
@@ -103,10 +106,13 @@
   @Override
   public void run() {
     Map<Account, Integer> reviewers = Maps.newHashMap();
-    PatchList patchList;
+    Map<String, FileDiffOutput> stringFileDiffOutputMap;
     try {
-      patchList = patchListCache.get(change, ps);
-    } catch (PatchListNotAvailableException ex) {
+      stringFileDiffOutputMap =
+          diffOperations.listModifiedFilesAgainstParent(
+              change.getProject(), ps.commitId(), DEFAULT_BASE, DiffOptions.DEFAULTS);
+
+    } catch (DiffNotAvailableException ex) {
       log.error("Couldn't load patchlist for change {}", change.getKey(), ex);
       return;
     }
@@ -114,13 +120,13 @@
     if (commit.getParentCount() != 1) {
       return;
     }
-    for (PatchListEntry entry : patchList.getPatches()) {
+    for (FileDiffOutput entry : stringFileDiffOutputMap.values()) {
       BlameResult blameResult;
-      if ((entry.getChangeType() == ChangeType.MODIFIED
-              || entry.getChangeType() == ChangeType.DELETED)
-          && (ignoreFileRegEx.isEmpty() || !entry.getNewName().matches(ignoreFileRegEx))
+      if ((entry.changeType() == ChangeType.MODIFIED || entry.changeType() == ChangeType.DELETED)
+          && (ignoreFileRegEx.isEmpty() || !entry.newPath().orElse("").matches(ignoreFileRegEx))
           && (blameResult = computeBlame(entry, commit.getParent(0))) != null) {
-        List<Edit> edits = entry.getEdits();
+        List<Edit> edits =
+            entry.edits().stream().map(TaggedEdit::jgitEdit).collect(Collectors.toList());
         reviewers.putAll(getReviewersForPatch(edits, blameResult));
       }
     }
@@ -139,9 +145,9 @@
       ReviewInput in = new ReviewInput();
       in.reviewers = new ArrayList<>(topReviewers.size());
       for (Account.Id account : topReviewers) {
-        AddReviewerInput addReviewerInput = new AddReviewerInput();
-        addReviewerInput.reviewer = account.toString();
-        in.reviewers.add(addReviewerInput);
+        ReviewerInput reviewerInput = new ReviewerInput();
+        reviewerInput.reviewer = account.toString();
+        in.reviewers.add(reviewerInput);
       }
       gApi.changes().id(change.getChangeId()).current().review(in);
     } catch (Exception ex) {
@@ -212,14 +218,22 @@
    * Compute the blame data for the parent, we are not interested in the specific commit but the
    * parent, since we only want to know the last person that edited this specific part of the code.
    *
-   * @param entry {@link PatchListEntry}
+   * @param entry {@link FileDiffOutput}
    * @param parent Parent {@link RevCommit}
    * @return Result of blame computation, null if the computation fails
    */
-  private BlameResult computeBlame(PatchListEntry entry, RevCommit parent) {
+  private BlameResult computeBlame(FileDiffOutput entry, RevCommit parent) {
+    if (entry.changeType() == ChangeType.ADDED) {
+      // This file is not present in the parent commit, so there is no blame
+      return null;
+    }
+
+    // For all other ChangeType cases this file exists in the old commit and therefore we
+    // use the entry.oldPath() which is then guaranteed to be set
+
     BlameCommand blameCommand = new BlameCommand(repo);
     blameCommand.setStartCommit(parent);
-    blameCommand.setFilePath(entry.getNewName());
+    blameCommand.setFilePath(entry.oldPath().get());
     try {
       BlameResult blameResult = blameCommand.call();
       blameResult.computeAll();
