diff --git a/res/xml/bookmarks_searchable.xml b/res/xml/bookmarks_searchable.xml
index de56add..8b83f26 100644
--- a/res/xml/bookmarks_searchable.xml
+++ b/res/xml/bookmarks_searchable.xml
@@ -25,6 +25,6 @@
     android:searchSettingsDescription="@string/search_settings_description"
     android:searchSuggestAuthority="browser"
     android:searchSuggestPath="bookmarks"
-    android:searchSuggestSelection="url LIKE ?"
+    android:searchSuggestSelection="bookmarks.url LIKE ?"
     android:searchSuggestIntentAction="android.intent.action.VIEW"
 />
diff --git a/res/xml/searchable.xml b/res/xml/searchable.xml
index 3397a40..a06d5b0 100644
--- a/res/xml/searchable.xml
+++ b/res/xml/searchable.xml
@@ -27,6 +27,6 @@
     android:inputType="textUri"
     android:imeOptions="actionGo"
     android:searchSuggestAuthority="browser"
-    android:searchSuggestSelection="url LIKE ?"
+    android:searchSuggestSelection="history.url LIKE ?"
     android:searchSuggestIntentAction="android.intent.action.VIEW"
 />
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index ebfd56f..7f40aea 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -512,8 +512,8 @@
                             case R.id.save_link_context_menu_id:
                             case R.id.download_context_menu_id:
                                 DownloadHandler.onDownloadStartNoStream(
-                                        mActivity, url, null, null, null,
-                                        view.isPrivateBrowsingEnabled());
+                                        mActivity, url, view.getSettings().getUserAgentString(),
+                                        null, null, view.isPrivateBrowsingEnabled());
                                 break;
                         }
                         break;
@@ -860,11 +860,6 @@
     public void onPageFinished(Tab tab) {
         mCrashRecoveryHandler.backupState();
         mUi.onTabDataChanged(tab);
-        // pause the WebView timer and release the wake lock if it is finished
-        // while BrowserActivity is in pause state.
-        if (mActivityPaused && pauseWebViewTimers(tab)) {
-            releaseWakeLock();
-        }
 
         // Performance probe
         if (false) {
@@ -889,6 +884,10 @@
             // onPageFinished has executed)
             if (tab.inPageLoad()) {
                 updateInLoadMenuItems(mCachedMenu, tab);
+            } else if (mActivityPaused && pauseWebViewTimers(tab)) {
+                // pause the WebView timer and release the wake lock if it is
+                // finished while BrowserActivity is in pause state.
+                releaseWakeLock();
             }
             if (!tab.isPrivateBrowsingEnabled()
                     && !TextUtils.isEmpty(tab.getUrl())
@@ -1433,9 +1432,9 @@
                         return false;
                     }
                 });
-                menu.findItem(R.id.download_context_menu_id).
-                        setOnMenuItemClickListener(
-                                new Download(mActivity, extra, webview.isPrivateBrowsingEnabled()));
+                menu.findItem(R.id.download_context_menu_id).setOnMenuItemClickListener(
+                        new Download(mActivity, extra, webview.isPrivateBrowsingEnabled(),
+                                webview.getSettings().getUserAgentString()));
                 menu.findItem(R.id.set_wallpaper_context_menu_id).
                         setOnMenuItemClickListener(new WallpaperHandler(mActivity,
                                 extra));
@@ -2165,6 +2164,7 @@
         private Activity mActivity;
         private String mText;
         private boolean mPrivateBrowsing;
+        private String mUserAgent;
         private static final String FALLBACK_EXTENSION = "dat";
         private static final String IMAGE_BASE_FORMAT = "yyyy-MM-dd-HH-mm-ss-";
 
@@ -2173,16 +2173,18 @@
             if (DataUri.isDataUri(mText)) {
                 saveDataUri();
             } else {
-                DownloadHandler.onDownloadStartNoStream(mActivity, mText, null,
+                DownloadHandler.onDownloadStartNoStream(mActivity, mText, mUserAgent,
                         null, null, mPrivateBrowsing);
             }
             return true;
         }
 
-        public Download(Activity activity, String toDownload, boolean privateBrowsing) {
+        public Download(Activity activity, String toDownload, boolean privateBrowsing,
+                String userAgent) {
             mActivity = activity;
             mText = toDownload;
             mPrivateBrowsing = privateBrowsing;
+            mUserAgent = userAgent;
         }
 
         /**
