diff --git a/res/values-sw600dp/strings.xml b/res/values-sw600dp/strings.xml
index 82ba301..cb0d8a4 100644
--- a/res/values-sw600dp/strings.xml
+++ b/res/values-sw600dp/strings.xml
@@ -35,5 +35,5 @@
     <!-- Recover tabs after a crash dialog title [CHAR LIMIT=32] -->
     <string name="recover_title">Restore tabs?</string>
     <!-- Recover tabs after a crash dialog prompt [CHAR LIMIT=none] -->
-    <string name="recover_prompt">Would you like to restore your tabs from last time?</string>
+    <string name="recover_prompt">Would you like to restore your browser tabs from last time?</string>
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c846965..8df4642 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -994,7 +994,7 @@
     <!-- Recover tabs after a crash dialog title [CHAR LIMIT=32] -->
     <string name="recover_title">Restore windows?</string>
     <!-- Recover tabs after a crash dialog prompt [CHAR LIMIT=none] -->
-    <string name="recover_prompt">Would you like to restore your windows from last time?</string>
+    <string name="recover_prompt">Would you like to restore your browser windows from last time?</string>
     <!-- Yes, recover windows from last time [CHAR LIMIT=10] -->
     <string name="recover_yes">Restore</string>
     <!-- No, don't recover windows from last time [CHAR LIMIT=10] -->
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);
     }
 
     /**
