diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
index 5ea32f6..3da6f68 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameCommand.java
@@ -30,8 +30,8 @@
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.util.List;
 import java.util.NoSuchElementException;
+import java.util.Set;
 import org.kohsuke.args4j.Argument;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -62,7 +62,7 @@
       ProjectResource rsrc = new ProjectResource(projectState, self.get());
       try (CommandProgressMonitor monitor = new CommandProgressMonitor(stdout)) {
         renameProject.assertCanRename(rsrc, input, monitor);
-        List<Change.Id> changeIds = renameProject.getChanges(rsrc, monitor);
+        Set<Change.Id> changeIds = renameProject.getChanges(rsrc, monitor);
         if (!renameProject.startRename(
             rsrc, input, monitor, continueRename(changeIds, monitor), changeIds)) {
           stdout.flush();
@@ -73,7 +73,7 @@
     }
   }
 
-  private boolean continueRename(List<Change.Id> changes, ProgressMonitor pm) throws IOException {
+  private boolean continueRename(Set<Change.Id> changes, ProgressMonitor pm) throws IOException {
     if (changes != null && changes.size() > WARNING_LIMIT) {
       // close the progress task explicitly this time to get user input
       pm.close();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
index f653147..572cbeb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RenameProject.java
@@ -81,7 +81,7 @@
           RenameRevertException {
     ProgressMonitor progressMonitor = NoopMonitor.INSTANCE;
     assertCanRename(resource, input, progressMonitor);
-    List<Id> changeIds = getChanges(resource, progressMonitor);
+    Set<Id> changeIds = getChanges(resource, progressMonitor);
     if (startRename(
         resource,
         input,
@@ -98,7 +98,7 @@
       Input input,
       ProgressMonitor progressMonitor,
       boolean continueRename,
-      List<Change.Id> changeIds)
+      Set<Change.Id> changeIds)
       throws ResourceConflictException,
           BadRequestException,
           AuthException,
@@ -121,7 +121,7 @@
         return false;
       }
     } else {
-      doRename(Collections.emptyList(), resource, input, NoopMonitor.INSTANCE);
+      doRename(Collections.emptySet(), resource, input, NoopMonitor.INSTANCE);
     }
     return true;
   }
@@ -280,7 +280,7 @@
     }
   }
 
-  void doRename(List<Change.Id> changeIds, ProjectResource rsrc, Input input, ProgressMonitor pm)
+  void doRename(Set<Change.Id> changeIds, ProjectResource rsrc, Input input, ProgressMonitor pm)
       throws InterruptedException, ConfigInvalidException, IOException, RenameRevertException {
     Project.NameKey oldProjectKey = rsrc.getNameKey();
     Project.NameKey newProjectKey = Project.nameKey(input.name);
@@ -357,7 +357,7 @@
   }
 
   void indexRenameStep(
-      List<Change.Id> changeIds,
+      Set<Change.Id> changeIds,
       Project.NameKey oldProjectKey,
       Project.NameKey newProjectKey,
       ProgressMonitor pm)
@@ -396,8 +396,8 @@
     return stepsPerformed;
   }
 
