diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 3606f04..7beab15 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -25,4 +25,13 @@
     <PreferenceCategory android:key="accessibility_services_category"
             android:title="@string/accessibility_services_category" />
 
+    <PreferenceCategory android:key="power_button_category"
+            android:title="@string/accessibility_power_button_category">
+        <CheckBoxPreference
+                android:key="power_button_ends_call"
+                android:title="@string/accessibility_power_button_ends_call"
+                android:summary="@string/accessibility_power_button_ends_call_summary"
+                android:persistent="false" />
+    </PreferenceCategory>
+
 </PreferenceScreen>
diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java
index b2debd2..d78d2d8 100644
--- a/src/com/android/settings/AccessibilitySettings.java
+++ b/src/com/android/settings/AccessibilitySettings.java
@@ -30,10 +30,13 @@
 import android.preference.CheckBoxPreference;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
+import android.preference.PreferenceCategory;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
 import android.text.TextUtils;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
 import android.view.accessibility.AccessibilityManager;
 
 import java.util.HashSet;
@@ -54,8 +57,17 @@
     private static final String ACCESSIBILITY_SERVICES_CATEGORY =
         "accessibility_services_category";
 
+    private static final String POWER_BUTTON_CATEGORY =
+        "power_button_category";
+
+    private final String POWER_BUTTON_ENDS_CALL_CHECKBOX =
+        "power_button_ends_call";
+
     private CheckBoxPreference mToggleCheckBox;
 
+    private PreferenceCategory mPowerButtonCategory;
+    private CheckBoxPreference mPowerButtonEndsCallCheckBox;
+
     private Map<String, ServiceInfo> mAccessibilityServices =
         new LinkedHashMap<String, ServiceInfo>();
 
@@ -72,6 +84,10 @@
         mToggleCheckBox = (CheckBoxPreference) findPreference(
             TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX);
 
+        mPowerButtonCategory = (PreferenceCategory) findPreference(POWER_BUTTON_CATEGORY);
+        mPowerButtonEndsCallCheckBox = (CheckBoxPreference) findPreference(
+            POWER_BUTTON_ENDS_CALL_CHECKBOX);
+
         addAccessibilitServicePreferences();
     }
 
@@ -120,6 +136,22 @@
             // installed and direct them to Market to get TalkBack
             displayNoAppsAlert();
         }
+
+        if (KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER)) {
+            int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(),
+                    Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
+                    Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT);
+            // The checkbox is labeled "Power button ends call"; thus the in-call
+            // Power button behavior is INCALL_POWER_BUTTON_BEHAVIOR_HANGUP if
+            // checked, and INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF if unchecked.
+            boolean powerButtonCheckboxEnabled =
+                    (incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP);
+            mPowerButtonEndsCallCheckBox.setChecked(powerButtonCheckboxEnabled);
+            mPowerButtonEndsCallCheckBox.setEnabled(true);
+        } else {
+            // No POWER key on the current device; this entire category is irrelevant.
+            getPreferenceScreen().removePreference(mPowerButtonCategory);
+        }
     }
 
     @Override
@@ -154,6 +186,15 @@
         if (TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX.equals(key)) {
             boolean isChecked = ((CheckBoxPreference) preference).isChecked();
             handleEnableAccessibilityStateChange((CheckBoxPreference) preference);
+        } 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
+            // Power button behavior is INCALL_POWER_BUTTON_BEHAVIOR_HANGUP if
+            // checked, and INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF if unchecked.
+            Settings.Secure.putInt(getContentResolver(),
+                    Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
+                    (isChecked ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP
+                            : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF));
         } else if (preference instanceof CheckBoxPreference) {
             handleEnableAccessibilityServiceStateChange((CheckBoxPreference) preference);
         }
@@ -290,12 +331,12 @@
      * reader) from Market.
      */
     private void displayNoAppsAlert() {
-        try {
-            PackageManager pm = getPackageManager();
-            ApplicationInfo info = pm.getApplicationInfo("com.android.vending", 0);
+        try {
+            PackageManager pm = getPackageManager();
+            ApplicationInfo info = pm.getApplicationInfo("com.android.vending", 0);
         } catch (NameNotFoundException e) {
-            // This is a no-op if the user does not have Android Market
-            return;
+            // This is a no-op if the user does not have Android Market
+            return;
         }
         AlertDialog.Builder noAppsAlert = new AlertDialog.Builder(this);
         noAppsAlert.setTitle(R.string.accessibility_service_no_apps_title);
@@ -305,7 +346,8 @@
             new DialogInterface.OnClickListener() {
                 public void onClick(DialogInterface dialog, int which) {
                     String screenreaderMarketLink =
-                        SystemProperties.get("ro.screenreader.market", DEFAULT_SCREENREADER_MARKET_LINK);
+                        SystemProperties.get("ro.screenreader.market",
+                                DEFAULT_SCREENREADER_MARKET_LINK);
                     Uri marketUri = Uri.parse(screenreaderMarketLink);
                     Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);
                     startActivity(marketIntent);
