diff --git a/res/drawable/tab_voicemail.xml b/res/drawable/tab_voicemail.xml
new file mode 100644
index 0000000..568891b
--- /dev/null
+++ b/res/drawable/tab_voicemail.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2015 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
+  -->
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+    android:color="@color/tab_ripple_color">
+
+    <item>
+        <bitmap android:src="@drawable/ic_voicemail_24dp"
+            android:gravity="center" />
+    </item>
+
+    <item android:id="@android:id/mask">
+        <color android:color="@android:color/white" />
+    </item>
+
+</ripple>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e3b2682..21cd890 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -471,12 +471,19 @@
          [CHAR LIMIT=30] -->
     <string name="call_log_voicemail_title">Voicemail</string>
 
+    <!-- Accessibility text for the tab showing recent and favorite contacts who can be called.
+         [CHAR LIMIT=40] -->
     <string name="tab_speed_dial">Speed dial</string>
 
+    <!-- Accessibility text for the tab showing the call log of recent calls. [CHAR LIMIT=40] -->
     <string name="tab_recents">Recents</string>
 
+    <!-- Accessibility text for the tab showing the user's contacts. [CHAR LIMIT=40] -->
     <string name="tab_all_contacts">Contacts</string>
 
+    <!-- Accessibility text for the tab showing the user's voicemails. [CHAR LIMIT=40] -->
+    <string name="tab_voicemail">Voicemail</string>
+
     <!--  Text displayed when user swipes out a favorite contact -->
     <string name="favorite_hidden">Removed from favorites</string>
     <!--  Text displayed for the undo button to undo removing a favorite contact -->
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index db247ba..1c684a5 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -62,9 +62,6 @@
 import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.TelecomUtil;
 import com.android.dialer.voicemail.VoicemailPlaybackFragment;
-import com.android.dialer.voicemail.VoicemailStatusHelper;
-import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
-import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
 
 import java.util.List;
 
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index 8a0cc13..00e5e6b 100644
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -245,9 +245,10 @@
 
         mHandler.removeCallbacks(mWaitForVoicemailTimeoutRunnable);
         // Update mHasActiveVoicemailProvider, which controls the number of tabs displayed.
-        int activeSources = mVoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor);
-        if (activeSources > 0 != mHasActiveVoicemailProvider) {
-            mHasActiveVoicemailProvider = activeSources > 0;
+        boolean hasActiveVoicemailProvider =
+                mVoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor) > 0;
+        if (hasActiveVoicemailProvider != mHasActiveVoicemailProvider) {
+            mHasActiveVoicemailProvider = hasActiveVoicemailProvider;
             mViewPagerAdapter.notifyDataSetChanged();
             mViewPagerTabs.setViewPager(mViewPager);
             if (mSwitchToVoicemailTab) {
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index 6e30af2..0ac6b1a 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -9,6 +9,7 @@
 import android.database.Cursor;
 import android.os.Bundle;
 import android.os.Trace;
+import android.provider.CallLog.Calls;
 import android.support.v13.app.FragmentPagerAdapter;
 import android.support.v4.view.ViewPager;
 import android.support.v4.view.ViewPager.OnPageChangeListener;
@@ -28,6 +29,8 @@
 import com.android.dialer.calllog.CallLogQueryHandler;
 import com.android.dialer.calllog.ContactInfoHelper;
 import com.android.dialer.util.DialerUtils;
+import com.android.dialer.voicemail.VoicemailStatusHelper;
+import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
 import com.android.dialer.widget.ActionBarController;
 import com.android.dialerbind.ObjectFactory;
 
@@ -41,7 +44,8 @@
  * ViewPager containing the lists up above the search bar and pin it against the top of the
  * screen.
  */
-public class ListsFragment extends Fragment implements ViewPager.OnPageChangeListener {
+public class ListsFragment extends Fragment
+        implements ViewPager.OnPageChangeListener, CallLogQueryHandler.Listener {
 
     private static final boolean DEBUG = DialtactsActivity.DEBUG;
     private static final String TAG = "ListsFragment";
@@ -49,8 +53,10 @@
     public static final int TAB_INDEX_SPEED_DIAL = 0;
     public static final int TAB_INDEX_RECENTS = 1;
     public static final int TAB_INDEX_ALL_CONTACTS = 2;
+    public static final int TAB_INDEX_VOICEMAIL = 3;
 
-    public static final int TAB_INDEX_COUNT = 3;
+    public static final int TAB_COUNT_DEFAULT = 3;
+    public static final int TAB_COUNT_WITH_VOICEMAIL = 4;
 
     private static final int MAX_RECENTS_ENTRIES = 20;
     // Oldest recents entry to display is 2 weeks old.
@@ -69,9 +75,14 @@
     private ViewPagerAdapter mViewPagerAdapter;
     private RemoveView mRemoveView;
     private View mRemoveViewContent;
+
     private SpeedDialFragment mSpeedDialFragment;
     private CallLogFragment mRecentsFragment;
     private AllContactsFragment mAllContactsFragment;
+    private CallLogFragment mVoicemailFragment;
+
+    private boolean mHasActiveVoicemailProvider;
+    private VoicemailStatusHelper mVoicemailStatusHelper;
     private ArrayList<OnPageChangeListener> mOnPageChangeListeners =
             new ArrayList<OnPageChangeListener>();
 
@@ -117,6 +128,9 @@
                 case TAB_INDEX_ALL_CONTACTS:
                     mAllContactsFragment = new AllContactsFragment();
                     return mAllContactsFragment;
+                case TAB_INDEX_VOICEMAIL:
+                    mVoicemailFragment = new CallLogFragment(Calls.VOICEMAIL_TYPE);
+                    return mVoicemailFragment;
             }
             throw new IllegalStateException("No fragment at position " + position);
         }
@@ -130,17 +144,19 @@
                     (Fragment) super.instantiateItem(container, position);
             if (fragment instanceof SpeedDialFragment) {
                 mSpeedDialFragment = (SpeedDialFragment) fragment;
-            } else if (fragment instanceof CallLogFragment) {
+            } else if (fragment instanceof CallLogFragment && position == TAB_INDEX_RECENTS) {
                 mRecentsFragment = (CallLogFragment) fragment;
             } else if (fragment instanceof AllContactsFragment) {
                 mAllContactsFragment = (AllContactsFragment) fragment;
+            } else if (fragment instanceof CallLogFragment && position == TAB_INDEX_VOICEMAIL) {
+                mVoicemailFragment = (CallLogFragment) fragment;
             }
             return fragment;
         }
 
         @Override
         public int getCount() {
-            return TAB_INDEX_COUNT;
+            return mHasActiveVoicemailProvider ? TAB_COUNT_WITH_VOICEMAIL : TAB_COUNT_DEFAULT;
         }
 
         @Override
@@ -158,6 +174,7 @@
         final String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
         Trace.endSection();
 
+        mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
         Trace.endSection();
     }
 
