diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2714457..20f43c9 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -190,6 +190,7 @@
                 <action android:name="android.intent.action.MAIN" />
                 <action android:name="com.android.settings.SOUND_SETTINGS" />
                 <action android:name="com.android.settings.DISPLAY_SETTINGS" />
+                <action android:name="android.settings.DISPLAY_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
             </intent-filter>
diff --git a/res/drawable/app_gauge.9.png b/res/drawable/app_gauge.9.png
index f8ff669..f6c7c99 100644
--- a/res/drawable/app_gauge.9.png
+++ b/res/drawable/app_gauge.9.png
Binary files differ
diff --git a/res/layout/power_usage_detail_item_text.xml b/res/layout/power_usage_detail_item_text.xml
index 097469b..7ea2432 100644
--- a/res/layout/power_usage_detail_item_text.xml
+++ b/res/layout/power_usage_detail_item_text.xml
@@ -27,8 +27,9 @@
         android:textStyle="bold"
         android:singleLine="true"
         android:layout_alignParentLeft="true"
-        android:layout_marginBottom="2dip"
-        android:layout_marginTop="2dip" />
+        android:layout_marginBottom="4dip"
+        android:layout_marginTop="4dip"
+        android:layout_marginLeft="4dip" />
     <TextView
         android:id="@+id/value"
         android:layout_width="wrap_content"
@@ -37,7 +38,7 @@
         android:textAppearance="?android:attr/textAppearanceMedium"
         android:textStyle="normal"
         android:singleLine="true"
-        android:layout_marginBottom="2dip"
-        android:layout_marginTop="2dip"
-        android:layout_marginRight="4dip"/>
+        android:layout_marginBottom="4dip"
+        android:layout_marginTop="4dip"
+        android:layout_marginRight="10dip"/>
 </RelativeLayout>
diff --git a/res/layout/power_usage_details.xml b/res/layout/power_usage_details.xml
index 206eb05..8aa625f 100644
--- a/res/layout/power_usage_details.xml
+++ b/res/layout/power_usage_details.xml
@@ -96,6 +96,7 @@
             <TextView
                 android:id="@+id/controls_section_title"
                 style="?android:attr/listSeparatorTextViewStyle"
+                android:layout_marginTop="6dip"
                 android:text="@string/controls_subtitle" />
             
             <RelativeLayout
@@ -130,6 +131,7 @@
         <TextView
             android:id="@+id/packages_section_title"
             style="?android:attr/listSeparatorTextViewStyle"
+            android:layout_marginTop="6dip"
             android:text="@string/packages_subtitle" />
 
         <LinearLayout
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d2ca51b..c19f833 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1532,16 +1532,16 @@
     <string name="battery_history_starts">Starts: <xliff:g id="starts">%1$d</xliff:g></string>
 
     <!-- Used to show an amount of time in the form "d days, h hours, m minutes, s seconds" in BatteryHistory -->
-    <string name="battery_history_days"><xliff:g id="days">%1$d</xliff:g> d, <xliff:g id="hours">%2$d</xliff:g> h, <xliff:g id="minutes">%3$d</xliff:g> m, <xliff:g id="seconds">%4$d</xliff:g> s</string>
+    <string name="battery_history_days"><xliff:g id="days">%1$d</xliff:g>d <xliff:g id="hours">%2$d</xliff:g>h <xliff:g id="minutes">%3$d</xliff:g>m <xliff:g id="seconds">%4$d</xliff:g>s</string>
 
     <!-- Used to show an amount of time in the form "h hours, m minutes, s seconds" in BatteryHistory -->
-    <string name="battery_history_hours"><xliff:g id="hours">%1$d</xliff:g> h, <xliff:g id="minutes">%2$d</xliff:g> m, <xliff:g id="seconds">%3$d</xliff:g> s</string>
+    <string name="battery_history_hours"><xliff:g id="hours">%1$d</xliff:g>h <xliff:g id="minutes">%2$d</xliff:g>m <xliff:g id="seconds">%3$d</xliff:g>s</string>
 
     <!-- Used to show an amount of time in the form "m minutes, s seconds" in BatteryHistory -->
