diff --git a/js/quicktabs.js b/js/quicktabs.js
index f0c1b73..129f10d 100644
--- a/js/quicktabs.js
+++ b/js/quicktabs.js
@@ -25,7 +25,14 @@ Drupal.quicktabs.prepare = function(el) {
   $("ul.quicktabs-tabs li a span#active-quicktabs-tab").remove();
 
   $ul.find('li a').each(function(i, element){
-    element.myTabIndex = i;
+    // Get tab index from link query, instead of order of this link inside
+    // this group of quicktab links. This is useful when empty quicktabs are
+    // hidden.
+    var href = $(element).attr('href');
+    var qtKey = 'qt-' + qt_name;
+    var myTabIndex = getParameterByName(qtKey, href);
+    //element.myTabIndex = i;
+    element.myTabIndex = myTabIndex;
     element.qt_name = qt_name;
 
     var tab = new Drupal.quicktabs.tab(element);
@@ -38,6 +45,13 @@ Drupal.quicktabs.prepare = function(el) {
   });
 }
 
+function getParameterByName(name, url) {
+  name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
+  var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
+    results = regex.exec(url);
+  return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
+}
+
 Drupal.quicktabs.clickHandler = function(event) {
   var tab = event.data.tab;
   var element = this;
@@ -64,14 +78,10 @@ Drupal.quicktabs.tab = function (el) {
   this.element = el;
   this.tabIndex = el.myTabIndex;
   var qtKey = 'qt_' + el.qt_name;
-  var i = 0;
-  for (var i = 0; i < Drupal.settings.quicktabs[qtKey].tabs.length; i++) {
-    if (i == this.tabIndex) {
-      this.tabObj = Drupal.settings.quicktabs[qtKey].tabs[i];
-      this.tabKey = i;
-    }
-  }
+
+  this.tabKey = this.tabIndex;
+  this.tabObj = Drupal.settings.quicktabs[qtKey].tabs[this.tabIndex];
+
   this.tabpage_id = 'quicktabs-tabpage-' + el.qt_name + '-' + this.tabKey;
   this.container = $('#quicktabs-container-' + el.qt_name);
   this.tabpage = this.container.find('#' + this.tabpage_id);
