diff --git a/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java b/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java
index 57cd1a3..25ff9e2 100644
--- a/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java
+++ b/github-plugin/src/main/java/com/google/gerrit/server/account/AccountImporter.java
@@ -48,26 +48,27 @@
   public Account.Id importAccount(String login, String name, String email)
       throws IOException, BadRequestException, ResourceConflictException,
       UnprocessableEntityException, OrmException {
-    ReviewDb db = schema.get();
-    CreateAccount createAccount = createAccountFactory.create(login);
-    CreateAccount.Input accountInput = new CreateAccount.Input();
-    accountInput.email = email;
-    accountInput.username = login;
-    accountInput.name = MoreObjects.firstNonNull(name, login);
-    Response<AccountInfo> accountResponse =
-        (Response<AccountInfo>) createAccount.apply(TopLevelResource.INSTANCE,
-            accountInput);
-    if (accountResponse.statusCode() == HttpStatus.SC_CREATED) {
-      Id accountId = new Account.Id(accountResponse.value()._accountId);
-      db.accountExternalIds().insert(
-          Arrays
-              .asList(new AccountExternalId(accountId,
-                  new AccountExternalId.Key(AccountExternalId.SCHEME_GERRIT,
-                      login))));
-      return accountId;
-    } else {
-      throw new IOException("Cannot import GitHub account " + login
-          + ": HTTP Status " + accountResponse.statusCode());
+    try (ReviewDb db = schema.get()) {
+      CreateAccount createAccount = createAccountFactory.create(login);
+      CreateAccount.Input accountInput = new CreateAccount.Input();
+      accountInput.email = email;
+      accountInput.username = login;
+      accountInput.name = MoreObjects.firstNonNull(name, login);
+      Response<AccountInfo> accountResponse =
+          (Response<AccountInfo>) createAccount.apply(TopLevelResource.INSTANCE,
+              accountInput);
+      if (accountResponse.statusCode() == HttpStatus.SC_CREATED) {
+        Id accountId = new Account.Id(accountResponse.value()._accountId);
+        db.accountExternalIds().insert(
+            Arrays
+                .asList(new AccountExternalId(accountId,
+                    new AccountExternalId.Key(AccountExternalId.SCHEME_GERRIT,
+                        login))));
+        return accountId;
+      } else {
+        throw new IOException("Cannot import GitHub account " + login
+            + ": HTTP Status " + accountResponse.statusCode());
+      }
     }
   }
 }
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/PullRequestListController.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/PullRequestListController.java
index 8449edb..b0abb16 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/PullRequestListController.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/PullRequestListController.java
@@ -142,12 +142,10 @@
   private Map<String, List<GHPullRequest>> getPullRequests(GitHubLogin login,
       GHPerson ghOwner, Iterable<NameKey> repos) throws IOException {
     int numPullRequests = 0;
-    ReviewDb db = schema.get();
     Map<String, List<GHPullRequest>> allPullRequests = Maps.newHashMap();
-    try {
+    try (ReviewDb db = schema.get()) {
       for (NameKey gerritRepoName : repos) {
-        Repository gitRepo = repoMgr.openRepository(gerritRepoName);
-        try {
+        try (Repository gitRepo = repoMgr.openRepository(gerritRepoName)) {
           String ghRepoName = gerritRepoName.get().split("/")[1];
           Optional<GHRepository> githubRepo =
               getGHRepository(login, gerritRepoName);
@@ -156,13 +154,9 @@
                 collectPullRequestsFromGitHubRepository(numPullRequests, db,
                     allPullRequests, gitRepo, ghRepoName, githubRepo);
           }
-        } finally {
-          gitRepo.close();
         }
       }
       return allPullRequests;
-    } finally {
-      db.close();
     }
   }
 
