diff --git a/res/layout/app_percentage_item.xml b/res/layout/app_percentage_item.xml
index 41c4060..b5e6db7 100644
--- a/res/layout/app_percentage_item.xml
+++ b/res/layout/app_percentage_item.xml
@@ -39,7 +39,8 @@
         android:layout_gravity="fill_horizontal"
         android:singleLine="true"
         android:ellipsize="marquee"
-        android:textAppearance="?android:attr/textAppearanceMedium" />
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textDirection="locale" />
 
     <TextView
         android:id="@android:id/text1"
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index 30d4f0a..53f25a2 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -81,8 +81,8 @@
     }
 
     private void initUI() {
-        boolean autoTimeEnabled = getAutoState(Settings.System.AUTO_TIME);
-        boolean autoTimeZoneEnabled = getAutoState(Settings.System.AUTO_TIME_ZONE);
+        boolean autoTimeEnabled = getAutoState(Settings.Global.AUTO_TIME);
+        boolean autoTimeZoneEnabled = getAutoState(Settings.Global.AUTO_TIME_ZONE);
 
         Intent intent = getActivity().getIntent();
         boolean isFirstRun = intent.getBooleanExtra(EXTRA_IS_FIRST_RUN, false);
@@ -214,14 +214,14 @@
             updateTimeAndDateDisplay(getActivity());
         } else if (key.equals(KEY_AUTO_TIME)) {
             boolean autoEnabled = preferences.getBoolean(key, true);
-            Settings.System.putInt(getContentResolver(), Settings.System.AUTO_TIME,
+            Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME,
                     autoEnabled ? 1 : 0);
             mTimePref.setEnabled(!autoEnabled);
             mDatePref.setEnabled(!autoEnabled);
         } else if (key.equals(KEY_AUTO_TIME_ZONE)) {
             boolean autoZoneEnabled = preferences.getBoolean(key, true);
-            Settings.System.putInt(
-                    getContentResolver(), Settings.System.AUTO_TIME_ZONE, autoZoneEnabled ? 1 : 0);
+            Settings.Global.putInt(
+                    getContentResolver(), Settings.Global.AUTO_TIME_ZONE, autoZoneEnabled ? 1 : 0);
             mTimeZone.setEnabled(!autoZoneEnabled);
         }
     }
@@ -331,7 +331,7 @@
 
     private boolean getAutoState(String name) {
         try {
-            return Settings.System.getInt(getContentResolver(), name) > 0;
+            return Settings.Global.getInt(getContentResolver(), name) > 0;
         } catch (SettingNotFoundException snfe) {
             return false;
         }
diff --git a/src/com/android/settings/DateTimeSettingsSetupWizard.java b/src/com/android/settings/DateTimeSettingsSetupWizard.java
index 977d6c6..87b1cae 100644
--- a/src/com/android/settings/DateTimeSettingsSetupWizard.java
+++ b/src/com/android/settings/DateTimeSettingsSetupWizard.java
@@ -185,7 +185,7 @@
                 }
             }
             if (mAutoDateTimeButton != null) {
-                Settings.System.putInt(getContentResolver(), Settings.System.AUTO_TIME,
+                Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME,
                       mAutoDateTimeButton.isChecked() ? 1 : 0);
                 if (!mAutoDateTimeButton.isChecked()) {
                     DateTimeSettings.setDate(mDatePicker.getYear(), mDatePicker.getMonth(),
@@ -209,8 +209,8 @@
         /*if (buttonView == mAutoTimeZoneButton) {
             // In XL screen, we save all the state only when the next button is pressed.
             if (!mUsingXLargeLayout) {
-                Settings.System.putInt(getContentResolver(),
-                        Settings.System.AUTO_TIME_ZONE,
+                Settings.Global.putInt(getContentResolver(),
+                        Settings.Global.AUTO_TIME_ZONE,
                         isChecked ? 1 : 0);
             }
             mTimeZone.setEnabled(!autoEnabled);
@@ -220,8 +220,8 @@
             }
         } else */
         if (buttonView == mAutoDateTimeButton) {
-            Settings.System.putInt(getContentResolver(),
-                    Settings.System.AUTO_TIME,
+            Settings.Global.putInt(getContentResolver(),
+                    Settings.Global.AUTO_TIME,
                     isChecked ? 1 : 0);
             mTimePicker.setEnabled(!autoEnabled);
             mDatePicker.setEnabled(!autoEnabled);
@@ -296,7 +296,7 @@
 
     private boolean isAutoDateTimeEnabled() {
         try {
-            return Settings.System.getInt(getContentResolver(), Settings.System.AUTO_TIME) > 0;
+            return Settings.Global.getInt(getContentResolver(), Settings.Global.AUTO_TIME) > 0;
         } catch (SettingNotFoundException e) {
             return true;
         }
@@ -305,8 +305,8 @@
     /*
     private boolean isAutoTimeZoneEnabled() {
         try {
-            return Settings.System.getInt(getContentResolver(),
-                    Settings.System.AUTO_TIME_ZONE) > 0;
+            return Settings.Global.getInt(getContentResolver(),
+                    Settings.Global.AUTO_TIME_ZONE) > 0;
         } catch (SettingNotFoundException e) {
             return true;
         }
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 14b2833..fe1bd90 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -423,6 +423,9 @@
         if (pref == mMePreference) {
             Intent editProfile = new Intent(Intent.ACTION_EDIT);
             editProfile.setData(ContactsContract.Profile.CONTENT_URI);
+            // To make sure that it returns back here when done
+            // TODO: Make this a proper API
+            editProfile.putExtra("finishActivityOnSaveCompleted", true);
             startActivity(editProfile);
         }
         return false;
