diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index f55ebb3..47f12e3 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -18,6 +18,7 @@
 
 import com.google.android.googleapps.IGoogleLoginService;
 import com.google.android.googlelogin.GoogleLoginServiceConstants;
+import com.google.android.providers.GoogleSettings.Partner;
 
 import android.app.Activity;
 import android.app.ActivityManager;
@@ -203,7 +204,7 @@
                     if (googleUser == null || !hostedUser.equals(googleUser)) {
                         String domain = hostedUser.substring(hostedUser.lastIndexOf('@')+1);
                         homepage = "http://www.google.com/m/a/" + domain + "?client=ms-" +
-                            SystemProperties.get("persist.sys.com.google.clientid", "unknown");
+                            Partner.getString(BrowserActivity.this.getContentResolver(), Partner.CLIENT_ID);
                     }
                 } catch (RemoteException ignore) {
                     // Login service died; carry on
@@ -4485,7 +4486,7 @@
                     R.string.google_search_base, l.getLanguage(),
                     l.getCountry().toLowerCase())
                     + "client=ms-"
-                    + SystemProperties.get("persist.sys.com.google.clientid", "unknown")
+                    + Partner.getString(this.getContentResolver(), Partner.CLIENT_ID)
                     + "&source=android-" + GOOGLE_SEARCH_SOURCE_SUGGEST + "&q=%s";
         } else {
             QuickSearch_G = url;
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/BrowserProvider.java
index 14d4650..42e22a5 100644
--- a/src/com/android/browser/BrowserProvider.java
+++ b/src/com/android/browser/BrowserProvider.java
@@ -16,6 +16,7 @@
 
 package com.android.browser;
 
+import com.google.android.providers.GoogleSettings.Partner;
 import java.util.Date;
 
 import android.app.ISearchManager;
@@ -23,6 +24,7 @@
 import android.content.ComponentName;
 import android.content.ContentProvider;
 import android.content.ContentUris;
+import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
@@ -43,6 +45,7 @@
 import android.server.search.SearchableInfo;
 import android.text.util.Regex;
 
+
 public class BrowserProvider extends ContentProvider {
 
     private SQLiteOpenHelper mOpenHelper;
@@ -134,9 +137,12 @@
     }
   
 
-    private static CharSequence replaceSystemPropertyInString(CharSequence srcString) {
+    private static CharSequence replaceSystemPropertyInString(Context context, CharSequence srcString) {
         StringBuffer sb = new StringBuffer();
         int lastCharLoc = 0;
+        
+        final String client_id = Partner.getString(context.getContentResolver(), Partner.CLIENT_ID);
+
         for (int i = 0; i < srcString.length(); ++i) {
             char c = srcString.charAt(i);
             if (c == '{') {
@@ -147,16 +153,10 @@
                     char k = srcString.charAt(j);
                     if (k == '}') {
                         String propertyKeyValue = srcString.subSequence(i + 1, j).toString();
-                        // See if the propertyKeyValue specifies a default value
-                        int defaultOffset = propertyKeyValue.indexOf(':');
-                        if (defaultOffset == -1) {
-                            sb.append(SystemProperties.get(propertyKeyValue));
+                        if (propertyKeyValue.equals("CLIENT_ID")) {
+                            sb.append(client_id);
                         } else {
-                            String propertyKey = propertyKeyValue.substring(0, defaultOffset);
-                            String defaultValue = 
-                                    propertyKeyValue.substring(defaultOffset + 1, 
-                                                               propertyKeyValue.length());
-                            sb.append(SystemProperties.get(propertyKey, defaultValue));
+                            sb.append("unknown");
                         }
                         lastCharLoc = j + 1;
                         i = j;
@@ -199,7 +199,7 @@
             int size = bookmarks.length;
             try {
                 for (int i = 0; i < size; i = i + 2) {
-                    CharSequence bookmarkDestination = replaceSystemPropertyInString(bookmarks[i + 1]);
+                    CharSequence bookmarkDestination = replaceSystemPropertyInString(mContext, bookmarks[i + 1]);
                     db.execSQL("INSERT INTO bookmarks (title, url, visits, " +
                             "date, created, bookmark)" + " VALUES('" +
                             bookmarks[i] + "', '" + bookmarkDestination + 
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index d8c5186..0e2c5af 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -16,6 +16,8 @@
 
 package com.android.browser;
 
+import com.google.android.providers.GoogleSettings.Partner;
+
 import android.app.Activity;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -65,8 +67,7 @@
     private boolean saveFormData = true;
     private boolean openInBackground = false;
     private String defaultTextEncodingName;
-    private String homeUrl = "http://www.google.com/m?client=ms-" +
-        SystemProperties.get("persist.sys.com.google.clientid", "unknown");
+    private String homeUrl = "http://www.google.com/m?client=ms-";
     private boolean loginInitialized = false;
     private boolean autoFitPage = true;
     private boolean showDebugSettings = false;
@@ -198,6 +199,8 @@
         // local directory.
         pluginsPath = ctx.getDir("plugins", 0).getPath();
 
+        homeUrl += Partner.getString(ctx.getContentResolver(), Partner.CLIENT_ID);
+
         // Load the defaults from the xml
         // This call is TOO SLOW, need to manually keep the defaults
         // in sync
@@ -206,8 +209,10 @@
     }
 
     /* package */ void syncSharedPreferences(SharedPreferences p) {
+
         homeUrl =
             p.getString(PREF_HOMEPAGE, homeUrl);
+
         loadsImagesAutomatically = p.getBoolean("load_images",
                 loadsImagesAutomatically);
         javaScriptEnabled = p.getBoolean("enable_javascript",
