diff --git a/build.xml b/build.xml
index 2fa92e2a5e50f1f4a994222f77a328126177b82d..c9dacf5ea9b9665aebeb3431d8104dcdef414666 100644
--- a/build.xml
+++ b/build.xml
@@ -28,7 +28,7 @@
   <property name="php-cs-fixers" value="no_blank_lines_before_namespaces,function_call_space,trailing_spaces,unused_use,lowercase_keywords,encoding,parenthesis,php_closing_tag,visibility,duplicate_semicolon,extra_empty_lines,no_blank_lines_after_class_opening,no_empty_lines_after_phpdocs,operators_spaces,spaces_before_semicolon,ternary_spaces,concat_with_spaces,short_array_syntax,phpdoc_no_access,remove_leading_slash_use,eof_ending" />
 
 
-  <property name="version" value="3.1" />
+  <property name="version" value="3.1.1" />
 
   <!-- We only need the -p switch if the password is non-blank -->
   <if><not><equals arg1="${mysqlrootpass}" arg2="" /></not><then>
diff --git a/config/vufind/config.ini b/config/vufind/config.ini
index 08659df261d600ec87b349e0843b41af04d158ca..3d00dfdea5e1481d0d1f559c16532911e3443a6b 100644
--- a/config/vufind/config.ini
+++ b/config/vufind/config.ini
@@ -125,7 +125,7 @@ showBulkOptions = false
 ; Should users be allowed to save searches in their accounts?
 allowSavedSearches = true
 ; Generator value to display in an HTML header <meta> tag:
-generator = "VuFind 3.1"
+generator = "VuFind 3.1.1"
 
 ; This section allows you to configure the mechanism used for storing user
 ; sessions.  Available types: File, Memcache, Database.
