diff --git a/js/quicktabs.js b/js/quicktabs.js
--- a/js/quicktabs.js
+++ b/js/quicktabs.js
@@ -22,7 +22,13 @@
   var qt_name = Drupal.quicktabs.getQTName(el);
   var $ul = $(el).find('ul.quicktabs-tabs:first');
   $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 = myTabIndex;
     element.qt_name = qt_name;
     var tab = new Drupal.quicktabs.tab(element);
     var parent_li = $(element).parents('li').get(0);
@@ -33,6 +39,13 @@
   });
 }
 
+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;
@@ -56,13 +69,9 @@
   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);
