diff --git a/res/values/integers.xml b/res/values/integers.xml
index 86a8e26..a823a30 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -27,4 +27,7 @@
     <!-- Max suggestions limit showing in quick contact suggestion card [CHAR LIMIT=30]-->
     <integer name="quickcontact_suggestions_limit">10</integer>
 
+    <!-- The delay (in milliseconds) until the overflow options menu is shown automatically -->
+    <integer name="open_overflow_menu_delay_millis">250</integer>
+
 </resources>
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index 5a95c90..fd26035 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -73,11 +73,14 @@
     private static final String EXTRA_KEY_QUERY = "navBar.query";
     private static final String EXTRA_KEY_SELECTED_TAB = "navBar.selectedTab";
     private static final String EXTRA_KEY_SELECTED_MODE = "navBar.selectionMode";
+    private static final String EXTRA_KEY_SHOULD_OPEN_OVERFLOW = "navBar.shouldOpenOverflow";
 
     private static final String PERSISTENT_LAST_TAB = "actionBarAdapter.lastTab";
 
     private boolean mSelectionMode;
     private boolean mSearchMode;
+    private boolean mShouldOverflowOpen;
+    private boolean mIsOverflowOpen;
     private String mQueryString;
 
     private EditText mSearchView;
@@ -198,11 +201,12 @@
             mQueryString = request.getQueryString();
             mCurrentTab = loadLastTabPreference();
             mSelectionMode = false;
+            setShouldOpenOverflow(false);
         } else {
             mSearchMode = savedState.getBoolean(EXTRA_KEY_SEARCH_MODE);
             mSelectionMode = savedState.getBoolean(EXTRA_KEY_SELECTED_MODE);
             mQueryString = savedState.getString(EXTRA_KEY_QUERY);
-
+            setShouldOpenOverflow(savedState.getBoolean(EXTRA_KEY_SHOULD_OPEN_OVERFLOW));
             // Just set to the field here.  The listener will be notified by update().
             mCurrentTab = savedState.getInt(EXTRA_KEY_SELECTED_TAB);
         }
@@ -319,6 +323,22 @@
         }
     }
 
+    public void setShouldOpenOverflow(boolean shouldOpenOverflow) {
+        mShouldOverflowOpen = shouldOpenOverflow;
+    }
+
+    public boolean shouldOpenOverflow() {
+        return mShouldOverflowOpen;
+    }
+
+    public void setOverflowOpen(boolean isOverflowOpen) {
+        mIsOverflowOpen = isOverflowOpen;
+    }
+
+    public boolean isOverflowOpen() {
+        return mIsOverflowOpen;
+    }
+
     public String getQueryString() {
         return mSearchMode ? mQueryString : null;
     }
@@ -547,6 +567,7 @@
     public void onSaveInstanceState(Bundle outState) {
         outState.putBoolean(EXTRA_KEY_SEARCH_MODE, mSearchMode);
         outState.putBoolean(EXTRA_KEY_SELECTED_MODE, mSelectionMode);
+        outState.putBoolean(EXTRA_KEY_SHOULD_OPEN_OVERFLOW, mShouldOverflowOpen);
         outState.putString(EXTRA_KEY_QUERY, mQueryString);
         outState.putInt(EXTRA_KEY_SELECTED_TAB, mCurrentTab);
     }
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 473ed5c..d7c074e 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -28,6 +28,7 @@
 import android.os.Bundle;
 import android.os.Parcelable;
 import android.os.UserManager;
+import android.os.Handler;
 import android.preference.PreferenceActivity;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Contacts;
@@ -436,6 +437,16 @@
         // Current tab may have changed since the last onSaveInstanceState().  Make sure
         // the actual contents match the tab.
         updateFragmentsVisibility();
+
+        if (mActionBarAdapter.shouldOpenOverflow() && !mActionBarAdapter.isOverflowOpen()) {
+            new Handler().postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    openOptionsMenu();
+                }
+            }, /* delayMillis = */ getResources().getInteger(R.integer.
+                    open_overflow_menu_delay_millis));
+        }
     }
 
     @Override
@@ -1422,4 +1433,24 @@
         }
         return position;
     }
+
+    @Override
+    public boolean onMenuOpened(int featureId, Menu menu) {
+        // When the overflow menu button opens (both manually and automatically), we need to
+        // update both variables; same for closing event.
+        mActionBarAdapter.setOverflowOpen(true);
+        mActionBarAdapter.setShouldOpenOverflow(true);
+        return super.onMenuOpened(featureId, menu);
+    }
+
+    @Override
+    public void onPanelClosed(int featureId, Menu menu) {
+        // Since onPanelClosed will be called when the activity is destroyed on rotation even if
+        // user leaves the menu open, we are relying on onSaveInstanceState being called before
+        // onDestroy and onPanelClosed are invoked in order to store the "opening" status of the
+        // menu.
+        mActionBarAdapter.setOverflowOpen(false);
+        mActionBarAdapter.setShouldOpenOverflow(false);
+        super.onMenuOpened(featureId, menu);
+    }
 }
