diff --git a/src/com/android/dialer/DialerApplication.java b/src/com/android/dialer/DialerApplication.java
index 078b551..189c682 100644
--- a/src/com/android/dialer/DialerApplication.java
+++ b/src/com/android/dialer/DialerApplication.java
@@ -17,16 +17,23 @@
 package com.android.dialer;
 
 import android.app.Application;
+import android.content.Context;
 import android.os.Trace;
+import android.support.annotation.Nullable;
 
 import com.android.contacts.common.extensions.ExtensionsFactory;
+import com.android.contacts.common.testing.NeededForTesting;
+import com.android.dialer.compat.FilteredNumberCompat;
 
 public class DialerApplication extends Application {
 
     private static final String TAG = "DialerApplication";
 
+    private static Context sContext;
+
     @Override
     public void onCreate() {
+        sContext = this;
         Trace.beginSection(TAG + " onCreate");
         super.onCreate();
         Trace.beginSection(TAG + " ExtensionsFactory initialization");
@@ -34,4 +41,14 @@
         Trace.endSection();
         Trace.endSection();
     }
+
+    @Nullable
+    public static Context getContext() {
+        return sContext;
+    }
+
+    @NeededForTesting
+    public static void setContextForTest(Context context) {
+        sContext = context;
+    }
 }
diff --git a/src/com/android/dialer/compat/FilteredNumberCompat.java b/src/com/android/dialer/compat/FilteredNumberCompat.java
index 63a2a32..3ad45e8 100644
--- a/src/com/android/dialer/compat/FilteredNumberCompat.java
+++ b/src/com/android/dialer/compat/FilteredNumberCompat.java
@@ -20,12 +20,15 @@
 
 import android.content.ContentUris;
 import android.content.ContentValues;
+import android.content.Context;
 import android.net.Uri;
+import android.preference.PreferenceManager;
 import android.support.annotation.Nullable;
 import android.telephony.PhoneNumberUtils;
 
 import com.android.contacts.common.compat.CompatUtils;
 import com.android.contacts.common.testing.NeededForTesting;
