diff --git a/data/web/common/base.js b/data/web/common/base.js
deleted file mode 100644
index b362bc94fc..0000000000
--- a/data/web/common/base.js
+++ /dev/null
@@ -1,4 +0,0 @@
-function parseJson(elementId) {
- var jsonElement = document.getElementById(elementId);
- return JSON.parse(jsonElement.innerHTML);
-}
diff --git a/data/web/documentation/factory.hbs b/data/web/documentation/factory.hbs
new file mode 100644
index 0000000000..6fec23432e
--- /dev/null
+++ b/data/web/documentation/factory.hbs
@@ -0,0 +1,24 @@
+{{#each data}}
+
-
-
OpenSpace Keybindings
-
Version: {{version.[0]}}.{{version.[1]}}.{{version.[2]}}
- {{#each keybindings}}
- {{> keybinding}}
- {{/each}}
-
-
\ No newline at end of file
diff --git a/data/web/keybindings/script.js b/data/web/keybindings/script.js
deleted file mode 100644
index 018d49eb48..0000000000
--- a/data/web/keybindings/script.js
+++ /dev/null
@@ -1,45 +0,0 @@
-window.onload = function () {
- var mainTemplateElement = document.getElementById('mainTemplate');
- var mainTemplate = Handlebars.compile(mainTemplateElement.innerHTML);
-
- var keybindingTemplateElement = document.getElementById('keybindingTemplate');
- Handlebars.registerPartial('keybinding', keybindingTemplateElement.innerHTML);
-
- Handlebars.registerHelper('urlify', function(options, context) {
- var data = context.data;
- var identifier = options.replace(" ", "-").toLowerCase();
-
- while (data = data._parent) {
- if (data.key !== undefined) {
- identifier = data.key + "-" + identifier;
- }
- }
-
- return identifier;
- });
-
- Handlebars.registerHelper('level', function(options, context) {
- var data = context.data;
- var level = 0;
-
- while (data = data._parent) {
- if (data.key !== undefined) {
- ++level;
- }
- }
-
- return level;
- });
-
- keybindings.sort(function (a, b) {
- return a.key < b.key ? -1 : (a.key > b.key ? 1 : 0);
- });
-
- var data = {
- keybindings: keybindings,
- version: version
- }
-
- var contents = mainTemplate(data);
- document.body.innerHTML = contents;
-}
\ No newline at end of file
diff --git a/data/web/luascripting/main.hbs b/data/web/luascripting/main.hbs
deleted file mode 100644
index 1d67289346..0000000000
--- a/data/web/luascripting/main.hbs
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
OpenSpace Scene License Information
-
Version: {{version.[0]}}.{{version.[1]}}.{{version.[2]}}
- {{#each sceneLicenses}}
- {{> scenelicense}}
- {{/each}}
-
-
\ No newline at end of file
diff --git a/data/web/scenelicense/script.js b/data/web/scenelicense/script.js
deleted file mode 100644
index 9e1e815d80..0000000000
--- a/data/web/scenelicense/script.js
+++ /dev/null
@@ -1,41 +0,0 @@
-window.onload = function () {
- var mainTemplateElement = document.getElementById('mainTemplate');
- var mainTemplate = Handlebars.compile(mainTemplateElement.innerHTML);
-
- var sceneLicenseTemplate = document.getElementById('sceneLicenseTemplate');
- Handlebars.registerPartial('scenelicense', sceneLicenseTemplate.innerHTML);
-
- Handlebars.registerHelper('urlify', function(options, context) {
- var data = context.data;
- var identifier = options.replace(" ", "-").toLowerCase();
-
- while (data = data._parent) {
- if (data.key !== undefined) {
- identifier = data.key + "-" + identifier;
- }
- }
-
- return identifier;
- });
-
- Handlebars.registerHelper('level', function(options, context) {
- var data = context.data;
- var level = 0;
-
- while (data = data._parent) {
- if (data.key !== undefined) {
- ++level;
- }
- }
-
- return level;
- });
-
- var data = {
- sceneLicenses: sceneLicenses,
- version: version
- }
-
- var contents = mainTemplate(data);
- document.body.innerHTML = contents;
-}
\ No newline at end of file
diff --git a/include/openspace/documentation/documentationengine.h b/include/openspace/documentation/documentationengine.h
index c0d6d6d7ee..24760ed2d7 100644
--- a/include/openspace/documentation/documentationengine.h
+++ b/include/openspace/documentation/documentationengine.h
@@ -70,6 +70,14 @@ public:
*/
void addDocumentation(Documentation documentation);
+ /* Adds the \p templates to the list of templates that are written to the
+ * documentation html file.
+ * \param templates Vector of templates to add. Most of the time this list
+ * will just contain one item, but some modules may wish to provide
+ * multiple templates for subtypes, etc
+ */
+ void addHandlebarTemplates(std::vector