 js/refreshless.js | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/js/refreshless.js b/js/refreshless.js
index b3576d9..2e8e149 100644
--- a/js/refreshless.js
+++ b/js/refreshless.js
@@ -98,15 +98,23 @@
       return;
     }
 
-    var url = this.getAttribute('href');
-    if (urlUsesDifferentTheme(url)) {
+    var requestUrl = this.pathname;
+    var fragment = this.hash;
+
+    // When navigating to the same page, or to a fragment on the same page, let
+    // the browser handle it.
+    if (Drupal.url(drupalSettings.path.currentPath) === requestUrl) {
+      return;
+    }
+
+    if (urlUsesDifferentTheme(requestUrl)) {
       return;
     }
 
     if (!event.isDefaultPrevented()) {
       event.preventDefault();
 
-      var ajaxObject = createAjaxObject(url);
+      var ajaxObject = createAjaxObject(requestUrl);
 
       // When the Refreshless request receives a succesful response, update the
       // URL using the history.pushState() API.
@@ -132,9 +140,15 @@
         // @see https://developer.mozilla.org/en-US/docs/Web/API/History_API
         var id = 'Drupal.refreshless.state.' + (history.length + 1);
         storage.setItem(id, JSON.stringify(state));
-        history.pushState(id, state.title, url);
+        history.pushState(id, state.title, requestUrl);
 
         debug(true);
+
+        // If we were navigating to a fragment on another page, then let the
+        // browser handle fragment navigation.
+        if (fragment.length) {
+          location.assign(fragment);
+        }
       };
 
       ajaxObject.execute();
@@ -188,7 +202,6 @@
 
   window.onpopstate = function(event) {
     if (!(typeof event.state === 'string' && event.state.substr(0, 19) === 'Drupal.refreshless.')) {
-      window.location.reload();
       return;
     }
 
