diff --git a/lib/gerrit/BUCK b/lib/gerrit/BUCK
index 7650a03..3702f04 100644
--- a/lib/gerrit/BUCK
+++ b/lib/gerrit/BUCK
@@ -1,19 +1,12 @@
 include_defs('//bucklets/maven_jar.bucklet')
 
-# TODO(davido): For now the pending changes in gerrit must be
-# pulled and plugin API must be deployed in local maven repository:
-# buck build api_install
-VER = '2.10-SNAPSHOT'
-REPO = MAVEN_LOCAL
-
-# TODO(davido): Uncomment, when pending changes are merged upstream
-#VER = '2.10.2'
-#REPO = MAVEN_CENTRAL
+VER = '2.10.2'
+REPO = MAVEN_CENTRAL
 
 maven_jar(
   name = 'plugin-api',
   id = 'com.google.gerrit:gerrit-plugin-api:' + VER,
-  sha1 = '686c942bc41cd8f1c9adcdc54a94bcf3e862f4af',
+  sha1 = '4086f90b4d7be9101e84e8e3e76262496d2e12fe',
   license = 'Apache2.0',
   attach_source = False,
   repository = REPO,
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java
index e55b2a2..02f623e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/GitHubOAuthService.java
@@ -69,11 +69,6 @@
   }
 
   @Override
-  public OAuthToken getRequestToken() {
-    throw new IllegalStateException();
-  }
-
-  @Override
   public OAuthUserInfo getUserInfo(OAuthToken token) throws IOException {
     OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
     Token t =
@@ -105,26 +100,17 @@
   }
 
   @Override
-  public OAuthToken getAccessToken(OAuthToken rt,
-      OAuthVerifier rv) {
-    Token ti = null;
-    if (rt != null) {
-      ti = new Token(rt.getToken(), rt.getSecret(), rt.getRaw());
-    }
+  public OAuthToken getAccessToken(OAuthVerifier rv) {
     Verifier vi = new Verifier(rv.getValue());
-    Token to = service.getAccessToken(ti, vi);
+    Token to = service.getAccessToken(null, vi);
     OAuthToken result = new OAuthToken(to.getToken(),
         to.getSecret(), to.getRawResponse());
     return result;
   }
 
   @Override
-  public String getAuthorizationUrl(OAuthToken rt) {
-    Token ti = null;
-    if (rt != null) {
-      ti = new Token(rt.getToken(), rt.getSecret(), rt.getRaw());
-    }
-    return service.getAuthorizationUrl(ti);
+  public String getAuthorizationUrl() {
+    return service.getAuthorizationUrl(null);
   }
 
   @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java
index 65f8541..85a812a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/oauth/GoogleOAuthService.java
@@ -92,11 +92,6 @@
   }
 
   @Override
-  public OAuthToken getRequestToken() {
-    throw new IllegalStateException("Not supported workflow in OAuth 2.0");
-  }
-
-  @Override
   public OAuthUserInfo getUserInfo(OAuthToken token) throws IOException {
     OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
     Token t =
@@ -183,27 +178,17 @@
   }
 
   @Override
-  public OAuthToken getAccessToken(OAuthToken rt,
-      OAuthVerifier rv) {
-    Token ti = null;
-    if (rt != null) {
-      ti = new Token(rt.getToken(), rt.getSecret(), rt.getRaw());
-    }
+  public OAuthToken getAccessToken(OAuthVerifier rv) {
     Verifier vi = new Verifier(rv.getValue());
-    Token to = service.getAccessToken(ti, vi);
+    Token to = service.getAccessToken(null, vi);
     OAuthToken result = new OAuthToken(to.getToken(),
         to.getSecret(), to.getRawResponse());
      return result;
   }
 
   @Override
-  public String getAuthorizationUrl(OAuthToken rt) {
-    Token ti = null;
-    if (rt != null) {
-      ti = new Token(rt.getToken(), rt.getSecret(), rt.getRaw());
-    }
-
-    String url = service.getAuthorizationUrl(ti);
+  public String getAuthorizationUrl() {
+    String url = service.getAuthorizationUrl(null);
     try {
       if (linkToExistingOpenIDAccounts) {
         url += "&openid.realm=" + URLEncoder.encode(canonicalWebUrl,
