diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index 9899424..31dcd88 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -81,6 +81,7 @@
                     android:id="@+id/name"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
+                    android:layout_marginBottom="@dimen/call_log_name_margin_bottom"
                     android:layout_marginEnd="@dimen/call_log_icon_margin"
                     android:textColor="?attr/call_log_primary_text_color"
                     android:textSize="@dimen/call_log_primary_text_size"
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 414e8f8..01ec969 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -33,6 +33,7 @@
     <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_name_margin_bottom">2dp</dimen>
     <dimen name="call_log_list_item_height">56dip</dimen>
     <dimen name="call_log_list_contact_photo_size">40dip</dimen>
     <dimen name="call_detail_contact_name_margin">24dip</dimen>
@@ -63,9 +64,13 @@
 
     <!-- Dimensions for most recent call shortcut cards -->
     <dimen name="recent_call_log_item_translation_z">4dp</dimen>
-    <dimen name="recent_call_log_item_padding">8dp</dimen>
+    <dimen name="recent_call_log_item_margin">8dp</dimen>
+    <dimen name="recent_call_log_item_margin_bottom">6dp</dimen>
+
     <!-- The maximum amount to clip on the left and right of the recent call shortcut card -->
     <dimen name="recent_call_log_item_horizontal_clip_limit">20dp</dimen>
+    <dimen name="recent_call_log_item_padding_start">8dp</dimen>
+    <dimen name="recent_call_log_item_padding_bottom">7dp</dimen>
 
     <!-- Size of the star icon on the favorites tile. -->
     <dimen name="favorites_star_icon_size">12dp</dimen>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index e47c05e..1044a1e 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -33,9 +33,9 @@
         <item name="activated_background">@drawable/list_item_activated_background</item>
         <item name="section_header_background">@drawable/list_title_holo</item>
         <item name="list_section_header_height">32dip</item>
-        <item name="list_item_padding_top">12dip</item>
+        <item name="list_item_padding_top">12dp</item>
         <item name="list_item_padding_right">0dip</item>
-        <item name="list_item_padding_bottom">12dip</item>
+        <item name="list_item_padding_bottom">12dp</item>
         <item name="list_item_padding_left">0dip</item>
         <item name="list_item_gap_between_image_and_text">8dip</item>
         <item name="list_item_gap_between_label_and_data">5dip</item>
@@ -55,8 +55,9 @@
         <item name="contact_browser_list_padding_right">0dp</item>
         <item name="contact_browser_background">@color/contact_list_background_color</item>
         <item name="list_item_name_text_color">@color/contact_list_name_text_color</item>
-        <item name="list_item_name_text_size">@dimen/contact_browser_list_item_text_size</item>
+        <item name="list_item_name_text_size">16sp</item>
         <item name="list_item_text_indent">@dimen/contact_browser_list_item_text_indent</item>
+        <item name="list_item_text_offset_top">-2dp</item>
         <!-- CallLog -->
         <item name="call_log_primary_text_color">@color/contact_list_name_text_color</item>
         <item name="call_log_primary_background_color">#000000</item>
@@ -102,7 +103,7 @@
         <!-- CallLog -->
         <item name="call_log_primary_text_color">#404040</item>
         <item name="call_log_primary_background_color">#FFFFFF</item>
-        <item name="call_log_secondary_text_color">#9a9a9a</item>
+        <item name="call_log_secondary_text_color">#8f8f8f</item>
         <item name="call_log_secondary_background_color">#FFFFFF</item>
         <item name="call_log_header_color">#FFFFFF</item>
         <!-- VoicemailStatus -->
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index e8268c9..2d1e2a7 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -267,10 +267,11 @@
                 // no need to do anything here.
                 return;
             }
-            mSearchQuery = newText;
             if (DEBUG) {
                 Log.d(TAG, "onTextChange for mSearchView called with new query: " + newText);
+                Log.d(TAG, "Previous Query: " + mSearchQuery);
             }
