diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index fac2d34..277a56e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1832,5 +1832,19 @@
             </intent-filter>
         </provider>
 
+        <receiver android:name=".search.HomePackageReceiver"
+                  android:exported="false">
+            <intent-filter>
+                <action android:name="android.intent.action.PACKAGE_ADDED" />
+                <action android:name="android.intent.action.PACKAGE_CHANGED" />
+                <action android:name="android.intent.action.PACKAGE_REMOVED" />
+
+                <category android:name="android.intent.category.HOME" />
+                <category android:name="android.intent.category.LAUNCHER" />
+
+                <data android:scheme="package"/>
+            </intent-filter>
+        </receiver>
+
     </application>
 </manifest>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 8526523..c368361 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5434,6 +5434,7 @@
     <string name="keywords_wifi">wifi wi-fi network connection</string>
     <string name="keywords_more_default_sms_app">text message</string>
     <string name="keywords_more_mobile_networks">cellular cell carrier wireless</string>
+    <string name="keywords_home">launcher</string>
     <string name="keywords_display">screen touchscreen</string>
     <string name="keywords_display_brightness_level">dim screen touchscreen</string>
     <string name="keywords_display_auto_brightness">dim screen touchscreen</string>
diff --git a/src/com/android/settings/HomeSettings.java b/src/com/android/settings/HomeSettings.java
index 8697062..6d5883c 100644
--- a/src/com/android/settings/HomeSettings.java
+++ b/src/com/android/settings/HomeSettings.java
@@ -17,17 +17,21 @@
 package com.android.settings;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import android.app.ActivityManager;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.SharedPreferences;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
 import android.graphics.ColorFilter;
 import android.graphics.ColorMatrix;
 import android.graphics.ColorMatrixColorFilter;
@@ -37,13 +41,17 @@
 import android.os.Handler;
 import android.preference.Preference;
 import android.preference.PreferenceGroup;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.ImageView;
 import android.widget.RadioButton;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableRaw;
 
-public class HomeSettings extends SettingsPreferenceFragment {
+public class HomeSettings extends SettingsPreferenceFragment implements Indexable {
     static final String TAG = "HomeSettings";
 
     static final int REQUESTING_UNINSTALL = 10;
@@ -289,4 +297,59 @@
             }
         }
     }
