diff --git a/CHANGELOG.md b/CHANGELOG.md
index 60f932e1f760bafe1826ebe9d7e94a18d48bc824..85cdb0e1ab781209fb195e24f1d82c43e137fba5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -75,6 +75,7 @@ Please view this file on the master branch, on stable branches it's out of date.
   - Don't include archived projects when creating group milestones. !4940 (Jeroen Jacobs)
   - Add tag shortcut from the Commit page. !6543
   - Keep refs for each deployment
+  - Close open tooltips on page navigation (Linus Thiel)
   - Allow browsing branches that end with '.atom'
   - Log LDAP lookup errors and don't swallow unrelated exceptions. !6103 (Markus Koller)
   - Replace unique keyframes mixin with keyframe mixin with specific names (ClemMakesApps)
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index 17cbfd0e66f55520eeadd5c0cd70ec70672719e0..c6c3c82e1eeca0efa727baa184e8d4b434bab65b 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -124,15 +124,11 @@
     return str.replace(/<(?:.|\n)*?>/gm, '');
   };
 
-  window.unbindEvents = function() {
-    return $(document).off('scroll');
-  };
-
   window.shiftWindow = function() {
     return scrollBy(0, -100);
   };
 
-  document.addEventListener("page:fetch", unbindEvents);
+  document.addEventListener("page:fetch", gl.utils.cleanupBeforeFetch);
 
   window.addEventListener("hashchange", shiftWindow);
 
diff --git a/app/assets/javascripts/lib/utils/common_utils.js b/app/assets/javascripts/lib/utils/common_utils.js
index b170e26eebf9e792cc029925dfa05a4de36bd96d..698abae6228e3f4b3738d316865544cf52354deb 100644
--- a/app/assets/javascripts/lib/utils/common_utils.js
+++ b/app/assets/javascripts/lib/utils/common_utils.js
@@ -43,6 +43,14 @@
       parser.href = url;
       return parser;
     };
+
+    gl.utils.cleanupBeforeFetch = function() {
+      // Unbind scroll events
+      $(document).off('scroll');
+      // Close any open tooltips
+      $('.has-tooltip, [data-toggle="tooltip"]').tooltip('destroy');
+    };
+
     return jQuery.timefor = function(time, suffix, expiredLabel) {
       var suffixFromNow, timefor;
       if (!time) {