diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index 041882f..11aeb20 100644
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -1708,11 +1708,11 @@
                 if (DEBUG_LOADERS) {
                     Log.d(TAG, "loaded workspace in " + (SystemClock.uptimeMillis()-t) + "ms");
                     Log.d(TAG, "workspace layout: ");
-                    Iterator<Long> iter = occupied.keySet().iterator();
                     int nScreens = occupied.size();
                     for (int y = 0; y < mCellCountY; y++) {
                         String line = "";
 
+                        Iterator<Long> iter = occupied.keySet().iterator();
                         for (int s = 0; s < nScreens; s++) {
                             long screenId = iter.next();
                             if (s > 0) {
diff --git a/src/com/android/launcher3/WeightWatcher.java b/src/com/android/launcher3/WeightWatcher.java
index 91d79a8..410856a 100644
--- a/src/com/android/launcher3/WeightWatcher.java
+++ b/src/com/android/launcher3/WeightWatcher.java
@@ -46,6 +46,13 @@
     private static final int MSG_STOP = 2;
     private static final int MSG_UPDATE = 3;
 
+    static int indexOf(int[] a, int x) {
+        for (int i=0; i<a.length; i++) {
+            if (a[i] == x) return i;
+        }
+        return -1;
+    }
+
     Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message m) {
@@ -57,9 +64,17 @@
                     mHandler.removeMessages(MSG_UPDATE);
                     break;
                 case MSG_UPDATE:
+                    int[] pids = mMemoryService.getTrackedProcesses();
+
                     final int N = getChildCount();
-                    for (int i=0; i<N; i++) {
-                        ((ProcessWatcher) getChildAt(i)).update();
+                    if (pids.length != N) initViews();
+                    else for (int i=0; i<N; i++) {
+                        ProcessWatcher pw = ((ProcessWatcher) getChildAt(i));
+                        if (indexOf(pids, pw.getPid()) < 0) {
+                            initViews();
+                            break;
+                        }
+                        pw.update();
                     }
                     mHandler.sendEmptyMessageDelayed(MSG_UPDATE, UPDATE_RATE);
                     break;
@@ -90,6 +105,7 @@
     }
 
     public void initViews() {
+        removeAllViews();
         int[] processes = mMemoryService.getTrackedProcesses();
         for (int i=0; i<processes.length; i++) {
             final ProcessWatcher v = new ProcessWatcher(getContext());
@@ -184,6 +200,14 @@
         public void setPid(int pid) {
             mPid = pid;
             mMemInfo = mMemoryService.getMemInfo(mPid);
+            if (mMemInfo == null) {
+                Log.v("WeightWatcher", "Missing info for pid " + mPid + ", removing view: " + this);
+                initViews();
+            }
+        }
+
+        public int getPid() {
+            return mPid;
         }
 
         public void update() {
