diff --git a/misc/tableheader.js b/misc/tableheader.js
index a93914c25da1a0e5f64baaac4c675d03a6586a01..0f0e7de126e736ef5065c93a3f81571515c0408c 100644
--- a/misc/tableheader.js
+++ b/misc/tableheader.js
@@ -1,8 +1,14 @@
 // $Id$
 
+Drupal.tableHeaderDoScroll = function() {
+  if (typeof(Drupal.tableHeaderOnScroll)=='function') {
+    Drupal.tableHeaderOnScroll();
+  }
+};
+
 Drupal.behaviors.tableHeader = function (context) {
   // This breaks in anything less than IE 7. Prevent it from running.
-  if (jQuery.browser.msie && parseInt(jQuery.browser.version) < 7) {
+  if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7) {
     return;
   }
 
@@ -16,7 +22,7 @@ Drupal.behaviors.tableHeader = function (context) {
       top: '0px'
     });
 
-    var headerClone = $(headerClone)[0];
+    headerClone = $(headerClone)[0];
     headers.push(headerClone);
 
     // Store parent table.
@@ -44,7 +50,7 @@ Drupal.behaviors.tableHeader = function (context) {
         var cellWidth = parentCell.eq(index).css('width');
         // Exception for IE7.
         if (cellWidth == 'auto') {
-          var cellWidth = parentCell.get(index).clientWidth +'px';
+          cellWidth = parentCell.get(index).clientWidth +'px';
         }
         $(this).css('width', cellWidth);
       });
@@ -56,16 +62,22 @@ Drupal.behaviors.tableHeader = function (context) {
     var vOffset = (document.documentElement.scrollTop || document.body.scrollTop) - e.vPosition;
     var visState = (vOffset > 0 && vOffset < e.vLength) ? 'visible' : 'hidden';
     $(e).css({left: -hScroll + e.hPosition +'px', visibility: visState});
-  };
+  }
+
+  // Only attach to scrollbars once, even if Drupal.attachBehaviors is called
+  //  multiple times.
+  if (!$('body').hasClass('tableHeader-processed')) {
+    $('body').addClass('tableHeader-processed');
+    $(window).scroll(Drupal.tableHeaderDoScroll);
+    $(document.documentElement).scroll(Drupal.tableHeaderDoScroll);
+  }
 
   // Track scrolling.
-  var scroll = function() {
+  Drupal.tableHeaderOnScroll = function() {
     $(headers).each(function () {
       tracker(this);
     });
   };
-  $(window).scroll(scroll);
-  $(document.documentElement).scroll(scroll);
 
   // Track resizing.
   var time = null;