diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 8bcd266..78d4098 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -66,7 +66,7 @@
 import java.util.List;
 import java.util.Locale;
 
-public class Utils {
+public final class Utils {
 
     /**
      * Set the preference's title to the matching activity's label.
diff --git a/src/com/android/settings/net/DataUsageMeteredSettings.java b/src/com/android/settings/net/DataUsageMeteredSettings.java
index fb000db..87358f6 100644
--- a/src/com/android/settings/net/DataUsageMeteredSettings.java
+++ b/src/com/android/settings/net/DataUsageMeteredSettings.java
@@ -22,6 +22,7 @@
 import static com.android.settings.DataUsageSummary.hasWifiRadio;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.net.NetworkPolicy;
 import android.net.NetworkPolicyManager;
 import android.net.NetworkTemplate;
@@ -31,15 +32,23 @@
 import android.preference.CheckBoxPreference;
 import android.preference.Preference;
 import android.preference.PreferenceCategory;
+import android.provider.SearchIndexableResource;
 import android.telephony.TelephonyManager;
 
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableRaw;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * Panel to configure {@link NetworkPolicy#metered} for networks.
  */
-public class DataUsageMeteredSettings extends SettingsPreferenceFragment {
+public class DataUsageMeteredSettings extends SettingsPreferenceFragment implements Indexable {
 
     private static final boolean SHOW_MOBILE_CATEGORY = false;
 
@@ -141,4 +150,82 @@
             }
         }
     }
+
+    /**
+     * For search
+     */
+    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+        new BaseSearchIndexProvider() {
+            @Override
+            public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+                final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
+                final Resources res = context.getResources();
+
+                // Add fragment title
+                SearchIndexableRaw data = new SearchIndexableRaw(context);
+                data.title = res.getString(R.string.data_usage_menu_metered);
+                data.screenTitle = res.getString(R.string.data_usage_menu_metered);
+                result.add(data);
+
+                // Body
+                data = new SearchIndexableRaw(context);
+                data.title = res.getString(R.string.data_usage_metered_body);
+                data.screenTitle = res.getString(R.string.data_usage_menu_metered);
+                result.add(data);
+
+                if (SHOW_MOBILE_CATEGORY && hasReadyMobileRadio(context)) {
+                    // Mobile networks category
+                    data = new SearchIndexableRaw(context);
+                    data.title = res.getString(R.string.data_usage_metered_mobile);
+                    data.screenTitle = res.getString(R.string.data_usage_menu_metered);
+                    result.add(data);
+
+                    final TelephonyManager tele = TelephonyManager.from(context);
+
+                    data = new SearchIndexableRaw(context);
+                    data.title = tele.getNetworkOperatorName();
+                    data.screenTitle = res.getString(R.string.data_usage_menu_metered);
+                    result.add(data);
+                }
+
+                // Wi-Fi networks category
+                data = new SearchIndexableRaw(context);
+                data.title = res.getString(R.string.data_usage_metered_wifi);
+                data.screenTitle = res.getString(R.string.data_usage_menu_metered);
+                result.add(data);
+
+                final WifiManager wifiManager =
+                        (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+                if (hasWifiRadio(context) && wifiManager.isWifiEnabled()) {
+                    for (WifiConfiguration config : wifiManager.getConfiguredNetworks()) {
+                        if (config.SSID != null) {
+                            final String networkId = config.SSID;
+
+                            data = new SearchIndexableRaw(context);
+                            data.title = removeDoubleQuotes(networkId);
+                            data.screenTitle = res.getString(R.string.data_usage_menu_metered);
+                            result.add(data);
+                        }
+                    }
+                } else {
+                    data = new SearchIndexableRaw(context);
+                    data.title = res.getString(R.string.data_usage_metered_wifi_disabled);
+                    data.screenTitle = res.getString(R.string.data_usage_menu_metered);
+                    result.add(data);
+                }
+
+                return result;
+            }
+
+            @Override
+            public List<String> getNonIndexableKeys(Context context) {
+                final ArrayList<String> result = new ArrayList<String>();
+                if (!SHOW_MOBILE_CATEGORY || !hasReadyMobileRadio(context)) {
+                    result.add("mobile");
+                }
+
+                return result;
+            }
+        };
+
 }
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
index 80ea83a..b3d90dd 100644
--- a/src/com/android/settings/search/Ranking.java
+++ b/src/com/android/settings/search/Ranking.java
@@ -34,6 +34,7 @@
 import com.android.settings.fuelgauge.PowerUsageSummary;
 import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.location.LocationSettings;
