Bump to Gerrit 2.16.1

Change-Id: Ic72c17ea4f9611163cdeb6c2439706db7095c56c
diff --git a/github-oauth/pom.xml b/github-oauth/pom.xml
index 37fa4aa..279ac19 100644
--- a/github-oauth/pom.xml
+++ b/github-oauth/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>com.googlesource.gerrit.plugins.github</groupId>
     <artifactId>github-parent</artifactId>
-    <version>2.15.7</version>
+    <version>2.16.1</version>
   </parent>
   <artifactId>github-oauth</artifactId>
   <name>Gerrit Code Review - GitHub OAuth login</name>
diff --git a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/IdentifiedUserGitHubLoginProvider.java b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/IdentifiedUserGitHubLoginProvider.java
index c5c7161..7ad8ac9 100644
--- a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/IdentifiedUserGitHubLoginProvider.java
+++ b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/IdentifiedUserGitHubLoginProvider.java
@@ -55,7 +55,7 @@
   @Override
   public GitHubLogin get() {
     IdentifiedUser currentUser = userProvider.get();
-    return get(currentUser.getUserName());
+    return get(currentUser.getUserName().get());
   }
 
   @Override
@@ -76,7 +76,7 @@
   }
 
   private AccessToken newAccessTokenFromUser(String username) {
-    AccountState account = accountCache.getByUsername(username);
+    AccountState account = accountCache.getByUsername(username).get();
     Collection<ExternalId> externalIds = account.getExternalIds();
     for (ExternalId accountExternalId : externalIds) {
       String key = accountExternalId.key().get();
diff --git a/github-plugin/pom.xml b/github-plugin/pom.xml
index 5f32530..ee8f37d 100644
--- a/github-plugin/pom.xml
+++ b/github-plugin/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <artifactId>github-parent</artifactId>
     <groupId>com.googlesource.gerrit.plugins.github</groupId>
-    <version>2.15.7</version>
+    <version>2.16.1</version>
   </parent>
 
   <artifactId>github-plugin</artifactId>
@@ -158,7 +158,6 @@
       <groupId>org.apache.velocity</groupId>
       <artifactId>velocity</artifactId>
       <version>1.7</version>
-      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.jukito</groupId>
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 dd8f712..7258346 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
@@ -14,57 +14,40 @@
 package com.google.gerrit.server.account;
 
 import com.google.common.base.MoreObjects;
-import com.google.gerrit.extensions.api.accounts.AccountInput;
-import com.google.gerrit.extensions.common.AccountInfo;
-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.TopLevelResource;
-import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
 import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.reviewdb.client.Account.Id;
-import com.google.gerrit.server.account.CreateAccount.Factory;
+import com.google.gerrit.server.Sequences;
+import com.google.gerrit.server.ServerInitiated;
 import com.google.gerrit.server.account.externalids.ExternalId;
-import com.google.gerrit.server.account.externalids.ExternalIdsUpdate;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
-import java.io.IOException;
-import org.apache.http.HttpStatus;
+import com.google.inject.Provider;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
 public class AccountImporter {
-  private final Factory createAccountFactory;
-  private final ExternalIdsUpdate.Server externalIdsUpdateServer;
+  private final Sequences sequences;
+  private final Provider<AccountsUpdate> accountsUpdateProvider;
 
   @Inject
   public AccountImporter(
-      final CreateAccount.Factory createAccountFactory,
-      ExternalIdsUpdate.Server externalIdsUpdateServer) {
-    this.createAccountFactory = createAccountFactory;
-    this.externalIdsUpdateServer = externalIdsUpdateServer;
+      Sequences sequences,
+      @ServerInitiated Provider<AccountsUpdate> accountsUpdateProvider) {
+    this.sequences = sequences;
+    this.accountsUpdateProvider = accountsUpdateProvider;
   }
 
   public Account.Id importAccount(String login, String name, String email)
-      throws IOException, BadRequestException, ResourceConflictException,
-          UnprocessableEntityException, OrmException, ConfigInvalidException {
-    CreateAccount createAccount = createAccountFactory.create(login);
-    AccountInput accountInput = new AccountInput();
-    accountInput.email = email;
-    accountInput.username = login;
-    accountInput.name = MoreObjects.firstNonNull(name, login);
-    Response<AccountInfo> accountResponse =
-        createAccount.apply(TopLevelResource.INSTANCE, accountInput);
-    if (accountResponse.statusCode() != HttpStatus.SC_CREATED) {
-      throw new IOException(
-          "Cannot import GitHub account "
-              + login
-              + ": HTTP Status "
-              + accountResponse.statusCode());
-    }
-    Id accountId = new Account.Id(accountResponse.value()._accountId.intValue());
-    externalIdsUpdateServer
-        .create()
-        .insert(ExternalId.create(ExternalId.SCHEME_GERRIT, login, accountId));
-    return accountId;
+      throws IOException, OrmException, ConfigInvalidException {
+    Account.Id id = new Account.Id(sequences.nextAccountId());
+    List<ExternalId> extIds = new ArrayList<>();
+    extIds.add(ExternalId.createEmail(id, email));
+    extIds.add(ExternalId.create(ExternalId.SCHEME_GERRIT, login, id));
+    AccountState accountUpdate = accountsUpdateProvider.get()
+        .insert("Create GitHub account for " + login, id,
+            u -> u.setFullName(MoreObjects.firstNonNull(name, login)).setPreferredEmail(email).addExternalIds(extIds));
+    return accountUpdate.getAccount().getId();
   }
 }
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java
index 2014f1d..24754a3 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GuiceModule.java
@@ -14,11 +14,11 @@
 
 package com.googlesource.gerrit.plugins.github;
 
-import com.google.gerrit.common.EventListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
 import com.google.gerrit.extensions.restapi.RestApiModule;
 import com.google.gerrit.extensions.webui.TopMenu;
 import com.google.gerrit.server.account.GroupBackend;
+import com.google.gerrit.server.events.EventListener;
 import com.google.gerrit.server.project.ProjectResource;
 import com.google.gson.Gson;
 import com.google.inject.AbstractModule;
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/filters/GitHubOAuthFilter.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/filters/GitHubOAuthFilter.java
index 60f3132..7f62316 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/filters/GitHubOAuthFilter.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/filters/GitHubOAuthFilter.java
@@ -86,7 +86,7 @@
 
   private ExternalId getGitHubExternalId(CurrentUser user) {
     Collection<ExternalId> accountExtIds =
-        accountCache.get(((IdentifiedUser) user).getAccountId()).getExternalIds();
+        accountCache.get(((IdentifiedUser) user).getAccountId()).get().getExternalIds();
     Collection<ExternalId> gitHubExtId =
         Collections2.filter(
             accountExtIds,
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 22387b9..e57b21d 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
@@ -21,13 +21,13 @@
 import com.google.gerrit.extensions.client.InheritableBoolean;
 import com.google.gerrit.extensions.client.SubmitType;
 import com.google.gerrit.reviewdb.client.AccountGroup;
+import com.google.gerrit.reviewdb.client.BooleanProjectConfig;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.client.Project.NameKey;
 import com.google.gerrit.server.account.GroupBackend;
-import com.google.gerrit.server.git.MetaDataUpdate;
-import com.google.gerrit.server.git.MetaDataUpdate.User;
-import com.google.gerrit.server.git.ProjectConfig;
+import com.google.gerrit.server.git.meta.MetaDataUpdate;
 import com.google.gerrit.server.project.ProjectCache;
+import com.google.gerrit.server.project.ProjectConfig;
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.gerrit.server.util.OneOffRequestContext;
 import com.google.inject.Inject;
@@ -49,7 +49,7 @@
   private final String organisation;
   private final String repository;
 
-  private User metaDataUpdateFactory;
+  private MetaDataUpdate.User metaDataUpdateFactory;
   private String description;
   private GroupBackend groupBackend;
   private String username;
@@ -182,10 +182,10 @@
     project.setParentName(config.getBaseProject(getRepository().isPrivate()));
     project.setDescription(description);
     project.setSubmitType(SubmitType.MERGE_IF_NECESSARY);
-    project.setUseContributorAgreements(InheritableBoolean.INHERIT);
-    project.setUseSignedOffBy(InheritableBoolean.INHERIT);
-    project.setUseContentMerge(InheritableBoolean.INHERIT);
-    project.setRequireChangeID(InheritableBoolean.INHERIT);
+    project.setBooleanConfig(BooleanProjectConfig.USE_CONTRIBUTOR_AGREEMENTS, InheritableBoolean.INHERIT);
+    project.setBooleanConfig(BooleanProjectConfig.USE_SIGNED_OFF_BY, InheritableBoolean.INHERIT);
+    project.setBooleanConfig(BooleanProjectConfig.USE_CONTENT_MERGE, InheritableBoolean.INHERIT);
+    project.setBooleanConfig(BooleanProjectConfig.REQUIRE_CHANGE_ID, InheritableBoolean.INHERIT);
   }
 
   @Override
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitImporter.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitImporter.java
index f36257d..0176091 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitImporter.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/GitImporter.java
@@ -47,7 +47,7 @@
     try {
       GitCloneStep cloneStep = cloneFactory.create(organisation, repository);
       CreateProjectStep projectStep =
-          projectFactory.create(organisation, repository, description, user.getUserName());
+          projectFactory.create(organisation, repository, description, user.getUserName().get());
       ReplicateProjectStep replicateStep = replicateFactory.create(organisation, repository);
       GitImportJob gitCloneJob =
           new GitImportJob(idx, organisation, repository, cloneStep, projectStep, replicateStep);
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestCreateChange.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestCreateChange.java
index 9ac3324..050d439 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestCreateChange.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/git/PullRequestCreateChange.java
@@ -14,13 +14,9 @@
 
 package com.googlesource.gerrit.plugins.github.git;
 
-import static com.google.gerrit.reviewdb.client.RefNames.REFS_HEADS;
-
-import com.google.gerrit.common.TimeUtil;
 import com.google.gerrit.common.errors.EmailException;
 import com.google.gerrit.extensions.restapi.RestApiException;
 import com.google.gerrit.index.query.QueryParseException;
-import com.google.gerrit.index.query.QueryProcessor;
 import com.google.gerrit.index.query.QueryResult;
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Branch;
@@ -33,25 +29,21 @@
 import com.google.gerrit.server.IdentifiedUser.GenericFactory;
 import com.google.gerrit.server.change.ChangeInserter;
 import com.google.gerrit.server.change.PatchSetInserter;
-import com.google.gerrit.server.git.IntegrationException;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.project.InvalidChangeOperationException;
 import com.google.gerrit.server.project.NoSuchChangeException;
 import com.google.gerrit.server.project.NoSuchProjectException;
-import com.google.gerrit.server.project.ProjectControl;
-import com.google.gerrit.server.project.RefControl;
 import com.google.gerrit.server.query.change.ChangeData;
 import com.google.gerrit.server.query.change.ChangeQueryBuilder;
 import com.google.gerrit.server.query.change.ChangeQueryProcessor;
 import com.google.gerrit.server.query.change.InternalChangeQuery;
+import com.google.gerrit.server.submit.IntegrationException;
 import com.google.gerrit.server.update.BatchUpdate;
 import com.google.gerrit.server.update.UpdateException;
+import com.google.gerrit.server.util.time.TimeUtil;
 import com.google.gwtorm.server.OrmException;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.lib.ObjectId;
@@ -64,13 +56,18 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+
+import static com.google.gerrit.reviewdb.client.RefNames.REFS_HEADS;
+
 public class PullRequestCreateChange {
   private static final Logger LOG = LoggerFactory.getLogger(PullRequestCreateChange.class);
   private static final FooterKey CHANGE_ID = new FooterKey("Change-Id");
 
   private final ChangeInserter.Factory changeInserterFactory;
   private final PatchSetInserter.Factory patchSetInserterFactory;
-  private final ProjectControl.Factory projectControlFactory;
   private final GenericFactory userFactory;
   private final Provider<InternalChangeQuery> queryProvider;
   private final BatchUpdate.Factory updateFactory;
@@ -81,7 +78,6 @@
   PullRequestCreateChange(
       ChangeInserter.Factory changeInserterFactory,
       PatchSetInserter.Factory patchSetInserterFactory,
-      ProjectControl.Factory projectControlFactory,
       IdentifiedUser.GenericFactory userFactory,
       Provider<InternalChangeQuery> queryProvider,
       BatchUpdate.Factory batchUpdateFactory,
@@ -89,7 +85,6 @@
       ChangeQueryBuilder changeQuery) {
     this.changeInserterFactory = changeInserterFactory;
     this.patchSetInserterFactory = patchSetInserterFactory;
-    this.projectControlFactory = projectControlFactory;
     this.userFactory = userFactory;
     this.queryProvider = queryProvider;
     this.updateFactory = batchUpdateFactory;
@@ -146,9 +141,6 @@
       throw new InvalidChangeOperationException("Branch " + destinationBranch + " does not exist.");
     }
 
-    RefControl refControl =
-        projectControlFactory.controlFor(project.getNameKey()).controlForRef(destinationBranch);
-
     String pullRequestSha1 = pullRequestCommit.getId().getName();
     List<ChangeData> existingChanges = queryChangesForSha1(pullRequestSha1);
     if (!existingChanges.isEmpty()) {
@@ -217,7 +209,7 @@
         destRef,
         pullRequestOwner,
         pullRequestCommit,
-        refControl,
+        destinationBranch,
         pullRequestMesage,
         topic);
   }
@@ -263,7 +255,7 @@
       Ref destRef,
       Account.Id pullRequestOwner,
       RevCommit pullRequestCommit,
-      RefControl refControl,
+      String refName,
       String pullRequestMessage,
       String topic)
       throws OrmException, UpdateException, RestApiException, IOException {
@@ -278,7 +270,7 @@
       change.setTopic(topic);
     }
     ChangeInserter ins =
-        changeInserterFactory.create(change.getId(), pullRequestCommit, refControl.getRefName());
+        changeInserterFactory.create(change.getId(), pullRequestCommit, refName);
 
     ins.setMessage(pullRequestMessage);
     bu.insertChange(ins);
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 601e438..e54b2eb 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
@@ -225,7 +225,7 @@
 
   private Optional<ExternalId> externalIdByScheme(String scheme, String id) {
     try {
-      return Optional.ofNullable(externalIds.get(ExternalId.Key.create(scheme, id)));
+      return externalIds.get(ExternalId.Key.create(scheme, id));
     } catch (IOException | ConfigInvalidException e) {
       LOG.error("Unable to get external id for " + scheme + ":" + id, e);
       return Optional.empty();
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupBackend.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupBackend.java
index c2a0faa..0a041c2 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupBackend.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupBackend.java
@@ -112,7 +112,7 @@
 
   @Override
   public GroupMembership membershipsOf(IdentifiedUser user) {
-    String username = user.getUserName();
+    String username = user.getUserName().orElse(null);
     if (Strings.isNullOrEmpty(username)) {
       return GroupMembership.EMPTY;
     }
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupsCache.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupsCache.java
index d0bf3ea..509c245 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupsCache.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/group/GitHubGroupsCache.java
@@ -14,8 +14,6 @@
 
 package com.googlesource.gerrit.plugins.github.group;
 
-import static java.util.concurrent.TimeUnit.MINUTES;
-
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableSet;
@@ -30,16 +28,21 @@
 import com.googlesource.gerrit.plugins.github.groups.OrganizationStructure;
 import com.googlesource.gerrit.plugins.github.oauth.GitHubLogin;
 import com.googlesource.gerrit.plugins.github.oauth.UserScopedProvider;
+import org.kohsuke.github.GHTeam;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
-import org.kohsuke.github.GHTeam;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
+import static java.time.temporal.ChronoUnit.MINUTES;
 
 @Singleton
 public class GitHubGroupsCache {
@@ -106,7 +109,7 @@
       @Override
       protected void configure() {
         persist(ORGS_CACHE_NAME, String.class, OrganizationStructure.class)
-            .expireAfterWrite(GROUPS_CACHE_TTL_MINS, MINUTES)
+            .expireAfterWrite(Duration.of(GROUPS_CACHE_TTL_MINS, MINUTES))
             .loader(OrganisationLoader.class);
         bind(GitHubGroupsCache.class);
       }
@@ -134,7 +137,7 @@
   }
 
   Set<String> getOrganizationsForCurrentUser() throws ExecutionException {
-    return orgTeamsByUsername.get(userProvider.get().getUserName()).keySet();
+    return orgTeamsByUsername.get(userProvider.get().getUserName().get()).keySet();
   }
 
   Set<String> getTeamsForUser(String organizationName, String username) {
@@ -155,7 +158,7 @@
   }
 
   Set<String> getTeamsForCurrentUser(String organizationName) {
-    return getTeamsForUser(organizationName, userProvider.get().getUserName());
+    return getTeamsForUser(organizationName, userProvider.get().getUserName().get());
   }
 
   public Set<UUID> getGroupsForUser(String username) {
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/Destination.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/Destination.java
index b1b2df3..08f6368 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/Destination.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/Destination.java
@@ -25,24 +25,20 @@
 import com.google.gerrit.server.account.GroupBackend;
 import com.google.gerrit.server.account.GroupBackends;
 import com.google.gerrit.server.account.ListGroupMembership;
-import com.google.gerrit.server.project.NoSuchProjectException;
-import com.google.gerrit.server.project.ProjectControl;
-import com.google.inject.Injector;
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.util.List;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.transport.RemoteConfig;
 import org.eclipse.jgit.transport.URIish;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.List;
+
 public class Destination {
   private final RemoteConfig remote;
-  private final ProjectControl.Factory projectControlFactory;
   private final String remoteNameStyle;
   private final CurrentUser remoteUser;
 
   Destination(
-      final Injector injector,
       final RemoteConfig rc,
       final Config cfg,
       final RemoteSiteUser.Factory replicationUserFactory,
@@ -69,12 +65,6 @@
     } else {
       remoteUser = pluginUser;
     }
-
-    projectControlFactory = injector.getInstance(ProjectControl.Factory.class);
-  }
-
-  ProjectControl controlFor(Project.NameKey project) throws NoSuchProjectException {
-    return projectControlFactory.controlFor(project);
   }
 
   List<URIish> getURIs(Project.NameKey project, String urlMatch) {
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/GitHubDestinations.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/GitHubDestinations.java
index 585244b..af644fe 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/GitHubDestinations.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/GitHubDestinations.java
@@ -131,7 +131,7 @@
             new RefSpec().setSourceDestination("refs/*", "refs/*").setForceUpdate(true));
       }
 
-      dest.add(new Destination(injector, c, cfg, replicationUserFactory, pluginUser, groupBackend));
+      dest.add(new Destination(c, cfg, replicationUserFactory, pluginUser, groupBackend));
     }
     return dest.build();
   }
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/RemoteSiteUser.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/RemoteSiteUser.java
index 26def83..f80af85 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/RemoteSiteUser.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/RemoteSiteUser.java
@@ -35,4 +35,9 @@
   public GroupMembership getEffectiveGroups() {
     return effectiveGroups;
   }
+
+  @Override
+  public Object getCacheKey() {
+    return effectiveGroups.getKnownGroups();
+  }
 }
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusListener.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusListener.java
index 89fe432..b31cec8 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusListener.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/replication/ReplicationStatusListener.java
@@ -14,9 +14,9 @@
 
 package com.googlesource.gerrit.plugins.github.replication;
 
-import com.google.gerrit.common.EventListener;
 import com.google.gerrit.reviewdb.client.Project.NameKey;
 import com.google.gerrit.server.events.Event;
+import com.google.gerrit.server.events.EventListener;
 import com.google.gerrit.server.events.RefEvent;
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/velocity/PluginVelocityRuntimeProvider.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/velocity/PluginVelocityRuntimeProvider.java
index 7f5ed56..0a1fa24 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/velocity/PluginVelocityRuntimeProvider.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/velocity/PluginVelocityRuntimeProvider.java
@@ -15,18 +15,19 @@
 
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.server.config.SitePaths;
-import com.google.gerrit.server.mail.send.VelocityRuntimeProvider.Slf4jLogChute;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.ProvisionException;
 import com.google.inject.Singleton;
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.apache.velocity.runtime.RuntimeInstance;
+import org.apache.velocity.runtime.log.Log4JLogChute;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+import org.apache.velocity.runtime.resource.loader.JarResourceLoader;
+
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.Properties;
-import org.apache.velocity.runtime.RuntimeConstants;
-import org.apache.velocity.runtime.RuntimeInstance;
-import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
-import org.apache.velocity.runtime.resource.loader.JarResourceLoader;
 
 @Singleton
 public class PluginVelocityRuntimeProvider implements Provider<RuntimeInstance> {
@@ -51,7 +52,7 @@
 
     Properties p = new Properties();
     p.setProperty(RuntimeConstants.VM_PERM_INLINE_LOCAL, "true");
-    p.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, Slf4jLogChute.class.getName());
+    p.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS, Log4JLogChute.class.getName());
     p.setProperty(RuntimeConstants.RUNTIME_REFERENCES_STRICT, "true");
     p.setProperty("runtime.log.logsystem.log4j.category", "velocity");
 
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/velocity/VelocityStaticServlet.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/velocity/VelocityStaticServlet.java
index 46119af..3359065 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/velocity/VelocityStaticServlet.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/velocity/VelocityStaticServlet.java
@@ -15,7 +15,7 @@
 package com.googlesource.gerrit.plugins.github.velocity;
 
 import com.google.common.collect.Maps;
-import com.google.gwtexpui.server.CacheHeaders;
+import com.google.gerrit.util.http.CacheHeaders;
 import com.google.gwtjsonrpc.server.RPCServletUtils;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java
index 1ede315..cc46ad0 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/wizard/AccountController.java
@@ -16,6 +16,8 @@
 import com.google.common.base.Function;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
+import com.google.gerrit.extensions.api.accounts.SshKeyInput;
+import com.google.gerrit.extensions.common.NameInput;
 import com.google.gerrit.extensions.common.SshKeyInfo;
 import com.google.gerrit.extensions.restapi.RawInput;
 import com.google.gerrit.reviewdb.client.Account.Id;
@@ -23,12 +25,12 @@
 import com.google.gerrit.server.account.AccountCache;
 import com.google.gerrit.server.account.AccountManager;
 import com.google.gerrit.server.account.AccountResource;
-import com.google.gerrit.server.account.AddSshKey;
 import com.google.gerrit.server.account.AuthRequest;
 import com.google.gerrit.server.account.AuthResult;
-import com.google.gerrit.server.account.GetSshKeys;
-import com.google.gerrit.server.account.PutName;
-import com.google.gerrit.server.account.PutPreferred;
+import com.google.gerrit.server.restapi.account.AddSshKey;
+import com.google.gerrit.server.restapi.account.GetSshKeys;
+import com.google.gerrit.server.restapi.account.PutName;
+import com.google.gerrit.server.restapi.account.PutPreferred;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.plugins.github.oauth.GitHubLogin;
 import java.io.ByteArrayInputStream;
@@ -102,7 +104,7 @@
       log.debug("Account {} linked to email {}: result = {}", accountId, email, result);
 
       putPreferred.apply(new AccountResource.Email(user, email), null);
-      PutName.Input nameInput = new PutName.Input();
+      NameInput nameInput = new NameInput();
       nameInput.name = fullName;
       putName.apply(user, nameInput);
       log.debug(
@@ -160,7 +162,7 @@
       throws IOException {
     AccountResource res = new AccountResource(user);
     final ByteArrayInputStream keyIs = new ByteArrayInputStream(sshKeyWithLabel.getBytes());
-    AddSshKey.Input key = new AddSshKey.Input();
+    SshKeyInput key = new SshKeyInput();
     key.raw =
         new RawInput() {
 
diff --git a/pom.xml b/pom.xml
index c3fd703..f7092db 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.googlesource.gerrit.plugins.github</groupId>
   <artifactId>github-parent</artifactId>
-  <version>2.15.7</version>
+  <version>2.16.1</version>
   <name>Gerrit Code Review - GitHub integration</name>
   <url>http://www.gerritforge.com</url>
   <packaging>pom</packaging>