diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3c2a5d7..175797e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1635,8 +1635,8 @@
     <!-- Display settings --><skip/>
     <!-- Sound & display settings screen, section header for settings related to display -->
     <string name="display_settings">Display</string>
-    <!-- Sound & display settings screen, accelerometer-based rotation check box label -->
-    <string name="accelerometer_title">Auto-rotate screen</string>
+    <!-- Sound & display settings screen, accelerometer-based rotation lock check box label [CHAR LIMIT=30] -->
+    <string name="accelerometer_title">Rotation lock</string>
     <!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is selected -->
     <string name="accelerometer_summary_on" product="tablet">Switch orientation automatically when rotating tablet</string>
     <!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is selected -->
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index df80f85..198babc 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -56,7 +56,7 @@
     private static final String KEY_NOTIFICATION_PULSE = "notification_pulse";
     private static final String KEY_SCREEN_SAVER = "screensaver";
 
-    private CheckBoxPreference mAccelerometer;
+    private CheckBoxPreference mRotationLock;
     private ListPreference mFontSizePref;
     private CheckBoxPreference mNotificationPulse;
 
@@ -68,7 +68,7 @@
     private ContentObserver mAccelerometerRotationObserver = new ContentObserver(new Handler()) {
         @Override
         public void onChange(boolean selfChange) {
-            updateAccelerometerRotationCheckbox();
+            updateRotationLockCheckbox();
         }
     };
 
@@ -79,8 +79,8 @@
 
         addPreferencesFromResource(R.xml.display_settings);
 
-        mAccelerometer = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER);
-        mAccelerometer.setPersistent(false);
+        mRotationLock = (CheckBoxPreference) findPreference(KEY_ACCELEROMETER);
+        mRotationLock.setPersistent(false);
 
         mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER);
         if (mScreenSaverPreference != null
@@ -223,7 +223,7 @@
     }
 
     private void updateState() {
-        updateAccelerometerRotationCheckbox();
+        updateRotationLockCheckbox();
         readFontSizePreference(mFontSizePref);
         updateScreenSaverSummary();
     }
@@ -235,11 +235,11 @@
                 : R.string.screensaver_settings_summary_off);
     }
 
-    private void updateAccelerometerRotationCheckbox() {
+    private void updateRotationLockCheckbox() {
         if (getActivity() == null) return;
-        mAccelerometer.setChecked(Settings.System.getInt(
+        mRotationLock.setChecked(Settings.System.getInt(
                 getContentResolver(),
-                Settings.System.ACCELEROMETER_ROTATION, 0) != 0);
+                Settings.System.ACCELEROMETER_ROTATION, 0) == 0);
     }
 
     public void writeFontSizePreference(Object objValue) {
@@ -253,11 +253,11 @@
 
     @Override
     public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-        if (preference == mAccelerometer) {
+        if (preference == mRotationLock) {
             try {
                 IWindowManager wm = IWindowManager.Stub.asInterface(
                         ServiceManager.getService(Context.WINDOW_SERVICE));
-                if (mAccelerometer.isChecked()) {
+                if (!mRotationLock.isChecked()) {
                     wm.thawRotation();
                 } else {
                     wm.freezeRotation(Surface.ROTATION_0);
