diff --git a/misc/tableheader.js b/misc/tableheader.js
index 9d05e23..e014a67 100644
--- a/misc/tableheader.js
+++ b/misc/tableheader.js
@@ -43,9 +43,10 @@ Drupal.behaviors.tableHeader = function (context) {
     var viewHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
     if (e.viewHeight != viewHeight) {
       e.viewHeight = viewHeight;
-      e.vPosition = $(e.table).offset().top - 4;
-      e.hPosition = $(e.table).offset().left;
-      e.vLength = e.table.clientHeight - 100;
+      e.vPosition = $(e.table.tHead).offset().top;
+      var tHeadRelativeTop = e.vPosition - $(e.table).offset().top;
+      e.hPosition = $(e.table.tHead).offset().left;
+      e.vLength = e.table.clientHeight - tHeadRelativeTop - 100;
       // Resize header and its cell widths.
       var parentCell = $('th', e.table);
       $('th', e).each(function(index) {
@@ -61,7 +62,7 @@ Drupal.behaviors.tableHeader = function (context) {
 
     // Track horizontal positioning relative to the viewport and set visibility.
     var hScroll = document.documentElement.scrollLeft || document.body.scrollLeft;
-    var vOffset = (document.documentElement.scrollTop || document.body.scrollTop) - e.vPosition;
+    var vOffset = (document.documentElement.scrollTop || document.body.scrollTop) - e.vPosition + 4;
     var visState = (vOffset > 0 && vOffset < e.vLength) ? 'visible' : 'hidden';
     $(e).css({left: -hScroll + e.hPosition +'px', visibility: visState});
 