-  List<Change.Id> getChanges(ProjectResource rsrc, ProgressMonitor pm) throws IOException {
-    pm.beginTask("Retrieving the list of changes from DB");
+  Set<Change.Id> getChanges(ProjectResource rsrc, ProgressMonitor pm) throws IOException {
+    pm.beginTask("Retrieving changes from DB");
     Project.NameKey oldProjectKey = rsrc.getNameKey();
     return dbHandler.getChangeIds(oldProjectKey);
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
index d6e5713..7f6823d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProject.java
@@ -25,6 +25,7 @@
 import com.googlesource.gerrit.plugins.renameproject.monitor.ProgressMonitor;
 import java.io.IOException;
 import java.util.List;
+import java.util.Set;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -51,7 +52,7 @@
 
   void performRevert(
       List<Step> stepsPerformed,
-      List<Id> changeIds,
+      Set<Id> changeIds,
       Project.NameKey oldProjectKey,
       Project.NameKey newProjectKey,
       ProgressMonitor pm)
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
index ae5a57a..dc70b30 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
@@ -26,7 +26,6 @@
 import com.google.gerrit.server.account.AccountsUpdate;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.notedb.ChangeNotes;
-import com.google.gerrit.server.notedb.ChangeNotes.Factory.ChangeNotesResult;
 import com.google.gerrit.server.query.account.InternalAccountQuery;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
@@ -36,11 +35,9 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.stream.Stream;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.lib.Repository;
 import org.slf4j.Logger;
@@ -50,34 +47,25 @@
 public class DatabaseRenameHandler {
   private static final Logger log = LoggerFactory.getLogger(DatabaseRenameHandler.class);
 
-  private final ChangeNotes.Factory notesFactory;
   private final GitRepositoryManager repoManager;
   private final Provider<InternalAccountQuery> accountQueryProvider;
   private final Provider<AccountsUpdate> accountsUpdateProvider;
 
   @Inject
   public DatabaseRenameHandler(
-      ChangeNotes.Factory notesFactory,
       GitRepositoryManager repoManager,
       Provider<InternalAccountQuery> accountQueryProvider,
       @ServerInitiated Provider<AccountsUpdate> accountsUpdateProvider) {
     this.accountQueryProvider = accountQueryProvider;
-    this.notesFactory = notesFactory;
     this.repoManager = repoManager;
     this.accountsUpdateProvider = accountsUpdateProvider;
   }
 
-  public List<Change.Id> getChangeIds(Project.NameKey oldProjectKey) throws IOException {
+  public Set<Change.Id> getChangeIds(Project.NameKey oldProjectKey) throws IOException {
     log.debug("Starting to retrieve changes from the DB for project {}", oldProjectKey.get());
-    List<Change.Id> changeIds = new ArrayList<>();
+    Set<Change.Id> changeIds;
     try (Repository repo = repoManager.openRepository(oldProjectKey)) {
-      Stream<ChangeNotesResult> changes = notesFactory.scan(repo, oldProjectKey);
-      Iterator<ChangeNotesResult> iterator = changes.iterator();
-      while (iterator.hasNext()) {
-        ChangeNotesResult change = iterator.next();
-        Change.Id changeId = change.id();
-        changeIds.add(changeId);
-      }
+      changeIds = ChangeNotes.Factory.scanChangeIds(repo).keySet();
     }
     log.debug(
         "Number of changes in noteDb related to project {} are {}",
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java
index 5b01391..16105e2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/IndexUpdateHandler.java
@@ -24,6 +24,7 @@
 import com.googlesource.gerrit.plugins.renameproject.monitor.ProgressMonitor;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
@@ -46,7 +47,7 @@
   }
 
   public void updateIndex(
-      List<Change.Id> changeIds, Project.NameKey newProjectKey, ProgressMonitor pm)
+      Set<Change.Id> changeIds, Project.NameKey newProjectKey, ProgressMonitor pm)
       throws InterruptedException {
     log.debug("Starting to index {} change(s).", changeIds.size());
     ExecutorService executor =
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
index 7103c9b..24074e6 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
@@ -29,8 +29,8 @@
 import com.google.gerrit.server.project.ProjectState;
 import com.googlesource.gerrit.plugins.renameproject.RenameProject.Step;
 import com.googlesource.gerrit.plugins.renameproject.monitor.ProgressMonitor;
-import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -67,7 +67,7 @@
   @UseLocalDisk
   public void testRevertFromFsHandler() throws Exception {
     Result result = createChange();
-    List<Change.Id> changeIds = renameProject.getChanges(oldRsrc, pm);
+    Set<Change.Id> changeIds = renameProject.getChanges(oldRsrc, pm);
 
     renameProject.fsRenameStep(oldProjectKey, newProjectKey, pm);
     assertRenamed(result);
@@ -81,7 +81,7 @@
   @UseLocalDisk
   public void testRevertFromCacheHandler() throws Exception {
     Result result = createChange();
-    List<Change.Id> changeIds = renameProject.getChanges(oldRsrc, pm);
+    Set<Change.Id> changeIds = renameProject.getChanges(oldRsrc, pm);
 
     renameProject.fsRenameStep(oldProjectKey, newProjectKey, pm);
     renameProject.cacheRenameStep(oldProjectKey, newProjectKey);
@@ -96,7 +96,7 @@
   @UseLocalDisk
   public void testRevertFromDbHandler() throws Exception {
     Result result = createChange();
-    List<Change.Id> changeIds = renameProject.getChanges(oldRsrc, pm);
+    Set<Change.Id> changeIds = renameProject.getChanges(oldRsrc, pm);
 
     renameProject.fsRenameStep(oldProjectKey, newProjectKey, pm);
     renameProject.cacheRenameStep(oldProjectKey, newProjectKey);
@@ -112,7 +112,7 @@
   @UseLocalDisk
   public void testRevertFromIndexHandler() throws Exception {
     Result result = createChange();
-    List<Change.Id> changeIds = renameProject.getChanges(oldRsrc, pm);
+    Set<Change.Id> changeIds = renameProject.getChanges(oldRsrc, pm);
 
     renameProject.fsRenameStep(oldProjectKey, newProjectKey, pm);
     renameProject.cacheRenameStep(oldProjectKey, newProjectKey);
