diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
index 0313f40..73f4b3b 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
@@ -69,17 +69,13 @@
         /** Update rate for the slider, 30fps. */
         private static final int SLIDER_UPDATE_PERIOD_MILLIS = 1000 / 30;
 
-        private final MediaPlayer mMediaPlayer;
-        private final int mDuration;
+        private int mDuration;
         private final ScheduledExecutorService mExecutorService;
         private final Object mLock = new Object();
         @GuardedBy("mLock") private ScheduledFuture<?> mScheduledFuture;
 
-        public PositionUpdater(
-                MediaPlayer mediaPlayer,
-                ScheduledExecutorService executorService) {
-            mMediaPlayer = mediaPlayer;
-            mDuration = mediaPlayer.getDuration();
+        public PositionUpdater(int duration, ScheduledExecutorService executorService) {
+            mDuration = duration;
             mExecutorService = executorService;
         }
 
@@ -90,11 +86,11 @@
                 public void run() {
                     int currentPosition = 0;
                     synchronized (mLock) {
-                        if (mScheduledFuture == null) {
+                        if (mScheduledFuture == null || mPresenter == null) {
                             // This task has been canceled. Just stop now.
                             return;
                         }
-                        currentPosition = mMediaPlayer.getCurrentPosition();
+                        currentPosition = mPresenter.getMediaPlayerPosition();
                     }
                     setClipPosition(currentPosition, mDuration);
                 }
@@ -234,9 +230,7 @@
     }
 
     @Override
-    public void onPlaybackStarted(
-            MediaPlayer mediaPlayer,
-            ScheduledExecutorService executorService) {
+    public void onPlaybackStarted(int duration, ScheduledExecutorService executorService) {
         mIsPlaying = true;
 
         mStartStopButton.setImageResource(R.drawable.ic_hold_pause);
@@ -245,7 +239,7 @@
             onSpeakerphoneOn(mPresenter.isSpeakerphoneOn());
         }
 
-        mPositionUpdater = new PositionUpdater(mediaPlayer, executorService);
+        mPositionUpdater = new PositionUpdater(duration, executorService);
         mPositionUpdater.startUpdating();
     }
 
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
index a0e4854..63467dd 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
@@ -78,7 +78,7 @@
         void disableUiElements();
         void enableUiElements();
         void onPlaybackError(Exception e);
-        void onPlaybackStarted(MediaPlayer mediaPlayer, ScheduledExecutorService executorService);
+        void onPlaybackStarted(int duration, ScheduledExecutorService executorService);
         void onPlaybackStopped();
         void onSpeakerphoneOn(boolean on);
         void setClipPosition(int clipPositionInMillis, int clipLengthInMillis);
@@ -196,6 +196,7 @@
         } else {
             mVoicemailUri = voicemailUri;
             mPosition = 0;
+            mDuration.set(0);
             mIsPlaying = startPlayingImmediately;
             checkForContent();
         }
@@ -484,7 +485,7 @@
         }
 
         enableProximitySensor();
-        mView.onPlaybackStarted(mMediaPlayer, getScheduledExecutorServiceInstance());
+        mView.onPlaybackStarted(mDuration.get(), getScheduledExecutorServiceInstance());
     }
 
     /**
@@ -566,6 +567,10 @@
         return mVoicemailUri;
     }
 
+    public int getMediaPlayerPosition() {
+        return mIsPrepared ? mMediaPlayer.getCurrentPosition() : 0;
+    }
+
     private static synchronized ScheduledExecutorService getScheduledExecutorServiceInstance() {
         if (mScheduledExecutorService == null) {
             mScheduledExecutorService = Executors.newScheduledThreadPool(NUMBER_OF_THREADS_IN_POOL);
