diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index bf41c80..130e29d 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -158,6 +158,11 @@
         unregisterObserverIfNeeded();
     }
 
+    public void showLoadingWhenEmpty() {
+        View loading = getView().findViewById(R.id.loading_container);
+        getListView().setEmptyView(loading);
+    }
+
     public void registerObserverIfNeeded() {
         if (!mIsDataSetObserverRegistered) {
             if (mCurrentRootAdapter != null) {
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 23b2c85..dc4b484 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -39,8 +39,8 @@
 import android.content.pm.Signature;
 import android.content.pm.UserInfo;
 import android.content.res.Resources;
-import android.content.res.TypedArray;
 import android.content.res.Resources.NotFoundException;
+import android.content.res.TypedArray;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -74,6 +74,9 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.Animation.AnimationListener;
+import android.view.animation.AnimationUtils;
 import android.widget.ListView;
 import android.widget.TabWidget;
 
@@ -1158,4 +1161,39 @@
                 ? R.string.launch_defaults_some
                 : R.string.launch_defaults_none);
     }
+
+    public static void handleLoadingContainer(View loading, View doneLoading, boolean done,
+            boolean animate) {
+        setViewShown(loading, !done, animate);
+        setViewShown(doneLoading, done, animate);
+    }
+
+    private static void setViewShown(final View view, boolean shown, boolean animate) {
+        if (animate) {
+            Animation animation = AnimationUtils.loadAnimation(view.getContext(),
+                    shown ? android.R.anim.fade_in : android.R.anim.fade_out);
+            if (shown) {
+                view.setVisibility(View.VISIBLE);
+            } else {
+                animation.setAnimationListener(new AnimationListener() {
+                    @Override
+                    public void onAnimationStart(Animation animation) {
+                    }
+
+                    @Override
+                    public void onAnimationRepeat(Animation animation) {
+                    }
+
+                    @Override
+                    public void onAnimationEnd(Animation animation) {
+                        view.setVisibility(View.INVISIBLE);
+                    }
+                });
+            }
+            view.startAnimation(animation);
+        } else {
+            view.clearAnimation();
+            view.setVisibility(shown ? View.VISIBLE : View.INVISIBLE);
+        }
+    }
 }
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index b0b35ab..4acbedb 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -358,6 +358,7 @@
         updateOptionsMenu();
         if (mApplications != null) {
             mApplications.resume(mSortOrder);
+            mApplications.updateLoading();
         }
     }
 
@@ -746,17 +747,20 @@
             }
             notifyDataSetChanged();
 
-            if (entries == null) {
-                mManageApplications.mListContainer.setVisibility(View.INVISIBLE);
-                mManageApplications.mLoadingContainer.setVisibility(View.VISIBLE);
-            } else {
-                mManageApplications.mListContainer.setVisibility(View.VISIBLE);
-                mManageApplications.mLoadingContainer.setVisibility(View.GONE);
+            if (mEntries.size() != 0
+                    && mManageApplications.mListContainer.getVisibility() != View.VISIBLE) {
+                Utils.handleLoadingContainer(mManageApplications.mLoadingContainer,
+                        mManageApplications.mListContainer, true, true);
             }
 
             mManageApplications.setHasDisabled(hasDisabledApps());
         }
 
+        private void updateLoading() {
+            Utils.handleLoadingContainer(mManageApplications.mLoadingContainer,
+                    mManageApplications.mListContainer, mEntries.size() != 0, false);
+        }
+
         private boolean hasDisabledApps() {
             ArrayList<AppEntry> allApps = mSession.getAllApps();
             for (int i = 0; i < allApps.size(); i++) {
diff --git a/src/com/android/settings/applications/ManagePermissions.java b/src/com/android/settings/applications/ManagePermissions.java
index 8fb3e62..a6d29c5 100644
--- a/src/com/android/settings/applications/ManagePermissions.java
+++ b/src/com/android/settings/applications/ManagePermissions.java
@@ -36,7 +36,6 @@
 
     private static final String TAG = "ManagePermissions";
 
-    private boolean mLoadComplete;
     private PermissionsInfo mPermissionsInfo;
 
     @Override
@@ -46,6 +45,13 @@
         mPermissionsInfo = new PermissionsInfo(getActivity(), this);
     }
 
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+
+        showLoadingWhenEmpty();
+    }
+
     private void refreshUi() {
         PreferenceScreen screen = getPreferenceScreen();
         if (screen == null) {
diff --git a/src/com/android/settings/applications/RunningServices.java b/src/com/android/settings/applications/RunningServices.java
index a4cd4a7..1841f13 100644
--- a/src/com/android/settings/applications/RunningServices.java
+++ b/src/com/android/settings/applications/RunningServices.java
@@ -23,9 +23,9 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.animation.AnimationUtils;
 
 import com.android.settings.R;
+import com.android.settings.Utils;
 
 public class RunningServices extends Fragment {
 
@@ -69,12 +69,7 @@
     public void onResume() {
         super.onResume();
         boolean haveData = mRunningProcessesView.doResume(this, mRunningProcessesAvail);
-        if (haveData) {
-            mRunningProcessesView.setVisibility(View.VISIBLE);
-            mLoadingContainer.setVisibility(View.INVISIBLE);
-        } else {
-            mLoadingContainer.setVisibility(View.VISIBLE);
-        }
+        Utils.handleLoadingContainer(mLoadingContainer, mRunningProcessesView, haveData, false);
     }
 
     @Override
@@ -110,19 +105,10 @@
         mOptionsMenu.findItem(SHOW_BACKGROUND_PROCESSES).setVisible(!showingBackground);
     }
 
-    private void handleRunningProcessesAvail() {
-        mLoadingContainer.startAnimation(AnimationUtils.loadAnimation(getActivity(),
-                android.R.anim.fade_out));
-        mRunningProcessesView.startAnimation(AnimationUtils.loadAnimation(getActivity(),
-                android.R.anim.fade_in));
-        mRunningProcessesView.setVisibility(View.VISIBLE);
-        mLoadingContainer.setVisibility(View.GONE);
-    }
-
     private final Runnable mRunningProcessesAvail = new Runnable() {
         @Override
         public void run() {
-            handleRunningProcessesAvail();
+            Utils.handleLoadingContainer(mLoadingContainer, mRunningProcessesView, true, true);
         }
     };
 
