 diff -Naur old/horizontal-tabs.js horizontal-tabs/horizontal-tabs.js
 --- old/horizontal-tabs.js  2014-12-17 12:23:31.664146500 -0800
 +++ horizontal-tabs/horizontal-tabs.js  2014-12-17 09:56:53.541132300 -0800
 @@ -65,6 +65,22 @@
    }
  };
 
 +
 +window.addEventListener("hashchange", function () {
 +  var tab_focus;
 +  // If the current URL has a fragment and one of the tabs contains an
 +  // element that matches the URL fragment, activate that tab.
 +  if (window.location.hash && window.location.hash !== '#') {
 +    tab_focus = $(window.location.hash).closest('.horizontal-tabs-pane');
 +  }
 +  else {
 +    tab_focus = $('.horizontal-tabs-pane:first');
 +  }
 +  if (tab_focus.length) {
 +    tab_focus.data('horizontalTab').focus();
 +  }
 +}, false);
 +
  /**
   * The horizontal tab object represents a single tab within a tab group.
   *
 @@ -79,6 +95,7 @@
 
    this.link.click(function () {
      self.focus();
 +    self.updateUrlHash();
      return false;
    });
 
 @@ -87,6 +104,7 @@
    this.link.keydown(function(event) {
      if (event.keyCode == 13) {
        self.focus();
 +      self.updateUrlHash();
        // Set focus on the first input field of the visible fieldset/tab pane.
        $("fieldset.horizontal-tabs-pane :input:visible:enabled:first").focus();
        return false;
 @@ -125,6 +143,20 @@
    },
 
    /**
 +   * Change page hash, but avoid page jump to targeted content.
 +   */
 +    updateUrlHash: function () {
 +      var targetHash = this.link.attr('href');
 +      if (document.location.hash != targetHash) {
 +        var targetId = targetHash.replace(/^#/, '');
 +        var targetElem = $(targetHash);
 +        targetElem.attr('id', targetId + '-horizontal-tab-no-jump');
 +        document.location.hash = targetId;
 +        targetElem.attr('id', targetId);
 +      }
 +    },
 +
 +  /**
     * Updates the tab's summary.
     */
    updateSummary: function () {
 @@ -171,6 +203,7 @@
    }
  };
 
 +
  /**
   * Theme function for a horizontal tab.
   *