diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 4809f13..3533bf1 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -18,7 +18,6 @@
 
 import android.app.Activity;
 import android.app.DownloadManager;
-import android.app.PendingIntent;
 import android.app.SearchManager;
 import android.content.ClipboardManager;
 import android.content.ContentProvider;
@@ -93,7 +92,6 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.regex.Pattern;
 
 /**
  * Controller for browser
@@ -769,7 +767,6 @@
     public void stopLoading() {
         mLoadStopped = true;
         Tab tab = mTabControl.getCurrentTab();
-        tab.clearPageLoadCompleteListener();
         WebView w = getCurrentTopWebView();
         w.stopLoading();
         mUi.onPageStopped(tab);
@@ -2167,8 +2164,7 @@
         final PreloadedTabControl tabControl = urlData.getPreloadedTab();
         final String sbQuery = urlData.getSearchBoxQueryToSubmit();
         if (sbQuery != null) {
-            if (!tabControl.searchBoxSubmit(sbQuery, urlData.mUrl, urlData.mHeaders,
-                    urlData.getOnLoadCompletePendingIntent())) {
+            if (!tabControl.searchBoxSubmit(sbQuery, urlData.mUrl, urlData.mHeaders)) {
                 // Could not submit query. Fallback to regular tab creation
                 tabControl.destroy();
                 return null;
@@ -2186,18 +2182,6 @@
         mTabControl.addPreloadedTab(t);
         addTab(t);
         setActiveTab(t);
-        if (sbQuery == null) {
-            // if the searchbox query is set, the load complete notification is handled within
-            // the preloaded tab controller.
-            if (t.inPageLoad()) {
-                requestLoadCompleteNotification(urlData.mOnLoadCompletePendingIntent, t,
-                        urlData.mUrl, true, true);
-            } else {
-                // the page is already fully loaded
-                IntentHandler.sendPageLoadCompletePendingIntent(mActivity,
-                        urlData.mOnLoadCompletePendingIntent, true, true);
-            }
-        }
         return t;
     }
 
@@ -2391,26 +2375,10 @@
                 // this isn't called for preloaded tabs
             } else {
                 loadUrl(t, data.mUrl, data.mHeaders);
-                requestLoadCompleteNotification(data.mOnLoadCompletePendingIntent, t, data.mUrl,
-                        null, null);
             }
         }
     }
 
-    private void requestLoadCompleteNotification(final PendingIntent loadCompletePendingIntent,
-            Tab t, String forUrl, final Boolean preloaded, final Boolean preloadSuccess) {
-        if (loadCompletePendingIntent != null) {
-            Pattern urlMatch = Pattern.compile(Pattern.quote(forUrl));
-            t.setOnPageLoadCompleteListener(urlMatch, new Tab.OnPageLoadCompleteListener() {
-                @Override
-                public void onPageLoadComplete() {
-                    IntentHandler.sendPageLoadCompletePendingIntent(mActivity,
-                            loadCompletePendingIntent, preloaded, preloadSuccess);
-                }
-            });
-        }
-    }
-
     @Override
     public void onUserCanceledSsl(Tab tab) {
         // TODO: Figure out the "right" behavior
diff --git a/src/com/android/browser/IntentHandler.java b/src/com/android/browser/IntentHandler.java
index 178ba62..cc6b57c 100644
--- a/src/com/android/browser/IntentHandler.java
+++ b/src/com/android/browser/IntentHandler.java
@@ -18,8 +18,6 @@
 package com.android.browser;
 
 import android.app.Activity;
-import android.app.PendingIntent;
-import android.app.PendingIntent.CanceledException;
 import android.app.SearchManager;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -32,7 +30,6 @@
 import android.provider.MediaStore;
 import android.speech.RecognizerResultsIntent;
 import android.text.TextUtils;
-import android.util.Log;
 import android.util.Patterns;
 
 import com.android.browser.search.SearchEngine;
@@ -53,22 +50,6 @@
     // "source" parameter for Google search from unknown source
     final static String GOOGLE_SEARCH_SOURCE_UNKNOWN = "unknown";
 
-    // Pending intent extra attached to browser intents that is broadcast when the page load
-    // completes.
-    // TODO move to android.provider.Browser & make public?
-    private static final String EXTRA_LOAD_COMPLETE_PENDINGINTENT = "load_complete_intent";
-    // extra attached to intent received via EXTRA_LOAD_COMPLETE_PENDINGINTENT indicating the
-    // time at which the load completed.
-    public static final String EXTRA_LOAD_COMPLETION_TIME = "completets";
-    // extra attached to intent received via EXTRA_LOAD_COMPLETE_PENDINGINTENT indicating if
-    // preloading was attempted.
-    public static final String EXTRA_PREFETCH_ATTEMPTED = "prefattempt";
-    // extra attached to intent received via EXTRA_LOAD_COMPLETE_PENDINGINTENT indicating if
-    // preloading succeeded.
-    public static final String EXTRA_PREFETCH_SUCCESS = "prefsuccess";
-
-
-
     /* package */ static final UrlData EMPTY_URL_DATA = new UrlData(null);
 
     private Activity mActivity;
