diff --git a/build.sbt b/build.sbt
index 62635ef..3cc7a6b 100644
--- a/build.sbt
+++ b/build.sbt
@@ -6,7 +6,7 @@
 
 scalaVersion := "2.11.8"
 
-val gerritVersion = "2.15.1"
+val gerritVersion = "2.15.2"
 
 val scalatraV = "2.4.+"
 
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/GerritFacade.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/GerritFacade.scala
index 1bb9b0c..7f4a9f8 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/support/GerritFacade.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/GerritFacade.scala
@@ -17,12 +17,11 @@
 package com.googlesource.gerrit.plugins.support
 
 import com.google.gerrit.extensions.restapi.TopLevelResource
-import com.google.gerrit.server.account.CapabilityControl
+import com.google.gerrit.server.account.AccountLimits
 import com.google.gerrit.server.plugins.{ListPlugins, PluginsCollection}
 import com.google.gson.JsonElement
 import com.google.inject.{ImplementedBy, Inject}
 import com.googlesource.gerrit.plugins.support.latest.LatestCapabilityControl
-import com.googlesource.gerrit.plugins.support.legacy.LegacyCapabilityControl
 
 import scala.util.{Failure, Success, Try}
 
@@ -30,11 +29,10 @@
 
   class PluginName(val value: String) extends AnyRef
 
-  implicit class PimpedCapabilityControl(val cc: CapabilityControl) extends AnyVal {
+  implicit class PimpedCapabilityControl(val cc: AccountLimits) extends AnyVal {
 
     def canDo(operation: String)(implicit pluginName: PluginName) =
       LatestCapabilityControl(cc).canPerform(operation)
-        .orElse(LegacyCapabilityControl(cc).canPerform(operation))
         .get
   }
 }
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/GerritSupportServlet.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/GerritSupportServlet.scala
index 60bc037..e223db6 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/support/GerritSupportServlet.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/GerritSupportServlet.scala
@@ -20,6 +20,7 @@
 
 import com.google.gerrit.extensions.annotations.{PluginName => GerritPlugiName}
 import com.google.gerrit.server.CurrentUser
+import com.google.gerrit.server.account.AccountLimits
 import com.google.inject.{Inject, Provider, Singleton}
 import com.googlesource.gerrit.plugins.support.GerritFacade._
 import com.googlesource.gerrit.plugins.support.latest.CollectServerDataCapability._
@@ -36,6 +37,7 @@
                                      bundleFactory: SupportBundleFile,
                                      mimeDetector: ExtensionMimeDetector,
                                      currentUserProvider: Provider[CurrentUser],
+                                     accountLimitsFactory: AccountLimits.Factory,
                                      @GerritPlugiName gerritPluginName: String)
   extends ScalatraServlet with Mimes {
   val log = LoggerFactory.getLogger(classOf[GerritSupportServlet])
@@ -75,7 +77,7 @@
   private def requireAdministrateServerPermissions(block: => ActionResult) = {
     val currentUser = currentUserProvider.get
     currentUser match {
-      case user if user.isIdentifiedUser && user.getCapabilities.canDo(COLLECT_SERVER_DATA) => block
+      case user if user.isIdentifiedUser && accountLimitsFactory.create(user).canDo(COLLECT_SERVER_DATA) => block
       case _ => Forbidden("NOT ALLOWED to collect server data")
     }
   }
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/latest/LatestCapabilityControl.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/latest/LatestCapabilityControl.scala
index b2430ca..71d20cd 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/support/latest/LatestCapabilityControl.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/latest/LatestCapabilityControl.scala
@@ -16,13 +16,13 @@
 
 package com.googlesource.gerrit.plugins.support.latest
 
-import com.google.gerrit.server.account.CapabilityControl
+import com.google.gerrit.server.account.AccountLimits
 import com.googlesource.gerrit.plugins.support.GerritFacade.PluginName
 
 import scala.util.Try
 import com.googlesource.gerrit.plugins.support.TryAll
 
-class LatestCapabilityControl(val capabilityControl: CapabilityControl)(implicit pluginName: PluginName) {
+class LatestCapabilityControl(val capabilityControl: AccountLimits)(implicit pluginName: PluginName) {
 
   import LatestCapabilityControl._
 
@@ -52,8 +52,8 @@
   }.flatten
 
   lazy val checkPermissionMethod = TryAll {
-    GlobalOrPluginPermissionClass.map(classOf[CapabilityControl].getMethod("doCanForDefaultPermissionBackend", _))
+    GlobalOrPluginPermissionClass.map(classOf[AccountLimits].getMethod("doCanForDefaultPermissionBackend", _))
   }.flatten
 
-  def apply(cc: CapabilityControl)(implicit pluginName: PluginName) = new LatestCapabilityControl(cc)
+  def apply(cc: AccountLimits)(implicit pluginName: PluginName) = new LatestCapabilityControl(cc)
 }
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/legacy/LegacyCapabilityControl.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/legacy/LegacyCapabilityControl.scala
deleted file mode 100644
index b00e988..0000000
--- a/src/main/scala/com/googlesource/gerrit/plugins/support/legacy/LegacyCapabilityControl.scala
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.googlesource.gerrit.plugins.support.legacy
-
-import com.google.gerrit.server.account.CapabilityControl
-import com.googlesource.gerrit.plugins.support.GerritFacade.PluginName
-import com.googlesource.gerrit.plugins.support.TryAll
-
-import scala.util.Try
-
-class LegacyCapabilityControl(val capabilityControl: CapabilityControl)(implicit pluginName: PluginName) {
-
-  import LegacyCapabilityControl._
-
-  def canPerform(operation: String): Try[Boolean] = TryAll {
-    canPerformMethod.map(_.invoke(capabilityControl, s"${pluginName.value}-$operation").asInstanceOf[Boolean])
-  }.flatten
-}
-
-object LegacyCapabilityControl {
-  lazy val canPerformMethod = TryAll {
-    classOf[CapabilityControl].getMethod("canPerform", classOf[String])
-  }
-
-  def apply(cc: CapabilityControl)(implicit pluginName: PluginName) = new LegacyCapabilityControl(cc)
-}
