diff --git a/src/com/android/browser/TitleBarXLarge.java b/src/com/android/browser/TitleBarXLarge.java
index de3c39f..42effe1 100644
--- a/src/com/android/browser/TitleBarXLarge.java
+++ b/src/com/android/browser/TitleBarXLarge.java
@@ -25,6 +25,7 @@
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
+import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.view.LayoutInflater;
@@ -131,7 +132,8 @@
             stopOrRefresh();
         } else if (mGoButton == v) {
             if (!TextUtils.isEmpty(mUrlFocused.getText())) {
-                onAction(mUrlFocused.getText().toString(), null);
+                onAction(mUrlFocused.getText().toString(), null,
+                        UrlInputView.TYPED);
             }
         } else if (mClearButton == v) {
             mUrlFocused.setText("");
@@ -148,7 +150,7 @@
     // UrlInputListener implementation
 
     @Override
-    public void onAction(String text, String extra) {
+    public void onAction(String text, String extra, String source) {
         mUiController.getCurrentTopWebView().requestFocus();
         ((BaseUi) mUiController.getUi()).hideFakeTitleBar();
         Intent i = new Intent();
@@ -157,6 +159,11 @@
         if (extra != null) {
             i.putExtra(SearchManager.EXTRA_DATA_KEY, extra);
         }
+        if (source != null) {
+            Bundle appData = new Bundle();
+            appData.putString(com.android.common.Search.SOURCE, source);
+            i.putExtra(SearchManager.APP_DATA, appData);
+        }
         mUiController.handleNewIntent(i);
         setUrlMode(false);
         setDisplayTitle(text);
diff --git a/src/com/android/browser/UrlInputView.java b/src/com/android/browser/UrlInputView.java
index a4c2be3..0abea12 100644
--- a/src/com/android/browser/UrlInputView.java
+++ b/src/com/android/browser/UrlInputView.java
@@ -38,6 +38,10 @@
         implements OnFocusChangeListener, OnEditorActionListener,
         CompletionListener {
 
+
+    static final String TYPED = "browser-type";
+    static final String SUGGESTED = "browser-suggest";
+
     private UrlInputListener   mListener;
     private InputMethodManager mInputManager;
     private SuggestionsAdapter mAdapter;
@@ -121,7 +125,7 @@
 
     @Override
     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-        finishInput(getText().toString(), null);
+        finishInput(getText().toString(), null, TYPED);
         return true;
     }
 
@@ -130,7 +134,7 @@
         if (hasFocus) {
             forceIme();
         } else {
-            finishInput(null, null);
+            finishInput(null, null, null);
         }
         if (mWrappedFocusListener != null) {
             mWrappedFocusListener.onFocusChange(v, hasFocus);
@@ -145,14 +149,14 @@
         mInputManager.showSoftInput(this, 0);
     }
 
-    private void finishInput(String url, String extra) {
+    private void finishInput(String url, String extra, String source) {
         this.dismissDropDown();
         this.setSelection(0,0);
         mInputManager.hideSoftInputFromWindow(getWindowToken(), 0);
         if (TextUtils.isEmpty(url)) {
             mListener.onDismiss();
         } else {
-            mListener.onAction(url, extra);
+            mListener.onAction(url, extra, source);
         }
     }
 
@@ -165,14 +169,14 @@
 
     @Override
     public void onSelect(String url, String extra) {
-        finishInput(url, extra);
+        finishInput(url, extra, SUGGESTED);
     }
 
     @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, null);
+            finishInput(null, null, null);
             return true;
         }
         return super.onKeyPreIme(keyCode, evt);
@@ -182,7 +186,7 @@
 
         public void onDismiss();
 
-        public void onAction(String text, String extra);
+        public void onAction(String text, String extra, String source);
 
         public void onEdit(String text);
 