@@ -243,39 +224,11 @@
         }
     }
 
-    /**
-     * Send a pending intent received in a page view intent. This should be called when the page
-     * has finished loading.
-     *
-     * @param prefetchAttempted Indicates if prefetching was attempted, {@code null} if prefetching
-     *      was not requested or is disabled.
-     * @param prefetchSucceeded Indicates if prefetching succeeded, {@code null} if prefetching
-     *      was not requested or is disabled.
-     */
-    public static void sendPageLoadCompletePendingIntent(Context context, PendingIntent pi,
-            Boolean prefetchAttempted, Boolean prefetchSucceeded) {
-        if (pi == null) return;
-        Intent fillIn = new Intent();
-        fillIn.putExtra(EXTRA_LOAD_COMPLETION_TIME, System.currentTimeMillis());
-        if (prefetchAttempted != null) {
-            fillIn.putExtra(EXTRA_PREFETCH_ATTEMPTED, prefetchAttempted.booleanValue());
-        }
-        if (prefetchSucceeded != null) {
-            fillIn.putExtra(EXTRA_PREFETCH_SUCCESS, prefetchSucceeded.booleanValue());
-        }
-        try {
-            pi.send(context, Activity.RESULT_OK, fillIn);
-        } catch (CanceledException e) {
-            // ignore
-        }
-    }
-
     protected static UrlData getUrlDataFromIntent(Intent intent) {
         String url = "";
         Map<String, String> headers = null;
         PreloadedTabControl preloaded = null;
         String preloadedSearchBoxQuery = null;
-        PendingIntent loadCompletePendingIntent = null;
         if (intent != null
                 && (intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
             final String action = intent.getAction();
@@ -300,10 +253,6 @@
                             PreloadRequestReceiver.EXTRA_SEARCHBOX_SETQUERY);
                     preloaded = Preloader.getInstance().getPreloadedTab(id);
                 }
-                if (intent.hasExtra(EXTRA_LOAD_COMPLETE_PENDINGINTENT)) {
-                    loadCompletePendingIntent =
-                        intent.getParcelableExtra(EXTRA_LOAD_COMPLETE_PENDINGINTENT);
-                }
             } else if (Intent.ACTION_SEARCH.equals(action)
                     || MediaStore.INTENT_ACTION_MEDIA_SEARCH.equals(action)
                     || Intent.ACTION_WEB_SEARCH.equals(action)) {
@@ -328,8 +277,7 @@
                 }
             }
         }
