diff --git a/res/layout/menu_item.xml b/res/layout/menu_item.xml
index cdee2fd..ebd39ef 100644
--- a/res/layout/menu_item.xml
+++ b/res/layout/menu_item.xml
@@ -9,7 +9,9 @@
     android:layout_width="match_parent"
     android:layout_height="?android:attr/listPreferredItemHeightSmall"
     android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingLeft="?android:attr/listPreferredItemPaddingStart"
     android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:paddingRight="?android:attr/listPreferredItemPaddingEnd"
     android:background="?android:attr/listChoiceBackgroundIndicator">
     <TextView
         android:id="@+id/menu_item_text"
diff --git a/res/xml/accessibility_preferences.xml b/res/xml/accessibility_preferences.xml
index 05403eb..8e1d8f2 100644
--- a/res/xml/accessibility_preferences.xml
+++ b/res/xml/accessibility_preferences.xml
@@ -17,32 +17,34 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <CheckBoxPreference android:key="force_userscalable"
-        android:title="@string/pref_force_userscalable"
-        android:summary="@string/pref_force_userscalable_summary"
-        android:defaultValue="false" />
-
     <PreferenceCategory android:title="@string/pref_font_size_category">
-        <com.android.browser.preferences.FontSizePreview
-            android:title="@string/preview" />
+        <com.android.browser.preferences.FontSizePreview android:title="@string/preview" />
         <com.android.browser.preferences.SeekBarSummaryPreference
-            android:key="text_zoom"
-            android:title="@string/pref_text_zoom"
             android:defaultValue="10"
-            android:max="30" />
+            android:key="text_zoom"
+            android:max="30"
+            android:title="@string/pref_text_zoom" />
 
-        <!-- SWE - remove double tap zoom from settings.
         <com.android.browser.preferences.SeekBarSummaryPreference
-            android:key="double_tap_zoom"
-            android:title="@string/pref_zoom_on_double_tap"
-            android:defaultValue="5"
-            android:max="10" />
-        -->
-        <com.android.browser.preferences.SeekBarSummaryPreference
-            android:key="min_font_size"
-            android:title="@string/pref_min_font_size"
             android:defaultValue="0"
-            android:max="20" />
+            android:key="min_font_size"
+            android:max="20"
+            android:title="@string/pref_min_font_size" />
+
+        <CheckBoxPreference
+            android:defaultValue="false"
+            android:key="force_userscalable"
+            android:summary="@string/pref_force_userscalable_summary"
+            android:title="@string/pref_force_userscalable" />
+
+        <ListPreference
+            android:defaultValue="MEDIUM"
+            android:dialogTitle="@string/pref_default_zoom_dialogtitle"
+            android:entries="@array/pref_default_zoom_choices"
+            android:entryValues="@array/pref_default_zoom_values"
+            android:key="default_zoom"
+            android:title="@string/pref_default_zoom" />
+
     </PreferenceCategory>
 
     <!-- // SWE_TODO: Commenting out inverted rendering settings
diff --git a/res/xml/general_preferences.xml b/res/xml/general_preferences.xml
index b7caa37..7c21b3a 100644
--- a/res/xml/general_preferences.xml
+++ b/res/xml/general_preferences.xml
@@ -137,60 +137,9 @@
 
         </PreferenceScreen>
 
-        <PreferenceScreen android:title="@string/pref_accessibility_title">
-
-            <PreferenceCategory android:title="@string/pref_font_size_category">
-                <com.android.browser.preferences.FontSizePreview android:title="@string/preview" />
-                <com.android.browser.preferences.SeekBarSummaryPreference
-                    android:defaultValue="10"
-                    android:key="text_zoom"
-                    android:max="30"
-                    android:title="@string/pref_text_zoom" />
-
-                <com.android.browser.preferences.SeekBarSummaryPreference
-                    android:defaultValue="0"
-                    android:key="min_font_size"
-                    android:max="20"
-                    android:title="@string/pref_min_font_size" />
-
-                <CheckBoxPreference
-                    android:defaultValue="false"
-                    android:key="force_userscalable"
-                    android:summary="@string/pref_force_userscalable_summary"
-                    android:title="@string/pref_force_userscalable" />
-
-                <ListPreference
-                    android:defaultValue="MEDIUM"
-                    android:dialogTitle="@string/pref_default_zoom_dialogtitle"
-                    android:entries="@array/pref_default_zoom_choices"
-                    android:entryValues="@array/pref_default_zoom_values"
-                    android:key="default_zoom"
-                    android:title="@string/pref_default_zoom" />
-
-            </PreferenceCategory>
-
-            <!-- // SWE_TODO: Commenting out inverted rendering settings
-            <PreferenceCategory android:title="@string/pref_inverted_category">
-
-                <com.android.browser.preferences.InvertedContrastPreview
-                    android:title="@string/preview" />
-
-                <CheckBoxPreference
-                    android:key="inverted"
-                    android:defaultValue="false"
-                    android:title="@string/pref_inverted"
-                    android:summary="@string/pref_inverted_summary" />
-
-                <com.android.browser.preferences.SeekBarSummaryPreference
-                    android:key="inverted_contrast"
-                    android:title="@string/pref_inverted_contrast"
-                    android:dependency="inverted"
-                    android:defaultValue="0"
-                    android:max="20" />
-            </PreferenceCategory>
-            -->
-
-        </PreferenceScreen>
+        <PreferenceScreen
+            android:key="accessibility_menu"
+            android:title="@string/pref_accessibility_title" />
 
 
         <PreferenceScreen android:title="@string/pref_content_title">
