diff --git a/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements.ts b/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements.ts
index 64c0106..7ef4487 100644
--- a/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements.ts
+++ b/polygerrit-ui/app/elements/change/gr-submit-requirements/gr-submit-requirements.ts
@@ -314,10 +314,14 @@
   }
 
   renderOverrideLabels(requirement: SubmitRequirementResultInfo) {
+    if (requirement.status !== SubmitRequirementStatus.OVERRIDDEN) return;
     const requirementLabels = extractAssociatedLabels(
       requirement,
       'onlyOverride'
-    );
+    ).filter(label => {
+      const allLabels = this.change?.labels ?? {};
+      return hasVotes(allLabels[label]);
+    });
     return requirementLabels.map(
       label => html`<span class="overrideLabel">${label}</span>`
     );
diff --git a/polygerrit-ui/app/elements/topic/gr-topic-tree-project.ts b/polygerrit-ui/app/elements/topic/gr-topic-tree-repo.ts
similarity index 76%
rename from polygerrit-ui/app/elements/topic/gr-topic-tree-project.ts
rename to polygerrit-ui/app/elements/topic/gr-topic-tree-repo.ts
index c3fed91..d5bf096 100644
--- a/polygerrit-ui/app/elements/topic/gr-topic-tree-project.ts
+++ b/polygerrit-ui/app/elements/topic/gr-topic-tree-repo.ts
@@ -19,26 +19,26 @@
 import {customElement, property} from 'lit/decorators';
 import {LitElement, html} from 'lit-element/lit-element';
 import '../shared/gr-button/gr-button';
-import {ChangeInfo} from '../../api/rest-api';
+import {ChangeInfo, RepoName} from '../../api/rest-api';
 
 /**
- * A view of changes that all belong to the same project.
+ * A view of changes that all belong to the same repository.
  */
