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/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 891b62e..a6fb98c 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -1059,6 +1059,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 b82b35d..0ed409a 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;
@@ -326,6 +328,8 @@
                         }
                     }, number, countryIso);
         }
+
+        Logger.logScreenView(ScreenEvent.CALL_LOG_CONTEXT_MENU, (Activity) mContext);
     }
 
     @Override
@@ -367,7 +371,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/filterednumber/FilteredNumbersUtil.java b/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
index 4cc8e75..76d3913 100644
--- a/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
+++ b/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
@@ -35,6 +35,7 @@
 
 import java.util.LinkedList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import com.android.contacts.common.testing.NeededForTesting;
 import com.android.dialer.R;
@@ -247,21 +248,21 @@
                 FilteredNumberColumns.NORMALIZED_NUMBER + "=?",
                 new String[] { normalizedNumber },
                 null);
-
-        boolean shouldBlock = false;
-        if (cursor != null) {
-            try {
-                if (cursor.moveToFirst()) {
-                    // Block if number is found and it was added before this voicemail was received.
-                    final long numberBlockedTimeMs = cursor.getLong(0);
-                    shouldBlock = cursor.getCount() > 0 && voicemailDateMs > numberBlockedTimeMs;
-                }
-            } finally {
-                cursor.close();
-            }
+        if (cursor == null) {
+            return false;
         }
-
-        return shouldBlock;
+        try {
+                /*
+                 * Block if number is found and it was added before this voicemail was received.
+                 * The VVM's date is reported with precision to the minute, even though its
+                 * magnitude is in milliseconds, so we perform the comparison in minutes.
+                 */
+                return cursor.moveToFirst() &&
+                        TimeUnit.MINUTES.convert(voicemailDateMs, TimeUnit.MILLISECONDS) >=
+                                TimeUnit.MINUTES.convert(cursor.getLong(0), TimeUnit.MILLISECONDS);
+        } finally {
+            cursor.close();
+        }
     }
 
     public static boolean hasRecentEmergencyCall(Context context) {
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;
         }
 
diff --git a/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java b/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java
new file mode 100644
index 0000000..180295c
--- /dev/null
+++ b/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java
@@ -0,0 +1,92 @@
+/*
+ * 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.
+ */
+package com.android.dialer.filterednumber;
+
+import android.test.AndroidTestCase;
+
+import com.android.contacts.common.test.mocks.ContactsMockContext;
+import com.android.contacts.common.test.mocks.MockContentProvider.Query;
+import com.android.dialer.database.FilteredNumberContract;
+import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
+import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
+
+public class FilteredNumbersUtilTest extends AndroidTestCase {
+
+    private static final String COUNTRY_ISO = "US";
+
+    // Wed Nov 11 2015 15:00:00
+    private static final long EARLIER_TIME = 1447282800000l;
+
+    // Wed Nov 11 2015 15:01:40
+    private static final long LATER_TIME = 1447282900000l;
+
+    private static final String[] FILTERED_NUMBER_PROJECTION = new String[] {
+            FilteredNumberColumns.CREATION_TIME };
+
+    private static final String NORMALIZED_NUMBER = "+16503903411";
+
+    private static final long NULL_CREATION_TIME = -1;
+
+    private ContactsMockContext mContext;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        mContext = new ContactsMockContext(getContext(), FilteredNumberContract.AUTHORITY);
+    }
+
+    public void testShouldBlockVoicemail_NotBlocked() {
+        setupShouldBlockVoicemailQuery(NULL_CREATION_TIME);
+        assertFalse(FilteredNumbersUtil.shouldBlockVoicemail(mContext, NORMALIZED_NUMBER,
+                COUNTRY_ISO, EARLIER_TIME));
+    }
+
+    public void testShouldBlockVoicemail_BlockedBeforeVoicemail() {
+        setupShouldBlockVoicemailQuery(EARLIER_TIME);
+        assertTrue(FilteredNumbersUtil.shouldBlockVoicemail(mContext, NORMALIZED_NUMBER,
+                COUNTRY_ISO, LATER_TIME));
+    }
+
+    public void testShouldBlockVoicemail_BlockedAfterVoicemail() {
+        setupShouldBlockVoicemailQuery(LATER_TIME);
+        assertFalse(FilteredNumbersUtil.shouldBlockVoicemail(mContext, NORMALIZED_NUMBER,
+                COUNTRY_ISO, EARLIER_TIME));
+    }
+
+    public void testShouldBlockVoicemail_BlockedSameTimeAsVoicemail() {
+        setupShouldBlockVoicemailQuery(EARLIER_TIME);
+        assertTrue(FilteredNumbersUtil.shouldBlockVoicemail(mContext, NORMALIZED_NUMBER,
+                COUNTRY_ISO, EARLIER_TIME));
+    }
+
+    public void testShouldBlockVoicemail_BlockedInSameMinuteAsVoicemail() {
+        setupShouldBlockVoicemailQuery(EARLIER_TIME);
+        assertTrue(FilteredNumbersUtil.shouldBlockVoicemail(mContext, NORMALIZED_NUMBER,
+                COUNTRY_ISO, EARLIER_TIME + 30000));
+    }
+
+    private void setupShouldBlockVoicemailQuery(long creationTimeMs) {
+        Query query = mContext.getContactsProvider().expectQuery(FilteredNumber.CONTENT_URI)
+                .withProjection(FILTERED_NUMBER_PROJECTION)
+                .withAnySelection()
+                .withAnySortOrder();
+        if (creationTimeMs == NULL_CREATION_TIME) {
+            query.returnEmptyCursor();
+            return;
+        }
+        query.returnRow(creationTimeMs);
+    }
+}