-    <string name="battery_history_minutes"><xliff:g id="minutes">%1$d</xliff:g> m, <xliff:g id="seconds">%2$d</xliff:g> s</string>
+    <string name="battery_history_minutes"><xliff:g id="minutes">%1$d</xliff:g>m <xliff:g id="seconds">%2$d</xliff:g>s</string>
 
     <!-- Used to show an amount of time in the form "s seconds" in BatteryHistory -->
-    <string name="battery_history_seconds"><xliff:g id="seconds">%1$d</xliff:g> s</string>
+    <string name="battery_history_seconds"><xliff:g id="seconds">%1$d</xliff:g>s</string>
 
     <!-- Used to head a list of packages that share a given user id BatteryHistory -->
     <string name="battery_history_packages_sharing_this_uid">Packages sharing this UID:</string>
@@ -1634,6 +1634,8 @@
     <string name="battery_since_unplugged">Battery usage since unplugged</string>
     <!-- Battery usage since user reset the stats -->
     <string name="battery_since_reset">Battery usage since reset</string>
+    <!-- Battery usage duration -->
+    <string name="battery_stats_duration">Usage duration - <xliff:g id="time">%1$s</xliff:g></string>
     <!-- CPU awake time title -->
     <string name="awake">Device awake time</string>
     <!-- Wifi on time -->
diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml
index 80342a8..450e438 100644
--- a/res/xml/power_usage_summary.xml
+++ b/res/xml/power_usage_summary.xml
@@ -16,5 +16,6 @@
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
         android:title="@string/battery_since_unplugged">
-
+    <PreferenceCategory
+        android:key="app_list"/>
 </PreferenceScreen>
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index 54a0b88..e36a8bc 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -51,8 +51,8 @@
     public static final int ACTION_DISPLAY_SETTINGS = 1;
     public static final int ACTION_WIFI_SETTINGS = 2;
     public static final int ACTION_BLUETOOTH_SETTINGS = 3;
-    public static final int ACTION_FORCE_STOP = 4;
-    public static final int ACTION_UNINSTALL = 5;
+    public static final int ACTION_WIRELESS_SETTINGS = 4;
+    public static final int ACTION_APP_DETAILS = 6;
 
     public static final int USAGE_SINCE_UNPLUGGED = 1;
     public static final int USAGE_SINCE_RESET = 2;
@@ -66,10 +66,6 @@
     public static final String EXTRA_DETAIL_VALUES = "values";
     public static final String EXTRA_DRAIN_TYPE = "drainType";
 
-    private static final int SECONDS_PER_MINUTE = 60;
-    private static final int SECONDS_PER_HOUR = 60 * 60;
-    private static final int SECONDS_PER_DAY = 24 * 60 * 60;
-
     private static final boolean DEBUG = true;
     private String mTitle;
     private double mPercentage;
@@ -135,10 +131,10 @@
                 switch (mTypes[i]) {
                     case R.string.usage_type_data_recv:
                     case R.string.usage_type_data_send:
-                        value = formatBytes(mValues[i]);
+                        value = Utils.formatBytes(this, mValues[i]);
                         break;
                     default:
-                        value = formatTime(mValues[i]);
+                        value = Utils.formatElapsedTime(this, mValues[i]);
                 }
                 ViewGroup item = (ViewGroup) inflater.inflate(R.layout.power_usage_detail_item_text,
                         null);
@@ -165,15 +161,12 @@
                 startActivity(new Intent(Settings.ACTION_DISPLAY_SETTINGS));
                 break;
             case ACTION_WIFI_SETTINGS:
-                startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
+                startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
                 break;
             case ACTION_BLUETOOTH_SETTINGS:
-                startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));
+                startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
                 break;
-            case ACTION_FORCE_STOP:
-                killProcesses();
-                break;
-            case ACTION_UNINSTALL:
+            case ACTION_APP_DETAILS:
                 Intent intent = new Intent(Intent.ACTION_VIEW);
                 intent.setClass(this, InstalledAppDetails.class);
                 intent.putExtra("com.android.settings.ApplicationPkgName", mPackages[0]);
