diff --git a/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml b/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
index e8a0f67..353cd12 100644
--- a/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
+++ b/res/layout-xlarge/wifi_settings_for_setup_wizard_xl.xml
@@ -27,19 +27,21 @@
                     android:layout_width="0px"
                     android:layout_weight=".3"
                     android:layout_height="fill_parent"
-                    android:paddingRight="10dip"
+                    android:paddingRight="50dip"
                     android:paddingBottom="10dip">
         <TextView android:id="@+id/wifi_setup_title"
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content"
-                  android:gravity="center|top"
+                  android:layout_alignParentRight="true"
+                  android:gravity="right"
                   android:textSize="48dip"
-                  android:textColor="#FF30FF30"
+                  android:textColor="#FFC5DF28"
                   android:text="@string/wifi_setup_title"/>
         <Button android:id="@+id/wifi_setup_cancel"
-                android:layout_width="fill_parent"
+                android:layout_width="220dip"
                 android:layout_height="wrap_content"
                 android:layout_alignParentBottom="true"
+                android:layout_alignParentRight="true"
                 android:textSize="24dip"
                 android:text="@string/wifi_cancel"
                 android:visibility="gone" />
@@ -51,15 +53,15 @@
                   android:layout_weight=".4"
                   android:layout_height="fill_parent"
                   android:paddingTop="20dip"
-                  android:paddingLeft="10dip"
-                  android:paddingRight="30dip"
+                  android:paddingLeft="50dip"
+                  android:paddingRight="50dip"
                   android:paddingBottom="15dip">
         <!-- Assume the text size of this text should be same as Preference's
              texts. See also preference.xml -->
         <TextView android:id="@+id/wifi_setup_status"
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content"
-                  android:background="#ff113344"
+                  android:background="#ff555555"
                   android:paddingLeft="5dip"
                   android:paddingTop="5dip"
                   android:paddingBottom="5dip"
@@ -78,29 +80,28 @@
                     android:layout_weight=".3"
                     android:layout_height="fill_parent"
                     android:paddingTop="22dip"
-                    android:paddingLeft="30dip"
+                    android:paddingLeft="50dip"
                     android:paddingBottom="10dip">
         <TextView android:id="@+id/scanning_progress_text"
                   android:layout_width="fill_parent"
                   android:layout_height="wrap_content"
                   android:layout_alignParentTop="true"
-                  android:textSize="24dip"
-                  android:text="@string/progress_scanning"/>
+                  android:textSize="24dip"/>
         <ProgressBar android:id="@+id/scanning_progress_bar"
-                     android:layout_width="100dip"
+                     android:layout_width="220dip"
                      android:layout_height="wrap_content"
                      android:layout_below="@id/scanning_progress_text"
                      style="?android:attr/progressBarStyleHorizontal" />
 
         <Button android:id="@+id/wifi_setup_connect"
-                android:layout_width="fill_parent"
+                android:layout_width="220dip"
                 android:layout_height="wrap_content"
                 android:layout_alignParentBottom="true"
                 android:textSize="24dip"
                 android:text="@string/wifi_connect"
                 android:visibility="gone" />
         <Button android:id="@+id/wifi_setup_forget"
-                android:layout_width="fill_parent"
+                android:layout_width="220dip"
                 android:layout_height="wrap_content"
                 android:layout_alignParentBottom="true"
                 android:textSize="24dip"
@@ -108,7 +109,7 @@
                 android:visibility="gone" />
 
         <Button android:id="@+id/wifi_setup_skip_or_next"
-                android:layout_width="fill_parent"
+                android:layout_width="220dip"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="30dip"
                 android:layout_alignParentBottom="true"
@@ -116,14 +117,14 @@
                 android:text="@string/wifi_setup_skip" />
 
         <Button android:id="@+id/wifi_setup_refresh_list"
