diff --git a/dev/demo/all.html b/dev/demo/all.html
index 9b63bc4..8417903 100644
--- a/dev/demo/all.html
+++ b/dev/demo/all.html
@@ -33,7 +33,7 @@
 		 id="q-field"
 		 value="abcdefghijklmnopqrstuvwxyz"
 		 autofocus="autofocus" />
-	  <button type="submit"><span>Go</span></button>
+	  <button id="qsubmit" type="submit"><span>Go</span></button>
 	  <!-- <i class="fa fa-arrow-circle-down show-hint" onclick="hint.popUp()"></i> -->
 	</div>
 
@@ -250,7 +250,7 @@
 	<p ><strong>KorAP</strong> is a new Corpus Analysis Platform, suited for large, multiple annotated corpora and complex search queries independent of particular research questions.</p>
 	<p>This is the new frontend for KorAP, with currently no access to restricted corpora. For full access, please visit the <a href="http://korap.ids-mannheim.de/app">first frontend</a>.</p>
 
-    <p><strong>New to KorAP?</strong> Please check out our <a href="#" onclick="tourshow()"> guided tour </a> or our <a href="#">tutorial</a>!</p>
+    <p><strong>New to KorAP?</strong> Please check out our <a href="#" onclick="KorAP.tourshow()"> guided tour </a> or our <a href="#" onclick="KorAP.tourshowR()"> secondTour </a> our <a href="#">tutorial</a>!</p>
 
 	<p>KorAP is developed at the <a href="http://www.ids-mannheim.de">Institute for the German Language</a> and funded by the <a href="http://www.leibniz-gemeinschaft.de/en/about-us/leibniz-competition/projekte-2011/2011-funding-line-2/">Leibniz Association</a>. The separated modules are being published as open source at <a href="http://github.com/KorAP">GitHub</a>.</p>
 
diff --git a/dev/demo/alldemo.js b/dev/demo/alldemo.js
index c32ce7e..6f9f60b 100644
--- a/dev/demo/alldemo.js
+++ b/dev/demo/alldemo.js
@@ -804,13 +804,6 @@
   };
 
 
-  tourshow =  function(){
-    var tourClass = require('tour/tours');
-    let tour = tourClass.guidedTour();
-    tour.start();
-  };
-  
-
   /**
    * Do some things at the beginning.
    */
diff --git a/dev/js/spec/tourSpec.js b/dev/js/spec/tourSpec.js
index 5e4dca6..f30cc32 100644
--- a/dev/js/spec/tourSpec.js
+++ b/dev/js/spec/tourSpec.js
@@ -4,71 +4,115 @@
  * @author Helge Stallkamp
  */
 
