diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index df2a87c..26c1698 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -141,8 +141,6 @@
 
     private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1;
 
-    private static final int ANIMATION_DURATION = 250;
-
     private RelativeLayout parentLayout;
 
     /**
@@ -206,8 +204,6 @@
      */
     private View mRemoveViewContainer;
 
-    final Interpolator hideActionBarInterpolator = new AccelerateInterpolator(1.5f);
-    final Interpolator showActionBarInterpolator = new DecelerateInterpolator(1.5f);
     private String mSearchQuery;
 
     private DialerDatabaseHelper mDialerDatabaseHelper;
@@ -662,7 +658,6 @@
     }
 
     private void updateSearchFragmentPosition() {
-        int translationValue = mIsDialpadShown ?  -mActionBarHeight : 0;
         SearchFragment fragment = null;
         if (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()) {
             fragment = mSmartDialSearchFragment;
@@ -670,8 +665,7 @@
             fragment = mRegularSearchFragment;
         }
         if (fragment != null && fragment.isVisible()) {
-            fragment.getView().animate().translationY(translationValue)
-                    .setInterpolator(hideActionBarInterpolator).setDuration(ANIMATION_DURATION);
+            fragment.updatePosition(true /* animate */);
         }
     }
 
@@ -1145,6 +1139,10 @@
         return mActionBarController.isActionBarShowing();
     }
 
+    public boolean isDialpadShown() {
+        return mIsDialpadShown;
+    }
+
     @Override
     public int getActionBarHideOffset() {
         return getActionBar().getHideOffset();
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 9a30c4d..9e2b8d0 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -17,13 +17,16 @@
 
 import android.app.Activity;
 import android.content.Intent;
+import android.content.res.Resources;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.view.View;
+import android.view.animation.Interpolator;
 import android.widget.AbsListView;
 import android.widget.AbsListView.OnScrollListener;
 import android.widget.ListView;
 
+import com.android.contacts.common.animation.AnimUtils;
 import com.android.contacts.common.list.ContactEntryListAdapter;
 import com.android.contacts.common.list.ContactListItemView;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
@@ -31,7 +34,6 @@
 import com.android.contacts.common.util.ViewUtil;
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
-import com.android.dialer.list.OnListFragmentScrolledListener;
 import com.android.dialer.util.DialerUtils;
 
 public class SearchFragment extends PhoneNumberPickerFragment {
@@ -44,9 +46,16 @@
      */
     private String mAddToContactNumber;
     private int mActionBarHeight;
+    private int mShadowHeight;
+    private int mPaddingTop;
+    private int mShowDialpadDuration;
+    private int mHideDialpadDuration;
+
+    private HostInterface mActivity;
 
     public interface HostInterface {
         public boolean isActionBarShowing();
+        public boolean isDialpadShown();
         public int getActionBarHideOffset();
         public int getActionBarHeight();
     }
@@ -75,9 +84,14 @@
             getAdapter().setHasHeader(0, false);
         }
 
-        HostInterface activity = (HostInterface) getActivity();
+        mActivity = (HostInterface) getActivity();
 
-        mActionBarHeight = activity.getActionBarHeight();
+        final Resources res = getResources();
+        mActionBarHeight = mActivity.getActionBarHeight();
+        mShadowHeight  = res.getDrawable(R.drawable.search_shadow).getIntrinsicHeight();
+        mPaddingTop = res.getDimensionPixelSize(R.dimen.search_list_padding_top);
+        mShowDialpadDuration = res.getInteger(R.integer.dialpad_slide_in_duration);
+        mHideDialpadDuration = res.getInteger(R.integer.dialpad_slide_out_duration);
 
         final View parentView = getView();
         parentView.setPaddingRelative(
@@ -88,6 +102,7 @@
 
         final ListView listView = getListView();
 
+        listView.setClipToPadding(false);
         listView.setOnScrollListener(new OnScrollListener() {
             @Override
             public void onScrollStateChanged(AbsListView view, int scrollState) {
@@ -100,10 +115,7 @@
             }
         });
 
-
-        if (!activity.isActionBarShowing()) {
-            parentView.setTranslationY(-mActionBarHeight);
-        }
+        updatePosition(false /* animate */);
     }
 
     @Override
@@ -155,4 +167,36 @@
                     R.string.add_contact_not_available);
         }
     }