-                android:layout_width="fill_parent"
+                android:layout_width="220dip"
                 android:layout_height="wrap_content"
                 android:layout_above="@id/wifi_setup_skip_or_next"
                 android:textSize="24dip"
                 android:text="@string/wifi_setup_refresh_list" />
 
         <Button android:id="@+id/wifi_setup_add_network"
-                android:layout_width="fill_parent"
+                android:layout_width="220dip"
                 android:layout_height="wrap_content"
                 android:layout_above="@id/wifi_setup_refresh_list"
                 android:textSize="24dip"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 28a72e8..351cb13 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2702,8 +2702,12 @@
     <string name="wifi_setup_status_select_network">Touch to select network</string>
     <!-- Message shown above available networks when a user clicked one of available
          networks and the UI is showing one possible existing network.
-         Used in Wifi Setup For Setup Wizard with XL screen. -->
+         Used in Wifi Setup. -->
     <string name="wifi_setup_status_existing_network">Connect to existing network</string>
+    <!-- Message shown above available networks when a user clicked one of available
+         networks and the UI is prompting the user to edit the network configuration
+         if needed. Used in Wifi Setup with XL screen. [CHAR LIMIT=35] -->
+    <string name="wifi_setup_status_edit_network">Enter network configuration</string>
     <!-- The message shown above available networks when a user clicked "Add network"
          button. Used in Wifi Setup For Setup Wizard with XL screen. -->
     <string name="wifi_setup_status_new_network">Connect to new network</string>
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 05aecaf..a0b2132 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -87,6 +87,12 @@
     // Note: this is only effective in Setup Wizard with XL screen size.
     private static final String EXTRA_ENABLE_NEXT_ON_CONNECT = "wifi_enable_next_on_connect";
 
+    // In SetupWizard XL, We limit the number of showable access points so that the
+    // ListView won't become larger than the screen.
+    //
+    // This constant doesn't affect other contexts other than SetupWizard XL.
+    private static int MAX_MENU_COUNT_IN_XL = 7;
+
     private final IntentFilter mFilter;
     private final BroadcastReceiver mReceiver;
     private final Scanner mScanner;
@@ -113,6 +119,10 @@
     private WifiConfigPreference mConfigPreference;
     private WifiDialog mDialog;
 
+    // Used only in SetupWizard XL, which remembers the network a user selected and
+    // refrain other available networks when trying to connect it.
+    private AccessPoint mConnectingAccessPoint;
+
     private boolean mRefrainListUpdate;
 
     public WifiSettings() {
@@ -370,7 +380,10 @@
 
         mConfigPreference = new WifiConfigPreference(this, this, accessPoint, edit);
         toggleButtonsVisibility(false);
-
+        final Activity activity = getActivity();
+        if (activity instanceof WifiSettingsForSetupWizardXL) {
+            ((WifiSettingsForSetupWizardXL)activity).onWifiConfigPreferenceAttached(edit);
+        }
         updateAccessPoints();
         mScanner.pause();
     }
@@ -422,8 +435,10 @@
             }
         }
 
-        if (mConfigPreference != null) {
-            mAccessPoints.removeAll();
+        mAccessPoints.removeAll();
+        if (mConnectingAccessPoint != null) {
+            mAccessPoints.addPreference(mConnectingAccessPoint);
+        } else if (mConfigPreference != null) {
             final AccessPoint parent = mConfigPreference.getAccessPoint();
             if (parent != null) {
                 parent.setSelectable(false);
@@ -433,9 +448,14 @@
         } else {
             // AccessPoints are automatically sorted with TreeSet.
             final Collection<AccessPoint> accessPoints = constructAccessPoints();
-            mAccessPoints.removeAll();
+
+            int count = MAX_MENU_COUNT_IN_XL;
             for (AccessPoint accessPoint : accessPoints) {
                 mAccessPoints.addPreference(accessPoint);
+                count--;
+                if (count <= 0) {
+                    break;
+                }
             }
         }
     }
@@ -520,7 +540,8 @@
             // Maybe there's a WifiConfigPreference
             Preference preference = mAccessPoints.getPreference(i);
             if (preference instanceof AccessPoint) {
-                ((AccessPoint) preference).update(mLastInfo, mLastState);
+                final AccessPoint accessPoint = (AccessPoint) preference;
+                accessPoint.update(mLastInfo, mLastState);
             }
         }
 
