diff --git a/src/com/android/launcher3/MemoryDumpActivity.java b/src/com/android/launcher3/MemoryDumpActivity.java
index 447f0dd..d79be80 100644
--- a/src/com/android/launcher3/MemoryDumpActivity.java
+++ b/src/com/android/launcher3/MemoryDumpActivity.java
@@ -28,6 +28,7 @@
 
 import java.io.*;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
@@ -85,7 +86,9 @@
         final ArrayList<String> paths = new ArrayList<String>();
         final int myPid = android.os.Process.myPid();
 
-        for (int pid : tracker.getTrackedProcesses()) {
+        final int[] pids_orig = tracker.getTrackedProcesses();
+        final int[] pids_copy = Arrays.copyOf(pids_orig, pids_orig.length);
+        for (int pid : pids_copy) {
             MemoryTracker.ProcessMemInfo info = tracker.getMemInfo(pid);
             if (info != null) {
                 body.append("pid ").append(pid).append(":")
diff --git a/src/com/android/launcher3/MemoryTracker.java b/src/com/android/launcher3/MemoryTracker.java
index 87a73f3..d3bb77c 100644
--- a/src/com/android/launcher3/MemoryTracker.java
+++ b/src/com/android/launcher3/MemoryTracker.java
@@ -26,6 +26,7 @@
 import android.util.LongSparseArray;
 
 import java.util.ArrayList;
+import java.util.List;
 
 public class MemoryTracker extends Service {
     public static final String TAG = MemoryTracker.class.getSimpleName();
@@ -47,10 +48,10 @@
             //= new Meminfo[(int) (30 * 60 / (UPDATE_RATE / 1000))]; // 30 minutes
         public long max = 1;
         public int head = 0;
-        public ProcessMemInfo(int pid, String name) {
+        public ProcessMemInfo(int pid, String name, long start) {
             this.pid = pid;
             this.name = name;
-            this.startTime = System.currentTimeMillis();
+            this.startTime = start;
         }
         public long getUptime() {
             return System.currentTimeMillis() - startTime;
@@ -99,7 +100,7 @@
         return mPidsArray;
     }
 
-    public void startTrackingProcess(int pid, String name) {
+    public void startTrackingProcess(int pid, String name, long start) {
         synchronized (mLock) {
             final Long lpid = new Long(pid);
 
@@ -114,7 +115,7 @@
                 mPidsArray[i] = p;
                 sb.append(p); sb.append(" ");
             }
-            mData.put(pid, new ProcessMemInfo(pid, name));
+            mData.put(pid, new ProcessMemInfo(pid, name, start));
             Log.v(TAG, sb.toString());
         }
     }
@@ -149,6 +150,22 @@
     @Override
     public void onCreate() {
         mAm = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
+
+        // catch up in case we crashed but other processes are still running
+        List<ActivityManager.RunningServiceInfo> svcs = mAm.getRunningServices(256);
+        for (ActivityManager.RunningServiceInfo svc : svcs) {
+            if (svc.service.getPackageName().equals(getPackageName())) {
+                startTrackingProcess(svc.pid, svc.process, System.currentTimeMillis() - (SystemClock.elapsedRealtime() - svc.activeSince));
+            }
+        }
+
+        List<ActivityManager.RunningAppProcessInfo> procs = mAm.getRunningAppProcesses();
+        for (ActivityManager.RunningAppProcessInfo proc : procs) {
+            final String pname = proc.processName;
+            if (pname.startsWith(getPackageName())) {
+                startTrackingProcess(proc.pid, pname, System.currentTimeMillis());
+            }
+        }
     }
 
     @Override
@@ -164,7 +181,8 @@
             if (ACTION_START_TRACKING.equals(intent.getAction())) {
                 final int pid = intent.getIntExtra("pid", -1);
                 final String name = intent.getStringExtra("name");
-                startTrackingProcess(pid, name);
+                final long start = intent.getLongExtra("start", System.currentTimeMillis());
+                startTrackingProcess(pid, name, start);
             }
         }
 
diff --git a/src/com/android/launcher3/WeightWatcher.java b/src/com/android/launcher3/WeightWatcher.java
index 2eac063..70b8afe 100644
--- a/src/com/android/launcher3/WeightWatcher.java
+++ b/src/com/android/launcher3/WeightWatcher.java
@@ -213,7 +213,11 @@
         public void update() {
             //Log.v("WeightWatcher.ProcessWatcher",
             //        "MSG_UPDATE pss=" + mMemInfo.currentPss);
-            mText.setText("(" + mMemInfo.name + "/" + mPid + ") up " + getUptimeString()
+            mText.setText("(" + mPid
+                          + (mPid == android.os.Process.myPid()
+                                ? "/A"  // app
+                                : "/S") // service
+                          + ") up " + getUptimeString()
                           + " P=" + mMemInfo.currentPss
                           + " U=" + mMemInfo.currentUss
                           );
