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 648afbb..00d4420 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
@@ -57,7 +57,8 @@
       Response<AccountInfo> accountResponse =
           createAccount.apply(TopLevelResource.INSTANCE, accountInput);
       if (accountResponse.statusCode() == HttpStatus.SC_CREATED) {
-        Id accountId = new Account.Id(accountResponse.value()._accountId);
+        Id accountId = new Account.Id(
+            accountResponse.value()._accountId.intValue());
         db.accountExternalIds().insert(
             Arrays
                 .asList(new AccountExternalId(accountId,
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/BatchImporter.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/BatchImporter.java
index b2bc91d..21dfb37 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/BatchImporter.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/BatchImporter.java
@@ -45,7 +45,7 @@
   }
 
   public synchronized void schedule(int idx, GitJob pullRequestImportJob) {
-    jobs.put(idx, pullRequestImportJob);
+    jobs.put(new Integer(idx), pullRequestImportJob);
     executor.exec(pullRequestImportJob);
   }
 
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/CreateProjectStep.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/CreateProjectStep.java
index c409da7..d1d2fc2 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/CreateProjectStep.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/CreateProjectStep.java
@@ -94,14 +94,14 @@
         Permission.REMOVE_REVIEWER, Permission.SUBMIT, Permission.REBASE);
 
     PermissionRule reviewRange = new PermissionRule(getMyGroup());
-    reviewRange.setMin(-2);
-    reviewRange.setMax(+2);
+    reviewRange.setMin(new Integer(-2));
+    reviewRange.setMax(new Integer(+2));
     addPermission(CODE_REVIEW_REFS, Permission.LABEL + CODE_REVIEW_LABEL,
         reviewRange);
 
     PermissionRule verifiedRange = new PermissionRule(getMyGroup());
-    verifiedRange.setMin(-1);
-    verifiedRange.setMax(+1);
+    verifiedRange.setMin(new Integer(-1));
+    verifiedRange.setMax(new Integer(+1));
     addPermission(CODE_REVIEW_REFS, Permission.LABEL + VERIFIED_LABEL,
         verifiedRange);
 
@@ -109,13 +109,13 @@
         Permission.PUSH_MERGE);
 
     PermissionRule forcePush = new PermissionRule(getMyGroup());
-    forcePush.setForce(true);
+    forcePush.setForce(Boolean.TRUE);
     addPermission(AccessSection.HEADS, Permission.PUSH, forcePush);
 
     addPermissions(TAGS_REFS, Permission.PUSH_TAG, Permission.PUSH_SIGNED_TAG);
 
     PermissionRule removeTag = new PermissionRule(getMyGroup());
-    removeTag.setForce(true);
+    removeTag.setForce(Boolean.TRUE);
     addPermission(TAGS_REFS, Permission.PUSH, removeTag);
   }
   
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java
index 7fe85d4..863eb59 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestImportJob.java
@@ -178,7 +178,7 @@
             createChange.addCommitToChange(db, project, gitRepo,
                 destinationBranch, pullRequestOwner, revCommit,
                 getChangeMessage(pr),
-                String.format(TOPIC_FORMAT, pr.getNumber()));
+                String.format(TOPIC_FORMAT, new Integer(pr.getNumber())));
         if (changeId != null) {
           prChanges.add(changeId);
         }
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/notification/PullRequestHandler.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/notification/PullRequestHandler.java
index f0567a0..a0388a2 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/notification/PullRequestHandler.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/notification/PullRequestHandler.java
@@ -50,12 +50,12 @@
     String action = payload.getAction();
     if (action.equals("opened") || action.equals("synchronize")) {
       GHRepository repository = payload.getRepository();
-      int prNumber = payload.getNumber();
+      Integer prNumber = new Integer(payload.getNumber());
       PullRequestImporter prImporter = prImportProvider.get();
       String organization = repository.getOwnerName();
       String name = repository.getName();
       logger.info("Importing {}/{}#{}", organization, name, prNumber);
-      prImporter.importPullRequest(0, organization, name, prNumber,
+      prImporter.importPullRequest(0, organization, name, prNumber.intValue(),
           PullRequestImportType.Commits);
       logger.info("Imported {}/{}#{}", organization, name, prNumber);
       return true;
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 8acf8c5..813094e 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
@@ -103,7 +103,7 @@
           JsonArray prArray = new JsonArray();
           for (GHPullRequest pr : repoEntry.getValue()) {
             JsonObject prObj = new JsonObject();
-            prObj.add("id", new JsonPrimitive(pr.getNumber()));
+            prObj.add("id", new JsonPrimitive(new Integer(pr.getNumber())));
             prObj.add("title", new JsonPrimitive(pr.getTitle()));
             prObj.add("body", new JsonPrimitive(pr.getBody()));
             prObj.add("author", new JsonPrimitive(pr.getUser() == null ? "" : pr
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/RepositoriesListController.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/RepositoriesListController.java
index fb79632..8e1de4c 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/RepositoriesListController.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/RepositoriesListController.java
@@ -77,7 +77,7 @@
               new JsonPrimitive(Strings.nullToEmpty(ghRepository
                   .getDescription())));
           repository
-              .add("private", new JsonPrimitive(ghRepository.isPrivate()));
+              .add("private", new JsonPrimitive(new Boolean(ghRepository.isPrivate())));
           jsonRepos.add(repository);
           numRepos++;
         }
