diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 773938c..47c3cf0 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -360,7 +360,6 @@
             case R.id.call_detail_action_block:
                 BlockNumberDialogFragment.show(
                         mBlockedNumberId,
-                        null /* normalizedNumber */,
                         mNumber,
                         mDetails.countryIso,
                         mDisplayNumber,
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index d07f05a..c6337bc 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -329,7 +329,6 @@
             case R.id.context_menu_block_number:
                 BlockNumberDialogFragment.show(
                         blockId,
-                        info.normalizedNumber,
                         number,
                         countryIso,
                         displayNumber,
diff --git a/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java b/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
index a8fa06d..5e9d308 100644
--- a/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
+++ b/src/com/android/dialer/database/FilteredNumberAsyncQueryHandler.java
@@ -191,11 +191,19 @@
                 null);
     }
 
+    public final void blockNumber(
+            final OnBlockNumberListener listener, String number, String countryIso) {
+        blockNumber(null, number, countryIso);
+    }
+
     /**
      * Add a number manually blocked by the user.
      */
-    public final void blockNumber(final OnBlockNumberListener listener,
-                                  String normalizedNumber, String number, String countryIso) {
+    public final void blockNumber(
+            final OnBlockNumberListener listener,
+            String normalizedNumber,
+            String number,
+            String countryIso) {
         if (normalizedNumber == null) {
             normalizedNumber = PhoneNumberUtils.formatNumberToE164(number, countryIso);
         }
diff --git a/src/com/android/dialer/filterednumber/BlockNumberDialogFragment.java b/src/com/android/dialer/filterednumber/BlockNumberDialogFragment.java
index fcd74f3..425a729 100644
--- a/src/com/android/dialer/filterednumber/BlockNumberDialogFragment.java
+++ b/src/com/android/dialer/filterednumber/BlockNumberDialogFragment.java
@@ -58,7 +58,6 @@
     private static final String BLOCK_DIALOG_FRAGMENT = "BlockNumberDialog";
 
     private static final String ARG_BLOCK_ID = "argBlockId";
-    private static final String ARG_NORMALIZED_NUMBER = "argNormalizedNumber";
     private static final String ARG_NUMBER = "argNumber";
     private static final String ARG_COUNTRY_ISO = "argCountryIso";
     private static final String ARG_DISPLAY_NUMBER = "argDisplayNumber";
@@ -66,7 +65,6 @@
 
     private String mNumber;
     private String mDisplayNumber;
-    private String mNormalizedNumber;
     private String mCountryIso;
 
     private FilteredNumberAsyncQueryHandler mHandler;
@@ -75,7 +73,6 @@
 
     public static void show(
             Integer blockId,
-            String normalizedNumber,
             String number,
             String countryIso,
             String displayNumber,
@@ -83,7 +80,7 @@
             FragmentManager fragmentManager,
             Callback callback) {
         final BlockNumberDialogFragment newFragment = BlockNumberDialogFragment.newInstance(
-                blockId, normalizedNumber, number, countryIso, displayNumber, parentViewId);
+                blockId, number, countryIso, displayNumber, parentViewId);
 
         newFragment.setCallback(callback);
         newFragment.show(fragmentManager, BlockNumberDialogFragment.BLOCK_DIALOG_FRAGMENT);
@@ -91,7 +88,6 @@
 
     private static BlockNumberDialogFragment newInstance(
             Integer blockId,
-            String normalizedNumber,
             String number,
             String countryIso,
             String displayNumber,
@@ -104,7 +100,6 @@
         if (parentViewId != null) {
             args.putInt(ARG_PARENT_VIEW_ID, parentViewId.intValue());
         }
-        args.putString(ARG_NORMALIZED_NUMBER, normalizedNumber);
         args.putString(ARG_NUMBER, number);
         args.putString(ARG_COUNTRY_ISO, countryIso);
         args.putString(ARG_DISPLAY_NUMBER, displayNumber);
@@ -119,12 +114,8 @@
 
         mNumber = getArguments().getString(ARG_NUMBER);
         mDisplayNumber = getArguments().getString(ARG_DISPLAY_NUMBER);
-        mNormalizedNumber = getArguments().getString(ARG_NORMALIZED_NUMBER);
         mCountryIso = getArguments().getString(ARG_COUNTRY_ISO);
 
-        if (TextUtils.isEmpty(mNormalizedNumber)) {
-            mNormalizedNumber = PhoneNumberUtils.formatNumberToE164(mNumber, mCountryIso);
-        }
         if (TextUtils.isEmpty(mDisplayNumber)) {
             mDisplayNumber = mNumber;
         }
@@ -160,7 +151,7 @@
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
-        if (!FilteredNumbersUtil.canBlockNumber(getActivity(), mNormalizedNumber)) {
+        if (!FilteredNumbersUtil.canBlockNumber(getActivity(), mNumber)) {
             dismiss();
             Toast.makeText(getContext(), getString(R.string.invalidNumber, mDisplayNumber),
                     Toast.LENGTH_SHORT).show();
@@ -237,7 +228,6 @@
 
         mHandler.blockNumber(
                 onBlockNumberListener,
-                mNormalizedNumber,
                 mNumber,
                 mCountryIso);
     }
diff --git a/src/com/android/dialer/filterednumber/BlockedNumbersAdapter.java b/src/com/android/dialer/filterednumber/BlockedNumbersAdapter.java
index 71a0547..ad9e7a6 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumbersAdapter.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumbersAdapter.java
@@ -61,7 +61,6 @@
             public void onClick(View view) {
                 BlockNumberDialogFragment.show(
                         id,
-                        normalizedNumber,
                         number,
                         countryIso,
                         number,
diff --git a/src/com/android/dialer/list/BlockedListSearchFragment.java b/src/com/android/dialer/list/BlockedListSearchFragment.java
index d740b3d..24945b9 100644
--- a/src/com/android/dialer/list/BlockedListSearchFragment.java
+++ b/src/com/android/dialer/list/BlockedListSearchFragment.java
@@ -177,7 +177,6 @@
                 if (id == null) {
                     BlockNumberDialogFragment.show(
                             id,
-                            null,
                             number,
                             countryIso,
                             number,
@@ -226,7 +225,6 @@
 
         BlockNumberDialogFragment.show(
                 blockId,
-                null,
                 number,
                 GeoUtil.getCurrentCountryIso(getContext()),
                 number,
