diff --git a/gr-checks/gr-checkers-list.js b/gr-checks/gr-checkers-list.js
index da61b22..1cceb61 100644
--- a/gr-checks/gr-checkers-list.js
+++ b/gr-checks/gr-checkers-list.js
@@ -26,7 +26,7 @@
 class GrCheckersList extends Polymer.GestureEventListeners(
     Polymer.LegacyElementMixin(
         Polymer.Element)) {
-/** @returns {?} template for this component */
+  /** @returns {?} template for this component */
   static get template() { return htmlTemplate; }
 
   /** @returns {string} name of the component */
@@ -39,12 +39,12 @@
    */
   static get properties() {
     return {
-      /**
-       * Add observer on pluginRestApi to call getCheckers when it's defined
-       * as initially getCheckers was being called before pluginRestApi was
-       * initialised by gr-checks-view
-       */
+      // This is set by the PopupPluginApi.
+      plugin: {
+        type: Object,
+      },
       pluginRestApi: {
+        computed: '_computePluginRestApi(plugin)',
         type: Object,
       },
       // Checker that will be passed to the editOverlay modal
@@ -89,47 +89,18 @@
   static get observers() {
     return [
       '_showCheckers(_checkers, _filter)',
+      '_getCheckers(plugin)',
     ];
   }
 
-  attached() {
-    super.attached();
-    /**
-     * Adding an observer to listBody element as gr-overlay does not
-     * automatically resize itself once the getCheckers response comes.
-     * Polymer 2 will deprecate use of obserNodes so replacing it
-     * with FlattenedNodesObserver
-     */
-    if (Polymer.FlattenedNodesObserver) {
-      this._checkersListObserver = new Polymer.FlattenedNodesObserver(
-          this.$.listBody, () => {
-            this.$.listOverlay.refit();
-          });
-    } else {
-      this._checkersListObserver = Polymer.dom(this.$.listBody).observeNodes(
-          () => {
-            this.$.listOverlay.refit();
-          });
-    }
-  }
-
-  detached() {
-    super.detached();
-    Polymer.dom(this.$.listBody).unobserveNodes(this._checkersListObserver);
+  _computePluginRestApi(plugin) {
+    return plugin ? plugin.restApi() : undefined;
   }
 
   _contains(target, keyword) {
     return target.toLowerCase().includes(keyword.toLowerCase().trim());
   }
 
-  _showConfigureOverlay() {
-    this.$.listOverlay.open().then(
-        () => {
-          this._getCheckers();
-        }
-    );
-  }
-
   _showCheckers(_checkers, _filter) {
     if (!_checkers) return;
     if (!_filter) _filter = '';
@@ -179,9 +150,9 @@
     }
   }
 
-  _getCheckers() {
-    if (!this.pluginRestApi) return;
-    this.pluginRestApi.get(GET_CHECKERS_URL).then(checkers => {
+  _getCheckers(plugin) {
+    if (!plugin) return;
+    plugin.restApi().get(GET_CHECKERS_URL).then(checkers => {
       if (!checkers) { return; }
       this._checkers = checkers;
       this._startingIndex = 0;
@@ -231,4 +202,4 @@
   }
 }
 
-customElements.define(GrCheckersList.is, GrCheckersList);
\ No newline at end of file
+customElements.define(GrCheckersList.is, GrCheckersList);
diff --git a/gr-checks/gr-checkers-list_html.js b/gr-checks/gr-checkers-list_html.js
index 19f224f..1e12723 100644
--- a/gr-checks/gr-checkers-list_html.js
+++ b/gr-checks/gr-checkers-list_html.js
@@ -19,6 +19,11 @@
     <style include="shared-styles"></style>
     <style include="gr-table-styles"></style>
     <style>
+      #container {
+        width: 80vw;
+        height: 80vh;
+        overflow: auto;
+      }
       iron-icon {
         cursor: pointer;
       }
@@ -63,14 +68,9 @@
         text-decoration: underline;
         cursor: pointer;
       }
-      #listOverlay {
-        max-width: 90%;
-        max-height: 90%;
-        overflow: auto;
-      }
     </style>
 
-    <gr-overlay on-fullscreen-overlay-closed="_handleOverlayClosed" id="listOverlay" with-backdrop>
+    <div id="container">
       <div id="topContainer">
         <div>
           <label>Filter:</label>
@@ -133,43 +133,41 @@
           </a>
         </template>
       </nav>
-
-      <gr-overlay id="createOverlay">
-        <gr-dialog
-            id="createDialog"
-            confirm-label="Create"
-            on-confirm="_handleCreateConfirm"
-            on-cancel="_handleCreateCancel">
-          <div class="header" slot="header">
-            Create Checkers
-          </div>
-          <div slot="main">
-            <gr-create-checkers-dialog
-              id="createNewModal"
-              plugin-rest-api="[[pluginRestApi]]">
-            </gr-create-checkers-dialog>
-          </div>
-        </gr-dialog>
-      </gr-overlay>
-      <gr-overlay id="editOverlay">
-        <gr-dialog
-            id="editDialog"
-            confirm-label="Save"
-            on-confirm="_handleEditConfirm"
-            on-cancel="_handleEditCancel">
-          <div class="header" slot="header">
-            Edit Checker
-          </div>
-          <div slot="main">
-            <gr-create-checkers-dialog
-                checker="[[checker]]"
-                plugin-rest-api="[[pluginRestApi]]"
-                on-cancel="_handleEditCancel"
-                id="editModal">
-            </gr-create-checkers-dialog>
-          </div>
-        </gr-dialog>
-      </gr-overlay>
+    </div>
+    <gr-overlay id="createOverlay">
+      <gr-dialog
+          id="createDialog"
+          confirm-label="Create"
+          on-confirm="_handleCreateConfirm"
+          on-cancel="_handleCreateCancel">
+        <div class="header" slot="header">
+          Create Checkers
+        </div>
+        <div slot="main">
+          <gr-create-checkers-dialog
+            id="createNewModal"
+            plugin-rest-api="[[pluginRestApi]]">
+          </gr-create-checkers-dialog>
+        </div>
+      </gr-dialog>
     </gr-overlay>
-    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
-`;
\ No newline at end of file
+    <gr-overlay id="editOverlay">
+      <gr-dialog
+          id="editDialog"
+          confirm-label="Save"
+          on-confirm="_handleEditConfirm"
+          on-cancel="_handleEditCancel">
+        <div class="header" slot="header">
+          Edit Checker
+        </div>
+        <div slot="main">
+          <gr-create-checkers-dialog
+              checker="[[checker]]"
+              plugin-rest-api="[[pluginRestApi]]"
+              on-cancel="_handleEditCancel"
+              id="editModal">
+          </gr-create-checkers-dialog>
+        </div>
+      </gr-dialog>
+    </gr-overlay>
+`;
diff --git a/gr-checks/gr-create-checkers-dialog_html.js b/gr-checks/gr-create-checkers-dialog_html.js
index ac75927..dcfd86f 100644
--- a/gr-checks/gr-create-checkers-dialog_html.js
+++ b/gr-checks/gr-create-checkers-dialog_html.js
@@ -170,5 +170,4 @@
 
       </div>
     </div>
-    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
-`;
\ No newline at end of file
+`;
diff --git a/gr-checks/plugin.js b/gr-checks/plugin.js
index f8a0a35..dbf3d5a 100644
--- a/gr-checks/plugin.js
+++ b/gr-checks/plugin.js
@@ -14,11 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+import './gr-checkers-list.js';
 import {computeDuration} from './util.js';
 
 class ChecksFetcher {
-  constructor(restApi) {
-    this.restApi = restApi;
+  constructor(plugin) {
+    this.plugin = plugin;
+    this.restApi = plugin.restApi();
   }
 
   async fetchCurrent() {
@@ -32,6 +34,10 @@
     const checks = await this.apiGet('?o=CHECKER');
     return {
       responseCode: 'OK',
+      actions: [{
+        name: 'Configure Checkers',
+        callback: () => this.plugin.popup('gr-checkers-list'),
+      }],
       runs: checks.map(check => this.convert(check)),
     };
   }
@@ -110,7 +116,7 @@
 
 Gerrit.install(plugin => {
   const checksApi = plugin.checks();
-  const fetcher = new ChecksFetcher(plugin.restApi());
+  const fetcher = new ChecksFetcher(plugin);
   checksApi.register({
     fetch: data => fetcher.fetch(data),
   });
