diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 27f7d97..d140d5a 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -35,11 +35,9 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.Window;
-import android.webkit.JavascriptInterface;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.android.browser.R;
-import com.android.browser.UI.ComboViews;
 import com.android.browser.search.DefaultSearchEngine;
 import com.android.browser.search.SearchEngine;
 import com.android.browser.stub.NullController;
@@ -357,29 +355,4 @@
                 super.dispatchGenericMotionEvent(ev);
     }
 
-    // add for carrier homepage feature
-    @JavascriptInterface
-    public void loadBookmarks() {
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                if (mController instanceof Controller) {
-                    ((Controller)mController).bookmarksOrHistoryPicker(ComboViews.Bookmarks);
-                }
-            }
-        });
-    }
-
-    // add for carrier homepage feature
-    @JavascriptInterface
-    public void loadHistory() {
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                if (mController instanceof Controller) {
-                    ((Controller)mController).bookmarksOrHistoryPicker(ComboViews.History);
-                }
-            }
-        });
-    }
 }
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index e4def81..9803ec4 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -86,6 +86,8 @@
 import org.codeaurora.swe.SslErrorHandler;
 import org.codeaurora.swe.WebSettings;
 import org.codeaurora.swe.WebView;
+import org.codeaurora.swe.WebBackForwardList;
+import org.codeaurora.swe.WebHistoryItem;
 
 import com.android.browser.AppAdapter;
 import com.android.browser.R;
@@ -176,7 +178,8 @@
 
     private Activity mActivity;
     private UI mUi;
-    private TabControl mTabControl;
+    private HomepageHandler mHomepageHandler;
+    protected TabControl mTabControl;
     private BrowserSettings mSettings;
     private WebViewFactory mFactory;
 
@@ -270,6 +273,7 @@
                 BrowserContract.Bookmarks.CONTENT_URI, true, mBookmarksObserver);
 
         mNetworkHandler = new NetworkStateHandler(mActivity, this);
+        mHomepageHandler = new HomepageHandler(browser, this);
     }
 
     @Override
@@ -341,7 +345,18 @@
                     mUi.needsRestoreAllTabs());
             List<Tab> tabs = mTabControl.getTabs();
             ArrayList<Long> restoredTabs = new ArrayList<Long>(tabs.size());