diff --git a/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java b/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
index a51c89e..312f813 100644
--- a/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AccessibilityPreferencesFragment.java
@@ -17,9 +17,11 @@
 package com.android.browser.preferences;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.PreferenceFragment;
+import android.util.Log;
 
 import com.android.browser.BrowserSettings;
 import com.android.browser.PreferenceKeys;
@@ -27,23 +29,31 @@
 
 import java.text.NumberFormat;
 
-public class AccessibilityPreferencesFragment
+public class AccessibilityPreferencesFragment extends PreferenceFragment
         implements Preference.OnPreferenceChangeListener {
 
     NumberFormat mFormat;
-    PreferenceFragment mFragment;
 
-    AccessibilityPreferencesFragment(PreferenceFragment fragment) {
-        mFragment = fragment;
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        addPreferencesFromResource(R.xml.accessibility_preferences);
         BrowserSettings settings = BrowserSettings.getInstance();
         mFormat = NumberFormat.getPercentInstance();
 
-        Preference e = mFragment.findPreference(PreferenceKeys.PREF_MIN_FONT_SIZE);
+        Preference e = findPreference(PreferenceKeys.PREF_MIN_FONT_SIZE);
         e.setOnPreferenceChangeListener(this);
         updateMinFontSummary(e, settings.getMinimumFontSize());
-        e = mFragment.findPreference(PreferenceKeys.PREF_TEXT_ZOOM);
+        e = findPreference(PreferenceKeys.PREF_TEXT_ZOOM);
         e.setOnPreferenceChangeListener(this);
         updateTextZoomSummary(e, settings.getTextZoom());
+
+        e = findPreference(PreferenceKeys.PREF_DEFAULT_ZOOM);
+        e.setOnPreferenceChangeListener(this);
+        e.setSummary(getVisualDefaultZoomName(
+                getPreferenceScreen().getSharedPreferences()
+                        .getString(PreferenceKeys.PREF_DEFAULT_ZOOM, null)));
+
         /* SWE: Comment out double tap zoom feature
         e = findPreference(PreferenceKeys.PREF_DOUBLE_TAP_ZOOM);
         e.setOnPreferenceChangeListener(this);
@@ -58,8 +68,28 @@
         */
     }
 
+    private CharSequence getVisualDefaultZoomName(String enumName) {
+        Resources res = getActivity().getResources();
+        CharSequence[] visualNames = res.getTextArray(R.array.pref_default_zoom_choices);
+        CharSequence[] enumNames = res.getTextArray(R.array.pref_default_zoom_values);
+
+        // Sanity check
+        if (visualNames.length != enumNames.length) {
+            return "";
+        }
+
+        int length = enumNames.length;
+        for (int i = 0; i < length; i++) {
+            if (enumNames[i].equals(enumName)) {
+                return visualNames[i];
+            }
+        }
+
+        return "";
+    }
+
     void updateMinFontSummary(Preference pref, int minFontSize) {
-        Context c = mFragment.getActivity();
+        Context c = getActivity();
         pref.setSummary(c.getString(R.string.pref_min_font_size_value, minFontSize));
     }
 
@@ -79,13 +109,18 @@
 
     @Override
     public boolean onPreferenceChange(Preference pref, Object objValue) {
-        if (mFragment.getActivity() == null) {
+        if (getActivity() == null) {
             // We aren't attached, so don't accept preferences changes from the
             // invisible UI.
+            Log.d("AccessibilityPref", "Activity is null");
             return false;
         }
+        Log.d("AccessibilityPref", "User clicked on " + pref.getKey());
 
-        if (PreferenceKeys.PREF_MIN_FONT_SIZE.equals(pref.getKey())) {
+        if (pref.getKey().equals(PreferenceKeys.PREF_DEFAULT_ZOOM)) {
+            pref.setSummary(getVisualDefaultZoomName((String) objValue));
+            return true;
+        } else if (PreferenceKeys.PREF_MIN_FONT_SIZE.equals(pref.getKey())) {
             updateMinFontSummary(pref, BrowserSettings
                     .getAdjustedMinimumFontSize((Integer) objValue));
         }
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index 465366b..9ffa09b 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -59,13 +59,7 @@
         websiteSettings.setFragment(WebsiteSettingsFragment.class.getName());
         websiteSettings.setOnPreferenceClickListener(this);
 
-        Preference e = mFragment.findPreference(PreferenceKeys.PREF_DEFAULT_ZOOM);
-        e.setOnPreferenceChangeListener(this);
-        e.setSummary(getVisualDefaultZoomName(
-                mFragment.getPreferenceScreen().getSharedPreferences()
-                        .getString(PreferenceKeys.PREF_DEFAULT_ZOOM, null)));
-
-        e = mFragment.findPreference(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES);
+        Preference e = mFragment.findPreference(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES);
         e.setOnPreferenceChangeListener(this);
 
         e = mFragment.findPreference(PreferenceKeys.PREF_SEARCH_ENGINE);
@@ -80,6 +74,8 @@
             e.setOnPreferenceClickListener(this);
         }
 
+        e = mFragment.findPreference("accessibility_menu");
+        e.setOnPreferenceClickListener(this);
 
 
         onInitdownloadSettingsPreference();
@@ -183,10 +179,7 @@
             return false;
         }
 
-        if (pref.getKey().equals(PreferenceKeys.PREF_DEFAULT_ZOOM)) {
-            pref.setSummary(getVisualDefaultZoomName((String) objValue));
-            return true;
-        } else if (pref.getKey().equals(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES)) {
+        if (pref.getKey().equals(PreferenceKeys.PREF_RESET_DEFAULT_PREFERENCES)) {
             Boolean value = (Boolean) objValue;
             if (value.booleanValue() == true) {
                 mFragment.startActivity(new Intent(BrowserActivity.ACTION_RESTART, null,
@@ -202,26 +195,6 @@
         return false;
     }
 
-    private CharSequence getVisualDefaultZoomName(String enumName) {
-        Resources res = mFragment.getActivity().getResources();
-        CharSequence[] visualNames = res.getTextArray(R.array.pref_default_zoom_choices);
-        CharSequence[] enumNames = res.getTextArray(R.array.pref_default_zoom_values);
-
-        // Sanity check
-        if (visualNames.length != enumNames.length) {
-            return "";
-        }
-
-        int length = enumNames.length;
-        for (int i = 0; i < length; i++) {
-            if (enumNames[i].equals(enumName)) {
-                return visualNames[i];
-            }
-        }
-
-        return "";
-    }
-
     @Override
     public boolean onPreferenceClick(Preference preference) {
         FragmentManager fragmentManager = mFragment.getFragmentManager();
@@ -242,6 +215,14 @@
             fragmentTransaction.addToBackStack(null);
             fragmentTransaction.commit();
             return true;
+        } else if (preference.getKey().equals("accessibility_menu")) {
+            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
+
+            Fragment newFragment = new AccessibilityPreferencesFragment();
+            fragmentTransaction.replace(mFragment.getId(), newFragment);
+            fragmentTransaction.addToBackStack(null);
+            fragmentTransaction.commit();
+            return true;
         }
 
         return false;
diff --git a/src/com/android/browser/preferences/GeneralPreferencesFragment.java b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
index 1a2d5fe..f280766 100644
--- a/src/com/android/browser/preferences/GeneralPreferencesFragment.java
+++ b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
@@ -67,7 +67,6 @@
     String mCurrentPage;
 
     AdvancedPreferencesFragment mAdvFrag = null;
-    AccessibilityPreferencesFragment mAccessFrag = null;
     PrivacySecurityPreferencesFragment mPrivFrag = null;
 
     @Override
@@ -93,7 +92,6 @@
         autofill.setOnPreferenceClickListener(this);
 
         mAdvFrag = new AdvancedPreferencesFragment(this);
-        mAccessFrag = new AccessibilityPreferencesFragment(this);
         mPrivFrag = new PrivacySecurityPreferencesFragment(this);
     }
 
