diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index b11e0c6..74765d5 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -529,6 +529,13 @@
         }
     }
 
+    public WebView getTopWebView(){
+        if (mController!= null)
+            return mController.getCurrentTopWebView();
+
+        return null;
+    }
+
     public void clearPasswords() {
         // Clear password store maintained by SWE engine
         WebSettings settings = null;
diff --git a/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java b/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
index 7dd20ae..14e1c98 100644
--- a/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
@@ -25,20 +25,16 @@
 import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 
-import android.webkit.WebView;
 import java.text.NumberFormat;
 
 public class AccessibilityPreferencesFragment extends PreferenceFragment
         implements Preference.OnPreferenceChangeListener {
 
     NumberFormat mFormat;
-    // Used to pause/resume timers, which are required for WebViewPreview
-    WebView mControlWebView;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mControlWebView = new WebView(getActivity());
         addPreferencesFromResource(R.xml.accessibility_preferences);
         BrowserSettings settings = BrowserSettings.getInstance();
         mFormat = NumberFormat.getPercentInstance();
@@ -61,25 +57,6 @@
         */
     }
 
-    @Override
-    public void onResume() {
-        super.onResume();
-        mControlWebView.resumeTimers();
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        mControlWebView.pauseTimers();
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        mControlWebView.destroy();
-        mControlWebView = null;
-    }
-
     void updateMinFontSummary(Preference pref, int minFontSize) {
         Context c = getActivity();
         pref.setSummary(c.getString(R.string.pref_min_font_size_value, minFontSize));
diff --git a/src/com/android/browser/preferences/FontSizePreview.java b/src/com/android/browser/preferences/FontSizePreview.java
index 8825f3d..67d0bd7 100644
--- a/src/com/android/browser/preferences/FontSizePreview.java
+++ b/src/com/android/browser/preferences/FontSizePreview.java
@@ -17,20 +17,16 @@
 package com.android.browser.preferences;
 
 import android.content.Context;
-import android.content.res.Resources;
 import android.util.AttributeSet;
-import android.view.View;
-import android.webkit.WebSettings;
-import android.webkit.WebView;
-
 import com.android.browser.BrowserSettings;
 import com.android.browser.R;
 
+import org.codeaurora.swe.WebSettings;
+
 public class FontSizePreview extends WebViewPreview {
 
-    static final String HTML_FORMAT = "<!DOCTYPE html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><style type=\"text/css\">p { margin: 2px auto;}</style><body><p style=\"font-size: 4pt\">%s</p><p style=\"font-size: 8pt\">%s</p><p style=\"font-size: 10pt\">%s</p><p style=\"font-size: 14pt\">%s</p><p style=\"font-size: 18pt\">%s</p></body></html>";
-
-    String mHtml;
+    //default size for normal sized preview text
+    static final int DEFAULT_FONT_PREVIEW_SIZE = 13;
 
     public FontSizePreview(
             Context context, AttributeSet attrs, int defStyle) {
@@ -46,28 +42,15 @@
     }
 
     @Override
-    protected void init(Context context) {
-        super.init(context);
-        Resources res = context.getResources();
-        Object[] visualNames = res.getStringArray(R.array.pref_text_size_choices);
-        mHtml = String.format(HTML_FORMAT, visualNames);
-    }
-
-    @Override
     protected void updatePreview(boolean forceReload) {
-        if (mWebView == null) return;
+        if (mWebView == null || mTextView == null)
+            return;
 
         WebSettings ws = mWebView.getSettings();
         BrowserSettings bs = BrowserSettings.getInstance();
         ws.setMinimumFontSize(bs.getMinimumFontSize());
         ws.setTextZoom(bs.getTextZoom());
-        mWebView.loadDataWithBaseURL(null, mHtml, "text/html", "utf-8", null);
+        mTextView.setText(R.string.pref_sample_font_size);
+        mTextView.setTextSize(DEFAULT_FONT_PREVIEW_SIZE * bs.getTextZoom() / 100);
     }
-
-    @Override
-    protected void setupWebView(WebView view) {
-        super.setupWebView(view);
-        view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
-    }
-
 }
diff --git a/src/com/android/browser/preferences/WebViewPreview.java b/src/com/android/browser/preferences/WebViewPreview.java
index 1f938f0..03ffcb2 100644
--- a/src/com/android/browser/preferences/WebViewPreview.java
+++ b/src/com/android/browser/preferences/WebViewPreview.java
@@ -24,17 +24,18 @@
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
-import android.webkit.WebView;
-
+import android.widget.TextView;
+import com.android.browser.BrowserSettings;
 import com.android.browser.R;
+import org.codeaurora.swe.WebView;
 
 public abstract class WebViewPreview extends Preference
         implements OnSharedPreferenceChangeListener {
 
+    protected TextView mTextView;
     protected WebView mWebView;
 
-    public WebViewPreview(
-            Context context, AttributeSet attrs, int defStyle) {
+    public WebViewPreview(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
         init(context);
     }
@@ -51,32 +52,23 @@
 
     protected void init(Context context) {
         setLayoutResource(R.layout.webview_preview);
+        BrowserSettings bs = BrowserSettings.getInstance();
+        mWebView = bs.getTopWebView();
     }
 
     protected abstract void updatePreview(boolean forceReload);
 
-    protected void setupWebView(WebView view) {}
-
-    @Override
-    protected View onCreateView(ViewGroup parent) {
-        View root = super.onCreateView(parent);
-        WebView webView = (WebView) root.findViewById(R.id.webview);
-        // Tell WebView to really, truly ignore all touch events. No, seriously,
-        // ignore them all. And don't show scrollbars.
-        webView.setFocusable(false);
-        webView.setFocusableInTouchMode(false);
-        webView.setClickable(false);
-        webView.setLongClickable(false);
-        webView.setHorizontalScrollBarEnabled(false);
-        webView.setVerticalScrollBarEnabled(false);
-        setupWebView(webView);
-        return root;
-    }
-
     @Override
     protected void onBindView(View view) {
         super.onBindView(view);
-        mWebView = (WebView) view.findViewById(R.id.webview);
+        mTextView = (TextView) view.findViewById(R.id.text_size_preview);
+        // Ignore all touch events & don't show scrollbars
+        mTextView.setFocusable(false);
+        mTextView.setFocusableInTouchMode(false);
+        mTextView.setClickable(false);
+        mTextView.setLongClickable(false);
+        mTextView.setHorizontalScrollBarEnabled(false);
+        mTextView.setVerticalScrollBarEnabled(false);
         updatePreview(true);
     }
 
@@ -93,8 +85,8 @@
     }
 
     @Override
-    public void onSharedPreferenceChanged(
-            SharedPreferences sharedPreferences, String key) {
+    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
+                                          String key) {
         updatePreview(false);
     }
 
