diff --git a/res/values/strings.xml b/res/values/strings.xml
index c9b2787..8e21762 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -967,6 +967,9 @@
     <!-- Title for the call disambiguation dialog -->
     <string name="call_disambig_title">Call using</string>
 
+    <!-- Menu item label for call settings [CHAR LIMIT=30] -->
+    <string name="call_settings">Call settings</string>
+
     <!-- Title for the sms disambiguation dialog -->
     <string name="sms_disambig_title">Text using</string>
 
diff --git a/src/com/android/contacts/dialpad/DialpadFragment.java b/src/com/android/contacts/dialpad/DialpadFragment.java
index 778fe42..7be16f5 100644
--- a/src/com/android/contacts/dialpad/DialpadFragment.java
+++ b/src/com/android/contacts/dialpad/DialpadFragment.java
@@ -20,7 +20,6 @@
 import com.android.contacts.R;
 import com.android.contacts.SpecialCharSequenceMgr;
 import com.android.contacts.activities.DialtactsActivity;
-import com.android.contacts.list.StrequentContactListFragment.Listener;
 import com.android.internal.telephony.ITelephony;
 import com.android.phone.CallLogAsync;
 import com.android.phone.HapticFeedback;
@@ -111,9 +110,11 @@
     //Member variables for dialpad options
     private MenuItem m2SecPauseMenuItem;
     private MenuItem mWaitMenuItem;
+    private MenuItem mCallSettingsItem;
     private static final int MENU_ADD_CONTACTS = 1;
     private static final int MENU_2S_PAUSE = 2;
     private static final int MENU_WAIT = 3;
+    private static final int MENU_CALL_SETTINGS = 4;
 
     private boolean mHasVoicemail = false;
 
@@ -529,18 +530,27 @@
                 .setIcon(R.drawable.ic_menu_2sec_pause);
         mWaitMenuItem = menu.add(0, MENU_WAIT, 0, R.string.add_wait)
                 .setIcon(R.drawable.ic_menu_wait);
+        // TODO: icon
+        mCallSettingsItem = menu.add(0, MENU_CALL_SETTINGS, 0, R.string.call_settings);
     }
 
     @Override
     public void onPrepareOptionsMenu(Menu menu) {
-        // If we have not been inflated yet, there is no menu
-        if (mDialpadChooser == null) return;
+        if (mDialpadChooser == null || mDigits == null) {
+            // The layout itself isn't ready yet. Let's ignore this call.
+            return;
+        }
 
+        // We show "Call Settings" menu every time
+        mCallSettingsItem.setVisible(true);
+        Intent settingsIntent = new Intent(Intent.ACTION_MAIN);
+        settingsIntent.setClassName("com.android.phone", "com.android.phone.CallFeaturesSetting");
+        mCallSettingsItem.setIntent(settingsIntent);
+
+        // We show "add to contacts", "2sec pause", and "add wait" menus only when the user is
+        // seeing usual dialpads and has typed at least one digit.
         // We never show a menu if the "choose dialpad" UI is up.
-        // Otherwise the menu is allowed (see onPrepareOptionsMenu() below.)
-        if (!dialpadChooserVisible()) return;
-
-        if (isDigitsEmpty()) {
+        if (dialpadChooserVisible() || isDigitsEmpty()) {
             mAddToContactMenuItem.setVisible(false);
             m2SecPauseMenuItem.setVisible(false);
             mWaitMenuItem.setVisible(false);