-        return new UrlData(url, headers, intent, preloaded, preloadedSearchBoxQuery,
-                loadCompletePendingIntent);
+        return new UrlData(url, headers, intent, preloaded, preloadedSearchBoxQuery);
     }
 
     /**
@@ -414,7 +362,6 @@
         final Intent mVoiceIntent;
         final PreloadedTabControl mPreloadedTab;
         final String mSearchBoxQueryToSubmit;
-        final PendingIntent mOnLoadCompletePendingIntent;
 
         UrlData(String url) {
             this.mUrl = url;
@@ -422,16 +369,14 @@
             this.mVoiceIntent = null;
             this.mPreloadedTab = null;
             this.mSearchBoxQueryToSubmit = null;
-            this.mOnLoadCompletePendingIntent = null;
         }
 
         UrlData(String url, Map<String, String> headers, Intent intent) {
-            this(url, headers, intent, null, null, null);
+            this(url, headers, intent, null, null);
         }
 
         UrlData(String url, Map<String, String> headers, Intent intent,
-                PreloadedTabControl preloaded, String searchBoxQueryToSubmit,
-                PendingIntent onLoadCompletePendingIntent) {
+                PreloadedTabControl preloaded, String searchBoxQueryToSubmit) {
             this.mUrl = url;
             this.mHeaders = headers;
             if (RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS
@@ -442,7 +387,6 @@
             }
             this.mPreloadedTab = preloaded;
             this.mSearchBoxQueryToSubmit = searchBoxQueryToSubmit;
-            this.mOnLoadCompletePendingIntent = onLoadCompletePendingIntent;
         }
 
         boolean isEmpty() {
@@ -460,10 +404,6 @@
         String getSearchBoxQueryToSubmit() {
             return mSearchBoxQueryToSubmit;
         }
-
-        PendingIntent getOnLoadCompletePendingIntent() {
-            return mOnLoadCompletePendingIntent;
-        }
     }
 
 }
diff --git a/src/com/android/browser/PreloadedTabControl.java b/src/com/android/browser/PreloadedTabControl.java
index b0eff63..4ffe6b4 100644
--- a/src/com/android/browser/PreloadedTabControl.java
+++ b/src/com/android/browser/PreloadedTabControl.java
@@ -15,7 +15,6 @@
  */
 package com.android.browser;
 
-import android.app.PendingIntent;
 import android.net.Uri;
 import android.text.TextUtils;
 import android.util.Log;
@@ -40,7 +39,7 @@
         mTab = t;
     }
 
-    private boolean maybeSetQuery(final String query, SearchBox sb) {
+    private void maybeSetQuery(final String query, SearchBox sb) {
         if (!TextUtils.equals(mLastQuery, query)) {
             if (sb != null) {
                 if (LOGD_ENABLED) Log.d(LOGTAG, "Changing searchbox query to " + query);
@@ -56,27 +55,25 @@
                         }
                     }
                 });
-                return true;
             } else {
                 if (LOGD_ENABLED) Log.d(LOGTAG, "Cannot set query: no searchbox interface");
             }
         }
-        return false;
     }
 
     public void setQuery(String query) {
         maybeSetQuery(query, mTab.getWebView().getSearchBox());
     }
 
-    public boolean searchBoxSubmit(final String query, final String fallbackUrl,
-            final Map<String, String> fallbackHeaders, final PendingIntent onLoadCompleteIntent) {
+    public boolean searchBoxSubmit(final String query,
+            final String fallbackUrl, final Map<String, String> fallbackHeaders) {
         final SearchBox sb = mTab.getWebView().getSearchBox();
         if (sb == null) {
             // no searchbox, cannot submit. Fallback to regular tab creation
             if (LOGD_ENABLED) Log.d(LOGTAG, "No searchbox, cannot submit query");
             return false;
         }
-        final boolean newQuery = maybeSetQuery(query, sb);
+        maybeSetQuery(query, sb);
         if (LOGD_ENABLED) Log.d(LOGTAG, "Submitting query " + query);
         final String currentUrl = mTab.getUrl();
         sb.onsubmit(new SearchBox.SearchBoxListener() {
@@ -87,14 +84,9 @@
                 if (!called) {
                     if (LOGD_ENABLED) Log.d(LOGTAG, "Query not submitted; falling back");
                     loadUrl(fallbackUrl, fallbackHeaders);
-
                     // make sure that the failed, preloaded URL is cleared from the back stack
                     mTab.clearBackStackWhenItemAdded(Pattern.compile(
                             "^" + Pattern.quote(fallbackUrl) + "$"));
-                    // When setting the search box query, preloadAttempted=true implies that the
-                    // the query was prefetched using the searchbox API. This is the case if we
-                    // the query is not new.
-                    registerLoadCompleteListener(!newQuery, false, onLoadCompleteIntent);
                 } else {
                     // ignore the next fragment change, to avoid leaving a blank page in the browser
                     // after the query has been submitted.
@@ -108,27 +100,11 @@
                                     Pattern.quote(currentWithoutFragment) +
                                     "(\\#.*)?" +
                                     "$"));
-                    registerLoadCompleteListener(!newQuery, true, onLoadCompleteIntent);
                 }
             }});
         return true;
     }
 
