diff --git a/gr-serviceuser/gr-serviceuser-create_html.js b/gr-serviceuser/gr-serviceuser-create_html.js
index 86f2473..1e408ab 100644
--- a/gr-serviceuser/gr-serviceuser-create_html.js
+++ b/gr-serviceuser/gr-serviceuser-create_html.js
@@ -24,10 +24,15 @@
         margin: 2em auto;
         max-width: 50em;
       }
+
+      .heading {
+        font-size: x-large;
+        font-weight: 500;
+      }
     </style>
     <main class="gr-form-styles read-only">
       <div class="topHeader">
-        <h1 class="heading-1">Create Service User</h1>
+        <h1 class="heading">Create Service User</h1>
       </div>
       <fieldset id="infoMessage"
            hidden$="[[!_infoMessageEnabled]]">
diff --git a/gr-serviceuser/gr-serviceuser-detail.js b/gr-serviceuser/gr-serviceuser-detail.js
index fa8fd32..c757b0c 100644
--- a/gr-serviceuser/gr-serviceuser-detail.js
+++ b/gr-serviceuser/gr-serviceuser-detail.js
@@ -135,7 +135,7 @@
   }
 
   _getPermissions() {
-    return this.plugin.restApi().getAccountCapabilities(['administrateServer'])
+    return this.plugin.restApi('/accounts/self/capabilities/').get('')
         .then(capabilities => {
           this._isAdmin = capabilities && capabilities.administrateServer;
         });
diff --git a/gr-serviceuser/gr-serviceuser-detail_html.js b/gr-serviceuser/gr-serviceuser-detail_html.js
index 0fe87f3..7b2211c 100644
--- a/gr-serviceuser/gr-serviceuser-detail_html.js
+++ b/gr-serviceuser/gr-serviceuser-detail_html.js
@@ -20,6 +20,11 @@
     <style include="gr-subpage-styles"></style>
     <style include="gr-form-styles"></style>
     <style>
+      .heading {
+        font-size: x-large;
+        font-weight: 500;
+      }
+
       div.serviceuser-detail {
         margin: 2em auto;
         max-width: 50em;
@@ -66,7 +71,7 @@
         </div>
         <div id="loadedContent"
              class$="[[_computeLoadingClass(_loading)]]">
-          <h1 id="Title" class="heading-1">Service User "[[_serviceUser.name]]"</h1>
+          <h1 id="Title" class="heading">Service User "[[_serviceUser.name]]"</h1>
           <div id="form">
             <fieldset>
               <fieldset>
diff --git a/gr-serviceuser/gr-serviceuser-list_html.js b/gr-serviceuser/gr-serviceuser-list_html.js
index ae0ff2f..cc57ade 100644
--- a/gr-serviceuser/gr-serviceuser-list_html.js
+++ b/gr-serviceuser/gr-serviceuser-list_html.js
@@ -23,6 +23,11 @@
         padding: 8px;
       }
 
+      .heading {
+        font-size: x-large;
+        font-weight: 500;
+      }
+
       #topContainer {
         align-items: center;
         display: flex;
@@ -31,11 +36,10 @@
         margin: 0 1em;
       }
     </style>
-    <div class="topHeader">
-      <h1 class="heading-1">Service Users</h1>
-    </div>
     <div id="topContainer">
-      <div></div>
+      <div>
+        <h1 class="heading">Service Users</h1>
+      </div>
       <div id="createNewContainer"
            class$="[[_computeCreateClass(createNew)]]">
         <gr-button primary
