diff --git a/addons/web/static/src/js/tour.js b/addons/web/static/src/js/tour.js
index 54670d8e68e318d55f2b4ba17fc20adf8b41095d..08cbd9d946075ae9d6f62d370271dd11d8d95517 100644
--- a/addons/web/static/src/js/tour.js
+++ b/addons/web/static/src/js/tour.js
@@ -80,6 +80,7 @@ var Tour = {
             var href = Tour.getLang()+tour.path;
             console.log("Tour Begin from run method (redirection to "+href+")");
             Tour.saveState(tour.id, mode || tour.mode, -1, 0);
+            $(document).one("ajaxStop", Tour.running);
             window.location.href = href;
         } else {
             console.log("Tour Begin from run method");
@@ -117,6 +118,9 @@ var Tour = {
                 step.element = "body";
                 step.orphan = true;
                 step.backdrop = true;
+            } else {
+                step.popover = step.popover || {};
+                step.popover.arrow = true;
             }
         }
         if (tour.steps[index-1] &&
@@ -355,45 +359,25 @@ var Tour = {
         clearTimeout(Tour.testtimer);
         Tour.closePopover();
     },
-    _running: false,
     running: function () {
-        Tour._running = false;
-        function run () {
-            //if (Tour._running) return;
-            Tour._running = true;
-            var state = Tour.getState();
-            if (!state) {
-                Tour._running = false;
+        var state = Tour.getState();
+        if (!state) return;
+        else if (state.tour) {
+            if (!Tour._load_template) {
+                Tour.load_template().then(Tour.running);
                 return;
             }
-            else if (state.tour) {
-                if (!Tour._load_template) {
-                    Tour.load_template().then(function () {
-                        Tour._running = false;
-                        run();
-                    });
-                    return;
-                }
-                console.log("Tour '"+state.id+"' is running");
-                Tour.registerSteps(state.tour, state.mode);
-                Tour.nextStep();
-                Tour._running = false;
-            } else {
-                if (state.mode === "test" && state.wait >= 10) {
-                    Tour.error(state.step, "Tour '"+state.id+"' undefined");
-                }
-                Tour.saveState(state.id, state.mode, state.step_id, state.number-1, state.wait+1);
-                console.log("Tour '"+state.id+"' wait for running (tour undefined)");
-                setTimeout(run, state.mode === "test" ? Tour.defaultDelay : Tour.retryRunningDelay);
+            console.log("Tour '"+state.id+"' is running");
+            Tour.registerSteps(state.tour, state.mode);
+            Tour.nextStep();
+        } else {
+            if (state.mode === "test" && state.wait >= 10) {
+                Tour.error(state.step, "Tour '"+state.id+"' undefined");
             }
+            Tour.saveState(state.id, state.mode, state.step_id, state.number-1, state.wait+1);
+            console.log("Tour '"+state.id+"' wait for running (tour undefined)");
+            setTimeout(Tour.running, state.mode === "test" ? Tour.defaultDelay : Tour.retryRunningDelay);
         }
-        setTimeout(function () {
-            if ($.ajaxBusy) {
-                $(document).ajaxStop(run);
-            } else {
-                run();
-            }
-        },0);
     },
     check: function (step) {
         return (step &&