diff --git a/src/com/android/settings/applications/ProcStatsData.java b/src/com/android/settings/applications/ProcStatsData.java
index efdf158..0cd80e7 100644
--- a/src/com/android/settings/applications/ProcStatsData.java
+++ b/src/com/android/settings/applications/ProcStatsData.java
@@ -201,17 +201,21 @@
         for (int i = pkgEntries.size() - 1; i >= 0 && totalTime > 0; i--) {
             ProcStatsPackageEntry entry = pkgEntries.get(i);
             long pkgRunTime = 0;
+            long maxRunTime = 0;
             for (int j = entry.mEntries.size() - 1; j >= 0; j--) {
                 ProcStatsEntry proc = entry.mEntries.get(j);
                 pkgRunTime += proc.mRunDuration;
+                if (proc.mRunDuration > maxRunTime) {
+                    maxRunTime = proc.mRunDuration;
+                }
             }
             long pkgZRam = (zramMem*pkgRunTime)/totalTime;
             if (pkgZRam > 0) {
                 zramMem -= pkgZRam;
                 totalTime -= pkgRunTime;
                 ProcStatsEntry procEntry = new ProcStatsEntry(entry.mPackage, 0,
-                        mContext.getString(R.string.process_stats_os_zram), memTotalTime,
-                        pkgZRam);
+                        mContext.getString(R.string.process_stats_os_zram), maxRunTime,
+                        pkgZRam, memTotalTime);
                 procEntry.evaluateTargetPackage(mPm, mStats, null, null, sEntryCompare, mUseUss);
                 entry.addEntry(procEntry);
             }
@@ -226,14 +230,14 @@
         if (totalMem.sysMemNativeWeight > 0) {
             osEntry = new ProcStatsEntry(Utils.OS_PKG, 0,
                     mContext.getString(R.string.process_stats_os_native), memTotalTime,
-                    (long) (totalMem.sysMemNativeWeight / memTotalTime));
+                    (long) (totalMem.sysMemNativeWeight / memTotalTime), memTotalTime);
             osEntry.evaluateTargetPackage(mPm, mStats, bgTotals, runTotals, sEntryCompare, mUseUss);
             osPkg.addEntry(osEntry);
         }
         if (totalMem.sysMemKernelWeight > 0) {
             osEntry = new ProcStatsEntry(Utils.OS_PKG, 0,
                     mContext.getString(R.string.process_stats_os_kernel), memTotalTime,
-                    (long) (totalMem.sysMemKernelWeight / memTotalTime));
+                    (long) (totalMem.sysMemKernelWeight / memTotalTime), memTotalTime);
             osEntry.evaluateTargetPackage(mPm, mStats, bgTotals, runTotals, sEntryCompare, mUseUss);
             osPkg.addEntry(osEntry);
         }
@@ -249,7 +253,7 @@
         if (baseCacheRam > 0) {
             osEntry = new ProcStatsEntry(Utils.OS_PKG, 0,
                     mContext.getString(R.string.process_stats_os_cache), memTotalTime,
-                    baseCacheRam / 1024);
+                    baseCacheRam / 1024, memTotalTime);
             osEntry.evaluateTargetPackage(mPm, mStats, bgTotals, runTotals, sEntryCompare, mUseUss);
             osPkg.addEntry(osEntry);
         }
diff --git a/src/com/android/settings/applications/ProcStatsEntry.java b/src/com/android/settings/applications/ProcStatsEntry.java
index 637003c..97a73c4 100644
--- a/src/com/android/settings/applications/ProcStatsEntry.java
+++ b/src/com/android/settings/applications/ProcStatsEntry.java
@@ -72,13 +72,14 @@
                 + " avgpss=" + mAvgBgMem + " weight=" + mBgWeight);
     }
 
-    public ProcStatsEntry(String pkgName, int uid, String procName, long duration, long mem) {
+    public ProcStatsEntry(String pkgName, int uid, String procName, long duration, long mem,
+            long memDuration) {
         mPackage = pkgName;
         mUid = uid;
         mName = procName;
         mBgDuration = mRunDuration = duration;
         mAvgBgMem = mMaxBgMem = mAvgRunMem = mMaxRunMem = mem;
-        mBgWeight = mRunWeight = ((double)duration) * mem;
+        mBgWeight = mRunWeight = ((double)memDuration) * mem;
         if (DEBUG) Log.d(TAG, "New proc entry " + procName + ": dur=" + mBgDuration
                 + " avgpss=" + mAvgBgMem + " weight=" + mBgWeight);
     }
