diff --git a/java/com/android/dialer/database/CallLogQueryHandler.java b/java/com/android/dialer/database/CallLogQueryHandler.java
index e974cc4..a18023c 100644
--- a/java/com/android/dialer/database/CallLogQueryHandler.java
+++ b/java/com/android/dialer/database/CallLogQueryHandler.java
@@ -112,6 +112,7 @@
         .appendOmtpVoicemailStatusSelectionClause(context, where, selectionArgs);
 
     if (TelecomUtil.hasReadWriteVoicemailPermissions(context)) {
+      LogUtil.i("CallLogQueryHandler.fetchVoicemailStatus", "fetching voicemail status");
       startQuery(
           QUERY_VOICEMAIL_STATUS_TOKEN,
           null,
@@ -120,6 +121,10 @@
           where.toString(),
           selectionArgs.toArray(new String[selectionArgs.size()]),
           null);
+    } else {
+      LogUtil.i(
+          "CallLogQueryHandler.fetchVoicemailStatus",
+          "fetching voicemail status failed due to permissions");
     }
   }
 
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index 2f54b10..e426ed2 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -460,6 +460,7 @@
   @SuppressLint("MissingPermission")
   @Override
   public void onActivityResume() {
+    LogUtil.enterBlock("MainBottomNavBarBottomNavTabListener.onActivityResume");
     callLogFragmentListener.onActivityResume();
     // Start the thread that updates the smart dial database if the activity is recreated with a
     // language change.
@@ -866,6 +867,10 @@
         new ContentObserver(new Handler()) {
           @Override
           public void onChange(boolean selfChange) {
+            LogUtil.i(
+                "MainCallLogFragmentListener",
+                "voicemailStatusObserver.onChange selfChange:%b",
+                selfChange);
             super.onChange(selfChange);
             callLogQueryHandler.fetchVoicemailStatus();
           }
@@ -885,9 +890,10 @@
     }
 
     private void registerVoicemailStatusContentObserver(Context context) {
-
+      LogUtil.enterBlock("MainCallLogFragmentListener.registerVoicemailStatusContentObserver");
       if (PermissionsUtil.hasReadVoicemailPermissions(context)
           && PermissionsUtil.hasAddVoicemailPermissions(context)) {
+        LogUtil.i("MainCallLogFragmentListener.registerVoicemailStatusContentObserver", "register");
         context
             .getContentResolver()
             .registerContentObserver(
@@ -1013,11 +1019,12 @@
     }
 
     public void onActivityResume() {
+      LogUtil.enterBlock("MainCallLogFragmentListener.onActivityResume");
       activityIsAlive = true;
       registerVoicemailStatusContentObserver(context);
-      if (!bottomNavTabListener.newVoicemailFragmentActive()) {
-        callLogQueryHandler.fetchVoicemailStatus();
-      }
+      // TODO(a bug): Don't use callLogQueryHandler
+      callLogQueryHandler.fetchVoicemailStatus();
+
       if (!bottomNavTabListener.newCallLogFragmentActive()) {
         callLogQueryHandler.fetchMissedCallsUnreadCount();
       }
