diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 41dd0f8..5eec93e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -224,7 +224,7 @@
         </activity-alias>
 
         <activity android:name="DateTimeSettingsSetupWizard" android:label="@string/date_and_time"
-            android:screenOrientation="portrait">
+            android:screenOrientation="behind">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
             </intent-filter>
diff --git a/res/layout-xlarge/date_time_settings_setupwizard.xml b/res/layout-xlarge/date_time_settings_setupwizard.xml
new file mode 100644
index 0000000..3985217
--- /dev/null
+++ b/res/layout-xlarge/date_time_settings_setupwizard.xml
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+  -->
+<!-- TODO: too many LinearLayout. -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:layout_width="fill_parent"
+              android:layout_height="fill_parent"
+              android:paddingTop="70dip"
+              android:paddingBottom="40dip"
+              android:paddingLeft="60dip"
+              android:paddingRight="60dip">
+
+    <!-- Title: Set date & time-->
+    <TextView android:id="@+id/title"
+              android:layout_width="fill_parent"
+              android:layout_height="wrap_content"
+              android:layout_weight="0"
+              android:gravity="center"
+              android:layout_marginBottom="10dip"
+              android:layout_alignParentTop="true"
+              android:textSize="64dip"
+              android:textColor="#FF30FF30"
+              android:text="@string/date_and_time_settings_title"/>
+
+    <LinearLayout android:id="@+id/main"
+                  android:orientation="horizontal"
+                  android:layout_width="fill_parent"
+                  android:layout_height="fill_parent"
+                  android:layout_weight="1">
+        <!-- Left side: time zone setting -->
+        <LinearLayout android:orientation="vertical"
+                      android:layout_width="0px"
+                      android:layout_weight="1"
+                      android:layout_height="fill_parent">
+            <!-- TODO: replace with appropratie UI component -->
+            <CheckBox android:id="@+id/time_zone_auto"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:gravity="right|center_horizontal"
+                      android:layout_marginBottom="5dip"
+                      android:textSize="32dip"
+                      android:text="@string/time_zone_auto_stub"/>
+
+            <!-- text should manually be set. -->
+            <Button android:id="@+id/current_time_zone"
+                    android:layout_width="fill_parent"
+                    android:layout_height="wrap_content"
+                    android:textSize="24dip"
+                    android:layout_alignParentTop="true" />
+            <LinearLayout android:id="@+id/zone_picker"
+                          android:orientation="vertical"
+                          android:layout_width="fill_parent"
+                          android:layout_height="fill_parent"
+                          android:paddingLeft="10dip"
+                          android:paddingBottom="20dip"
+                          android:gravity="center"
+                          android:visibility="gone"
+                          android:clickable="true">
+                <fragment android:id="@+id/zone_picker_fragment"
+                          class="com.android.settings.ZonePicker"
+                          android:layout_width="fill_parent"
+                          android:layout_height="wrap_content" />
+            </LinearLayout>
+        </LinearLayout>
+
+        <!-- Right side: date & time setting -->
+        <LinearLayout android:orientation="vertical"
+                      android:layout_width="0px"
+                      android:layout_weight="1"
+                      android:layout_height="fill_parent">
+
+            <!-- TODO: replace with appropratie UI component -->
+            <CheckBox android:id="@+id/date_time_auto"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:gravity="right|center_horizontal"
+                      android:textSize="32dip"
+                      android:text="@string/date_time_auto" />
+
+            <LinearLayout android:orientation="horizontal"
+                          android:layout_width="fill_parent"
+                          android:layout_height="wrap_content">
+                <TimePicker android:id="@+id/time_picker"
+                            android:layout_width="0px"
+                            android:layout_weight=".5"
+                            android:layout_height="wrap_content"
+                            android:visibility="visible"/>
+                <DatePicker android:id="@+id/date_picker"
+                            android:layout_width="0px"
+                            android:layout_weight=".5"
+                            android:layout_height="wrap_content"/>
+            </LinearLayout>
+        </LinearLayout>
+    </LinearLayout>
+
+    <LinearLayout android:id="@+id/bottom"
+                  android:orientation="horizontal"
+                  android:layout_width="fill_parent"
+                  android:gravity="center"
+                  android:layout_height="wrap_content"
+                  android:layout_weight="0">
+        <Button android:id="@+id/skip_button"
+                android:layout_width="300dip"
+                android:layout_height="wrap_content"
+                android:layout_alignParentBottom="true"
+                android:layout_alignParentLeft="true"
+                android:layout_marginRight="50dip"
+                android:textSize="32dip"
+                android:text="@string/skip_label"/>
+
+        <Button android:id="@+id/next_button"
+                android:layout_width="300dip"
+                android:layout_height="wrap_content"
+                android:layout_alignParentBottom="true"
+                android:layout_alignParentRight="true"
+                android:layout_marginLeft="50dip"
+                android:textSize="32dip"
+                android:text="@string/next_label" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/res/layout/date_time_settings_setupwizard.xml b/res/layout/date_time_settings_setupwizard.xml
index 930e199..283a28e 100644
--- a/res/layout/date_time_settings_setupwizard.xml
+++ b/res/layout/date_time_settings_setupwizard.xml
@@ -15,30 +15,24 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_height="match_parent"
-        android:layout_width="match_parent"
+        android:layout_height="fill_parent"
+        android:layout_width="fill_parent"
         android:orientation="vertical">
