diff --git a/res/layout/new_dialpad_fragment.xml b/res/layout/new_dialpad_fragment.xml
index 4641e00..2026781 100644
--- a/res/layout/new_dialpad_fragment.xml
+++ b/res/layout/new_dialpad_fragment.xml
@@ -73,26 +73,40 @@
 
         <View style="@style/DialpadHorizontalSeparator"/>
 
-        <!-- left and right paddings will be modified by the code. See DialpadFragment. -->
-        <FrameLayout
+        <LinearLayout
             android:id="@+id/dialButtonContainer"
             android:layout_width="match_parent"
             android:layout_height="0px"
             android:layout_weight="@integer/dialpad_layout_weight_additional_buttons"
             android:layout_gravity="center_horizontal"
             android:background="@color/dialpad_primary_text_color">
-
+            <ImageButton
+                android:id="@+id/call_history_on_dialpad_button"
+                android:layout_height="@dimen/fake_action_bar_height"
+                android:layout_width="@dimen/fake_menu_button_min_width"
+                android:layout_gravity="bottom|start"
+                android:background="?android:attr/selectableItemBackground"
+                android:contentDescription="@string/action_menu_call_history_description"
+                android:src="@drawable/ic_dialer_menu_history_dk"/>
             <ImageButton
                 android:id="@+id/dialButton"
-                android:layout_width="match_parent"
+                android:layout_width="0dp"
+                android:layout_weight="1"
                 android:layout_height="match_parent"
                 android:layout_gravity="center"
                 android:state_enabled="false"
                 android:background="@drawable/btn_call"
                 android:contentDescription="@string/description_dial_button"
                 android:src="@drawable/ic_dial_action_call" />
-
-        </FrameLayout>
+            <ImageButton
+                android:id="@+id/overflow_menu_on_dialpad"
+                android:layout_height="@dimen/fake_action_bar_height"
+                android:layout_width="@dimen/fake_menu_button_min_width"
+                android:layout_gravity="bottom|end"
+                android:background="?android:attr/selectableItemBackground"
+                android:src="@drawable/ic_menu_overflow_dark"
+                android:contentDescription="@string/action_menu_overflow_description" />
+        </LinearLayout>
 
         <!-- "Dialpad chooser" UI, shown only when the user brings up the
              Dialer while a call is already in progress.
diff --git a/res/layout/new_phone_favorites_fragment.xml b/res/layout/new_phone_favorites_fragment.xml
index 90d0aac..9974adf 100644
--- a/res/layout/new_phone_favorites_fragment.xml
+++ b/res/layout/new_phone_favorites_fragment.xml
@@ -46,7 +46,7 @@
             android:textAppearance="?android:attr/textAppearanceLarge"/>
     </FrameLayout>
     <FrameLayout
-        android:layout_height="48dp"
+        android:layout_height="@dimen/fake_action_bar_height"
         android:layout_width="match_parent"
         android:id="@+id/fake_action_bar"
         android:background="@color/actionbar_background_color">
@@ -56,7 +56,7 @@
             android:layout_height="match_parent"
             android:layout_gravity="bottom|start"
             android:background="?android:attr/selectableItemBackground"
-            android:contentDescription="@string/description_search_button"
+            android:contentDescription="@string/action_menu_call_history_description"
             android:src="@drawable/ic_dialer_menu_history_dk"/>
         <ImageButton
             android:id="@+id/dialpad_button"
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 0ab27c3..e9f2ce0 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -49,8 +49,9 @@
     <integer name="dialpad_layout_weight_dialpad">65</integer>
     <integer name="dialpad_layout_weight_additional_buttons">15</integer>
 
+    <dimen name="fake_action_bar_height">48dp</dimen>
     <!-- Min with of fake menu buttons, which should be same as ActionBar's one -->
-    <dimen name="fake_menu_button_min_width">56dip</dimen>
+    <dimen name="fake_menu_button_min_width">56dp</dimen>
 
     <!--  Smart Dial -->
     <dimen name="smartdial_suggestions_padding">4dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8b7d61a..c7e1b86 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -302,6 +302,10 @@
     -->
     <string name="description_digits_edittext">number to dial</string>
 
+    <!-- Content description for the fake action menu button that brings up the call history
+         activity -->
+    <string name="action_menu_call_history_description">Call History</string>
+
     <!-- Content description for the fake action menu overflow button.
          This should be same as the description for the real action menu
          overflow button available in ActionBar.
diff --git a/src/com/android/dialer/NewDialtactsActivity.java b/src/com/android/dialer/NewDialtactsActivity.java
index 54e7df2..4b9a82d 100644
--- a/src/com/android/dialer/NewDialtactsActivity.java
+++ b/src/com/android/dialer/NewDialtactsActivity.java
@@ -82,7 +82,8 @@
 public class NewDialtactsActivity extends TransactionSafeActivity implements View.OnClickListener,
         NewDialpadFragment.OnDialpadQueryChangedListener, PopupMenu.OnMenuItemClickListener,
         OnListFragmentScrolledListener,
