diff --git a/res/layout/voicemail_playback_layout.xml b/res/layout/voicemail_playback_layout.xml
index 54493f1..bb7fe34 100644
--- a/res/layout/voicemail_playback_layout.xml
+++ b/res/layout/voicemail_playback_layout.xml
@@ -41,7 +41,8 @@
             android:layout_height="wrap_content"
             android:layout_width="wrap_content"
             android:textSize="14sp"
-            android:paddingTop="@dimen/voicemail_playback_top_padding" />
+            android:paddingTop="@dimen/voicemail_playback_top_padding"
+            android:importantForAccessibility="no" />
 
         <LinearLayout
             android:layout_width="0dp"
@@ -105,7 +106,8 @@
         android:layout_height="wrap_content"
         android:layout_width="wrap_content"
         android:textSize="14sp"
-        android:paddingTop="@dimen/voicemail_playback_top_padding" />
+        android:paddingTop="@dimen/voicemail_playback_top_padding"
+        android:importantForAccessibility="no" />
 
     </LinearLayout>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 33fbbb6..0d79d9d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -478,7 +478,7 @@
     <string name="dialer_hint_find_contact">Search contacts</string>
 
     <!-- Hint displayed in add blocked number search box when there is no query typed.
-         [CHAR LIMIT=40] -->
+         [CHAR LIMIT=45] -->
     <string name="block_number_search_hint">Add number or search contacts</string>
 
     <!-- String resource for the font-family to use for the call log activity's title
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index cc457bd..6de1fdc 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -1053,6 +1053,12 @@
             mListsFragment.getView().animate().alpha(0).withLayer();
         }
         mListsFragment.setUserVisibleHint(false);
+
+        if (smartDialSearch) {
+            Logger.logScreenView(ScreenEvent.SMART_DIAL_SEARCH, this);
+        } else {
+            Logger.logScreenView(ScreenEvent.REGULAR_SEARCH, this);
+        }
     }
 
     /**
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 3cf58bd..ab5bd43 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -43,6 +43,7 @@
 import com.android.contacts.common.util.PermissionsUtil;
 import com.android.dialer.R;
 import com.android.dialer.filterednumber.FilteredNumbersUtil;
+import com.android.dialer.list.ListsFragment;
 import com.android.dialer.util.EmptyLoader;
 import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
 import com.android.dialer.widget.EmptyContentView;
@@ -400,6 +401,10 @@
     @Override
     public void fetchCalls() {
         mCallLogQueryHandler.fetchCalls(mCallTypeFilter, mDateLimit);
+
+        if (mVoicemailPlaybackPresenter != null) {
+            ((ListsFragment) getParentFragment()).updateTabUnreadCounts();
+        }
     }
 
     private void updateEmptyMessage(int filterType) {
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index 89596f2..8102a05 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -50,6 +50,8 @@
 import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
 import com.android.dialer.filterednumber.BlockNumberDialogFragment;
 import com.android.dialer.filterednumber.FilteredNumbersUtil;
+import com.android.dialer.logging.Logger;
+import com.android.dialer.logging.ScreenEvent;
 import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.PhoneNumberUtil;
 import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
@@ -321,6 +323,8 @@
                         }
                     }, number, countryIso);
         }
+
+        Logger.logScreenView(ScreenEvent.CALL_LOG_CONTEXT_MENU, (Activity) mContext);
     }
 
     @Override
@@ -362,7 +366,7 @@
     public void inflateActionViewStub() {
         ViewStub stub = (ViewStub) rootView.findViewById(R.id.call_log_entry_actions_stub);
         if (stub != null) {
-            actionsView = (ViewGroup) stub.inflate();
+            actionsView = stub.inflate();
 
             voicemailPlaybackView = (VoicemailPlaybackLayout) actionsView
                     .findViewById(R.id.voicemail_playback_layout);
diff --git a/src/com/android/dialer/filterednumber/BlockedNumbersSettingsActivity.java b/src/com/android/dialer/filterednumber/BlockedNumbersSettingsActivity.java
index 1735ce5..5ce9d21 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumbersSettingsActivity.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumbersSettingsActivity.java
@@ -36,6 +36,8 @@
 import com.android.dialer.list.OnListFragmentScrolledListener;
 import com.android.dialer.list.BlockedListSearchFragment;
 import com.android.dialer.list.SearchFragment;
+import com.android.dialer.logging.Logger;
+import com.android.dialer.logging.ScreenEvent;
 
 public class BlockedNumbersSettingsActivity extends AppCompatActivity
         implements SearchFragment.HostInterface {
@@ -69,6 +71,8 @@
                 .replace(R.id.blocked_numbers_activity_container, fragment,
                         TAG_BLOCKED_MANAGEMENT_FRAGMENT)
                 .commit();
+
+        Logger.logScreenView(ScreenEvent.BLOCKED_NUMBER_MANAGEMENT, this);
     }
 
     /**
@@ -89,6 +93,8 @@
                         TAG_BLOCKED_SEARCH_FRAGMENT)
                 .addToBackStack(null)
                 .commit();
+
+        Logger.logScreenView(ScreenEvent.BLOCKED_NUMBER_ADD_NUMBER, this);
     }
 
     /**
diff --git a/src/com/android/dialer/list/RegularSearchFragment.java b/src/com/android/dialer/list/RegularSearchFragment.java
index 3acf967..30b01c0 100644
--- a/src/com/android/dialer/list/RegularSearchFragment.java
+++ b/src/com/android/dialer/list/RegularSearchFragment.java
@@ -56,12 +56,6 @@
         configureDirectorySearch();
     }
 
-    @Override
-    public void onStart() {
-        super.onStart();
-        Logger.logScreenView(ScreenEvent.REGULAR_SEARCH, getActivity());
-    }
-
     public void configureDirectorySearch() {
         setDirectorySearchEnabled(true);
         setDirectoryResultLimit(SEARCH_DIRECTORY_RESULT_LIMIT);
diff --git a/src/com/android/dialer/list/SmartDialSearchFragment.java b/src/com/android/dialer/list/SmartDialSearchFragment.java
index ee76a13..a230e6e 100644
--- a/src/com/android/dialer/list/SmartDialSearchFragment.java
+++ b/src/com/android/dialer/list/SmartDialSearchFragment.java
@@ -45,12 +45,6 @@
 
     private static final int CALL_PHONE_PERMISSION_REQUEST_CODE = 1;
 
-    @Override
-    public void onStart() {
-        super.onStart();
-        Logger.logScreenView(ScreenEvent.SMART_DIAL_SEARCH, getActivity());
-    }
-
     /**
      * Creates a SmartDialListAdapter to display and operate on search results.
      */
