diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5839934..24161c2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2611,12 +2611,14 @@
     <string name="accessibility_settings">Accessibility</string>
     <!-- Settings title for accessibility settings screen -->
     <string name="accessibility_settings_title">Accessibility settings</string>
-    <!-- Settings summary for accessibility settings -->
+    <!-- Settings summary for accessibility settings [CHAR LIMIT=40] -->
     <string name="accessibility_settings_summary">Manage accessibility options</string>
-    <!-- Setting Checkbox title for enabling accessibility -->
-    <string name="toggle_accessibility_title">Accessibility</string>
-    <!-- Setting accessibility services category -->
+    <!-- Setting Checkbox title for enabling accessibility large text [CHAR LIMIT=25] -->
+    <string name="toggle_large_text_title">Large text</string>
+    <!-- Setting accessibility services category [CHAR LIMIT=25] -->
     <string name="accessibility_services_category">Accessibility services</string>
+    <!-- Setting Checkbox title for enabling accessibility services [CHAR LIMIT=40] -->
+    <string name="toggle_accessibility_title">Allow accessibility services</string>
     <!-- Message for announcing the lack of installed accessibility services. -->
     <string name="no_accessibility_services_summary">No installed accessibility services.</string>
     <!-- Warning message about security implications of enabling an accessibility service,
@@ -2638,8 +2640,6 @@
         applications installed.\n\nYou can download a screen reader for your device from Android
         Market.\n\nClick "OK" to install the screen reader.</string>
 
-    <!-- Accessibility settings: Webpage accessibility scripts category [CHAR LIMIT=25] -->
-    <string name="accessibility_script_injection_category">Accessibility scripts</string>
     <!-- Accessibility settings: Checkbox title for enabling download of accessibility scripts [CHAR LIMIT=40] -->
     <string name="accessibility_script_injection_enabled">Download accessibility scripts</string>
     <!-- Accessibility settings: Checkbox summary for enabling download of accessibility scripts [CHAR LIMIT=65] -->
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 771b69e..90aef84 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -19,20 +19,23 @@
         android:title="@string/accessibility_settings_title">
 
     <CheckBoxPreference
-            android:key="toggle_accessibility_service_checkbox"
-            android:title="@string/toggle_accessibility_title"
+            android:key="toggle_large_text_checkbox"
+            android:title="@string/toggle_large_text_title"
             android:persistent="false"/>
 
     <PreferenceCategory android:key="accessibility_services_category"
-            android:title="@string/accessibility_services_category" />
-
-    <PreferenceCategory android:key="accessibility_script_injection_category"
-            android:title="@string/accessibility_script_injection_category">
+            android:title="@string/accessibility_services_category">
+        <CheckBoxPreference
+                android:key="toggle_accessibility_service_checkbox"
+                android:title="@string/toggle_accessibility_title"
+                android:persistent="false"
+                android:order="-10000"/>
         <CheckBoxPreference
                 android:key="toggle_accessibility_script_injection_checkbox"
                 android:title="@string/accessibility_script_injection_enabled"
                 android:summary="@string/accessibility_script_injection_enabled_summary"
-                android:persistent="false" />
+                android:persistent="false"
+                android:order="10000" />
     </PreferenceCategory>
 
     <PreferenceCategory android:key="power_button_category"
diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java
index 9a0db5d..bbb3678 100644
--- a/src/com/android/settings/AccessibilitySettings.java
+++ b/src/com/android/settings/AccessibilitySettings.java
@@ -17,14 +17,17 @@
 package com.android.settings;
 
 import android.accessibilityservice.AccessibilityServiceInfo;
+import android.app.ActivityManagerNative;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.Service;
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.pm.ServiceInfo;
+import android.content.res.Configuration;
 import android.net.Uri;
 import android.os.Bundle;
+import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
@@ -51,7 +54,12 @@
     private static final String DEFAULT_SCREENREADER_MARKET_LINK =
         "market://search?q=pname:com.google.android.marvin.talkback";
 
-    private final String TOGGLE_ACCESSIBILITY_CHECKBOX =
+    private static final float LARGE_FONT_SCALE = 1.3f;
+
+    private static final String TOGGLE_LARGE_TEXT_CHECKBOX =
+        "toggle_large_text_checkbox";
+
+    private static final String TOGGLE_ACCESSIBILITY_CHECKBOX =
         "toggle_accessibility_service_checkbox";
 
     private static final String ACCESSIBILITY_SERVICES_CATEGORY =
@@ -66,10 +74,10 @@
     private static final String POWER_BUTTON_ENDS_CALL_CHECKBOX =
         "power_button_ends_call";
 
-    private final String KEY_TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX =
+    private static final String KEY_TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX =
         "key_toggle_accessibility_service_checkbox";
 
-    private final String KEY_LONG_PRESS_TIMEOUT_LIST_PREFERENCE =
+    private static final String KEY_LONG_PRESS_TIMEOUT_LIST_PREFERENCE =
         "long_press_timeout_list_preference";
 
     private static final int DIALOG_ID_DISABLE_ACCESSIBILITY = 1;
@@ -77,6 +85,7 @@
     private static final int DIALOG_ID_ENABLE_ACCESSIBILITY_SERVICE = 3;
     private static final int DIALOG_ID_NO_ACCESSIBILITY_SERVICES = 4;
 
