diff --git a/res/layout/manage_accounts_screen.xml b/res/layout/manage_accounts_screen.xml
index 2150ddf..ce86920 100644
--- a/res/layout/manage_accounts_screen.xml
+++ b/res/layout/manage_accounts_screen.xml
@@ -36,28 +36,4 @@
         android:layout_height="wrap_content"
         android:text="@string/sync_is_failing" />
 
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="horizontal"
-        android:background="@android:drawable/bottom_bar">
-
-        <View
-            android:layout_width="0dip"
-            android:layout_height="match_parent"
-            android:layout_weight="1"/>
-
-        <Button android:id="@+id/add_account_button"
-            android:layout_width="0dip"
-            android:layout_height="wrap_content"
-            android:layout_weight="2"
-            android:layout_marginTop="5dip"
-            android:text="@string/add_account_label" />
-
-        <View
-            android:layout_width="0dip"
-            android:layout_height="match_parent"
-            android:layout_weight="1"/>
-    </LinearLayout>
-
 </LinearLayout>
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index 4d199b8..1a37207 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -86,6 +86,9 @@
 
         mAutoTimePref = (CheckBoxPreference) findPreference(KEY_AUTO_TIME);
         mAutoTimePref.setChecked(autoTimeEnabled);
+        mAutoTimeZonePref = (CheckBoxPreference) findPreference(KEY_AUTO_TIME_ZONE);
+        mAutoTimeZonePref.setChecked(autoTimeZoneEnabled);
+
         mTimePref = findPreference("time");
         mTime24Pref = findPreference("24 hour");
         mTimeZone = findPreference("timezone");
@@ -313,7 +316,7 @@
         try {
             return Settings.System.getInt(getContentResolver(), name) > 0;
         } catch (SettingNotFoundException snfe) {
-            return true;
+            return false;
         }
     }
 
diff --git a/src/com/android/settings/ManageAccountsSettings.java b/src/com/android/settings/ManageAccountsSettings.java
index a6eee09..93053f1 100644
--- a/src/com/android/settings/ManageAccountsSettings.java
+++ b/src/com/android/settings/ManageAccountsSettings.java
@@ -16,9 +16,8 @@
 
 package com.android.settings;
 
-import com.google.android.collect.Maps;
-
 import com.android.settings.SettingsPreferenceFragment.SettingsDialogFragment;
+import com.google.android.collect.Maps;
 
 import android.accounts.Account;
 import android.accounts.AccountManager;
@@ -45,6 +44,9 @@
 import android.preference.PreferenceScreen;
 import android.util.Log;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Button;
@@ -56,7 +58,8 @@
 import java.util.Map;
 
 public class ManageAccountsSettings extends PreferenceFragment
-        implements View.OnClickListener, OnAccountsUpdateListener, DialogCreatable {
+ implements OnAccountsUpdateListener,
+        DialogCreatable {
     private static final String TAG = ManageAccountsSettings.class.getSimpleName();
 
     private static final String AUTHORITIES_FILTER_KEY = "authorities";
@@ -67,6 +70,8 @@
     private static final String BACKGROUND_DATA_CHECKBOX_KEY = "backgroundDataCheckBox";
     private static final int DIALOG_DISABLE_BACKGROUND_DATA = 1;
 
+    private static final int MENU_ADD_ACCOUNT = Menu.FIRST;
+
     private CheckBoxPreference mBackgroundDataCheckBox;
     private PreferenceCategory mManageAccountsCategory;
     private String[] mAuthorities;
@@ -84,6 +89,8 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
+
+        setHasOptionsMenu(true);
     }
 
     @Override
@@ -118,8 +125,6 @@
 
         mManageAccountsCategory = (PreferenceCategory)findPreference(MANAGE_ACCOUNTS_CATEGORY_KEY);
         mAuthorities = activity.getIntent().getStringArrayExtra(AUTHORITIES_FILTER_KEY);
-        mAddAccountButton = (Button)view.findViewById(R.id.add_account_button);
-        mAddAccountButton.setOnClickListener(this);
 
         AccountManager.get(activity).addOnAccountsUpdatedListener(this, null, true);
         updateAuthDescriptions(activity);
@@ -190,6 +195,21 @@
         mDialogFragment.show(getActivity().getFragmentManager(), Integer.toString(dialogId));
     }
 
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        MenuItem actionItem =
+                menu.add(0, MENU_ADD_ACCOUNT, 0, R.string.add_account_label)
+                .setIcon(R.drawable.ic_menu_add);
+        actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM
+                | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        onAddAccountClicked();
+        return true;
+    }
+
     private void setBackgroundDataInt(boolean enabled) {
         final ConnectivityManager connManager = (ConnectivityManager)
                 getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
@@ -309,12 +329,10 @@
         }
     }
 
-    public void onClick(View v) {
-        if (v == mAddAccountButton) {
-            Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
-            intent.putExtra(AUTHORITIES_FILTER_KEY, mAuthorities);
-            startActivity(intent);
-        }
+    public void onAddAccountClicked() {
+        Intent intent = new Intent("android.settings.ADD_ACCOUNT_SETTINGS");
+        intent.putExtra(AUTHORITIES_FILTER_KEY, mAuthorities);
+        startActivity(intent);
     }
 
     /* The logic below is copied from AcountPrefernceBase */
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index bec8241..a00d58f 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -192,4 +192,5 @@
     public static class DockSettingsActivity extends Settings { }
     public static class RunningServicesActivity extends Settings { }
     public static class VoiceInputOutputSettingsActivity extends Settings { }
+    public static class ManageAccountsSettingsActivity extends Settings { }
 }
