diff --git a/src/mfm/html.ts b/src/mfm/html.ts
index b7fa5b6f03..df9959dc4b 100644
--- a/src/mfm/html.ts
+++ b/src/mfm/html.ts
@@ -82,8 +82,12 @@ const handlers: { [key: string]: (window: any, token: any, mentionedRemoteUsers:
 
 	text({ document }, { content }) {
 		const nodes = (content as string).split('\n').map(x => document.createTextNode(x));
-		for (const x of intersperse(document.createElement('br'), nodes)) {
-			document.body.appendChild(x);
+		for (const x of intersperse('br', nodes)) {
+			if (x === 'br') {
+				document.body.appendChild(document.createElement('br'));
+			} else {
+				document.body.appendChild(x);
+			}
 		}
 	},
 
diff --git a/test/mfm.ts b/test/mfm.ts
index 706c4c549a..901ffb80e3 100644
--- a/test/mfm.ts
+++ b/test/mfm.ts
@@ -1,6 +1,7 @@
 import * as assert from 'assert';
 
 import analyze from '../src/mfm/parse';
+import toHtml from '../src/mfm/html';
 import syntaxhighlighter from '../src/mfm/parse/core/syntax-highlighter';
 
 describe('Text', () => {
@@ -170,4 +171,12 @@ describe('Text', () => {
 			assert.equal(html, '<span class="symbol">/</span>');
 		});
 	});
+
+	describe('toHtml', () => {
+		it('br', () => {
+			const input = 'foo\nbar\nbaz';
+			const output = '<p>foo<br>bar<br>baz</p>';
+			assert.equal(toHtml(analyze(input)), output);
+		});
+	});
 });