diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 911f724..e3ca09a 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -640,8 +640,10 @@
 
         // Save all the tabs
         mTabControl.saveState(outState, saveImages);
-        // Save time so that we know how old incognito tabs (if any) are.
-        outState.putSerializable("lastActiveDate", Calendar.getInstance());
+        if (!outState.isEmpty()) {
+            // Save time so that we know how old incognito tabs (if any) are.
+            outState.putSerializable("lastActiveDate", Calendar.getInstance());
+        }
     }
 
     void onResume() {
diff --git a/src/com/android/browser/CrashRecoveryHandler.java b/src/com/android/browser/CrashRecoveryHandler.java
index 7ee9cee..acc2a30 100644
--- a/src/com/android/browser/CrashRecoveryHandler.java
+++ b/src/com/android/browser/CrashRecoveryHandler.java
@@ -103,6 +103,10 @@
 
         @Override
         public void run() {
+            if (mState.isEmpty()) {
+                clearState(mContext);
+                return;
+            }
             Parcel p = Parcel.obtain();
             try {
                 mState.writeToParcel(p, 0);
@@ -119,8 +123,7 @@
 
     }
 
-    private void clearState() {
-        Context context = mController.getActivity();
+    private static void clearState(Context context) {
         context.deleteFile(STATE_FILE);
     }
 
@@ -128,6 +131,7 @@
         new AlertDialog.Builder(mController.getActivity())
                 .setTitle(R.string.recover_title)
                 .setMessage(R.string.recover_prompt)
+                .setIcon(R.mipmap.ic_launcher_browser)
                 .setPositiveButton(R.string.recover_yes, new OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
@@ -137,7 +141,7 @@
                 .setNegativeButton(R.string.recover_no, new OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
-                        clearState();
+                        clearState(mController.getActivity());
                         mController.doStart(null, intent);
                     }
                 })
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index bb200d8..58a7491 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -37,6 +37,7 @@
 import android.security.KeyChain;
 import android.security.KeyChainAliasCallback;
 import android.speech.RecognizerResultsIntent;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
@@ -1776,6 +1777,12 @@
         if (mMainView == null) {
             return mSavedState != null;
         }
+        // If the tab is the homepage or has no URL, don't save it
+        String homepage = BrowserSettings.getInstance().getHomePage();
+        if (TextUtils.equals(homepage, mCurrentState.mUrl)
+                || TextUtils.isEmpty(mCurrentState.mUrl)) {
+            return false;
+        }
 
         mSavedState = new Bundle();
         mMainView.saveState(mSavedState);
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 6566ac8..1367ba2 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -288,6 +288,9 @@
      */
     void saveState(Bundle outState, boolean saveImages) {
         final int numTabs = getTabCount();
+        if (numTabs == 0) {
+            return;
+        }
         long[] ids = new long[numTabs];
         int i = 0;
         for (Tab tab : mTabs) {
@@ -297,13 +300,15 @@
                         tab.getSavedState(saveImages));
             }
         }
-        outState.putLongArray(POSITIONS, ids);
-        Tab current = getCurrentTab();
-        long cid = -1;
-        if (current != null) {
-            cid = current.getId();
+        if (!outState.isEmpty()) {
+            outState.putLongArray(POSITIONS, ids);
+            Tab current = getCurrentTab();
+            long cid = -1;
+            if (current != null) {
+                cid = current.getId();
+            }
+            outState.putLong(CURRENT, cid);
         }
-        outState.putLong(CURRENT, cid);
     }
 
     /**
