diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java
index 012c574..5e0f4eb 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -54,7 +54,6 @@
     protected boolean mAppControlRestricted = false;
 
     protected ApplicationsState mState;
-    private ApplicationsState.Session mSession;
     protected ApplicationsState.AppEntry mAppEntry;
     protected PackageInfo mPackageInfo;
     protected int mUserId;
@@ -76,7 +75,6 @@
         mFinishing = false;
 
         mState = ApplicationsState.getInstance(getActivity().getApplication());
-        mSession = mState.newSession(this);
         Context context = getActivity();
         mDpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
@@ -84,9 +82,6 @@
         IBinder b = ServiceManager.getService(Context.USB_SERVICE);
         mUsbManager = IUsbManager.Stub.asInterface(b);
 
-        // Need to make sure we have loaded applications at this point.
-        mSession.resume();
-
         retrieveAppEntry();
     }
 
@@ -94,25 +89,12 @@
     public void onResume() {
         super.onResume();
         mAppControlRestricted = mUserManager.hasUserRestriction(UserManager.DISALLOW_APPS_CONTROL);
-        mSession.resume();
 
         if (!refreshUi()) {
             setIntentAndFinish(true, true);
         }
     }
 
-    @Override
-    public void onPause() {
-        super.onPause();
-        mSession.pause();
-    }
-
-    @Override
-    public void onDestroyView() {
-        super.onDestroyView();
-        mSession.release();
-    }
-
     protected String retrieveAppEntry() {
         final Bundle args = getArguments();
         mPackageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null;
diff --git a/src/com/android/settings/applications/ApplicationsState.java b/src/com/android/settings/applications/ApplicationsState.java
index 01355d9..055e415 100644
--- a/src/com/android/settings/applications/ApplicationsState.java
+++ b/src/com/android/settings/applications/ApplicationsState.java
@@ -878,20 +878,33 @@
         synchronized (mEntriesMap) {
             AppEntry entry = mEntriesMap.get(userId).get(packageName);
             if (entry == null) {
-                for (int i=0; i<mApplications.size(); i++) {
-                    ApplicationInfo info = mApplications.get(i);
-                    if (packageName.equals(info.packageName)
-                            && userId == UserHandle.getUserId(info.uid)) {
-                        entry = getEntryLocked(info);
-                        break;
+                ApplicationInfo info = getAppInfoLocked(packageName, userId);
+                if (info == null) {
+                    try {
+                        info = mIpm.getApplicationInfo(packageName, 0, userId);
+                    } catch (RemoteException e) {
+                        Log.w(TAG, "getEntry couldn't reach PackageManager", e);
+                        return null;
                     }
                 }
+                entry = getEntryLocked(info);
             }
             if (DEBUG_LOCKING) Log.v(TAG, "...getEntry releasing lock");
             return entry;
         }
     }
 
+    private ApplicationInfo getAppInfoLocked(String pkg, int userId) {
+        for (int i = 0; i < mApplications.size(); i++) {
+            ApplicationInfo info = mApplications.get(i);
+            if (pkg.equals(info.packageName)
+                    && userId == UserHandle.getUserId(info.uid)) {
+                return info;
+            }
+        }
+        return null;
+    }
+
     void ensureIcon(AppEntry entry) {
         if (entry.icon != null) {
             return;
@@ -1153,8 +1166,8 @@
                             mMainHandler.sendMessage(msg);
                         }
                     }
-                    if (mCurComputingSizePkg == null
-                            || (mCurComputingSizePkg.equals(stats.packageName)
+                    if (mCurComputingSizePkg != null
+                            && (mCurComputingSizePkg.equals(stats.packageName)
                                     && mCurComputingSizeUserId == stats.userHandle)) {
                         mCurComputingSizePkg = null;
                         sendEmptyMessage(MSG_LOAD_SIZES);
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 73f9c7d..9268309 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -251,6 +251,7 @@
         if (mFinishing) {
             return;
         }
+        mState.requestSize(mPackageName, mUserId);
         AppItem app = new AppItem(mAppEntry.info.uid);
         app.addUid(mAppEntry.info.uid);
         if (mStatsSession != null) {
