diff --git a/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ForProjectWrapper.java b/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ForProjectWrapper.java
index 508fd85..54dd57c 100644
--- a/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ForProjectWrapper.java
+++ b/src/main/java/com/googlesource/gerrit/modules/gitrefsfilter/ForProjectWrapper.java
@@ -18,21 +18,19 @@
 
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.common.Nullable;
+import com.google.gerrit.extensions.api.access.CoreOrPluginProjectPermission;
 import com.google.gerrit.extensions.conditions.BooleanCondition;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.client.Project.NameKey;
-import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.notedb.ChangeNotes.Factory.ChangeNotesResult;
 import com.google.gerrit.server.permissions.PermissionBackend.ForProject;
 import com.google.gerrit.server.permissions.PermissionBackend.ForRef;
 import com.google.gerrit.server.permissions.PermissionBackend.RefFilterOptions;
 import com.google.gerrit.server.permissions.PermissionBackendException;
-import com.google.gerrit.server.permissions.ProjectPermission;
 import com.google.inject.Inject;
-import com.google.inject.Provider;
 import com.google.inject.assistedinject.Assisted;
 import java.io.IOException;
 import java.util.Collection;
@@ -51,7 +49,6 @@
   private final ForProject defaultForProject;
   private final NameKey project;
   private final ChangeNotes.Factory changeNotesFactory;
-  private final Provider<ReviewDb> dbProvider;
 
   public interface Factory {
     ForProjectWrapper get(ForProject defaultForProject, Project.NameKey project);
@@ -60,13 +57,11 @@
   @Inject
   public ForProjectWrapper(
       ChangeNotes.Factory changeNotesFactory,
-      Provider<ReviewDb> dbProvider,
       @Assisted ForProject defaultForProject,
       @Assisted Project.NameKey project) {
     this.defaultForProject = defaultForProject;
     this.project = project;
     this.changeNotesFactory = changeNotesFactory;
-    this.dbProvider = dbProvider;
   }
 
   @Override
@@ -75,12 +70,13 @@
   }
 
   @Override
-  public void check(ProjectPermission perm) throws AuthException, PermissionBackendException {
+  public void check(CoreOrPluginProjectPermission perm)
+      throws AuthException, PermissionBackendException {
     defaultForProject.check(perm);
   }
 
   @Override
-  public Set<ProjectPermission> test(Collection<ProjectPermission> permSet)
+  public <T extends CoreOrPluginProjectPermission> Set<T> test(Collection<T> permSet)
       throws PermissionBackendException {
     return defaultForProject.test(permSet);
   }
@@ -118,7 +114,7 @@
   }
 
   @Override
-  public BooleanCondition testCond(ProjectPermission perm) {
+  public BooleanCondition testCond(CoreOrPluginProjectPermission perm) {
     return defaultForProject.testCond(perm);
   }
 
@@ -131,7 +127,7 @@
     Set<String> result = new HashSet<>();
     Stream<ChangeNotesResult> s;
     try {
-      s = changeNotesFactory.scan(repo, dbProvider.get(), project);
+      s = changeNotesFactory.scan(repo, project);
     } catch (IOException e) {
       logger.atSevere().withCause(e).log(
           "Cannot load changes for project %s, assuming no changes are visible", project);
diff --git a/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/AbstractGitDaemonTest.java b/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/AbstractGitDaemonTest.java
index 32f8ac4..34a35b7 100644
--- a/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/AbstractGitDaemonTest.java
+++ b/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/AbstractGitDaemonTest.java
@@ -17,10 +17,12 @@
 import com.google.gerrit.acceptance.AbstractDaemonTest;
 import com.google.gerrit.acceptance.GitUtil;
 import com.google.gerrit.acceptance.TestAccount;
+import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
 import com.google.gerrit.extensions.api.groups.GroupApi;
 import com.google.gerrit.extensions.api.groups.GroupInput;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.reviewdb.client.AccountGroup;
+import com.google.inject.Inject;
 import com.googlesource.gerrit.modules.gitrefsfilter.FilterRefsCapability;
 import java.io.IOException;
 import java.util.List;
@@ -35,23 +37,25 @@
 abstract class AbstractGitDaemonTest extends AbstractDaemonTest {
   private static final String REFS_CHANGES = "+refs/changes/*:refs/remotes/origin/*";
 
+  @Inject private RequestScopeOperations requestScopeOperations;
+
   protected void createChangeAndAbandon() throws Exception, RestApiException {
-    setApiUser(admin);
+    requestScopeOperations.setApiUser(admin.id());
     createChange();
     int changeNum = changeNumOfRef(getChangesRefsAs(admin).get(0));
     gApi.changes().id(changeNum).abandon();
   }
 
   protected void createFilteredRefsGroup() throws Exception {
-    setApiUser(admin);
+    requestScopeOperations.setApiUser(admin.id());
     String group = name("filtered-refs-group");
     GroupInput in = new GroupInput();
     in.name = group;
     GroupApi groupApi = gApi.groups().create(in);
-    groupApi.addMembers(user.username);
+    groupApi.addMembers(user.username());
 
-    setApiUser(user);
-    groupApi.removeMembers(admin.username);
+    requestScopeOperations.setApiUser(user.id());
+    groupApi.removeMembers(admin.username());
     String groupId = groupApi.detail().id;
 
     allowGlobalCapabilities(
diff --git a/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/GitRefsFilterTest.java b/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/GitRefsFilterTest.java
index 145c7c9..854ac6e 100644
--- a/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/GitRefsFilterTest.java
+++ b/src/test/java/com/googlesource/gerrit/libmodule/plugins/test/GitRefsFilterTest.java
@@ -41,20 +41,20 @@
   public void testUserWithFilterOutCapabilityShouldNotSeeAbandonedChangesRefs() throws Exception {
     createChangeAndAbandon();
 
-    assertThat(getRefs(cloneProjectChangesRefs(user))).hasSize(0);
+    assertThat(getRefs(cloneProjectChangesRefs(user))).isEmpty();
   }
 
   @Test
   public void testUserWithFilterOutCapabilityShouldSeeOpenChangesRefs() throws Exception {
     createChange();
 
-    assertThat(getRefs(cloneProjectChangesRefs(user))).hasSize(1);
+    assertThat(getRefs(cloneProjectChangesRefs(user))).isNotEmpty();
   }
 
   @Test
   public void testAdminUserShouldSeeAbandonedChangesRefs() throws Exception {
     createChangeAndAbandon();
 
-    assertThat(getRefs(cloneProjectChangesRefs(admin))).hasSize(1);
+    assertThat(getRefs(cloneProjectChangesRefs(admin))).isNotEmpty();
   }
 }
