diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index df2a87c..e516a53 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -330,8 +330,8 @@
 
         final Resources resources = getResources();
         mActionBarHeight = resources.getDimensionPixelSize(R.dimen.action_bar_height);
-        mFloatingActionButtonMarginBottom =
-                resources.getDimensionPixelOffset(R.dimen.floating_action_button_margin_bottom);
+        mFloatingActionButtonMarginBottom = resources.getDimensionPixelOffset(
+                R.dimen.floating_action_button_margin_bottom);
         mFloatingActionButtonDialpadMarginBottom = resources.getDimensionPixelOffset(
                 R.dimen.floating_action_button_dialpad_margin_bottom);
 
@@ -662,7 +662,8 @@
     }
 
     private void updateSearchFragmentPosition() {
-        int translationValue = mIsDialpadShown ?  -mActionBarHeight : 0;
+        int startTranslationValue = mIsDialpadShown ? mActionBarHeight : 0;
+        int endTranslationValue = mIsDialpadShown ? 0 : mActionBarHeight;
         SearchFragment fragment = null;
         if (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()) {
             fragment = mSmartDialSearchFragment;
@@ -670,8 +671,11 @@
             fragment = mRegularSearchFragment;
         }
         if (fragment != null && fragment.isVisible()) {
-            fragment.getView().animate().translationY(translationValue)
-                    .setInterpolator(hideActionBarInterpolator).setDuration(ANIMATION_DURATION);
+            fragment.getListView().setTranslationY(startTranslationValue);
+            fragment.getListView().animate().translationY(endTranslationValue)
+                    .setInterpolator(hideActionBarInterpolator)
+                    .setDuration(ANIMATION_DURATION)
+                    .start();
         }
     }
 
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 9a30c4d..f309f72 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -80,14 +80,8 @@
         mActionBarHeight = activity.getActionBarHeight();
 
         final View parentView = getView();
-        parentView.setPaddingRelative(
-                parentView.getPaddingStart(),
-                mActionBarHeight,
-                parentView.getPaddingEnd(),
-                parentView.getPaddingBottom());
 
         final ListView listView = getListView();
-
         listView.setOnScrollListener(new OnScrollListener() {
             @Override
             public void onScrollStateChanged(AbsListView view, int scrollState) {
@@ -99,10 +93,8 @@
                     int totalItemCount) {
             }
         });
-
-
-        if (!activity.isActionBarShowing()) {
-            parentView.setTranslationY(-mActionBarHeight);
+        if (activity.isActionBarShowing()) {
+            listView.setTranslationY(mActionBarHeight);
         }
     }
 
