diff --git a/.bazelversion b/.bazelversion
index 9084fa2..4a36342 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-1.1.0
+3.0.0
diff --git a/BUILD b/BUILD
index 27d5da3..4de410f 100644
--- a/BUILD
+++ b/BUILD
@@ -59,5 +59,9 @@
 
 polygerrit_plugin(
     name = "gr-verify-status",
-    app = "gr-verify-status-plugin.html",
+    srcs = [
+        "gr-verify-status/gr-verify-status-panel.html",
+        "gr-verify-status/gr-verify-status-panel.js",
+    ],
+    app = "plugin.html",
 )
diff --git a/WORKSPACE b/WORKSPACE
index 4865447..ddb1efb 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "23d849dfd1876c1b4b88efa55a4f716895e33fa3",
+    commit = "9e23df10840ca3976431c842fdada58c7a51c6e3",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
@@ -16,9 +16,11 @@
 gerrit_polymer()
 
 # Load closure compiler with transitive dependencies
-load("@io_bazel_rules_closure//closure:defs.bzl", "closure_repositories")
+load("@io_bazel_rules_closure//closure:repositories.bzl", "rules_closure_dependencies", "rules_closure_toolchains")
 
-closure_repositories()
+rules_closure_dependencies()
+
+rules_closure_toolchains()
 
 # Load Gerrit npm_binary toolchain
 load("@com_googlesource_gerrit_bazlets//tools:js.bzl", "GERRIT", "npm_binary")