diff --git a/src/com/android/dialer/logging/ScreenEvent.java b/src/com/android/dialer/logging/ScreenEvent.java
index 7af3f6e..e0d7b00 100644
--- a/src/com/android/dialer/logging/ScreenEvent.java
+++ b/src/com/android/dialer/logging/ScreenEvent.java
@@ -21,7 +21,9 @@
 import com.android.contacts.common.interactions.ImportExportDialogFragment;
 import com.android.dialer.calllog.CallLogFragment;
 import com.android.dialer.dialpad.DialpadFragment;
+import com.android.dialer.filterednumber.BlockedNumbersFragment;
 import com.android.dialer.list.AllContactsFragment;
+import com.android.dialer.list.BlockedListSearchFragment;
 import com.android.dialer.list.RegularSearchFragment;
 import com.android.dialer.list.SmartDialSearchFragment;
 import com.android.dialer.list.SpeedDialFragment;
@@ -95,6 +97,16 @@
     // The dialpad displayed in-call that is used to send dtmf tones.
     public static final int INCALL_DIALPAD = 16;
 
+    // Menu options displayed when long pressing on a call log entry.
+    public static final int CALL_LOG_CONTEXT_MENU = 17;
+
+    // Screen displayed to allow the user to see an overview of all blocked
+    // numbers.
+    public static final int BLOCKED_NUMBER_MANAGEMENT = 18;
+
+    // Screen displayed to allow the user to add a new blocked number.
+    public static final int BLOCKED_NUMBER_ADD_NUMBER = 19;
+
     static {
         sScreenNameMap.put(ScreenEvent.DIALPAD,
                 getScreenNameWithTag(DialpadFragment.class.getSimpleName(), "Dialer"));
@@ -123,7 +135,11 @@
                 ConferenceManagerFragment.class.getSimpleName());
         sScreenNameMap.put(ScreenEvent.INCALL_DIALPAD,
                 getScreenNameWithTag(DialpadFragment.class.getSimpleName(), "InCall"));
-
+        sScreenNameMap.put(ScreenEvent.CALL_LOG_CONTEXT_MENU, "CallLogContextMenu");
+        sScreenNameMap.put(ScreenEvent.BLOCKED_NUMBER_MANAGEMENT,
+                BlockedNumbersFragment.class.getSimpleName());
+        sScreenNameMap.put(ScreenEvent.BLOCKED_NUMBER_ADD_NUMBER,
+                BlockedListSearchFragment.class.getSimpleName());
     }
 
     /**
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
index 658aaec..8191d1d 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
@@ -429,8 +429,14 @@
      * proceed to {@link #prepareContent()}. If the has_content field does not
      * become true within the allowed time, we will update the ui to reflect the fact that content
      * was not available.
+     *
+     * @return whether issued request to fetch content
      */
-    private void requestContent() {
+    private boolean requestContent() {
+        if (mContext == null || mVoicemailUri == null) {
+            return false;
+        }
+
         if (mFetchResultHandler != null) {
             mFetchResultHandler.destroy();
         }
@@ -442,6 +448,7 @@
         // Send voicemail fetch request.
         Intent intent = new Intent(VoicemailContract.ACTION_FETCH_VOICEMAIL, mVoicemailUri);
         mContext.sendBroadcast(intent);
+        return true;
     }
 
     @ThreadSafe
@@ -629,14 +636,13 @@
      * playing.
      */
     public void resumePlayback() {
-        if (mView == null || mContext == null) {
+        if (mView == null) {
             return;
         }
 
         if (!mIsPrepared) {
             // If we haven't downloaded the voicemail yet, attempt to download it.
-            requestContent();
-            mIsPlaying = true;
+            mIsPlaying = requestContent();
             return;
         }
 
