diff --git a/src/pystencilssfg/cli.py b/src/pystencilssfg/cli.py
index 7a2e296c3eb6506e93533e5280a6f42fd47c139a..c51db09d28adc0e91633856222a4d5d7dc1c9805 100644
--- a/src/pystencilssfg/cli.py
+++ b/src/pystencilssfg/cli.py
@@ -72,9 +72,12 @@ def list_files(args):
     _, scriptname = path.split(args.codegen_script)
     basename = path.splitext(scriptname)[0]
 
-    from .emitters.cpu.basic_cpu import BasicCpuEmitter
+    from .emitters import HeaderSourcePairEmitter
 
-    emitter = BasicCpuEmitter(basename, config)
+    emitter = HeaderSourcePairEmitter(basename,
+                                      config.header_extension,
+                                      config.source_extension,
+                                      config.output_directory)
 
     print(args.sep.join(emitter.output_files), end=os.linesep if args.newline else '')
 
diff --git a/src/pystencilssfg/context.py b/src/pystencilssfg/context.py
index e7c5ddfce9b1f8c9fc1f4888be0aa46a0be02822..d1add3c47c7e4f09b6c442db6b1cd265bba523cd 100644
--- a/src/pystencilssfg/context.py
+++ b/src/pystencilssfg/context.py
@@ -1,18 +1,23 @@
 from typing import Generator, Sequence
 
-from .configuration import SfgConfiguration, SfgCodeStyle
+from .configuration import SfgCodeStyle
 from .tree.visitors import CollectIncludes
 from .source_components import SfgHeaderInclude, SfgKernelNamespace, SfgFunction
 from .exceptions import SfgException
 
 
 class SfgContext:
-    def __init__(self, config: SfgConfiguration, argv: Sequence[str] | None = None):
+    def __init__(self,
+                 outer_namespace: str | None = None,
+                 codestyle: SfgCodeStyle = SfgCodeStyle(),
+                 argv: Sequence[str] | None = None):
         self._argv = argv
-        self._config = config
         self._default_kernel_namespace = SfgKernelNamespace(self, "kernels")
 
-        self._code_namespace: str | None = None
+        self._outer_namespace = outer_namespace
+        self._inner_namespace: str | None = None
+
+        self._codestyle = codestyle
 
         #   Source Components
         self._prelude: str = ""
@@ -34,11 +39,11 @@ class SfgContext:
 
     @property
     def outer_namespace(self) -> str | None:
-        return self._config.outer_namespace
+        return self._outer_namespace
 
     @property
     def inner_namespace(self) -> str | None:
-        return self._code_namespace
+        return self._inner_namespace
 
     @property
     def fully_qualified_namespace(self) -> str | None:
@@ -51,8 +56,7 @@ class SfgContext:
 
     @property
     def codestyle(self) -> SfgCodeStyle:
-        assert self._config.codestyle is not None
-        return self._config.codestyle
+        return self._codestyle
 
     # ----------------------------------------------------------------------------------------------
     #   Prelude, Includes, Definitions, Namespace
@@ -88,10 +92,10 @@ class SfgContext:
         self._definitions.append(definition)
 
     def set_namespace(self, namespace: str):
-        if self._code_namespace is not None:
+        if self._inner_namespace is not None:
             raise SfgException("The code namespace was already set.")
 
-        self._code_namespace = namespace
+        self._inner_namespace = namespace
 
     # ----------------------------------------------------------------------------------------------
     #   Kernel Namespaces
diff --git a/src/pystencilssfg/emitters/__init__.py b/src/pystencilssfg/emitters/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fc3c4f6843e1d794a7f55210667bd474d6cbf665 100644
--- a/src/pystencilssfg/emitters/__init__.py
+++ b/src/pystencilssfg/emitters/__init__.py
@@ -0,0 +1,5 @@
+from .header_source_pair import HeaderSourcePairEmitter
+
+__all__ = [
+    "HeaderSourcePairEmitter"
+]
diff --git a/src/pystencilssfg/emitters/cpu/__init__.py b/src/pystencilssfg/emitters/cpu/__init__.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/pystencilssfg/emitters/cpu/basic_cpu.py b/src/pystencilssfg/emitters/header_source_pair.py
similarity index 81%
rename from src/pystencilssfg/emitters/cpu/basic_cpu.py
rename to src/pystencilssfg/emitters/header_source_pair.py
index d49addd7e10856061369962ac23e58409d9e222e..fc4e9433a9bdf7697ce59774526df8844444fdbb 100644
--- a/src/pystencilssfg/emitters/cpu/basic_cpu.py
+++ b/src/pystencilssfg/emitters/header_source_pair.py
@@ -4,16 +4,19 @@ from textwrap import indent
 
 from os import path
 
-from ...configuration import SfgConfiguration
-from ...context import SfgContext
+from ..context import SfgContext
 
 
-class BasicCpuEmitter:
-    def __init__(self, basename: str, config: SfgConfiguration):
+class HeaderSourcePairEmitter:
+    def __init__(self,
+                 basename: str,
+                 header_extension: str,
+                 impl_extension: str,
+                 output_directory: str):
         self._basename = basename