diff --git a/gr-verify-status-plugin.html b/gr-verify-status-plugin.html
deleted file mode 100644
index 42786f6..0000000
--- a/gr-verify-status-plugin.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!--
-Copyright (C) 2019 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.
--->
-<dom-module id="verify-status">
-<script type="text/javascript">
-    if (window.Polymer) {
-      Gerrit.install(function(plugin) {
-          plugin.registerCustomComponent(
-          'change-metadata-item', 'gr-verify-status-panel');
-      });
-    }
-</script>
-</dom-module>
-
-<dom-module id="gr-verify-status-panel"> <template>
-<style include="gr-form-styles" type="text/css"></style>
-<style type="text/css">
-    .u-green {
-        color: #388E3C;
-    }
-
-    .u-red {
-        color: #D32F2F;
-    }
-</style>
-
-<gr-verifiy-status-panel>
-<div id="verify-status">
-    <span class="u-green">Passed:[[verifystatus.summary.passed]]</span>,
-    <span class="u-red">Failed:[[verifystatus.summary.failed]]</span>,
-    <span class="u-black">Not done:[[verifystatus.summary.notdone]]</span>
-</div>
-<div class="separatedSection style-scope gr-change-metadata"
-    style="margin-top: 0; padding: 0">
-    <table class="test_result_table">
-        <tbody>
-            <template is="dom-repeat" items="{{verifystatus.results}}">
-            <tr>
-                <td class="cell verifiedstatus"><a href$="[[item.url]]">[[item.name]]</a></td>
-                <td class="cell verifiedstatus verifiedstatus_value">[[item.value]]</td>
-            </tr>
-            </template>
-        </tbody>
-    </table>
-</div>
-
-</gr-verifiy-status-panel> </template>
-<script type="text/javascript">
-/*(function() {
-  'use strict';*/
-const Defs = {};
-/**
- * @typedef {{
- *   summary: Object,
- *   results: Array,
- * }}
- */
-Defs.verifystatus;
-
-Polymer({
-    is: 'gr-verify-status-panel',
-
-    properties: {
-        verifystatus: {
-            /** @type {Defs.verifystatus} */
-            type: Object,
-        },
-        _verifystatus: {
-             /** @type {Defs.verifystatus} */
-             type: Object,
-             computed: '_fetchData(revision)',
-        },
-    },
-    attached() {
-        this.plugin.attributeHelper(this).bind('revision', this._onRevisionChanged.bind(this));
-    },
-
-    _fetchData(revision) {
-        const query ='/verify-status~verifications?sort=REPORTER&filter=CURRENT';
-        const endpoint = '/changes/' + this.change.id + '/revisions/' +
-                         this.__data__.revision._number + query;
-
-        const errFn = response => {
-            this.fire('page-error', {response});
-        };
-
-        this.plugin.restApi().get(endpoint, errFn).then(r => {
-            let summary = {failed:0, passed:0, notdone:0};
-            let results = [];
-            for (let checkid in r) {
-                let check= r[checkid];
-                if (check.value == '0') {
-                    summary.notdone +=1;}
-                else if (check.value == 1) {
-                    summary.passed +=1;
-                }
-                else {
-                    summary.failed +=1;
-                }
-                results.push(check);
-            };
-
-            this.set('verifystatus', {summary:summary, results: results});
-        });
-    },
-    _onRevisionChanged(value) {
-        console.log(`(attributeHelper.bind) revision number: ${value._number}`);
-    },
-});
-/*}());*/
-</script>
-</dom-module>
diff --git a/gr-verify-status/gr-verify-status-panel.html b/gr-verify-status/gr-verify-status-panel.html
new file mode 100644
index 0000000..e34af9c
--- /dev/null
+++ b/gr-verify-status/gr-verify-status-panel.html
@@ -0,0 +1,45 @@
+<!--
+Copyright (C) 2019 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.
+-->
+
+<dom-module id="gr-verify-status-panel">
+  <template>
+    <style include="gr-form-styles"></style>
+    <style>
+        .u-green {
+            color: #388E3C;
+        }
+        .u-red {
+            color: #D32F2F;
+        }
+    </style>
+    <div id="gr-verify-status">
+        <span class="u-green">Passed: [[verifyStatus.summary.passed]]</span>,
+        <span class="u-red">Failed: [[verifyStatus.summary.failed]]</span>,
+        <span class="u-black">Not done: [[verifyStatus.summary.notdone]]</span>
+    </div>
+    <div class="separatedSection style-scope gr-change-metadata"
+        style="margin-top: 0; padding: 0">
+      <table class="test_result_table">
+        <tbody>
+            <template is="dom-repeat" items="{{verifyStatus.results}}">
+            <tr>
+                <td class="cell verifiedstatus"><a href$="[[item.url]]">[[item.name]]</a></td>
+                <td class="cell verifiedstatus verifiedstatus_value">[[item.value]]</td>
+            </tr>
+            </template>
+        </tbody>
+      </table>
+    </div>
+  </template>
+  <script src="gr-verify-status-panel.js"></script>
+</dom-module>
diff --git a/gr-verify-status/gr-verify-status-panel.js b/gr-verify-status/gr-verify-status-panel.js
new file mode 100644
index 0000000..bdacdef
--- /dev/null
+++ b/gr-verify-status/gr-verify-status-panel.js
@@ -0,0 +1,75 @@
+// Copyright (C) 2019 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.
+(function() {
+  'use strict';
+  const Defs = {};
+  /**
+   * @typedef {{
+   *   summary: Object,
+   *   results: Array,
+   * }}
+   */
+  Defs.verifyStatus;
+
+  Polymer({
+    is: 'gr-verify-status-panel',
+
+    properties: {
+        verifyStatus: {
+            /** @type {Defs.verifystatus} */
+            type: Object,
+        },
+        revision: {
+            type: Object,
+        },
+        change: {
+            type: Object,
+        }
+    },
+
+    attached() {
+        this._fetchData(this.revision);
+    },
+
+    _fetchData(revision) {
+      if (!revision) return;
+      const query ='/verify-status~verifications?sort=REPORTER&filter=CURRENT';
+      const endpoint = '/changes/' + this.change.id + '/revisions/' +
+                       revision._number + query;
+
+      const errFn = response => {
+          this.fire('page-error', {response});
+      };
+
+      this.plugin.restApi().get(endpoint, errFn).then(r => {
+          let summary = {failed:0, passed:0, notdone:0};
+          let results = [];
+          for (let checkid in r) {
+              let check= r[checkid];
+              if (check.value == '0') {
+                  summary.notdone +=1;}
+              else if (check.value == 1) {
+                  summary.passed +=1;
+              }
+              else {
+                  summary.failed +=1;
+              }
+              results.push(check);
+          };
+
+          this.verifyStatus = {summary, results};
+      });
+    },
+  });
+}());
diff --git a/plugin.html b/plugin.html
new file mode 100644
index 0000000..e1b3d61
--- /dev/null
+++ b/plugin.html
@@ -0,0 +1,28 @@
+<!--
+Copyright (C) 2019 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.
+-->
+
+<link rel="import" href="./gr-verify-status/gr-verify-status-panel.html">
+
+<dom-module id="verify-status">
+  <script>
+    if (window.Polymer) {
+      Gerrit.install(function(plugin) {
+          plugin.registerCustomComponent(
+              'change-metadata-item', 'gr-verify-status-panel');
+      });
+    }
+  </script>
+</dom-module>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/HttpModule.java b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/HttpModule.java
index 517b162..cf557ba 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/verifystatus/HttpModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/verifystatus/HttpModule.java
@@ -24,6 +24,7 @@
   @Override
   protected void configureServlets() {
     DynamicSet.bind(binder(), WebUiPlugin.class).toInstance(new GwtPlugin("verifystatus"));
-    DynamicSet.bind(binder(), WebUiPlugin.class).toInstance(new JavaScriptPlugin("gr-verify-status.html"));
+    DynamicSet.bind(binder(), WebUiPlugin.class)
+        .toInstance(new JavaScriptPlugin("gr-verify-status.html"));
   }
 }
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
index 6a18e01..fae7b0c 100644
--- a/src/main/resources/Documentation/build.md
+++ b/src/main/resources/Documentation/build.md
@@ -27,7 +27,7 @@
 To execute the tests run:
 
 ```
-  bazel test verify-status_tests
+  bazel test //...
 ```
 
 ### Build in Gerrit tree
@@ -45,6 +45,13 @@
   bazel-bin/plugins/@PLUGIN@/@PLUGIN@.jar
 ```
 
+To execute the tests run either one of:
+
+```
+  bazel test --test_tag_filters=@PLUGIN@ //...
+  bazel test plugins/@PLUGIN@:@PLUGIN@_tests
+```
+
 This project can be imported into the Eclipse IDE. List the plugin in the
 custom plugin list, in `gerrit/tools/bzl/plugins.bzl`:
 
@@ -61,11 +68,9 @@
   ./tools/eclipse/project_bzl.py
 ```
 
-To execute the tests run:
-
-```
-  bazel test plugins/verify-status:verify-status_tests
-```
-
 How to build the Gerrit Plugin API is described in the [Gerrit
 documentation](../../../Documentation/dev-bazel.html#_extension_and_plugin_api_jar_files).
+
+[Back to @PLUGIN@ documentation index][index]
+
+[index]: index.html