@@ -199,18 +192,17 @@
         if (uid == 0 || !isSystem) { 
             switch (mDrainType) {
                 case APP:
-                    label1 = getString(R.string.battery_action_stop);
+                    //label1 = getString(R.string.battery_action_stop);
                     label2 = getString(R.string.battery_action_app_details);
-                    mAction1 = ACTION_FORCE_STOP;
-                    mAction2 = ACTION_UNINSTALL;
+                    mAction2 = ACTION_APP_DETAILS;
                     break;
                 case SCREEN:
-                    //label2 = getString(R.string.battery_action_display);
-                    //mAction2 = ACTION_DISPLAY_SETTINGS;
+                    label2 = getString(R.string.battery_action_display);
+                    mAction2 = ACTION_DISPLAY_SETTINGS;
                     break;
                 case WIFI:
                     label2 = getString(R.string.battery_action_wifi);
-                    mAction2 = ACTION_WIFI_SETTINGS;
+                    mAction2 = ACTION_WIRELESS_SETTINGS;
                     break;
                 case BLUETOOTH:
                     //label2 = getString(R.string.battery_action_bluetooth);
@@ -291,44 +283,4 @@
             }
         }
     }
-
-    private String formatTime(double millis) {
-        StringBuilder sb = new StringBuilder();
-        int seconds = (int) Math.floor(millis / 1000);
-
-        int days = 0, hours = 0, minutes = 0;
-        if (seconds > SECONDS_PER_DAY) {
-            days = seconds / SECONDS_PER_DAY;
-            seconds -= days * SECONDS_PER_DAY;
-        }
-        if (seconds > SECONDS_PER_HOUR) {
-            hours = seconds / SECONDS_PER_HOUR;
-            seconds -= hours * SECONDS_PER_HOUR;
-        }
-        if (seconds > SECONDS_PER_MINUTE) {
-            minutes = seconds / SECONDS_PER_MINUTE;
-            seconds -= minutes * SECONDS_PER_MINUTE;
-        }
-        if (days > 0) {
-            sb.append(getString(R.string.battery_history_days, days, hours, minutes, seconds));
-        } else if (hours > 0) {
-            sb.append(getString(R.string.battery_history_hours, hours, minutes, seconds));
-        } else if (minutes > 0) {
-            sb.append(getString(R.string.battery_history_minutes, minutes, seconds));
-        } else {
-            sb.append(getString(R.string.battery_history_seconds, seconds));
-        }
-        return sb.toString();
-    }
-
-    private String formatBytes(double bytes) {
-        // TODO: I18N
-        if (bytes > 1000 * 1000) {
-            return String.format("%.2f MB", ((int) (bytes / 1000)) / 1000f);
-        } else if (bytes > 1024) {
-            return String.format("%.2f KB", ((int) (bytes / 10)) / 100f);
-        } else {
-            return String.format("%d bytes", (int) bytes);
-        }
-    }
 }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 10ede87..b8919ee 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -100,7 +100,7 @@
         addPreferencesFromResource(R.xml.power_usage_summary);
         mBatteryInfo = IBatteryStats.Stub.asInterface(
                 ServiceManager.getService("batteryinfo"));
-        mAppListGroup = getPreferenceScreen();
+        mAppListGroup = (PreferenceGroup) findPreference("app_list");
         mPowerProfile = new PowerProfile(this);
     }
 
@@ -108,7 +108,7 @@
     protected void onResume() {
         super.onResume();
         mAbort = false;
-        updateAppsList();
+        refreshStats();
     }
 
     @Override
@@ -207,18 +207,18 @@
                 } else {
                     mStatsType = BatteryStats.STATS_TOTAL;
                 }
-                updateAppsList();
+                refreshStats();
                 return true;
             case MENU_STATS_REFRESH:
                 mStats = null;
