diff --git a/src/com/android/browser/Browser.java b/src/com/android/browser/Browser.java
index 5428494..01b9706 100644
--- a/src/com/android/browser/Browser.java
+++ b/src/com/android/browser/Browser.java
@@ -22,7 +22,7 @@
 import android.util.Log;
 import android.os.Process;
 
-import org.codeaurora.swe.CookieSyncManager;
+import org.codeaurora.swe.Engine;
 
 import com.android.browser.BrowserConfig;
 
@@ -45,16 +45,16 @@
 
         // SWE: Avoid initializing databases for sandboxed processes.
         // Must have INITIALIZE_DATABASE permission in AndroidManifest.xml only for browser process
-        final String INITIALIZE_DATABASE= BrowserConfig.AUTHORITY +
+        final String INITIALIZE_DATABASE = BrowserConfig.AUTHORITY +
                                             ".permission.INITIALIZE_DATABASE";
         final Context context = getApplicationContext();
-        if (context.checkPermission(INITIALIZE_DATABASE,
-              Process.myPid(), Process.myUid()) == PackageManager.PERMISSION_GRANTED) {
-
-                // create CookieSyncManager with current Context
-                CookieSyncManager.createInstance(this);
-                BrowserSettings.initialize(getApplicationContext());
-                Preloader.initialize(getApplicationContext());
+        boolean isActivityContext = (context.checkPermission(INITIALIZE_DATABASE,
+              Process.myPid(), Process.myUid()) == PackageManager.PERMISSION_GRANTED);
+        if (isActivityContext) {
+            // Initialize the SWE engine.
+            Engine.initialize(context);
+            BrowserSettings.initialize(context);
+            Preloader.initialize(context);
         }
     }
 }
diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java
index ebc08a4..9e19d11 100644
--- a/src/com/android/browser/BrowserPreferencesPage.java
+++ b/src/com/android/browser/BrowserPreferencesPage.java
@@ -26,7 +26,10 @@
 import com.android.browser.preferences.BandwidthPreferencesFragment;
 import com.android.browser.preferences.DebugPreferencesFragment;
 
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 public class BrowserPreferencesPage extends PreferenceActivity {
 
@@ -99,4 +102,19 @@
         return intent;
     }
 
+    private static final Set<String> sKnownFragments = new HashSet<String>(Arrays.asList(
+        "com.android.browser.preferences.GeneralPreferencesFragment",
+        "com.android.browser.preferences.PrivacySecurityPreferencesFragment",
+        "com.android.browser.preferences.AccessibilityPreferencesFragment",
+        "com.android.browser.preferences.AdvancedPreferencesFragment",
+        "com.android.browser.preferences.BandwidthPreferencesFragment",
+        "com.android.browser.preferences.LabPreferencesFragment",
+        "com.android.browser.preferences.AboutPreferencesFragment"));
+
+    @Override
+    protected boolean isValidFragment(String fragmentName) {
+        return sKnownFragments.contains(fragmentName);
+    }
+
+
 }
diff --git a/src/com/android/browser/Preloader.java b/src/com/android/browser/Preloader.java
index 99909b3..5f90487 100644
--- a/src/com/android/browser/Preloader.java
+++ b/src/com/android/browser/Preloader.java
@@ -53,11 +53,6 @@
         mHandler = new Handler(Looper.getMainLooper());
         mSession = null;
         mFactory = new BrowserWebViewFactory(context);
-
-        // Creating dummy Webview for browser to force loading of library;
-        // This will thereby prevent any singleton calls invoked directly
-        // even without the webview creation
-        (mFactory.instantiateWebView(null, android.R.attr.webViewStyle, false)).destroy();
     }
 
     private PreloaderSession getSession(String id) {