diff --git a/package.json b/package.json
index 62a0df551f3074808acd981aba38da52addfcf58..d6d5273d96e27f60f399a0903be531c23c689a07 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "vufind",
-  "version": "3.1.0",
+  "version": "3.1.1",
   "description": "Dev tools to handle css preprocessing, js magic, and compression",
   "repository": {
     "type": "git",
diff --git a/packages/DEBIAN/changelog b/packages/DEBIAN/changelog
index ae16af01b8f4f5dbd29c395952928169825aeef1..38c56054f8c6dc4d342ed47640f1270ef64fe439 100644
--- a/packages/DEBIAN/changelog
+++ b/packages/DEBIAN/changelog
@@ -1,3 +1,9 @@
+vufind 3.1.1 distribution; urgency=low
+
+  * VuFind 3.1.1 release (see http://vufind.org/wiki/changelog for details) 
+
+ -- maintainer VuFind Project Administration Team <vufind-admins@lists.sourceforge.net>  Mo 31 Oct 2016 08:44:19 UTC
+
 vufind 3.1 distribution; urgency=low
 
   * VuFind 3.1 release (see http://vufind.org/wiki/changelog for details) 
diff --git a/packages/DEBIAN/control b/packages/DEBIAN/control
index 8b8f8d58583b8e13b9e192a623872c76f777d17a..33dfe4cb83dac216a105e467d5daa67746fd0658 100644
--- a/packages/DEBIAN/control
+++ b/packages/DEBIAN/control
@@ -1,5 +1,5 @@
 Package: vufind
-Version: 3.1
+Version: 3.1.1
 Section: World Wide Web
 Priority: Optional
 Architecture: all
diff --git a/themes/bootstrap3/js/common.js b/themes/bootstrap3/js/common.js
index 13d1670801aeff905c398027e4b420f1c880990b..3ab48e620494ccc57962867d4841af81c7d1076c 100644
--- a/themes/bootstrap3/js/common.js
+++ b/themes/bootstrap3/js/common.js
@@ -166,7 +166,7 @@ function recaptchaOnLoad() {
   if (typeof grecaptcha !== 'undefined') {
     var captchas = $('.g-recaptcha:empty');
     for (var i = 0; i < captchas.length; i++) {
-      captchas[i].dataset.captchaId = grecaptcha.render(captchas[i], captchas[i].dataset);
+      $(captchas[i]).data('captchaId', grecaptcha.render(captchas[i], $(captchas[i]).data()));
     }
   }
 }
@@ -321,6 +321,16 @@ function setupFacets() {
   $('.facet.list-group .collapse').on('hidden.bs.collapse', facetSessionStorage);
 }
 
+function setupIeSupport() {
+  // Disable Bootstrap modal focus enforce on IE since it breaks Recaptcha.
+  // Cannot use conditional comments since IE 11 doesn't support them but still has
+  // the issue
+  var ua = window.navigator.userAgent;
+  if (ua.indexOf('MSIE') || ua.indexOf('Trident/')) {
+    $.fn.modal.Constructor.prototype.enforceFocus = function emptyEnforceFocus() { };
+  }
+}
+
 $(document).ready(function commonDocReady() {
   // Start up all of our submodules
   VuFind.init();
@@ -382,4 +392,6 @@ $(document).ready(function commonDocReady() {
     $('.searchFormKeepFilters').prop('checked', state);
     $('.applied-filter').prop('checked', state);
   }
+
+  setupIeSupport();
 });
diff --git a/themes/bootstrap3/js/facets.js b/themes/bootstrap3/js/facets.js
index d9629e488ccb930ff8af0858807a6f399b4bffd5..649890d761bbaf8b1a78062540192f286a4d1e78 100644
--- a/themes/bootstrap3/js/facets.js
+++ b/themes/bootstrap3/js/facets.js
@@ -104,7 +104,7 @@ VuFind.register('lightbox_facets', function LightboxFacets() {
   function lightboxFacetSorting() {
     var sortButtons = $('.js-facet-sort');
     function sortAjax(button) {
-      var sort = button.dataset.sort;
+      var sort = $(button).data('sort');
       var list = $('#facet-list-' + sort);
       if (list.find('.js-facet-item').length === 0) {
         list.find('.js-facet-next-page').text(VuFind.translate('loading') + '...');
@@ -129,7 +129,7 @@ VuFind.register('lightbox_facets', function LightboxFacets() {
     lightboxFacetSorting();
     $('.js-facet-next-page').click(function facetLightboxMore() {
       var button = $(this);
-      var page = parseInt(this.dataset.page, 10);
+      var page = parseInt(button.data('page'), 10);
       if (button.attr('disabled')) {
         return false;
       }
diff --git a/themes/bootstrap3/js/openurl.js b/themes/bootstrap3/js/openurl.js
index fb9312fedafc2156c673be8c78b647d927d9baf2..b0771c5aab1415c4844d511ea06a64def7890490 100644
--- a/themes/bootstrap3/js/openurl.js
+++ b/themes/bootstrap3/js/openurl.js
@@ -35,7 +35,7 @@ VuFind.register('openurl', function OpenUrl() {
     // If the target is already visible, a previous click has populated it;
     // don't waste time doing redundant work.
     if (target.hasClass('hidden')) {
-      _loadResolverLinks(target.removeClass('hidden'), openUrl, element.data('search-class-id'));
+      _loadResolverLinks(target.removeClass('hidden'), openUrl, element.data('searchClassId'));
     }
   }
 
diff --git a/themes/bootstrap3/js/record.js b/themes/bootstrap3/js/record.js
index 0d986575859f9d9c03d6613a648170dda5f8cfb8..e090e917889825f3af535b76a8b20a03fe1395cb 100644
--- a/themes/bootstrap3/js/record.js
+++ b/themes/bootstrap3/js/record.js
@@ -267,10 +267,10 @@ function applyRecordTabHash() {
   var newTab = typeof window.location.hash !== 'undefined'
     ? window.location.hash.toLowerCase() : '';
 
-  // Open tag in url hash
-  if (newTab.length === 0 || newTab === '#tabnav') {
+  // Open tab in url hash
+  if (newTab.length <= 1 || newTab === '#tabnav') {
     $initiallyActiveTab.click();
-  } else if (newTab.length > 0 && '#' + activeTab !== newTab) {
+  } else if (newTab.length > 1 && '#' + activeTab !== newTab) {
     $('.' + newTab.substr(1)).click();
   }
 }