+
+    /**
+     * Updates the position and padding of the search fragment, depending on whether the dialpad is
+     * shown. This can be optionally animated.
+     * @param animate
+     */
+    public void updatePosition(boolean animate) {
+        // Use negative shadow height instead of 0 to account for the 9-patch's shadow.
+        int translationValue = mActivity.isDialpadShown() ? -mActionBarHeight : -mShadowHeight;
+
+        if (animate) {
+            Interpolator interpolator =
+                    mActivity.isDialpadShown() ? AnimUtils.EASE_IN : AnimUtils.EASE_OUT ;
+            int duration =
+                    mActivity.isDialpadShown() ? mShowDialpadDuration : mHideDialpadDuration;
+            getView().animate()
+                    .translationY(translationValue)
+                    .setInterpolator(interpolator)
+                    .setDuration(duration);
+        } else {
+            getView().setTranslationY(translationValue);
+        }
+
+        // There is padding which should only be applied when the dialpad is not shown.
+        int paddingTop = mActivity.isDialpadShown() ? 0 : mPaddingTop;
+        final ListView listView = getListView();
+        listView.setPaddingRelative(
+                listView.getPaddingStart(),
+                paddingTop,
+                listView.getPaddingEnd(),
+                listView.getPaddingBottom());
+    }
 }
diff --git a/src/com/android/dialer/widget/SearchEditTextLayout.java b/src/com/android/dialer/widget/SearchEditTextLayout.java
index dbb2b22..d229aa4 100644
--- a/src/com/android/dialer/widget/SearchEditTextLayout.java
+++ b/src/com/android/dialer/widget/SearchEditTextLayout.java
@@ -19,6 +19,7 @@
 import android.animation.ValueAnimator;
 import android.animation.ValueAnimator.AnimatorUpdateListener;
 import android.content.Context;
+import android.graphics.Color;
 import android.util.AttributeSet;
 import android.view.KeyEvent;
 import android.view.View;
@@ -30,6 +31,7 @@
 import com.android.dialer.R;
 
 public class SearchEditTextLayout extends FrameLayout {
+    private static final float EXPAND_MARGIN_FRACTION_START = 0.8f;
     private static final int ANIMATION_DURATION = 200;
 
     private OnKeyListener mPreImeKeyListener;
@@ -47,6 +49,11 @@
     private View mCollapsed;
     private View mExpanded;
     private EditText mSearchView;
+    private View mCollapsedSearchBox;
+    private View mVoiceSearchButtonView;
+    private View mOverflowButtonView;
+    private View mBackButtonView;
+    private View mClearButtonView;
 
     private ValueAnimator mAnimator;
 
@@ -85,6 +92,12 @@
         mExpanded = findViewById(R.id.search_box_expanded);
         mSearchView = (EditText) mExpanded.findViewById(R.id.search_view);
 
+        mCollapsedSearchBox = findViewById(R.id.search_box_start_search);
+        mVoiceSearchButtonView = findViewById(R.id.voice_search_button);
+        mOverflowButtonView = findViewById(R.id.dialtacts_options_menu_button);
+        mBackButtonView = findViewById(R.id.search_back_button);
+        mClearButtonView = findViewById(R.id.search_close_button);
+
         mSearchView.setOnFocusChangeListener(new OnFocusChangeListener() {
             @Override
             public void onFocusChange(View v, boolean hasFocus) {
@@ -149,9 +162,16 @@
         }
     }
     public void expand(boolean animate, boolean requestFocus) {
+        mCollapsedSearchBox.setVisibility(View.GONE);
+        mVoiceSearchButtonView.setVisibility(View.GONE);
+        mOverflowButtonView.setVisibility(View.GONE);
+        mBackButtonView.setVisibility(View.VISIBLE);
+        mClearButtonView.setVisibility(View.VISIBLE);
+
         if (animate) {
             AnimUtils.crossFadeViews(mExpanded, mCollapsed, ANIMATION_DURATION);
-            mAnimator = ValueAnimator.ofFloat(1f, 0f);
+            mAnimator = ValueAnimator.ofFloat(EXPAND_MARGIN_FRACTION_START, 0f);
+            setMargins(EXPAND_MARGIN_FRACTION_START);
             prepareAnimator(true);
         } else {
             mExpanded.setVisibility(View.VISIBLE);
@@ -169,6 +189,12 @@
     }
 
     public void collapse(boolean animate) {
+        mCollapsedSearchBox.setVisibility(View.VISIBLE);
+        mVoiceSearchButtonView.setVisibility(View.VISIBLE);
+        mOverflowButtonView.setVisibility(View.VISIBLE);
+        mBackButtonView.setVisibility(View.GONE);
+        mClearButtonView.setVisibility(View.GONE);
+
         if (animate) {
             AnimUtils.crossFadeViews(mCollapsed, mExpanded, ANIMATION_DURATION);
             mAnimator = ValueAnimator.ofFloat(0f, 1f);
