diff --git a/admin_menu.css b/admin_menu.css
index 28c01cd..524085d 100644
--- a/admin_menu.css
+++ b/admin_menu.css
@@ -44,6 +44,9 @@
 body.admin-menu {
   margin-top: 20px !important;
 }
+body .admin-menu-placeholder {
+  height: 20px;
+}
 
 /* All lists */
 #admin-menu,
diff --git a/admin_menu.js b/admin_menu.js
index f8c730a..2c69c2d 100644
--- a/admin_menu.js
+++ b/admin_menu.js
@@ -33,9 +33,11 @@ Drupal.behaviors.adminMenu = {
     // Client-side caching; if administration menu is not in the output, it is
     // fetched from the server and cached in the browser.
     if (!$adminMenu.length && settings.admin_menu.hash) {
+      var placeholderClass = settings.margin_top ? 'admin-menu-placeholder' : '';
+      $('body', context).prepend('<div id="admin-menu" class="' + placeholderClass + '"></div>');
       Drupal.admin.getCache(settings.admin_menu.hash, function (response) {
           if (typeof response == 'string' && response.length > 0) {
-            $('body', context).prepend(response);
+            $('#admin-menu', context).replaceWith(response);
           }
           var $adminMenu = $('#admin-menu:not(.admin-menu-processed)', context);
           // Apply our behaviors.
diff --git a/admin_menu_toolbar/admin_menu_toolbar.css b/admin_menu_toolbar/admin_menu_toolbar.css
index 85c7d8e..2e453d8 100644
--- a/admin_menu_toolbar/admin_menu_toolbar.css
+++ b/admin_menu_toolbar/admin_menu_toolbar.css
@@ -13,6 +13,9 @@
 html body.admin-menu {
   margin-top: 29px !important;
 }
+html body .admin-menu-placeholder {
+  height: 29px;
+}
 body div#toolbar {
   top: 30px;
 }
