diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index b90d285..30aaee0 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -316,7 +316,6 @@
                 FilterNumberDialogFragment newFragment =
                         FilterNumberDialogFragment.newInstance(blockId, info.normalizedNumber,
                                 number, countryIso, displayNumber);
-                newFragment.setQueryHandler(mFilteredNumberAsyncQueryHandler);
                 newFragment.setParentView(
                         ((Activity) mContext).findViewById(R.id.floating_action_button_container));
                 newFragment.show(((Activity) mContext).getFragmentManager(),
diff --git a/src/com/android/dialer/filterednumber/BlockedNumberAdapter.java b/src/com/android/dialer/filterednumber/BlockedNumberAdapter.java
index 5041ed8..ad61a32 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumberAdapter.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumberAdapter.java
@@ -35,7 +35,6 @@
 import com.android.dialer.R;
 import com.android.dialer.calllog.ContactInfo;
 import com.android.dialer.calllog.ContactInfoHelper;
-import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
 import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
 import com.android.dialer.util.PhoneNumberUtil;
 
@@ -46,16 +45,13 @@
     private Resources mResources;
     private BidiFormatter mBidiFormatter = BidiFormatter.getInstance();
     private ContactPhotoManager mContactPhotoManager;
-    private FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler;
 
-    public BlockedNumberAdapter(Context context,
-                                FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler) {
+    public BlockedNumberAdapter(Context context) {
         super(context, R.layout.blocked_number_item, null, new String[]{}, new int[]{}, 0);
         mContext = context;
         mContactInfoHelper = new ContactInfoHelper(context, GeoUtil.getCurrentCountryIso(context));
         mContactPhotoManager = ContactPhotoManager.getInstance(context);
         mResources = context.getResources();
-        mFilteredNumberAsyncQueryHandler = filteredNumberAsyncQueryHandler;
     }
 
     @Override
@@ -88,7 +84,6 @@
                 FilterNumberDialogFragment newFragment =
                         FilterNumberDialogFragment.newInstance(id, normalizedNumber, number,
                                 countryIso, displayNumber);
-                newFragment.setQueryHandler(mFilteredNumberAsyncQueryHandler);
                 newFragment.setParentView(
                         ((Activity) mContext).findViewById(R.id.blocked_number_fragment));
                 newFragment.show(((Activity) mContext).getFragmentManager(),
diff --git a/src/com/android/dialer/filterednumber/BlockedNumberFragment.java b/src/com/android/dialer/filterednumber/BlockedNumberFragment.java
index de32fd6..79e5861 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumberFragment.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumberFragment.java
@@ -34,17 +34,14 @@
         LoaderManager.LoaderCallbacks<Cursor>, View.OnClickListener {
 
     private BlockedNumberAdapter mAdapter;
-    private FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler;
 
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
         LayoutInflater inflater = LayoutInflater.from(getContext());
         getListView().addHeaderView(inflater.inflate(R.layout.blocked_number_header, null));
-        mFilteredNumberAsyncQueryHandler =
-                new FilteredNumberAsyncQueryHandler(getActivity().getContentResolver());
         if (mAdapter == null) {
-            mAdapter = new BlockedNumberAdapter(getContext(), mFilteredNumberAsyncQueryHandler);
+            mAdapter = new BlockedNumberAdapter(getContext());
         }
         setListAdapter(mAdapter);
         getActivity().findViewById(R.id.add_number_button).setOnClickListener(this);
@@ -100,4 +97,4 @@
     public void onClick(final View v) {
         startActivity(new Intent(getActivity(), BlockedNumberSearchActivity.class));
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/dialer/filterednumber/BlockedNumberSearchActivity.java b/src/com/android/dialer/filterednumber/BlockedNumberSearchActivity.java
index 11c0ac4..cfa404f 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumberSearchActivity.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumberSearchActivity.java
@@ -126,7 +126,6 @@
         fragment.setHasOptionsMenu(false);
         fragment.setShowEmptyListForNullQuery(true);
         fragment.setDirectorySearchEnabled(false);
-        fragment.setFilteredNumberAsyncQueryHandler(mFilteredNumberAsyncQueryHandler);
         transaction.commit();
     }
 
@@ -161,4 +160,4 @@
     public int getActionBarHeight() {
         return getResources().getDimensionPixelSize(R.dimen.action_bar_height_large);
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java b/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java
index 1b95387..ce2a0da 100644
--- a/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java
+++ b/src/com/android/dialer/filterednumber/FilterNumberDialogFragment.java
@@ -61,10 +61,6 @@
         public void onUndoBlockComplete();
     }
 
-    public void setQueryHandler (FilteredNumberAsyncQueryHandler filteredNumberAsyncQueryHandler) {
-        mHandler = filteredNumberAsyncQueryHandler;
-    }
-
     public void setParentView(View view) {
         mParentView = view;
     }
@@ -98,6 +94,8 @@
         final boolean isBlocked = getArguments().containsKey(ARG_BLOCK_ID);
         final String displayNumber = getArguments().getString(ARG_DISPLAY_NUMBER);
 
+        mHandler = new FilteredNumberAsyncQueryHandler(getContext().getContentResolver());
+
         String message;
         String okText;
         if (isBlocked) {
@@ -194,4 +192,4 @@
                     }
                 }, getArguments().getInt(ARG_BLOCK_ID));
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/dialer/list/BlockedListSearchAdapter.java b/src/com/android/dialer/list/BlockedListSearchAdapter.java
index 7ae24e4..8f7971f 100644
--- a/src/com/android/dialer/list/BlockedListSearchAdapter.java
+++ b/src/com/android/dialer/list/BlockedListSearchAdapter.java
@@ -39,10 +39,9 @@
         mResources = context.getResources();
         disableAllShortcuts();
         setShortcutEnabled(SHORTCUT_BLOCK_NUMBER, true);
-    }
 
-    public void setFilteredNumberAsyncQueryHandler(FilteredNumberAsyncQueryHandler handler) {
-        mFilteredNumberAsyncQueryHandler = handler;
+        mFilteredNumberAsyncQueryHandler =
+                new FilteredNumberAsyncQueryHandler(context.getContentResolver());
     }
 
     @Override
@@ -86,4 +85,4 @@
         mFilteredNumberAsyncQueryHandler.startBlockedQuery(
                 onCheckListener, normalizedNumber, number, countryIso);
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/dialer/list/BlockedListSearchFragment.java b/src/com/android/dialer/list/BlockedListSearchFragment.java
index 7494372..6750812 100644
--- a/src/com/android/dialer/list/BlockedListSearchFragment.java
+++ b/src/com/android/dialer/list/BlockedListSearchFragment.java
@@ -18,6 +18,7 @@
 import android.content.ContentUris;
 import android.content.ContentValues;
 import android.net.Uri;
+import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.widget.AdapterView;
@@ -37,16 +38,19 @@
 
     private FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler;
 
-    public void setFilteredNumberAsyncQueryHandler(FilteredNumberAsyncQueryHandler handler) {
-        mFilteredNumberAsyncQueryHandler = handler;
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mFilteredNumberAsyncQueryHandler = new FilteredNumberAsyncQueryHandler(
+                getContext().getContentResolver());
     }
 
+
     @Override
     protected ContactEntryListAdapter createListAdapter() {
         BlockedListSearchAdapter adapter = new BlockedListSearchAdapter(getActivity());
         adapter.setDisplayPhotos(true);
         adapter.setUseCallableUri(usesCallableUri());
-        adapter.setFilteredNumberAsyncQueryHandler(mFilteredNumberAsyncQueryHandler);
         return adapter;
     }
 
@@ -100,7 +104,6 @@
                 if (id == null) {
                     final FilterNumberDialogFragment newFragment = FilterNumberDialogFragment
                             .newInstance(id, normalizedNumber, number, countryIso, number);
-                    newFragment.setQueryHandler(mFilteredNumberAsyncQueryHandler);
                     newFragment.setParentView(
                             getActivity().findViewById(R.id.search_activity_container));
                     newFragment.show(
@@ -133,7 +136,6 @@
         }
         final FilterNumberDialogFragment newFragment = FilterNumberDialogFragment
                 .newInstance(blockId, normalizedNumber, number, countryIso, number);
-        newFragment.setQueryHandler(mFilteredNumberAsyncQueryHandler);
         newFragment.setParentView(getActivity().findViewById(R.id.search_activity_container));
         newFragment.setOnUndoBlockListener(new FilterNumberDialogFragment.OnUndoBlockListener() {
             @Override
