diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 93d31f3..bd2dbf3 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -68,8 +68,10 @@
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
 import com.android.contacts.common.list.PhoneNumberPickerFragment;
 import com.android.dialer.calllog.CallLogActivity;
+import com.android.dialer.database.DialerDatabaseHelper;
 import com.android.dialer.dialpad.DialpadFragment;
 import com.android.dialer.dialpad.SmartDialNameMatcher;
+import com.android.dialer.dialpad.SmartDialPrefix;
 import com.android.dialer.interactions.PhoneNumberInteraction;
 import com.android.dialer.list.AllContactsActivity;
 import com.android.dialer.list.PhoneFavoriteFragment;
@@ -165,6 +167,8 @@
 
     private String mSearchQuery;
 
+    private DialerDatabaseHelper mDialerDatabaseHelper;
+
     /**
      * Listener used when one of phone numbers in search UI is selected. This will initiate a
      * phone call using the phone number.
@@ -280,6 +284,9 @@
                 && savedInstanceState == null) {
             setupFilterText(intent);
         }
+
+        mDialerDatabaseHelper = DialerDatabaseHelper.getInstance(this);
+        SmartDialPrefix.initializeNanpSettings(this);
     }
 
     @Override
@@ -289,6 +296,7 @@
             displayFragment(getIntent());
         }
         mFirstLaunch = false;
+        mDialerDatabaseHelper.startSmartDialUpdateThread();
     }
 
     @Override
diff --git a/src/com/android/dialer/database/DialerDatabaseHelper.java b/src/com/android/dialer/database/DialerDatabaseHelper.java
index a802825..3bea980 100644
--- a/src/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/src/com/android/dialer/database/DialerDatabaseHelper.java
@@ -293,7 +293,11 @@
             Log.v(TAG, "Getting Instance");
         }
         if (sSingleton == null) {
-            sSingleton = new DialerDatabaseHelper(context, SMARTDIAL_DATABASE_NAME);
+            // Use application context instead of activity context because this is a singleton,
+            // and we don't want to leak the activity if the activity is not running but the
+            // dialer database helper is still doing work.
+            sSingleton = new DialerDatabaseHelper(context.getApplicationContext(),
+                    SMARTDIAL_DATABASE_NAME);
         }
         return sSingleton;
     }
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index fefbcc4..82f5377 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -190,8 +190,6 @@
     private ListView mDialpadChooser;
     private DialpadChooserAdapter mDialpadChooserAdapter;
 
-    private DialerDatabaseHelper mDialerDatabaseHelper;
-
     /**
      * Regular expression prohibiting manual phone call. Can be empty, which means "no rule".
      */
@@ -327,9 +325,6 @@
         mContactsPrefs = new ContactsPreferences(getActivity());
         mCurrentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
 
-        mDialerDatabaseHelper = DialerDatabaseHelper.getInstance(getActivity());
-        SmartDialPrefix.initializeNanpSettings(getActivity());
-
         try {
             mHaptic.init(getActivity(),
                          getResources().getBoolean(R.bool.config_enable_dialer_key_vibration));
@@ -674,10 +669,6 @@
         // Prevent unnecessary confusion. Reset the press count anyway.
         mDialpadPressCount = 0;
 
-        // Initialize smart dialing state. This has to be done before anything is filled in before
-        // the dialpad edittext to prevent entries from being loaded from a null cache.
-        initializeSmartDialingState();
-
         configureScreenFromIntent(getActivity());
 
         stopWatch.lap("fdin");
@@ -1681,13 +1672,6 @@
         return intent;
     }
 
-    private void initializeSmartDialingState() {
-        // Handle smart dialing related state
-        // TODO krelease: This should probably be moved to somewhere more appropriate, maybe
-        // into DialtactsActivity
-        mDialerDatabaseHelper.startSmartDialUpdateThread();
-    }
-
     @Override
     public void onHiddenChanged(boolean hidden) {
         super.onHiddenChanged(hidden);
diff --git a/src/com/android/dialer/list/PhoneFavoriteFragment.java b/src/com/android/dialer/list/PhoneFavoriteFragment.java
index b6a5fb4..a1406d2 100644
--- a/src/com/android/dialer/list/PhoneFavoriteFragment.java
+++ b/src/com/android/dialer/list/PhoneFavoriteFragment.java
@@ -91,9 +91,6 @@
         public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
             if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onLoadFinished");
             mContactTileAdapter.setContactCursor(data);
-
-            // Show the filter header with "loading" state.
-            mAccountFilterHeader.setVisibility(View.VISIBLE);
         }
 
         @Override
@@ -148,11 +145,6 @@
     private TextView mEmptyView;
     private ListView mListView;
     private View mShowAllContactsButton;
-    /**
-     * Layout containing {@link #mAccountFilterHeader}. Used to limit area being "pressed".
-     */
-    private FrameLayout mAccountFilterHeaderContainer;
-    private View mAccountFilterHeader;
 
     /**
      * Layout used when contacts load is slower than expected and thus "loading" view should be
@@ -214,13 +206,6 @@
         mListView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT);
         mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
 
-        // TODO krelease: Don't show this header anymore
-        // Create the account filter header but keep it hidden until "all" contacts are loaded.
-        mAccountFilterHeaderContainer = new FrameLayout(getActivity(), null);
-        mAccountFilterHeader = inflater.inflate(R.layout.account_filter_header_for_phone_favorite,
-                mListView, false);
-        mAccountFilterHeaderContainer.addView(mAccountFilterHeader);
-
         mLoadingView = inflater.inflate(R.layout.phone_loading_contacts, mListView, false);
         mShowAllContactsButton = inflater.inflate(R.layout.show_all_contact_button, mListView,
                 false);
@@ -232,8 +217,7 @@
         });
 
         mAdapter = new PhoneFavoriteMergedAdapter(getActivity(), mContactTileAdapter,
-                mAccountFilterHeaderContainer, mCallLogAdapter, mLoadingView,
-                mShowAllContactsButton);
+                mCallLogAdapter, mLoadingView, mShowAllContactsButton);
 
         mListView.setAdapter(mAdapter);
 
diff --git a/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java b/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
index 0e5594e..ce2b627 100644
--- a/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
@@ -55,7 +55,6 @@
 
     public PhoneFavoriteMergedAdapter(Context context,
             PhoneFavoritesTileAdapter contactTileAdapter,
-            View accountFilterHeaderContainer,
             CallLogAdapter callLogAdapter,
             View loadingView,
             View showAllContactsButton) {
diff --git a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
index 9234535..3aa85e8 100644
--- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
@@ -536,17 +536,6 @@
     }
 
     /**
-     * Returns the "frequent header" position. Only available when STREQUENT or
-     * STREQUENT_PHONE_ONLY is used for its display type.
-     *
-     * TODO krelease: We shouldn't need this method once we get rid of the frequent header
-     * in the merged adapter
-     */
-    public int getFrequentHeaderPosition() {
-        return getRowCount(mNumStarred);
-    }
-
-    /**
      * Temporarily removes a contact from the list for UI refresh. Stores data for this contact
      * in the back-up variable.
      *
