diff --git a/src/com/android/browser/SuggestionsAdapter.java b/src/com/android/browser/SuggestionsAdapter.java
index 626283a..d3609b2 100644
--- a/src/com/android/browser/SuggestionsAdapter.java
+++ b/src/com/android/browser/SuggestionsAdapter.java
@@ -73,7 +73,7 @@
 
         public void onSearch(String txt);
 
-        public void onSelect(String txt);
+        public void onSelect(String txt, String extraData);
 
         public void onFilterComplete(int count);
 
@@ -119,7 +119,8 @@
             mListener.onSearch(item.title);
         } else {
             SuggestItem item = (SuggestItem) v.getTag();
-            mListener.onSelect((TextUtils.isEmpty(item.url)? item.title : item.url));
+            mListener.onSelect((TextUtils.isEmpty(item.url)? item.title : item.url),
+                    item.extra);
         }
     }
 
@@ -378,6 +379,7 @@
         String title;
         String url;
         int type;
+        String extra;
 
         public SuggestItem(String text, String u, int t) {
             title = text;
@@ -541,7 +543,10 @@
                 String uri = mCursor.getString(
                         mCursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_INTENT_DATA));
                 int type = (TextUtils.isEmpty(url)) ? TYPE_SUGGEST : TYPE_SUGGEST_URL;
-                return new SuggestItem(title, url, type);
+                SuggestItem item = new SuggestItem(title, url, type);
+                item.extra = mCursor.getString(
+                        mCursor.getColumnIndex(SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA));
+                return item;
             }
             return null;
         }
diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index b87ea78..f39c769 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -137,7 +137,7 @@
             stopOrRefresh();
         } else if (mGoButton == v) {
             if (!TextUtils.isEmpty(mUrlFocused.getText())) {
-                onAction(mUrlFocused.getText().toString());
+                onAction(mUrlFocused.getText().toString(), null);
             }
         } else if (mClearButton == v) {
             mUrlFocused.setText("");
@@ -154,12 +154,15 @@
     // UrlInputListener implementation
 
     @Override
-    public void onAction(String text) {
+    public void onAction(String text, String extra) {
         mBrowserActivity.getTabControl().getCurrentTopWebView().requestFocus();
         mBrowserActivity.hideFakeTitleBar();
         Intent i = new Intent();
         i.setAction(Intent.ACTION_SEARCH);
         i.putExtra(SearchManager.QUERY, text);
+        if (extra != null) {
+            i.putExtra(SearchManager.EXTRA_DATA_KEY, extra);
+        }
         mBrowserActivity.onNewIntent(i);
         setUrlMode(false);
         setDisplayTitle(text);
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index 18c5fe6..e7fc233 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -114,7 +114,7 @@
 
     @Override
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-        finishInput(getText().toString());
+        finishInput(getText().toString(), null);
         return true;
     }
 
@@ -123,7 +123,7 @@
         if (hasFocus) {
             forceIme();
         } else {
-            finishInput(null);
+            finishInput(null, null);
         }
         if (mWrappedFocusListener != null) {
             mWrappedFocusListener.onFocusChange(v, hasFocus);
@@ -138,14 +138,14 @@
         mInputManager.showSoftInput(this, 0);
     }
 
-    private void finishInput(String url) {
+    private void finishInput(String url, String extra) {
         this.dismissDropDown();
         this.setSelection(0,0);
         mInputManager.hideSoftInputFromWindow(getWindowToken(), 0);
         if (url == null) {
             mListener.onDismiss();
         } else {
-            mListener.onAction(url);
+            mListener.onAction(url, extra);
         }
     }
 
@@ -157,15 +157,15 @@
     }
 
     @Override
-    public void onSelect(String url) {
-        finishInput(url);
+    public void onSelect(String url, String extra) {
+        finishInput(url, extra);
     }
 
     @Override
     public boolean onKeyPreIme(int keyCode, KeyEvent evt) {
         if (keyCode == KeyEvent.KEYCODE_BACK) {
             // catch back key in order to do slightly more cleanup than usual
-            finishInput(null);
+            finishInput(null, null);
             return true;
         }
         return super.onKeyPreIme(keyCode, evt);
@@ -175,7 +175,7 @@
 
         public void onDismiss();
 
-        public void onAction(String text);
+        public void onAction(String text, String extra);
 
         public void onEdit(String text);
 
