diff --git a/src/parser.pegjs b/src/parser.pegjs
index 34dd956cf87f2574565a5de3ba8fb74f8f28f510..9a3d97768acf6b68e382f8fc76e2a0c36e3f5d10 100644
--- a/src/parser.pegjs
+++ b/src/parser.pegjs
@@ -386,7 +386,7 @@ fnArg
 // inline: text
 
 text
-	= . { return createNode('text', { text: text() }); }
+	= .
 
 //
 // General
diff --git a/src/util.ts b/src/util.ts
index 8b96d189672df8d8e189fc151f9f054ccc09e94b..d2865506b85f124286b55797145b72f893441008 100644
--- a/src/util.ts
+++ b/src/util.ts
@@ -30,45 +30,37 @@ export function groupContinuous<T>(arr: T[], predicate: (prev: T, current: T) =>
 	return dest;
 }
 
-export function mergeGroupedTrees(groupedTrees: MfmNode[][]): MfmNode[] {
-	return groupedTrees.reduce((acc, val) => acc.concat(val), ([] as MfmNode[]));
+export function mergeGroupedTrees<T>(groupedTrees: T[][]): T[] {
+	return groupedTrees.reduce((acc, val) => acc.concat(val), ([] as T[]));
 }
 
-export function mergeText(trees: MfmNode[] | undefined, recursive?: boolean): MfmNode[] | undefined {
-	let dest: MfmNode[];
-	let groupes: MfmNode[][];
-
-	if (trees == null) {
-		return trees;
-	}
-
+export function mergeText(trees: (MfmNode | string)[]): MfmNode[] {
 	// group trees
-	groupes = groupContinuous(trees, (prev, current) => prev.type == current.type);
+	const groupes = groupContinuous(trees, (prev, current) => {
+		if (typeof prev == 'string' || typeof current == 'string') {
+			return (typeof prev == 'string' && typeof current == 'string');
+		}
+		else {
+			return (prev.type == current.type);
+		}
+	});
 
 	// concatinate text
-	groupes = groupes.map((group) => {
-		if (group[0].type == 'text') {
+	const concatGroupes = groupes.map((group) => {
+		if (typeof group[0] == 'string') {
 			return [
 				createNode('text', {
-					text: group.map(i => (i as MfmText).props.text).join('')
+					text: (group as string[]).join('')
 				})
 			];
 		}
-		return group;
+		return (group as MfmNode[]);
 	});
 
 	// merge groups
-	dest = mergeGroupedTrees(groupes);
+	const dest = mergeGroupedTrees(concatGroupes);
 
-	if (recursive) {
-		return dest.map(tree => {
-			// apply recursively to children
-			return createNode(tree.type, tree.props, recursive ? mergeText(tree.children) : tree.children);
-		});
-	}
-	else {
-		return dest;
-	}
+	return dest;
 }
 
 export function stringifyNode(node: MfmNode): string {