diff --git a/res/layout/manage_applications.xml b/res/layout/manage_applications.xml
index c398f5e..758e476 100755
--- a/res/layout/manage_applications.xml
+++ b/res/layout/manage_applications.xml
@@ -38,4 +38,23 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
 
+    <LinearLayout android:id="@+id/loading_container"
+            android:orientation="vertical"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:visibility="gone"
+            android:gravity="center">
+
+        <ProgressBar style="?android:attr/progressBarStyleLarge"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content" />
+        <TextView android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textAppearance="?android:attr/textAppearanceSmall"
+                android:text="@string/settings_safetylegal_activity_loading"
+                android:paddingTop="4dip"
+                android:singleLine="true" />
+
+    </LinearLayout>
+
 </FrameLayout>
\ No newline at end of file
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index fd689c5..772e48d 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -33,6 +33,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
+import android.view.animation.AnimationUtils;
 import android.widget.AbsListView;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
@@ -92,6 +93,8 @@
     
     private String mCurrentPkgName;
     
+    private View mLoadingContainer;
+
     private View mListContainer;
 
     // ListView used to display list
@@ -107,6 +110,12 @@
     private boolean mActivityResumed;
     private Object mNonConfigInstance;
     
+    final Runnable mRunningProcessesAvail = new Runnable() {
+        public void run() {
+            handleRunningProcessesAvail();
+        }
+    };
+
     // View Holder used when displaying views
     static class AppViewHolder {
         ApplicationsState.AppEntry entry;
@@ -405,6 +414,7 @@
         // initialize the inflater
         mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         mRootView = mInflater.inflate(R.layout.manage_applications, null);
+        mLoadingContainer = mRootView.findViewById(R.id.loading_container);
         mListContainer = mRootView.findViewById(R.id.list_container);
         // Create adapter and list view here
         ListView lv = (ListView) mListContainer.findViewById(android.R.id.list);
@@ -561,19 +571,35 @@
                 mRunningProcessesView.doCreate(null, mNonConfigInstance);
                 mCreatedRunning = true;
             }
+            boolean haveData = true;
             if (mActivityResumed && !mResumedRunning) {
-                mRunningProcessesView.doResume();
+                haveData = mRunningProcessesView.doResume(mRunningProcessesAvail);
                 mResumedRunning = true;
             }
             mApplicationsAdapter.pause();
             if (mCurView != which) {
-                mRunningProcessesView.setVisibility(View.VISIBLE);
+                if (haveData) {
+                    mRunningProcessesView.setVisibility(View.VISIBLE);
+                } else {
+                    mLoadingContainer.setVisibility(View.VISIBLE);
+                }
                 mListContainer.setVisibility(View.GONE);
             }
         }
         mCurView = which;
     }
 
+    void handleRunningProcessesAvail() {
+        if (mCurView == VIEW_RUNNING) {
+            mLoadingContainer.startAnimation(AnimationUtils.loadAnimation(
+                    this, android.R.anim.fade_out));
+            mRunningProcessesView.startAnimation(AnimationUtils.loadAnimation(
+                    this, android.R.anim.fade_in));
+            mRunningProcessesView.setVisibility(View.VISIBLE);
+            mLoadingContainer.setVisibility(View.GONE);
+        }
+    }
+
     public void showCurrentTab() {
         String tabId = getTabHost().getCurrentTabTag();
         int newOption;
diff --git a/src/com/android/settings/applications/RunningProcessesView.java b/src/com/android/settings/applications/RunningProcessesView.java
index f2d8e9e..1de67f7 100644
--- a/src/com/android/settings/applications/RunningProcessesView.java
+++ b/src/com/android/settings/applications/RunningProcessesView.java
@@ -64,6 +64,8 @@
     
     RunningState mState;
     
+    Runnable mDataAvail;
+
     StringBuilder mBuilder = new StringBuilder(128);
     
     RunningState.BaseItem mCurSelected;
@@ -390,6 +392,11 @@
             adapter.notifyDataSetChanged();
         }
         
+        if (mDataAvail != null) {
+            mDataAvail.run();
+            mDataAvail = null;
+        }
+
         // This is the amount of available memory until we start killing
         // background services.
         long availMem = readAvailMem() - SECONDARY_SERVER_MEM;
@@ -475,15 +482,19 @@
     
     public void doPause() {
         mState.pause();
+        mDataAvail = null;
     }
 
-    public void doResume() {
+    public boolean doResume(Runnable dataAvail) {
         mState.resume(this);
         if (mState.hasData()) {
             // If the state already has its data, then let's populate our
             // list right now to avoid flicker.
             refreshUi(true);
+            return true;
         }
+        mDataAvail = dataAvail;
+        return false;
     }
 
     public Object doRetainNonConfigurationInstance() {
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 3ff7080..5d4c1b9 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -392,16 +392,12 @@
             for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> wakelockEntry
                     : wakelockStats.entrySet()) {
                 Uid.Wakelock wakelock = wakelockEntry.getValue();
-                BatteryStats.Timer timer = wakelock.getWakeTime(BatteryStats.WAKE_TYPE_FULL);
+                // Only care about partial wake locks since full wake locks
+                // are canceled when the user turns the screen off.
+                BatteryStats.Timer timer = wakelock.getWakeTime(BatteryStats.WAKE_TYPE_PARTIAL);
                 if (timer != null) {
                     wakelockTime += timer.getTotalTimeLocked(uSecTime, which);
                 }
-                timer = wakelock.getWakeTime(BatteryStats.WAKE_TYPE_PARTIAL);
-                if (timer != null) {
-                    wakelockTime += timer.getTotalTimeLocked(uSecTime, which);
-                }
-                // Note: not considering window, since that is just the system
-                // keeping the screen on while the app is running.
             }
             wakelockTime /= 1000; // convert to millis
 