@@ -634,6 +655,11 @@
                 break;
         }
 
+        if (mInXlSetupWizard && mConfigPreference != null) {
+            mConnectingAccessPoint = mSelectedAccessPoint;
+            mConnectingAccessPoint.setSelectable(false);
+        }
+
         detachConfigPreference();
     }
 
@@ -656,6 +682,7 @@
         }
 
         mConfigPreference = null;
+        mConnectingAccessPoint = null;
         mAccessPoints.removeAll();
 
         final Activity activity = getActivity();
diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
index ef827f6..5dfb36a 100644
--- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
+++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
@@ -56,6 +56,13 @@
     private WifiSettings mWifiSettings;
     private TextView mStatusText;
 
+    // This count reduces every time when there's a notification about WiFi status change.
+    // During the term this is >0, The system shows the message "connecting", regardless
+    // of the actual WiFi status. After this count's becoming 0, the status message correctly
+    // reflects what WiFi Picker told it. This is a tweak for letting users not confused
+    // with instable WiFi state during the first scan.
+    private int mIgnoringWifiNotificationCount = 5;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -70,6 +77,7 @@
 
     public void setup() {
         mProgressText = (TextView)findViewById(R.id.scanning_progress_text);
+        mProgressText.setText(Summary.get(this, DetailedState.SCANNING));
         mProgressBar = (ProgressBar)findViewById(R.id.scanning_progress_bar);
         mProgressBar.setMax(2);
         mProgressBar.setIndeterminate(true);
@@ -104,11 +112,13 @@
             mWifiSettings.forget();
             break;
         case R.id.wifi_setup_cancel:
+            mStatusText.setText(R.string.wifi_setup_status_select_network);
             mWifiSettings.detachConfigPreference();
             break;
         }
     }
 
+    // Called from WifiSettings
     public void updateConnectionState(DetailedState originalState) {
         final DetailedState state = stateMap.get(originalState);
         switch (state) {
@@ -136,23 +146,29 @@
             mProgressBar.setProgress(2);
             mStatusText.setText(R.string.wifi_setup_status_connected);
             mProgressText.setText(Summary.get(this, state));
+            setResult(Activity.RESULT_OK);
+            finish();
             break;
         }
         default:  // Not connected.
-            mProgressBar.setIndeterminate(false);
-            mProgressBar.setProgress(0);
-            mStatusText.setText(R.string.wifi_setup_status_select_network);
-            mProgressText.setText(getString(R.string.wifi_setup_not_connected));
+            if (mWifiSettings.getAccessPointsCount() == 0 &&
+                    mIgnoringWifiNotificationCount > 0) {
+                mIgnoringWifiNotificationCount--;
+                mProgressBar.setIndeterminate(true);
+                mProgressText.setText(Summary.get(this, DetailedState.SCANNING));
+                return;
+            } else {
+                mProgressBar.setIndeterminate(false);
+                mProgressBar.setProgress(0);
+                mStatusText.setText(R.string.wifi_setup_status_select_network);
+                mProgressText.setText(getString(R.string.wifi_setup_not_connected));
+            }
             break;
         }
     }
 
     public void onWifiConfigPreferenceAttached(boolean isNewNetwork) {
-        if (isNewNetwork) {
-            mStatusText.setText(R.string.wifi_setup_status_new_network);
-        } else {
-            mStatusText.setText(R.string.wifi_setup_status_existing_network);
-        }
+        mStatusText.setText(R.string.wifi_setup_status_edit_network);
     }
 
     public void onForget() {
