diff --git a/src/net/i2p/android/router/fragment/AddressbookFragment.java b/src/net/i2p/android/router/fragment/AddressbookFragment.java
index 333dff74a5474d966a1b21f5f6d2fb190fa8e700..ac912a726699235233bcf9d690920322aad01782 100644
--- a/src/net/i2p/android/router/fragment/AddressbookFragment.java
+++ b/src/net/i2p/android/router/fragment/AddressbookFragment.java
@@ -7,6 +7,7 @@ import android.os.Bundle;
 import android.support.v4.app.ListFragment;
 import android.support.v4.app.LoaderManager;
 import android.support.v4.content.Loader;
+import android.text.TextUtils;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
@@ -36,6 +37,7 @@ public class AddressbookFragment extends ListFragment implements
     OnAddressSelectedListener mCallback;
     private AddressEntryAdapter mAdapter;
     private String mBook;
+    private String mCurFilter;
 
     // Container Activity must implement this interface
     public interface OnAddressSelectedListener {
@@ -128,7 +130,9 @@ public class AddressbookFragment extends ListFragment implements
     }
 
     public void filterAddresses(String query) {
-        mAdapter.getFilter().filter(query);
+        mCurFilter = !TextUtils.isEmpty(query) ? query : null;
+        getLoaderManager().restartLoader("private".equals(mBook) ?
+                PRIVATE_LOADER_ID : ROUTER_LOADER_ID, null, this);
     }
 
     // Duplicated from I2PFragmentBase because this extends ListFragment
@@ -140,7 +144,7 @@ public class AddressbookFragment extends ListFragment implements
 
     public Loader<List<AddressEntry>> onCreateLoader(int id, Bundle args) {
         return new AddressEntryLoader(getActivity(),
-                getRouterContext(), mBook);
+                getRouterContext(), mBook, mCurFilter);
     }
 
     public void onLoadFinished(Loader<List<AddressEntry>> loader,
diff --git a/src/net/i2p/android/router/loader/AddressEntryLoader.java b/src/net/i2p/android/router/loader/AddressEntryLoader.java
index 39bbbec56a541953810604e5dec449de0eec1812..a513f10b8da32e4d7f143e7d687946ecf1c2d66c 100644
--- a/src/net/i2p/android/router/loader/AddressEntryLoader.java
+++ b/src/net/i2p/android/router/loader/AddressEntryLoader.java
@@ -2,6 +2,7 @@ package net.i2p.android.router.loader;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -16,12 +17,15 @@ public class AddressEntryLoader extends AsyncTaskLoader<List<AddressEntry>> {
     private static final String DEFAULT_NS = "BlockfileNamingService";
     private RouterContext mRContext;
     private String mBook;
+    private String mFilter;
     private List<AddressEntry> mData;
 
-    public AddressEntryLoader(Context context, RouterContext rContext, String book) {
+    public AddressEntryLoader(Context context, RouterContext rContext,
+            String book, String filter) {
         super(context);
         mRContext = rContext;
         mBook = book;
+        mFilter = filter;
     }
 
     @Override
@@ -34,6 +38,10 @@ public class AddressEntryLoader extends AsyncTaskLoader<List<AddressEntry>> {
         Set<String> names = new TreeSet<String>();
         names.addAll(ns.getNames());
         for (String hostName : names) {
+            if (mFilter != null && !hostName.toLowerCase(Locale.US).contains(
+                    mFilter.toLowerCase(Locale.US)))
+                continue;
+
             AddressEntry name = new AddressEntry(hostName);
             ret.add(name);
         }