+            mSearchQuery = newText;
 
             // Show search fragment only when the query string is changed to non-empty text.
             if (!TextUtils.isEmpty(newText)) {
@@ -696,8 +697,11 @@
     }
 
     private void hideDialpadAndSearchUi() {
-        mSearchView.setText(null);
-        hideDialpadFragment(false, true);
+        if (mIsDialpadShown) {
+            hideDialpadFragment(false, true);
+        } else {
+            exitSearchUi();
+        }
     }
 
     private void hideInputMethod(View view) {
@@ -882,7 +886,6 @@
         setNotInSearchUi();
 
         final FragmentTransaction transaction = getFragmentManager().beginTransaction();
-        transaction.setCustomAnimations(0, android.R.animator.fade_out);
         if (mSmartDialSearchFragment != null) {
             transaction.remove(mSmartDialSearchFragment);
         }
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 4752620..924a17f 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -578,7 +578,15 @@
     protected View newChildView(Context context, ViewGroup parent) {
         LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         View view = inflater.inflate(R.layout.call_log_list_item, parent, false);
-        findAndCacheViews(view);
+
+        // Get the views to bind to and cache them.
+        CallLogListItemViews views = CallLogListItemViews.fromView(view);
+        view.setTag(views);
+
+        // Set text height to false on the TextViews so they don't have extra padding.
+        views.phoneCallDetailsViews.nameView.setElegantTextHeight(false);
+        views.phoneCallDetailsViews.callLocationAndDate.setElegantTextHeight(false);
+
         return view;
     }
 
@@ -599,9 +607,6 @@
     }
 
     private void findAndCacheViews(View view) {
-        // Get the views to bind to.
-        CallLogListItemViews views = CallLogListItemViews.fromView(view);
-        view.setTag(views);
     }
 
     /**
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index 229f7f3..30e0e0f 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -52,6 +52,9 @@
 public class ListsFragment extends Fragment implements CallLogQueryHandler.Listener,
         CallLogAdapter.CallFetcher, ViewPager.OnPageChangeListener {
 
+    private static final boolean DEBUG = DialtactsActivity.DEBUG;
+    private static final String TAG = "ListsFragment";
+
     public static final int TAB_INDEX_SPEED_DIAL = 0;
     public static final int TAB_INDEX_RECENTS = 1;
     public static final int TAB_INDEX_ALL_CONTACTS = 2;
@@ -154,11 +157,17 @@
 
         @Override
         public void onPanelOpened(View panel) {
+            if (DEBUG) {
+                Log.d(TAG, "onPanelOpened");
+            }
             mIsPanelOpen = true;
         }
 
         @Override
         public void onPanelClosed(View panel) {
+            if (DEBUG) {
+                Log.d(TAG, "onPanelClosed");
+            }
             mIsPanelOpen = false;
         }
     };
@@ -232,7 +241,6 @@
         // Wipe the cache to refresh the call shortcut item. This is not that expensive because
         // it only contains one item.
         mCallLogAdapter.invalidateCache();
-        mActionBar = null;
         super.onPause();
     }
 
diff --git a/src/com/android/dialer/list/ShortcutCardsAdapter.java b/src/com/android/dialer/list/ShortcutCardsAdapter.java
index 4df44f0..a39bed5 100644
--- a/src/com/android/dialer/list/ShortcutCardsAdapter.java
+++ b/src/com/android/dialer/list/ShortcutCardsAdapter.java
@@ -27,6 +27,7 @@
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.FrameLayout;
+import android.widget.LinearLayout;
 
 import com.android.dialer.R;
 import com.android.dialer.calllog.CallLogAdapter;
@@ -54,7 +55,10 @@
 
     private final ListsFragment mFragment;
 
-    private final int mCallLogPadding;
+    private final int mCallLogMargin;
+    private final int mCallLogMarginBottom;
+    private final int mCallLogPaddingStart;
+    private final int mCallLogPaddingBottom;
     private final int mCardMaxHorizontalClip;
 
     private final Context mContext;
@@ -104,7 +108,14 @@
         mFragment = fragment;
         mCardMaxHorizontalClip = resources.getDimensionPixelSize(
                 R.dimen.recent_call_log_item_horizontal_clip_limit);
-        mCallLogPadding = resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding);
+        mCallLogMargin = resources.getDimensionPixelSize(R.dimen.recent_call_log_item_margin);
+        mCallLogMarginBottom =
+                resources.getDimensionPixelSize(R.dimen.recent_call_log_item_margin_bottom);
+        mCallLogPaddingStart =
+                resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding_start);
+        mCallLogPaddingBottom =
+                resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding_bottom);
+
         mCallLogAdapter = callLogAdapter;
         mObserver = new CustomDataSetObserver();
         mCallLogAdapter.registerDataSetObserver(mObserver);
@@ -211,8 +222,15 @@
             final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                     FrameLayout.LayoutParams.MATCH_PARENT,
                     FrameLayout.LayoutParams.WRAP_CONTENT);
-            params.setMargins(mCallLogPadding, mCallLogPadding, mCallLogPadding, mCallLogPadding);
+            params.setMargins(mCallLogMargin, mCallLogMargin, mCallLogMargin, mCallLogMarginBottom);
             view.setLayoutParams(params);
+
+            LinearLayout actionView =
+                    (LinearLayout)view.findViewById(R.id.primary_action_view);
+            actionView.setPaddingRelative(
+                    mCallLogPaddingStart, actionView.getPaddingTop(),
+                    actionView.getPaddingEnd(), mCallLogPaddingBottom);
+
             view.setTranslationZ(getResources().getDimensionPixelSize(
                     R.dimen.recent_call_log_item_translation_z));
 
diff --git a/src/com/android/dialer/widget/ActionBarController.java b/src/com/android/dialer/widget/ActionBarController.java
index 49506f4..67037a2 100644
--- a/src/com/android/dialer/widget/ActionBarController.java
+++ b/src/com/android/dialer/widget/ActionBarController.java
@@ -7,6 +7,8 @@
 import android.os.Bundle;
 import android.util.Log;
 
+import com.android.contacts.common.animation.AnimUtils;
+import com.android.contacts.common.animation.AnimUtils.AnimationCallback;
 import com.android.dialer.DialtactsActivity;
 
 /**
@@ -26,6 +28,18 @@
 
     private boolean mIsActionBarSlidUp;
 
+    private final AnimationCallback mFadeOutCallback = new AnimationCallback() {
+        @Override
+        public void onAnimationEnd() {
+            slideActionBarUp(false);
+        }
+
+        @Override
+        public void onAnimationCancel() {
+            slideActionBarUp(false);
+        }
+    };
+
     public interface ActivityUi {
         public boolean isInSearchUi();
         public boolean hasSearchQuery();
@@ -127,7 +141,7 @@
             slideActionBarUp(true);
         } else {
             // From the lists fragment
-            mSearchBox.fadeOut();
+            mSearchBox.fadeOut(mFadeOutCallback);
         }
     }
 
diff --git a/src/com/android/dialer/widget/SearchEditTextLayout.java b/src/com/android/dialer/widget/SearchEditTextLayout.java
index ef3ddcc..311d2af 100644
--- a/src/com/android/dialer/widget/SearchEditTextLayout.java
+++ b/src/com/android/dialer/widget/SearchEditTextLayout.java
@@ -123,7 +123,11 @@
     }
 
     public void fadeOut() {
-        AnimUtils.fadeOut(this, ANIMATION_DURATION);
+        fadeOut(null);
+    }
+
+    public void fadeOut(AnimUtils.AnimationCallback callback) {
+        AnimUtils.fadeOut(this, ANIMATION_DURATION, callback);
         mIsFadedOut = true;
     }
 
