diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
index 53cc550..f1b581e 100644
--- a/lib/gerrit/BUCK
+++ b/lib/gerrit/BUCK
@@ -1,12 +1,12 @@
 include_defs('//bucklets/maven_jar.bucklet')
 
-VER = '2.12.4'
+VER = '2.13'
 REPO = MAVEN_CENTRAL
 
 maven_jar(
   name = 'plugin-api',
   id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
-  sha1 = 'aad189fe4f9fa5c3f8048b5e4972512b4b3e2a24',
+  sha1 = 'e25d55b8f41627c4ae6b9d2069ec398638b219a3',
   attach_source = False,
   repository = REPO,
   license = 'Apache2.0',
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index 4469749..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>com.googlesource.gerrit.plugins</groupId>
-  <artifactId>admin-console</artifactId>
-  <packaging>jar</packaging>
-  <version>2.12</version>
-  <properties>
-    <Gerrit-ApiType>plugin</Gerrit-ApiType>
-    <Gerrit-ApiVersion>${project.version}</Gerrit-ApiVersion>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <version>2.4</version>
-        <configuration>
-          <archive>
-            <manifestEntries>
-              <Gerrit-SshModule>com.googlesource.gerrit.plugins.adminconsole.AdminConsoleCommandModule</Gerrit-SshModule>
-
-              <Implementation-Vendor>Gerrit Code Review</Implementation-Vendor>
-              <Implementation-URL>https://gerrit-review.googlesource.com/#/admin/projects/plugins/admin-console</Implementation-URL>
-
-              <Implementation-Title>Plugin ${project.artifactId}</Implementation-Title>
-              <Implementation-Version>${project.version}</Implementation-Version>
-
-              <Gerrit-ApiType>${Gerrit-ApiType}</Gerrit-ApiType>
-              <Gerrit-ApiVersion>${Gerrit-ApiVersion}</Gerrit-ApiVersion>
-              <Gerrit-PluginName>admin-console</Gerrit-PluginName>
-            </manifestEntries>
-          </archive>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>2.3.2</version>
-        <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
-          <encoding>UTF-8</encoding>
-        </configuration>
-      </plugin>
-    </plugins>
-
-  </build>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.gerrit</groupId>
-      <artifactId>gerrit-${Gerrit-ApiType}-api</artifactId>
-      <version>${Gerrit-ApiVersion}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <repositories>
-    <repository>
-      <id>gerrit-api-repository</id>
-      <url>https://gerrit-api.commondatastorage.googleapis.com/snapshot/</url>
-    </repository>
-   </repositories>
-</project>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/AdminConsoleCommandModule.java b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/AdminConsoleCommandModule.java
index fece7cb..98da362 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/AdminConsoleCommandModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/AdminConsoleCommandModule.java
@@ -21,8 +21,8 @@
   protected void configureCommands() {
     command(ShowAccountCommand.class);
     command(ListUsersCommand.class);
-   alias("show-account", ShowAccountCommand.class);
-   alias("show-repo-account-access", ShowRepoAccountAccessCommand.class);
-   alias("show-repo-access", ShowRepoAccessCommand.class);
+    alias("show-account", ShowAccountCommand.class);
+    alias("show-repo-account-access", ShowRepoAccountAccessCommand.class);
+    alias("show-repo-access", ShowRepoAccessCommand.class);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ListUsersCommand.java b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ListUsersCommand.java
index f304b0d..8ead5ad 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ListUsersCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ListUsersCommand.java
@@ -84,7 +84,7 @@
 
   private String getUsername(Account account) throws OrmException {
     String id = account.getId().toString();
-    Account accountFromResolver = accountResolver.find(id);
+    Account accountFromResolver = accountResolver.find(db, id);
     return accountFromResolver == null ? null
         : accountFromResolver.getUserName();
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowAccountCommand.java b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowAccountCommand.java
index b7756ee..5c439ff 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowAccountCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowAccountCommand.java
@@ -14,29 +14,21 @@
 
 package com.googlesource.gerrit.plugins.adminconsole;
 
-import java.io.IOException;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.kohsuke.args4j.Argument;
-import org.kohsuke.args4j.Option;
-
 import com.google.gerrit.common.data.GlobalCapability;
 import com.google.gerrit.extensions.annotations.CapabilityScope;
 import com.google.gerrit.extensions.annotations.RequiresCapability;
 import com.google.gerrit.extensions.common.GroupInfo;
+import com.google.gerrit.extensions.common.SshKeyInfo;
+import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Account.Id;
 import com.google.gerrit.reviewdb.client.AccountExternalId;
-import com.google.gerrit.reviewdb.client.AccountSshKey;
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AccountResolver;
 import com.google.gerrit.server.account.AccountResource;
 import com.google.gerrit.server.account.GetGroups;
+import com.google.gerrit.server.account.GetSshKeys;
 import com.google.gerrit.sshd.CommandMetaData;
 import com.google.gerrit.sshd.SshCommand;
 import com.google.gwtorm.server.OrmException;
@@ -44,6 +36,16 @@
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.kohsuke.args4j.Argument;
+import org.kohsuke.args4j.Option;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+
 @RequiresCapability(value=GlobalCapability.ADMINISTRATE_SERVER, scope=CapabilityScope.CORE)
 @CommandMetaData(name = "show-account", description = "Displays user information")
 public final class ShowAccountCommand extends SshCommand {
@@ -60,21 +62,23 @@
   @Option(name = "--show-keys", usage = "show user's public keys?")
   private boolean showKeys = false;
 
-  final AccountResolver accountResolver;
+  private final AccountResolver accountResolver;
   private final SchemaFactory<ReviewDb> schema;
   private final Provider<GetGroups> accountGetGroups;
   private final IdentifiedUser.GenericFactory userFactory;
+  private final Provider<GetSshKeys> getSshKeys;
 
   @Inject
-  ShowAccountCommand(AccountResolver ar,
-      final Provider<GetGroups> accountGetGroups,
-      final IdentifiedUser.GenericFactory userFactory,
-      SchemaFactory<ReviewDb> schema) throws ConfigInvalidException,
-      IOException {
-    accountResolver = ar;
+  ShowAccountCommand(AccountResolver accountResolver,
+      Provider<GetGroups> accountGetGroups,
+      IdentifiedUser.GenericFactory userFactory,
+      Provider<GetSshKeys> getSshKeys,
+      SchemaFactory<ReviewDb> schema) {
+    this.accountResolver = accountResolver;
     this.accountGetGroups = accountGetGroups;
     this.userFactory = userFactory;
     this.schema = schema;
+    this.getSshKeys = getSshKeys;
   }
 
   @Override
@@ -86,35 +90,32 @@
           "You need to tell me who to find:  LastName,\\\\ Firstname, email@address.com, account id or an user name.  "
               + "Be sure to double-escape spaces, for example: \"show-account Last,\\\\ First\"");
     }
-
-    Set<Id> idList = accountResolver.findAll(name);
-    if (idList.isEmpty()) {
-      throw new UnloggedFailure(1,
-          "No accounts found for your query: \""
-              + name
-              + "\""
-              + " Tip: Try double-escaping spaces, for example: \"show-account Last,\\\\ First\"");
-    } else {
+    try (ReviewDb db = schema.open()) {
+      Set<Id> idList = accountResolver.findAll(db, name);
+      if (idList.isEmpty()) {
+        throw new UnloggedFailure(1,
+            "No accounts found for your query: \""
+                + name
+                + "\""
+                + " Tip: Try double-escaping spaces, for example: \"show-account Last,\\\\ First\"");
+      }
       stdout.println("Found " + idList.size() + " result"
           + (idList.size() > 1 ? "s" : "") + ": for query: \"" + name + "\"");
       stdout.println();
-    }
 
-    for (Id id : idList) {
-      account = accountResolver.find(id.toString());
-      if (account == null) {
-        throw new UnloggedFailure("Account " + id.toString() + " does not exist.");
-      }
-      stdout.println("Full name:         " + account.getFullName());
-      stdout.println("Account Id:        " + id.toString());
-      stdout.println("Preferred Email:   " + account.getPreferredEmail());
-      stdout.println("User Name:         " + account.getUserName());
-      stdout.println("Active:            " + account.isActive());
-      stdout.println("Registered on:     " + account.getRegisteredOn());
+      for (Id id : idList) {
+        account = accountResolver.find(db, id.toString());
+        if (account == null) {
+          throw new UnloggedFailure("Account " + id.toString() + " does not exist.");
+        }
+        stdout.println("Full name:         " + account.getFullName());
+        stdout.println("Account Id:        " + id.toString());
+        stdout.println("Preferred Email:   " + account.getPreferredEmail());
+        stdout.println("User Name:         " + account.getUserName());
+        stdout.println("Active:            " + account.isActive());
+        stdout.println("Registered on:     " + account.getRegisteredOn());
 
-      final ReviewDb db = schema.open();
 
-      try {
         stdout.println("");
         stdout.println("External Ids:");
         stdout.println(String
@@ -130,40 +131,43 @@
         if (showKeys) {
           stdout.println("");
           stdout.println("Public Keys:");
-          List<AccountSshKey> sshKeys =
-              db.accountSshKeys().byAccount(account.getId()).toList();
+          List<SshKeyInfo> sshKeys;
+          try {
+            sshKeys = getSshKeys.get()
+                .apply(new AccountResource(userFactory.create(id)));
+          } catch (AuthException | IOException | ConfigInvalidException e) {
+            throw new UnloggedFailure(1, "Error getting sshkeys: " + e.getMessage(), e);
+          }
           if (sshKeys == null || sshKeys.isEmpty()) {
             stdout.println("None");
           } else {
             stdout.println(String.format("%-9s %s", "Status:", "Key:"));
-            for (AccountSshKey sshKey : sshKeys) {
-              stdout.println(String.format("%-9s %s", (sshKey.isValid()
-                  ? "Active" : "Inactive"), sshKey.getSshPublicKey()));
+            for (SshKeyInfo sshKey : sshKeys) {
+              stdout.println(String.format("%-9s %s", (sshKey.valid
+                  ? "Active" : "Inactive"), sshKey.sshPublicKey));
             }
           }
         }
-      } finally {
-        db.close();
-      }
 
-      if (showGroups) {
-        stdout.println();
-        stdout.println("Member of groups"
-            + (filterGroups == null ? "" : " (Filtering on \"" + filterGroups
-                + "\")") + ":");
-        List<GroupInfo> groupInfos =
-            accountGetGroups.get().apply(
-                new AccountResource(userFactory.create(id)));
+        if (showGroups) {
+          stdout.println();
+          stdout.println("Member of groups"
+              + (filterGroups == null ? "" : " (Filtering on \"" + filterGroups
+                  + "\")") + ":");
+          List<GroupInfo> groupInfos =
+              accountGetGroups.get().apply(
+                  new AccountResource(userFactory.create(id)));
 
-        Collections.sort(groupInfos, new CustomComparator());
-        for (GroupInfo groupInfo : groupInfos) {
-          if (null == filterGroups || groupInfo.name.toLowerCase().contains(filterGroups.toLowerCase
-              ())) {
-            stdout.println(groupInfo.name);
+          Collections.sort(groupInfos, new CustomComparator());
+          for (GroupInfo groupInfo : groupInfos) {
+            if (null == filterGroups || groupInfo.name.toLowerCase().contains(filterGroups.toLowerCase
+                ())) {
+              stdout.println(groupInfo.name);
+            }
           }
         }
+        stdout.println("");
       }
-      stdout.println("");
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowRepoAccessCommand.java b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowRepoAccessCommand.java
index d8ca185..1252b23 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowRepoAccessCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowRepoAccessCommand.java
@@ -14,13 +14,6 @@
 
 package com.googlesource.gerrit.plugins.adminconsole;
 
-import java.io.IOException;
-
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
-import org.kohsuke.args4j.Argument;
-import org.kohsuke.args4j.Option;
-
 import com.google.gerrit.common.data.AccessSection;
 import com.google.gerrit.common.data.GlobalCapability;
 import com.google.gerrit.common.data.Permission;
@@ -34,6 +27,13 @@
 import com.google.gerrit.sshd.SshCommand;
 import com.google.inject.Inject;
 
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
+import org.kohsuke.args4j.Argument;
+import org.kohsuke.args4j.Option;
+
+import java.io.IOException;
+
 @RequiresCapability(value=GlobalCapability.ADMINISTRATE_SERVER, scope=CapabilityScope.CORE)
 @CommandMetaData(name = "show-repo-access", description = "Displays access on a specific repository")
 public final class ShowRepoAccessCommand extends SshCommand {
@@ -45,8 +45,7 @@
   private boolean wide;
 
   @Inject
-  ShowRepoAccessCommand(final MetaDataUpdate.Server metaDataUpdateFactory)
-      throws ConfigInvalidException, IOException {
+  ShowRepoAccessCommand(MetaDataUpdate.Server metaDataUpdateFactory) {
     this.metaDataUpdateFactory = metaDataUpdateFactory;
   }
 
@@ -66,7 +65,7 @@
     if (projectName.isEmpty()) {
       throw new UnloggedFailure(1, "Please specify a project to show access for");
     }
-    final Project.NameKey nameKey = new Project.NameKey(projectName);
+    Project.NameKey nameKey = new Project.NameKey(projectName);
 
     permissionGroupWidth = wide ? Integer.MAX_VALUE : columns - 9 - 5 - 9;
 
@@ -97,11 +96,10 @@
     }
   }
 
-  private String format(final String s) {
+  private String format(String s) {
     if (s.length() < permissionGroupWidth) {
       return s;
-    } else {
-      return s.substring(0, permissionGroupWidth);
     }
+    return s.substring(0, permissionGroupWidth);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowRepoAccountAccessCommand.java b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowRepoAccountAccessCommand.java
index e1623bb..e80f81b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowRepoAccountAccessCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowRepoAccountAccessCommand.java
@@ -14,16 +14,6 @@
 
 package com.googlesource.gerrit.plugins.adminconsole;
 
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.jgit.errors.ConfigInvalidException;
-import org.eclipse.jgit.errors.RepositoryNotFoundException;
-import org.kohsuke.args4j.Argument;
-import org.kohsuke.args4j.Option;
-
 import com.google.gerrit.common.data.AccessSection;
 import com.google.gerrit.common.data.GlobalCapability;
 import com.google.gerrit.common.data.Permission;
@@ -33,6 +23,7 @@
 import com.google.gerrit.extensions.common.GroupInfo;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Account.Id;
+import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AccountResolver;
@@ -42,9 +33,18 @@
 import com.google.gerrit.server.git.ProjectConfig;
 import com.google.gerrit.sshd.CommandMetaData;
 import com.google.gerrit.sshd.SshCommand;
+import com.google.gwtorm.server.SchemaFactory;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 
+import org.eclipse.jgit.errors.RepositoryNotFoundException;
+import org.kohsuke.args4j.Argument;
+import org.kohsuke.args4j.Option;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 @RequiresCapability(value=GlobalCapability.ADMINISTRATE_SERVER, scope=CapabilityScope.CORE)
 @CommandMetaData(name = "show-repo-account-access", description = "Displays user's access on a specific repository")
 public final class ShowRepoAccountAccessCommand extends SshCommand {
@@ -61,21 +61,23 @@
 
   @Inject
   ShowRepoAccountAccessCommand(
-      final MetaDataUpdate.Server metaDataUpdateFactory,
-      final Provider<GetGroups> accountGetGroups,
+      MetaDataUpdate.Server metaDataUpdateFactory,
+      Provider<GetGroups> accountGetGroups,
       AccountResolver accountResolver,
-      final IdentifiedUser.GenericFactory userFactory)
-      throws ConfigInvalidException, IOException {
+      IdentifiedUser.GenericFactory userFactory,
+      SchemaFactory<ReviewDb> schema) {
     this.metaDataUpdateFactory = metaDataUpdateFactory;
     this.accountGetGroups = accountGetGroups;
     this.accountResolver = accountResolver;
     this.userFactory = userFactory;
+    this.schema = schema;
   }
 
   private final MetaDataUpdate.Server metaDataUpdateFactory;
   private final AccountResolver accountResolver;
   private final Provider<GetGroups> accountGetGroups;
   private final IdentifiedUser.GenericFactory userFactory;
+  private final SchemaFactory<ReviewDb> schema;
   private int columns = 80;
   private int permissionGroupWidth;
 
@@ -98,88 +100,88 @@
           "You need to tell me who to find:  LastName,\\\\ Firstname, email@address.com, account id or an user name.  "
               + "Be sure to double-escape spaces, for example: \"show-repo-account-access All-Projects --user Last,\\\\ First\"");
     }
+    try (ReviewDb db = schema.open()) {
+      Set<Id> idList = accountResolver.findAll(db, name);
+      if (idList.isEmpty()) {
+        throw new UnloggedFailure(1,
+            "No accounts found for your query: \""
+                + name
+                + "\""
+                + " Tip: Try double-escaping spaces, for example: \"--user Last,\\\\ First\"");
+      }
 
-    Set<Id> idList = accountResolver.findAll(name);
-    if (idList.isEmpty()) {
-      throw new UnloggedFailure(1,
-          "No accounts found for your query: \""
-              + name
-              + "\""
-              + " Tip: Try double-escaping spaces, for example: \"--user Last,\\\\ First\"");
-    }
+      Project.NameKey nameKey = new Project.NameKey(projectName);
 
-    final Project.NameKey nameKey = new Project.NameKey(projectName);
+      try {
+        MetaDataUpdate md = metaDataUpdateFactory.create(nameKey);
+        ProjectConfig config;
+        config = ProjectConfig.read(md);
 
-    try {
-      MetaDataUpdate md = metaDataUpdateFactory.create(nameKey);
-      ProjectConfig config;
-      config = ProjectConfig.read(md);
+        permissionGroupWidth = wide ? Integer.MAX_VALUE : columns - 9 - 5 - 9;
 
-      permissionGroupWidth = wide ? Integer.MAX_VALUE : columns - 9 - 5 - 9;
+        for (Id id : idList) {
+          userHasPermissionsInProject = false;
+          account = accountResolver.find(db, id.toString());
+          stdout.println("Full name:         " + account.getFullName());
+          // Need to know what groups the user is in. This is not a great
+          // solution, but it does work.
+          List<GroupInfo> groupInfos =
+              accountGetGroups.get().apply(
+                  new AccountResource(userFactory.create(id)));
+          HashSet<String> groupHash = new HashSet<>();
 
-      for (Id id : idList) {
-        userHasPermissionsInProject = false;
-        account = accountResolver.find(id.toString());
-        stdout.println("Full name:         " + account.getFullName());
-        // Need to know what groups the user is in. This is not a great
-        // solution, but it does work.
-        List<GroupInfo> groupInfos =
-            accountGetGroups.get().apply(
-                new AccountResource(userFactory.create(id)));
-        HashSet<String> groupHash = new HashSet<String>();
+          for (GroupInfo groupInfo : groupInfos) {
+            groupHash.add(groupInfo.name);
+          }
 
-        for (GroupInfo groupInfo : groupInfos) {
-          groupHash.add(groupInfo.name);
-        }
+          for (AccessSection accessSection : config.getAccessSections()) {
+            StringBuilder sb = new StringBuilder();
+            sb.append((String.format(sectionNameFormatter, accessSection
+                .getName().toString())));
+            // This is a solution to prevent displaying a section heading unless
+            // the user has permissions for it
+            // not the best solution, but I haven't been able to find
+            // "Is user a member of this group" based on the information I have
+            // in a more efficient manner yet.
+            userHasPermissionsInSection = false;
+            for (Permission permission : accessSection.getPermissions()) {
 
-        for (AccessSection accessSection : config.getAccessSections()) {
-          StringBuilder sb = new StringBuilder();
-          sb.append((String.format(sectionNameFormatter, accessSection
-              .getName().toString())));
-          // This is a solution to prevent displaying a section heading unless
-          // the user has permissions for it
-          // not the best solution, but I haven't been able to find
-          // "Is user a member of this group" based on the information I have
-          // in a more efficient manner yet.
-          userHasPermissionsInSection = false;
-          for (Permission permission : accessSection.getPermissions()) {
+              for (PermissionRule rule : permission.getRules()) {
 
-            for (PermissionRule rule : permission.getRules()) {
-
-              if (groupHash.contains(rule.getGroup().getName())) {
-                sb.append(String.format(ruleNameFormatter, permission.getName()));
-                sb.append(String.format(permissionNameFormatter,
-                    (!rule.getMin().equals(rule.getMax())) ? "" + rule.getMin() + " "
-                        + rule.getMax() : rule.getAction(),
-                    (permission.getExclusiveGroup() ? "EXCLUSIVE" : ""),
-                    format(rule.getGroup().getName())));
-                userHasPermissionsInSection = true;
+                if (groupHash.contains(rule.getGroup().getName())) {
+                  sb.append(String.format(ruleNameFormatter, permission.getName()));
+                  sb.append(String.format(permissionNameFormatter,
+                      (!rule.getMin().equals(rule.getMax())) ? "" + rule.getMin() + " "
+                          + rule.getMax() : rule.getAction(),
+                      (permission.getExclusiveGroup() ? "EXCLUSIVE" : ""),
+                      format(rule.getGroup().getName())));
+                  userHasPermissionsInSection = true;
+                }
               }
             }
+
+            if (userHasPermissionsInSection) {
+              stdout.print(sb.toString());
+
+              userHasPermissionsInProject = true;
+            }
           }
 
-          if (userHasPermissionsInSection) {
-            stdout.print(sb.toString());
 
-            userHasPermissionsInProject = true;
+          if (!userHasPermissionsInProject) {
+            stdout.println("  No access found for this user on this repository");
           }
         }
-
-
-        if (!userHasPermissionsInProject) {
-          stdout.println("  No access found for this user on this repository");
-        }
+      } catch (RepositoryNotFoundException e) {
+        throw new UnloggedFailure(1, "Repository not found");
       }
-    } catch (RepositoryNotFoundException e) {
-      throw new UnloggedFailure(1, "Repository not found");
     }
   }
 
-  private String format(final String s) {
+  private String format(String s) {
     if (s.length() < permissionGroupWidth) {
       return s;
-    } else {
-      return s.substring(0, permissionGroupWidth);
     }
+    return s.substring(0, permissionGroupWidth);
   }
 }
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
index b4af23f..ca56b06 100644
--- a/src/main/resources/Documentation/build.md
+++ b/src/main/resources/Documentation/build.md
@@ -1,7 +1,7 @@
 Build
 =====
 
-This plugin is built with Buck or Maven.
+This plugin is built with Buck.
 
 Buck
 ----
@@ -101,15 +101,6 @@
   buck test --include @PLUGIN@
 ```
 
-Maven
------
-
-To build with Maven, run
-
-```
-mvn clean package
-```
-
 How to build the Gerrit Plugin API is described in the [Gerrit
 documentation](../../../Documentation/dev-buck.html#_extension_and_plugin_api_jar_files).
 
diff --git a/src/main/resources/Documentation/cmd-show-repo-access.md b/src/main/resources/Documentation/cmd-show-repo-access.md
index 7583fee..fa8d3b0 100644
--- a/src/main/resources/Documentation/cmd-show-repo-access.md
+++ b/src/main/resources/Documentation/cmd-show-repo-access.md
@@ -15,7 +15,7 @@
 DESCRIPTION
 -----------
 Displays access for a specific repository.  Does not interpret repository inheritance (currently - may change in the future, or be added as an option)
-Note, see [cmd-show-account](cmd-show-account.html) for more information on the user search functionality provided here.
+Note, see [cmd-show-account](cmd-show-account.md) for more information on the user search functionality provided here.
 
 OPTIONS
 -------
@@ -44,4 +44,4 @@
 >     $ ssh -p @SSH_PORT@ review.example.com @PLUGIN@ show-repo-access All-Projects
 
 Find Access for a repository named "my-project"
->     $ ssh -p @SSH_PORT@ review.example.com @PLUGIN@ show-repo-access my-project
\ No newline at end of file
+>     $ ssh -p @SSH_PORT@ review.example.com @PLUGIN@ show-repo-access my-project