-        self._output_directory = cast(str, config.output_directory)
-        self._header_filename = f"{basename}.{config.header_extension}"
-        self._source_filename = f"{basename}.{config.source_extension}"
+        self._output_directory = cast(str, output_directory)
+        self._header_filename = f"{basename}.{header_extension}"
+        self._source_filename = f"{basename}.{impl_extension}"
 
     @property
     def output_files(self) -> tuple[str, str]:
@@ -39,9 +42,9 @@ class BasicCpuEmitter:
             'functions': list(ctx.functions())
         }
 
-        template_name = "BasicCpu"
+        template_name = "HeaderSourcePair"
 
-        env = Environment(loader=PackageLoader('pystencilssfg.emitters.cpu'),
+        env = Environment(loader=PackageLoader('pystencilssfg.emitters'),
                           undefined=StrictUndefined,
                           trim_blocks=True,
                           lstrip_blocks=True)
diff --git a/src/pystencilssfg/emitters/cpu/jinja_filters.py b/src/pystencilssfg/emitters/jinja_filters.py
similarity index 100%
rename from src/pystencilssfg/emitters/cpu/jinja_filters.py
rename to src/pystencilssfg/emitters/jinja_filters.py
diff --git a/src/pystencilssfg/emitters/cpu/templates/BasicCpu.tmpl.cpp b/src/pystencilssfg/emitters/templates/HeaderSourcePair.tmpl.cpp
similarity index 100%
rename from src/pystencilssfg/emitters/cpu/templates/BasicCpu.tmpl.cpp
rename to src/pystencilssfg/emitters/templates/HeaderSourcePair.tmpl.cpp
diff --git a/src/pystencilssfg/emitters/cpu/templates/BasicCpu.tmpl.h b/src/pystencilssfg/emitters/templates/HeaderSourcePair.tmpl.h
similarity index 100%
rename from src/pystencilssfg/emitters/cpu/templates/BasicCpu.tmpl.h
rename to src/pystencilssfg/emitters/templates/HeaderSourcePair.tmpl.h
diff --git a/src/pystencilssfg/generator.py b/src/pystencilssfg/generator.py
index b0da25c96599eb94bc406f849139503395e340f0..12449f83f09736ab1b03b004d412c7f13848a7b1 100644
--- a/src/pystencilssfg/generator.py
+++ b/src/pystencilssfg/generator.py
@@ -1,3 +1,6 @@
+# TODO
+# mypy strict_optional=False
+
 import sys
 import os
 from os import path
@@ -21,10 +24,13 @@ class SourceFileGenerator:
 
         config = merge_configurations(project_config, cmdline_config, sfg_config)
 
-        self._context = SfgContext(config, argv=script_args)
+        self._context = SfgContext(config.outer_namespace, config.codestyle, argv=script_args)
 
-        from .emitters.cpu.basic_cpu import BasicCpuEmitter
-        self._emitter = BasicCpuEmitter(basename, config)
+        from .emitters import HeaderSourcePairEmitter
+        self._emitter = HeaderSourcePairEmitter(basename,
+                                                config.header_extension,
+                                                config.source_extension,
+                                                config.output_directory)
 
     def clean_files(self):
         for file in self._emitter.output_files:
diff --git a/src/pystencilssfg/source_concepts/source_objects.py b/src/pystencilssfg/source_concepts/source_objects.py
index e2cad1ff32fdff6338b0ffb2ca838968d038d802..2f5a392f8cd6a45922543547f000acb12d37d78b 100644
--- a/src/pystencilssfg/source_concepts/source_objects.py
+++ b/src/pystencilssfg/source_concepts/source_objects.py
@@ -1,6 +1,6 @@
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Optional, Union, TypeAlias
+from typing import TYPE_CHECKING, Union, TypeAlias
 
 from abc import ABC, abstractmethod
 
@@ -19,7 +19,7 @@ class SrcObject:
 
     Two objects are identical if they have the same identifier and type string."""
 
-    def __init__(self, src_type: SrcType, identifier: Optional[str]):
+    def __init__(self, src_type: SrcType, identifier: str):
         self._src_type = src_type
         self._identifier = identifier
 
@@ -28,7 +28,7 @@ class SrcObject:
         return self._identifier
 
     @property
-    def name(self):
+    def name(self) -> str:
         """For interface compatibility with ps.TypedSymbol"""
         return self._identifier
 
@@ -53,7 +53,7 @@ TypedSymbolOrObject: TypeAlias = Union[TypedSymbol, SrcObject]
 
 
 class SrcField(SrcObject, ABC):
-    def __init__(self, src_type: SrcType, identifier: Optional[str]):
+    def __init__(self, src_type: SrcType, identifier: str):
         super().__init__(src_type, identifier)
 
     @abstractmethod