diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index a0ed5c7..5928183 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -49,8 +49,8 @@
             android:layout_height="wrap_content"
             android:paddingStart="@dimen/call_log_start_margin"
             android:paddingEnd="@dimen/call_log_outer_margin"
-            android:paddingTop="@dimen/call_log_outer_margin"
-            android:paddingBottom="@dimen/call_log_outer_margin"
+            android:paddingTop="@dimen/call_log_vertical_padding"
+            android:paddingBottom="@dimen/call_log_vertical_padding"
             android:orientation="horizontal"
             android:gravity="center_vertical"
             android:focusable="true"
diff --git a/res/layout/show_call_history_list_item.xml b/res/layout/show_call_history_list_item.xml
new file mode 100644
index 0000000..1264894
--- /dev/null
+++ b/res/layout/show_call_history_list_item.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2015 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/CallLogCardStyle"
+    android:layout_height="40dp"
+    android:clickable="true"
+    android:foreground="?android:attr/selectableItemBackground">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:text="@string/show_call_history" />
+
+</android.support.v7.widget.CardView>
+
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 502b21a..b9b3aa5 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -22,15 +22,17 @@
     <dimen name="remove_text_size">16dp</dimen>
 
     <!-- Call Log -->
-    <dimen name="call_log_call_action_size">32dip</dimen>
+    <dimen name="call_log_call_action_size">32dp</dimen>
     <dimen name="call_log_call_action_width">54dp</dimen>
-    <dimen name="call_log_icon_margin">4dip</dimen>
-    <dimen name="call_log_inner_margin">13dip</dimen>
+    <dimen name="call_log_icon_margin">4dp</dimen>
+    <dimen name="call_log_inner_margin">13dp</dimen>
     <dimen name="call_log_outer_margin">8dp</dimen>
     <dimen name="call_log_start_margin">16dp</dimen>
-    <dimen name="call_log_indent_margin">24dip</dimen>
+    <dimen name="call_log_indent_margin">24dp</dimen>
     <dimen name="call_log_name_margin_bottom">2dp</dimen>
+    <dimen name="call_log_vertical_padding">12dp</dimen>
     <dimen name="call_log_list_item_height">56dip</dimen>
+    <dimen name="show_call_history_list_item_height">72dp</dimen>
 
     <!-- Size of contact photos in the call log and call details. -->
     <dimen name="contact_photo_size">40dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4ee5b45..7568604 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -512,8 +512,8 @@
     <!-- Shortcut item used to make a video call directly from search. -->
     <string name="search_shortcut_make_video_call">Make video call</string>
 
-    <!-- Title for the recent calls footer that brings users to the full call history when clicked -->
-    <string name="recents_footer_text">View full call history</string>
+    <!-- Title for the call log list item that brings users to the full call history when clicked -->
+    <string name="show_call_history">View full call history</string>
 
     <!-- Number of missed calls shown on call card [CHAR LIMIT=40] -->
     <string name="num_missed_calls"><xliff:g id="number">%s</xliff:g> new missed calls</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index dacf6a4..2cd4aa3 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -198,7 +198,7 @@
         <item name="android:layout_height">wrap_content</item>
         <item name="android:layout_margin">4dp</item>
         <item name="android:baselineAligned">false</item>
-        <item name="cardCornerRadius">4dp</item>
+        <item name="cardCornerRadius">2dp</item>
         <item name="cardBackgroundColor">@color/background_dialer_call_log_list_item</item>
     </style>
 </resources>
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 167c131..1e0b7e0 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -609,7 +609,10 @@
     public boolean onMenuItemClick(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.menu_history:
-                showCallHistory();
+                // Use explicit CallLogActivity intent instead of ACTION_VIEW +
+                // CONTENT_TYPE, so that we always open our call log from our dialer
+                final Intent intent = new Intent(this, CallLogActivity.class);
+                startActivity(intent);
                 break;
             case R.id.menu_add_contact:
                 try {
@@ -1101,14 +1104,6 @@
         return resolveInfo != null && resolveInfo.size() > 0;
     }
 
-    @Override
-    public void showCallHistory() {
-        // Use explicit CallLogActivity intent instead of ACTION_VIEW +
-        // CONTENT_TYPE, so that we always open our call log from our dialer
-        final Intent intent = new Intent(this, CallLogActivity.class);
-        startActivity(intent);
-    }
-
     /**
      * Called when the user has long-pressed a contact tile to start a drag operation.
      */
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index f2a84c9..8e22834 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -78,6 +78,8 @@
         public void onReportButtonClick(String number);
     }
 
+    private static final int VIEW_TYPE_SHOW_CALL_HISTORY_LIST_ITEM = 10;
+
     /** Constant used to indicate no row is expanded. */
     private static final long NONE_EXPANDED = -1;
 
@@ -89,6 +91,8 @@
 
     protected ContactInfoCache mContactInfoCache;
 
+    private boolean mShowCallHistoryListItem = false;
+
     /**
      * Tracks the currently expanded call log row.
      */