-    private void registerLoadCompleteListener(
-            final boolean queryPreloaded,
-            final boolean preloadSucceeded,
-            final PendingIntent pendingIntent) {
-        if (pendingIntent == null) {
-            return;
-        }
-        mTab.setOnPageLoadCompleteListener(null, new Tab.OnPageLoadCompleteListener(){
-            @Override
-            public void onPageLoadComplete() {
-                IntentHandler.sendPageLoadCompletePendingIntent(mTab.mContext, pendingIntent,
-                        queryPreloaded, preloadSucceeded);
-            }});
-    }
-
     public void searchBoxCancel() {
         SearchBox sb = mTab.getWebView().getSearchBox();
         if (sb != null) {
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 8dcc54b..8c9dc02 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -66,6 +66,8 @@
 import android.webkit.WebView.PictureListener;
 import android.webkit.WebViewClient;
 import android.widget.CheckBox;
+import android.widget.LinearLayout;
+import android.widget.TextView;
 import android.widget.Toast;
 
 import com.android.browser.TabControl.OnThumbnailUpdatedListener;
@@ -172,13 +174,10 @@
     private Handler mHandler;
 
     /**
-     * See {@link #clearBackStackWhenItemAdded(Pattern)}.
+     * See {@link #clearBackStackWhenItemAdded(String)}.
      */
     private Pattern mClearHistoryUrlPattern;
 
-    private OnPageLoadCompleteListener mOnPageLoadCompleteListener;
-    private Pattern mOnPageLoadCompleteUrlMatch;
-
     private static synchronized Bitmap getDefaultFavicon(Context context) {
         if (sDefaultFavicon == null) {
             sDefaultFavicon = BitmapFactory.decodeResource(
@@ -533,26 +532,6 @@
         }
     }
 
-    public interface OnPageLoadCompleteListener {
-        void onPageLoadComplete();
-    }
-
-    /**
-     * Requests a notification when the next page load completes. This is a one shot notification,
-     * the listener will be discarded after the first callback, or if the page load is cancelled.
-     * @param listener
-     */
-    public void setOnPageLoadCompleteListener(Pattern urlMatch,
-            OnPageLoadCompleteListener listener) {
-        mOnPageLoadCompleteListener = listener;
-        mOnPageLoadCompleteUrlMatch = urlMatch;
-    }
-
-    public void clearPageLoadCompleteListener() {
-        mOnPageLoadCompleteListener = null;
-        mOnPageLoadCompleteUrlMatch = null;
-    }
-
     // -------------------------------------------------------------------------
     // WebViewClient implementation for the main WebView
     // -------------------------------------------------------------------------
@@ -616,13 +595,6 @@
 
         @Override
         public void onPageFinished(WebView view, String url) {
-            if (mOnPageLoadCompleteListener != null) {
-                if (mOnPageLoadCompleteUrlMatch == null
-                        || mOnPageLoadCompleteUrlMatch.matcher(url).matches())
-                mOnPageLoadCompleteListener.onPageLoadComplete();
-                mOnPageLoadCompleteListener = null;
-                mOnPageLoadCompleteUrlMatch = null;
-            }
             if (!mInPageLoad) {
                 // In page navigation links (www.something.com#footer) will
                 // trigger an onPageFinished which we don't care about.
@@ -2070,7 +2042,6 @@
             mCurrentState = new PageState(mContext, false, url, null);
             mWebViewController.onPageStarted(this, mMainView, null);
             mMainView.loadUrl(url, headers);
-            clearPageLoadCompleteListener();
         }
     }
 
@@ -2122,14 +2093,12 @@
 
     public void goBack() {
         if (mMainView != null) {
-            clearPageLoadCompleteListener();
             mMainView.goBack();
         }
     }
 
     public void goForward() {
         if (mMainView != null) {
-            clearPageLoadCompleteListener();
             mMainView.goForward();
         }
     }