-@customElement('gr-topic-tree-project')
-export class GrTopicTreeProject extends LitElement {
+@customElement('gr-topic-tree-repo')
+export class GrTopicTreeRepo extends LitElement {
   @property({type: String})
-  projectName?: string;
+  repoName?: RepoName;
 
   @property({type: Array})
   changes?: ChangeInfo[];
 
   override render() {
-    if (this.projectName === undefined || this.changes === undefined) {
+    if (this.repoName === undefined || this.changes === undefined) {
       return;
     }
-    // TODO: Groups of related changes should be separated within the project.
+    // TODO: Groups of related changes should be separated within the repository.
     return html`
-      <h2>Project ${this.projectName}</h2>
+      <h2>Repo ${this.repoName}</h2>
       ${this.changes.map(change => this.renderTreeRow(change))}
     `;
   }
@@ -50,6 +50,6 @@
 
 declare global {
   interface HTMLElementTagNameMap {
-    'gr-topic-tree-project': GrTopicTreeProject;
+    'gr-topic-tree-repo': GrTopicTreeRepo;
   }
 }
diff --git a/polygerrit-ui/app/elements/topic/gr-topic-tree-project_test.ts b/polygerrit-ui/app/elements/topic/gr-topic-tree-repo_test.ts
similarity index 69%
rename from polygerrit-ui/app/elements/topic/gr-topic-tree-project_test.ts
rename to polygerrit-ui/app/elements/topic/gr-topic-tree-repo_test.ts
index 39398bd..2e903b5 100644
--- a/polygerrit-ui/app/elements/topic/gr-topic-tree-project_test.ts
+++ b/polygerrit-ui/app/elements/topic/gr-topic-tree-repo_test.ts
@@ -15,27 +15,28 @@
  * limitations under the License.
  */
 
+import {RepoName} from '../../api/rest-api';
 import '../../test/common-test-setup-karma';
 import {createChange} from '../../test/test-data-generators';
 import {queryAndAssert} from '../../test/test-utils';
-import './gr-topic-tree-project';
-import {GrTopicTreeProject} from './gr-topic-tree-project';
+import './gr-topic-tree-repo';
+import {GrTopicTreeRepo} from './gr-topic-tree-repo';
 
-const basicFixture = fixtureFromElement('gr-topic-tree-project');
-const projectName = 'myProject';
+const basicFixture = fixtureFromElement('gr-topic-tree-repo');
+const repoName = 'myRepo' as RepoName;
 
-suite('gr-topic-tree-project tests', () => {
-  let element: GrTopicTreeProject;
+suite('gr-topic-tree-repo tests', () => {
+  let element: GrTopicTreeRepo;
 
   setup(async () => {
     element = basicFixture.instantiate();
-    element.projectName = projectName;
+    element.repoName = repoName;
     element.changes = [createChange()];
     await element.updateComplete;
   });
 
-  test('shows project name', () => {
+  test('shows repository name', () => {
     const heading = queryAndAssert<HTMLHeadingElement>(element, 'h2');
-    assert.equal(heading.textContent, `Project ${projectName}`);
+    assert.equal(heading.textContent, `Repo ${repoName}`);
   });
 });
diff --git a/polygerrit-ui/app/elements/topic/gr-topic-tree.ts b/polygerrit-ui/app/elements/topic/gr-topic-tree.ts
index da67e26..f5140f6 100644
--- a/polygerrit-ui/app/elements/topic/gr-topic-tree.ts
+++ b/polygerrit-ui/app/elements/topic/gr-topic-tree.ts
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import './gr-topic-tree-project';
+import './gr-topic-tree-repo';
 import {customElement, property, state} from 'lit/decorators';
 import {LitElement, html, PropertyValues} from 'lit-element/lit-element';
 import {getAppContext} from '../../services/app-context';
@@ -24,7 +24,7 @@
 
 /**
  * A tree-like dashboard showing changes related to a topic, organized by
- * project.
+ * repository.
  */
 @customElement('gr-topic-tree')
 export class GrTopicTree extends LitElement {
@@ -32,7 +32,7 @@
   topicName?: string;
 
   @state()
-  private changesByProject = new Map<RepoName, ChangeInfo[]>();
+  private changesByRepo = new Map<RepoName, ChangeInfo[]>();
 
   private restApiService = getAppContext().restApiService;
 
@@ -45,17 +45,17 @@
 
   override render() {
     // TODO: organize into <table> for column alignment.
-    return Array.from(this.changesByProject).map(([projectName, changes]) =>
-      this.renderProjectSection(projectName, changes)
+    return Array.from(this.changesByRepo).map(([repoName, changes]) =>
+      this.renderRepoSection(repoName, changes)
     );
   }
 
-  private renderProjectSection(projectName: RepoName, changes: ChangeInfo[]) {
+  private renderRepoSection(repoName: RepoName, changes: ChangeInfo[]) {
     return html`
-      <gr-topic-tree-project
-        .projectName=${projectName}
+      <gr-topic-tree-repo
+        .repoName=${repoName}
         .changes=${changes}
-      ></gr-topic-tree-project>
+      ></gr-topic-tree-repo>
     `;
   }
 
@@ -67,12 +67,12 @@
     if (!changes) {
       return;
     }
-    this.changesByProject.clear();
+    this.changesByRepo.clear();
     for (const change of changes) {
-      if (this.changesByProject.has(change.project)) {
-        this.changesByProject.get(change.project)!.push(change);
+      if (this.changesByRepo.has(change.project)) {
+        this.changesByRepo.get(change.project)!.push(change);
       } else {
-        this.changesByProject.set(change.project, [change]);
+        this.changesByRepo.set(change.project, [change]);
       }
     }
     this.requestUpdate();
diff --git a/polygerrit-ui/app/elements/topic/gr-topic-tree_test.ts b/polygerrit-ui/app/elements/topic/gr-topic-tree_test.ts
index f214520..a2873d9 100644
--- a/polygerrit-ui/app/elements/topic/gr-topic-tree_test.ts
+++ b/polygerrit-ui/app/elements/topic/gr-topic-tree_test.ts
@@ -21,49 +21,53 @@
 import {queryAll, stubRestApi} from '../../test/test-utils';
 import './gr-topic-tree';
 import {GrTopicTree} from './gr-topic-tree';
-import {GrTopicTreeProject} from './gr-topic-tree-project';
+import {GrTopicTreeRepo} from './gr-topic-tree-repo';
 
 const basicFixture = fixtureFromElement('gr-topic-tree');
 
-function createChangeForProject(projectName: string): ChangeInfo {
-  return {...createChange(), project: projectName as RepoName};
+const repo1Name = 'repo1' as RepoName;
+const repo2Name = 'repo2' as RepoName;
+const repo3Name = 'repo3' as RepoName;
+
+function createChangeForRepo(repoName: string): ChangeInfo {
+  return {...createChange(), project: repoName as RepoName};
 }
 
 suite('gr-topic-tree tests', () => {
   let element: GrTopicTree;
-  const project1Changes = [
-    createChangeForProject('project1'),
-    createChangeForProject('project1'),
+  const repo1Changes = [
+    createChangeForRepo(repo1Name),
+    createChangeForRepo(repo1Name),
   ];
-  const project2Changes = [
-    createChangeForProject('project2'),
-    createChangeForProject('project2'),
+  const repo2Changes = [
+    createChangeForRepo(repo2Name),
+    createChangeForRepo(repo2Name),
   ];
-  const project3Changes = [
-    createChangeForProject('project3'),
-    createChangeForProject('project3'),
+  const repo3Changes = [
+    createChangeForRepo(repo3Name),
+    createChangeForRepo(repo3Name),
   ];
 
   setup(async () => {
     stubRestApi('getChanges')
       .withArgs(undefined, 'topic:myTopic')
-      .resolves([...project1Changes, ...project2Changes, ...project3Changes]);
+      .resolves([...repo1Changes, ...repo2Changes, ...repo3Changes]);
     element = basicFixture.instantiate();
     element.topicName = 'myTopic';
     await element.updateComplete;
   });
 
-  test('groups changes by project', () => {
-    const projectSections = queryAll<GrTopicTreeProject>(
+  test('groups changes by repo', () => {
+    const repoSections = queryAll<GrTopicTreeRepo>(
       element,
-      'gr-topic-tree-project'
+      'gr-topic-tree-repo'
     );
-    assert.lengthOf(projectSections, 3);
-    assert.equal(projectSections[0].projectName, 'project1');
-    assert.sameMembers(projectSections[0].changes!, project1Changes);
-    assert.equal(projectSections[1].projectName, 'project2');
-    assert.sameMembers(projectSections[1].changes!, project2Changes);
-    assert.equal(projectSections[2].projectName, 'project3');
-    assert.sameMembers(projectSections[2].changes!, project3Changes);
+    assert.lengthOf(repoSections, 3);
+    assert.equal(repoSections[0].repoName, repo1Name);
+    assert.sameMembers(repoSections[0].changes!, repo1Changes);
+    assert.equal(repoSections[1].repoName, repo2Name);
+    assert.sameMembers(repoSections[1].changes!, repo2Changes);
+    assert.equal(repoSections[2].repoName, repo3Name);
+    assert.sameMembers(repoSections[2].changes!, repo3Changes);
   });
 });
diff --git a/polygerrit-ui/app/utils/dom-util.ts b/polygerrit-ui/app/utils/dom-util.ts
index bd0f742..2c38276 100644
--- a/polygerrit-ui/app/utils/dom-util.ts
+++ b/polygerrit-ui/app/utils/dom-util.ts
@@ -454,7 +454,10 @@
     // Suppress shortcuts if the key is 'enter'
     // and target is an anchor or button or paper-tab.
     (e.keyCode === 13 &&
-      (tagName === 'A' || tagName === 'BUTTON' || tagName === 'PAPER-TAB'))
+      (tagName === 'A' ||
+        tagName === 'BUTTON' ||
+        tagName === 'GR-BUTTON' ||
+        tagName === 'PAPER-TAB'))
   ) {
     return true;
   }
diff --git a/polygerrit-ui/app/utils/dom-util_test.ts b/polygerrit-ui/app/utils/dom-util_test.ts
index e139805..28157d9 100644
--- a/polygerrit-ui/app/utils/dom-util_test.ts
+++ b/polygerrit-ui/app/utils/dom-util_test.ts
@@ -326,6 +326,15 @@
       });
     });
 
+    test('suppress "enter" shortcut event from <gr-button>', async () => {
+      await keyEventOn(
+        document.createElement('gr-button'),
+        e => assert.isTrue(shouldSuppress(e)),
+        13,
+        'enter'
+      );
+    });
+
     test('suppress "enter" shortcut event from <a>', async () => {
       await keyEventOn(document.createElement('a'), e => {
         assert.isFalse(shouldSuppress(e));
