diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 963f29f..dbcae2e 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -115,7 +115,7 @@
     protected void onNewIntent(Intent intent) {
         if (ACTION_RESTART.equals(intent.getAction())) {
             Bundle outState = new Bundle();
-            mController.onSaveInstanceState(outState);
+            mController.onSaveInstanceState(outState, true);
             finish();
             getApplicationContext().startActivity(
                     new Intent(getApplicationContext(), BrowserActivity.class)
@@ -166,7 +166,7 @@
         if (LOGV_ENABLED) {
             Log.v(LOGTAG, "BrowserActivity.onSaveInstanceState: this=" + this);
         }
-        mController.onSaveInstanceState(outState);
+        mController.onSaveInstanceState(outState, true);
     }
 
     @Override
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index e089f5d..1f5c8f0 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -616,7 +616,7 @@
         mCrashRecoveryHandler.clearState();
     }
 
-    void onSaveInstanceState(Bundle outState) {
+    void onSaveInstanceState(Bundle outState, boolean saveImages) {
         // the default implementation requires each view to have an id. As the
         // browser handles the state itself and it doesn't use id for the views,
         // don't call the default implementation. Otherwise it will trigger the
@@ -624,7 +624,7 @@
         // focused view XXX has no id".
 
         // Save all the tabs
-        mTabControl.saveState(outState);
+        mTabControl.saveState(outState, saveImages);
         // Save time so that we know how old incognito tabs (if any) are.
         outState.putSerializable("lastActiveDate", Calendar.getInstance());
     }
diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java
index 9e98e76..60e39da 100644
--- a/src/com/android/browser/CrashRecoveryHandler.java
+++ b/src/com/android/browser/CrashRecoveryHandler.java
@@ -22,7 +22,6 @@
 import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
 import android.os.Bundle;
-import android.os.Debug;
 import android.os.Parcel;
 import android.util.Log;
 
@@ -45,7 +44,7 @@
 
     public void backupState() {
         final Bundle state = new Bundle();
-        mController.onSaveInstanceState(state);
+        mController.onSaveInstanceState(state, false);
         final Context context = mController.getActivity();
         new Thread() {
             @Override
@@ -57,7 +56,7 @@
                             Context.MODE_PRIVATE);
                     fout.write(p.marshall());
                     fout.close();
-                } catch (Exception e) {
+                } catch (Throwable e) {
                     Log.i(LOGTAG, "Failed to save persistent state", e);
                 } finally {
                     p.recycle();
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 4097334..98d209e 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -1706,6 +1706,15 @@
         return mSavedState;
     }
 
+    Bundle getSavedState(boolean saveImages) {
+        if (saveImages && mScreenshot != null) {
+            Bundle b = new Bundle(mSavedState);
+            b.putParcelable(SCREENSHOT, mScreenshot);
+            return b;
+        }
+        return mSavedState;
+    }
+
     /**
      * Set the saved state.
      */
@@ -1739,9 +1748,6 @@
         if (mParent != null) {
             mSavedState.putLong(PARENTTAB, mParent.mId);
         }
-        if (mScreenshot != null) {
-            mSavedState.putParcelable(SCREENSHOT, mScreenshot);
-        }
         mSavedState.putBoolean(USERAGENT,
                 mSettings.hasDesktopUseragent(getWebView()));
         return true;
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 1fe9053..0aaf3d6 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -272,15 +272,17 @@
      * position sorted array of tab ids
      * for each tab id, save the tab state
      * @param outState
+     * @param saveImages
      */
-    void saveState(Bundle outState) {
+    void saveState(Bundle outState, boolean saveImages) {
         final int numTabs = getTabCount();
         long[] ids = new long[numTabs];
         int i = 0;
         for (Tab tab : mTabs) {
             ids[i++] = tab.getId();
             if (tab.saveState()) {
-                outState.putBundle(Long.toString(tab.getId()), tab.getSavedState());
+                outState.putBundle(Long.toString(tab.getId()),
+                        tab.getSavedState(saveImages));
             }
         }
         outState.putLongArray(POSITIONS, ids);
