diff --git a/res/drawable/call_log_background.xml b/res/drawable/call_log_background.xml
index c0c4889..4857fb5 100644
--- a/res/drawable/call_log_background.xml
+++ b/res/drawable/call_log_background.xml
@@ -15,5 +15,5 @@
      limitations under the License.
 -->
 <ripple xmlns:android="http://schemas.android.com/apk/res/android"
-                android:tint="?android:attr/colorControlHighlight"
-                android:pinned="false" />
+    android:tint="?android:attr/colorControlHighlight"
+    android:pinned="false" />
\ No newline at end of file
diff --git a/res/drawable/recent_lists_footer_background.xml b/res/drawable/recent_lists_footer_background.xml
new file mode 100644
index 0000000..566e353
--- /dev/null
+++ b/res/drawable/recent_lists_footer_background.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="?android:attr/colorControlHighlight"
+    android:pinned="false">
+    <!-- Mask to constrain the ripple to the bounds of the view. -->
+    <item android:drawable="@android:color/transparent" />
+</ripple>
diff --git a/res/layout/call_log_fragment.xml b/res/layout/call_log_fragment.xml
index 7b6aa28..fb7ed2a 100644
--- a/res/layout/call_log_fragment.xml
+++ b/res/layout/call_log_fragment.xml
@@ -71,7 +71,6 @@
             android:background="@color/background_dialer_list_items"
             android:divider="@null"
             android:nestedScrollingEnabled="true"
-            android:clipChildren="false"
         />
         <TextView android:id="@android:id/empty"
             android:layout_width="match_parent"
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index 9182bd7..bdf1477 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -14,16 +14,14 @@
      limitations under the License.
 -->
 
-<view
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<view xmlns:android="http://schemas.android.com/apk/res/android"
     class="com.android.dialer.calllog.CallLogListItemView"
+    android:id="@+id/call_log_list_item"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:paddingBottom="@dimen/call_log_outer_margin"
-    android:id="@+id/call_log_list_item"
     android:orientation="vertical"
-    android:clipChildren="false"
->
+    android:background="@color/background_dialer_list_items" >
+
     <!-- Day group heading. Used to show a "today", "yesterday", "last week" or "other" heading
          above a group of call log entries. -->
     <TextView
@@ -37,17 +35,16 @@
         android:paddingTop="@dimen/call_log_day_group_padding"
         android:paddingBottom="0dp"
         />
+
     <!-- Linear layout to separate the primary area containing the contact badge and caller
          information and the secondary action (call details / play voicemail). -->
     <LinearLayout
         android:id="@+id/call_log_row"
-        android:background="@color/background_dialer_list_items"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:baselineAligned="false"
         android:orientation="vertical"
-        android:gravity="center_vertical"
-        >
+        android:gravity="center_vertical" >
 
         <!-- Primary area containing the contact badge and caller information -->
         <LinearLayout
@@ -55,15 +52,15 @@
             android:background="@drawable/call_log_background"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:paddingLeft="@dimen/call_log_outer_margin"
-            android:paddingRight="@dimen/call_log_outer_margin"
+            android:paddingStart="@dimen/call_log_outer_margin"
+            android:paddingEnd="@dimen/call_log_outer_margin"
             android:paddingTop="@dimen/call_log_outer_margin"
+            android:paddingBottom="@dimen/call_log_outer_margin"
             android:orientation="horizontal"
             android:gravity="center_vertical"
             android:focusable="true"
             android:nextFocusRight="@+id/call_back_action"
-            android:nextFocusLeft="@+id/quick_contact_photo"
-            >
+            android:nextFocusLeft="@+id/quick_contact_photo" >
             <QuickContactBadge
                 android:id="@+id/quick_contact_photo"
                 android:layout_width="@dimen/call_log_list_contact_photo_size"
diff --git a/res/layout/recents_list_footer.xml b/res/layout/recents_list_footer.xml
index 6156456..7670d81 100644
--- a/res/layout/recents_list_footer.xml
+++ b/res/layout/recents_list_footer.xml
@@ -30,4 +30,4 @@
     android:textColor="@color/view_full_call_history_color"
     android:textSize="14sp"
     android:text="@string/recents_footer_text"
-    android:background="?android:attr/selectableItemBackground" />
+    android:background="@drawable/recent_lists_footer_background" />
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 3c0ce05..795b2a3 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -30,7 +30,7 @@
     <dimen name="call_log_call_action_width">54dp</dimen>
     <dimen name="call_log_icon_margin">4dip</dimen>
     <dimen name="call_log_inner_margin">8dip</dimen>
-    <dimen name="call_log_outer_margin">8dip</dimen>
+    <dimen name="call_log_outer_margin">8dp</dimen>
     <dimen name="call_log_indent_margin">24dip</dimen>
     <dimen name="call_log_list_item_height">56dip</dimen>
     <dimen name="call_log_list_contact_photo_size">40dip</dimen>
@@ -132,8 +132,8 @@
     <dimen name="call_log_secondary_text_size">14sp</dimen>
     <!-- Height of the call log actions section for each call log entry -->
     <dimen name="call_log_action_height">48dp</dimen>