@@ -172,6 +189,11 @@
         if (getUserVisibleHint()) {
             sendScreenViewForPosition(mViewPager.getCurrentItem());
         }
+
+        // Fetch voicemail status to determine if we should show the voicemail tab.
+        CallLogQueryHandler callLogQueryHandler =
+                new CallLogQueryHandler(getActivity(), getActivity().getContentResolver(), this);
+        callLogQueryHandler.fetchVoicemailStatus();
         Trace.endSection();
     }
 
@@ -186,19 +208,21 @@
         mViewPager = (ViewPager) parentView.findViewById(R.id.lists_pager);
         mViewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());
         mViewPager.setAdapter(mViewPagerAdapter);
-        mViewPager.setOffscreenPageLimit(2);
+        mViewPager.setOffscreenPageLimit(TAB_COUNT_DEFAULT - 1);
         mViewPager.setOnPageChangeListener(this);
         mViewPager.setCurrentItem(getRtlPosition(TAB_INDEX_SPEED_DIAL));
 
-        mTabTitles = new String[TAB_INDEX_COUNT];
+        mTabTitles = new String[TAB_COUNT_WITH_VOICEMAIL];
         mTabTitles[TAB_INDEX_SPEED_DIAL] = getResources().getString(R.string.tab_speed_dial);
         mTabTitles[TAB_INDEX_RECENTS] = getResources().getString(R.string.tab_recents);
         mTabTitles[TAB_INDEX_ALL_CONTACTS] = getResources().getString(R.string.tab_all_contacts);
+        mTabTitles[TAB_INDEX_VOICEMAIL] = getResources().getString(R.string.tab_voicemail);
 
-        mTabIcons = new int[TAB_INDEX_COUNT];
+        mTabIcons = new int[TAB_COUNT_WITH_VOICEMAIL];
         mTabIcons[TAB_INDEX_SPEED_DIAL] = R.drawable.tab_speed_dial;
         mTabIcons[TAB_INDEX_RECENTS] = R.drawable.tab_recents;
         mTabIcons[TAB_INDEX_ALL_CONTACTS] = R.drawable.tab_contacts;
+        mTabIcons[TAB_INDEX_VOICEMAIL] = R.drawable.tab_voicemail;
 
         mViewPagerTabs = (ViewPagerTabs) parentView.findViewById(R.id.lists_pager_header);
         mViewPagerTabs.setTabIcons(mTabIcons);
@@ -247,6 +271,28 @@
         }
     }
 
+    @Override
+    public void onVoicemailStatusFetched(Cursor statusCursor) {
+        if (getActivity() == null || getActivity().isFinishing()) {
+            return;
+        }
+
+        // Update mHasActiveVoicemailProvider, which controls the number of tabs displayed.
+        boolean hasActiveVoicemailProvider =
+                mVoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor) > 0;
+        if (hasActiveVoicemailProvider != mHasActiveVoicemailProvider) {
+            mHasActiveVoicemailProvider = hasActiveVoicemailProvider;
+            mViewPagerAdapter.notifyDataSetChanged();
+            mViewPagerTabs.setViewPager(mViewPager);
+        }
+    }
+
+    @Override
+    public boolean onCallsFetched(Cursor statusCursor) {
+        // Return false; did not take ownership of cursor
+        return false;
+    }
+
     public int getTabPosition() {
         return mTabPosition;
     }
@@ -272,7 +318,7 @@
 
     public int getRtlPosition(int position) {
         if (DialerUtils.isRtl()) {
-            return TAB_INDEX_COUNT - 1 - position;
+            return mViewPagerAdapter.getCount() - 1 - position;
         }
         return position;
     }
@@ -291,11 +337,13 @@
                 fragmentName = SpeedDialFragment.class.getSimpleName();
                 break;
             case TAB_INDEX_RECENTS:
-                fragmentName = CallLogFragment.class.getSimpleName();
+                fragmentName = CallLogFragment.class.getSimpleName() + "#Recents";
                 break;
             case TAB_INDEX_ALL_CONTACTS:
                 fragmentName = AllContactsFragment.class.getSimpleName();
                 break;
+            case TAB_INDEX_VOICEMAIL:
+                fragmentName = CallLogFragment.class.getSimpleName() + "#Voicemail";
             default:
                 return;
         }
