diff --git a/res/menu/dialpad_options.xml b/res/menu/dialpad_options.xml
index 27a9b8a..c6b5dda 100644
--- a/res/menu/dialpad_options.xml
+++ b/res/menu/dialpad_options.xml
@@ -15,6 +15,11 @@
 -->
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item
+        android:id="@+id/menu_add_contact"
+        android:title="@string/add_contact"
+        android:showAsAction="withText"
+        android:orderInCategory="1" />
+    <item
         android:id="@+id/menu_2s_pause"
         android:title="@string/add_2sec_pause"
         android:showAsAction="withText"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 47c3563..ecf190a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -322,6 +322,7 @@
     <string name="menu_show_all_calls">Show all calls</string>
 
     <!-- Menu items for dialpad options as part of Pause and Wait ftr -->
+    <string name="add_contact">Add contact</string>
     <string name="add_2sec_pause">Add 2-sec pause</string>
     <string name="add_wait">Add wait</string>
 
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index ba4ae7b..a915dc1 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -175,7 +175,6 @@
     /** Remembers if we need to clear digits field when the screen is completely gone. */
     private boolean mClearDigitsOnStop;
 
-    private View mAddContactButton;
     private View mOverflowMenuButton;
     private View mDelete;
     private ToneGenerator mToneGenerator;
@@ -310,9 +309,10 @@
         if (isDigitsEmpty()) {
             mDigitsFilledByIntent = false;
             mDigits.setCursorVisible(false);
-            mAddContactButton.setVisibility(View.INVISIBLE);
+            // Set to INVISIBLE instead of GONE so that text (eg. "Type number to add") is centered.
+            mOverflowMenuButton.setVisibility(View.INVISIBLE);
         } else if (mDialpadView.canDigitsBeEdited()){
-            mAddContactButton.setVisibility(View.VISIBLE);
+            mOverflowMenuButton.setVisibility(View.VISIBLE);
         }
 
         if (mDialpadQueryListener != null) {
@@ -414,6 +414,11 @@
         mDialpadChooser = (ListView) fragmentView.findViewById(R.id.dialpadChooser);
         mDialpadChooser.setOnItemClickListener(this);
 
+        mOverflowMenuButton = mDialpadView.getOverflowMenuButton();
+        mOverflowMenuButton.setOnClickListener(this);
+        final PopupMenu overflowMenu = buildOptionsMenu(mOverflowMenuButton);
+        mOverflowMenuButton.setOnTouchListener(overflowMenu.getDragToOpenListener());
+
         return fragmentView;
     }
 
@@ -584,14 +589,6 @@
         // Long-pressing zero button will enter '+' instead.
         final DialpadKeyButton zero = (DialpadKeyButton) fragmentView.findViewById(R.id.zero);
         zero.setOnLongClickListener(this);
-
-        mAddContactButton = fragmentView.findViewById(R.id.dialpad_add_contact);
-        mAddContactButton.setOnClickListener(this);
-
-        mOverflowMenuButton = fragmentView.findViewById(R.id.dialpad_overflow);
-        mOverflowMenuButton.setOnClickListener(this);
-        final PopupMenu overflowMenu = buildOptionsMenu(mOverflowMenuButton);
-        mOverflowMenuButton.setOnTouchListener(overflowMenu.getDragToOpenListener());
     }
 
     @Override
@@ -901,12 +898,6 @@
                 }
                 return;
             }
-            case R.id.dialpad_add_contact: {
-                final CharSequence digits = mDigits.getText();
-                DialerUtils.startActivityWithErrorToast(getActivity(),
-                        DialtactsActivity.getAddNumberToContactIntent(digits));
-                return;
-            }
             case R.id.dialpad_overflow: {
                 buildOptionsMenu(view).show();
                 break;
@@ -1439,8 +1430,12 @@
 
     @Override
     public boolean onMenuItemClick(MenuItem item) {
-        // R.id.menu_add_contacts already has an add to contact intent populated by setupMenuItems
         switch (item.getItemId()) {
+            case R.id.menu_add_contact:
+                final CharSequence digits = mDigits.getText();
+                DialerUtils.startActivityWithErrorToast(getActivity(),
+                        DialtactsActivity.getAddNumberToContactIntent(digits));
+                return true;
             case R.id.menu_2s_pause:
                 updateDialString(PAUSE);
                 return true;
