diff --git a/build.sbt b/build.sbt
index 62635ef..e3bfe8e 100644
--- a/build.sbt
+++ b/build.sbt
@@ -6,7 +6,7 @@
 
 scalaVersion := "2.11.8"
 
-val gerritVersion = "2.15.1"
+val gerritVersion = "2.14.10"
 
 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..bd5f7f3 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/support/GerritFacade.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/GerritFacade.scala
@@ -21,7 +21,6 @@
 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}
@@ -32,10 +31,7 @@
 
   implicit class PimpedCapabilityControl(val cc: CapabilityControl) extends AnyVal {
 
-    def canDo(operation: String)(implicit pluginName: PluginName) =
-      LatestCapabilityControl(cc).canPerform(operation)
-        .orElse(LegacyCapabilityControl(cc).canPerform(operation))
-        .get
+    def canDo(operation: String)(implicit pluginName: PluginName) = LegacyCapabilityControl(cc).canPerform(operation)
   }
 }
 
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..9bca5e2 100644
--- a/src/main/scala/com/googlesource/gerrit/plugins/support/GerritSupportServlet.scala
+++ b/src/main/scala/com/googlesource/gerrit/plugins/support/GerritSupportServlet.scala
@@ -75,7 +75,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 && user.getCapabilities.canDo(COLLECT_SERVER_DATA).getOrElse(false) => block
       case _ => Forbidden("NOT ALLOWED to collect server data")
     }
   }
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/support/latest/CollectServerDataPermission.scala b/src/main/scala/com/googlesource/gerrit/plugins/support/latest/CollectServerDataPermission.scala
deleted file mode 100644
index 8d83978..0000000
--- a/src/main/scala/com/googlesource/gerrit/plugins/support/latest/CollectServerDataPermission.scala
+++ /dev/null
@@ -1,23 +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.latest
-
-import com.google.gerrit.extensions.api.access.PluginPermission
-
-class CollectServerDataPermission(pluginName: String) extends
-  PluginPermission(pluginName, CollectServerDataCapability.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
deleted file mode 100644
index b2430ca..0000000
--- a/src/main/scala/com/googlesource/gerrit/plugins/support/latest/LatestCapabilityControl.scala
+++ /dev/null
@@ -1,59 +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.latest
-
-import com.google.gerrit.server.account.CapabilityControl
-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) {
-
-  import LatestCapabilityControl._
-
-  def canPerform(operation: String): Try[Boolean] = TryAll {
-    for (
-      permissionConstructor <- CollectServerDataPermissionConstructor;
-      checkMedhod <- checkPermissionMethod
-    ) yield {
-      val permission = permissionConstructor.newInstance(pluginName.value).asInstanceOf[Object]
-      val result: Object = checkMedhod.invoke(capabilityControl, permission)
-      result.asInstanceOf[Boolean]
-    }
-  }.flatten
-}
-
-object LatestCapabilityControl {
-  lazy val GlobalOrPluginPermissionClass = TryAll {
-    Class.forName("com.google.gerrit.extensions.api.access.GlobalOrPluginPermission")
-  }
-
-  lazy val CollectServerDataPermissionClass = TryAll {
-    Class.forName("com.googlesource.gerrit.plugins.support.latest.CollectServerDataPermission")
-  }
-
-  lazy val CollectServerDataPermissionConstructor = TryAll {
-    CollectServerDataPermissionClass.map(_.getConstructor(classOf[String]))
-  }.flatten
-
-  lazy val checkPermissionMethod = TryAll {
-    GlobalOrPluginPermissionClass.map(classOf[CapabilityControl].getMethod("doCanForDefaultPermissionBackend", _))
-  }.flatten
-
-  def apply(cc: CapabilityControl)(implicit pluginName: PluginName) = new LatestCapabilityControl(cc)
-}
