diff --git a/src/main/java/com/gerritforge/gerrit/plugins/account/AccountResourceFactory.java b/src/main/java/com/gerritforge/gerrit/plugins/account/AccountResourceFactory.java
index ec21169..a3847d1 100644
--- a/src/main/java/com/gerritforge/gerrit/plugins/account/AccountResourceFactory.java
+++ b/src/main/java/com/gerritforge/gerrit/plugins/account/AccountResourceFactory.java
@@ -28,6 +28,6 @@
   }
 
   public AccountResource create(int accountId) {
-    return new AccountResource(userFactory.create(new Account.Id(accountId)));
+    return new AccountResource(userFactory.create(Account.id(accountId)));
   }
 }
diff --git a/src/main/java/com/gerritforge/gerrit/plugins/account/DeleteAccount.java b/src/main/java/com/gerritforge/gerrit/plugins/account/DeleteAccount.java
index 8e3151a..bfa0409 100644
--- a/src/main/java/com/gerritforge/gerrit/plugins/account/DeleteAccount.java
+++ b/src/main/java/com/gerritforge/gerrit/plugins/account/DeleteAccount.java
@@ -17,6 +17,7 @@
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.extensions.restapi.BadRequestException;
 import com.google.gerrit.extensions.restapi.ResourceConflictException;
+import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.extensions.restapi.RestModifyView;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AccountResource;
@@ -55,7 +56,7 @@
   }
 
   @Override
-  public Object apply(AccountResource resource, DeleteAccount.Input input)
+  public Response<Object> apply(AccountResource resource, DeleteAccount.Input input)
       throws AuthException, BadRequestException, ResourceConflictException, Exception {
     boolean removed = false;
 
@@ -68,7 +69,7 @@
       removed = true;
     }
 
-    return new DeleteAccountResponse(removed);
+    return Response.ok(new DeleteAccountResponse(removed));
   }
 
   private void assertDeletePermission(int accountId) throws AuthException {
diff --git a/src/main/java/com/gerritforge/gerrit/plugins/account/DeleteAccountCommand.java b/src/main/java/com/gerritforge/gerrit/plugins/account/DeleteAccountCommand.java
index ea2c048..652ad21 100644
--- a/src/main/java/com/gerritforge/gerrit/plugins/account/DeleteAccountCommand.java
+++ b/src/main/java/com/gerritforge/gerrit/plugins/account/DeleteAccountCommand.java
@@ -55,7 +55,8 @@
       DeleteAccount.Input input = new DeleteAccount.Input();
       input.accountName = accountName;
 
-      DeleteAccountResponse resp = (DeleteAccountResponse) deleteAccount.apply(account, input);
+      DeleteAccountResponse resp =
+          (DeleteAccountResponse) deleteAccount.apply(account, input).value();
 
       @SuppressWarnings("resource")
       PrintWriter out = resp.deleted ? stdout : stderr;
diff --git a/src/main/java/com/gerritforge/gerrit/plugins/account/GerritAccountRemover.java b/src/main/java/com/gerritforge/gerrit/plugins/account/GerritAccountRemover.java
index 7f26ae1..a7f4e74 100644
--- a/src/main/java/com/gerritforge/gerrit/plugins/account/GerritAccountRemover.java
+++ b/src/main/java/com/gerritforge/gerrit/plugins/account/GerritAccountRemover.java
@@ -87,7 +87,7 @@
     removeExternalIds(account);
     removeFullName(getAccountResource(accountId));
     if (account.getActive()) {
-      setInactive.deactivate(new Account.Id(accountId));
+      setInactive.deactivate(Account.id(accountId));
     }
   }
 
diff --git a/src/test/java/com/gerritforge/gerrit/plugins/account/test/DeleteAccountCommandTest.java b/src/test/java/com/gerritforge/gerrit/plugins/account/test/DeleteAccountCommandTest.java
index a794336..3755794 100644
--- a/src/test/java/com/gerritforge/gerrit/plugins/account/test/DeleteAccountCommandTest.java
+++ b/src/test/java/com/gerritforge/gerrit/plugins/account/test/DeleteAccountCommandTest.java
@@ -24,6 +24,7 @@
 import com.gerritforge.gerrit.plugins.account.DeleteAccount;
 import com.gerritforge.gerrit.plugins.account.DeleteAccountCommand;
 import com.gerritforge.gerrit.plugins.account.DeleteAccountResponse;
+import com.google.gerrit.extensions.restapi.Response;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AccountResource;
 import java.io.ByteArrayOutputStream;
@@ -53,7 +54,7 @@
         new PrintWriter(new ByteArrayOutputStream()), new PrintWriter(new ByteArrayOutputStream()));
     DeleteAccountResponse resp = new DeleteAccountResponse(true);
     when(deleteAccountMock.apply(same(accountResourceMock), any(DeleteAccount.Input.class)))
-        .thenReturn(resp);
+        .thenReturn(Response.ok(resp));
   }
 
   @Test
diff --git a/src/test/java/com/gerritforge/gerrit/plugins/account/test/DeleteAccountTest.java b/src/test/java/com/gerritforge/gerrit/plugins/account/test/DeleteAccountTest.java
index 0565df9..ab3fb30 100644
--- a/src/test/java/com/gerritforge/gerrit/plugins/account/test/DeleteAccountTest.java
+++ b/src/test/java/com/gerritforge/gerrit/plugins/account/test/DeleteAccountTest.java
@@ -85,7 +85,7 @@
   }
 
   private void mockUserData(int accountId, String accountName) {
-    when(userMock.getAccountId()).thenReturn(new Account.Id(accountId));
+    when(userMock.getAccountId()).thenReturn(Account.id(accountId));
     when(userMock.getName()).thenReturn(accountName);
   }
 }