-        NewPhoneFavoriteFragment.OnPhoneFavoriteFragmentStartedListener {
+        NewPhoneFavoriteFragment.OnPhoneFavoriteFragmentStartedListener,
+        NewDialpadFragment.OnDialpadFragmentStartedListener {
     private static final String TAG = "DialtactsActivity";
 
     public static final boolean DEBUG = false;
@@ -335,6 +336,7 @@
     @Override
     public void onClick(View view) {
         switch (view.getId()) {
+            case R.id.overflow_menu_on_dialpad:
             case R.id.overflow_menu: {
                 final PopupMenu popupMenu = new PopupMenu(NewDialtactsActivity.this, view);
                 final Menu menu = popupMenu.getMenu();
@@ -346,6 +348,7 @@
             case R.id.dialpad_button:
                 showDialpadFragment();
                 break;
+            case R.id.call_history_on_dialpad_button:
             case R.id.call_history_button:
                 final Intent intent = new Intent(this, NewCallLogActivity.class);
                 startActivity(intent);
@@ -450,7 +453,7 @@
     }
 
 
-    public void setupFakeActionBarItems() {
+    public void setupFakeActionBarItemsForFavoritesFragment() {
         mMenuButton = findViewById(R.id.overflow_menu);
         if (mMenuButton != null) {
             // mMenuButton.setMinimumWidth(fakeMenuItemWidth);
@@ -471,6 +474,13 @@
         mDialpadButton.setOnClickListener(this);
     }
 
+    public void setupFakeActionBarItemsForDialpadFragment() {
+        final View overflowButton = findViewById(R.id.overflow_menu_on_dialpad);
+        overflowButton.setOnClickListener(this);
+        final View callhistoryButton = findViewById(R.id.call_history_on_dialpad_button);
+        callhistoryButton.setOnClickListener(this);
+    }
+
     @Override
     protected void onPause() {
         super.onPause();
@@ -747,6 +757,13 @@
 
     @Override
     public void onPhoneFavoriteFragmentStarted() {
-        setupFakeActionBarItems();
+        setupFakeActionBarItemsForFavoritesFragment();
     }
+
+    @Override
+    public void onDialpadFragmentStarted() {
+        setupFakeActionBarItemsForDialpadFragment();
+    }
+
+
 }
diff --git a/src/com/android/dialer/dialpad/NewDialpadFragment.java b/src/com/android/dialer/dialpad/NewDialpadFragment.java
index 46f5d06..d7bc3f9 100644
--- a/src/com/android/dialer/dialpad/NewDialpadFragment.java
+++ b/src/com/android/dialer/dialpad/NewDialpadFragment.java
@@ -101,6 +101,10 @@
         DialpadImageButton.OnPressedListener {
     private static final String TAG = NewDialpadFragment.class.getSimpleName();
 
+    public interface OnDialpadFragmentStartedListener {
+        public void onDialpadFragmentStarted();
+    }
+
     /**
      * LinearLayout with getter and setter methods for the translationY property using floats,
      * for animation purposes.
@@ -380,18 +384,6 @@
             setupKeypad(fragmentView);
         }
 
-        DisplayMetrics dm = getResources().getDisplayMetrics();
-        int minCellSize = (int) (56 * dm.density); // 56dip == minimum size of menu buttons
-        int cellCount = dm.widthPixels / minCellSize;
-        int fakeMenuItemWidth = dm.widthPixels / cellCount;
-        mDialButtonContainer = fragmentView.findViewById(R.id.dialButtonContainer);
-        // If in portrait, add padding to the dial button since we need space for the
-        // search and menu/overflow buttons.
-        if (mDialButtonContainer != null && !OrientationUtil.isLandscape(this.getActivity())) {
-            mDialButtonContainer.setPadding(
-                    fakeMenuItemWidth, mDialButtonContainer.getPaddingTop(),
-                    fakeMenuItemWidth, mDialButtonContainer.getPaddingBottom());
-        }
         mDialButton = fragmentView.findViewById(R.id.dialButton);
         if (r.getBoolean(R.bool.config_show_onscreen_dial_button)) {
             mDialButton.setOnClickListener(this);
@@ -423,6 +415,20 @@
         return fragmentView;
     }
 
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        final Activity activity = getActivity();
+
+        try {
+            ((OnDialpadFragmentStartedListener) activity).onDialpadFragmentStarted();
+        } catch (ClassCastException e) {
+            throw new ClassCastException(activity.toString()
+                    + " must implement OnDialpadFragmentStartedListener");
+        }
+    }
+
     private boolean isLayoutReady() {
         return mDigits != null;
     }
