diff --git a/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java b/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java
index 11dc00a..374f733 100644
--- a/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java
@@ -57,6 +57,8 @@
         rowPaddingBottom = resources.getDimensionPixelSize(
                 R.dimen.favorites_row_bottom_padding);
 
+        favoriteContactCard.setBackgroundResource(R.drawable.bottom_border_background);
+
         favoriteContactCard.setPaddingRelative(rowPaddingStart, rowPaddingTop, rowPaddingEnd,
                 rowPaddingBottom);
 
diff --git a/src/com/android/dialer/list/PhoneFavoriteTileView.java b/src/com/android/dialer/list/PhoneFavoriteTileView.java
index 8887a2c..43dbad3 100644
--- a/src/com/android/dialer/list/PhoneFavoriteTileView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteTileView.java
@@ -131,20 +131,10 @@
     public void displayRemovalDialog() {
         mRemovalDialogue.setVisibility(VISIBLE);
         mRemovalDialogue.setAlpha(0f);
-        final int animationLength = ANIMATION_LENGTH;
-        final AnimatorSet animSet = new AnimatorSet();
         final ObjectAnimator fadeIn = ObjectAnimator.ofFloat(mRemovalDialogue, "alpha",
-                1.f).setDuration(animationLength);
+                1.f).setDuration(ANIMATION_LENGTH);
 
-        if (mParentRow.getItemViewType() == ViewTypes.FREQUENT) {
-            final ObjectAnimator backgroundFadeIn = ObjectAnimator.ofInt(
-                    mParentRow.getBackground(), "alpha", 0).setDuration(animationLength);
-            animSet.playTogether(fadeIn, backgroundFadeIn);
-        } else {
-            animSet.playTogether(fadeIn);
-        }
-
-        animSet.addListener(new AnimatorListenerAdapter() {
+        fadeIn.addListener(new AnimatorListenerAdapter() {
             @Override
             public void onAnimationStart(Animator animation) {
                 mParentRow.setHasTransientState(true);
@@ -155,8 +145,7 @@
                 mParentRow.setHasTransientState(false);
             }
         });
-
-        animSet.start();
+        fadeIn.start();
     }
 
     /**
@@ -172,10 +161,11 @@
                 setDuration(ANIMATION_LENGTH);
         final ObjectAnimator moveBack = ObjectAnimator.ofFloat(mFavoriteContactCard, "translationX",
                 0.f).setDuration(ANIMATION_LENGTH);
-        final ObjectAnimator backgroundFadeOut = ObjectAnimator.ofInt(mParentRow.getBackground(),
-                "alpha", 255).setDuration(ANIMATION_LENGTH);
+
         final AnimatorSet animSet = new AnimatorSet();
-        animSet.playTogether(fadeIn, moveBack, backgroundFadeOut);
+
+        animSet.playTogether(fadeIn, moveBack);
+
         animSet.addListener(new AnimatorListenerAdapter() {
             @Override
             public void onAnimationStart(Animator animation) {
diff --git a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
index 8eba964..91acc6f 100644
--- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
@@ -688,6 +688,8 @@
                         R.dimen.favorites_row_start_padding);
                 mRowPaddingEnd = resources.getDimensionPixelSize(
                         R.dimen.favorites_row_end_padding);
+
+                setBackgroundResource(R.drawable.bottom_border_background);
             } else {
                 // For row views, padding is set on the view itself.
                 mRowPaddingTop = 0;
@@ -696,8 +698,6 @@
                 mRowPaddingEnd = 0;
             }
 
-            setBackgroundResource(R.drawable.bottom_border_background);
-
             setPaddingRelative(mRowPaddingStart, mRowPaddingTop, mRowPaddingEnd,
                     mRowPaddingBottom);
 
@@ -743,7 +743,6 @@
                 }
             }
             setPressed(false);
-            getBackground().setAlpha(255);
         }
 
         private void addTileFromEntry(ContactEntry entry, int childIndex, boolean isLastRow) {
@@ -960,11 +959,12 @@
         public void onBeginDrag(View v) {
             removePendingContactEntry();
             final int index = indexOfChild(v);
-            // Move tile to front so that any overlap will be hidden behind its siblings
+
+            /*
             if (index > 0) {
                 detachViewFromParent(index);
                 attachViewToParent(v, 0, v.getLayoutParams());
-            }
+            }*/
 
             // We do this so the underlying ScrollView knows that it won't get
             // the chance to intercept events anymore
diff --git a/src/com/android/dialer/list/SwipeableListView.java b/src/com/android/dialer/list/SwipeableListView.java
index 8f50f4c..449628d 100644
--- a/src/com/android/dialer/list/SwipeableListView.java
+++ b/src/com/android/dialer/list/SwipeableListView.java
@@ -152,13 +152,12 @@
 
     @Override
     public void onDragCancelled(View v) {
-        v.setHasTransientState(false);
     }
 
     @Override
     public void onBeginDrag(View v) {
         final View tileRow = (View) v.getParent();
-        tileRow.setHasTransientState(true);
+
         // We do this so the underlying ScrollView knows that it won't get
         // the chance to intercept events anymore
         requestDisallowInterceptTouchEvent(true);
