diff --git a/res/drawable-hdpi/ic_settings_home.png b/res/drawable-hdpi/ic_settings_home.png
index 42354cd..ce1a06c 100644
--- a/res/drawable-hdpi/ic_settings_home.png
+++ b/res/drawable-hdpi/ic_settings_home.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_settings_home.png b/res/drawable-mdpi/ic_settings_home.png
index 8064773..05b5e4d 100644
--- a/res/drawable-mdpi/ic_settings_home.png
+++ b/res/drawable-mdpi/ic_settings_home.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_settings_home.png b/res/drawable-xhdpi/ic_settings_home.png
index 687025d..6a4d84a 100644
--- a/res/drawable-xhdpi/ic_settings_home.png
+++ b/res/drawable-xhdpi/ic_settings_home.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_settings_home.png b/res/drawable-xxhdpi/ic_settings_home.png
new file mode 100644
index 0000000..aac8773
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_settings_home.png
Binary files differ
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 5c77a97..ac67a38 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -667,50 +667,15 @@
         return headerIndex;
     }
 
-    private boolean isSystemApp(ResolveInfo ri) {
-        return ((ri.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0);
-    }
-
     private boolean updateHomeSettingHeaders(Header header) {
-        final PackageManager pm = getPackageManager();
-        final ArrayList<ResolveInfo> homeApps = new ArrayList<ResolveInfo>();
         try {
-            ComponentName currentHome = pm.getHomeActivities(homeApps);
+            final ArrayList<ResolveInfo> homeApps = new ArrayList<ResolveInfo>();
+            getPackageManager().getHomeActivities(homeApps);
             if (homeApps.size() < 2) {
                 // When there's only one available home app, omit this settings
                 // category entirely at the top level UI.
                 return false;
             }
-            ResolveInfo iconSource = null;
-            if (currentHome == null) {
-                // no current default, so find the system home app and use that
-                for (int which = 0; which < homeApps.size(); which++) {
-                    ResolveInfo ri = homeApps.get(which);
-                    if (isSystemApp(ri)) {
-                        iconSource = ri;
-                        break;
-                    }
-                }
-            } else {
-                // find the current-home entry in the returned set
-                for (int which = 0; which < homeApps.size(); which++) {
-                    ResolveInfo ri = homeApps.get(which);
-                    ComponentName riName = new ComponentName(ri.activityInfo.packageName,
-                            ri.activityInfo.name);
-                    if (riName.equals(currentHome)) {
-                        iconSource = ri;
-                        break;
-                    }
-                }
-            }
-            if (iconSource != null) {
-                if (header.extras == null) {
-                    header.extras = new Bundle();
-                }
-                header.extras.putParcelable(HomeSettings.CURRENT_HOME, iconSource.activityInfo);
-            } else {
-                Log.v(LOG_TAG, "No home app icon found");
-            }
         } catch (Exception e) {
             // Can't look up the home activity; bail on configuring the icon
             Log.w(LOG_TAG, "Problem looking up home activity!", e);
