diff --git a/Changes b/Changes
index 1cf6c54..139fbd1 100644
--- a/Changes
+++ b/Changes
@@ -20,6 +20,7 @@
         - Support response pipes (preliminary; diewald)
         - Support default alignment changes (diewald)
         - Add general proxies support (diewald)
+        - Fix guided tour test suite (closes #265; hebasta)
 
 0.59 2025-03-28
         - Docker only release (diewald)
diff --git a/dev/js/spec/tourSpec.js b/dev/js/spec/tourSpec.js
index 2a9d38e..bb28f4a 100644
--- a/dev/js/spec/tourSpec.js
+++ b/dev/js/spec/tourSpec.js
@@ -4,77 +4,128 @@
  * @author Helge Stallkamp
  */
 
-define(['tour/tours', 'vc', 'vc/unspecified', 'session', 'match', 'hint',  'hint/foundries/cnx', 'selectMenu', 'loc/dereko'], function(tourClass, vcClass, docClassUnspec, sessionClass, matchClass, hintClass, hintArray, selectMenuClass){
+define(['tour/tours', 'vc', 'vc/unspecified', 'session', 'match', 'hint',  'hint/foundries/cnx', 'selectMenu', 'loc/dereko'], 
+  function(tourClass, vcClass, docClassUnspec, sessionClass, matchClass, hintClass, hintArray, selectMenuClass){
   const loc   = KorAP.Locale;
-  
+  loc.TOUR_Relations = "malt/d";
+
   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 corpus -->"+
-    "<div id='vc-view'>" +
-      "<div class='vc'>"+
-        "<div class='builder'>"+
-          "<div class='doc unspecified'><span>⋯</span></div>" +
-        "</div>" +
-       "<div class='action button-view button-group'><span title='Zuklappen' class='button-icon minimize'><span>Zuklappen</span></span></div>" +
-       "<div>" +
-          "<div class='panel vcinfo'>" +
-            "<div></div>" +
-            "<div class='action button-panel vcinfo button-group'><span title='Korpusstatistik' class='statistic'><span>Korpusstatistik</span></span></div>" +
+  "<nav class='navbar'>" +
+    "<a class='logo' href='/'>" +
+      "<h1>" +
+        "<span>KorAP-HeDeV - Korpusanalyseplattform der nächsten Generation</span>" +
+        "<div class='logoaddon' style='right: 0.1rem;'>HeDeV</div>" +
+      "</h1>" +
+    "</a>" +
+
+    "<div class='navbar-group'>" +
+      "<h3 class='nav-link'><a class='link-guided-tour' href='#'>Tour</a></h3>" +
+      "<h3 class='nav-link'><a class='tutorial' id='view-tutorial'>Hilfe</a></h3>" +
+    "</div>" +
+
+    "<div class='burger-icon show'></div>" +
+  "</nav>" +
+
+  "<header>" +
+    "<form autocomplete='off' action='/' id='searchform'>" +
+
+      "<div id='searchbar'>" +
+        "<input autocapitalize='none' 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>" +
+
+      "<div id='vc-view'>" +
+        "<div class='vc'>" +
+          "<div class='builder'>" +
+            "<div class='doc unspecified'><span>⋯</span></div>" +
           "</div>" +
-       "</div>" +
-      "</div>" + 
-    "in" +
-    "<span id='vc-choose' class='select'><span>allen Korpora</span></span>" +
-    "<input id='cq' name='cq' type='text' style='display: none;'>" +
-      "mit" +
-      "<span class='select'>" +
-        "<select id='ql-field' name='ql' style='display: none;'>" +
+
+          "<div class='action button-view button-group'>" +
+            "<span title='Zuklappen' class='button-icon minimize'>" +
+              "<span>Zuklappen</span>" +
+            "</span>" +
+          "</div>" +
+
+          "<div>" +
+            "<div class='panel vcinfo'>" +
+              "<div></div>" +
+              "<div class='action button-panel vcinfo button-group'>" +
+                "<span title='Korpusstatistik' class='statistic'>" +
+                  "<span>Korpusstatistik</span>" +
+                "</span>" +
+              "</div>" +
+            "</div>" +
+          "</div>" +
+        "</div>" +
+
+        "in" +
+        "<span id='vc-choose' class='select'><span>allen Korpora</span></span>" +
+        "<input id='cq' name='cq' 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>" +
-       "</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>"; 
-  
-  
+          "</select>" +
+
+          "<span style='display: inline;'>Poliqarp</span>" +
+          "<ul style='outline: none;' 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='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>" +
+        "</div>" +
+
+        "<div class='clear'></div>" +
+      "</div>" +
+    "</form>" +
+  "</header>" +
+
+  "<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: none;' 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>";
+
   var preDefinedStat={
       "documents":12,
       "tokens":2323,
@@ -87,7 +138,8 @@
     return cb(preDefinedStat);
   }; 
   
-  var noresultkorap =  
+
+   var noresultkorap =  
   "<div id='search' class=''>" + 
     "<div class='panel result'><div></div></div></div>" +
     "<p class='no-results'>Unable to perform the action.</p>" +
@@ -421,7 +473,7 @@
   });
   
   KorAP.vc = vc;
-  
+
   describe('KorAP.GuidedTour', function(){
 
     afterAll(function () {
@@ -479,9 +531,9 @@
       expect(resultkor.querySelector('.tree')).not.toBeNull(); 
 
     });
-      
+ 
    it('Guided Tour should be started and display steps and labels in the right order', function(){
-
+    
      let vcpanel = intrkorap.getElementById("vc-view");
      vcpanel.appendChild(vc.element());
      let searchTour = tourClass.gTstartSearch(intrkorap);
@@ -530,6 +582,7 @@
          break;
         case 8:
           expect(KorAP._vcKeyMenu.dontHide).toBe(false);
+          
           break;
        case totalSteps:
          expect(document.querySelector(".introjs-donebutton").textContent).toEqual(loc.TOUR_ldoneSearch);
@@ -539,7 +592,8 @@
        }
        searchTour.exit();
     } 
-     
+      
+    
      let resultTour = tourClass.gTshowResults(resultkor);
      KorAP.session = sessionClass.create('KalamarJSDem'); 
      
@@ -550,12 +604,13 @@
      expect(document.querySelector(".introjs-nextbutton").textContent).toEqual(loc.TOUR_lnext);
      expect(document.querySelector(".introjs-skipbutton")).toBeDefined();
      resultTour.exit();
+
      for(let i = 2; i <= totalStepsR; i++){
        resultTour.goToStepNumber(i);
        expect(document.querySelector(".introjs-tooltiptext").textContent).toEqual(resultTour.testIntros[i-1]);
        if(i == totalStepsR){
-         expect(document.querySelector(".introjs-donebutton").textContent).toEqual(loc.TOUR_ldone);  
-       }   
+        expect(document.querySelector(".introjs-donebutton").textContent).toEqual(loc.TOUR_ldone);  
+       } 
        resultTour.exit();
      } 
    });
