diff --git a/res/xml/app_storage_settings.xml b/res/xml/app_storage_settings.xml
index 1c71bfa..b96afbf 100644
--- a/res/xml/app_storage_settings.xml
+++ b/res/xml/app_storage_settings.xml
@@ -41,7 +41,6 @@
 
     <PreferenceCategory
         android:key="storage_category"
-        android:layout="@layout/tall_preference_category"
         android:title="@string/app_info_storage_title"
         settings:allowDividerAbove="false"
         settings:allowDividerBelow="false">
diff --git a/res/xml/installed_app_details.xml b/res/xml/installed_app_details.xml
index 865f41f..df7027c 100644
--- a/res/xml/installed_app_details.xml
+++ b/res/xml/installed_app_details.xml
@@ -45,9 +45,9 @@
     <com.android.settings.widget.FixedLineSummaryPreference
         android:key="permission_settings"
         android:title="@string/permissions_label"
-        android:summary="@string/summary_two_lines_placeholder"
+        android:summary="@string/summary_placeholder"
         android:selectable="true"
-        app:summaryLineCount="2" />
+        app:summaryLineCount="1" />
 
     <Preference
         android:key="storage_settings"
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index 5eada88..b0f2f84 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -46,6 +46,7 @@
     public String statusLabel;
     private boolean mCharging;
     private BatteryStats mStats;
+    private static final String LOG_TAG = "BatteryInfo";
     private long timePeriod;
 
     public interface Callback {
@@ -132,6 +133,7 @@
         new AsyncTask<Void, Void, BatteryInfo>() {
             @Override
             protected BatteryInfo doInBackground(Void... params) {
+                final long startTime = System.currentTimeMillis();
                 PowerUsageFeatureProvider provider =
                         FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
                 final BatteryUtils batteryUtils = BatteryUtils.getInstance(context);
@@ -144,17 +146,19 @@
                 // 0 means we are discharging, anything else means charging
                 boolean discharging =
                         batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) == 0;
+
                 if (discharging && provider != null
                         && provider.isEnhancedBatteryPredictionEnabled(context)) {
+                    final long prediction = provider.getEnhancedBatteryPrediction(context);
+                    BatteryUtils.logRuntime(LOG_TAG, "time for enhanced BatteryInfo", startTime);
                     return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
-                            elapsedRealtimeUs, shortString,
-                            utils.convertMsToUs(provider.getEnhancedBatteryPrediction(context)),
-                            true);
+                            elapsedRealtimeUs, shortString, utils.convertMsToUs(prediction), true);
                 } else {
+                    long prediction = discharging
+                            ? stats.computeBatteryTimeRemaining(elapsedRealtimeUs) : 0;
+                    BatteryUtils.logRuntime(LOG_TAG, "time for regular BatteryInfo", startTime);
                     return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
-                            elapsedRealtimeUs, shortString,
-                            discharging ? stats.computeBatteryTimeRemaining(elapsedRealtimeUs) : 0,
-                            false);
+                            elapsedRealtimeUs, shortString, prediction, false);
                 }
             }
 
@@ -176,6 +180,7 @@
     public static BatteryInfo getBatteryInfo(Context context, Intent batteryBroadcast,
             BatteryStats stats, long elapsedRealtimeUs, boolean shortString, long drainTimeUs,
             boolean basedOnUsage) {
+        final long startTime = System.currentTimeMillis();
         BatteryInfo info = new BatteryInfo();
         info.mStats = stats;
         info.batteryLevel = Utils.getBatteryLevel(batteryBroadcast);
@@ -232,6 +237,7 @@
                                 chargeStatusLabel);
             }
         }
+        BatteryUtils.logRuntime(LOG_TAG, "time for getBatteryInfo", startTime);
         return info;
     }
 
diff --git a/src/com/android/settings/fuelgauge/BatteryInfoLoader.java b/src/com/android/settings/fuelgauge/BatteryInfoLoader.java
index e85acc5..efaca30 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfoLoader.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfoLoader.java
@@ -33,7 +33,9 @@
  * when not available.
  */
 public class BatteryInfoLoader extends AsyncLoader<BatteryInfo>{
+
     BatteryStatsHelper mStatsHelper;
+    private static final String LOG_TAG = "BatteryInfoLoader";
 
     public BatteryInfoLoader(Context context, BatteryStatsHelper batteryStatsHelper) {
         super(context);
@@ -47,6 +49,7 @@
 
     @Override
     public BatteryInfo loadInBackground() {
+        final long startTime = System.currentTimeMillis();
         Context context = getContext();
         PowerUsageFeatureProvider powerUsageFeatureProvider =
                 FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
@@ -67,19 +70,20 @@
             final Uri queryUri = powerUsageFeatureProvider.getEnhancedBatteryPredictionUri();
             cursor = context.getContentResolver().query(queryUri, null, null, null, null);
         }
+        BatteryStats stats = mStatsHelper.getStats();
+        batteryUtils.logRuntime(LOG_TAG, "BatteryInfoLoader post query", startTime);
         if (cursor != null && cursor.moveToFirst()) {
             long enhancedEstimate = powerUsageFeatureProvider.getTimeRemainingEstimate(cursor);
-            batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast,
-                    mStatsHelper.getStats(), elapsedRealtimeUs, false /* shortString */,
+            batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
+                    elapsedRealtimeUs, false /* shortString */,
                     batteryUtils.convertMsToUs(enhancedEstimate), true /* basedOnUsage */);
         } else {
-            BatteryStats stats = mStatsHelper.getStats();
             batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
                     elapsedRealtimeUs, false /* shortString */,
                     discharging ? 0 : stats.computeBatteryTimeRemaining(elapsedRealtimeUs),
                     false /* basedOnUsage */);
         }
-
+        batteryUtils.logRuntime(LOG_TAG, "BatteryInfoLoader.loadInBackground", startTime);
         return batteryInfo;
     }
 }
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 7dc7800..b8646f7 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -285,6 +285,10 @@
 
     }
 
+    public static void logRuntime(String tag, String message, long startTime) {
+        Log.d(tag, message + ": " + (System.currentTimeMillis() - startTime) + "ms");
+    }
+
     /**
      * Find package uid from package name
      *
diff --git a/src/com/android/settings/gestures/AssistGesturePreferenceController.java b/src/com/android/settings/gestures/AssistGesturePreferenceController.java
index 8bf660b..ede20c2 100644
--- a/src/com/android/settings/gestures/AssistGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/AssistGesturePreferenceController.java
@@ -67,6 +67,7 @@
         mPreference = screen.findPreference(getPreferenceKey());
         if (!mFeatureProvider.isSupported(mContext)) {
             mScreen.removePreference(mPreference);
+            removePreference(mScreen, getPreferenceKey());
             return;
         }
         // Call super last or AbstractPreferenceController might remove the preference from the
