diff --git a/muppet/output/__init__.py b/muppet/output/__init__.py
index 4677c94371bacb6a09cc5a4f8573de9810c95ad1..a1fb41e214e68a46f5abc02ba778a11082289f31 100644
--- a/muppet/output/__init__.py
+++ b/muppet/output/__init__.py
@@ -76,24 +76,25 @@ class Templates:
 
     Almost all of these methods take these values:
 
-    :param path_base:
-        Prefix added to all links within output
-        TODO shouldn't this be bound to the object, since it should
-        NEVER change (during a run).
-
     :path breadcrumbs:
         Breadcrumb to current page.
     """
 
-    def __init__(self) -> None:
+    def __init__(self, path_base: str) -> None:
+        """
+        Construct a new instance.
+
+        :param path_base:
+            Prefix added to all links within output
+        """
         self.jinja = Environment(
             loader=FileSystemLoader('templates'),
             autoescape=False)
+        self.path_base = path_base
 
     def code_page(self, *,
                   title: str,
                   content: str,
-                  path_base: str,
                   breadcrumbs: Optional[Breadcrumbs] = None
                   ) -> str:  # pragma: no cover
         """
@@ -109,12 +110,11 @@ class Templates:
         return template.render(
                 title=title,
                 content=content,
-                path_base=path_base,
+                path_base=self.path_base,
                 breadcrumbs=breadcrumbs)
 
     def content(self, *,
                 content: str,
-                path_base: str,
                 breadcrumbs: Optional[Breadcrumbs] = None
                 ) -> str:  # pragma: no cover
         """
@@ -126,12 +126,11 @@ class Templates:
         template = self.jinja.get_template('content.html')
         return template.render(
                 content=content,
-                path_base=path_base,
+                path_base=self.path_base,
                 breadcrumbs=breadcrumbs)
 
     def index(self, *,
               modules: list['PuppetModule'],
-              path_base: str,
               breadcrumbs: Optional[Breadcrumbs] = None
               ) -> str:  # pragma: no cover
         """
@@ -142,7 +141,7 @@ class Templates:
         """
         template = self.jinja.get_template('index.html')
         return template.render(
-                path_base=path_base,
+                path_base=self.path_base,
                 modules=modules,
                 breadcrumbs=breadcrumbs)
 
@@ -152,7 +151,6 @@ class Templates:
                      module_author: str,
                      module_name: str,
                      doc_files: list[tuple[str, str]],
-                     path_base: str,
                      breadcrumbs: Optional[Breadcrumbs] = None,
                      left_sidebar: Optional[str] = None,
                      right_sidebar: Optional[str] = None,
@@ -190,22 +188,19 @@ class Templates:
                 module_author=module_author,
                 module_name=module_name,
                 doc_files=doc_files,
-                path_base=path_base,
+                path_base=self.path_base,
                 breadcrumbs=breadcrumbs,
                 left_sidebar=left_sidebar,
                 right_sidebar=right_sidebar)
 
 
-templates = Templates()
-
-
 @dataclass
 class ResourceTypeOutput:
     """Basic HTML implementation."""
 
     title: str
     module_name: str
-    children: list['HtmlSerializable'] = field(default_factory=list)
+    children: list[HtmlSerializable] = field(default_factory=list)
     link: Optional[str] = None
     summary: Optional[str] = None
 
@@ -399,7 +394,11 @@ class PuppetModule:
     # metadata: dict[str, Any]
     # doc_files: list[str]
 
-    def __init__(self, path: str, output_prefix: str, puppet_strings: PuppetStrings):
+    def __init__(self, *,
+                 path: str,
+                 output_prefix: str,
+                 puppet_strings: PuppetStrings,
+                 templates: Templates):
         """
         Construct a new instance.
 
@@ -418,6 +417,7 @@ class PuppetModule:
         self.strings_output = puppet_strings
         self.toc = self._build_module_toc()
         self.output_prefix = output_prefix
+        self.templates = templates
 
         abspath = os.path.abspath(self.path)
         self.doc_files: list[str] = \
@@ -520,12 +520,11 @@ class PuppetModule:
                          for (k, v) in read_doc_files(self.doc_files).items()]
 
         with open(os.path.join(destination, 'index.html'), 'w') as f:
-            f.write(templates.module_index(
+            f.write(self.templates.module_index(
                 module_name=self.name,
                 module_author='TODO',  # module.metadata['author'],
                 breadcrumbs=crumbs,
                 content=toc,
-                path_base=self.output_prefix,
                 doc_files=doc_files_toc,
                 # left_sidebar=(),
                 right_sidebar=''.join([
@@ -562,10 +561,9 @@ class PuppetModule:
             with open(os.path.join(dir, 'source.pp.html'), 'w') as f:
 
                 with open(self.file(puppet_class.file), 'r') as g:
-                    f.write(templates.code_page(
+                    f.write(self.templates.code_page(
                         title='',
                         content=highlight(g.read(), 'puppet'),
-                        path_base=self.output_prefix,
                         breadcrumbs=crumbs))
 
             # TODO reimplement this?
@@ -584,10 +582,9 @@ class PuppetModule:
 
             title, body = format_class(puppet_class)
             with open(os.path.join(dir, 'index.html'), 'w') as f:
-                f.write(templates.code_page(
+                f.write(self.templates.code_page(
                     title=self.name,
                     content=body,
-                    path_base=self.output_prefix,
                     breadcrumbs=crumbs))
 
             # puppet_class['file']
@@ -610,10 +607,9 @@ class PuppetModule:
 
             title, body = format_type_alias(type_alias, type_alias.name)
             with open(os.path.join(dir, 'index.html'), 'w') as f:
-                f.write(templates.code_page(
+                f.write(self.templates.code_page(
                     title=title,
-                    content=body,
-                    path_base=self.output_prefix))
+                    content=body))
 
     def _output_doc_files(self, destination: str, files: dict[str, str]) -> None:
         """
@@ -653,9 +649,8 @@ class PuppetModule:
                                  name)
 
             with open(out_path, 'w') as f:
-                f.write(templates.content(
+                f.write(self.templates.content(
                     content=content,
-                    path_base=self.output_prefix,
                     breadcrumbs=crumbs))
 
             doc_files[name] = os.path.join(self.name, name, 'index.html')
@@ -742,6 +737,8 @@ class PuppetEnvironment:
         self.name = os.path.basename(source_path)
         self.output_prefix = output_prefix
 
+        self.templates = Templates(output_prefix)
+
         self.modules: list[PuppetModule] = []
         dir = os.path.join(self.source_path, 'modules')
 
@@ -755,7 +752,8 @@ class PuppetEnvironment:
                     PuppetModule(path=module_path,
                                  output_prefix=output_prefix,
                                  puppet_strings=puppet_strings_cached(module_path,
-                                                                      cache)))
+                                                                      cache),
+                                 templates=self.templates))
 
     def output(self, destination: str) -> None:
         """
@@ -771,8 +769,7 @@ class PuppetEnvironment:
 
         with open(os.path.join(destination, 'index.html'), 'w') as f:
             # TODO breadcrumbs
-            f.write(templates.index(modules=self.modules,
-                                    path_base=self.output_prefix))
+            f.write(self.templates.index(modules=self.modules))
 
         for module in self.modules:
             module.output(destination)