-     
-    <LinearLayout
-        android:orientation="vertical"
-        android:layout_height="0dip"
-        android:layout_width="match_parent"
-        android:layout_weight="1"
-        android:gravity="left">
-        
-        <ListView android:id="@android:id/list"
-            android:layout_width="match_parent" 
-            android:layout_height="match_parent"
-            android:drawSelectorOnTop="false"
-            android:paddingTop="2dip"
-        />
-        
+
+    <LinearLayout android:layout_height="0px"
+                  android:layout_weight="1"
+                  android:layout_width="fill_parent"
+                  android:orientation="vertical">
+        <fragment android:id="@+id/date_time_settings_fragment"
+                  class="com.android.settings.DateTimeSettings"
+                  android:layout_width="fill_parent"
+                  android:layout_height="fill_parent" />
     </LinearLayout>
-    
-    <RelativeLayout
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        android:background="@android:drawable/bottom_bar">
+
+    <RelativeLayout android:layout_height="wrap_content"
+                    android:layout_weight="0"
+                    android:layout_width="fill_parent"
+                    android:background="@android:drawable/bottom_bar">
         
         <Button android:id="@+id/next_button"
             android:layout_width="150dip"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 798bb36..b2a1865 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -421,7 +421,8 @@
     <string name="sdcard_settings_scanning_status">Scanning SD card for media\u2026</string>
     <!-- Message when the SD card is mounted as read only -->
     <string name="sdcard_settings_read_only_status">SD card mounted read-only</string>
-
+    <!-- SetupWizard strings used by DateTimeSettingsSetupWizard.  The button label for going to the next screen without storing the setting. [CHAR LIMIT=5] -->
+    <string name="skip_label" >Skip</string>
     <!-- SetupWizard strings used by DateTimeSettingsSetupWizard.  The button label for going to the next screen. -->
     <string name="next_label">Next</string>
 
@@ -2686,12 +2687,6 @@
          Used in Wifi Setup For Setup Wizard with XL screen. -->
     <string name="wifi_setup_status_connected">Connected</string>
 
-    <!-- Do not translate. Just a temprary stub. -->
-    <string name="time_zone_manual_select_enabler" translatable="false">Experimental text</string>
-    <!-- Do not translate. Just a temprary stub. -->
-    <string name="date_time_manual_select_enabler" translatable="false">Experimental text</string>
-    <!-- Do not translate. Just a temprary stub. -->
-    <string name="date_time_setup_skip" translatable="false">Skip</string>
-    <!-- Do not translate. Just a temprary stub. -->
-    <string name="date_time_setup_next" translatable="false">Next</string>
+    <!-- Do not translate. This is a stub which will be removed soon. -->
+    <string name="time_zone_auto_stub" translatable="false">Select Time Zone</string>
 </resources>
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index 61cc613..ecf8520 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -43,12 +43,15 @@
 
 public class DateTimeSettings extends SettingsPreferenceFragment
         implements OnSharedPreferenceChangeListener,