+
+    /**
+     * For search
+     */
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+        new BaseSearchIndexProvider() {
+            @Override
+            public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+                final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
+
+                final PackageManager pm = context.getPackageManager();
+                final ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
+                pm.getHomeActivities(homeActivities);
+
+                final SharedPreferences sp = context.getSharedPreferences(
+                        HomeSettings.HOME_PREFS, Context.MODE_PRIVATE);
+                final boolean doShowHome = sp.getBoolean(HomeSettings.HOME_PREFS_DO_SHOW, false);
+
+                // We index Home Launchers only if there are more than one or if we are showing the
+                // Home tile into the Dashboard
+                if (homeActivities.size() > 1 || doShowHome) {
+                    final Resources res = context.getResources();
+
+                    // Add fragment title
+                    SearchIndexableRaw data = new SearchIndexableRaw(context);
+                    data.title = res.getString(R.string.home_settings);
+                    data.screenTitle = res.getString(R.string.home_settings);
+                    data.keywords = res.getString(R.string.keywords_home);
+                    result.add(data);
+
+                    for (int i = 0; i < homeActivities.size(); i++) {
+                        final ResolveInfo resolveInfo = homeActivities.get(i);
+                        final ActivityInfo activityInfo = resolveInfo.activityInfo;
+
+                        CharSequence name;
+                        try {
+                            name = activityInfo.loadLabel(pm);
+                            if (TextUtils.isEmpty(name)) {
+                                continue;
+                            }
+                        } catch (Exception e) {
+                            Log.v(TAG, "Problem dealing with Home " + activityInfo.name, e);
+                            continue;
+                        }
+
+                        data = new SearchIndexableRaw(context);
+                        data.title = name.toString();
+                        data.screenTitle = res.getString(R.string.home_settings);
+                        result.add(data);
+                    }
+                }
+
+                return result;
+            }
+        };
 }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index b227c6b..be3662f 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -294,7 +294,6 @@
 
     private boolean mBatteryPresent = true;
     private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {
-
         @Override
         public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
diff --git a/src/com/android/settings/search/DynamicIndexableContentMonitor.java b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
index c0b462f..12bb6ef 100644
--- a/src/com/android/settings/search/DynamicIndexableContentMonitor.java
+++ b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
@@ -78,10 +78,8 @@
             new UserDictionaryContentObserver(mHandler);
 
     private Context mContext;
-
-    private boolean mHasFeturePrinting;
-
-    private boolean mHasFetureIme;
+    private boolean mHasFeaturePrinting;
+    private boolean mHasFeatureIme;
 
     private static Intent getAccessibilityServiceIntent(String packageName) {
         final Intent intent = new Intent(AccessibilityService.SERVICE_INTERFACE);
@@ -104,9 +102,9 @@
     public void register(Context context) {
         mContext = context;
 
-        mHasFeturePrinting = mContext.getPackageManager().hasSystemFeature(
+        mHasFeaturePrinting = mContext.getPackageManager().hasSystemFeature(
                 PackageManager.FEATURE_PRINTING);
-        mHasFetureIme = mContext.getPackageManager().hasSystemFeature(
+        mHasFeatureIme = mContext.getPackageManager().hasSystemFeature(
                 PackageManager.FEATURE_INPUT_METHODS);
 
         // Cache accessibility service packages to know when they go away.
@@ -124,7 +122,7 @@
             mAccessibilityServices.add(resolveInfo.serviceInfo.packageName);
         }
 
-        if (mHasFeturePrinting) {
+        if (mHasFeaturePrinting) {
             // Cache print service packages to know when they go away.
             PrintManager printManager = (PrintManager)
                     mContext.getSystemService(Context.PRINT_SERVICE);
@@ -141,7 +139,7 @@
         }
 
         // Cache IME service packages to know when they go away.
-        if (mHasFetureIme) {
+        if (mHasFeatureIme) {
             InputMethodManager imeManager = (InputMethodManager)
                     mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
             List<InputMethodInfo> inputMethods = imeManager.getInputMethodList();
@@ -174,7 +172,7 @@
                 Context.INPUT_SERVICE);
         inputManager.unregisterInputDeviceListener(this);
 
-        if (mHasFetureIme) {
+        if (mHasFeatureIme) {
             mContext.getContentResolver().unregisterContentObserver(
                     mUserDictionaryContentObserver);
         }
@@ -242,7 +240,7 @@
             }
         }
 
-        if (mHasFeturePrinting) {
+        if (mHasFeaturePrinting) {
             if (!mPrintServices.contains(packageName)) {
                 final Intent intent = getPrintServiceIntent(packageName);
                 if (!mContext.getPackageManager().queryIntentServices(intent, 0).isEmpty()) {
@@ -253,7 +251,7 @@
             }
         }
 
-        if (mHasFetureIme) {
+        if (mHasFeatureIme) {
             if (!mImeServices.contains(packageName)) {
                 Intent intent = getIMEServiceIntent(packageName);
                 if (!mContext.getPackageManager().queryIntentServices(intent, 0).isEmpty()) {
@@ -273,7 +271,7 @@
                     AccessibilitySettings.class.getName(), true, true);
         }
 
-        if (mHasFeturePrinting) {
+        if (mHasFeaturePrinting) {
             final int printIndex = mPrintServices.indexOf(packageName);
             if (printIndex >= 0) {
                 mPrintServices.remove(printIndex);
@@ -282,7 +280,7 @@
             }
         }
 
-        if (mHasFetureIme) {
+        if (mHasFeatureIme) {
             final int imeIndex = mImeServices.indexOf(packageName);
             if (imeIndex >= 0) {
                 mImeServices.remove(imeIndex);
diff --git a/src/com/android/settings/search/HomePackageReceiver.java b/src/com/android/settings/search/HomePackageReceiver.java
new file mode 100644
index 0000000..a245252
--- /dev/null
+++ b/src/com/android/settings/search/HomePackageReceiver.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.search;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import com.android.settings.HomeSettings;
+
+import java.util.Set;
+
+/**
+ * A BroadcastReceiver for detecting Home Launchers
+ */
+public class HomePackageReceiver extends BroadcastReceiver {
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        Index.getInstance(context).updateFromClassNameResource(
+                HomeSettings.class.getName(), true, true);
+    }
+}
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index e2b1d48..ae5f202 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -118,7 +118,7 @@
         sResMap.put(HomeSettings.class.getName(),
                 new SearchIndexableResource(
                         Ranking.getRankForClassName(HomeSettings.class.getName()),
-                        R.xml.home_selection,
+                        NO_DATA_RES_ID,
                         HomeSettings.class.getName(),
                         R.drawable.ic_settings_home));
 
