diff --git a/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-issue.js b/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-issue.js
index 69ef43f..d9cec5e 100644
--- a/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-issue.js
+++ b/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-issue.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-import {LitElement, html} from 'lit-element';
+import {LitElement, html, css} from 'lit-element';
 import debounce from 'debounce';
 
 import {store, connectStore} from 'reducers/base.js';
@@ -37,11 +37,66 @@
       blockingRefs = blockingRefs.concat(issue.danglingBlockingRefs);
     }
 
+    let migratedNotice = html``;
+    if (this._isMigrated) {
+      migratedNotice = html`
+        <div class="migrated-banner">
+          <i
+            class="warning-icon material-icons"
+            icon="warning"
+          >warning</i>
+          <p>
+            This issue has moved to
+            ${this._migratedLink}. Updates should be posted in
+            ${this._migratedLink}.
+          </p>
+        </div>
+        <chops-button
+          class="legacy-edit"
+          @click=${this._allowLegacyEdits}
+        >
+          I want to edit the old version of this issue.
+        </chops-button>
+      `;
+    }
+
     return html`
+      <link href="https://fonts.googleapis.com/icon?family=Material+Icons"
+        rel="stylesheet">
+      <style>
+        mr-edit-issue .migrated-banner {
+          width: 100%;
+          background-color: var(--chops-orange-50);
+          border: var(--chops-normal-border);
+          border-top: 0;
+          font-size: var(--chops-main-font-size);
+          padding: 0.25em 8px;
+          box-sizing: border-box;
+          display: flex;
+          flex-direction: row;
+          justify-content: flex-start;
+          align-items: center;
+          margin-bottom: 1em;
+        }
+        mr-edit-issue i.material-icons {
+          color: var(--chops-primary-icon-color);
+          font-size: var(--chops-icon-font-size);
+        }
+        mr-edit-issue .warning-icon {
+          margin-right: 4px;
+        }
+        mr-edit-issue .legacy-edit {
+          margin-bottom: 2em;
+        }
+      </style>
       <h2 id="makechanges" class="medium-heading">
         <a href="#makechanges">Add a comment and make changes</a>
       </h2>
+
+      ${migratedNotice}
+
       <mr-edit-metadata
+        ?hidden=${this._isMigrated && !this._editLegacyIssue}
         formName="Issue Edit"
         .ownerName=${this._ownerDisplayName(this.issue.ownerRef)}
         .cc=${issue.ccRefs}
@@ -69,6 +124,12 @@
   static get properties() {
     return {
       /**
+       * ID of an Issue Tracker issue that the issue migrated to.
+       */
+      migratedId: {
+        type: String,
+      },
+      /**
        * All comments, including descriptions.
        */
       comments: {
@@ -113,6 +174,9 @@
       _fieldDefs: {
         type: Array,
       },
+      _editLegacyIssue: {
+        type: Boolean,
+      },
     };
   }
 
@@ -124,6 +188,8 @@
     this.updateError = '';
 
     this.presubmitDebounceTimeOut = DEBOUNCED_PRESUBMIT_TIME_OUT;
+
+    this._editLegacyIssue = false;
   }
 
   /** @override */
@@ -144,6 +210,8 @@
 
   /** @override */
   stateChanged(state) {
+    this.migratedId = issueV0.migratedId(state);
+
     this.issue = issueV0.viewedIssue(state);
     this.issueRef = issueV0.viewedIssueRef(state);
     this.comments = issueV0.comments(state);
@@ -272,6 +340,28 @@
   }
 
   /**
+   * @return {boolean} Whether this issue is migrated or not.
+   */
+  get _isMigrated() {
+    return this.migratedId && this.migratedId !== '';
+  }
+
+  /**
+   * @return {string} the link of the issue in Issue Tracker.
+   */
+  get _migratedLink() {
+    return html`<a href="https://issuetracker.google.com/issues/${this.migratedId}">b/${this.migratedId}</a>`;
+  }
+
+  /**
+   * Let the user override th edit form being hidden, in case of mistakes or
+   * similar.
+   */
+  _allowLegacyEdits() {
+    this._editLegacyIssue = true;
+  }
+
+  /**
    * Gets the displayName of the owner. Only uses the displayName if a
    * userId also exists in the ref.
    * @param {UserRef} ownerRef The owner of the issue.
diff --git a/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-issue.test.js b/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-issue.test.js
index a3216ca..880064b 100644
--- a/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-issue.test.js
+++ b/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-issue.test.js
@@ -295,4 +295,47 @@
       {label: 'restrict-view-people'},
     ]));
   });
+
+  describe('migrated issue', () => {
+    it('does not show notice if issue not migrated', async () => {
+      element.migratedId = '';
+
+      await element.updateComplete;
+
+      assert.isNull(element.querySelector('.migrated-banner'));
+      assert.isNull(element.querySelector('.legacy-edit'));
+    });
+
+    it('shows notice if issue migrated', async () => {
+      element.migratedId = '1234';
+
+      await element.updateComplete;
+
+      assert.isNotNull(element.querySelector('.migrated-banner'));
+      assert.isNotNull(element.querySelector('.legacy-edit'));
+    });
+
+    it('hides edit form if issue migrated', async () => {
+      element.migratedId = '1234';
+
+      await element.updateComplete;
+
+      const editForm = element.querySelector('mr-edit-metadata');
+      assert.isTrue(editForm.hasAttribute('hidden'));
+    });
+
+    it('unhides edit form on button click', async () => {
+      element.migratedId = '1234';
+
+      await element.updateComplete;
+
+      const button = element.querySelector('.legacy-edit');
+      button.click();
+
+      await element.updateComplete;
+
+      const editForm = element.querySelector('mr-edit-metadata');
+      assert.isFalse(editForm.hasAttribute('hidden'));
+    });
+  });
 });
diff --git a/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-metadata.js b/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-metadata.js
index 2bc79a3..7877007 100644
--- a/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-metadata.js
+++ b/static_src/elements/issue-detail/metadata/mr-edit-metadata/mr-edit-metadata.js
@@ -61,6 +61,9 @@
           display: block;
           font-size: var(--chops-main-font-size);
         }
+        mr-edit-metadata[hidden] {
+          display: none;
+        }
         mr-edit-metadata.edit-actions-right .edit-actions {
           flex-direction: row-reverse;
           text-align: right;
diff --git a/static_src/elements/issue-detail/mr-issue-page/mr-issue-page.js b/static_src/elements/issue-detail/mr-issue-page/mr-issue-page.js
index a93822b..88cb92c 100644
--- a/static_src/elements/issue-detail/mr-issue-page/mr-issue-page.js
+++ b/static_src/elements/issue-detail/mr-issue-page/mr-issue-page.js
@@ -8,6 +8,7 @@
 import 'elements/chops/chops-button/chops-button.js';
 import './mr-issue-header.js';
 import './mr-restriction-indicator';
+import './mr-migrated-banner';
 import '../mr-issue-details/mr-issue-details.js';
 import '../metadata/mr-metadata/mr-issue-metadata.js';
 import '../mr-launch-overview/mr-launch-overview.js';
@@ -245,6 +246,7 @@
                 .userDisplayName=${this.userDisplayName}
               ></mr-issue-header>
               <mr-restriction-indicator></mr-restriction-indicator>
+              <mr-migrated-banner></mr-migrated-banner>
             </div>
             <div class="container-issue-content">
               <mr-issue-details
diff --git a/static_src/elements/issue-detail/mr-issue-page/mr-migrated-banner.js b/static_src/elements/issue-detail/mr-issue-page/mr-migrated-banner.js
new file mode 100644
index 0000000..e27a5fe
--- /dev/null
+++ b/static_src/elements/issue-detail/mr-issue-page/mr-migrated-banner.js
@@ -0,0 +1,107 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {LitElement, html, css} from 'lit-element';
+
+import {connectStore} from 'reducers/base.js';
+import * as issueV0 from 'reducers/issueV0.js';
+import {SHARED_STYLES} from 'shared/shared-styles.js';
+
+
+/**
+ * `<mr-migrated-banner>`
+ *
+ * Display for showing whether an issue is restricted.
+ *
+ */
+export class MrMigratedBanner extends connectStore(LitElement) {
+  /** @override */
+  static get styles() {
+    return [
+      SHARED_STYLES,
+      css`
+        :host {
+          width: 100%;
+          margin-top: 0;
+          background-color: var(--chops-orange-50);
+          border-bottom: var(--chops-normal-border);
+          font-size: var(--chops-main-font-size);
+          padding: 0.25em 8px;
+          box-sizing: border-box;
+          display: flex;
+          flex-direction: row;
+          justify-content: flex-start;
+          align-items: center;
+        }
+        :host([hidden]) {
+          display: none;
+        }
+        i.material-icons {
+          color: var(--chops-primary-icon-color);
+          font-size: var(--chops-icon-font-size);
+        }
+        .warning-icon {
+          margin-right: 4px;
+        }
+      `,
+    ];
+  }
+
+  /** @override */
+  render() {
+    return html`
+      <link href="https://fonts.googleapis.com/icon?family=Material+Icons"
+            rel="stylesheet">
+      <i
+        class="warning-icon material-icons"
+        icon="warning"
+      >warning</i>
+      <p>
+        This issue has been migrated to ${this._link}. Please see
+        ${this._link} for the latest version of this discussion.
+      </p>
+    `;
+  }
+
+  /** @override */
+  static get properties() {
+    return {
+      migratedId: {type: String},
+      hidden: {
+        type: Boolean,
+        reflect: true,
+      },
+    };
+  }
+
+  /** @override */
+  constructor() {
+    super();
+
+    this.hidden = true;
+  }
+
+  /** @override */
+  stateChanged(state) {
+    this.migratedId = issueV0.migratedId(state);
+  }
+
+   /** @override */
+   update(changedProperties) {
+    if (changedProperties.has('migratedId')) {
+      this.hidden = !this.migratedId || this.migratedId === '';
+    }
+
+    super.update(changedProperties);
+  }
+
+  /**
+   * @return {string} the link of the issue in Issue Tracker.
+   */
+  get _link() {
+    return html`<a href="https://issuetracker.google.com/issues/${this.migratedId}">b/${this.migratedId}</a>`;
+  }
+}
+
+customElements.define('mr-migrated-banner', MrMigratedBanner);
diff --git a/static_src/elements/issue-detail/mr-issue-page/mr-migrated-banner.test.js b/static_src/elements/issue-detail/mr-issue-page/mr-migrated-banner.test.js
new file mode 100644
index 0000000..4cceb2b
--- /dev/null
+++ b/static_src/elements/issue-detail/mr-issue-page/mr-migrated-banner.test.js
@@ -0,0 +1,43 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import {assert} from 'chai';
+import {MrMigratedBanner} from './mr-migrated-banner.js';
+
+let element;
+
+describe('mr-migrated-banner', () => {
+  beforeEach(() => {
+    element = document.createElement('mr-migrated-banner');
+    document.body.appendChild(element);
+  });
+
+  afterEach(() => {
+    document.body.removeChild(element);
+  });
+
+  it('initializes', () => {
+    assert.instanceOf(element, MrMigratedBanner);
+  });
+
+  it('hides element by default', async () => {
+    await element.updateComplete;
+
+    assert.isTrue(element.hasAttribute('hidden'));
+  });
+
+  it('hides element when migratedId is empty', async () => {
+    element.migratedId = '';
+    await element.updateComplete;
+
+    assert.isTrue(element.hasAttribute('hidden'));
+  });
+
+  it('shows element when migratedId is set', async () => {
+    element.migratedId = '1234';
+    await element.updateComplete;
+
+    assert.isFalse(element.hasAttribute('hidden'));
+  });
+});
diff --git a/static_src/react/issue-wizard/IssueWizardDescriptionsUtils.tsx b/static_src/react/issue-wizard/IssueWizardDescriptionsUtils.tsx
index e32d2d5..1baf35b 100644
--- a/static_src/react/issue-wizard/IssueWizardDescriptionsUtils.tsx
+++ b/static_src/react/issue-wizard/IssueWizardDescriptionsUtils.tsx
@@ -21,6 +21,10 @@
     let compVal = component || '';
     let typeLabel = isRegression ? 'Type-Bug-Regression' : 'Type-Bug';
 
+    if (category === 'Security') {
+      typeLabel = 'Type-Bug-Security'
+    }
+
     customQuestionsAnswers.forEach((ans) => {
       if (ans.startsWith(LABELS_PREFIX)) {
         const currentAnswer = ans.substring(LABELS_PREFIX.length);
@@ -42,9 +46,8 @@
             }
             break;
           case 'Security':
-            if (typeLabel === '') {
-              typeLabel = 'Type-Bug-Security';
-            }
+            typeLabel = 'Type-Bug-Security';
+            break;
           case 'Other':
             typeLabel = "Type-Bug";
             const issueType = currentAnswer.split(' - ')[0];
diff --git a/static_src/reducers/issueV0.js b/static_src/reducers/issueV0.js
index 36c446d..880ebbc 100644
--- a/static_src/reducers/issueV0.js
+++ b/static_src/reducers/issueV0.js
@@ -493,6 +493,7 @@
 const RESTRICT_VIEW_PREFIX = 'restrict-view-';
 const RESTRICT_EDIT_PREFIX = 'restrict-editissue-';
 const RESTRICT_COMMENT_PREFIX = 'restrict-addissuecomment-';
+const MIGRATED_ISSUE_PREFIX = 'migrated-to-b-';
 
 /**
  * Selector to retrieve all normalized Issue data in the Redux store,
@@ -703,6 +704,25 @@
     },
 );
 
+// Gets the Issue Tracker ID of a moved issue.
+export const migratedId = createSelector(
+  labelRefs,
+  (labelRefs) => {
+    if (!labelRefs) return '';
+
+    // Assume that there's only one migrated-to-b-* label. Or at least drop any
+    // labels besides the first one.
+    const migrationLabel = labelRefs.find((labelRef) => {
+      return labelRef.label.toLowerCase().startsWith(MIGRATED_ISSUE_PREFIX);
+    });
+
+    if (migrationLabel) {
+      return migrationLabel.label.substring(MIGRATED_ISSUE_PREFIX.length);
+    }
+    return '';
+  },
+);
+
 export const isOpen = createSelector(
     viewedIssue,
     (issue) => issue && issue.statusRef && issue.statusRef.meansOpen || false);
diff --git a/static_src/reducers/issueV0.test.js b/static_src/reducers/issueV0.test.js
index 0c7a0f5..33b63c1 100644
--- a/static_src/reducers/issueV0.test.js
+++ b/static_src/reducers/issueV0.test.js
@@ -299,6 +299,33 @@
     });
   });
 
+  it('migratedId', () => {
+    assert.equal(issueV0.migratedId(wrapIssue()), '');
+    assert.equal(issueV0.migratedId(wrapIssue({labelRefs: []})), '');
+
+    assert.equal(issueV0.migratedId(wrapIssue({labelRefs: [
+      {label: 'IgnoreThis'},
+      {label: 'IgnoreThis2'},
+    ]})), '');
+
+    assert.equal(issueV0.migratedId(wrapIssue({labelRefs: [
+      {label: 'IgnoreThis'},
+      {label: 'IgnoreThis2'},
+      {label: 'migrated-to-b-6789'},
+    ]})), '6789');
+
+    assert.equal(issueV0.migratedId(wrapIssue({labelRefs: [
+      {label: 'migrated-to-b-1234'},
+    ]})), '1234');
+
+    // We assume there's only one migrated-to-b-* label.
+    assert.equal(issueV0.migratedId(wrapIssue({labelRefs: [
+      {label: 'migrated-to-b-1234'},
+      {label: 'migrated-to-b-6789'},
+    ]})), '1234');
+  });
+
+
   it('isOpen', () => {
     assert.isFalse(issueV0.isOpen(wrapIssue()));
     assert.isTrue(issueV0.isOpen(wrapIssue({statusRef: {meansOpen: true}})));