-define(['tour/tours', 'vc'], function(tourClass, vcClass){
+define(['tour/tours', 'vc', 'session'], function(tourClass, vcClass, sessionClass){
   const loc   = KorAP.Locale;
  
   //TODO Read this file from the file system, see https://korap.ids-mannheim.de/gerrit/#/c/KorAP/Kalamar/+/2241/
-  var introKorAP  = "<form autocomplete='off' action='/' id='searchform'>" +
-  "<div id='searchbar'>" +
-    "<input autocapitalize='off' autocomplete='off ' autocorrect='off' autofocus='autofocus' id='q-field' name='q' placeholder='Find ...' spellcheck='false' type='search'>" +
-    "<button type='submit' title='Go!'><span>Go!</span></button>" +
-  "</div>"+
-  "<!-- Search in the following virtual collection -->"+
-  "<div id='vc-view'></div>" +
-  "in" +
-  "<input id='collection' name='collection' type='text'>" +
-  "with" +
-  "<span class='select'>" +
-    "<select id='ql-field' name='ql'><option value='poliqarp'>Poliqarp</option><option value='cosmas2'>Cosmas II</option><option value='annis'>Annis QL</option><option value='cql'>CQL v1.2</option><option value='fcsql'>FCSQL</option></select>" +
-  "</span>" +
-  "<div class='button right'>" +
-    "<input checked class='checkbox' id='q-cutoff-field' name='cutoff' type='checkbox' value='1'>"+
-    "<label for='q-cutoff-field' title='Just show the first matches in arbitrary order'><span id='glimpse'></span>Glimpse</label>" +
-    "<a class='tutorial' href='/doc' id='view-tutorial' tabindex='-1' title='Tutorial'><span>Tutorial</span></a>" +
-  "</div>" +
-  "<div class='clear'></div>" +
-  "</form>";
+  var introKorAP =
+  	"<form autocomplete='off' action='/' id='searchform'>" + 
+    "<div id='searchbar' class=''>" +
+      "<input autocapitalize='off' autocomplete='off' autocorrect='off' autofocus='autofocus' id='q-field' name='q' placeholder='Finde ...' spellcheck='false' type='search'>" +
+      "<button type='submit' id='qsubmit' title='Los!'><span>Los!</span></button>" + 
+    "</div>" + 
+    "<!-- Search in the following virtual collection -->"+
+    "<div id='vc-view'></div>" +
+    "in" +
+    "<span id='vc-choose' class='select'><span>allen Korpora</span></span>" +
+    "<input id='collection' name='collection' type='text' style='display: none;'>" +
+      "mit" +
+      "<span class='select'>" +
+        "<select id='ql-field' name='ql' style='display: none;'>" +
+            "<option value='poliqarp'>Poliqarp</option>" +
+            "<option value='cosmas2'>Cosmas II</option>" +
+            "<option value='annis'>Annis QL</option>" +
+            "<option value='cql'>CQL v1.2</option>" +
+            "<option value='fcsql'>FCSQL</option>" +
+        "</select>" +
+      "<span style='display: inline;'> Poliqarp</span>" +
+        "<ul style='outline: currentcolor none 0px;' tabindex='0' class='menu roll'>" +
+          "<span class='pref'></span>" +
+          "<div class='lengthField'>" +
+            "<span>Poliqarp--</span>" +
+            "<span>Cosmas II--</span>" +
+            "<span>Annis QL--</span>" +
+            "<span>CQL v1.2--</span>" +
+            "<span>FCSQL--</span>" +
+            "</div><div class='ruler' style='display: none;'><span></span><div></div>" +
+          "</div>" +
+         "</ul>" +
+       "</span>" +
+       "<div class='button right'>" +
+         "<input checked='' class='checkbox' id='q-cutoff-field' name='cutoff' type='checkbox' value='1'>" +
+           "<label for='q-cutoff-field' title='Zeige nur die ersten Treffer in beliebiger Reihenfolge'><span id='glimpse'></span>Glimpse</label>" +
+           "<a class='tutorial' id='view-tutorial' tabindex='-1' title='Einführung'><span>Einführung</span></a>"+
+       "</div>" +
+       "<div class='clear'></div>"+
+       "</form>" + 
+       "<div class='hint mirror' style='height: 0px; left: 238px; top: 36px; width: 1272px; padding-left: 2px; margin-left: 0px; border-left-width: 2px; border-left-style: solid; font-size: 14.6667px; font-family: Noto Sans;'>" +
+         "<span></span>" +
+           "<div id='hint' class=''>" +
+           "<div style='display: none;' class='alert hint'></div>" +
+           "<ul style='outline: currentcolor none 0px;' tabindex='0' class='menu roll hint'>" +
+             "<span class='pref'></span>" +
+             "<div class='lengthField'>" +
+               "<span>Base Annotation--</span>" +
+               "<span class='desc'>Structure--</span>" +
+               "<span>DeReKo--</span><span class='desc'>Structure--</span>"+
+             "</div>"
+             "<div class='ruler' style='display: none;'><span></span><div></div></div>"
+            "</ul>" +
+           "</div>" +
+          "</div>"; 
 
   let template = document.createElement('template');
   html = introKorAP.trim(); // Do not return a text node of whitespace as the result
   template.innerHTML = html;
-  intrkorap = template.content.firstChild;
-
+  intrkorap = template.content;
   
   //TODO Add hint and vc-choose, they are not part of the generated file
   describe('KorAP.GuidedTour', function(){
     it('IDs and classes, that are needed for the guided tour should be in existence', function(){
       expect(intrkorap.querySelector('#searchbar')).not.toBeNull();
       expect(intrkorap.querySelector('#q-field')).not.toBeNull();
-      //expect(intrkorap.querySelector('#hint')).not.toBeNull();
-      //expect(intrkorap.querySelector('#vc-choose')).not.toBeNull();     
+      expect(intrkorap.querySelector('#hint')).not.toBeNull();
+      expect(intrkorap.querySelector('#vc-choose')).not.toBeNull();     
       expect(intrkorap.querySelector('#vc-view')).not.toBeNull();
       expect(intrkorap.querySelector('#ql-field').parentNode).not.toBeNull();
       expect(intrkorap.querySelector('#glimpse')).not.toBeNull();
       expect(intrkorap.querySelector('#view-tutorial')).not.toBeNull();
-      expect(intrkorap.querySelector('#searchbar button[type=submit]')).not.toBeNull();
+      expect(intrkorap.querySelector('#qsubmit')).not.toBeNull();
     });
     
    
+  
    it('Guided Tour should be started and display steps and labels in the right order', function(){
-     let testTour = tourClass.guidedTour(intrkorap);
-     testTour.start();
-     let totalSteps = testTour.stepCount;
- 
+     let searchTour = tourClass.gTstartSearch(intrkorap);
+     searchTour.start();
+     let totalSteps = searchTour.stepCount;
      expect(document.querySelector(".introjs-tooltiptext").textContent).toEqual(loc.TOUR_sear1);
      expect(document.querySelector(".introjs-skipbutton").textContent).toEqual(loc.TOUR_lskip);
      expect(document.querySelector(".introjs-prevbutton").textContent).toEqual(loc.TOUR_lprev);
      expect(document.querySelector(".introjs-nextbutton").textContent).toEqual(loc.TOUR_lnext);
-     testTour.exit();
+     searchTour.exit();
      
      for(let i = 2; i <= totalSteps; i++){
-       testTour.goToStepNumber(i);
-       expect(document.querySelector(".introjs-tooltiptext").textContent).toEqual(testTour.testIntros[i-1]);
+       searchTour.goToStepNumber(i);
+       expect(document.querySelector(".introjs-tooltiptext").textContent).toEqual(searchTour.testIntros[i-1]);
        if(i == totalSteps){
-         expect(document.querySelector('.introjs-donebutton').textContent).toEqual(loc.TOUR_ldone);
-       }
-       testTour.exit();
-     }   
+         expect(document.querySelector(".introjs-donebutton").textContent).toEqual(loc.TOUR_seargo);
+         expect(document.querySelector(".introjs-prevbutton").textContent).toEqual(loc.TOUR_lprev);
+         expect(document.querySelector(".introjs-nextbutton").classList.contains("introjs-disabled")).toBe(true);
+       } 
+       searchTour.exit();
+     } 
+     
+     let resultTour = tourClass.gTshowResults(intrkorap);
+     KorAP.session = sessionClass.create('KalamarJSDem'); 
+     resultTour.start();
+     expect(document.querySelector(".introjs-tooltiptext").textContent).toEqual(loc.TOUR_result);
+     expect(document.querySelector(".introjs-donebutton").textContent).toEqual(loc.TOUR_ldone);   
+     resultTour.exit();
+    
    }); 
   });
 }    
diff --git a/dev/js/src/app/de.js b/dev/js/src/app/de.js
index 332ee07..142c276 100644
--- a/dev/js/src/app/de.js
+++ b/dev/js/src/app/de.js
@@ -1,3 +1,3 @@
 window.KorAP = window.KorAP || {};
 KorAP.Locale = KorAP.Locale || {};
-require(['loc/de','init']);
+require(['loc/dereko', 'loc/de', 'init']);
diff --git a/dev/js/src/app/en.js b/dev/js/src/app/en.js
index e851239..3521c84 100644
--- a/dev/js/src/app/en.js
+++ b/dev/js/src/app/en.js
@@ -1,3 +1,3 @@
 window.KorAP = window.KorAP || {};
 KorAP.Locale = KorAP.Locale || {};
-require(['init']);
+require(['loc/dereko', 'init']);
diff --git a/dev/js/src/init.js b/dev/js/src/init.js
index b78e870..ec11cf5 100644
--- a/dev/js/src/init.js
+++ b/dev/js/src/init.js
@@ -65,7 +65,16 @@
 
   KorAP.vc = vcClass.create(vcArray); 
   
+  KorAP.tourshow =  function(){
+    tourClass.gTstartSearch().start();
+  };
+ 
+  KorAP.tourshowR = function(){
+    tourClass.gTshowResults().start();
+  };
+    
   domReady(function (event) {
+      
     var obj = {};
 
     // What should be visible in the beginning?
@@ -343,7 +352,13 @@
         };
       });
     };
