diff --git a/rv-reviewers/rv-edit-screen.js b/rv-reviewers/rv-edit-screen.js
index 05e0df8..be302a8 100644
--- a/rv-reviewers/rv-edit-screen.js
+++ b/rv-reviewers/rv-edit-screen.js
@@ -12,57 +12,61 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 (function() {
-  Polymer({
-    is: 'rv-edit-screen',
+  class RvEditScreen extends Polymer.Element {
+    static get is() { return 'rv-edit-screen'; }
 
-    properties: {
-      pluginRestApi: {
-        type: Object,
-        observer: '_loadFilterSections'
-      },
-      repoName: String,
-      loading: Boolean,
-      canModifyConfig: Boolean,
-      _editingFilter: {
-        type: Boolean,
-        value: false,
-      },
-      _filterSections: Array,
-    },
+    static get properties() {
+      return {
+        pluginRestApi: {
+          type: Object,
+          observer: '_loadFilterSections',
+        },
+        repoName: String,
+        loading: Boolean,
+        canModifyConfig: Boolean,
+        _editingFilter: {
+          type: Boolean,
+          value: false,
+        },
+        _filterSections: Array,
+      };
+    }
 
     _loadFilterSections() {
       this.pluginRestApi.get(this._getReviewersUrl(this.repoName))
           .then(filterSections => {
             this._filterSections = filterSections;
           });
-    },
+    }
 
     _computeAddFilterBtnHidden(canModifyConfig, editingFilter) {
       return !canModifyConfig || editingFilter;
-    },
+    }
 
     _computeLoadingClass(loading) {
       return loading ? 'loading' : '';
-    },
+    }
 
     _getReviewersUrl(repoName) {
       return `/projects/${encodeURIComponent(repoName)}/reviewers`;
-    },
+    }
 
     _handleCreateSection() {
       const section = {filter: '', reviewers: [], editing: true};
       this._editingFilter = true;
       this.push('_filterSections', section);
-    },
+    }
 
     _handleCloseTap(e) {
       e.preventDefault();
       this.fire('close', null, {bubbles: false});
-    },
+    }
 
     _handleReviewerChanged(e) {
       this._filterSections = e.detail.result;
       this._editingFilter = false;
-    },
-  });
+    }
+  }
+
+  customElements.define(RvEditScreen.is, RvEditScreen);
 })();
diff --git a/rv-reviewers/rv-filter-section.js b/rv-reviewers/rv-filter-section.js
index 110c27d..962a54f 100644
--- a/rv-reviewers/rv-filter-section.js
+++ b/rv-reviewers/rv-filter-section.js
@@ -12,53 +12,56 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 (function() {
-  Polymer({
-    is: 'rv-filter-section',
+  class RvFilterSection extends Polymer.Element {
+    static get is() { return 'rv-filter-section'; }
 
-    properties: {
-      pluginRestApi: Object,
-      repoName: String,
-      reviewers: Array,
-      filter: String,
-      canModifyConfig: Boolean,
-      _originalFilter: String,
-      _editingReviewer: {
-        type: Boolean,
-        value: false,
-      },
-      reviewersUrl: String,
-    },
+    static get properties() {
+      return {
+        pluginRestApi: Object,
+        repoName: String,
+        reviewers: Array,
+        filter: String,
+        canModifyConfig: Boolean,
+        _originalFilter: String,
+        _editingReviewer: {
+          type: Boolean,
+          value: false,
+        },
+        reviewersUrl: String,
+      };
+    }
 
-    attached() {
+    connectedCallback() {
+      super.connectedCallback();
       this._updateSection();
-    },
+    }
 
     _updateSection() {
       this._originalFilter = this.filter;
-    },
+    }
 
     _computeEditing(filter, _originalFilter) {
       if (_originalFilter === '') {
         return true;
       }
       return filter === '';
-    },
+    }
 
     _computeCancelHidden(filter, _originalFilter) {
       return !this._computeEditing(filter, _originalFilter);
-    },
+    }
 
     _computeAddBtnHidden(canModifyConfig, editingReviewer) {
       return !(canModifyConfig && !editingReviewer);
-    },
+    }
 
     _computeFilterInputDisabled(canModifyConfig, originalFilter) {
       return !canModifyConfig || originalFilter !== '';
-    },
+    }
 
     _handleCancel() {
       this.remove();
-    },
+    }
 
     _handleReviewerDeleted(e) {
       if (e.detail.editing) {
@@ -69,7 +72,7 @@
         const deleted = this.reviewers[index];
         this._putReviewer(deleted, 'DELETE');
       }
-    },
+    }
 
     _handleReviewerAdded(e) {
       this._editingReviewer = false;
@@ -77,7 +80,7 @@
         this.fire('show-alert', {message: err});
         throw err;
       });
