diff --git a/proguard.flags b/proguard.flags
index 5354e1c..42920ac 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -1,6 +1,6 @@
 # Most of the classes in this package are fragments only referenced from XML
--keep class com.android.swe.browser.preferences.*
--keep class com.android.swe.browser.BrowserActivity{
+-keep class com.android.browser.preferences.*
+-keep class com.android.browser.BrowserActivity{
     public void loadBookmarks();
     public void loadHistory();
 }
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ad4d378..96823e9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -68,6 +68,7 @@
     <string name="cancel">Cancel</string>
     <!-- Label for a confirm button.  Used in multiple contexts. -->
     <string name="ok">OK</string>
+    <string name="config_carrier_resource">default</string>
 
     <!-- Displayed on the title bar while the page is loading -->
     <string name="title_bar_loading">Loading\u2026</string>
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 90dcc4f..8bbe7b9 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -137,16 +137,15 @@
 
     // add for carrier feature
     private static Context sResPackageCtx;
-    private android.os.CountDownTimer mCountDownTimer;
 
     //Determine if WebView is Initialized or not
     private boolean mWebViewInitialized;
 
-    public static void initialize(final Context context) {    	
+    public static void initialize(final Context context) {
         sInstance = new BrowserSettings(context);
     }
 
-    public static BrowserSettings getInstance() {    	
+    public static BrowserSettings getInstance() {
         return sInstance;
     }
 
@@ -254,11 +253,7 @@
             }
 
             // add for carrier homepage feature
-            Object[] params  = { new String("persist.env.c.browser.resource"),
-                                 new String("default")};
-            Class[] type = new Class[] {String.class, String.class};
-            String browserRes = (String)ReflectHelper.invokeStaticMethod(
-                                "android.os.SystemProperties","get",type, params);
+            String browserRes = mContext.getResources().getString(R.string.config_carrier_resource);
             if ("cu".equals(browserRes) || "cmcc".equals(browserRes)) {
                 int resID = sResPackageCtx.getResources().getIdentifier(
                         "homepage_base", "string", "com.android.browser.res");
diff --git a/src/com/android/browser/BrowserWebViewFactory.java b/src/com/android/browser/BrowserWebViewFactory.java
index 4364b26..caa0cf8 100644
--- a/src/com/android/browser/BrowserWebViewFactory.java
+++ b/src/com/android/browser/BrowserWebViewFactory.java
@@ -65,11 +65,7 @@
         w.getSettings().setDisplayZoomControls(!supportsMultiTouch);
 
         // add for carrier homepage feature
-        Object[] params  = {new String("persist.env.c.browser.resource"),
-                            new String("default")};
-        Class[] type = new Class[] {String.class, String.class};
-        String browserRes = (String)ReflectHelper.invokeStaticMethod(
-                            "android.os.SystemProperties","get", type, params);
+        String browserRes = mContext.getResources().getString(R.string.config_carrier_resource);
         if ("ct".equals(browserRes)) {
             w.getSettings().setJavaScriptEnabled(true);
             if (mContext instanceof BrowserActivity) {
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 66736cb..a1ebd72 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -417,12 +417,8 @@
                 // If the webview restore successfully, add javascript interface again.
                 WebView view = t.getWebView();
                 if (view != null) {
-                    Object[] params  = { new String("persist.env.c.browser.resource"),
-                                 new String("default")};
-                    Class[] type = new Class[] {String.class, String.class};
-                    String browserRes = (String)ReflectHelper.invokeStaticMethod(
-                        "android.os.SystemProperties","get",
-                        type, params);
+                    String browserRes = mController.getActivity().getApplicationContext()
+                            .getResources().getString(R.string.config_carrier_resource);
                     if ("ct".equals(browserRes)) {
                         view.getSettings().setJavaScriptEnabled(true);
                         if (mController.getActivity() instanceof BrowserActivity) {
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index cbb39b6..e37e7fe 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -658,12 +658,8 @@
             db.insertOrThrow(TABLE_BOOKMARKS, null, values);
 
             // add for carrier bookmark feature
-            Object[] params  = { new String("persist.env.c.browser.resource"),
-                                             new String("default")};
-                        Class[] type = new Class[] {String.class, String.class};
-                        String browserRes = (String)ReflectHelper.invokeStaticMethod(
-                                    "android.os.SystemProperties", "get",
-                                    type, params);
+            String browserRes = getContext().getResources().getString(
+                    R.string.config_carrier_resource);
 
             //don't add default bookmarks for cmcc
             if (!"cmcc".equals(browserRes)) {