-
+ 
+    
+    //Starts the guided tour at the next page
+    if(KorAP.session.get("tour")){
+      tourClass.gTshowResults().start();
+    }
+    
     /**
      * Init hint helper
      * has to be final because of
@@ -360,11 +375,4 @@
     return obj;
   });
   
-
-  tourshow =  function(){
-    let tour = tourClass.guidedTour();
-    tour.start();
-  };
-   
-  
 });
diff --git a/dev/js/src/loc/de.js b/dev/js/src/loc/de.js
index 76f72bc..5cd7b68 100644
--- a/dev/js/src/loc/de.js
+++ b/dev/js/src/loc/de.js
@@ -52,7 +52,7 @@
   
   //Guided Tour: Steps
   loc.TOUR_sear1 = "Geben Sie die Suchanfrage hier ein.";
-  loc.TOUR_sear2 = "Zum Beispiel die Suche nach 'Baum'";
+  loc.TOUR_sear2 = "Zum Beispiel die Suche nach '"+ loc.TOUR_Qexample +  "'";
   loc.TOUR_searAnnot ="Für die Suche nach Annotationen steht der Annotationsassistent zur Verfügung.";
   loc.TOUR_annotAss = "Der Annotationsassistent erleichert die Formulierung von Suchanfragen mit Annotationen.";
   loc.TOUR_vccho1 = "Öffnen des Korpusassistenten";
@@ -62,4 +62,8 @@
   loc.TOUR_glimpse = "Beim Wählen dieser Option wird festgelegt ob nur die ersten Treffer in zufälliger Reihenfolge ausgewählt werden.";
   loc.TOUR_help = "Hier finden Sie Hilfe zu KorAP.";
   loc.TOUR_seargo = "Suchanfrage starten";
+  
+  //Guided Tour: explain the result
+  loc.TOUR_result = "Viel Spaß mit KorAP!";
+  
 });
diff --git a/dev/js/src/loc/dereko.js b/dev/js/src/loc/dereko.js
new file mode 100644
index 0000000..1bd7a57
--- /dev/null
+++ b/dev/js/src/loc/dereko.js
@@ -0,0 +1,10 @@
+/**
+ * Corpus specific localization, here for DeReKo (http://www1.ids-mannheim.de/kl/projekte/korpora.html)
+ * 
+ * @author Helge Stallkamp
+ */
+
+define(function () {
+  const loc = KorAP.Locale;
+  loc.TOUR_Qexample = loc.TOUR_Qexample || "laufen";
+});
\ No newline at end of file
diff --git a/dev/js/src/tour/tours.js b/dev/js/src/tour/tours.js
index f33c56d..b4302e0 100644
--- a/dev/js/src/tour/tours.js
+++ b/dev/js/src/tour/tours.js
@@ -5,19 +5,19 @@
  */
 
 define(['lib/intro', 'vc'], function(introClass, vcClass) {
-  
+
   //needed for localization of labels and contents of the tour
   const loc   = KorAP.Locale;
-  
+
   //labels for nextStep, previousStep, done and abort
   loc.TOUR_lskip = loc.TOUR_lskip || "Abort";
   loc.TOUR_lprev = loc.TOUR_lprev || "Back";
   loc.TOUR_lnext = loc.TOUR_lnext || "Next";
   loc.TOUR_ldone = loc.TOUR_ldone || "Done";
-  
-  //localization tours
+
+  //localization guided tour gTstartSearch
   loc.TOUR_sear1 = loc.TOUR_sear1 || "Enter your search enquiry here.";
-  loc.TOUR_sear2 = loc.TOUR_sear2 || "For example the search for 'Baum'...";
+  loc.TOUR_sear2 = loc.TOUR_sear2 || "For example the search for '" +  loc.TOUR_Qexample + "'";
   loc.TOUR_searAnnot = loc.TOUR_searAnnot || "Annotation helper: By clicking here, the annotations of the differents layers are displayed and can be selected.";
   loc.TOUR_annotAss =  loc.TOUR_annotAss || "The annoation assistant helps to formulate queries with annotations";
   loc.TOUR_vccho1 = loc.TOUR_vccho1 || "Choose corpus by clicking here.";  
@@ -27,35 +27,39 @@
   loc.TOUR_help = loc.TOUR_help || "Help and more information about KorAP.";
   loc.TOUR_glimpse = loc.TOUR_glimpse || "Select to show only the first hits in arbitrary order.";
   loc.TOUR_seargo = loc.TOUR_seargo || "Start the search.";
+  //localization guided Tour gTshowResults
+  loc.TOUR_result = loc.TOUR_result || "Have fun with KorAP!";
   
   //localization of button labels
-   let labelOptions = {
-          'skipLabel': loc.TOUR_lskip, 
-          'prevLabel': loc.TOUR_lprev,
-          'nextLabel': loc.TOUR_lnext,
-          'doneLabel': loc.TOUR_ldone,
-          'showStepNumbers': false,
+  let labelOptions = {
+      'skipLabel': loc.TOUR_lskip, 
+      'prevLabel': loc.TOUR_lprev,
+      'nextLabel': loc.TOUR_lnext,
+      'doneLabel': loc.TOUR_ldone,
+      'showStepNumbers': false,
   };
-  
-  let intro = introClass();
-  intro.setOptions(labelOptions);
-  
-  
+
   return{
-    
+
     /** 
-     * Guided Tour: Definition of steps 
+     * Guided Tour gTstartSearch: Explains the search functionality
      */
-    guidedTour:function(elparam){
-      
+    gTstartSearch:function(elparam){
+
+      let intro = introClass();
+      intro.setOptions(labelOptions);
+      intro.setOption('doneLabel', loc.TOUR_seargo);
+     
+      //for testing purposes
       var doe = document;
       if(elparam){
         doe = elparam;
       }
-  
+
       let input = doe.querySelector("#q-field");
       input.value="";
       
+
       //steps of the example tour
       let Steps =[
         {
@@ -72,82 +76,121 @@
           element: '#hint',
           intro: loc.TOUR_searAnnot,
           position: 'bottom'
-         },
-         {
+        },
+        {
           element:'#vc-choose',
           intro: loc.TOUR_vccho1,
           position: "bottom",
-         },
-         {
-           element:'#vc-view',
-           intro: loc.TOUR_vccho2,
-           position: "bottom",
-         }, 
-         {
-           element: doe.querySelector('#ql-field').parentNode,
-           intro: loc.TOUR_qlfield,
-           position: "bottom",
-         },  
-         {
-           element:'#glimpse',
-           intro: loc.TOUR_glimpse,
-           position: "bottom",
-         }, 
-         {
-           element:'#view-tutorial',
-           intro: loc.TOUR_help,
-           position: "bottom",
-         },
-         {
-           element: doe.querySelector('#searchbar button[type=submit]'),
-           intro: loc.TOUR_seargo,
-           position: "bottom",
-         },
-       ];
-   
+        },
+        {
+          element:'#vc-view',
+          intro: loc.TOUR_vccho2,
+          position: "bottom",
+        }, 
+        {
+          element: doe.querySelector('#ql-field').parentNode,
+          intro: loc.TOUR_qlfield,
+          position: "bottom",
+        },  
+        {
+          element:'#glimpse',
+          intro: loc.TOUR_glimpse,
+          position: "bottom",
+        }, 
+        {
+          element:'#view-tutorial',
+          intro: loc.TOUR_help,
+          position: "bottom",
+        },
+        {
+          element: '#qsubmit',
+          intro: loc.TOUR_seargo,
+          position: "bottom",
+        },
+        ];
+
       //pass in the Steps array created earlier
       intro.setOptions({steps: Steps});
-   
+
       //total number of steps, needed for jasmine tests
-      //See also: introJS.totalSteps() merge requested: //github.com/usablica/intro.js/pull/268/files
+      //TODO see also: introJS.totalSteps() merge requested: //github.com/usablica/intro.js/pull/268/files
       intro.stepCount = Steps.length;
-    
+
       //array of intro content needed for efficient testing
       intro.testIntros = [];
-        for(let i = 0; i< Steps.length; i++){
+
+      for(let i = 0; i< Steps.length; i++){
         intro.testIntros.push(Steps[i].intro);
-        }
-  
-        //changes before executing the single steps
-        intro.onbeforechange(function(targetedElement){
-          switch(targetedElement.id){
-          case "searchbar": 
-            if(this._currentStep == 1){ 
-              input = doe.querySelector('#q-field');
-              input.value="Baum";
-            }   
-            break;
+      }
+
+      //changes before executing the single steps
+      intro.onbeforechange(function(targetedElement){
+        switch(targetedElement.id){
+        case "searchbar": 
+          if(this._currentStep == 1){ 
+            input = doe.querySelector('#q-field');
+            input.value= loc.TOUR_Qexample;
+          }   
+          break;
+
+        case "vc-view":  
+          vchoo = doe.querySelector("#vc-choose");
+          vcv = doe.querySelector("#vc-view");  
+          KorAP._delete.apply(KorAP.vc.root());
+          KorAP.vc.root().key("creationDate").update();
+          KorAP.vc.root().value("1820").update();  
+          if(!(vcv.querySelector(".active"))){
+            vchoo.click();
+          }   
+          break;   
           
-          case "vc-view":  
-            vchoo = doe.querySelector("#vc-choose");
-            vcv = doe.querySelector("#vc-view");  
-            KorAP._delete.apply(KorAP.vc.root());
-            KorAP.vc.root().key("creationDate").update();
-            KorAP.vc.root().value("1820").update();  
-            if(!(vcv.querySelector(".active"))){
-              vchoo.click();
-            }   
-            break;     
-      } 
-    });
-    
-    // Execute at the end of the tour (By clicking at the done-Button)
-    intro.oncomplete(function(){
-      input.value="";
-      KorAP._delete.apply(KorAP.vc.root());
+        /*
+        * Sets button labels for the last step of the tour
+        * Because Kalamar is a multipage webapplication, this tours starts by
+        * completion the gTshowResults Tour. Therefore, the skip-button is removed
+        * and the label of the done button changed.
+         */
+         
+        case "qsubmit":
+            intro.setOption('hideNext', true);
+          break;
+        } 
       });
-    
-    return intro;
+
+
+      // Execute at the end of the tour (By clicking at the done-Button)
+      intro.oncomplete(function(){
+        KorAP.session.set("tour", true);
+        let form = doe.getElementById("searchform");
+        form.submit();
+        //input.value="";
+        //KorAP._delete.apply(KorAP.vc.root()); 
+      });
+
+      return intro;
     },
+
+
+    /* Guided Tour to explain the different views of the results */     
+    gTshowResults: function(elparam){  
+      if(elparam){
+        doe = elparam;
+      }
+      let tourR = introClass();
+      let StepsSR = [
+        {     
+          intro: loc.TOUR_result,
+        }
+        ]
+      tourR.setOptions({steps:StepsSR});
+      tourR.setOptions(labelOptions);
+      
+      tourR.onbeforechange(function (){ 
+        KorAP.session.set("tour", false);
+      });
+      
+      return tourR;
+    },  
+
   }
 });
diff --git a/templates/de/intro.html.ep b/templates/de/intro.html.ep
index 3806197..fd65a08 100644
--- a/templates/de/intro.html.ep
+++ b/templates/de/intro.html.ep
@@ -9,7 +9,7 @@
   
   <p><strong>Neu bei KorAP?</strong> Dann starten Sie doch mit unserer <%= doc_opener 'korap', begin %>Einführung<% end %>!</p>
 
-  <!--<p><strong>Neu bei KorAP?</strong> Dann starten Sie doch mit unserer <a href="#" onclick="tourshow()"> Tour</a> oder mit der <%= doc_opener 'korap', begin %>Einführung<% end %>!</p> -->
+  <!-- <p><strong>Neu bei KorAP?</strong> Dann starten Sie doch mit unserer <a href="#" onclick="KorAP.tourshow()"> Tour</a> oder mit der <%= doc_opener 'korap', begin %>Einführung<% end %>!</p> -->
   %= include 'announcement', lang => 'de'
 
   <p>KorAP wird am <a href="http://www.ids-mannheim.de">Leibniz-Institut für Deutsche Sprache</a> in Mannheim entwickelt, Mitglied der <a href="http://www.leibniz-gemeinschaft.de/en/about-us/leibniz-competition/projekte-2011/2011-funding-line-2/">Leibniz Gemeinschaft</a>. Die einzelnen Module werden als Open Source auf <a href="http://github.com/KorAP">GitHub</a> veröffentlicht.</p>
diff --git a/templates/intro.html.ep b/templates/intro.html.ep
index 91761db..e9895e6 100644
--- a/templates/intro.html.ep
+++ b/templates/intro.html.ep
@@ -8,7 +8,7 @@
 
   <p><strong>New to KorAP?</strong> Please check out our <%= doc_opener 'korap', begin %>tutorial<% end %>!</p>
   
-  <!-- <p><strong>New to KorAP?</strong> Please check out our <a href="#" onclick="tourshow()">guided tour</a> or our <%= doc_opener 'korap', begin %>tutorial<% end %>!</p> -->    
+ <!-- <p><strong>New to KorAP?</strong> Please check out our <a href="#" onclick="KorAP.tourshow()">guided tour</a> or our <%= doc_opener 'korap', begin %>tutorial<% end %>!</p> -->
   %= include 'announcement', lang => 'en'
 
   <p>KorAP is developed at the <a href="http://www.ids-mannheim.de">Leibniz Institute for the German Language</a>, member of the <a href="http://www.leibniz-gemeinschaft.de/en/about-us/leibniz-competition/projekte-2011/2011-funding-line-2/">Leibniz Association</a>. The separated modules are being published as open source at <a href="http://github.com/KorAP">GitHub</a>.</p>
diff --git a/templates/partial/header.html.ep b/templates/partial/header.html.ep
index d007f94..8992b0f 100644
--- a/templates/partial/header.html.ep
+++ b/templates/partial/header.html.ep
@@ -6,7 +6,7 @@
   <form autocomplete="off" action="<%= url_for 'index' %>" id="searchform">
     <div id="searchbar">
       %= search_field 'q', id => 'q-field', autofocus => 'autofocus', placeholder => loc('searchplaceholder'), spellcheck => 'false', autocomplete => 'off', autocorrect => 'off', autocapitalize => 'off'
-      <button type="submit" title="<%= loc 'go' %>"><span><%= loc 'go' %></span></button>
+      <button type="submit" id="qsubmit" title="<%= loc 'go' %>"><span><%= loc 'go' %></span></button>
     </div>
 
     <!-- Search in the following virtual collection -->
