diff --git a/addons/web/static/src/js/tour.js b/addons/web/static/src/js/tour.js
index 8a08751646eeb027513a8da423728a3e8971d9b9..5d962844f73656e697f919a4081aa290be58e56b 100644
--- a/addons/web/static/src/js/tour.js
+++ b/addons/web/static/src/js/tour.js
@@ -241,12 +241,20 @@ var Tour = {
     },
     repositionPopover: function() {
         var popover = Tour.$element.data("bs.popover");
-        var $tip = Tour.$element.data("bs.popover").tip();
+        var $tip = popover.tip();
 
         if (popover.options.orphan) {
             return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2);
         }
 
+        if (Tour.$element.parents("div").filter(function(){ return getComputedStyle(this).position === 'fixed'; }).length) {
+            var pos = popover.getPosition();
+            var top = pos.top;
+            if (popover.options.placement === "top") top -= $tip.height();
+            if (popover.options.placement === "bottom") top += pos.height;
+            $tip.css({'top': top+'px'});
+        }
+
         var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset;
         offsetWidth = $tip[0].offsetWidth;
         offsetHeight = $tip[0].offsetHeight;
@@ -270,10 +278,10 @@ var Tour = {
         $tip.offset(tipOffset);
         if (popover.options.placement === "bottom" || popover.options.placement === "top") {
                 var left = Tour.$element.offset().left + Tour.$element.outerWidth()/2 - tipOffset.left;
-                $tip.find(".arrow").css("left", left ? left + "px" : "");
+                popover.arrow().css("left", left ? left + "px" : "");
         } else if (popover.options.placement !== "auto") {
                 var top = Tour.$element.offset().top + Tour.$element.outerHeight()/2 - tipOffset.top;
-                $tip.find(".arrow").css("top", top ? top + "px" : "");
+                popover.arrow().css("top", top ? top + "px" : "");
         }
     },
     _load_template: false,