diff --git a/java/com/android/dialer/database/CallLogQueryHandler.java b/java/com/android/dialer/database/CallLogQueryHandler.java
index 1aa1251..92c49a0 100644
--- a/java/com/android/dialer/database/CallLogQueryHandler.java
+++ b/java/com/android/dialer/database/CallLogQueryHandler.java
@@ -40,6 +40,7 @@
 import com.android.dialer.phonenumbercache.CallLogQuery;
 import com.android.dialer.telecom.TelecomUtil;
 import com.android.dialer.util.PermissionsUtil;
+import com.android.dialer.voicemailstatus.VoicemailStatusQuery;
 import com.android.voicemail.VoicemailComponent;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java b/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java
index 05a3bc9..044d8df 100644
--- a/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java
+++ b/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java
@@ -25,7 +25,6 @@
 import android.net.Uri;
 import android.support.annotation.IntDef;
 import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
 import android.support.annotation.WorkerThread;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.RecyclerView.ViewHolder;
@@ -49,10 +48,9 @@
 import com.android.dialer.voicemail.listui.error.VoicemailErrorMessageCreator;
 import com.android.dialer.voicemail.listui.error.VoicemailStatus;
 import com.android.dialer.voicemail.model.VoicemailEntry;
+import com.google.common.collect.ImmutableList;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Locale;
 import java.util.Objects;
 import java.util.Set;
@@ -74,7 +72,6 @@
   }
 
   private Cursor cursor;
-  private Cursor voicemailStatusCursor;
   private final Clock clock;
   private final GlidePhotoManager glidePhotoManager;
 
@@ -880,6 +877,7 @@
       new OnErrorListener() {
         @Override
         public boolean onError(MediaPlayer mp, int what, int extra) {
+          LogUtil.e("NewVoicemailAdapter.onError", "onError, what:%d, extra:%d", what, extra);
           Assert.checkArgument(
               mediaPlayer.getMediaPlayer().equals(mp),
               "there should always only be one instance of the media player");
@@ -1009,36 +1007,24 @@
     }
   }
 