-                TimePickerDialog.OnTimeSetListener , DatePickerDialog.OnDateSetListener {
+                TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener {
 
     private static final String HOURS_12 = "12";
     private static final String HOURS_24 = "24";
     
+    // Used for showing the current date format, which looks like "12/31/2010", "2010/12/13", etc.
+    // The date value is dummy (independent of actual date).
     private Calendar mDummyDate;
+
     private static final String KEY_DATE_FORMAT = "date_format";
     private static final String KEY_AUTO_TIME = "auto_time";
 
@@ -143,42 +146,25 @@
     
     private void updateTimeAndDateDisplay() {
         java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(getActivity());
-        Date now = Calendar.getInstance().getTime();
+        final Calendar now = Calendar.getInstance();
         Date dummyDate = mDummyDate.getTime();
-        mTimePref.setSummary(DateFormat.getTimeFormat(getActivity()).format(now));
-        mTimeZone.setSummary(getTimeZoneText());
-        mDatePref.setSummary(shortDateFormat.format(now));
+        mTimePref.setSummary(DateFormat.getTimeFormat(getActivity()).format(now.getTime()));
+        mTimeZone.setSummary(getTimeZoneText(now.getTimeZone()));
+        mDatePref.setSummary(shortDateFormat.format(now.getTime()));
         mDateFormat.setSummary(shortDateFormat.format(dummyDate));
     }
 
     @Override
     public void onDateSet(DatePicker view, int year, int month, int day) {
-        Calendar c = Calendar.getInstance();
-
-        c.set(Calendar.YEAR, year);
-        c.set(Calendar.MONTH, month);
-        c.set(Calendar.DAY_OF_MONTH, day);
-        long when = c.getTimeInMillis();
-
-        if (when / 1000 < Integer.MAX_VALUE) {
-            SystemClock.setCurrentTimeMillis(when);
-        }
+        setDate(year, month, day);
         updateTimeAndDateDisplay();
     }
 
     @Override
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
-        Calendar c = Calendar.getInstance();
-
-        c.set(Calendar.HOUR_OF_DAY, hourOfDay);
-        c.set(Calendar.MINUTE, minute);
-        long when = c.getTimeInMillis();
-
-        if (when / 1000 < Integer.MAX_VALUE) {
-            SystemClock.setCurrentTimeMillis(when);
-        }
+        setTime(hourOfDay, minute);
         updateTimeAndDateDisplay();
-        
+
         // We don't need to call timeUpdated() here because the TIME_CHANGED
         // broadcast is sent by the AlarmManager as a side effect of setting the
         // SystemClock time.
@@ -317,18 +303,34 @@
         }
     }
 
-    private void setDateFormat(String format) {
-        if (format.length() == 0) {
-            format = null;
-        }
-
-        Settings.System.putString(getContentResolver(), Settings.System.DATE_FORMAT, format);        
-    }
-    
     /*  Helper routines to format timezone */