@@ -254,6 +258,9 @@
 
     @Override
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        if (viewType == VIEW_TYPE_SHOW_CALL_HISTORY_LIST_ITEM) {
+            return ShowCallHistoryViewHolder.create(mContext, parent);
+        }
         return createCallLogEntryViewHolder(parent);
     }
 
@@ -287,6 +294,10 @@
      * @param count the number of entries in the current item, greater than 1 if it is a group
      */
     public void onBindViewHolder(ViewHolder viewHolder, int position) {
+        if (getItemViewType(position) == VIEW_TYPE_SHOW_CALL_HISTORY_LIST_ITEM) {
+            return;
+        }
+
         Cursor c = (Cursor) getItem(position);
         if (c == null) {
             return;
@@ -414,6 +425,23 @@
         }
     }
 
+    @Override
+    public int getItemCount() {
+        return super.getItemCount() + (mShowCallHistoryListItem ? 1 : 0);
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        if (position == getItemCount() - 1 && mShowCallHistoryListItem) {
+            return VIEW_TYPE_SHOW_CALL_HISTORY_LIST_ITEM;
+        }
+        return super.getItemViewType(position);
+    }
+
+    public void setShowCallHistoryListItem(boolean show) {
+        mShowCallHistoryListItem = show;
+    }
+
     /**
      * Retrieves the day group of the previous call in the call log.  Used to determine if the day
      * group has changed and to trigger display of the day group text.
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 4f4fc1b..85fca91 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -77,6 +77,11 @@
     private static final String KEY_LOG_LIMIT = "log_limit";
     private static final String KEY_DATE_LIMIT = "date_limit";
 
+    // No limit specified for the number of logs to show; use the CallLogQueryHandler's default.
+    private static final int NO_LOG_LIMIT = -1;
+    // No date-based filtering.
+    private static final int NO_DATE_LIMIT = 0;
+
     private RecyclerView mRecyclerView;
     private LinearLayoutManager mLayoutManager;
     private CallLogAdapter mAdapter;
@@ -123,18 +128,18 @@
 
     // Log limit - if no limit is specified, then the default in {@link CallLogQueryHandler}
     // will be used.
-    private int mLogLimit = -1;
+    private int mLogLimit = NO_LOG_LIMIT;
 
     // Date limit (in millis since epoch) - when non-zero, only calls which occurred on or after
     // the date filter are included.  If zero, no date-based filtering occurs.
-    private long mDateLimit = 0;
+    private long mDateLimit = NO_DATE_LIMIT;
 
     public CallLogFragment() {
-        this(CallLogQueryHandler.CALL_TYPE_ALL, -1);
+        this(CallLogQueryHandler.CALL_TYPE_ALL, NO_LOG_LIMIT);
     }
 
     public CallLogFragment(int filterType) {
-        this(filterType, -1);
+        this(filterType, NO_LOG_LIMIT);
     }
 
     public CallLogFragment(int filterType, int logLimit) {
@@ -150,7 +155,7 @@
      * @param dateLimit limits results to calls occurring on or after the specified date.
      */
     public CallLogFragment(int filterType, long dateLimit) {
-        this(filterType, -1, dateLimit);
+        this(filterType, NO_LOG_LIMIT, dateLimit);
     }
 
     /**
@@ -278,6 +283,9 @@
         String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
         mAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this,
                 new ContactInfoHelper(getActivity(), currentCountryIso), this);
+        if (mLogLimit != NO_LOG_LIMIT || mDateLimit != NO_DATE_LIMIT) {
+            mAdapter.setShowCallHistoryListItem(true);
+        }
         mRecyclerView.setAdapter(mAdapter);
 
         mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
diff --git a/src/com/android/dialer/calllog/ShowCallHistoryViewHolder.java b/src/com/android/dialer/calllog/ShowCallHistoryViewHolder.java
new file mode 100644
index 0000000..af36a4d
--- /dev/null
+++ b/src/com/android/dialer/calllog/ShowCallHistoryViewHolder.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.dialer.calllog;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.v7.widget.RecyclerView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.dialer.R;
+
+public final class ShowCallHistoryViewHolder extends RecyclerView.ViewHolder {
+
+    private ShowCallHistoryViewHolder(final Context context, View view) {
+        super(view);
+        view.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                final Intent intent = new Intent(context, CallLogActivity.class);
+                context.startActivity(intent);
+            }
+        });
+    }
+
+    public static ShowCallHistoryViewHolder create(Context context, ViewGroup parent) {
+        LayoutInflater inflater = LayoutInflater.from(context);
+        View view = inflater.inflate(R.layout.show_call_history_list_item, parent, false);
+        return new ShowCallHistoryViewHolder(context, view);
+    }
+}
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index f22a5d1..4e7e00d 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -60,7 +60,6 @@
             "key_last_dismissed_call_shortcut_date";
 
     public interface HostInterface {
-        public void showCallHistory();
         public ActionBarController getActionBarController();
     }
 