-    <!-- Elevation of expanded call log items. -->
-    <dimen name="call_log_expanded_elevation">4dp</dimen>
+    <!-- Z Translation of expanded call log items. -->
+    <dimen name="call_log_expanded_translation_z">4dp</dimen>
     <!-- Padding above call log day group headers. -->
     <dimen name="call_log_day_group_padding">16dp</dimen>
 </resources>
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 66c4d03..12d5531 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -865,8 +865,8 @@
             views.actionsView.setAlpha(1.0f);
             views.callLogEntryView.setBackgroundColor(
                     callLogItem.getResources().getColor(R.color.background_dialer_light));
-            views.callLogEntryView.setElevation(
-                    callLogItem.getResources().getDimension(R.dimen.call_log_expanded_elevation));
+            views.callLogEntryView.setTranslationZ(callLogItem.getResources().getDimension(
+                    R.dimen.call_log_expanded_translation_z));
 
             // Attempt to give accessibility focus to one of the action buttons.
             // This ensures that a user realizes the expansion occurred.
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 232aa39..240de85 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -26,6 +26,7 @@
 import android.content.Intent;
 import android.database.ContentObserver;
 import android.database.Cursor;
+import android.graphics.Outline;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -94,7 +95,11 @@
     private boolean mCallLogFetched;
     private boolean mVoicemailStatusFetched;
 
-    private float mExpandedItemElevation;
+    private float mExpandedItemTranslationZ;
+    private int mFadeInDuration;
+    private int mFadeInStartDelay;
+    private int mFadeOutDuration;
+    private int mExpandCollapseDuration;
 
     private final Handler mHandler = new Handler();
 
@@ -195,7 +200,13 @@
         setHasOptionsMenu(true);
         updateCallList(mCallTypeFilter, mDateLimit);
 
-        mExpandedItemElevation = getResources().getDimension(R.dimen.call_log_expanded_elevation);
+        mExpandedItemTranslationZ =
+                getResources().getDimension(R.dimen.call_log_expanded_translation_z);
+        mFadeInDuration = getResources().getInteger(R.integer.call_log_actions_fade_in_duration);
+        mFadeInStartDelay = getResources().getInteger(R.integer.call_log_actions_fade_start);
+        mFadeOutDuration = getResources().getInteger(R.integer.call_log_actions_fade_out_duration);
+        mExpandCollapseDuration = getResources().getInteger(
+                R.integer.call_log_expand_collapse_duration);
     }
 
     /** Called by the CallLogQueryHandler when the list of calls has been fetched or updated. */
@@ -578,27 +589,36 @@
                     viewHolder.actionsView.setVisibility(View.VISIBLE);
                 }
 
+                // If the day group header is shown, subtract the header from the outline of the
+                // view. The outline is used for generating the shadow of the view, but we only want
+                // a shadow on the call log list item and not the header. This is a slight hack, but
+                // the hierarchy of the call log list items makes it hard to achieve the desired
+                // shadow behavior otherwise.
+                if (viewHolder.dayGroupHeader.isShown()) {
+                    Outline outline = new Outline();
+                    outline.setRect(
+                            0 /* left */,
+                            viewHolder.dayGroupHeader.getHeight() /* top */,
+                            view.getWidth() /* right */,
+                            view.getHeight() /* bottom */);
+                    view.setOutline(outline);
+                }
+
                 // Set up the fade effect for the action buttons.
                 if (isExpand) {
-                    int fadeDuration = getResources().getInteger(
-                            R.integer.call_log_actions_fade_in_duration);
-                    int startDelay = getResources().getInteger(
-                            R.integer.call_log_actions_fade_start);
                     // Start the fade in after the expansion has partly completed, otherwise it
                     // will be mostly over before the expansion completes.
                     viewHolder.actionsView.setAlpha(0f);
                     viewHolder.actionsView.animate()
                             .alpha(1f)
-                            .setStartDelay(startDelay)
-                            .setDuration(fadeDuration)
+                            .setStartDelay(mFadeInStartDelay)
+                            .setDuration(mFadeInDuration)
                             .start();
                 } else {
-                    int fadeDuration = getResources().getInteger(
-                            R.integer.call_log_actions_fade_out_duration);
                     viewHolder.actionsView.setAlpha(1f);
                     viewHolder.actionsView.animate()
                             .alpha(0f)
-                            .setDuration(fadeDuration)
+                            .setDuration(mFadeOutDuration)
                             .start();
                 }
                 view.requestLayout();
@@ -613,10 +633,8 @@
                         Float value = (Float) animator.getAnimatedValue();
 
                         // For each value from 0 to 1, animate the various parts of the layout.
-                        view.getLayoutParams().height =
-                                (int) (value * distance + baseHeight);
-                        viewHolder.callLogEntryView
-                                .setElevation(mExpandedItemElevation * value);
+                        view.getLayoutParams().height = (int) (value * distance + baseHeight);
+                        view.setTranslationZ(mExpandedItemTranslationZ * value);
                         view.requestLayout();
                     }
                 });
@@ -632,17 +650,14 @@
                     }
 
                     @Override
-                    public void onAnimationCancel(Animator animation) {}
+                    public void onAnimationCancel(Animator animation) { }
                     @Override
                     public void onAnimationRepeat(Animator animation) { }
                     @Override
                     public void onAnimationStart(Animator animation) { }
                 });
 
-                final int expandCollapseDuration = getResources().getInteger(
-                        R.integer.call_log_expand_collapse_duration);
-
-                animator.setDuration(expandCollapseDuration);
+                animator.setDuration(mExpandCollapseDuration);
                 animator.start();
 
                 // Return false so this draw does not occur to prevent the final frame from
