diff --git a/src/com/android/launcher2/AllApps3D.java b/src/com/android/launcher2/AllApps3D.java
index 8467b39..d81b442 100644
--- a/src/com/android/launcher2/AllApps3D.java
+++ b/src/com/android/launcher2/AllApps3D.java
@@ -194,8 +194,10 @@
     }
 
     public void surrender() {
-        sRS.contextSetSurface(0, 0, null);
-        sRS.mMessageCallback = null;
+        if (sRS != null) {
+            sRS.contextSetSurface(0, 0, null);
+            sRS.mMessageCallback = null;
+        }
         mSurrendered = true;
     }
 
@@ -1022,11 +1024,15 @@
         }
 
         void pause() {
-            sRS.contextBindRootScript(null);
+            if (sRS != null) {
+                sRS.contextBindRootScript(null);
+            }
         }
 
         void resume() {
-            sRS.contextBindRootScript(mScript);
+            if (sRS != null) {
+                sRS.contextBindRootScript(mScript);
+            }
         }
 
         class Params extends BaseAlloc {
diff --git a/src/com/android/launcher2/LauncherProvider.java b/src/com/android/launcher2/LauncherProvider.java
index 4bf4421..a02e449 100644
--- a/src/com/android/launcher2/LauncherProvider.java
+++ b/src/com/android/launcher2/LauncherProvider.java
@@ -366,22 +366,28 @@
                 version = 4;
             }
             
-            if (version < 5) {
+            // Where's version 5?
+            // - Donut and sholes on 2.0 shipped with version 4 of launcher1.
+            // - Passion shipped on 2.1 with version 6 of launcher2
+            // - Sholes shipped on 2.1r1 (aka Mr. 3) with version 5 of launcher 1
+            //   but version 5 on there was the updateContactsShortcuts change
+            //   which was version 6 in launcher 2 (first shipped on passion 2.1r1).
+            // The updateContactsShortcuts change is idempotent, so running it twice
+            // is okay so we'll do that when upgrading the devices that shipped with it.
+            if (version < 6) {
                 // We went from 3 to 5 screens. Move everything 1 to the right
                 db.beginTransaction();
                 try {
                     db.execSQL("UPDATE favorites SET screen=(screen + 1);");
                     db.setTransactionSuccessful();
-                    version = 5;
                 } catch (SQLException ex) {
                     // Old version remains, which means we wipe old data
                     Log.e(TAG, ex.getMessage(), ex);
                 } finally {
                     db.endTransaction();
                 }
-            }
             
-            if (version < 6) {
+               // We added the fast track.
                 if (updateContactsShortcuts(db)) {
                     version = 6;
                 }
@@ -480,9 +486,10 @@
 
             db.beginTransaction();
             Cursor c = null;
+            SQLiteStatement update = null;
             try {
                 boolean logged = false;
-                final SQLiteStatement update = db.compileStatement("UPDATE favorites "
+                update = db.compileStatement("UPDATE favorites "
                         + "SET icon=? WHERE _id=?");
 
                 c = db.rawQuery("SELECT _id, icon FROM favorites WHERE iconType=" +
@@ -506,8 +513,6 @@
                                 update.execute();
                             }
                             bitmap.recycle();
-                            //noinspection UnusedAssignment
-                            bitmap = null;
                         }
                     } catch (Exception e) {
                         if (!logged) {
@@ -523,6 +528,9 @@
                 Log.w(TAG, "Problem while allocating appWidgetIds for existing widgets", ex);
             } finally {
                 db.endTransaction();
+                if (update != null) {
+                    update.close();
+                }
                 if (c != null) {
                     c.close();
                 }