diff --git a/gr-serviceuser/gr-serviceuser.js b/gr-serviceuser/gr-serviceuser.js
index c6624a6..81b7329 100644
--- a/gr-serviceuser/gr-serviceuser.js
+++ b/gr-serviceuser/gr-serviceuser.js
@@ -20,10 +20,7 @@
 import {GrServiceUserCreate} from './gr-serviceuser-create.js';
 
 Gerrit.install(plugin => {
-  plugin.restApi()
-      .getAccountCapabilities([
-        'administrateServer',
-        'serviceuser-createServiceUser'])
+  plugin.restApi('/accounts/self/capabilities/').get('')
       .then(capabilities => {
         if (capabilities
             && (capabilities.administrateServer
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/HttpModule.java
index 650eba6..d551473 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/HttpModule.java
@@ -22,7 +22,6 @@
 public class HttpModule extends AbstractModule {
   @Override
   protected void configure() {
-    DynamicSet.bind(binder(), WebUiPlugin.class)
-        .toInstance(new JavaScriptPlugin("serviceuser.js"));
+    DynamicSet.bind(binder(), WebUiPlugin.class).toInstance(new JavaScriptPlugin("serviceuser.js"));
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/Module.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/Module.java
index 89510bb..5b5df2f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/Module.java
@@ -25,6 +25,7 @@
 import com.google.gerrit.extensions.registration.DynamicMap;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.restapi.RestApiModule;
+import com.google.gerrit.extensions.webui.TopMenu;
 import com.google.gerrit.server.git.validators.CommitValidationListener;
 import com.google.gerrit.server.project.ProjectLevelConfig;
 import com.google.inject.AbstractModule;
@@ -38,6 +39,7 @@
     bind(CapabilityDefinition.class)
         .annotatedWith(Exports.named(CreateServiceUserCapability.ID))
         .to(CreateServiceUserCapability.class);
+    DynamicSet.bind(binder(), TopMenu.class).to(ServiceUserTopMenu.class);
     DynamicSet.bind(binder(), GitReferenceUpdatedListener.class).to(RefUpdateListener.class);
     DynamicSet.bind(binder(), CommitValidationListener.class).to(ValidateServiceUserCommits.class);
     install(new FactoryModuleBuilder().build(CreateServiceUserNotes.Factory.class));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserTopMenu.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserTopMenu.java
new file mode 100644
index 0000000..eb2606d
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserTopMenu.java
@@ -0,0 +1,75 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.serviceuser;
+
+import com.google.common.collect.Lists;
+import com.google.common.flogger.FluentLogger;
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.extensions.annotations.RequiresCapability;
+import com.google.gerrit.extensions.api.access.PluginPermission;
+import com.google.gerrit.extensions.client.MenuItem;
+import com.google.gerrit.extensions.webui.TopMenu;
+import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.permissions.PermissionBackend;
+import com.google.gerrit.server.permissions.PermissionBackendException;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import java.util.ArrayList;
+import java.util.List;
+
+@RequiresCapability("printHello")
+public class ServiceUserTopMenu implements TopMenu {
+  private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+  private final String pluginName;
+  private final Provider<CurrentUser> userProvider;
+  private final List<MenuEntry> menuEntries;
+  private final PermissionBackend permissionBackend;
+
+  @Inject
+  public ServiceUserTopMenu(
+      @PluginName String pluginName,
+      Provider<CurrentUser> userProvider,
+      PermissionBackend permissionBackend) {
+    this.pluginName = pluginName;
+    this.userProvider = userProvider;
+    this.permissionBackend = permissionBackend;
+    menuEntries = new ArrayList<>();
+
+    try {
+      if (canSeeMenuEntry()) {
+        menuEntries.add(
+            new MenuEntry(
+                "Browse",
+                Lists.newArrayList(new MenuItem("Service Users", "/x/serviceuser/list"))));
+      }
+    } catch (PermissionBackendException e) {
+      logger.atSevere().withCause(e).log("Unable to compute permissions.");
+    }
+  }
+
+  private boolean canSeeMenuEntry() throws PermissionBackendException {
+    if (userProvider.get().isIdentifiedUser()) {
+      return permissionBackend
+          .currentUser()
+          .test(new PluginPermission(pluginName, CreateServiceUserCapability.ID));
+    }
+    return false;
+  }
+
+  @Override
+  public List<MenuEntry> getEntries() {
+    return menuEntries;
+  }
+}
