diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index 17f0a97..b7d20b4 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -1884,6 +1884,7 @@
         int mScrollX;
         int mScrollY;
         boolean mMobileSite;
+        boolean mIsRestored;
     }
 
     static class DrawData {
@@ -2285,6 +2286,7 @@
         mInitialViewState.mScrollY = mRestoredY;
         mInitialViewState.mMobileSite = (0 == mViewportWidth);
         if (mRestoredScale > 0) {
+            mInitialViewState.mIsRestored = true;
             mInitialViewState.mViewScale = mRestoredScale / 100.0f;
             if (mRestoredTextWrapScale > 0) {
                 mInitialViewState.mTextWrapScale = mRestoredTextWrapScale / 100.0f;
diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java
index 69db6b2..b94dc3b 100644
--- a/core/java/android/webkit/ZoomManager.java
+++ b/core/java/android/webkit/ZoomManager.java
@@ -260,12 +260,7 @@
     public final float getReadingLevelScale() {
         // The reading scale is at least 0.5f apart from the overview scale.
         final float MIN_SCALE_DIFF = 0.5f;
-        final float zoomOverviewScale = getZoomOverviewScale();
-        if (zoomOverviewScale > DEFAULT_READING_LEVEL_SCALE) {
-            return Math.min(DEFAULT_READING_LEVEL_SCALE,
-                zoomOverviewScale - MIN_SCALE_DIFF);
-        }
-        return Math.max(zoomOverviewScale + MIN_SCALE_DIFF,
+        return Math.max(getZoomOverviewScale() + MIN_SCALE_DIFF,
             DEFAULT_READING_LEVEL_SCALE);
     }
 
@@ -864,32 +859,33 @@
 
         if (!mWebView.drawHistory()) {
             float scale;
-            final boolean reflowText;
-            WebSettings settings = mWebView.getSettings();
+            final float overviewScale = getZoomOverviewScale();
 
             if (mInitialScale > 0) {
                 scale = mInitialScale;
-                reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale);
             } else if (viewState.mViewScale > 0) {
                 mTextWrapScale = viewState.mTextWrapScale;
                 scale = viewState.mViewScale;
-                reflowText = false;
             } else {
-                scale = getZoomOverviewScale();
-                if (settings.getUseWideViewPort()
-                    && settings.getLoadWithOverviewMode()) {
-                    mInitialZoomOverview = true;
-                } else {
+                scale = overviewScale;
+                WebSettings settings = mWebView.getSettings();
+                if (!settings.getUseWideViewPort()
+                    || !settings.getLoadWithOverviewMode()) {
                     scale = Math.max(viewState.mTextWrapScale, scale);
-                    mInitialZoomOverview = !exceedsMinScaleIncrement(scale, getZoomOverviewScale());
                 }
                 if (settings.isNarrowColumnLayout() && settings.getUseFixedViewport()) {
                     // When first layout, reflow using the reading level scale to avoid
                     // reflow when double tapped.
                     mTextWrapScale = getReadingLevelScale();
                 }
+            }
+            boolean reflowText = false;
+            if (!viewState.mIsRestored) {
+                scale = Math.max(scale, overviewScale);
+                mTextWrapScale = Math.max(mTextWrapScale, overviewScale);
                 reflowText = exceedsMinScaleIncrement(mTextWrapScale, scale);
             }
+            mInitialZoomOverview = !exceedsMinScaleIncrement(scale, overviewScale);
             setZoomScale(scale, reflowText);
 
             // update the zoom buttons as the scale can be changed
