diff --git a/res/drawable/expanding_entry_card_collapse_white_24.xml b/res/drawable/expanding_entry_card_collapse_white_24.xml
deleted file mode 100644
index a38706e..0000000
--- a/res/drawable/expanding_entry_card_collapse_white_24.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?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.
--->
-
-<rotate xmlns:android="http://schemas.android.com/apk/res/android"
-        android:drawable="@drawable/expanding_entry_card_expand_white_24"
-        android:fromDegrees="180"
-        android:toDegrees="0"/>
\ No newline at end of file
diff --git a/res/layout/quickcontact_expanding_entry_card_button.xml b/res/layout/quickcontact_expanding_entry_card_button.xml
index 7bf7e67..1f0c724 100644
--- a/res/layout/quickcontact_expanding_entry_card_button.xml
+++ b/res/layout/quickcontact_expanding_entry_card_button.xml
@@ -30,15 +30,24 @@
         android:layout_height="wrap_content"
         android:orientation="horizontal" >
 
+        <ImageView
+            android:id="@+id/arrow"
+            android:src="@drawable/expanding_entry_card_expand_white_24"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/expanding_entry_card_item_padding_start"
+            android:paddingBottom="@dimen/expanding_entry_card_button_padding_vertical"
+            android:paddingTop="@dimen/expanding_entry_card_button_padding_vertical"
+            android:layout_weight="0" />
+
         <TextView
             android:id="@+id/text"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:drawablePadding="@dimen/expanding_entry_card_item_image_spacing"
+            android:paddingStart="@dimen/expanding_entry_card_item_image_spacing"
             android:gravity="center_vertical"
             android:layout_weight="0"
             android:paddingBottom="@dimen/expanding_entry_card_button_padding_vertical"
-            android:paddingStart="@dimen/expanding_entry_card_item_padding_start"
             android:paddingTop="@dimen/expanding_entry_card_button_padding_vertical"
             android:textColor="@color/expanding_entry_card_button_text_color"
             android:textSize="@dimen/expanding_entry_card_title_text_size" />
diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
index 6812ac4..49a2b85 100644
--- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
+++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
@@ -15,6 +15,7 @@
  */
 package com.android.contacts.quickcontact;
 
+import android.animation.ObjectAnimator;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -177,8 +178,7 @@
     private boolean mAllEntriesInflated = false;
     private List<List<View>> mEntryViews;
     private LinearLayout mEntriesViewGroup;
-    private final Drawable mCollapseArrowDrawable;
-    private final Drawable mExpandArrowDrawable;
+    private final ImageView mExpandCollapseArrow;
     private int mThemeColor;
     private ColorFilter mThemeColorFilter;
     private boolean mIsAlwaysExpanded;
@@ -211,14 +211,11 @@
                 expandingEntryCardView.findViewById(R.id.content_area_linear_layout);
         mTitleTextView = (TextView) expandingEntryCardView.findViewById(R.id.title);
         mContainer = (LinearLayout) expandingEntryCardView.findViewById(R.id.container);
-        mCollapseArrowDrawable =
-                getResources().getDrawable(R.drawable.expanding_entry_card_collapse_white_24);
-        mExpandArrowDrawable =
-                getResources().getDrawable(R.drawable.expanding_entry_card_expand_white_24);
 
         mExpandCollapseButton = inflater.inflate(
                 R.layout.quickcontact_expanding_entry_card_button, this, false);
         mExpandCollapseTextView = (TextView) mExpandCollapseButton.findViewById(R.id.text);
+        mExpandCollapseArrow = (ImageView) mExpandCollapseButton.findViewById(R.id.arrow);
         mExpandCollapseButton.setOnClickListener(mExpandCollapseButtonListener);
         mBadgeContainer = (LinearLayout) mExpandCollapseButton.findViewById(R.id.badge_container);
 
@@ -256,10 +253,10 @@
         mAnimationViewGroup = animationViewGroup;
 
         if (mIsExpanded) {
-            updateExpandCollapseButton(getCollapseButtonText());
+            updateExpandCollapseButton(getCollapseButtonText(), /* duration = */ 0);
             inflateAllEntries(layoutInflater);
         } else {
-            updateExpandCollapseButton(getExpandButtonText());
+            updateExpandCollapseButton(getExpandButtonText(), /* duration = */ 0);
             inflateInitialEntries(layoutInflater);
         }
         insertEntriesIntoViewGroup();
@@ -468,8 +465,7 @@
 
             // Expand/Collapse
             mExpandCollapseTextView.setTextColor(mThemeColor);
-            mCollapseArrowDrawable.setColorFilter(mThemeColorFilter);
-            mExpandArrowDrawable.setColorFilter(mThemeColorFilter);
+            mExpandCollapseArrow.setColorFilter(mThemeColorFilter);
         }
     }
 
@@ -577,16 +573,20 @@
         return view;
     }
 
-    private void updateExpandCollapseButton(CharSequence buttonText) {
-        final Drawable arrow = mIsExpanded ? mCollapseArrowDrawable : mExpandArrowDrawable;
-        updateBadges();
-        if (getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
-            mExpandCollapseTextView.setCompoundDrawablesWithIntrinsicBounds(null, null, arrow,
-                    null);
+    private void updateExpandCollapseButton(CharSequence buttonText, long duration) {
+        if (mIsExpanded) {
+            final ObjectAnimator animator = ObjectAnimator.ofFloat(mExpandCollapseArrow,
+                    "rotation", 180);
+            animator.setDuration(duration);
+            animator.start();
         } else {
-            mExpandCollapseTextView.setCompoundDrawablesWithIntrinsicBounds(arrow, null, null,
-                    null);
+            final ObjectAnimator animator = ObjectAnimator.ofFloat(mExpandCollapseArrow,
+                    "rotation", 0);
+            animator.setDuration(duration);
+            animator.start();
         }
+        updateBadges();
+
         mExpandCollapseTextView.setText(buttonText);
     }
 
@@ -665,13 +665,15 @@
         // In order to insert new entries, we may need to inflate them for the first time
         inflateAllEntries(LayoutInflater.from(getContext()));
         insertEntriesIntoViewGroup();
-        updateExpandCollapseButton(getCollapseButtonText());
+        updateExpandCollapseButton(getCollapseButtonText(),
+                DURATION_EXPAND_ANIMATION_CHANGE_BOUNDS);
     }
 
     private void collapse() {
         final int startingHeight = mEntriesViewGroup.getMeasuredHeight();
         mIsExpanded = false;
-        updateExpandCollapseButton(getExpandButtonText());
+        updateExpandCollapseButton(getExpandButtonText(),
+                DURATION_COLLAPSE_ANIMATION_CHANGE_BOUNDS);
 
         final ChangeBounds boundsTransition = new ChangeBounds();
         boundsTransition.setDuration(DURATION_COLLAPSE_ANIMATION_CHANGE_BOUNDS);
