diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index fef0b44..fce0c10 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -24,6 +24,7 @@
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.os.Build;
+import android.preference.ListPreference;
 import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.util.DisplayMetrics;
@@ -493,7 +494,7 @@
         return mAppCachePath;
     }
 
-    private void updateSearchEngine(boolean force) {
+    protected void updateSearchEngine(boolean force) {
         String searchEngineName = getSearchEngineName();
         if (force || mSearchEngine == null ||
                 !mSearchEngine.getName().equals(searchEngineName)) {
@@ -799,11 +800,11 @@
         // it creates the restriction and if enabled it sets the <default_search_engine_value>.
         SearchEngineRestriction.getInstance();
 
-        String defaultSearchEngineValue = mContext.getString(R.string.default_search_engine_value);
+        String defaultSearchEngineValue = getUserSearchEngine();
         if (defaultSearchEngineValue == null) {
             defaultSearchEngineValue = SearchEngine.GOOGLE;
         }
-        return mPrefs.getString(PREF_SEARCH_ENGINE, defaultSearchEngineValue);
+        return defaultSearchEngineValue;
     }
 
     public boolean allowAppTabs() {
@@ -854,6 +855,23 @@
                 mContext.getResources().getString(R.string.value_temporal_edge_swipe)).apply();
     }
 
+    public void setUserSearchEngine(String engine) {
+        if (!engine.equals(mContext.getResources().getString(R.string.default_search_engine_value)))
+            mPrefs.edit().putString(
+                PREF_USER_SEARCH_ENGINE + mContext.getResources().getConfiguration().locale,
+                engine).apply();
+        // ensure changing back to default clears the search engine
+        else
+            mPrefs.edit().remove(PREF_USER_SEARCH_ENGINE
+                    + mContext.getResources().getConfiguration().locale).apply();
+    }
+
+    public String getUserSearchEngine() {
+        return mPrefs.getString(
+                PREF_USER_SEARCH_ENGINE + mContext.getResources().getConfiguration().locale
+                , mContext.getResources().getString(R.string.default_search_engine_value));
+    }
+
     public void setEdgeSwipeSpatial() {
         mPrefs.edit().putString(PREF_EDGE_SWIPE,
                 mContext.getResources().getString(R.string.value_spatial_edge_swipe)).apply();
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index e71bc27..4c05906 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -812,6 +812,8 @@
         }
         mActivityStopped = false;
         UpdateNotificationService.updateCheck(mActivity);
+        // reset the search engine based on locale
+        mSettings.updateSearchEngine(false);
         mSettings.setLastRunPaused(false);
         Tab current = mTabControl.getCurrentTab();
         if (current != null) {
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index 15ec6a0..ce6c4cb 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -145,4 +145,8 @@
     static final String PREF_LEGAL_PRIVACY_POLICY = "legal_privacy_policy";
 
     static final String ACTION_RELOAD_PAGE = "reload";
+
+    // User preference
+    static final String PREF_USER_SEARCH_ENGINE = "user_search_engine-";
+
 }
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index 6524767..1a87d64 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -146,6 +146,8 @@
 
         } else if (pref.getKey().equals(PreferenceKeys.PREF_SEARCH_ENGINE)) {
             ListPreference lp = (ListPreference) pref;
+            // update the user preference
+            BrowserSettings.getInstance().setUserSearchEngine((String) objValue);
             lp.setValue((String) objValue);
             updateListPreferenceSummary(lp);
             return false;
