diff --git a/src/pystencilssfg/configuration.py b/src/pystencilssfg/configuration.py
index 355be5e4c4d7bdd1a06724de253de9732971e30a..cee313f6626b6eb97c8294220663a92c640a9750 100644
--- a/src/pystencilssfg/configuration.py
+++ b/src/pystencilssfg/configuration.py
@@ -7,11 +7,10 @@ from os import path
 from enum import Enum, auto
 from dataclasses import dataclass, replace, asdict, InitVar
 from argparse import ArgumentParser
+from textwrap import indent
 
 from importlib import util as iutil
 
-from jinja2.filters import do_indent
-
 from .exceptions import SfgException
 
 HEADER_FILE_EXTENSIONS = {'h', 'hpp'}
@@ -39,7 +38,8 @@ class SfgCodeStyle:
     indent_width: int = 2
 
     def indent(self, s: str):
-        return do_indent(s, self.indent_width, first=True)
+        prefix = " " * self.indent_width
+        return indent(s, prefix)
 
 
 @dataclass
diff --git a/src/pystencilssfg/context.py b/src/pystencilssfg/context.py
index 96649db9d7a3a9c7301df10dd6f8268d675b8505..e7c5ddfce9b1f8c9fc1f4888be0aa46a0be02822 100644
--- a/src/pystencilssfg/context.py
+++ b/src/pystencilssfg/context.py
@@ -15,7 +15,7 @@ class SfgContext:
         self._code_namespace: str | None = None
 
         #   Source Components
-        self._prelude: list[str] = []
+        self._prelude: str = ""
         self._includes: set[SfgHeaderInclude] = set()
         self._definitions: list[str] = []
         self._kernel_namespaces = {self._default_kernel_namespace.name: self._default_kernel_namespace}
@@ -58,12 +58,19 @@ class SfgContext:
     #   Prelude, Includes, Definitions, Namespace
     # ----------------------------------------------------------------------------------------------
 
-    def prelude(self) -> Generator[str, None, None]:
+    @property
+    def prelude_comment(self) -> str:
         """The prelude is a comment block printed at the top of both generated files."""
-        yield from self._prelude
+        return self._prelude
 
     def append_to_prelude(self, code_str: str):
-        self._prelude.append(code_str)
+        if self._prelude:
+            self._prelude += "\n"
+
+        self._prelude += code_str
+
+        if not code_str.endswith("\n"):
+            self._prelude += "\n"
 
     def includes(self) -> Generator[SfgHeaderInclude, None, None]:
         """Includes of headers. Public includes are added to the header file, private includes
diff --git a/src/pystencilssfg/emitters/cpu/basic_cpu.py b/src/pystencilssfg/emitters/cpu/basic_cpu.py
index 25c952c8d6a39c55ea39bbf18f7c6f22600eb991..d49addd7e10856061369962ac23e58409d9e222e 100644
--- a/src/pystencilssfg/emitters/cpu/basic_cpu.py
+++ b/src/pystencilssfg/emitters/cpu/basic_cpu.py
@@ -1,5 +1,6 @@
 from typing import cast
 from jinja2 import Environment, PackageLoader, StrictUndefined
+from textwrap import indent
 
 from os import path
 
@@ -59,13 +60,7 @@ class BasicCpuEmitter:
 
 
 def get_prelude_comment(ctx: SfgContext):
-    prelude_lines = []
-    for p in ctx.prelude():
-        prelude_lines += p.splitlines()
-        prelude_lines += [""]   # empty line in-between
-    prelude_lines = prelude_lines[:-1]
-
-    if not prelude_lines:
+    if not ctx.prelude_comment:
         return ""
 
-    return "\n".join(["/**"] + [f"* {line}" for line in prelude_lines] + ["*/"])
+    return "/*\n" + indent(ctx.prelude_comment, "* ", predicate=lambda _: True) + "*/\n"