diff --git a/pom.xml b/pom.xml
index 899f374..cd18d7c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,8 @@
     <Gerrit-ApiVersion>${project.version}</Gerrit-ApiVersion>
     <Gerrit-ReloadMode>restart</Gerrit-ReloadMode>
     <Gerrit-InitStep>com.googlesource.gerrit.plugins.gitblit.GitBlitInitStep</Gerrit-InitStep>
-    <Gerrit-HttpModule>com.googlesource.gerrit.plugins.gitblit.GitBlitModule</Gerrit-HttpModule>
+    <Gerrit-Module>com.googlesource.gerrit.plugins.gitblit.GitBlitModule</Gerrit-Module>
+    <Gerrit-HttpModule>com.googlesource.gerrit.plugins.gitblit.GitBlitServletModule</Gerrit-HttpModule>
   </properties>
   <dependencies>
     <dependency>
@@ -161,6 +162,7 @@
             <transformer
               implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
               <manifestEntries>
+                <Gerrit-Module>${Gerrit-Module}</Gerrit-Module>
                 <Gerrit-HttpModule>${Gerrit-HttpModule}</Gerrit-HttpModule>
                 <Gerrit-InitStep>${Gerrit-InitStep}</Gerrit-InitStep>
                 <Implementation-Vendor>Gerrit Code Review</Implementation-Vendor>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitModule.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitModule.java
index 0590bb3..3f4f9cf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitModule.java
@@ -1,4 +1,4 @@
-// Copyright (C) 2012 The Android Open Source Project
+// Copyright (C) 2013 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.
@@ -13,42 +13,15 @@
 // limitations under the License.
 package com.googlesource.gerrit.plugins.gitblit;
 
-import org.eclipse.jgit.lib.Config;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.google.gerrit.extensions.registration.DynamicSet;
+import com.google.gerrit.extensions.webui.TopMenu;
+import com.google.inject.AbstractModule;
 
-import com.gitblit.IUserService;
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.gerrit.server.config.SitePaths;
-import com.google.inject.Inject;
-import com.google.inject.servlet.ServletModule;
-import com.googlesource.gerrit.plugins.gitblit.app.GerritGitBlit;
-import com.googlesource.gerrit.plugins.gitblit.auth.GerritToGitBlitUserService;
-
-public class GitBlitModule extends ServletModule {
-  private static final Logger log = LoggerFactory.getLogger(GitBlitModule.class);
-
-  @Inject
-  public GitBlitModule(@PluginName final String name,
-      @GerritServerConfig final Config gerritConfig, final SitePaths sitePaths) {
-    log.info("Create GitBlitModule with name='" + name);
-  }
+public class GitBlitModule extends AbstractModule {
 
   @Override
-  protected void configureServlets() {
-    log.info("Configuring servlet and filters");
-    bind(IUserService.class).to(GerritToGitBlitUserService.class);
-    bind(GerritGitBlit.class);
-
-    serve("/pages/*").with(WrappedPagesServlet.class);
-    serve("/feed/*").with(WrappedSyndicationServlet.class);
-    serve("/zip/*").with(WrappedDownloadZipServlet.class);
-    serve("/logo.png").with(WrappedLogoServlet.class);
-    serve("/static/logo.png").with(WrappedLogoServlet.class);
-
-    filter("/*").through(GerritWicketFilter.class);
-    filter("/pages/*").through(WrappedPagesFilter.class);
-    filter("/feed/*").through(WrappedSyndicationFilter.class);
+  protected void configure() {
+    DynamicSet.bind(binder(), TopMenu.class).to(GitBlitTopMenu.class);
   }
+
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
new file mode 100644
index 0000000..4ecdf54
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitServletModule.java
@@ -0,0 +1,54 @@
+// Copyright (C) 2012 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.gitblit;
+
+import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.gitblit.IUserService;
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.gerrit.server.config.SitePaths;
+import com.google.inject.Inject;
+import com.google.inject.servlet.ServletModule;
+import com.googlesource.gerrit.plugins.gitblit.app.GerritGitBlit;
+import com.googlesource.gerrit.plugins.gitblit.auth.GerritToGitBlitUserService;
+
+public class GitBlitServletModule extends ServletModule {
+  private static final Logger log = LoggerFactory.getLogger(GitBlitServletModule.class);
+
+  @Inject
+  public GitBlitServletModule(@PluginName final String name,
+      @GerritServerConfig final Config gerritConfig, final SitePaths sitePaths) {
+    log.info("Create GitBlitModule with name='" + name);
+  }
+
+  @Override
+  protected void configureServlets() {
+    log.info("Configuring servlet and filters");
+    bind(IUserService.class).to(GerritToGitBlitUserService.class);
+    bind(GerritGitBlit.class);
+
+    serve("/pages/*").with(WrappedPagesServlet.class);
+    serve("/feed/*").with(WrappedSyndicationServlet.class);
+    serve("/zip/*").with(WrappedDownloadZipServlet.class);
+    serve("/logo.png").with(WrappedLogoServlet.class);
+    serve("/static/logo.png").with(WrappedLogoServlet.class);
+
+    filter("/*").through(GerritWicketFilter.class);
+    filter("/pages/*").through(WrappedPagesFilter.class);
+    filter("/feed/*").through(WrappedSyndicationFilter.class);
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitTopMenu.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitTopMenu.java
new file mode 100644
index 0000000..83204ae
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/GitBlitTopMenu.java
@@ -0,0 +1,47 @@
+package com.googlesource.gerrit.plugins.gitblit;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.google.gerrit.extensions.annotations.Listen;
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.extensions.webui.TopMenu;
+import com.google.gerrit.server.AnonymousUser;
+import com.google.gerrit.server.CurrentUser;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+@Listen
+public class GitBlitTopMenu implements TopMenu {
+  private final MenuEntry fullMenuEntries;
+  private final MenuEntry restrictedMenuEntries;
+  private final Provider<CurrentUser> userProvider;
+
+  @Inject
+  public GitBlitTopMenu(final @PluginName String pluginName,
+      final Provider<CurrentUser> userProvider) {
+    this.userProvider = userProvider;
+
+    String gitBlitBaseUrl = "/plugins/" + pluginName + "/";
+    this.restrictedMenuEntries =
+        menu("Gitblit", item("Repositories", gitBlitBaseUrl + "repositories/"));
+    this.fullMenuEntries =
+        menu("GitBlit", item("Repositories", gitBlitBaseUrl + "repositories/"),
+            item("Activity", gitBlitBaseUrl + "activity/"),
+            item("Search", gitBlitBaseUrl + "lucene/"));
+  }
+
+  private MenuEntry menu(String name, MenuItem... items) {
+    return new MenuEntry(name, Arrays.asList(items));
+  }
+
+  private MenuItem item(String name, String url) {
+    return new MenuItem(name, url, "");
+  }
+
+  @Override
+  public List<MenuEntry> getEntries() {
+    return Arrays.asList(userProvider.get() instanceof AnonymousUser
+        ? restrictedMenuEntries : fullMenuEntries);
+  }
+}