+import com.android.settings.net.DataUsageMeteredSettings;
 import com.android.settings.notification.NotificationDisplaySettings;
 import com.android.settings.notification.NotificationSettings;
 import com.android.settings.notification.OtherSoundSettings;
@@ -81,50 +82,71 @@
     private static HashMap<String, Integer> sBaseRankMap = new HashMap<String, Integer>();
 
     static {
+        // Wi-Fi
         sRankMap.put(WifiSettings.class.getName(), RANK_WIFI);
         sRankMap.put(AdvancedWifiSettings.class.getName(), RANK_WIFI);
 
+        // BT
         sRankMap.put(BluetoothSettings.class.getName(), RANK_BT);
 
+        // DataUsage
         sRankMap.put(DataUsageSummary.class.getName(), RANK_DATA_USAGE);
+        sRankMap.put(DataUsageMeteredSettings.class.getName(), RANK_DATA_USAGE);
 
+        // Other wireless settinfs
         sRankMap.put(WirelessSettings.class.getName(), RANK_WIRELESS);
 
+        // Home
         sRankMap.put(HomeSettings.class.getName(), RANK_HOME);
 
+        // Display
         sRankMap.put(DisplaySettings.class.getName(), RANK_DISPLAY);
 
+        // Wallpapers
         sRankMap.put(WallpaperTypeSettings.class.getName(), RANK_WALLPAPER);
 
+        // Notifications
         sRankMap.put(NotificationSettings.class.getName(), RANK_NOTIFICATIONS);
         sRankMap.put(NotificationDisplaySettings.class.getName(), RANK_NOTIFICATIONS);
         sRankMap.put(OtherSoundSettings.class.getName(), RANK_NOTIFICATIONS);
         sRankMap.put(ZenModeSettings.class.getName(), RANK_NOTIFICATIONS);
 
+        // Memory
         sRankMap.put(Memory.class.getName(), RANK_MEMORY);
 
+        // Battery
         sRankMap.put(PowerUsageSummary.class.getName(), RANK_POWER_USAGE);
         sRankMap.put(BatterySaverSettings.class.getName(), RANK_POWER_USAGE);
 
+        // Users
         sRankMap.put(UserSettings.class.getName(), RANK_USERS);
 
+        // Location
         sRankMap.put(LocationSettings.class.getName(), RANK_LOCATION);
 
+        // Security
         sRankMap.put(SecuritySettings.class.getName(), RANK_SECURITY);
         sRankMap.put(ChooseLockGeneric.ChooseLockGenericFragment.class.getName(), RANK_SECURITY);
 
+        // IMEs
         sRankMap.put(InputMethodAndLanguageSettings.class.getName(), RANK_IME);
 
+        // Privacy
         sRankMap.put(PrivacySettings.class.getName(), RANK_PRIVACY);
 
+        // Date / Time
         sRankMap.put(DateTimeSettings.class.getName(), RANK_DATE_TIME);
 
+        // Accessibility
         sRankMap.put(AccessibilitySettings.class.getName(), RANK_ACCESSIBILITY);
 
+        // Print
         sRankMap.put(PrintSettingsFragment.class.getName(), RANK_PRINTING);
 
+        // Development
         sRankMap.put(DevelopmentSettings.class.getName(), RANK_DEVELOPEMENT);
 
+        // Device infos
         sRankMap.put(DeviceInfoSettings.class.getName(), RANK_DEVICE_INFO);
 
         sBaseRankMap.put("com.android.settings", 0);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 086ebfc..5f380eb 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -37,6 +37,7 @@
 import com.android.settings.fuelgauge.PowerUsageSummary;
 import com.android.settings.inputmethod.InputMethodAndLanguageSettings;
 import com.android.settings.location.LocationSettings;
+import com.android.settings.net.DataUsageMeteredSettings;
 import com.android.settings.notification.NotificationDisplaySettings;
 import com.android.settings.notification.NotificationSettings;
 import com.android.settings.notification.OtherSoundSettings;
@@ -85,6 +86,13 @@
                         DataUsageSummary.class.getName(),
                         R.drawable.ic_settings_data_usage));
 
+        sResMap.put(DataUsageMeteredSettings.class.getName(),
+                new SearchIndexableResource(
+                        Ranking.getRankForClassName(DataUsageMeteredSettings.class.getName()),
+                        NO_DATA_RES_ID,
+                        DataUsageMeteredSettings.class.getName(),
+                        R.drawable.ic_settings_data_usage));
+
         sResMap.put(WirelessSettings.class.getName(),
                 new SearchIndexableResource(
                         Ranking.getRankForClassName(WirelessSettings.class.getName()),
