diff --git a/res/layout/playback_layout.xml b/res/layout/playback_layout.xml
index 45e7ad9..05b3e43 100644
--- a/res/layout/playback_layout.xml
+++ b/res/layout/playback_layout.xml
@@ -77,6 +77,16 @@
                 android:layout_centerHorizontal="true"
                 android:layout_marginTop="10dip"
             />
+            <TextView
+                android:id="@+id/playback_speed_text"
+                android:layout_height="wrap_content"
+                android:layout_width="wrap_content"
+                android:textSize="14sp"
+                android:layout_alignParentTop="true"
+                android:layout_centerHorizontal="true"
+                android:layout_marginTop="10dip"
+                android:alpha="0"
+            />
             <ImageButton
                 android:id="@+id/rate_decrease_button"
                 android:src="@drawable/ic_minus_holo_dark"
diff --git a/src/com/android/contacts/voicemail/VoicemailPlaybackFragment.java b/src/com/android/contacts/voicemail/VoicemailPlaybackFragment.java
index d306209..fcf99b6 100644
--- a/src/com/android/contacts/voicemail/VoicemailPlaybackFragment.java
+++ b/src/com/android/contacts/voicemail/VoicemailPlaybackFragment.java
@@ -66,7 +66,6 @@
     private SeekBar mPlaybackSeek;
     private ImageButton mStartStopButton;
     private ImageButton mPlaybackSpeakerphone;
-    private TextView mPlaybackPositionText;
     private ImageButton mRateDecreaseButton;
     private ImageButton mRateIncreaseButton;
     private TextViewWithMessagesController mTextController;
@@ -79,10 +78,11 @@
         mPlaybackSeek = (SeekBar) view.findViewById(R.id.playback_seek);
         mStartStopButton = (ImageButton) view.findViewById(R.id.playback_start_stop);
         mPlaybackSpeakerphone = (ImageButton) view.findViewById(R.id.playback_speakerphone);
-        mPlaybackPositionText = (TextView) view.findViewById(R.id.playback_position_text);
         mRateDecreaseButton = (ImageButton) view.findViewById(R.id.rate_decrease_button);
         mRateIncreaseButton = (ImageButton) view.findViewById(R.id.rate_increase_button);
-        mTextController = new TextViewWithMessagesController(mPlaybackPositionText);
+        mTextController = new TextViewWithMessagesController(
+                (TextView) view.findViewById(R.id.playback_position_text),
+                (TextView) view.findViewById(R.id.playback_speed_text));
         return view;
     }
 
@@ -259,30 +259,30 @@
      * All the methods on this class must be called from the ui thread.
      */
     private static final class TextViewWithMessagesController {
+        private static final float VISIBLE = 1;
+        private static final float INVISIBLE = 0;
+        private static final long SHORT_ANIMATION_MS = 200;
+        private static final long LONG_ANIMATION_MS = 400;
         private final Object mLock = new Object();
-        private final TextView mTextView;
-        @GuardedBy("mLock") String mCurrentText = "";
-        @GuardedBy("mLock") Runnable mRunnable;
+        private final TextView mPermanentTextView;
+        private final TextView mTemporaryTextView;
+        @GuardedBy("mLock") private Runnable mRunnable;
 
-        public TextViewWithMessagesController(TextView textView) {
-            mTextView = textView;
+        public TextViewWithMessagesController(TextView permanentTextView,
+                TextView temporaryTextView) {
+            mPermanentTextView = permanentTextView;
+            mTemporaryTextView = temporaryTextView;
         }
 
         public void setPermanentText(String text) {
-            synchronized (mLock) {
-                mCurrentText = text;
-                // If there's currently a Runnable pending, then we don't alter the display
-                // text. The Runnable will use the most recent version of mCurrentText
-                // when it completes.
-                if (mRunnable == null) {
-                    mTextView.setText(text);
-                }
-            }
+            mPermanentTextView.setText(text);
         }
 
         public void setTemporaryText(String text, long duration, TimeUnit units) {
             synchronized (mLock) {
-                mTextView.setText(text);
+                mTemporaryTextView.setText(text);
+                mTemporaryTextView.animate().alpha(VISIBLE).setDuration(SHORT_ANIMATION_MS);
+                mPermanentTextView.animate().alpha(INVISIBLE).setDuration(SHORT_ANIMATION_MS);
                 mRunnable = new Runnable() {
                     @Override
                     public void run() {
@@ -292,12 +292,15 @@
                             // one is now defunct and needs to take no action.
                             if (mRunnable == this) {
                                 mRunnable = null;
-                                mTextView.setText(mCurrentText);
+                                mTemporaryTextView.animate()
+                                        .alpha(INVISIBLE).setDuration(LONG_ANIMATION_MS);
+                                mPermanentTextView.animate()
+                                        .alpha(VISIBLE).setDuration(LONG_ANIMATION_MS);
                             }
                         }
                     }
                 };
-                mTextView.postDelayed(mRunnable, units.toMillis(duration));
+                mTemporaryTextView.postDelayed(mRunnable, units.toMillis(duration));
             }
         }
     }
diff --git a/src/com/android/contacts/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/contacts/voicemail/VoicemailPlaybackPresenter.java
index eac502d..6f3a625 100644
--- a/src/com/android/contacts/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/contacts/voicemail/VoicemailPlaybackPresenter.java
@@ -16,6 +16,8 @@
 
 package com.android.contacts.voicemail;
 
+import static android.util.MathUtils.constrain;
+
 import com.android.contacts.R;
 import com.android.ex.variablespeed.MediaPlayerProxy;
 import com.android.ex.variablespeed.SingleThreadedMediaPlayerProxy;
@@ -211,7 +213,7 @@
         @Override
         public void onClick(View v) {
             // Adjust the current rate, then clamp it to the allowed values.
-            mRateIndex = clamp(mRateIndex + (mIncrease ? 1 : -1), 0, PRESET_RATES.length - 1);
+            mRateIndex = constrain(mRateIndex + (mIncrease ? 1 : -1), 0, PRESET_RATES.length - 1);
             // Whether or not we have actually changed the index, call changeRate().
             // This will ensure that we show the "fastest" or "slowest" text on the ui to indicate
             // to the user that it doesn't get any faster or slower.
@@ -219,18 +221,13 @@
         }
     }
 
-    /** Clamp the input value to between min and max inclusive. */
-    private static int clamp(int input, int min, int max) {
-        return Math.max(Math.min(input, max), min);
-    }
-
     private void resetPrepareStartPlaying(int clipPositionInMillis) {
         try {
             mPlayer.reset();
             mPlayer.setDataSource(mView.getDataSourceContext(), mVoicemailUri);
             mPlayer.prepare();
             mDuration.set(mPlayer.getDuration());
-            int startPosition = clamp(clipPositionInMillis, 0, mDuration.get());
+            int startPosition = constrain(clipPositionInMillis, 0, mDuration.get());
             mView.setClipPosition(startPosition, mDuration.get());
             mPlayer.seekTo(startPosition);
             mPlayer.start();
