diff --git a/src/com/android/settings/fuelgauge/BatteryEntry.java b/src/com/android/settings/fuelgauge/BatteryEntry.java
index aa71252..7a18cd0 100644
--- a/src/com/android/settings/fuelgauge/BatteryEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryEntry.java
@@ -26,6 +26,7 @@
 import android.content.pm.UserInfo;
 import android.graphics.drawable.Drawable;
 import android.os.Handler;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -47,6 +48,7 @@
     public static final int MSG_REPORT_FULLY_DRAWN = 2;
 
     private static final String TAG = "BatteryEntry";
+    private static final String PACKAGE_SYSTEM = "android";
 
     static final HashMap<String,UidToDetail> sUidCache = new HashMap<String,UidToDetail>();
 
@@ -268,9 +270,11 @@
         if (sipper.mPackages == null) {
             sipper.mPackages = pm.getPackagesForUid(uid);
         }
-        if (sipper.mPackages != null) {
-            String[] packageLabels = new String[sipper.mPackages.length];
-            System.arraycopy(sipper.mPackages, 0, packageLabels, 0, sipper.mPackages.length);
+
+        final String[] packages = extractPackagesFromSipper(sipper);
+        if (packages != null) {
+            String[] packageLabels = new String[packages.length];
+            System.arraycopy(packages, 0, packageLabels, 0, packages.length);
 
             // Convert package names to user-facing labels where possible
             IPackageManager ipm = AppGlobals.getPackageManager();
@@ -289,7 +293,7 @@
                         packageLabels[i] = label.toString();
                     }
                     if (ai.icon != 0) {
-                        defaultPackageName = sipper.mPackages[i];
+                        defaultPackageName = packages[i];
                         icon = ai.loadIcon(pm);
                         break;
                     }
@@ -303,7 +307,7 @@
                 name = packageLabels[0];
             } else {
                 // Look for an official name for this UID.
-                for (String pkgName : sipper.mPackages) {
+                for (String pkgName : packages) {
                     try {
                         final PackageInfo pi = ipm.getPackageInfo(pkgName, 0 /* no flags */, userId);
                         if (pi == null) {
@@ -349,4 +353,11 @@
             sHandler.sendMessage(sHandler.obtainMessage(MSG_UPDATE_NAME_ICON, this));
         }
     }
+
+    String[] extractPackagesFromSipper(BatterySipper sipper) {
+        // Only use system package if uid is system uid, so it could find a consistent name and icon
+        return sipper.getUid() == Process.SYSTEM_UID
+                ? new String[]{PACKAGE_SYSTEM}
+                : sipper.mPackages;
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
index 632d549..a461f46 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
@@ -21,6 +21,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Handler;
+import android.os.Process;
 import android.os.UserManager;
 
 import com.android.internal.os.BatterySipper;
@@ -46,9 +47,12 @@
 public class BatteryEntryTest {
 
     private static final int APP_UID = 123;
+    private static final int SYSTEM_UID = Process.SYSTEM_UID;
     private static final String APP_DEFAULT_PACKAGE_NAME = "com.android.test";
     private static final String APP_LABEL = "Test App Name";
     private static final String HIGH_DRAIN_PACKAGE = "com.android.test.screen";
+    private static final String ANDROID_PACKAGE = "android";
+    private static final String[] SYSTEM_PACKAGES = {HIGH_DRAIN_PACKAGE, ANDROID_PACKAGE};
 
     @Rule public MockitoRule mocks = MockitoJUnit.rule();
 
@@ -84,6 +88,18 @@
         return sipper;
     }
 
+    private BatteryEntry createBatteryEntryForSystem() {
+        return new BatteryEntry(mockContext, mockHandler, mockUserManager, createSipperForSystem());
+    }
+
+    private BatterySipper createSipperForSystem() {
+        BatterySipper sipper =
+                new BatterySipper(DrainType.APP, new FakeUid(SYSTEM_UID), 0 /* power use */);
+        sipper.packageWithHighestDrain = HIGH_DRAIN_PACKAGE;
+        sipper.mPackages = SYSTEM_PACKAGES;
+        return sipper;
+    }
+
     @Test
     public void batteryEntryForApp_shouldSetDefaultPackageNameAndLabel() throws Exception {
         BatteryEntry entry = createBatteryEntryForApp();
@@ -118,7 +134,22 @@
             new String[]{APP_DEFAULT_PACKAGE_NAME, "package2", "package3"});
 
         BatteryEntry entry = createBatteryEntryForApp();
-        
+
         assertThat(entry.getLabel()).isEqualTo(HIGH_DRAIN_PACKAGE);
     }
+
+    @Test
+    public void extractPackageFromSipper_systemSipper_returnSystemPackage() {
+        BatteryEntry entry = createBatteryEntryForSystem();
+
+        assertThat(entry.extractPackagesFromSipper(entry.sipper)).isEqualTo(
+                new String[]{ANDROID_PACKAGE});
+    }
+
+    @Test
+    public void extractPackageFromSipper_normalSipper_returnDefaultPakcage() {
+        BatteryEntry entry = createBatteryEntryForApp();
+
+        assertThat(entry.extractPackagesFromSipper(entry.sipper)).isEqualTo(entry.sipper.mPackages);
+    }
 }