-                updateAppsList();
+                refreshStats();
                 return true;
             default:
                 return false;
         }
     }
 
-    private void updateAppsList() {
+    private void refreshStats() {
         if (mStats == null) {
             load();
         }
@@ -263,12 +263,19 @@
         }
     }
 
+    private void updateStatsPeriod(long duration) {
+        String durationString = Utils.formatElapsedTime(this, duration / 1000);
+        String label = getString(R.string.battery_stats_duration, durationString);
+        mAppListGroup.setTitle(label);
+    }
+
     private void processAppUsage() {
         SensorManager sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
         final int which = mStatsType;
         final double powerCpuNormal = mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_NORMAL);
         final double averageCostPerByte = getAverageDataCost();
-        long uSecTime = mStats.computeBatteryRealtime(SystemClock.elapsedRealtime(), which) * 1000;
+        long uSecTime = mStats.computeBatteryRealtime(SystemClock.elapsedRealtime() * 1000, which);
+        updateStatsPeriod(uSecTime);
         SparseArray<? extends Uid> uidStats = mStats.getUidStats();
         final int NU = uidStats.size();
         for (int iu = 0; iu < NU; iu++) {
diff --git a/src/com/android/settings/fuelgauge/Utils.java b/src/com/android/settings/fuelgauge/Utils.java
new file mode 100644
index 0000000..2ffc9de
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/Utils.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2009 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.fuelgauge;
+
+import android.content.Context;
+
+import com.android.settings.R;
+
+/**
+ * Contains utility functions for formatting elapsed time and consumed bytes
+ */
+public class Utils {
+    private static final int SECONDS_PER_MINUTE = 60;
+    private static final int SECONDS_PER_HOUR = 60 * 60;
+    private static final int SECONDS_PER_DAY = 24 * 60 * 60;
+
+    /**
+     * Returns elapsed time for the given millis, in the following format:
+     * 2d 5h 40m 29s
+     * @param context the application context
+     * @param millis the elapsed time in milli seconds
+     * @return the formatted elapsed time
+     */
+    public static String formatElapsedTime(Context context, double millis) {
+        StringBuilder sb = new StringBuilder();
+        int seconds = (int) Math.floor(millis / 1000);
+
+        int days = 0, hours = 0, minutes = 0;
+        if (seconds > SECONDS_PER_DAY) {
+            days = seconds / SECONDS_PER_DAY;
+            seconds -= days * SECONDS_PER_DAY;
+        }
+        if (seconds > SECONDS_PER_HOUR) {
+            hours = seconds / SECONDS_PER_HOUR;
+            seconds -= hours * SECONDS_PER_HOUR;
+        }
+        if (seconds > SECONDS_PER_MINUTE) {
+            minutes = seconds / SECONDS_PER_MINUTE;
+            seconds -= minutes * SECONDS_PER_MINUTE;
+        }
+        if (days > 0) {
+            sb.append(context.getString(R.string.battery_history_days,
+                    days, hours, minutes, seconds));
+        } else if (hours > 0) {
+            sb.append(context.getString(R.string.battery_history_hours, hours, minutes, seconds));
+        } else if (minutes > 0) {
+            sb.append(context.getString(R.string.battery_history_minutes, minutes, seconds));
+        } else {
+            sb.append(context.getString(R.string.battery_history_seconds, seconds));
+        }
+        return sb.toString();
+    }
+
+    /**
+     * Formats data size in KB, MB, from the given bytes.
+     * @param context the application context
+     * @param bytes data size in bytes
+     * @return the formatted size such as 4.52 MB or 245 KB or 332 bytes
+     */
+    public static String formatBytes(Context context, double bytes) {
+        // TODO: I18N
+        if (bytes > 1000 * 1000) {
+            return String.format("%.2f MB", ((int) (bytes / 1000)) / 1000f);
+        } else if (bytes > 1024) {
+            return String.format("%.2f KB", ((int) (bytes / 10)) / 100f);
+        } else {
+            return String.format("%d bytes", (int) bytes);
+        }
+    }
+}
