diff --git a/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java b/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
index 7af1a13..52ef49a 100644
--- a/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
+++ b/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
@@ -158,7 +158,13 @@
                 new Listener() {
                     @Override
                     protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
-                        if (cursor == null || cursor.getCount() != 1) {
+                        /*
+                         * In the frameworking blocking, numbers can be blocked in both e164 format
+                         * and not, resulting in multiple rows being returned for this query. For
+                         * example, both '16502530000' and '6502530000' can exist at the same time
+                         * and will be returned by this query.
+                         */
+                        if (cursor == null || cursor.getCount() == 0) {
                             listener.onCheckComplete(null);
                             return;
                         }
diff --git a/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java b/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java
index 38615cc..87ba8be 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumbersFragment.java
@@ -127,16 +127,21 @@
             getListView().findViewById(R.id.add_number_linear_layout).setVisibility(View.GONE);
             getListView().findViewById(R.id.add_number_linear_layout).setOnClickListener(null);
             mBlockedNumberListDivider.setVisibility(View.INVISIBLE);
-        }
 
-        FilteredNumbersUtil.checkForSendToVoicemailContact(
-            getActivity(), new CheckForSendToVoicemailContactListener() {
-                @Override
-                public void onComplete(boolean hasSendToVoicemailContact) {
-                    final int visibility = hasSendToVoicemailContact ? View.VISIBLE : View.GONE;
-                    mImportSettings.setVisibility(visibility);
-                }
-            });
+            mImportSettings.setSystemUiVisibility(View.GONE);
+            getListView().findViewById(R.id.import_button).setOnClickListener(null);
+            getListView().findViewById(R.id.view_numbers_button).setOnClickListener(null);
+        } else {
+            FilteredNumbersUtil.checkForSendToVoicemailContact(
+                    getActivity(), new CheckForSendToVoicemailContactListener() {
+                        @Override
+                        public void onComplete(boolean hasSendToVoicemailContact) {
+                            final int visibility =
+                                    hasSendToVoicemailContact ? View.VISIBLE : View.GONE;
+                            mImportSettings.setVisibility(visibility);
+                        }
+                    });
+        }
 
         if (FilteredNumbersUtil.hasRecentEmergencyCall(getContext())) {
             mBlockedNumbersDisabledForEmergency.setVisibility(View.VISIBLE);
diff --git a/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java b/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
index e3870de..498b10a 100644
--- a/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
+++ b/src/com/android/dialer/filterednumber/FilteredNumbersUtil.java
@@ -33,6 +33,7 @@
 
 import com.android.contacts.common.testing.NeededForTesting;
 import com.android.dialer.R;
+import com.android.dialer.compat.FilteredNumberCompat;
 import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
 import com.android.dialer.database.FilteredNumberAsyncQueryHandler.OnHasBlockedNumbersListener;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
@@ -298,6 +299,10 @@
     }
 
     public static void maybeNotifyCallBlockingDisabled(final Context context) {
+        // The Dialer is not responsible for this notification after migrating
+        if (FilteredNumberCompat.useNewFiltering()) {
+            return;
+        }
         // Skip if the user has already received a notification for the most recent emergency call.
         if (PreferenceManager.getDefaultSharedPreferences(context)
                 .getBoolean(NOTIFIED_CALL_BLOCKING_DISABLED_BY_EMERGENCY_CALL_PREF_KEY, false)) {
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
index d4d294e..7d6fe78 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
@@ -428,6 +428,11 @@
     }
 
     @Override
+    public void setSuccess() {
+        mStateText.setText(null);
+    }
+
+    @Override
     public void setIsFetchingContent() {
         disableUiElements();
         mStateText.setText(getString(R.string.voicemail_fetching_content));
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
index 5924fb4..e224ddc 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
@@ -84,6 +84,7 @@
         void onPlaybackStopped();
         void onSpeakerphoneOn(boolean on);
         void setClipPosition(int clipPositionInMillis, int clipLengthInMillis);
+        void setSuccess();
         void setFetchContentTimeout();
         void setIsFetchingContent();
         void onVoicemailArchiveSucceded(Uri voicemailUri);
@@ -606,6 +607,7 @@
         Log.d(TAG, "onPrepared: mPosition=" + mPosition);
         mView.setClipPosition(mPosition, mDuration.get());
         mView.enableUiElements();
+        mView.setSuccess();
         mMediaPlayer.seekTo(mPosition);
 
         if (mIsPlaying) {
diff --git a/tests/src/com/android/dialer/database/FilteredNumberAsyncQueryHandlerTest.java b/tests/src/com/android/dialer/database/FilteredNumberAsyncQueryHandlerTest.java
index 28fdda0..625f3fd 100644
--- a/tests/src/com/android/dialer/database/FilteredNumberAsyncQueryHandlerTest.java
+++ b/tests/src/com/android/dialer/database/FilteredNumberAsyncQueryHandlerTest.java
@@ -47,6 +47,7 @@
     private static final String NUMBER = "6502530000";
     private static final String COUNTRY_ISO = "US";
     private static final Integer ID = 1;
+    private static final Integer ID2 = 2;
     private static final Uri BLOCKED_NUMBER_URI_N = CompatUtils.isNCompatible() ?
             Uri.withAppendedPath(BlockedNumberContract.AUTHORITY_URI, "blocked") : null;
     private static final Uri BLOCKED_NUMBER_URI_M =
@@ -177,6 +178,26 @@
         mContentProvider.verify();
     }
 
+    public void testIsBlockedNumber_MultipleResults() throws Throwable {
+        if (CompatUtils.isNCompatible()) {
+            newIsBlockedNumberExpectedQuery().returnRow(ID).returnRow(ID2);
+        } else {
+            newIsBlockedNumberExpectedQuery().returnRow(ID, FilteredNumberTypes.BLOCKED_NUMBER)
+                    .returnRow(ID2, FilteredNumberTypes.BLOCKED_NUMBER);
+        }
+        final CheckBlockedListener listener = new CheckBlockedListener();
+        runTestOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                new FilteredNumberAsyncQueryHandler(mContentResolver)
+                        .isBlockedNumber(listener, NUMBER, COUNTRY_ISO);
+            }
+        });
+        // When there are multiple matches, the first is returned
+        assertEquals(ID, listener.waitForCallback());
+        mContentProvider.verify();
+    }
+
     public void testBlockNumber_Disabled() throws Throwable {
         if (!CompatUtils.isNCompatible()) {
             return;
diff --git a/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java b/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java
index d2e7f0a..d496b18 100644
--- a/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java
+++ b/tests/src/com/android/dialer/filterednumber/FilteredNumbersUtilTest.java
@@ -15,12 +15,20 @@
  */
 package com.android.dialer.filterednumber;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+
+import android.content.Context;
 import android.preference.PreferenceManager;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
+import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.test.mocks.ContactsMockContext;
 import com.android.contacts.common.test.mocks.MockContentProvider.Query;
+import com.android.dialer.compat.FilteredNumberCompat;
 import com.android.dialer.database.FilteredNumberContract;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
@@ -31,10 +39,10 @@
     private static final String COUNTRY_ISO = "US";
 
     // Wed Nov 11 2015 15:00:00
-    private static final long EARLIER_TIME = 1447282800000l;
+    private static final long EARLIER_TIME = 1447282800000L;
 
     // Wed Nov 11 2015 15:01:40
-    private static final long LATER_TIME = 1447282900000l;
+    private static final long LATER_TIME = 1447282900000L;
 
     private static final String[] FILTERED_NUMBER_PROJECTION = new String[] {
             FilteredNumberColumns.CREATION_TIME };
@@ -98,6 +106,18 @@
                 COUNTRY_ISO, 0));
     }
 
+    public void testMaybeNotifyCallBlockingDisabled_Migrated() {
+        if (!CompatUtils.isNCompatible()) {
+            return;
+        }
+        FilteredNumberCompat.setIsEnabledForTest(true);
+        FilteredNumberCompat.setHasMigratedToNewBlocking(true);
+        Context mockContext = mock(Context.class);
+
+        FilteredNumbersUtil.maybeNotifyCallBlockingDisabled(mockContext);
+        verifyZeroInteractions(mockContext);
+    }
+
     private void setupShouldBlockVoicemailQuery(long creationTimeMs) {
         Query query = mContext.getContactsProvider().expectQuery(FilteredNumber.CONTENT_URI)
                 .withProjection(FILTERED_NUMBER_PROJECTION)
