diff --git a/Changes b/Changes
index f0689a2..4170cfd 100644
--- a/Changes
+++ b/Changes
@@ -1,4 +1,5 @@
-0.60 2025-01-23
+0.60 2025-03-26
+        - Tour stops gracefully if there are no results (closes #189; hebasta)
         - Create top navbar and modify sidebar. (uyen-nhu)
         - Improve appearance of title-addon on logo. (uyen-nhu)
         - Create and style new item on top navbar for 'News'. (uyen-nhu)
diff --git a/dev/js/spec/tourSpec.js b/dev/js/spec/tourSpec.js
index c342483..2a9d38e 100644
--- a/dev/js/spec/tourSpec.js
+++ b/dev/js/spec/tourSpec.js
@@ -87,7 +87,12 @@
     return cb(preDefinedStat);
   }; 
   
-
+  var noresultkorap =  
+  "<div id='search' class=''>" + 
+    "<div class='panel result'><div></div></div></div>" +
+    "<p class='no-results'>Unable to perform the action.</p>" +
+  "</div>";
+  
   var resultkorap =  
     "<div id='search'>" +
       "<ol class='align-left' tabindex='-8'>" +
@@ -393,6 +398,11 @@
   let htmlZwei = resultkorap.trim(); 
   resulttemplate.innerHTML = resultkorap;
   var resultkor = resulttemplate.content;
+ 
+  let noresulttemplate = document.createElement('template');
+  noresultkorap.trim(); 
+  noresulttemplate.innerHTML = noresultkorap;
+  var noresultkor = noresulttemplate.content;
 
   resultkor.querySelector('#search > ol > li:not(.active)').addEventListener('click', function (e) {
     if (this._match !== undefined)
@@ -549,7 +559,15 @@
        resultTour.exit();
      } 
    });
-   
+
+   it('Guided Tour should gracefully stop, if no results are retrieved', function(){
+    let resultTour = tourClass.gTshowResults(noresultkor);
+    KorAP.session = sessionClass.create('KalamarJSDem'); 
+    resultTour.start(noresultkor);
+    expect(document.querySelector(".introjs-donebutton").textContent).toEqual(loc.TOUR_ldone);  
+    resultTour.exit();
+  });
+
    it('Guided Tour should hide Hint if aborted',  function(){
      let tourAbort = tourClass.gTstartSearch(intrkorap);
      tourAbort.start(); 
diff --git a/dev/js/src/loc/de.js b/dev/js/src/loc/de.js
index dd489a6..41614fd 100644
--- a/dev/js/src/loc/de.js
+++ b/dev/js/src/loc/de.js
@@ -80,6 +80,7 @@
   loc.TOUR_seargo = "Durch das Klicken auf das Lupensymbol wird die Suchanfrage gestartet.";
     
   //Guided Tour: explain the result
+  loc.TOUR_nokwicti = loc.TOUR_nokwicti || "Die Suche ergab keine Ergebnisse, daher wird die Tour hier beendet.";
   loc.TOUR_kwicti = "Ergebnisse";
   loc.TOUR_kwic = "Die Ergebnisse der Suche werden hier als KWIC (keyword in context) angezeigt. Vor dem KWIC steht die jeweilige Textsigle des Treffers.";
   loc.TOUR_snippetti = "KWIC";
diff --git a/dev/js/src/tour/tours.js b/dev/js/src/tour/tours.js
index 43ceea1..9490780 100644
--- a/dev/js/src/tour/tours.js
+++ b/dev/js/src/tour/tours.js
@@ -51,6 +51,7 @@
   loc.TOUR_seargo = loc.TOUR_seargo || "Start the search by clicking the magnifying glass.";
 
   //localization guided Tour gTshowResults
+  loc.TOUR_nokwicti = loc.TOUR_nokwicti || "The search has no results, therefore the tour ends here.";
   loc.TOUR_kwicti = loc.TOUR_kwicti || "Results";
   loc.TOUR_kwic = loc.TOUR_kwic || "The results of the query are displayed as KWIC (keyword in context). On the left side, you can see the according text sigle.";
   loc.TOUR_snippetti = loc.TOUR_snippetti ||  "KWIC (2)";
@@ -406,13 +407,16 @@
         tourR.setOption('scrollToElement', true);
         tourR.setOption('scrollTo','tooltip');
         this.testPrerequ(StepsSR, tourR);
-      
-        //TODO see also: introJS.totalSteps() merge requested: //github.com/usablica/intro.js/pull/268/files
+
         tourR.onbeforechange(function(targetedElement){
-          
-        if(this._currentStep == 1){
-          KorAP.session.set("tour", false);
-        }
+           if(this._currentStep == 0){
+            KorAP.session.set("tour", false);
+            if(doe.querySelector("#search + p.no-results")){
+              tourR._introItems[0].intro = loc.TOUR_nokwicti;
+              tourR.goToStepNumber(10);
+              document.querySelector(".introjs-prevbutton").style.visibility = "hidden";
+            }
+            } 
         
         if(this._currentStep == 2){
           doe.querySelector("#search > ol > li").click();
