diff --git a/templates/doc/korap/kalamar.html.ep b/templates/doc/korap/kalamar.html.ep
index 8e73b0f..7c83214 100644
--- a/templates/doc/korap/kalamar.html.ep
+++ b/templates/doc/korap/kalamar.html.ep
@@ -7,3 +7,5 @@
 <p><strong>Main developer:</strong> Nils Diewald</p>
 
 <p>Kalamar is the main user frontend of KorAP. It is based on <%= doc_ext_link_to 'Mojolicious', "http://mojolicio.us/" %> and written in Perl and JavaScript.</p>
+
+<p>Kalamar is open source and available on <%= doc_ext_link_to 'GitHub', "https://github.com/KorAP/Kalamar" %>.</p>
diff --git a/templates/layouts/default.html.ep b/templates/layouts/default.html.ep
deleted file mode 100644
index 221f7d5..0000000
--- a/templates/layouts/default.html.ep
+++ /dev/null
@@ -1,113 +0,0 @@
-<!DOCTYPE html>
-<html>
-%= include 'partial/header'
-  <body>
-
-%# -- Background crab
-% if (!param('q') && current_route eq 'index') {
-<div id="kalamar-bg"></div>
-% };
-
-% my $location;
-% my $search_route;
-% unless (current_route 'tutorial') {
-<div id="tutorial">
-%= javascript begin
-document.write('<a href="' + getTutorialPage().replace(/\?embedded=1/, '') + '" ');
-document.write('target="_blank"><i title="Open in new tab" ');
-document.write('class="fa fa-external-link-square"></i></a>');
-% end
-  <i onclick="closeTutorial()"
-     title="close"
-     class="fa fa-toggle-up"></i>
-  <iframe src="about:blank"></iframe>
-</div>
-%   if (current_route eq 'match') {
-%     $search_route = url_for('search_corpus');
-%     $location = 'in corpus <span class="location">' . stash('corpus_id') . '</span>';
-%   }
-%   else {
-%     $search_route = url_for;
-%     if (stash('doc_id')) {
-%       $location = ' in document <span class="location">' . stash('corpus_id') . '/' . stash('doc_id') . '</span>';
-%     }
-%     elsif (stash('corpus_id')) {
-%       $location = ' in corpus <span class="location">' . stash('corpus_id') . '</span>';
-%     }
-%     elsif (stash('collection_id')) {
-%       $location = ' in collection <span class="location">' . stash('collection_id') . '</span>';
-%     };
-%   }
-% }
-% else {
-%   $search_route = url_for('index');
-% };
-
-<div id="top">
-  <a href="<%= url_for 'index' %>"><h1><span>KorAP - Korpusanalyseplattform der nächsten Generation</span></h1></a>
-
-%= form_for $search_route, autocomplete => 'off', begin
-  <div id="searchbar">
-%= search_field 'q', id => 'q-field', autofocus => 'autofocus', placeholder => 'Find ...'
-    <button type="submit"><i class="fa fa-search"></i></button>
-%   if (kalamar_test_port()) {
-    <button type="submit" name="action" value="inspect"><i class="fa fa-code"></i></button>
-%   };
-    <i onclick="hint.popUp()" class="fa fa-arrow-circle-down show-hint"></i>
-  </div>
-  <% if ($location) { %><%== $location %><% } %>
-  with
-  <div class="select">
-    %= select_field ql => [[Poliqarp => 'poliqarp'], ['Cosmas II' => 'cosmas2'], ['Annis' => 'annis'], ['CQL v1.2' => 'cql']], id => 'ql-field'
-  </div>
-
-<div id="button-right">
-%#
-%# -- The cutoff checkbox
-% unless (param('q')) { param(cutoff => 1) };
-%= check_box cutoff => 1, id => 'q-cutoff-field'
-<label for="q-cutoff-field"><span></span>Glimpse</label>
-%#
-%# -- The tutorial button
-% unless (current_route 'tutorial') {
-<button type="button" title="Tutorial" onclick="openTutorial()">\
-<i class="fa fa-graduation-cap"></i>\
-</button>
-% };
-%#
-%# -- The Alignment button
-% if (param('q') && (search->total_results // 0) != 0) {
-<button type="button" title="Alignment" onclick="toggleAlignment(this)">\
-<i class="fa fa-align-right"></i>\
-</button>
-% }
-</div>
-%#
-% end
-</div>
-
-
-%= content 'sidebar' => begin
-<div id="sidebar">
-  %= include 'collections'
-  <i class="fa fa-bars"></i>
-</div>
-% end
-
-
-<main>
-%= content main => begin
-  <p>KorAP is a Corpus Analysis Platform, serving textual data provided by the <a href="http://www.ids-mannheim.de">Institute for German Language</a>.</p>
-  <p>For information how to search in KorAP, have a look at the <%= link_to 'tutorial', 'tutorial' %>.</p>
-  <p>Currently the scope of searching is limited to public users - for access to restricted corpora, please visit the <a href="http://korap.ids-mannheim.de/app">first frontend</a>.</p>
-
-<p><span>Developed at the Institute for German Language (IDS)</span></p>
-
-% end
-</main>
-
-%= content 'javascript'
-%= include 'partial/javascript'
-%= notifications 'Alertify', -no_include
-  </body>
-</html>
diff --git a/templates/layouts/snippet.html.ep b/templates/layouts/snippet.html.ep
deleted file mode 100644
index ac7f8f7..0000000
--- a/templates/layouts/snippet.html.ep
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<html>
-%= include 'partial/header'
-  <body style="background-color:white">
-<main<% if (stash('embedded')) { %> class="embedded"<% } %>>
-%= content 'main' => begin
-    <p>Welcome to the tutorial</p>
-% end
-</main>
-
-%= notifications 'Alertify'
-
-%= javascript begin
-var sidebar = document.getElementById("sidebar");
-if (sidebar !== null) {
-  sidebar.addEventListener("click",function(){
-    this.classList.toggle("active");
-  },false);
-};
-% end
-
-  </body>
-</html>
diff --git a/templates/match_info.html.ep b/templates/match_info.html.ep
deleted file mode 100644
index 5fa0ddf..0000000
--- a/templates/match_info.html.ep
+++ /dev/null
@@ -1,7 +0,0 @@
-% content main => begin
-<div id="search" class="match">
-  <ol class="left-aligned">
-%= include 'match'
-  </ol>
-</div>
-% end
diff --git a/templates/partial/javascript.html.ep b/templates/partial/javascript.html.ep
deleted file mode 100644
index 0ec515b..0000000
--- a/templates/partial/javascript.html.ep
+++ /dev/null
@@ -1,62 +0,0 @@
-%= javascript begin
-
-// Create new hint
-var hint = Object.create(Hint).init();
-
-// Add toggleClass method similar to jquery
-HTMLElement.prototype.toggleClass = function (c1, c2) {
-  var cl = this.classList;
-  if (cl.contains(c1)) {
-    cl.add(c2);
-    cl.remove(c1);
-  }
-  else {
-    cl.remove(c2);
-    cl.add(c1);
-  };
-};
-
-function openTutorial (o) {
-  var tut = document.getElementById("tutorial");
-  tut.classList.add("active")
-  var iframe = tut.getElementsByTagName("iframe")[0];
-  iframe.setAttribute("src", getTutorialPage());
-};
-
-function closeTutorial (o) {
-  document.getElementById("tutorial").classList.remove("active");
-};
-
-function useQuery (o) {
-  var q = o.getAttribute("data-query");
-  var ql = o.getAttribute("data-query-language");
-  var qc = o.getAttribute("data-query-cutoff");
-  if (qc !== 0 && qc !== "0" && qc !== "off" && qc !== null) {
-    document.getElementById("q-cutoff-field").checked = true;
-  };
-
-  var qlf = document.getElementById("ql-field").options;
-  for (i in qlf)
-    if (qlf[i].value == ql) qlf[i].selected = true;
-
-  document.getElementById("q-field").value = q;
-  closeTutorial();
-};
-
-document.getElementById("sidebar").addEventListener("click",function(){
-  this.classList.toggle("active");
-},false);
-
-%# document.getElementById("top")
-%#         .querySelectorAll("span.location")
-%#         .addEventListener("click",function() {
-%#   document.getElementById("sidebar").classList.toggle("active");
-%# }, false);
-
-function toggleAlignment (o) {
-  var ol = document.querySelector("#search > ol");
-  ol.toggleClass("align-left", "align-right");
-  o.firstChild.toggleClass("fa-align-right", "fa-align-left");
-}; 
-
-% end
diff --git a/templates/query_info.html.ep b/templates/query_info.html.ep
deleted file mode 100644
index 02710ce..0000000
--- a/templates/query_info.html.ep
+++ /dev/null
@@ -1,4 +0,0 @@
-% content main => begin
-<p class="found">&nbsp;</p>
-%= include 'query'
-% end
