diff --git a/res/values/strings.xml b/res/values/strings.xml
index 26bead9..5699db4 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2975,6 +2975,11 @@
          [CHAR LIMIT=50] -->
     <string name="wifi_setup_title_connecting_network">Connecting to Wi-Fi network <xliff:g id="network_name" example="Happy Mobile">%s</xliff:g>...</string>
     <!-- Title shown in Wifi Setup For Setup Wizard with XL screen when
+         the device successfully connected to a network the user specified.
+         The argument should be the name of the network.
+         [CHAR LIMIT=50] -->
+    <string name="wifi_setup_title_connected_network">Connected to Wi-Fi network <xliff:g id="network_name" example="Happy Mobile">%s</xliff:g></string>
+    <!-- Title shown in Wifi Setup For Setup Wizard with XL screen when
          a user is adding a network.
          [CHAR LIMIT=50] -->
     <string name="wifi_setup_title_add_network">Add a network</string>
diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
index 59d61ab..cb33d3b 100644
--- a/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
+++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizardXL.java
@@ -172,6 +172,7 @@
     }
 
     private void restoreFirstButtonVisibilityState() {
+        showDefaultTitle();
         mAddNetworkButton.setVisibility(View.VISIBLE);
         mRefreshButton.setVisibility(View.VISIBLE);
         mSkipOrNextButton.setVisibility(View.VISIBLE);
@@ -252,6 +253,7 @@
             mProgressBar.setIndeterminate(false);
             mProgressBar.setProgress(2);
 
+            showConnectedTitle();
             mConnectButton.setVisibility(View.GONE);
             mAddNetworkButton.setVisibility(View.GONE);
             mRefreshButton.setVisibility(View.GONE);
@@ -278,19 +280,37 @@
     private void showConnectingStatus() {
         // We save this title and show it when authentication failed.
         mEditingTitle = mTitleView.getText();
-        showTitleForNetworkEditing();
+        showConnectingTitle();
         mProgressBar.setIndeterminate(false);
         mProgressBar.setProgress(1);
         setPaddingVisibility(View.VISIBLE);
     }
 
-    private void showTitleForNetworkEditing() {
+    private void showDefaultTitle() {
+        mTitleView.setText(getString(R.string.wifi_setup_title));
+    }
+
+    private void showEditingTitle() {
         if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) {
             mNetworkName = mWifiConfig.getController().getConfig().SSID;
         }
         mTitleView.setText(getString(R.string.wifi_setup_title_editing_network, mNetworkName));
     }
 
+    private void showConnectingTitle() {
+        if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) {
+            mNetworkName = mWifiConfig.getController().getConfig().SSID;
+        }
+        mTitleView.setText(getString(R.string.wifi_setup_title_connecting_network, mNetworkName));
+    }
+
+    private void showConnectedTitle() {
+        if (TextUtils.isEmpty(mNetworkName) && mWifiConfig != null) {
+            mNetworkName = mWifiConfig.getController().getConfig().SSID;
+        }
+        mTitleView.setText(getString(R.string.wifi_setup_title_connected_network, mNetworkName));
+    }
+
     private void showScanningStatus() {
         mProgressBar.setIndeterminate(true);
         ((Button)findViewById(R.id.wifi_setup_add_network)).setEnabled(false);
@@ -344,6 +364,7 @@
                 selectedAccessPoint.security == AccessPoint.SECURITY_EAP) {
             mConnectButton.setVisibility(View.GONE);
 
+            showEditingTitle();
             mSkipOrNextButton.setVisibility(View.GONE);
             mAddNetworkButton.setVisibility(View.GONE);
             mRefreshButton.setVisibility(View.GONE);
@@ -356,6 +377,7 @@
             // In SetupWizard, we just show the button as "Connect" instead.
             mConnectButton.setText(R.string.wifi_connect);
 
+            showEditingTitle();
             mSkipOrNextButton.setVisibility(View.GONE);
             mAddNetworkButton.setVisibility(View.GONE);
             mRefreshButton.setVisibility(View.GONE);
@@ -493,7 +515,7 @@
             mTitleView.setText(mEditingTitle);
         } else {
             Log.w(TAG, "Title during editing/adding a network was empty.");
-            showTitleForNetworkEditing();
+            showEditingTitle();
         }
 
         // Restore View status which was tweaked on connection.
