diff --git a/src/com/android/settings/search/Index.java b/src/com/android/settings/search/Index.java
index b146a22..879bd77 100644
--- a/src/com/android/settings/search/Index.java
+++ b/src/com/android/settings/search/Index.java
@@ -331,7 +331,7 @@
 
     private boolean addIndexablesFromRemoteProvider(String packageName, String authority) {
         try {
-            final int baseRank = Ranking.getBaseRankForAuthority(authority);
+            final int baseRank = 0;
 
             final Context context = mBaseAuthority.equals(authority) ?
                     mContext : mContext.createPackageContext(packageName, 0);
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
deleted file mode 100644
index 20f578b..0000000
--- a/src/com/android/settings/search/Ranking.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * 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 com.android.settings.ChooseLockGeneric;
-import com.android.settings.DateTimeSettings;
-import com.android.settings.DevelopmentSettings;
-import com.android.settings.DeviceInfoSettings;
-import com.android.settings.DisplaySettings;
-import com.android.settings.LegalSettings;
-import com.android.settings.PrivacySettings;
-import com.android.settings.ScreenPinningSettings;
-import com.android.settings.SecuritySettings;
-import com.android.settings.WallpaperTypeSettings;
-import com.android.settings.accessibility.AccessibilitySettings;
-import com.android.settings.accounts.UserAndAccountDashboardFragment;
-import com.android.settings.applications.AdvancedAppSettings;
-import com.android.settings.applications.SpecialAccessSettings;
-import com.android.settings.bluetooth.BluetoothSettings;
-import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
-import com.android.settings.datausage.DataUsageMeteredSettings;
-import com.android.settings.datausage.DataUsageSummary;
-import com.android.settings.deviceinfo.StorageDashboardFragment;
-import com.android.settings.deviceinfo.StorageSettings;
-import com.android.settings.display.ScreenZoomSettings;
-import com.android.settings.enterprise.EnterprisePrivacySettings;
-import com.android.settings.fuelgauge.BatterySaverSettings;
-import com.android.settings.fuelgauge.PowerUsageSummary;
-import com.android.settings.gestures.AssistGestureSettings;
-import com.android.settings.gestures.DoubleTapPowerSettings;
-import com.android.settings.gestures.DoubleTapScreenSettings;
-import com.android.settings.gestures.DoubleTwistGestureSettings;
-import com.android.settings.gestures.PickupGestureSettings;
-import com.android.settings.gestures.SwipeToNotificationSettings;
-import com.android.settings.language.LanguageAndInputSettings;
-import com.android.settings.location.LocationSettings;
-import com.android.settings.location.ScanningSettings;
-import com.android.settings.network.NetworkDashboardFragment;
-import com.android.settings.notification.ConfigureNotificationSettings;
-import com.android.settings.notification.SoundSettings;
-import com.android.settings.notification.ZenModeAutomationSettings;
-import com.android.settings.notification.ZenModePrioritySettings;
-import com.android.settings.notification.ZenModeSettings;
-import com.android.settings.notification.ZenModeVisualInterruptionSettings;
-import com.android.settings.print.PrintSettingsFragment;
-import com.android.settings.sim.SimSettings;
-import com.android.settings.system.SystemDashboardFragment;
-import com.android.settings.users.UserSettings;
-import com.android.settings.wifi.ConfigureWifiSettings;
-import com.android.settings.wifi.SavedAccessPointsWifiSettings;
-import com.android.settings.wifi.WifiSettings;
-
-import java.util.HashMap;
-
-/**
- * Utility class for dealing with Search Ranking.
- */
-public final class Ranking {
-
-    public static final int RANK_WIFI = 1;
-    public static final int RANK_BT = 2;
-    public static final int RANK_SIM = 3;
-    public static final int RANK_DATA_USAGE = 4;
-    public static final int RANK_WIRELESS = 5;
-    public static final int RANK_DISPLAY = 6;
-    public static final int RANK_WALLPAPER = 7;
-    public static final int RANK_NOTIFICATIONS = 8;
-    public static final int RANK_SOUND = 9;
-    public static final int RANK_APPS = 10;
-    public static final int RANK_STORAGE = 11;
-    public static final int RANK_POWER_USAGE = 12;
-    public static final int RANK_USERS = 13;
-    public static final int RANK_LOCATION = 14;
-    public static final int RANK_SECURITY = 15;
-    public static final int RANK_ACCOUNT = 16;
-    public static final int RANK_IME = 17;
-    public static final int RANK_PRIVACY = 18;
-    public static final int RANK_DATE_TIME = 19;
-    public static final int RANK_ACCESSIBILITY = 20;
-    public static final int RANK_PRINTING = 21;
-    public static final int RANK_DEVELOPEMENT = 22;
-    public static final int RANK_DEVICE_INFO = 23;
-    public static final int RANK_GESTURE = 24;
-
-    public static final int RANK_UNDEFINED = -1;
-    public static final int RANK_OTHERS = 1024;
-    public static final int BASE_RANK_DEFAULT = 2048;
-
-    public static int sCurrentBaseRank = BASE_RANK_DEFAULT;
-
-    private static HashMap<String, Integer> sRankMap = new HashMap<String, Integer>();
-    private static HashMap<String, Integer> sBaseRankMap = new HashMap<String, Integer>();
-
-    static {
-        // Wi-Fi
-        sRankMap.put(WifiSettings.class.getName(), RANK_WIFI);
-        sRankMap.put(ConfigureWifiSettings.class.getName(), RANK_WIFI);
-        sRankMap.put(SavedAccessPointsWifiSettings.class.getName(), RANK_WIFI);
-
-        // BT
-        sRankMap.put(BluetoothSettings.class.getName(), RANK_BT);
-        sRankMap.put(ConnectedDeviceDashboardFragment.class.getName(), RANK_BT);
-
-        // SIM Cards
-        sRankMap.put(SimSettings.class.getName(), RANK_SIM);
-
-        // DataUsage
-        sRankMap.put(DataUsageSummary.class.getName(), RANK_DATA_USAGE);
-        sRankMap.put(DataUsageMeteredSettings.class.getName(), RANK_DATA_USAGE);
-
-        // Other wireless settings
-        sRankMap.put(NetworkDashboardFragment.class.getName(), RANK_WIRELESS);
-
-        // Display
-        sRankMap.put(DisplaySettings.class.getName(), RANK_DISPLAY);
-        sRankMap.put(ScreenZoomSettings.class.getName(), RANK_WIFI);
-
-        // Wallpapers
-        sRankMap.put(WallpaperTypeSettings.class.getName(), RANK_WALLPAPER);
-
-        // Sound
-        sRankMap.put(SoundSettings.class.getName(), RANK_SOUND);
-
-        // Notifications
-        sRankMap.put(ConfigureNotificationSettings.class.getName(), RANK_NOTIFICATIONS);
-        sRankMap.put(ZenModeSettings.class.getName(), RANK_NOTIFICATIONS);
-        sRankMap.put(ZenModePrioritySettings.class.getName(), RANK_NOTIFICATIONS);
-        sRankMap.put(ZenModeAutomationSettings.class.getName(), RANK_NOTIFICATIONS);
-        sRankMap.put(ZenModeVisualInterruptionSettings.class.getName(), RANK_NOTIFICATIONS);
-
-        // Storage
-        sRankMap.put(StorageSettings.class.getName(), RANK_STORAGE);
-
-        // Battery
-        sRankMap.put(PowerUsageSummary.class.getName(), RANK_POWER_USAGE);
-        sRankMap.put(BatterySaverSettings.class.getName(), RANK_POWER_USAGE);
-
-        // Advanced app settings
-        sRankMap.put(AdvancedAppSettings.class.getName(), RANK_APPS);
-        sRankMap.put(SpecialAccessSettings.class.getName(), RANK_APPS);
-
-        // Users
-        sRankMap.put(UserSettings.class.getName(), RANK_USERS);
-
-        // Gestures
-        sRankMap.put(AssistGestureSettings.class.getName(), RANK_GESTURE);
-        sRankMap.put(DoubleTapPowerSettings.class.getName(), RANK_GESTURE);
-        sRankMap.put(DoubleTapScreenSettings.class.getName(), RANK_GESTURE);
-        sRankMap.put(DoubleTwistGestureSettings.class.getName(), RANK_GESTURE);
-        sRankMap.put(PickupGestureSettings.class.getName(), RANK_GESTURE);
-        sRankMap.put(SwipeToNotificationSettings.class.getName(), RANK_GESTURE);
-
-        // Location
-        sRankMap.put(LocationSettings.class.getName(), RANK_LOCATION);
-        sRankMap.put(ScanningSettings.class.getName(), RANK_LOCATION);
-
-        // Security
-        sRankMap.put(SecuritySettings.class.getName(), RANK_SECURITY);
-        sRankMap.put(ChooseLockGeneric.ChooseLockGenericFragment.class.getName(), RANK_SECURITY);
-        sRankMap.put(ScreenPinningSettings.class.getName(), RANK_SECURITY);
-        sRankMap.put(EnterprisePrivacySettings.class.getName(), RANK_SECURITY);
-
-        // Accounts
-        sRankMap.put(UserAndAccountDashboardFragment.class.getName(), RANK_ACCOUNT);
-
-        // IMEs
-        sRankMap.put(LanguageAndInputSettings.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);
-        sRankMap.put(LegalSettings.class.getName(), RANK_DEVICE_INFO);
-
-        sRankMap.put(StorageDashboardFragment.class.getName(), RANK_STORAGE);
-        sRankMap.put(SystemDashboardFragment.class.getName(), RANK_DEVICE_INFO);
-
-        sBaseRankMap.put("com.android.settings", 0);
-    }
-
-    public static int getRankForClassName(String className) {
-        Integer rank = sRankMap.get(className);
-        return (rank != null) ? (int) rank: RANK_OTHERS;
-    }
-
-    public static int getBaseRankForAuthority(String authority) {
-        synchronized (sBaseRankMap) {
-            Integer base = sBaseRankMap.get(authority);
-            if (base != null) {
-                return base;
-            }
-            sCurrentBaseRank++;
-            sBaseRankMap.put(authority, sCurrentBaseRank);
-            return sCurrentBaseRank;
-        }
-    }
-}
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 561c2c6..a659077 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -95,8 +95,7 @@
     static void addIndex(Class<?> indexClass, @XmlRes int xmlResId,
             @DrawableRes int iconResId) {
         String className = indexClass.getName();
-        int rank = Ranking.getRankForClassName(className);
-        sResMap.put(className, new SearchIndexableResource(rank, xmlResId, className, iconResId));
+        sResMap.put(className, new SearchIndexableResource(0, xmlResId, className, iconResId));
     }
 
     static {
diff --git a/src/com/android/settings/search2/DatabaseIndexingManager.java b/src/com/android/settings/search2/DatabaseIndexingManager.java
index 6e91f5c..0b1d339 100644
--- a/src/com/android/settings/search2/DatabaseIndexingManager.java
+++ b/src/com/android/settings/search2/DatabaseIndexingManager.java
@@ -41,7 +41,6 @@
 import com.android.settings.core.PreferenceController;
 import com.android.settings.search.IndexDatabaseHelper;
 import com.android.settings.search.Indexable;
-import com.android.settings.search.Ranking;
 import com.android.settings.search.SearchIndexableRaw;
 import com.android.settings.search.SearchIndexableResources;
 
@@ -346,19 +345,17 @@
     @VisibleForTesting
     boolean addIndexablesFromRemoteProvider(String packageName, String authority) {
         try {
-            // TODO delete base rank. does nothing.
-            final int baseRank = Ranking.getBaseRankForAuthority(authority);
 
             final Context context = mBaseAuthority.equals(authority) ?
                     mContext : mContext.createPackageContext(packageName, 0);
 
             final Uri uriForResources = buildUriForXmlResources(authority);
             addIndexablesForXmlResourceUri(context, packageName, uriForResources,
-                    SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS, baseRank);
+                    SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS);
 
             final Uri uriForRawData = buildUriForRawData(authority);
             addIndexablesForRawDataUri(context, packageName, uriForRawData,
-                    SearchIndexablesContract.INDEXABLES_RAW_COLUMNS, baseRank);
+                    SearchIndexablesContract.INDEXABLES_RAW_COLUMNS);
             return true;
         } catch (PackageManager.NameNotFoundException e) {
             Log.w(LOG_TAG, "Could not create context for " + packageName + ": "
@@ -497,7 +494,7 @@
     }
 
     private void addIndexablesForXmlResourceUri(Context packageContext, String packageName,
-            Uri uri, String[] projection, int baseRank) {
+            Uri uri, String[] projection) {
 
         final ContentResolver resolver = packageContext.getContentResolver();
         final Cursor cursor = resolver.query(uri, projection, null, null, null);
@@ -512,7 +509,6 @@
             if (count > 0) {
                 while (cursor.moveToNext()) {
                     final int providerRank = cursor.getInt(COLUMN_INDEX_XML_RES_RANK);
-                    final int rank = (providerRank > 0) ? baseRank + providerRank : baseRank;
 
                     final int xmlResId = cursor.getInt(COLUMN_INDEX_XML_RES_RESID);
 
@@ -526,7 +522,6 @@
                             COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS);
 
                     SearchIndexableResource sir = new SearchIndexableResource(packageContext);
-                    sir.rank = rank;
                     sir.xmlResId = xmlResId;
                     sir.className = className;
                     sir.packageName = packageName;
@@ -544,7 +539,7 @@
     }
 
     private void addIndexablesForRawDataUri(Context packageContext, String packageName,
-            Uri uri, String[] projection, int baseRank) {
+            Uri uri, String[] projection) {
 
         final ContentResolver resolver = packageContext.getContentResolver();
         final Cursor cursor = resolver.query(uri, projection, null, null, null);
@@ -559,7 +554,6 @@
             if (count > 0) {
                 while (cursor.moveToNext()) {
                     final int providerRank = cursor.getInt(COLUMN_INDEX_RAW_RANK);
-                    final int rank = (providerRank > 0) ? baseRank + providerRank : baseRank;
 
                     final String title = cursor.getString(COLUMN_INDEX_RAW_TITLE);
                     final String summaryOn = cursor.getString(COLUMN_INDEX_RAW_SUMMARY_ON);
@@ -582,7 +576,6 @@
                     final int userId = cursor.getInt(COLUMN_INDEX_RAW_USER_ID);
 
                     SearchIndexableRaw data = new SearchIndexableRaw(packageContext);
-                    data.rank = rank;
                     data.title = title;
                     data.summaryOn = summaryOn;
                     data.summaryOff = summaryOff;
diff --git a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
index 62bb7fb..012d616 100644
--- a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
@@ -63,7 +63,6 @@
 
         assertThat(index).isNotNull();
         assertThat(index.className).isEqualTo("java.lang.String");
-        assertThat(index.rank).isEqualTo(Ranking.RANK_OTHERS);
         assertThat(index.xmlResId).isEqualTo(XML_RES_ID);
         assertThat(index.iconResId).isEqualTo(ICON_RES_ID);
         final int afterCount = SearchIndexableResources.values().size();
@@ -77,7 +76,6 @@
 
         assertThat(index).isNotNull();
         assertThat(index.className).isEqualTo(WifiSettings.class.getName());
-        assertThat(index.rank).isEqualTo(Ranking.RANK_WIFI);
         assertThat(index.xmlResId).isEqualTo(NO_DATA_RES_ID);
         assertThat(index.iconResId).isEqualTo(R.drawable.ic_settings_wireless);
     }
