diff -urpN admin_menu/admin_menu.css admin_menu/admin_menu.css
--- admin_menu/admin_menu.css	2008-11-03 08:36:22.000000000 +1100
+++ admin_menu/admin_menu.css	2008-12-16 12:17:46.000000000 +1100
@@ -101,3 +101,12 @@ html.js fieldset.collapsible div.fieldse
   #admin-menu { display: none; }
   body.admin-menu { margin-top: 0 !important; }
 }
+
+/**
+ * Admin Menu settings page
+ */
+#admin-menu-theme-settings .inline-element,
+#admin-menu-theme-settings .inline-element .form-item
+{
+  display: inline;
+} 
diff -urpN admin_menu/admin_menu.inc admin_menu/admin_menu.inc
--- admin_menu/admin_menu.inc	2008-12-04 09:53:31.000000000 +1100
+++ admin_menu/admin_menu.inc	2008-12-10 13:47:19.000000000 +1100
@@ -372,6 +372,7 @@ function admin_menu_theme_settings() {
     '#default_value' => variable_get('admin_menu_tweak_tabs', 0),
     '#description' => t('If enabled, the tabs on the current page are moved into the administration menu. This feature is only available in themes that use the CSS classes <code>tabs primary</code> and <code>tabs secondary</code> for tabs.'),
   );
