diff --git a/res/values-zh-rCN/donottranslate-search_engines.xml b/res/values-zh-rCN/donottranslate-search_engines.xml
index c38055c..b85a2b5 100644
--- a/res/values-zh-rCN/donottranslate-search_engines.xml
+++ b/res/values-zh-rCN/donottranslate-search_engines.xml
@@ -23,8 +23,10 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="search_engines" translatable="false">
     <item>google</item>
-    <item>baidu</item>
+    <item>baidu_cn</item>
+    <item>cmcc_cn</item>
     <item>yahoo_cn</item>
     <item>bing_zh_CN</item>
   </string-array>
+  <string name="default_search_engine_value">baidu_cn</string>
 </resources>
diff --git a/res/values/all_search_engines.xml b/res/values/all_search_engines.xml
index bbba0ee..4fee10a 100644
--- a/res/values/all_search_engines.xml
+++ b/res/values/all_search_engines.xml
@@ -116,7 +116,7 @@
     <item>ISO-8859-1</item>
     <item></item>
   </string-array>
-  <string-array name="baidu" translatable="false">
+  <string-array name="baidu_cn" translatable="false">
     <item>&#x767e;&#x5ea6;</item>
     <item>baidu.com</item>
     <item>http://www.baidu.com/favicon.ico</item>
@@ -124,6 +124,14 @@
     <item>GB2312</item>
     <item></item>
   </string-array>
+  <string-array name="baidu" translatable="false">
+    <item>Baidu</item>
+    <item>baidu.com</item>
+    <item>http://www.baidu.com/favicon.ico</item>
+    <item>http://www.baidu.com/s?wd={searchTerms}</item>
+    <item>UTF-8</item>
+    <item></item>
+  </string-array>
   <string-array name="yahoo_ch" translatable="false">
     <item>Yahoo! Suche</item>
     <item>ch.yahoo.com</item>
@@ -140,6 +148,23 @@
     <item>UTF-8</item>
     <item>http://api.bing.com/osjson.aspx?query={searchTerms}&amp;language={language}</item>
   </string-array>
+  <string-array name="cmcc_cn" translatable="false">
+    <item>&#x79FB;&#x52A8;&#x641C;&#x7D22;</item>
+    <item>s.139.com</item>
+    <item>http://s.139.com/favicon.ico</item>
+    <item>http://s.139.com/search.do?q={searchTerms}&amp;category=downloadable|web|browseable&amp;tid=2123,2124,2125,2126&amp;fr=portalcustom2</item>
+    <item>GB2312</item>
+    <item></item>
+  </string-array>
+
+  <string-array name="cmcc" translatable="false">
+    <item>139 Search</item>
+    <item>s.139.com</item>
+    <item>http://s.139.com/favicon.ico</item>
+    <item>http://s.139.com/search.do?q={searchTerms}&amp;category=downloadable|web|browseable&amp;tid=2123,2124,2125,2126&amp;fr=portalcustom2</item>
+    <item>UTF-8</item>
+    <item></item>
+  </string-array>
   <string-array name="yahoo_cn" translatable="false">
     <item>&#x4e2d;&#x56fd;&#x96c5;&#x864e;</item>
     <item>cn.yahoo.com</item>
diff --git a/res/values/donottranslate-search_engines.xml b/res/values/donottranslate-search_engines.xml
index c6ed9ca..081efc0 100644
--- a/res/values/donottranslate-search_engines.xml
+++ b/res/values/donottranslate-search_engines.xml
@@ -23,7 +23,10 @@
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="search_engines" translatable="false">
     <item>google</item>
+    <item>baidu</item>
+    <item>cmcc</item>
     <item>yahoo</item>
     <item>bing</item>
   </string-array>
+  <string name="default_search_engine_value">baidu</string>
 </resources>
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 17e2001..0b415be 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -757,7 +757,11 @@
     // -----------------------------
 
     public String getSearchEngineName() {
-        return mPrefs.getString(PREF_SEARCH_ENGINE, SearchEngine.GOOGLE);
+        String defaultSearchEngineValue = mContext.getString(R.string.default_search_engine_value);
+        if (defaultSearchEngineValue == null) {
+            defaultSearchEngineValue = SearchEngine.GOOGLE;
+        }
+        return mPrefs.getString(PREF_SEARCH_ENGINE, defaultSearchEngineValue);
     }
 
     public boolean allowAppTabs() {
diff --git a/src/com/android/browser/search/SearchEnginePreference.java b/src/com/android/browser/search/SearchEnginePreference.java
index 18ce495..62ce97b 100644
--- a/src/com/android/browser/search/SearchEnginePreference.java
+++ b/src/com/android/browser/search/SearchEnginePreference.java
@@ -57,6 +57,14 @@
 
         setEntryValues(entryValues.toArray(new CharSequence[entryValues.size()]));
         setEntries(entries.toArray(new CharSequence[entries.size()]));
-    }
 
+        //for other language the default search engine is google,but for English and
+        //Chinese the default search engine should be Baidu.
+        String language = context.getResources().getConfiguration().locale.toString();
+        if (language.equals("zh_CN")) {
+            setDefaultValue("baidu_cn");
+        } else if (language.equals("en_US")) {
+            setDefaultValue("baidu");
+        }
+    }
 }
diff --git a/src/com/android/browser/search/SearchEngines.java b/src/com/android/browser/search/SearchEngines.java
index 433e877..2484ce0 100644
--- a/src/com/android/browser/search/SearchEngines.java
+++ b/src/com/android/browser/search/SearchEngines.java
@@ -19,6 +19,7 @@
 
 import android.content.Context;
 import android.content.res.Resources;
+import android.os.SystemProperties;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -37,10 +38,16 @@
         ArrayList<SearchEngineInfo> searchEngineInfos = new ArrayList<SearchEngineInfo>();
         Resources res = context.getResources();
         String[] searchEngines = res.getStringArray(R.array.search_engines);
+        String browserRes = SystemProperties.get("persist.env.c.browser.resource", "default");
         for (int i = 0; i < searchEngines.length; i++) {
             String name = searchEngines[i];
-            SearchEngineInfo info = new SearchEngineInfo(context, name);
-            searchEngineInfos.add(info);
+            if ("cmcc".equals(browserRes)) {
+                SearchEngineInfo info = new SearchEngineInfo(context, name);
+                searchEngineInfos.add(info);
+            } else if (!name.startsWith("cmcc")) {
+                SearchEngineInfo info = new SearchEngineInfo(context, name);
+                searchEngineInfos.add(info);
+            }
         }
         return searchEngineInfos;
     }
