diff --git a/core/misc/tableheader.js b/core/misc/tableheader.js
index aa1c8bb..54fc6ac 100644
--- a/core/misc/tableheader.js
+++ b/core/misc/tableheader.js
@@ -1,6 +1,12 @@
 (function ($) {
 
 /**
+ * Object of functions indexed by module name that will be used to
+ * compute the header offset.
+ */
+Drupal.settings.tableHeaderOffset = Drupal.settings.tableHeaderOffset || { };
+
+/**
  * Attaches sticky table headers.
  */
 Drupal.behaviors.tableHeader = {
@@ -46,6 +52,7 @@ Drupal.tableHeader = function (table) {
     .hide()
     .appendTo(this.stickyTable);
   this.stickyHeaderCells = this.stickyHeader.find('> tr > th');
+  this.stickyOffsetTop = 0;
 
   this.originalTable.addClass('sticky-table');
   $(window)
@@ -81,15 +88,16 @@ Drupal.tableHeader.prototype.eventhandlerRecalculateStickyHeader = function (eve
   var calculateWidth = event.data && event.data.calculateWidth;
 
   // Reset top position of sticky table headers to the current top offset.
-  this.stickyOffsetTop = Drupal.settings.tableHeaderOffset ? eval(Drupal.settings.tableHeaderOffset + '()') : 0;
+  this.computeStickyOffsetTop();
   this.stickyTable.css('top', this.stickyOffsetTop + 'px');
 
   // Save positioning data.
   var viewHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
   if (calculateWidth || this.viewHeight !== viewHeight) {
+    var originalTableOffset = this.originalTable.offset();
     this.viewHeight = viewHeight;
-    this.vPosition = this.originalTable.offset().top - 4 - this.stickyOffsetTop;
-    this.hPosition = this.originalTable.offset().left;
+    this.vPosition = originalTableOffset.top - 4 - this.stickyOffsetTop;
+    this.hPosition = originalTableOffset.left;
     this.vLength = this.originalTable[0].clientHeight - 100;
     calculateWidth = true;
   }
@@ -125,4 +133,22 @@ Drupal.tableHeader.prototype.eventhandlerRecalculateStickyHeader = function (eve
   }
 };
 
+/**
+ * Sum functions defining an offset for tableheader position.
+ */
+Drupal.tableHeader.prototype.computeStickyOffsetTop = function () {
+  var offset = 0;
+  var headerOffset = Drupal.settings.tableHeaderOffset;
+  var localOffset, i;
+  if (headerOffset) {
+    for (i in headerOffset) {
+      if (headerOffset.hasOwnProperty(i)) {
+        localOffset = headerOffset[i]();
+        offset += !isNaN(localOffset) ? localOffset : 0;
+      }
+    }
+  }
+  this.stickyOffsetTop = offset;
+};
+
 })(jQuery);
diff --git a/core/modules/overlay/overlay-child.js b/core/modules/overlay/overlay-child.js
index ff111d8..6ccf5e8 100644
--- a/core/modules/overlay/overlay-child.js
+++ b/core/modules/overlay/overlay-child.js
@@ -78,8 +78,6 @@ Drupal.overlayChild = Drupal.overlayChild || {
   behaviors: {}
 };
 
-Drupal.overlayChild.prototype = {};
-
 /**
  * Attach child related behaviors to the iframe document.
  */
@@ -175,20 +173,6 @@ Drupal.overlayChild.behaviors.shortcutAddLink = function (context, settings) {
 /**
  * Use displacement from parent window.
  */
-Drupal.overlayChild.behaviors.alterTableHeaderOffset = function (context, settings) {
-  if (Drupal.settings.tableHeaderOffset) {
-    Drupal.overlayChild.prevTableHeaderOffset = Drupal.settings.tableHeaderOffset;
-  }
-  Drupal.settings.tableHeaderOffset = 'Drupal.overlayChild.tableHeaderOffset';
-};
-
-/**
- * Callback for Drupal.settings.tableHeaderOffset.
- */
-Drupal.overlayChild.tableHeaderOffset = function () {
-  var topOffset = Drupal.overlayChild.prevTableHeaderOffset ? eval(Drupal.overlayChild.prevTableHeaderOffset + '()') : 0;
-
-  return topOffset + parseInt($(document.body).css('marginTop'));
-};
+Drupal.settings.tableHeaderOffset = parent.Drupal.settings.tableHeaderOffset;
 
 })(jQuery);
diff --git a/core/modules/toolbar/toolbar.js b/core/modules/toolbar/toolbar.js
index d345284..bc52ad0 100644
--- a/core/modules/toolbar/toolbar.js
+++ b/core/modules/toolbar/toolbar.js
@@ -6,7 +6,10 @@ Drupal.toolbar = Drupal.toolbar || {};
  * Attach toggling behavior and notify the overlay of the toolbar.
  */
 Drupal.behaviors.toolbar = {
-  attach: function(context) {
+  attach: function(context, settings) {
+
+    $.extend(true, settings, { tableHeaderOffset: { toolbar: Drupal.toolbar.height } });
+
     var $context = $(context);
     // Set the initial state of the toolbar.
     $context.find('#toolbar').once('toolbar', Drupal.toolbar.init);
@@ -94,6 +97,7 @@ Drupal.toolbar.toggle = function() {
 };
 
 Drupal.toolbar.height = function() {
+  // @TODO this needs to be cached outside this function.
   var $toolbar = $('#toolbar');
   var height = $toolbar.outerHeight();
   // In modern browsers (including IE9), when box-shadow is defined, use the
diff --git a/core/modules/toolbar/toolbar.module b/core/modules/toolbar/toolbar.module
index e2bff73..e467fe8 100644
--- a/core/modules/toolbar/toolbar.module
+++ b/core/modules/toolbar/toolbar.module
@@ -194,10 +194,6 @@ function toolbar_view() {
     '#attached'=> array(
       'js' => array(
         $module_path . '/toolbar.js',
-        array(
-          'data' => array('tableHeaderOffset' => 'Drupal.toolbar.height'),
-          'type' => 'setting'
-        ),
       ),
       'css' => array(
         $module_path . '/toolbar.css',