+  $form['tweaks'] += admin_menu_tweak('settings');
   $form = system_settings_form($form);
   $form['wipe description'] = array(
     '#type' => 'item',
diff -urpN admin_menu/admin_menu.js admin_menu/admin_menu.js
--- admin_menu/admin_menu.js	2008-11-03 08:36:22.000000000 +1100
+++ admin_menu/admin_menu.js	2008-12-17 10:08:40.000000000 +1100
@@ -1,31 +1,74 @@
 /* $Id: admin_menu.js,v 1.7.2.6 2008/11/02 21:36:22 sun Exp $ */
 
-$(document).ready(function() {
-  // Apply margin-top if enabled; directly applying marginTop doesn't work in IE.
-  if ($('#admin-menu').size()) {
-    if (Drupal.settings.admin_menu.margin_top) {
-      $('body').addClass('admin-menu');
-    }
-    if (Drupal.settings.admin_menu.position_fixed) {
-      $('#admin-menu').css('position', 'fixed');
-    }
-    // Move page tabs into administration menu.
-    if (Drupal.settings.admin_menu.tweak_tabs) {
-      $('ul.tabs.primary li').each(function() {
-        $(this).addClass('admin-menu-tab').appendTo('#admin-menu > ul');
-      });
-      $('ul.tabs.secondary').appendTo('#admin-menu > ul > li.admin-menu-tab.active');
-    }
+Drupal.adminMenu = Drupal.adminMenu || {};
+Drupal.adminMenu_visibility.tweak = Drupal.adminMenu_visibility.tweak || {};
+
+/**
+ * Core behavior for Administration menu.
+ *
+ * This tests whether there is an administration menu is in the output and
+ * executes all registered behaviors.
+ */
+Drupal.behaviors.adminMenu = function (context) {
+  var $adminMenu = $('#admin-menu');
+  if ($adminMenu.size()) {
+    jQuery.each(Drupal.adminMenu, function() {
+      this(context, $adminMenu);
+    });
   }
+};
 
-  // Collapse fieldsets on Modules page. For why multiple selectors see #111719.
+/**
+ * Collapse fieldsets on Modules page.
+ *
+ * For why multiple selectors see #111719.
+ */
+Drupal.behaviors.adminMenuCollapseModules = function (context) {
   if (Drupal.settings.admin_menu.tweak_modules) {
-    $('#system-modules fieldset:not(.collapsed), #system-modules-1 fieldset:not(.collapsed)').addClass('collapsed');
+    $('#system-modules fieldset:not(.collapsed), #system-modules-1 fieldset:not(.collapsed)', context).addClass('collapsed');
+  }
+};
+
+/**
+ * Apply 'margin-top'; directly applying marginTop does not work in IE.
+ */
+Drupal.adminMenu.marginTop = function (context, $adminMenu) {
+  if (Drupal.settings.admin_menu.margin_top) {
+    $('body', context).addClass('admin-menu');
   }
+};
 
+/**
+ * Apply 'position: fixed'.
+ */
+Drupal.adminMenu.positionFixed = function (context, $adminMenu) {
+  if (Drupal.settings.admin_menu.position_fixed) {
+    $adminMenu.css('position', 'fixed');
+  }
+};
+
+/**
+ * Move page tabs into administration menu.
+ */
+Drupal.adminMenu.pageTabs = function (context, $adminMenu) {
+  if (Drupal.settings.admin_menu.tweak_tabs) {
+    $('ul.tabs.primary li', context).each(function() {
+      $(this).addClass('admin-menu-tab').appendTo('#admin-menu > ul');
+    });
+    $('ul.tabs.secondary').appendTo('#admin-menu > ul > li.admin-menu-tab.active');
+  }
+};
+
+/**
+ * Apply JavaScript-based hovering behaviors.
+ *
+ * @todo This has to run last.  If another script registers additional behaviors
+ *   it will not run last.
+ */
+Drupal.adminMenu.hover = function (context, $adminMenu) {
   // Hover emulation for IE 6.
   if ($.browser.msie && parseInt(jQuery.browser.version) == 6) {
-    $('#admin-menu li').hover(function() {
+    $('li', $adminMenu).hover(function() {
       $(this).addClass('iehover');
     }, function() {
       $(this).removeClass('iehover');
@@ -33,7 +76,7 @@ $(document).ready(function() {
   }
 
   // Delayed mouseout.
-  $('#admin-menu li').hover(function() {
+  $('li', $adminMenu).hover(function() {
     // Stop the timer.
     clearTimeout(this.sfTimer);
     // Display child lists.
@@ -47,4 +90,82 @@ $(document).ready(function() {
       uls.css({left: '-999em', display: 'none'});
     }, 400);
   });
-});
+};
+
+/**
+ * Modify Admin Menu settings page for visbility tweak settings.
+ */
+Drupal.adminMenu.visbility_settings = function() {
+  if ($('#edit-admin-menu-tweak-visibility-mode').length) {
+    // Get active visibility tweak.
+    active = $('#edit-admin-menu-tweak-visibility-mode option:selected').get(0).value;
+
+    // Hide inactive visbility tweak settings form.
+    $('.admin_menu_visibility_settings').each(function() {
+      if (this.id.substr(31) != active) {
+        $(this).hide();
+      }
+    });
+
+    // Toggle visbility tweak settings form when selected.
+    $('#edit-admin-menu-tweak-visibility-mode').change(function() {
+      old = active;
+      active = $('#edit-admin-menu-tweak-visibility-mode option:selected').get(0).value;
+
+      if ($('#admin_menu_visibility_settings-'+ old).length) {
+        $('#admin_menu_visibility_settings-'+ old).hide();
+      }
+
+      if ($('#admin_menu_visibility_settings-'+ active).length) {
+        $('#admin_menu_visibility_settings-'+ active).show();
+      }
+    });
+  }
+}
+
+/**
+ * Initialize selected visibility tweak.
+ */
+Drupal.adminMenu.visibility = function() {
+  // Initialize defined visibility tweak
+  jQuery.each(Drupal.visibility_tweak, function(tweak) {
+    if (tweak == Drupal.settings.admin_menu.tweak_visibility.mode) {
+      Drupal.settings.admin_menu.tweak_visibility.mode = this;
+      this.init();
+
+      // Set initial visibility status
+      if (Drupal.settings.admin_menu.tweak_visibility.hidden == 1) {
+        this.hide();
+      }
+
+      return false;
+    }
+  });
+}
+
+/**
+ * Visibility tweak JS API.
+ *
+ * hide():
+ *   Set visibility status in $_SESSION.
+ *   Set visibility status in JavaScript.
+ *   Return to visibility tweaks 'hide()' function.
+ *
+ * show():
+ *   Set visibility status in $_SESSION.
+ *   Set visibility status in JavaScript.
+ *   Return to visibility tweaks 'show()' function.
+ */
+Drupal.adminMenu_visibility = {
+  hide: function() {
+    $.getJSON("/admin_menu/js/visibility/hide");
+    Drupal.settings.admin_menu.tweak_visibility.hidden = 1;
+    Drupal.settings.admin_menu.tweak_visibility.mode.hide();
+  },
+
+  show: function() {
+    $.getJSON("/admin_menu/js/visibility/show");
+    Drupal.settings.admin_menu.tweak_visibility.hidden = 0;
+    Drupal.settings.admin_menu.tweak_visibility.mode.show();
+  }
+}
diff -urpN admin_menu/admin_menu.module admin_menu/admin_menu.module
--- admin_menu/admin_menu.module	2008-12-04 10:03:34.000000000 +1100
+++ admin_menu/admin_menu.module	2008-12-10 14:10:00.000000000 +1100
@@ -70,6 +70,11 @@ function admin_menu_menu() {
     'type' => MENU_CALLBACK,
     'file' => 'admin_menu.inc',
   );
+  $items['admin_menu/js'] = array(
+    'page callback' => 'admin_menu_js',
+    'access arguments' => array('access administration menu'),
+    'type' => MENU_CALLBACK,
+  );
   return $items;
 }
 
@@ -87,6 +92,7 @@ function admin_menu_init() {
     drupal_add_css($path .'/admin_menu.css', 'module', 'all', FALSE);
     // Performance: Defer execution.
     drupal_add_js($path .'/admin_menu.js', 'module', 'header', TRUE);
+    module_load_include('inc', 'admin_menu', 'admin_menu_tweaks');
 
     if ($setting = variable_get('admin_menu_margin_top', 1)) {
       drupal_add_js(array('admin_menu' => array('margin_top' => $setting)), 'setting');
@@ -100,6 +106,7 @@ function admin_menu_init() {
     if ($_GET['q'] == 'admin/build/modules') {
       drupal_add_js(array('admin_menu' => array('tweak_modules' => variable_get('admin_menu_tweak_modules', 0))), 'setting');
     }
+    admin_menu_tweak('init');
   }
 }
 
diff -urpN admin_menu/admin_menu_tweaks.inc admin_menu/admin_menu_tweaks.inc
--- admin_menu/admin_menu_tweaks.inc	1970-01-01 10:00:00.000000000 +1000
+++ admin_menu/admin_menu_tweaks.inc	2008-12-17 09:43:15.000000000 +1100
@@ -0,0 +1,238 @@
+<?php
+
+// $Id$
+
+/**
+ * @file
+ *
+ * Provides add-on tweak functionalitys for Administration Menu and defines a
+ * few default visibility tweaks.
+ */
+
+/**
+ * 
+ */
+function admin_menu_tweak($op) {
+  $tweaks = module_invoke_all('admin_menu_tweak');
+
+  switch ($op) {
+    // Administration Menu settings form hook
+    case 'settings':
+      foreach ($tweaks as $name => $tweak) {
+
+        // Standalone tweaks
+        if ($tweak['#type'] != 'visibility') {
+          $form['admin_menu_tweak_'. $name] = array(
+            '#type' => 'checkbox',
+            '#title' => $tweak['#title'],
+            '#description' => $tweak['#description'],
+            '#default_value' => variable_get('admin_menu_tweak_'. $name, 0),
+          );
+        }
+
+        // Visibility tweaks
+        else {
+          $behavior[$name] = $tweak['#title'];
+
+          if (isset($tweak['#form'])) {
+            $visibility['admin_menu_tweak_visibility_'. $name] = array(
+              '#type' => 'markup',
+              '#prefix' => '<div id="admin_menu_visibility_settings-'. $name .'" class="admin_menu_visibility_settings">',
+              '#suffix' => '</div>',
+            );
+            $visibility['admin_menu_tweak_visibility_'. $name] += call_user_func($tweak['#form']);
+          }
+        }
+
+      }
+
+      // Visibility settings form
+      if (isset($behavior)) {
+        $form['admin_menu_tweak_visibility'] = array(
+          '#type' => 'fieldset',
+          '#title' => 'Visibility settings',
+        );
+        $form['admin_menu_tweak_visibility']['admin_menu_tweak_visibility'] = array(
+          '#type' => 'checkbox',
+          '#title' => t('Hidden by default'),
+          '#default_value' => variable_get('admin_menu_tweak_visibility', 1),
+          '#description' => t('If checked the Administration menu is hidden by default'),
+        );
+        $form['admin_menu_tweak_visibility']['admin_menu_tweak_visibility_mode'] = array(
+          '#type' => 'select',
+          '#title' => t('Admin Menu visibility behavior'),
+          '#options' => $behavior,
+          '#default_value' => variable_get('admin_menu_tweak_visibility_mode', 'key_combo'),
+        );
+
+        if (isset($visibility)) {
+          $form['admin_menu_tweak_visibility'] += $visibility;
+        }
+      }
+
+      return $form;
+      break;
+
+    // Administration Menu init hook
+    case 'init':
+      foreach ($tweaks as $name => $tweak) {
+        // Standalone tweaks
+        if ($tweak['#type'] != 'visibility' && $setting = variable_get('admin_menu_tweak_'. $name, 0) && isset($tweak['#file'])) {
+          drupal_add_js($tweak['#file'], 'module');
+        }
+      }
+
+      // Load visibility tweaks custom settings
+      if (isset($tweaks[variable_get('admin_menu_tweak_visibility_mode', 'key_combo')]['#settings'])) {
+        $settings = call_user_func($tweaks[variable_get('admin_menu_tweak_visibility_mode', 'key_combo')]['#settings']);
+        drupal_add_js(array('admin_menu' => array('tweak_visibility' => array('settings' => $settings))), 'setting');
+      }
+
+      drupal_add_js(array('admin_menu' => array('tweak_visibility' => array(
+        'hidden' => isset($_SESSION['admin_menu_visibility'])
+          ? $_SESSION['admin_menu_visibility']
+          : variable_get('admin_menu_tweak_visibility', 1)
+        ,
+        'mode' => variable_get('admin_menu_tweak_visibility_mode', 'key_combo'),
+      ))), 'setting');
+      drupal_add_js($tweaks[variable_get('admin_menu_tweak_visibility_mode', 'key_combo')]['#file'], 'module');
+
+      break;
+  }
+}
+
+/**
+ * AJAX handler for Admin Menu JS API
+ */
+function admin_menu_js() {
+  $args = func_get_args();
+
+  switch ($args[0]) {
+    case 'visibility':
+      $_SESSION['admin_menu_visibility'] = $args[1] == 'hide' ? 1 : 0;
+      print drupal_json($_SESSION['admin_menu_visibility']);
+      break;
+  }
+
+  exit;
+}
+
+/**
+ * Pre-defined Admin Menu tweaks.
+ *
+ * Key combo:
+ *   'Key combo' is a visibility tweak that simply toggles visibility with a
+ *   user-defined key combo.
+ *
+ * Icon hotspot:
+ *   'Icon hotspot' is a visibility tweak that when hidden shows a clickable
+ *   druplicon in the top left corner of the screen.
+ */
+
+/**
+ * Implementation of hook_admin_menu_tweak().
+ */
+function admin_menu_admin_menu_tweak() {
+  // Key combo visibility tweak.
+  $tweak['key_combo'] = array(
+    '#type' => 'visibility',
+    '#title' => t('Key combo'),
+    '#description' => t('description.'),
+    '#file' => drupal_get_path('module', 'admin_menu') .'/js/visibility.js',
+    '#form' => 'admin_menu_tweak_key_combo_form',
+    '#settings' => 'admin_menu_tweak_key_combo_settings',
+  );
+
+  // Icon hotspot visibility tweak.
+  $tweak['icon_hotspot'] = array(
+    '#type' => 'visibility',
+    '#title' => t('Icon hotspot'),
+    '#description' => t('description.'),
+    '#file' => drupal_get_path('module', 'admin_menu') .'/js/visibility.js',
+  );
+
+  return $tweak;
+}
+
+/**
+ * Key combo settings form
+ */
+function admin_menu_tweak_key_combo_form() {
+  $form['admin_menu_tweak_visibility_key_combo_modifier'] = array(
+    '#type' => 'select',
+    '#title' => t('Display modifier + key'),
+    '#options' => admin_menu_tweak_key_combos('modifier'),
+    '#default_value' => variable_get('admin_menu_tweak_visibility_key_combo_modifier', 'ctrl + alt'),
+    '#prefix' => '<div class="inline-element">',
+    '#suffix' => '</div>',
+  );
+  $form['admin_menu_tweak_visibility_key_combo_key'] = array(
+    '#type' => 'select',
+    '#options' => admin_menu_tweak_key_combos('key'),
+    '#default_value' => variable_get('admin_menu_tweak_visibility_key_combo_key', ''),
+    '#description' => t('Key combination to show/hide Administration Menu.'),
+    '#prefix' => '<div class="inline-element"> + ',
+    '#suffix' => '</div>',
+  );
+
+  return $form;
+}
+
+/**
+ * Key combo JS settings
+ */
+function admin_menu_tweak_key_combo_settings() {
+  return array(
+    'combo' => variable_get('admin_menu_tweak_visibility_key_combo_modifier', 'ctrl + alt') .
+      (variable_get('admin_menu_tweak_visibility_key_combo_key', '') ? " + ". variable_get('admin_menu_tweak_visibility_key_combo_key', '') : '') ."; "
+  );
+}
+
+/**
+ * Key comobos
+ */
+function admin_menu_tweak_key_combos($type) {
+  switch ($type) {
+    case 'key':
+      $options = array(
+        '' => 'None',
+        '65' => 'A',
+        '66' => 'B',
+        '67' => 'C',
+        '68' => 'D',
+        '69' => 'E',
+        '70' => 'F',
+        '71' => 'G',
+        '72' => 'H',
+        '73' => 'I',
+        '74' => 'J',
+        '75' => 'K',
+        '76' => 'L',
+        '77' => 'M',
+        '78' => 'N',
+        '79' => 'O',
+        '80' => 'P',
+        '81' => 'Q',
+        '82' => 'R',
+        '83' => 'S',
+        '84' => 'T',
+        '85' => 'U',
+        '86' => 'V',
+        '87' => 'W',
+        '88' => 'X',
+        '89' => 'Y',
+        '90' => 'Z',
+      );
+      break;
+
+    case 'modifier':
+      $options = array(
+        'ctrl + alt' => 'ctrl + alt',
+        'ctrl + shift' => 'ctrl + shift',
+        'ctrl + alt + shift' => 'ctrl + alt + shift'
+      );
+      break;
+  }
+
+  return $options;
+}
diff -urpN admin_menu/js/visibility.js admin_menu/js/visibility.js
--- admin_menu/js/visibility.js	1970-01-01 10:00:00.000000000 +1000
+++ admin_menu/js/visibility.js	2008-12-17 10:06:40.000000000 +1100
@@ -0,0 +1,63 @@
+/**
+ * Key Combo visibility tweak.
+ */
+Drupal.adminMenu_visibility.tweak.key_combo = {
+  init: function() {
+    $(document).keydown(function(e) {
+      evt = (e) ? e : window.event;
+      // Workaround for altKey bug in jQuery >= 1.2.5
+      evt = evt.originalEvent ? evt.originalEvent : evt;
+
+      combo = eval(Drupal.settings.admin_menu.tweak_visibility.settings.combo.replace(/\+/g, '&&').replace(/([a-z]+)/g, "evt.$1Key").replace(/([0-9]+)/g, "evt.keyCode == $1"));
+
+      if (combo && Drupal.settings.admin_menu.tweak_visibility.hidden) {
+        Drupal.adminMenu_visibility.show();
+      }
+      else if (combo) {
+        Drupal.adminMenu_visibility.hide();
+      }
+    });
+  },
+
+  hide: function() {
+    $('#admin-menu').hide();
+  },
+
+  show: function() {
+    $('#admin-menu').show();
+  }
+}
+
+/**
+ * Icon Hotspot visibility tweak.
+ */
+Drupal.adminMenu_visibility.tweak.icon_hotspot = {
+  init: function() {
+    $('#admin-menu').css({height: '21px'});
+    $('#admin-menu ul:first li.admin-menu-icon:first a:first')
+      .css({padding: '1px 4px 4px'})
+      .attr({href: '#', title: 'Click here to toggle administration menu visibility!'})
+      .click(function() {
+        if (Drupal.settings.admin_menu.tweak_visibility.hidden) {
+          Drupal.adminMenu_visibility.show();
+        }
+        else {
+          Drupal.adminMenu_visibility.hide();
+        }
+
+        return false;
+      });
+  },
+
+  hide: function() {
+    $('#admin-menu')
+      .width('24px').css({overflow: 'hidden'})
+      .children('ul:first').children('li:gt(0)').hide();
+  },
+
+  show: function() {
+    $('#admin-menu')
+      .width('100%').css({overflow: 'visible'})
+      .children('ul:first').children('li:gt(0)').show();
+  }
+}
