diff --git a/WORKSPACE b/WORKSPACE
index 47420be..71112b0 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "fff6f20bb2eceaf872a8acf8ad51471c25a82d38",
+    commit = "15eae2ee5cd524a204bd62c3d59bfd0ce86916ec",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index 8f9e7d2..b272d6c 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -1,13 +1,13 @@
 load("//tools/bzl:maven_jar.bzl", "GERRIT", "MAVEN_CENTRAL", "MAVEN_LOCAL", "maven_jar")
 
-JGIT_VERSION = "5.1.12.201910011832-r"
+JGIT_VERSION = "5.3.6.201910020505-r"
 REPO = MAVEN_CENTRAL
 
 def external_plugin_deps():
     maven_jar(
         name = "jgit-http-apache",
         artifact = "org.eclipse.jgit:org.eclipse.jgit.http.apache:" + JGIT_VERSION,
-        sha1 = "92ad62799dd7eb02cc8805f2e297714cc3bb5149",
+        sha1 = "668c69822b4f54b430dd9880cc2bb13f13aa88d1",
         repository = REPO,
         unsign = True,
         exclude = [
@@ -19,7 +19,7 @@
     maven_jar(
         name = "jgit-lfs",
         artifact = "org.eclipse.jgit:org.eclipse.jgit.lfs:" + JGIT_VERSION,
-        sha1 = "bb4972c6e127c615c4b9183f95414ff2a20916cf",
+        sha1 = "153e32275cb0ccfd7f6dba89cf58392d42e16c3a",
         repository = REPO,
         unsign = True,
         exclude = [
@@ -31,7 +31,7 @@
     maven_jar(
         name = "jgit-lfs-server",
         artifact = "org.eclipse.jgit:org.eclipse.jgit.lfs.server:" + JGIT_VERSION,
-        sha1 = "b2d1e48f9daddc09e072e422c151384e845c1612",
+        sha1 = "e37339c77dd00d96269e280d582c742c424b908f",
         repository = REPO,
         unsign = True,
         exclude = [
diff --git a/src/main/java/com/googlesource/gerrit/plugins/lfs/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/lfs/HttpModule.java
index 2bd7091..aabbd69 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/lfs/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/lfs/HttpModule.java
@@ -62,11 +62,6 @@
       populateRepository(backend);
     }
 
-    // Only for GWT-UI
-    DynamicSet.bind(binder(), WebUiPlugin.class)
-        .toInstance(new JavaScriptPlugin("lfs-project-info.js"));
-
-    // Only for PolyGerrit-UI
     DynamicSet.bind(binder(), WebUiPlugin.class).toInstance(new JavaScriptPlugin("gr-lfs.html"));
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java b/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java
index 8982dbe..992dada 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java
@@ -22,9 +22,9 @@
 import static com.google.gerrit.server.permissions.ProjectPermission.PUSH_AT_LEAST_ONE_REF;
 
 import com.google.common.flogger.FluentLogger;
-import com.google.gerrit.common.ProjectUtil;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.ProjectUtil;
 import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.project.ProjectCache;
 import com.google.gerrit.server.project.ProjectState;
@@ -81,7 +81,7 @@
       throw new LfsException("no repository at " + pathInfo);
     }
     String projName = matcher.group(1);
-    Project.NameKey project = Project.NameKey.parse(ProjectUtil.stripGitSuffix(projName));
+    Project.NameKey project = Project.nameKey(ProjectUtil.stripGitSuffix(projName));
     ProjectState state = projectCache.get(project);
     if (state == null || state.getProject().getState() == HIDDEN) {
       throw new LfsRepositoryNotFound(project.get());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksAction.java b/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksAction.java
index 4b6afb4..32536f7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/lfs/locks/LfsLocksAction.java
@@ -22,10 +22,10 @@
 import static org.eclipse.jgit.util.HttpSupport.HDR_AUTHORIZATION;
 
 import com.google.common.flogger.FluentLogger;
-import com.google.gerrit.common.ProjectUtil;
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.ProjectUtil;
 import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.permissions.PermissionBackend.ForProject;
 import com.google.gerrit.server.permissions.PermissionBackendException;
@@ -100,7 +100,7 @@
       throws LfsException, IOException;
 
   protected ProjectState getProject(String name) throws LfsRepositoryNotFound {
-    Project.NameKey project = Project.NameKey.parse(ProjectUtil.stripGitSuffix(name));
+    Project.NameKey project = Project.nameKey(ProjectUtil.stripGitSuffix(name));
     ProjectState state = projectCache.get(project);
     if (state == null || state.getProject().getState() == HIDDEN) {
       throw new LfsRepositoryNotFound(project.get());
diff --git a/src/main/resources/static/gr-lfs.html b/src/main/resources/static/gr-lfs.html
index 8493051..1a82aa8 100644
--- a/src/main/resources/static/gr-lfs.html
+++ b/src/main/resources/static/gr-lfs.html
@@ -20,8 +20,6 @@
 <dom-module id="gr-lfs">
   <script>
     Gerrit.install(plugin => {
-      if (!window.Polymer) { return; }
-
       plugin.registerCustomComponent('repo-config', 'gr-lfs-project-info');
     });
   </script>
diff --git a/src/main/resources/static/lfs-project-info.js b/src/main/resources/static/lfs-project-info.js
deleted file mode 100644
index f81f975..0000000
--- a/src/main/resources/static/lfs-project-info.js
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (C) 2016 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.
-
-Gerrit.install(function(self) {
-
-  if (window.Polymer) { return; }
-
-  // The code below is only used by the GWT-UI
-
-  function toUpperCamel(str) {
-    var words = str.split('_');
-    for (i=0; i<words.length; i++) {
-      words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1);
-    }
-    return words.join(' ');
-  }
-
-  function createRow(doc, name, value) {
-    var tr = doc.createElement('tr');
-    var td = doc.createElement('td');
-    td.appendChild(doc.createTextNode(toUpperCamel(name) + ':'));
-    tr.appendChild(td);
-    td = doc.createElement('td');
-    td.appendChild(doc.createTextNode(value));
-    tr.appendChild(td);
-    return tr;
-  }
-
-  function onProjectInfo(panel) {
-    var url = 'projects/'
-      + encodeURI(panel.p.PROJECT_NAME).replace(/\//g, '%2F') //escape slashes
-      + '/' + this.pluginName + '~'
-      + 'lfs:config-project';
-
-    Gerrit.get(url, function(lfs) {
-      // Don't show LFS header if nothing is configured
-      if (Object.getOwnPropertyNames(lfs).length < 1) {
-        return;
-      }
-
-      var doc = document;
-      // create header
-      var td = doc.createElement('td');
-      td.appendChild(Gerrit.html(
-        '<div class=\"smallHeading\">LFS Options</div>'));
-      var tr = doc.createElement('tr');
-      tr.appendChild(td);
-      var table = doc.createElement('table');
-      table.appendChild(tr);
-
-      // add all properties
-      for (var name in lfs) {
-        table.appendChild(createRow(doc, name, lfs[name]));
-      }
-
-      var frg = doc.createDocumentFragment();
-      frg.appendChild(table);
-      panel.body.appendChild(frg);
-    });
-  }
-
-  self.panel('PROJECT_INFO_SCREEN_BOTTOM', onProjectInfo);
-  });
