diff --git a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
index 9b070f9..d948cc0 100644
--- a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
+++ b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.fuelgauge;
 
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_UNRESTRICTED;
-
 import android.Manifest;
 import android.content.DialogInterface;
 import android.content.pm.ApplicationInfo;
@@ -26,20 +24,20 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.PowerManager;
-import android.text.TextUtils;
+import android.os.PowerWhitelistManager;
 import android.util.Log;
 
 import com.android.internal.app.AlertActivity;
 import com.android.internal.app.AlertController;
 import com.android.settings.R;
-import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
 
 public class RequestIgnoreBatteryOptimizations extends AlertActivity
         implements DialogInterface.OnClickListener {
     private static final String TAG = "RequestIgnoreBatteryOptimizations";
     private static final boolean DEBUG = false;
 
-    private ApplicationInfo mApplicationInfo;
+    private PowerWhitelistManager mPowerWhitelistManager;
+    private String mPackageName;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -49,6 +47,8 @@
                         android.view.WindowManager.LayoutParams
                                 .SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
 
+        mPowerWhitelistManager = getSystemService(PowerWhitelistManager.class);
+
         Uri data = getIntent().getData();
         if (data == null) {
             debugLog(
@@ -56,18 +56,17 @@
             finish();
             return;
         }
-        final String packageName = data.getSchemeSpecificPart();
-        if (TextUtils.isEmpty(packageName)) {
+        mPackageName = data.getSchemeSpecificPart();
+        if (mPackageName == null) {
             debugLog(
                     "No data supplied for IGNORE_BATTERY_OPTIMIZATION_SETTINGS in: " + getIntent());
             finish();
             return;
         }
 
-        // Package in Unrestricted mode already ignoring the battery optimizations.
         PowerManager power = getSystemService(PowerManager.class);
-        if (power.isIgnoringBatteryOptimizations(packageName)) {
-            debugLog("Not should prompt, already ignoring optimizations: " + packageName);
+        if (power.isIgnoringBatteryOptimizations(mPackageName)) {
+            debugLog("Not should prompt, already ignoring optimizations: " + mPackageName);
             finish();
             return;
         }
@@ -75,28 +74,29 @@
         if (getPackageManager()
                         .checkPermission(
                                 Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
-                                packageName)
+                                mPackageName)
                 != PackageManager.PERMISSION_GRANTED) {
             debugLog(
                     "Requested package "
-                            + packageName
+                            + mPackageName
                             + " does not hold permission "
                             + Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
             finish();
             return;
         }
 
+        ApplicationInfo ai;
         try {
-            mApplicationInfo = getPackageManager().getApplicationInfo(packageName, 0);
+            ai = getPackageManager().getApplicationInfo(mPackageName, 0);
         } catch (PackageManager.NameNotFoundException e) {
-            debugLog("Requested package doesn't exist: " + packageName);
+            debugLog("Requested package doesn't exist: " + mPackageName);
             finish();
             return;
         }
 
         final AlertController.AlertParams p = mAlertParams;
         final CharSequence appLabel =
-                mApplicationInfo.loadSafeLabel(
+                ai.loadSafeLabel(
                         getPackageManager(),
                         PackageItemInfo.DEFAULT_MAX_LABEL_SIZE_PX,
                         PackageItemInfo.SAFE_LABEL_FLAG_TRIM
@@ -114,12 +114,7 @@
     public void onClick(DialogInterface dialog, int which) {
         switch (which) {
             case BUTTON_POSITIVE:
-                BatteryOptimizeUtils batteryOptimizeUtils =
-                        new BatteryOptimizeUtils(
-                                getApplicationContext(),
-                                mApplicationInfo.uid,
-                                mApplicationInfo.packageName);
-                batteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED, Action.APPLY);
+                mPowerWhitelistManager.addToWhitelist(mPackageName);
                 break;
             case BUTTON_NEGATIVE:
                 break;