-    },
+    }
 
     _putReviewer(reviewer, action) {
       return this.pluginRestApi.put(this.reviewersUrl, {
@@ -89,11 +92,13 @@
         this.dispatchEvent(
             new CustomEvent('reviewer-changed', {detail, bubbles: true}));
       });
-    },
+    }
 
     _handleAddReviewer() {
       this.push('reviewers', '');
       this._editingReviewer = true;
-    },
-  });
+    }
+  }
+
+  customElements.define(RvFilterSection.is, RvFilterSection);
 })();
diff --git a/rv-reviewers/rv-reviewer.js b/rv-reviewers/rv-reviewer.js
index 681a17e..bb0b792 100644
--- a/rv-reviewers/rv-reviewer.js
+++ b/rv-reviewers/rv-reviewer.js
@@ -12,53 +12,56 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 (function() {
-  Polymer({
-    is: 'rv-reviewer',
+  class RvReviewer extends Polymer.Element {
+    static get is() { return 'rv-reviewer'; }
 
-    properties: {
-      canModifyConfig: Boolean,
-      pluginRestAPi: Object,
-      repoName: String,
-      reviewer: String,
-      _reviewerSearchId: String,
-      _queryReviewers: {
-        type: Function,
-        value() {
-          return this._getReviewerSuggestions.bind(this);
+    static get properties() {
+      return {
+        canModifyConfig: Boolean,
+        pluginRestAPi: Object,
+        repoName: String,
+        reviewer: String,
+        _reviewerSearchId: String,
+        _queryReviewers: {
+          type: Function,
+          value() {
+            return this._getReviewerSuggestions.bind(this);
+          },
         },
-      },
-      _originalReviewer: String,
-      _deleted: Boolean,
-      _editing: {
-        type: Boolean,
-        computed: '_computeEditing(reviewer, _originalReviewer)',
-      },
-    },
+        _originalReviewer: String,
+        _deleted: Boolean,
+        _editing: {
+          type: Boolean,
+          computed: '_computeEditing(reviewer, _originalReviewer)',
+        },
+      };
+    }
 
-    attached() {
+    connectedCallback() {
+      super.connectedCallback();
       this._originalReviewer = this.reviewer;
-    },
+    }
 
     _computeEditing(reviewer, _originalReviewer) {
       if (_originalReviewer === '') {
         return true;
       }
       return reviewer === '';
-    },
+    }
 
     _computeDeleteCancel(reviewer, _originalReviewer) {
       return this._computeEditing(reviewer, _originalReviewer) ?
-      'Cancel' : 'Delete';
-    },
+        'Cancel' : 'Delete';
+    }
 
     _computeHideAddButton(reviewer, _originalReviewer) {
       return !(this._computeEditing(reviewer, _originalReviewer)
       && this._reviewerSearchId);
-    },
+    }
 
     _computeHideDeleteButton(canModifyConfig) {
       return !canModifyConfig;
-    },
+    }
 
     _getReviewerSuggestions(input) {
       if (input.length === 0) { return Promise.resolve([]); }
@@ -68,7 +71,7 @@
       return Promise.all(promises).then(result => {
         return result.flat();
       });
-    },
+    }
 
     _getSuggestedGroups(input) {
       const suggestUrl = `/groups/?suggest=${input}&p=${this.repoName}`;
@@ -84,7 +87,7 @@
         }
         return groupSuggestions;
       });