+import com.android.dialer.DialerApplication;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberSources;
@@ -43,9 +46,12 @@
  */
 public class FilteredNumberCompat {
 
+    protected static final String HAS_MIGRATED_TO_NEW_BLOCKING_KEY = "migratedToNewBlocking";
+
     // Flag to enable feature.
     // TODO(maxwelb) remove when ready to enable new filtering.
     private static final boolean isNewFilteringEnabled = false;
+
     private static Boolean isEnabledForTest;
 
     /**
@@ -114,8 +120,28 @@
      * migration has been performed, {@code false} otherwise.
      */
     public static boolean useNewFiltering() {
-        // TODO(maxwelb): Add shared preference for when the Dialer blocked list has been migrated
-        return canUseNewFiltering();
+        return canUseNewFiltering() && hasMigratedToNewBlocking();
+    }
+
+    /**
+     * @return {@code true} if the user has migrated to use
+     * {@link android.provider.BlockedNumberContract} blocking, {@code false} otherwise.
+     */
+    public static boolean hasMigratedToNewBlocking() {
+        return PreferenceManager.getDefaultSharedPreferences(DialerApplication.getContext())
+                .getBoolean(HAS_MIGRATED_TO_NEW_BLOCKING_KEY, false);
+    }
+
+    /**
+     * Called to inform this class whether the user has fully migrated to use
+     * {@link android.provider.BlockedNumberContract} blocking or not.
+     *
+     * @param hasMigrated {@code true} if the user has migrated, {@code false} otherwise.
+     */
+    @NeededForTesting
+    public static void setHasMigratedToNewBlocking(boolean hasMigrated) {
+        PreferenceManager.getDefaultSharedPreferences(DialerApplication.getContext()).edit()
+                .putBoolean(HAS_MIGRATED_TO_NEW_BLOCKING_KEY, hasMigrated).apply();
     }
 
     @NeededForTesting
diff --git a/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java b/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java
index b9eb214..a57e1c2 100644
--- a/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java
+++ b/tests/src/com/android/dialer/compat/FilteredNumberCompatTest.java
@@ -16,19 +16,30 @@
 
 package com.android.dialer.compat;
 
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.when;
+
 import android.content.ContentUris;
 import android.content.ContentValues;
+import android.content.Context;
+import android.content.SharedPreferences;
 import android.net.Uri;
 import android.provider.BlockedNumberContract.BlockedNumbers;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
 import com.android.contacts.common.compat.CompatUtils;
+import com.android.dialer.DialerApplication;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberSources;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberTypes;
 
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
 import java.util.Arrays;
 
 @SmallTest
@@ -41,27 +52,52 @@
     private static final Uri EXPECTED_BASE_URI = CompatUtils.isNCompatible()
             ? BlockedNumbers.CONTENT_URI : FilteredNumber.CONTENT_URI;
 
+    @Mock private Context mContext;
+    @Mock private SharedPreferences mSharedPreferences;
+
     @Override
     public void setUp() throws Exception {
         super.setUp();
+        MockitoAnnotations.initMocks(this);
+        DialerApplication.setContextForTest(mContext);
+        when(mContext.getSharedPreferences(anyString(), anyInt())).thenReturn(mSharedPreferences);
         FilteredNumberCompat.setIsEnabledForTest(true);
     }
 
     public void testIsNewFilteringEnabled_TestValueFalse() {
         FilteredNumberCompat.setIsEnabledForTest(false);
-        assertFalse(FilteredNumberCompat.useNewFiltering());
+        assertFalse(FilteredNumberCompat.canUseNewFiltering());
     }
 
     public void testIsNewFilteringEnabled_TestValueTrue() {
         FilteredNumberCompat.setIsEnabledForTest(true);
-        assertEquals(CompatUtils.isNCompatible(), FilteredNumberCompat.useNewFiltering());
+        assertEquals(CompatUtils.isNCompatible(), FilteredNumberCompat.canUseNewFiltering());
+    }
+
+    public void testHasMigratedToNewBlocking_False() {
+        assertFalse(FilteredNumberCompat.hasMigratedToNewBlocking());
+    }
+
+    public void testHasMigratedToNewBlocking_Migrated() {
+        when(mSharedPreferences
+                .getBoolean(FilteredNumberCompat.HAS_MIGRATED_TO_NEW_BLOCKING_KEY, false))
+                .thenReturn(true);
+        assertTrue(FilteredNumberCompat.hasMigratedToNewBlocking());
     }
 
     public void testGetContentUri_NullId() {
-        assertEquals(EXPECTED_BASE_URI, FilteredNumberCompat.getContentUri(null));
+        assertEquals(FilteredNumber.CONTENT_URI, FilteredNumberCompat.getContentUri(null));
     }
 
-    public void testGetContentUri() {
+    public void testGetContentUri_NotMigrated() {
+        assertEquals(ContentUris.withAppendedId(FilteredNumber.CONTENT_URI, 1),
+                FilteredNumberCompat.getContentUri(1));
+    }
+
+    public void testGetContentUri_Migrated() {
+        when(mSharedPreferences
+                .getBoolean(FilteredNumberCompat.HAS_MIGRATED_TO_NEW_BLOCKING_KEY, false))
+                .thenReturn(true);
         assertEquals(ContentUris.withAppendedId(EXPECTED_BASE_URI, 1),
                 FilteredNumberCompat.getContentUri(1));
     }
@@ -87,12 +123,23 @@
         } catch (NullPointerException e) {}
     }
 
-    public void testNewBlockNumberContentValues_N() {
+    public void testNewBlockNumberContentValues_N_NotMigrated() {
+        if (!CompatUtils.isNCompatible()) {
+            return;
+        }
+        assertEquals(newExpectedContentValuesM(NON_E164_NUMBER, null, null),
+                FilteredNumberCompat.newBlockNumberContentValues(NON_E164_NUMBER, null, null));
+    }
+
+    public void testNewBlockNumberContentValues_N_Migrated() {
         if (!CompatUtils.isNCompatible()) {
             return;
         }
         ContentValues contentValues = new ContentValues();
         contentValues.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, NON_E164_NUMBER);
+        when(mSharedPreferences
+                .getBoolean(FilteredNumberCompat.HAS_MIGRATED_TO_NEW_BLOCKING_KEY, false))
+                .thenReturn(true);
         assertEquals(contentValues, FilteredNumberCompat.newBlockNumberContentValues(
                 NON_E164_NUMBER,
                 null, null));