+    private CheckBoxPreference mToggleLargeTextCheckBox;
     private CheckBoxPreference mToggleAccessibilityCheckBox;
     private CheckBoxPreference mToggleScriptInjectionCheckBox;
     private SettingsCheckBoxPreference mToggleAccessibilityServiceCheckBox;
@@ -88,6 +97,8 @@
 
     private ListPreference mLongPressTimeoutListPreference;
 
+    private final Configuration mCurConfig = new Configuration();
+
     private Map<String, AccessibilityServiceInfo> mAccessibilityServices =
         new LinkedHashMap<String, AccessibilityServiceInfo>();
 
@@ -100,6 +111,9 @@
 
         addPreferencesFromResource(R.xml.accessibility_settings);
 
+        mToggleLargeTextCheckBox = (CheckBoxPreference) findPreference(
+                TOGGLE_LARGE_TEXT_CHECKBOX);
+
         mAccessibilityServicesCategory =
             (PreferenceGroup) findPreference(ACCESSIBILITY_SERVICES_CATEGORY);
 
@@ -145,7 +159,7 @@
 
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
-        addAccessibilitServicePreferences();
+        addAccessibilityServicePreferences();
 
         final HashSet<String> enabled = new HashSet<String>();
         String settingValue = Settings.Secure.getString(getContentResolver(),
@@ -192,6 +206,8 @@
             showDialog(DIALOG_ID_NO_ACCESSIBILITY_SERVICES);
         }
 
+        readFontSizePreference();
+
         super.onActivityCreated(savedInstanceState);
     }
 
@@ -251,10 +267,10 @@
         int count = mAccessibilityServicesCategory.getPreferenceCount();
         for (int i = 0; i < count; i++) {
             Preference pref = mAccessibilityServicesCategory.getPreference(i);
-            pref.setEnabled(isEnabled);
+            if (pref != mToggleAccessibilityCheckBox) {
+                pref.setEnabled(isEnabled);
+            }
         }
-
-        mToggleScriptInjectionCheckBox.setEnabled(isEnabled);
     }
 
     @Override
@@ -263,6 +279,13 @@
 
         if (TOGGLE_ACCESSIBILITY_CHECKBOX.equals(key)) {
             handleEnableAccessibilityStateChange((CheckBoxPreference) preference);
+        } else if (TOGGLE_LARGE_TEXT_CHECKBOX.equals(key)) {
+            try {
+                mCurConfig.fontScale = mToggleLargeTextCheckBox.isChecked()
+                        ? LARGE_FONT_SCALE : 1;
+                ActivityManagerNative.getDefault().updateConfiguration(mCurConfig);
+            } catch (RemoteException e) {
+            }
         } else if (POWER_BUTTON_ENDS_CALL_CHECKBOX.equals(key)) {
             boolean isChecked = ((CheckBoxPreference) preference).isChecked();
             // The checkbox is labeled "Power button ends call"; thus the in-call
@@ -355,20 +378,22 @@
     /**
      * Adds {@link CheckBoxPreference} for enabling or disabling an accessibility services.
      */
-    private void addAccessibilitServicePreferences() {
+    private void addAccessibilityServicePreferences() {
         AccessibilityManager accessibilityManager =
             (AccessibilityManager) getSystemService(Service.ACCESSIBILITY_SERVICE);
 
         List<AccessibilityServiceInfo> installedServices =
             accessibilityManager.getInstalledAccessibilityServiceList();
 
-        if (installedServices.isEmpty()) {
-            getPreferenceScreen().removePreference(mAccessibilityServicesCategory);
-            return;
+        for (int i = 0; i < mAccessibilityServicesCategory.getPreferenceCount(); i++) {
+            Preference pref = mAccessibilityServicesCategory.getPreference(i);
+            if (pref != mToggleAccessibilityCheckBox
+                    && pref != mToggleScriptInjectionCheckBox) {
+                mAccessibilityServicesCategory.removePreference(pref);
+                i--;
+            }
         }
 
-        getPreferenceScreen().addPreference(mAccessibilityServicesCategory);
-
         for (int i = 0, count = installedServices.size(); i < count; ++i) {
             AccessibilityServiceInfo accessibilityServiceInfo = installedServices.get(i);
             String key = accessibilityServiceInfo.getId();
@@ -385,6 +410,7 @@
                 SettingsCheckBoxPreference preference = new SettingsCheckBoxPreference(
                         getActivity(), settingsIntent);
                 preference.setKey(key);
+                preference.setOrder(i);
                 ServiceInfo serviceInfo = accessibilityServiceInfo.getResolveInfo().serviceInfo;
                 preference.setTitle(serviceInfo.loadLabel(getActivity().getPackageManager()));
                 mAccessibilityServicesCategory.addPreference(preference);
@@ -392,6 +418,16 @@
         }
     }
 
+    public void readFontSizePreference() {
+        try {
+            mCurConfig.updateFrom(
+                ActivityManagerNative.getDefault().getConfiguration());
+        } catch (RemoteException e) {
+        }
+        mToggleLargeTextCheckBox.setChecked(Float.compare(mCurConfig.fontScale,
+                LARGE_FONT_SCALE) == 0);
+    }
+
     @Override
     public Dialog onCreateDialog(int dialogId) {
         switch (dialogId) {
