diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java
index d0faea6..830c2c1 100644
--- a/core/java/com/android/internal/view/menu/MenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/MenuBuilder.java
@@ -353,8 +353,7 @@
         mNonActionItems = new ArrayList<MenuItemImpl>();
         mIsActionItemsStale = true;
         
-        mShortcutsVisible =
-                (mResources.getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS);
+        setShortcutsVisibleInner(true);
     }
     
     public MenuBuilder setDefaultShowAsAction(int defaultShowAsAction) {
@@ -782,14 +781,18 @@
      */
     public void setShortcutsVisible(boolean shortcutsVisible) {
         if (mShortcutsVisible == shortcutsVisible) return;
-        
-        mShortcutsVisible =
-            (mResources.getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS)
-            && shortcutsVisible;
-        
+
+        setShortcutsVisibleInner(shortcutsVisible);
         refreshShortcuts(mShortcutsVisible, isQwertyMode());
     }
 
+    private void setShortcutsVisibleInner(boolean shortcutsVisible) {
+        mShortcutsVisible = shortcutsVisible
+                && mResources.getConfiguration().keyboard != Configuration.KEYBOARD_NOKEYS
+                && mResources.getBoolean(
+                        com.android.internal.R.bool.config_showMenuShortcutsWhenKeyboardPresent);
+    }
+
     /**
      * @return Whether shortcuts should be visible on menus.
      */
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 590baf1..8bb05fb 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -529,4 +529,8 @@
     <!-- When a database query is executed, the results retuned are paginated
          in pages of size (in KB) indicated by this value -->
     <integer name="config_cursorWindowSize">2048</integer>
+
+    <!-- Sets whether menu shortcuts should be displayed on panel menus when
+         a keyboard is present. -->
+    <bool name="config_showMenuShortcutsWhenKeyboardPresent">false</bool>
 </resources>
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 1fc2e6c..d6b7366 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -1624,24 +1624,7 @@
                 // First handle chording of panel key: if a panel key is held
                 // but not released, try to execute a shortcut in it.
                 if ((mPanelChordingKey > 0) && (mPanelChordingKey != keyCode)) {
-                    // Perform the shortcut (mPreparedPanel can be null since
-                    // global shortcuts (such as search) don't rely on a
-                    // prepared panel or menu).
-                    boolean handled = performPanelShortcut(mPreparedPanel, keyCode, event,
-                            Menu.FLAG_PERFORM_NO_CLOSE);
-
-                    if (!handled) {
-                        /*
-                         * If not handled, then pass it to the view hierarchy
-                         * and anyone else that may be interested.
-                         */
-                        handled = dispatchKeyShortcutEvent(event);
-
-                        if (handled && mPreparedPanel != null) {
-                            mPreparedPanel.isHandled = true;
-                        }
-                    }
-
+                    boolean handled = dispatchKeyShortcutEvent(event);
                     if (handled) {
                         return true;
                     }
@@ -1676,6 +1659,19 @@
 
         @Override
         public boolean dispatchKeyShortcutEvent(KeyEvent ev) {
+            // Perform the shortcut (mPreparedPanel can be null since
+            // global shortcuts (such as search) don't rely on a
+            // prepared panel or menu).
+            boolean handled = performPanelShortcut(mPreparedPanel, ev.getKeyCode(), ev,
+                    Menu.FLAG_PERFORM_NO_CLOSE);
+            if (handled) {
+                if (mPreparedPanel != null) {
+                    mPreparedPanel.isHandled = true;
+                }
+                return true;
+            }
+
+            // Shortcut not handled by the panel.  Dispatch to the view hierarchy.
             final Callback cb = getCallback();
             return cb != null && mFeatureId < 0 ? cb.dispatchKeyShortcutEvent(ev) : super
                     .dispatchKeyShortcutEvent(ev);
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index a6037aa..f2c2b93 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -239,9 +239,14 @@
     volatile boolean mPowerKeyHandled;
     RecentApplicationsDialog mRecentAppsDialog;
     Handler mHandler;
-    
+
+    private static final int LID_ABSENT = -1;
+    private static final int LID_CLOSED = 0;
+    private static final int LID_OPEN = 1;
+
+    int mLidOpen = LID_ABSENT;
+
     boolean mSystemReady;
-    boolean mLidOpen;
     boolean mHdmiPlugged;
     int mUiMode = Configuration.UI_MODE_TYPE_NORMAL;
     int mDockMode = Intent.EXTRA_DOCK_STATE_UNDOCKED;
@@ -896,21 +901,31 @@
     void readLidState() {
         try {
             int sw = mWindowManager.getSwitchState(SW_LID);
-            if (sw >= 0) {
-                mLidOpen = sw == 0;
+            if (sw > 0) {
+                mLidOpen = LID_OPEN;
+            } else if (sw == 0) {
+                mLidOpen = LID_CLOSED;
+            } else {
+                mLidOpen = LID_ABSENT;
             }
         } catch (RemoteException e) {
             // Ignore
         }
     }
     
-    private int determineHiddenState(boolean lidOpen,
-            int mode, int hiddenValue, int visibleValue) {
+    private int determineHiddenState(int mode, int hiddenValue, int visibleValue) {
+        if (KEYBOARD_ALWAYS_HIDDEN) {
+            return hiddenValue;
+        }
+        if (mLidOpen == LID_ABSENT) {
+            return visibleValue;
+        }
+
         switch (mode) {
             case 1:
-                return lidOpen ? visibleValue : hiddenValue;
+                return mLidOpen == LID_OPEN ? visibleValue : hiddenValue;
             case 2:
-                return lidOpen ? hiddenValue : visibleValue;
+                return mLidOpen == LID_OPEN ? hiddenValue : visibleValue;
         }
         return visibleValue;
     }
@@ -918,12 +933,11 @@
     /** {@inheritDoc} */
     public void adjustConfigurationLw(Configuration config) {
         readLidState();
-        final boolean lidOpen = !KEYBOARD_ALWAYS_HIDDEN && mLidOpen;
-        mPowerManager.setKeyboardVisibility(lidOpen);
-        config.hardKeyboardHidden = determineHiddenState(lidOpen,
+        mPowerManager.setKeyboardVisibility(mLidOpen == LID_OPEN);
+        config.hardKeyboardHidden = determineHiddenState(
                 mLidKeyboardAccessibility, Configuration.HARDKEYBOARDHIDDEN_YES,
                 Configuration.HARDKEYBOARDHIDDEN_NO);
-        config.navigationHidden = determineHiddenState(lidOpen,
+        config.navigationHidden = determineHiddenState(
                 mLidNavigationAccessibility, Configuration.NAVIGATIONHIDDEN_YES,
                 Configuration.NAVIGATIONHIDDEN_NO);
         config.keyboardHidden = (config.hardKeyboardHidden
@@ -1973,8 +1987,8 @@
     /** {@inheritDoc} */
     public void notifyLidSwitchChanged(long whenNanos, boolean lidOpen) {
         // lid changed state
-        mLidOpen = lidOpen;
-        boolean awakeNow = mKeyguardMediator.doLidChangeTq(mLidOpen);
+        mLidOpen = lidOpen ? LID_OPEN : LID_CLOSED;
+        boolean awakeNow = mKeyguardMediator.doLidChangeTq(lidOpen);
         updateRotation(Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE);
         if (awakeNow) {
             // If the lid is opening and we don't have to keep the
@@ -1982,7 +1996,7 @@
             // immediately.
             mKeyguardMediator.pokeWakelock();
         } else if (keyguardIsShowingTq()) {
-            if (mLidOpen) {
+            if (lidOpen) {
                 // If we are opening the lid and not hiding the
                 // keyguard, then we need to have it turn on the
                 // screen once it is shown.
@@ -1991,7 +2005,7 @@
             }
         } else {
             // Light up the keyboard if we are sliding up.
-            if (mLidOpen) {
+            if (lidOpen) {
                 mPowerManager.userActivity(SystemClock.uptimeMillis(), false,
                         LocalPowerManager.BUTTON_EVENT);
             } else {
@@ -2473,7 +2487,7 @@
             //or case.unspecified
             if (mHdmiPlugged) {
                 return Surface.ROTATION_0;
-            } else if (mLidOpen) {
+            } else if (mLidOpen == LID_OPEN) {
                 return mLidOpenRotation;
             } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR && mCarDockRotation >= 0) {
                 return mCarDockRotation;
@@ -2639,11 +2653,11 @@
     }
 
     void updateRotation(int animFlags) {
-        mPowerManager.setKeyboardVisibility(mLidOpen);
+        mPowerManager.setKeyboardVisibility(mLidOpen == LID_OPEN);
         int rotation = Surface.ROTATION_0;
         if (mHdmiPlugged) {
             rotation = Surface.ROTATION_0;
-        } else if (mLidOpen) {
+        } else if (mLidOpen == LID_OPEN) {
             rotation = mLidOpenRotation;
         } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR && mCarDockRotation >= 0) {
             rotation = mCarDockRotation;