-  @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
-  public void setVoicemailStatusCursor(Cursor voicemailStatusCursor) {
-    this.voicemailStatusCursor = voicemailStatusCursor;
-  }
+  /**
+   * Updates the voicemail alert message to reflect the state of the {@link VoicemailStatus} table.
+   * TODO(uabdullah): Handle ToS properly (a bug)
+   */
+  public void updateVoicemailAlertWithMostRecentStatus(
+      Context context, ImmutableList<VoicemailStatus> voicemailStatuses) {
 
-  // TODO(uabdullah): Handle ToS properly
-  public void updateAlert(Context context) {
-    if (voicemailStatusCursor == null) {
-      LogUtil.i("NewVoicemailAdapter.updateAlert", "status cursor was null");
+    if (voicemailStatuses.isEmpty()) {
+      LogUtil.i(
+          "NewVoicemailAdapter.updateVoicemailAlertWithMostRecentStatus",
+          "voicemailStatuses was empty");
       return;
     }
 
-    LogUtil.i(
-        "NewVoicemailAdapter.updateAlert",
-        "status cursor size was " + voicemailStatusCursor.getCount());
-
-    List<VoicemailStatus> statuses = new ArrayList<>();
-
-    while (voicemailStatusCursor.moveToNext()) {
-      VoicemailStatus status = new VoicemailStatus(context, voicemailStatusCursor);
-      if (status.isActive()) {
-        statuses.add(status);
-        // TODO(uabdullah): addServiceStateListener
-      }
-    }
-
     voicemailErrorMessage = null;
     VoicemailErrorMessageCreator messageCreator = new VoicemailErrorMessageCreator();
 
-    for (VoicemailStatus status : statuses) {
+    for (VoicemailStatus status : voicemailStatuses) {
       voicemailErrorMessage = messageCreator.create(context, status, null);
       if (voicemailErrorMessage != null) {
         break;
@@ -1046,6 +1032,7 @@
     }
 
     if (voicemailErrorMessage != null) {
+      LogUtil.i("NewVoicemailAdapter.updateVoicemailAlertWithMostRecentStatus", "showing alert");
       voicemailAlertPosition = 0;
       updateHeaderPositions();
       notifyItemChanged(0);
diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailFragment.java b/java/com/android/dialer/voicemail/listui/NewVoicemailFragment.java
index 45a5443..8b6fcbc 100644
--- a/java/com/android/dialer/voicemail/listui/NewVoicemailFragment.java
+++ b/java/com/android/dialer/voicemail/listui/NewVoicemailFragment.java
@@ -16,8 +16,10 @@
 
 package com.android.dialer.voicemail.listui;
 
+import android.content.Context;
 import android.database.Cursor;
 import android.os.Bundle;
+import android.provider.VoicemailContract.Status;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.LoaderManager.LoaderCallbacks;
@@ -35,10 +37,14 @@
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.concurrent.ThreadUtil;
 import com.android.dialer.common.concurrent.UiListener;
-import com.android.dialer.database.CallLogQueryHandler;
-import com.android.dialer.database.CallLogQueryHandler.Listener;
 import com.android.dialer.glidephotomanager.GlidePhotoManagerComponent;
+import com.android.dialer.voicemail.listui.error.VoicemailStatus;
+import com.android.dialer.voicemailstatus.VoicemailStatusQuery;
+import com.android.voicemail.VoicemailComponent;
+import com.google.common.collect.ImmutableList;
 import com.google.common.util.concurrent.ListenableFuture;
+import java.util.ArrayList;
+import java.util.List;
 
 // TODO(uabdullah): Register content observer for VoicemailContract.Status.CONTENT_URI in onStart
 /** Fragment for Dialer Voicemail Tab. */
@@ -57,8 +63,9 @@
   private UiListener<Void> refreshAnnotatedCallLogListener;
   @Nullable private Runnable refreshAnnotatedCallLogRunnable;
 
+  private UiListener<ImmutableList<VoicemailStatus>> queryVoicemailStatusTableListener;
+
   private RecyclerView recyclerView;
-  private CallLogQueryHandler callLogQueryHandler;
 
   public NewVoicemailFragment() {
     LogUtil.enterBlock("NewVoicemailFragment.NewVoicemailFragment");
@@ -79,6 +86,13 @@
         DialerExecutorComponent.get(getContext())
             .createUiListener(
                 getActivity().getFragmentManager(), "NewVoicemailFragment.refreshAnnotatedCallLog");
+
+    queryVoicemailStatusTableListener =
+        DialerExecutorComponent.get(getContext())
+            .createUiListener(
+                getActivity().getFragmentManager(),
+                "NewVoicemailFragment.queryVoicemailStatusTable");
+
     refreshAnnotatedCallLogWorker = component.getRefreshAnnotatedCallLogWorker();
   }
 
@@ -192,31 +206,73 @@
       ((NewVoicemailAdapter) recyclerView.getAdapter()).updateCursor(data);
       ((NewVoicemailAdapter) recyclerView.getAdapter()).checkAndPlayVoicemail();
     }
-    callLogQueryHandler =
-        new CallLogQueryHandler(
-            getContext(), getContext().getContentResolver(), new NewVoicemailFragmentListener());
-    callLogQueryHandler.fetchVoicemailStatus();
+
+    queryAndUpdateVoicemailStatusAlert();
   }
 
-  private final class NewVoicemailFragmentListener implements Listener {
+  private void queryAndUpdateVoicemailStatusAlert() {
+    queryVoicemailStatusTableListener.listen(
+        getContext(),
+        queryVoicemailStatus(getContext()),
+        this::updateVoicemailStatusAlert,
+        throwable -> {
+          throw new RuntimeException(throwable);
+        });
+  }
 
-    @Override
-    public void onVoicemailStatusFetched(Cursor statusCursor) {
-      LogUtil.enterBlock("NewVoicemailFragmentListener.onVoicemailStatusFetched");
-      ((NewVoicemailAdapter) recyclerView.getAdapter()).setVoicemailStatusCursor(statusCursor);
-      ((NewVoicemailAdapter) recyclerView.getAdapter()).updateAlert(getContext());
-    }
+  private ListenableFuture<ImmutableList<VoicemailStatus>> queryVoicemailStatus(Context context) {
+    return DialerExecutorComponent.get(context)
+        .backgroundExecutor()
+        .submit(
+            () -> {
+              StringBuilder where = new StringBuilder();
+              List<String> selectionArgs = new ArrayList<>();
 
-    @Override
-    public void onVoicemailUnreadCountFetched(Cursor cursor) {}
+              VoicemailComponent.get(context)
+                  .getVoicemailClient()
+                  .appendOmtpVoicemailStatusSelectionClause(context, where, selectionArgs);
 
-    @Override
-    public void onMissedCallsUnreadCountFetched(Cursor cursor) {}
+              ImmutableList.Builder<VoicemailStatus> statuses = ImmutableList.builder();
 
-    @Override
-    public boolean onCallsFetched(Cursor combinedCursor) {
-      return false;
-    }
+              try (Cursor cursor =
+                  context
+                      .getContentResolver()
+                      .query(
+                          Status.CONTENT_URI,
+                          VoicemailStatusQuery.getProjection(),
+                          where.toString(),
+                          selectionArgs.toArray(new String[selectionArgs.size()]),
+                          null)) {
+                if (cursor == null) {
+                  LogUtil.e(
+                      "NewVoicemailFragment.queryVoicemailStatus", "query failed. Null cursor.");
+                  return statuses.build();
+                }
+
+                LogUtil.i(
+                    "NewVoicemailFragment.queryVoicemailStatus",
+                    "cursor size:%d ",
+                    cursor.getCount());
+
+                while (cursor.moveToNext()) {
+                  VoicemailStatus status = new VoicemailStatus(context, cursor);
+                  if (status.isActive()) {
+                    statuses.add(status);
+                    // TODO(a bug): Handle Service State Listeners
+                  }
+                }
+              }
+              LogUtil.i(
+                  "NewVoicemailFragment.queryVoicemailStatus",
+                  "query returned %d results",
+                  statuses.build().size());
+              return statuses.build();
+            });
+  }
+
+  private void updateVoicemailStatusAlert(ImmutableList<VoicemailStatus> voicemailStatuses) {
+    ((NewVoicemailAdapter) recyclerView.getAdapter())
+        .updateVoicemailAlertWithMostRecentStatus(getContext(), voicemailStatuses);
   }
 
   @Override
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailStatus.java b/java/com/android/dialer/voicemail/listui/error/VoicemailStatus.java
index 3447f03..9b7b7fd 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailStatus.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailStatus.java
@@ -33,7 +33,7 @@
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.database.VoicemailStatusQuery;
+import com.android.dialer.voicemailstatus.VoicemailStatusQuery;
 
 /** Structured data from {@link android.provider.VoicemailContract.Status} */
 public class VoicemailStatus {
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java b/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
index 20e46ee..df58d41 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailStatusWorker.java
@@ -23,8 +23,8 @@
 import android.provider.VoicemailContract.Status;
 import android.support.annotation.Nullable;
 import com.android.dialer.common.concurrent.DialerExecutor.Worker;
-import com.android.dialer.database.VoicemailStatusQuery;
 import com.android.dialer.telecom.TelecomUtil;
+import com.android.dialer.voicemailstatus.VoicemailStatusQuery;
 import com.android.voicemail.VoicemailComponent;
 import java.util.ArrayList;
 import java.util.List;
diff --git a/java/com/android/dialer/voicemailstatus/VoicemailStatusHelper.java b/java/com/android/dialer/voicemailstatus/VoicemailStatusHelper.java
index 313fc1b..16a8c7b 100644
--- a/java/com/android/dialer/voicemailstatus/VoicemailStatusHelper.java
+++ b/java/com/android/dialer/voicemailstatus/VoicemailStatusHelper.java
@@ -18,7 +18,6 @@
 
 import android.database.Cursor;
 import android.provider.VoicemailContract.Status;
-import com.android.dialer.database.VoicemailStatusQuery;
 
 /**
  * Utility used by the call log UI to determine what user message, if any, related to voicemail
diff --git a/java/com/android/dialer/database/VoicemailStatusQuery.java b/java/com/android/dialer/voicemailstatus/VoicemailStatusQuery.java
similarity index 98%
rename from java/com/android/dialer/database/VoicemailStatusQuery.java
rename to java/com/android/dialer/voicemailstatus/VoicemailStatusQuery.java
index dbd88be..4a6e9f7 100644
--- a/java/com/android/dialer/database/VoicemailStatusQuery.java
+++ b/java/com/android/dialer/voicemailstatus/VoicemailStatusQuery.java
@@ -14,7 +14,7 @@
  * limitations under the License
  */
 
-package com.android.dialer.database;
+package com.android.dialer.voicemailstatus;
 
 import android.os.Build.VERSION;
 import android.os.Build.VERSION_CODES;
