diff --git a/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text.ts b/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text.ts
index 11e7152..4fee574 100644
--- a/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text.ts
+++ b/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text.ts
@@ -7,8 +7,6 @@
 import {CommentLinks} from '../../../types/common';
 import {LitElement, css, html, TemplateResult} from 'lit';
 import {customElement, property} from 'lit/decorators.js';
-import {getAppContext} from '../../../services/app-context';
-import {KnownExperimentId} from '../../../services/flags/flags';
 
 const CODE_MARKER_PATTERN = /^(`{1,3})([^`]+?)\1$/;
 const INLINE_PATTERN = /(\[.+?\]\(.+?\)|`[^`]+?`)/;
@@ -74,8 +72,6 @@
   @property({type: Boolean, reflect: true})
   noTrailingMargin = false;
 
-  private readonly flagsService = getAppContext().flagsService;
-
   static override get styles() {
     return [
       css`
@@ -140,15 +136,10 @@
   override render() {
     if (!this.content) return;
 
-    if (this.flagsService.isEnabled(KnownExperimentId.RENDER_MARKDOWN)) {
-      return html`<gr-markdown
-        .markdown=${true}
-        .content=${this.content}
-      ></gr-markdown>`;
-    } else {
-      const blocks = this._computeBlocks(this.content);
-      return html`${blocks.map(block => this.renderBlock(block))}`;
-    }
+    return html`<gr-markdown
+      .markdown=${true}
+      .content=${this.content}
+    ></gr-markdown>`;
   }
 
   /**
diff --git a/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text_test.ts b/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text_test.ts
index 62cb7c8..a3eff8e 100644
--- a/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text_test.ts
+++ b/polygerrit-ui/app/elements/shared/gr-formatted-text/gr-formatted-text_test.ts
@@ -4,9 +4,7 @@
  * SPDX-License-Identifier: Apache-2.0
  */
 import {fixture, html, assert} from '@open-wc/testing';
-import {KnownExperimentId} from '../../../services/flags/flags';
 import '../../../test/common-test-setup';
-import {stubFlags} from '../../../test/test-utils';
 import './gr-formatted-text';
 import {
   GrFormattedText,
@@ -24,7 +22,6 @@
 
 suite('gr-formatted-text tests', () => {
   let element: GrFormattedText;
-  let markdownFlagStub: sinon.SinonStub<[experiment_id: string], boolean>;
 
   function assertSpan(actual: InlineItem, expected: InlineItem) {
     assert.equal(actual.type, expected.type);
@@ -73,24 +70,9 @@
   }
 
   setup(async () => {
-    markdownFlagStub = stubFlags('isEnabled')
-      .withArgs(KnownExperimentId.RENDER_MARKDOWN)
-      .returns(false);
     element = await fixture(html`<gr-formatted-text></gr-formatted-text>`);
   });
 
-  test('uses gr-markdown when flag is enabled', async () => {
-    markdownFlagStub.returns(true);
-    const elementUsingMarkdown = await fixture(
-      html`<gr-formatted-text .content=${'# heading'}></gr-formatted-text>`
-    );
-
-    assert.shadowDom.equal(
-      elementUsingMarkdown,
-      /* HTML */ '<gr-markdown></gr-markdown>'
-    );
-  });
-
   test('parse empty', () => {
     assert.lengthOf(element._computeBlocks(''), 0);
   });
@@ -99,15 +81,7 @@
     element.content = 'text `code`';
     await element.updateComplete;
 
-    assert.shadowDom.equal(
-      element,
-      /* HTML */ `
-        <p>
-          <gr-markdown></gr-markdown>
-          <span class="inline-code"> code </span>
-        </p>
-      `
-    );
+    assert.shadowDom.equal(element, /* HTML */ ` <gr-markdown></gr-markdown> `);
   });
 
   for (const text of [
