diff --git a/src/main/java/org/apache/creadur/tentacles/Main.java b/src/main/java/org/apache/creadur/tentacles/Main.java
index d3b2e93..dfbda6b 100644
--- a/src/main/java/org/apache/creadur/tentacles/Main.java
+++ b/src/main/java/org/apache/creadur/tentacles/Main.java
@@ -65,6 +65,7 @@
     private final Configuration configuration;
     private final FileSystem fileSystem;
     private final IOSystem ioSystem;
+    private final Templates templates;
 
     public Main(final String... args) throws Exception {
         this(new Configuration(args), new FileSystem(), new IOSystem());
@@ -73,15 +74,17 @@
     public Main(final Configuration configuration, final FileSystem fileSystem,
             final IOSystem ioSystem) throws Exception {
         this(configuration, fileSystem, new NexusClient(fileSystem, ioSystem),
-                ioSystem);
+                ioSystem, new Templates(ioSystem));
     }
 
     public Main(final Configuration configuration, final FileSystem fileSystem,
-            final NexusClient client, final IOSystem ioSystem) throws Exception {
+            final NexusClient client, final IOSystem ioSystem,
+            final Templates templates) throws Exception {
         this.client = client;
         this.configuration = configuration;
         this.fileSystem = fileSystem;
         this.ioSystem = ioSystem;
+        this.templates = templates;
 
         this.local =
                 new File(this.configuration.getRootDirectoryForLocalOutput());
@@ -138,8 +141,8 @@
             archives.add(archive);
         }
 
-        Templates.template("legal/archives.vm", this.ioSystem)
-                .add("archives", archives).add("reports", this.reports)
+        this.templates.template("legal/archives.vm").add("archives", archives)
+                .add("reports", this.reports)
                 .write(new File(this.local, "archives.html"));
 
         reportLicenses(archives);
@@ -152,7 +155,7 @@
             throws IOException {
         initLicenses(archives);
 
-        Templates.template("legal/licenses.vm", this.ioSystem)
+        this.templates.template("legal/licenses.vm")
                 .add("licenses", getLicenses(archives))
                 .add("reports", this.reports)
                 .write(new File(this.local, "licenses.html"));
@@ -198,8 +201,8 @@
         }
         for (final Archive archive : archives) {
 
-            Templates
-                    .template("legal/archive-licenses.vm", this.ioSystem)
+            this.templates
+                    .template("legal/archive-licenses.vm")
                     .add("archive", archive)
                     .add("reports", this.reports)
                     .write(new File(this.local, this.reports.licenses(archive)));
@@ -277,7 +280,7 @@
                 }
             }
 
-            Templates.template("legal/archive-notices.vm", this.ioSystem)
+            this.templates.template("legal/archive-notices.vm")
                     .add("archive", archive).add("reports", this.reports)
                     .write(new File(this.local, this.reports.notices(archive)));
         }
@@ -305,7 +308,7 @@
             }
         }
 
-        Templates.template("legal/notices.vm", this.ioSystem)
+        this.templates.template("legal/notices.vm")
                 .add("notices", notices.values()).add("reports", this.reports)
                 .write(new File(this.local, "notices.html"));
     }
diff --git a/src/main/java/org/apache/creadur/tentacles/Templates.java b/src/main/java/org/apache/creadur/tentacles/Templates.java
index 200e0ae..32e0047 100644
--- a/src/main/java/org/apache/creadur/tentacles/Templates.java
+++ b/src/main/java/org/apache/creadur/tentacles/Templates.java
@@ -23,11 +23,11 @@
 
 public final class Templates {
 
-    private static final Templates INSTANCE = new Templates();
-
+    private final IOSystem ioSystem;
     private final VelocityEngine engine;
 
-    private Templates() {
+    public Templates(final IOSystem ioSystem) {
+        this.ioSystem = ioSystem;
         final Properties properties = new Properties();
         properties.setProperty("file.resource.loader.cache", "true");
         properties.setProperty("resource.loader", "file, class");
@@ -45,11 +45,7 @@
         this.engine.init(properties);
     }
 
-    public static TemplateBuilder template(final String name, final IOSystem ioSystem) {
-        return INSTANCE.builder(name, ioSystem);
-    }
-
-    private TemplateBuilder builder(final String name, final IOSystem ioSystem) {
-        return new TemplateBuilder(name, ioSystem, this.engine);
+    public TemplateBuilder template(final String name) {
+        return new TemplateBuilder(name, this.ioSystem, this.engine);
     }
 }
