diff --git a/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java b/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java
index d1e3b06..04fe7d6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/singleusergroup/SingleUserGroup.java
@@ -78,17 +78,13 @@
   private final SchemaFactory<ReviewDb> schemaFactory;
   private final AccountCache accountCache;
   private final AccountControl.Factory accountControlFactory;
-  private final IdentifiedUser.GenericFactory userFactory;
-
   @Inject
   SingleUserGroup(SchemaFactory<ReviewDb> schemaFactory,
       AccountCache accountCache,
-      AccountControl.Factory accountControlFactory,
-      IdentifiedUser.GenericFactory userFactory) {
+      AccountControl.Factory accountControlFactory) {
     this.schemaFactory = schemaFactory;
     this.accountCache = accountCache;
     this.accountControlFactory = accountControlFactory;
-    this.userFactory = userFactory;
   }
 
   @Override
@@ -170,7 +166,7 @@
         if (name.matches(ACCOUNT_ID_PATTERN)) {
           Account.Id id = new Account.Id(Integer.parseInt(name));
           if (db.accounts().get(id) != null) {
-            add(matches, ids, ctl, project, id);
+            add(matches, ids, ctl, id);
             return matches;
           }
         }
@@ -183,7 +179,7 @@
             if (!e.getSchemeRest().startsWith(a)) {
               break;
             }
-            add(matches, ids, ctl, project, e.getAccountId());
+            add(matches, ids, ctl, e.getAccountId());
           }
         }
 
@@ -191,14 +187,14 @@
           if (!p.getFullName().startsWith(a)) {
             break;
           }
-          add(matches, ids, ctl, project, p.getId());
+          add(matches, ids, ctl, p.getId());
         }
 
         for (Account p : db.accounts().suggestByPreferredEmail(a, b, MAX)) {
           if (!p.getPreferredEmail().startsWith(a)) {
             break;
           }
-          add(matches, ids, ctl, project, p.getId());
+          add(matches, ids, ctl, p.getId());
         }
 
         for (AccountExternalId e : db.accountExternalIds()
@@ -206,7 +202,7 @@
           if (!e.getEmailAddress().startsWith(a)) {
             break;
           }
-          add(matches, ids, ctl, project, e.getAccountId());
+          add(matches, ids, ctl, e.getAccountId());
         }
 
         return matches;
@@ -223,13 +219,13 @@
   }
 
   private void add(List<GroupReference> matches, Set<Account.Id> ids,
-      AccountControl ctl, @Nullable ProjectControl project, Account.Id id) {
+      AccountControl ctl, Account.Id id) {
     if (!ids.add(id) || !ctl.canSee(id)) {
       return;
     }
 
     AccountState state = accountCache.get(id);
-    if (state == null || !isVisible(project, id)) {
+    if (state == null) {
       return;
     }
 
@@ -242,11 +238,6 @@
     matches.add(new GroupReference(uuid, nameOf(uuid, state)));
   }
 
-  private boolean isVisible(@Nullable ProjectControl project, Account.Id id) {
-    return project == null
-        || project.forUser(userFactory.create(id)).isVisible();
-  }
-
   private static String username(AccountGroup.UUID uuid) {
     checkUUID(uuid);
     return uuid.get().substring(UUID_PREFIX.length());