-    
-    private String getTimeZoneText() {
-        TimeZone    tz = java.util.Calendar.getInstance().getTimeZone();
+
+    /* package */ static void setDate(int year, int month, int day) {
+        Calendar c = Calendar.getInstance();
+
+        c.set(Calendar.YEAR, year);
+        c.set(Calendar.MONTH, month);
+        c.set(Calendar.DAY_OF_MONTH, day);
+        long when = c.getTimeInMillis();
+
+        if (when / 1000 < Integer.MAX_VALUE) {
+            SystemClock.setCurrentTimeMillis(when);
+        }
+    }
+
+    /* package */ static void setTime(int hourOfDay, int minute) {
+        Calendar c = Calendar.getInstance();
+
+        c.set(Calendar.HOUR_OF_DAY, hourOfDay);
+        c.set(Calendar.MINUTE, minute);
+        long when = c.getTimeInMillis();
+
+        if (when / 1000 < Integer.MAX_VALUE) {
+            SystemClock.setCurrentTimeMillis(when);
+        }
+    }
+
+    /* package */ static String getTimeZoneText(TimeZone tz) {
         boolean daylight = tz.inDaylightTime(new Date());
         StringBuilder sb = new StringBuilder();
 
@@ -340,7 +342,7 @@
         return sb.toString();        
     }
 
-    private char[] formatOffset(int off) {
+    private static char[] formatOffset(int off) {
         off = off / 1000 / 60;
 
         char[] buf = new char[9];
diff --git a/src/com/android/settings/DateTimeSettingsSetupWizard.java b/src/com/android/settings/DateTimeSettingsSetupWizard.java
index b10624c..5da17da 100644
--- a/src/com/android/settings/DateTimeSettingsSetupWizard.java
+++ b/src/com/android/settings/DateTimeSettingsSetupWizard.java
@@ -16,26 +16,142 @@
 
 package com.android.settings;
 
-import android.os.Bundle;
-import android.view.View;
-import android.view.Window;
-import android.view.View.OnClickListener;
+import com.android.settings.ZonePicker.ZoneSelectionListener;
 
-public class DateTimeSettingsSetupWizard extends DateTimeSettingsActivity
-        implements OnClickListener {
-    private View mNextButton;
+import android.app.Activity;
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.Window;
+import android.widget.Button;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.DatePicker;
+import android.widget.TimePicker;
+
+import java.util.Calendar;
+import java.util.TimeZone;
+
+public class DateTimeSettingsSetupWizard extends Activity
+        implements OnClickListener, ZoneSelectionListener, OnCheckedChangeListener{
+
+    private boolean mXLargeScreenSize;
+
+    /* Available only in XL */
+    private Button mTimeZone;
+    private TimePicker mTimePicker;
+    private DatePicker mDatePicker;
 
     @Override
-    protected void onCreate(Bundle icicle) {
+    protected void onCreate(Bundle savedInstanceState) {
         requestWindowFeature(Window.FEATURE_NO_TITLE); 
-        super.onCreate(icicle);
+        super.onCreate(savedInstanceState);
         setContentView(R.layout.date_time_settings_setupwizard);
-        mNextButton = findViewById(R.id.next_button);
-        mNextButton.setOnClickListener(this);
+
+        mXLargeScreenSize = (getResources().getConfiguration().screenLayout
+                & Configuration.SCREENLAYOUT_SIZE_MASK)
+                == Configuration.SCREENLAYOUT_SIZE_XLARGE;
+        if (mXLargeScreenSize) {
+            initUiForXl();
+        } else {
+            findViewById(R.id.next_button).setOnClickListener(this);
+        }
     }
 
-    public void onClick(View v) {
-        setResult(RESULT_OK);
-        finish();
+    public void initUiForXl() {
+        // TODO: use system value
+        final boolean autoTimeZoneEnabled = false;
+        final CompoundButton autoTimeZoneButton =
+                (CompoundButton)findViewById(R.id.time_zone_auto);
+        autoTimeZoneButton.setChecked(autoTimeZoneEnabled);
+        autoTimeZoneButton.setOnCheckedChangeListener(this);
+        // TODO: remove this after the system support.
+        autoTimeZoneButton.setEnabled(false);
+
+        final boolean autoDateTimeEnabled = isAutoDateTimeEnabled();
+        final CompoundButton autoDateTimeButton =
+                (CompoundButton)findViewById(R.id.date_time_auto);
+        autoDateTimeButton.setChecked(autoDateTimeEnabled);
+        autoDateTimeButton.setText(autoDateTimeEnabled ? R.string.date_time_auto_summaryOn :
+                R.string.date_time_auto_summaryOff);
+        autoDateTimeButton.setOnCheckedChangeListener(this);
+
+        final TimeZone tz = TimeZone.getDefault();
+        mTimeZone = (Button)findViewById(R.id.current_time_zone);
+        mTimeZone.setText(DateTimeSettings.getTimeZoneText(tz));
+        mTimeZone.setOnClickListener(this);
+        mTimeZone.setEnabled(!autoDateTimeEnabled);
+
+        mTimePicker = (TimePicker)findViewById(R.id.time_picker);
+        mTimePicker.setEnabled(!autoDateTimeEnabled);
+        mDatePicker = (DatePicker)findViewById(R.id.date_picker);
+        mDatePicker.setEnabled(!autoDateTimeEnabled);
+
+        ((ZonePicker)getFragmentManager().findFragmentById(R.id.zone_picker_fragment))
+                .setZoneSelectionListener(this);
+
+        ((Button)findViewById(R.id.next_button)).setOnClickListener(this);
+        ((Button)findViewById(R.id.skip_button)).setOnClickListener(this);
+    }
+
+    @Override
+    public void onClick(View view) {
+        switch (view.getId()) {
+        case R.id.current_time_zone: {
+            findViewById(R.id.current_time_zone).setVisibility(View.GONE);
+            findViewById(R.id.zone_picker).setVisibility(View.VISIBLE);
+            break;
+        }
+        case R.id.next_button: {
+            if (mXLargeScreenSize) {
+                DateTimeSettings.setDate(mDatePicker.getYear(), mDatePicker.getMonth(),
+                        mDatePicker.getDayOfMonth());
+                DateTimeSettings.setTime(
+                        mTimePicker.getCurrentHour(), mTimePicker.getCurrentMinute());
+            }
+        }  // $FALL-THROUGH$
+        case R.id.skip_button: {
+            setResult(RESULT_OK);
+            finish();
+            break;
+        }
+        }
+    }
+
+    @Override
+    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+        Settings.System.putInt(getContentResolver(),
+                Settings.System.AUTO_TIME,
+                isChecked ? 1 : 0);
+        if (isChecked) {
+            findViewById(R.id.current_time_zone).setVisibility(View.VISIBLE);
+            findViewById(R.id.zone_picker).setVisibility(View.GONE);
+        }
+        mTimeZone.setEnabled(!isChecked);
+        mTimePicker.setEnabled(!isChecked);
+        mDatePicker.setEnabled(!isChecked);
+    }
+
+    @Override
+    public void onZoneSelected(TimeZone tz) {
+        findViewById(R.id.current_time_zone).setVisibility(View.VISIBLE);
+        findViewById(R.id.zone_picker).setVisibility(View.GONE);
+        final Calendar now = Calendar.getInstance(tz);
+        mTimeZone.setText(DateTimeSettings.getTimeZoneText(tz));
+        mDatePicker.updateDate(now.get(Calendar.YEAR), now.get(Calendar.MONTH),
+                now.get(Calendar.DAY_OF_MONTH));
+        mTimePicker.setCurrentHour(now.get(Calendar.HOUR));
+        mTimePicker.setCurrentMinute(now.get(Calendar.MINUTE));
+    }
+
+    private boolean isAutoDateTimeEnabled() {
+        try {
+            return Settings.System.getInt(getContentResolver(), Settings.System.AUTO_TIME) > 0;
+        } catch (SettingNotFoundException e) {
+            return true;
+        }
     }
 }
diff --git a/src/com/android/settings/ZonePicker.java b/src/com/android/settings/ZonePicker.java
index c877bd7..f0c61ed 100644
--- a/src/com/android/settings/ZonePicker.java
+++ b/src/com/android/settings/ZonePicker.java
@@ -52,7 +52,7 @@
 
     public static interface ZoneSelectionListener {
         // You can add any argument if you really need it...
-        public void onZoneSelected();
+        public void onZoneSelected(TimeZone tz);
     }
 
     private static final String KEY_ID = "id";
@@ -235,9 +235,13 @@
         // Update the system timezone value
         final Activity activity = getActivity();
         AlarmManager alarm = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
-        alarm.setTimeZone((String) map.get(KEY_ID));
+        String tzId = (String) map.get(KEY_ID);
+        alarm.setTimeZone(tzId);
+        final TimeZone tz = TimeZone.getTimeZone(tzId);
         if (mListener != null) {
-            mListener.onZoneSelected();
+            mListener.onZoneSelected(tz);
+        } else {
+            getActivity().onBackPressed();
         }
     }
 