-    },
+    }
 
     _getSuggestedAccounts(input) {
       const suggestUrl = `/accounts/?suggest&q=${input}`;
@@ -115,7 +118,7 @@
         }
         return accountSuggestions;
       });
-    },
+    }
 
     _handleDeleteCancel() {
       const detail = {editing: this._editing};
@@ -124,13 +127,15 @@
       }
       this.dispatchEvent(
           new CustomEvent('reviewer-deleted', {detail, bubbles: true}));
-    },
+    }
 
     _handleAddReviewer() {
       const detail = {reviewer: this._reviewerSearchId};
       this._originalReviewer = this.reviewer;
       this.dispatchEvent(
           new CustomEvent('reviewer-added', {detail, bubbles: true}));
-    },
-  });
+    }
+  }
+
+  customElements.define(RvReviewer.is, RvReviewer);
 })();
diff --git a/rv-reviewers/rv-reviewers.js b/rv-reviewers/rv-reviewers.js
index e40e03a..8c10ea4 100644
--- a/rv-reviewers/rv-reviewers.js
+++ b/rv-reviewers/rv-reviewers.js
@@ -12,42 +12,45 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 (function() {
-  Polymer({
-    is: 'rv-reviewers',
+  class RvReviewers extends Polymer.Element {
+    static get is() { return 'rv-reviewers'; }
 
-    properties: {
-      pluginRestApi: Object,
-      repoName: String,
-      _canModifyConfig: {
-        type: Boolean,
-        computed: '_computeCanModifyConfig(_isOwner, _hasModifyCapability)',
-      },
-      _loading: {
-        type: Boolean,
-        value: true,
-      },
-      _isOwner: {
-        type: Boolean,
-        value: false,
-      },
-      _hasModifyCapability: {
-        type: Boolean,
-        value: false,
-      },
-    },
+    static get properties() {
+      return {
+        pluginRestApi: Object,
+        repoName: String,
+        _canModifyConfig: {
+          type: Boolean,
+          computed: '_computeCanModifyConfig(_isOwner, _hasModifyCapability)',
+        },
+        _loading: {
+          type: Boolean,
+          value: true,
+        },
+        _isOwner: {
+          type: Boolean,
+          value: false,
+        },
+        _hasModifyCapability: {
+          type: Boolean,
+          value: false,
+        },
+      };
+    }
 
-    attached() {
+    connectedCallback() {
+      super.connectedCallback();
       this.pluginRestApi = this.plugin.restApi();
       this._setCanModifyConfig();
-    },
+    }
 
     _handleCommandTap() {
       this.$.rvScreenOverlay.open();
-    },
+    }
 
     _handleRvEditScreenClose() {
       this.$.rvScreenOverlay.close();
-    },
+    }
 
     _setCanModifyConfig() {
       const promises = [];
@@ -64,19 +67,21 @@
       Promise.all(promises).then(() => {
         this._loading = false;
       });
-    },
+    }
 
     _computeCanModifyConfig(isOwner, hasModifyCapability) {
       return isOwner || hasModifyCapability;
-    },
+    }
 
     _getRepoAccess(repoName) {
       return this.pluginRestApi.get(
           '/access/?project=' + encodeURIComponent(repoName));
-    },
+    }
 
     _getCapabilities() {
       return this.pluginRestApi.get('/accounts/self/capabilities');
-    },
-  });
+    }
+  }
+
+  customElements.define(RvReviewers.is, RvReviewers);
 })();
