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 2c7062b..6d1b8b5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ListUsersCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ListUsersCommand.java
@@ -68,20 +68,19 @@
       Account account = accountState.getAccount();
       String out =
           new StringBuilder()
-              .append(account.getId().toString())
+              .append(account.id().toString())
               .append(" |")
               .append(
                   accountState.getUserName().isPresent()
                       ? ""
                       : " " + accountState.getUserName().get())
               .append(" |")
-              .append(
-                  Strings.isNullOrEmpty(account.getFullName()) ? "" : " " + account.getFullName())
+              .append(Strings.isNullOrEmpty(account.fullName()) ? "" : " " + account.fullName())
               .append(" |")
               .append(
-                  Strings.isNullOrEmpty(account.getPreferredEmail())
+                  Strings.isNullOrEmpty(account.preferredEmail())
                       ? ""
-                      : " " + account.getPreferredEmail())
+                      : " " + account.preferredEmail())
               .append(" |")
               .append(account.isActive() ? " active" : " inactive")
               .toString();
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 ffeaed4..a6d8926 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowAccountCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowAccountCommand.java
@@ -120,21 +120,21 @@
       if (account == null) {
         throw new UnloggedFailure("Account " + id.toString() + " does not exist.");
       }
-      stdout.println("Full name:         " + account.getAccount().getFullName());
+      stdout.println("Full name:         " + account.getAccount().fullName());
       stdout.println("Account Id:        " + id.toString());
-      stdout.println("Preferred Email:   " + account.getAccount().getPreferredEmail());
+      stdout.println("Preferred Email:   " + account.getAccount().preferredEmail());
       Optional<AccountState> accountState = accountCache.get(id);
       if (accountState.isPresent()) {
         stdout.println("User Name:         " + accountState.get().getUserName().get());
       }
       stdout.println("Active:            " + account.getAccount().isActive());
-      stdout.println("Registered on:     " + account.getAccount().getRegisteredOn());
+      stdout.println("Registered on:     " + account.getAccount().registeredOn());
 
       stdout.println("");
       stdout.println("External Ids:");
       stdout.println(String.format("%-50s %s", "Email Address:", "External Id:"));
       try {
-        for (ExternalId externalId : externalIds.byAccount(account.getAccount().getId())) {
+        for (ExternalId externalId : externalIds.byAccount(account.getAccount().id())) {
           stdout.println(
               String.format(
                   "%-50s %s",
@@ -148,7 +148,7 @@
         stdout.println("Public Keys:");
         List<SshKeyInfo> sshKeys;
         try {
-          sshKeys = getSshKeys.get().apply(new AccountResource(userFactory.create(id)));
+          sshKeys = getSshKeys.get().apply(new AccountResource(userFactory.create(id))).value();
         } catch (AuthException
             | IOException
             | ConfigInvalidException
@@ -174,7 +174,7 @@
                 + (filterGroups == null ? "" : " (Filtering on \"" + filterGroups + "\")")
                 + ":");
         List<GroupInfo> groupInfos =
-            accountGetGroups.get().apply(new AccountResource(userFactory.create(id)));
+            accountGetGroups.get().apply(new AccountResource(userFactory.create(id))).value();
 
         Collections.sort(groupInfos, new CustomComparator());
         for (GroupInfo groupInfo : groupInfos) {
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 6d0e4ca..bf7d25c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowRepoAccountAccessCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/adminconsole/ShowRepoAccountAccessCommand.java
@@ -124,11 +124,11 @@
       for (Account.Id id : idList) {
         userHasPermissionsInProject = false;
         account = accountResolver.resolve(id.toString()).asUnique();
-        stdout.println("Full name:         " + account.getAccount().getFullName());
+        stdout.println("Full name:         " + account.getAccount().fullName());
         // 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)));
+            accountGetGroups.get().apply(new AccountResource(userFactory.create(id))).value();
         HashSet<String> groupHash = new HashSet<>();
 
         for (GroupInfo groupInfo : groupInfos) {