+
             for (Tab t : tabs) {
+                //handle restored pages that may require a JS interface
+                if (t.getWebView() != null) {
+                    WebBackForwardList backForwardList = t.getWebView().copyBackForwardList();
+                    if (backForwardList != null) {
+                        for (int i = 0; i <  backForwardList.getSize(); i++) {
+                            WebHistoryItem item = backForwardList.getItemAtIndex(i);
+                            mHomepageHandler.registerJsInterface( t.getWebView(), item.getUrl());
+                        }
+                    }
+                }
                 restoredTabs.add(t.getId());
                 if (t != mTabControl.getCurrentTab()) {
                     t.pause();
@@ -2989,6 +3004,7 @@
     protected void loadUrl(Tab tab, String url, Map<String, String> headers) {
         if (tab != null) {
             dismissSubWindow(tab);
+            mHomepageHandler.registerJsInterface(tab.getWebView(), url);
             tab.loadUrl(url, headers);
             if (tab.hasCrashed) {
                 tab.replaceCrashView(tab.getWebView(), tab.getViewContainer());
diff --git a/src/com/android/browser/HomepageHandler.java b/src/com/android/browser/HomepageHandler.java
new file mode 100644
index 0000000..f447226
--- /dev/null
+++ b/src/com/android/browser/HomepageHandler.java
@@ -0,0 +1,94 @@
+/*
+    * Copyright (c) 2014, The Linux Foundation. All rights reserved.
+    *
+    * Redistribution and use in source and binary forms, with or without
+    * modification, are permitted provided that the following conditions are
+    * met:
+    * * Redistributions of source code must retain the above copyright
+    * notice, this list of conditions and the following disclaimer.
+    * * Redistributions in binary form must reproduce the above
+    * copyright notice, this list of conditions and the following
+    * disclaimer in the documentation and/or other materials provided
+    * with the distribution.
+    * * Neither the name of The Linux Foundation nor the names of its
+    * contributors may be used to endorse or promote products derived
+    * from this software without specific prior written permission.
+    *
+    * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+    * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+    * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+    * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+    * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+    * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+    * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+    * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+    * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+    *
+    */
+
+package com.android.browser;
+
+import com.android.browser.UI.ComboViews;
+
+import android.content.Context;
+import android.os.Handler;
+import android.app.Activity;
+
+import android.webkit.JavascriptInterface;
+
+import org.codeaurora.swe.WebView;
+
+public class HomepageHandler {
+
+    private Activity mActivity;
+    private Controller mController;
+    private Handler mHandler = new Handler();
+
+    HomepageHandler(Activity activity, Controller controller ){
+        mActivity = activity;
+        mController = controller;
+    }
+
+    // add for carrier homepage feature
+    @JavascriptInterface
+    public void loadBookmarks() {
+        Tab t = mController.mTabControl.getCurrentTab();
+        if (isDefaultLandingPage(t.mCurrentState.mUrl)) {
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    mController.bookmarksOrHistoryPicker(ComboViews.Bookmarks);
+                }
+            });
+        }
+    }
+
+    // add for carrier homepage feature
+    @JavascriptInterface
+    public void loadHistory() {
+        Tab t = mController.mTabControl.getCurrentTab();
+        if (isDefaultLandingPage(t.mCurrentState.mUrl)) {
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    mController.bookmarksOrHistoryPicker(ComboViews.History);
+                }
+            });
+        }
+    }
+
+    public void registerJsInterface(WebView webview, String url){
+        if (isDefaultLandingPage(url)) {
+            webview.getSettings().setJavaScriptEnabled(true);
+            webview.addJavascriptInterface(this, "default_homepage");
+        }
+    }
+
+    public boolean isDefaultLandingPage(String url) {
+        return (url != null &&
+            url.equals(mActivity.getResources().getString(R.string.def_landing_page)) &&
+            url.startsWith("file:///"));
+    }
+}
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 2254e4a..ab59853 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -189,8 +189,6 @@
     // Listener used to know when we move forward or back in the history list.
     private final WebBackForwardListClient mWebBackForwardListClient;
     private DataController mDataController;
-    //Indicates if a JS interface was created for a specific url
-    private boolean mJsInterfaceEnabled = false;
 
     // AsyncTask for downloading touch icons
     DownloadTouchIcon mTouchIconLoader;
@@ -900,7 +898,6 @@
         public void onProgressChanged(WebView view, int newProgress) {
             mPageLoadProgress = newProgress;
             if (newProgress == 100) {
-                Log.i(CONSOLE_LOGTAG, "SWE Pageload Progress = 100");
                 mInPageLoad = false;
             }
             mWebViewController.onProgressChanged(Tab.this);
@@ -2055,26 +2052,10 @@
         if (mMainView != null) {
             mPageLoadProgress = INITIAL_PROGRESS;
             mCurrentState = new PageState(mContext, false, url, null);
-            handleJsInterface(mMainView, url);
             mMainView.loadUrl(url, headers);
         }
     }
 
-    public void handleJsInterface(WebView webview, String url){
-        if (url != null &&
-            url.equals(mContext.getResources().getString(R.string.homepage_base)) &&
-            url.startsWith("file:///")) {
-                mJsInterfaceEnabled = true;
-                webview.getSettings().setJavaScriptEnabled(true);
-                webview.addJavascriptInterface(mContext, "default_homepage");
-        } else {
-            if (mJsInterfaceEnabled) {
-                webview.removeJavascriptInterface("default_homepage");
-                mJsInterfaceEnabled = false;
-            }
-        }
-    }
-
     public void disableUrlOverridingForLoad() {
         mDisableOverrideUrlLoading = true;
     }
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index da68b55..84330c1 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -423,9 +423,6 @@
                     // sNextId to be set correctly.
                     continue;
                 }
-                //handle restored pages that may require a JS interface
-                t.handleJsInterface(t.getWebView(), t.getUrl());
-
                 tabMap.put(id, t);
                 // Me must set the current tab before restoring the state
                 // so that all the client classes are set.
