diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 04a637c..90b092f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -157,6 +157,18 @@
             </intent-filter>
         </activity-alias>
 
+        <activity-alias android:name=".wifi.AdvancedSettings"
+                android:label="@string/wifi_advanced_settings_label"
+                android:targetActivity="Settings"
+                >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.WIFI_IP_SETTINGS" />
+                <category android:name="android.intent.category.VOICE_LAUNCH" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity-alias>
+
         <activity android:name=".wifi.WifiInfo"
                 android:theme="@android:style/Theme.Holo.DialogWhenLarge">
             <intent-filter>
@@ -237,7 +249,7 @@
                 >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
-                <action android:name="android.settings.BLUETOOTH_ADVANCED_SETTINGS" />
+                <action android:name="android.settings.ADVANCED_BLUETOOTH_SETTINGS" />
                 <category android:name="android.intent.category.VOICE_LAUNCH" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
diff --git a/res/layout-land/choose_lock_pattern_tutorial.xml b/res/layout-land/choose_lock_pattern_tutorial.xml
index 606d2e1..ac693cc 100644
--- a/res/layout-land/choose_lock_pattern_tutorial.xml
+++ b/res/layout-land/choose_lock_pattern_tutorial.xml
@@ -17,29 +17,29 @@
 <com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/topLayout"
-    android:orientation="horizontal"
+    android:orientation="vertical"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <RelativeLayout
-        android:layout_width="0dip"
-        android:layout_height="match_parent"
-        android:layout_weight="1">
+    <!-- Top: pattern and information -->
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="0dip"
+        android:layout_weight="1"
+        android:orientation="horizontal">
 
-        <!-- left side: lock pattern -->
+        <!-- left side: lock pattern. Given the square aspect, this will be the smaller of the
+             two dimensions (height) -->
         <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
-             android:layout_width="300dip"
-             android:layout_height="300dip"
-             android:layout_gravity="center_horizontal"
-             aspect="square"/>
+             android:layout_width="match_parent"
+             android:layout_height="match_parent"/>
 
         <!-- right side: instructions and buttons -->
         <!-- header message -->
         <ScrollView
-            android:layout_width="300dip"
-            android:layout_height="180dip"
-            android:layout_alignParentTop="true"
-            android:layout_toRightOf="@id/lockPattern"
+            android:layout_width="0dip"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
             android:layout_marginLeft="25dip">
 
             <LinearLayout
@@ -69,25 +69,24 @@
 
         </ScrollView>
 
-        <LinearLayout
-            style="@style/SecurityPreferenceButtonContainer"
-            android:layout_alignParentRight="true"
-            android:layout_alignParentBottom="true"
-            android:orientation="horizontal">
+    </LinearLayout>
 
-            <!-- left / top button: skip, or re-try -->
-            <Button android:id="@+id/skip_button"
-                style="@style/SecurityPreferenceButton"
-                android:text="@string/lockpattern_tutorial_cancel_label"/>
+    <!-- Bottom: cancel/next buttons -->
+    <LinearLayout
+        style="@style/SecurityPreferenceButtonContainer"
+        android:orientation="horizontal">
 
-            <!-- right / bottom button: confirm or ok -->
-            <Button android:id="@+id/next_button"
-                style="@style/SecurityPreferenceButton"
-                android:text="@string/lockpattern_tutorial_continue_label"/>
+        <!-- left / top button: skip, or re-try -->
+        <Button android:id="@+id/skip_button"
+            style="@style/SecurityPreferenceButton"
+            android:text="@string/lockpattern_tutorial_cancel_label"/>
 
-        </LinearLayout>
+        <!-- right / bottom button: confirm or ok -->
+        <Button android:id="@+id/next_button"
+            style="@style/SecurityPreferenceButton"
+            android:text="@string/lockpattern_tutorial_continue_label"/>
 
-    </RelativeLayout>
+    </LinearLayout>
 
 </com.android.internal.widget.LinearLayoutWithDefaultTouchRecepient>
 
diff --git a/res/layout/choose_lock_pattern_tutorial.xml b/res/layout/choose_lock_pattern_tutorial.xml
index 5f6ea56..742cef8 100644
--- a/res/layout/choose_lock_pattern_tutorial.xml
+++ b/res/layout/choose_lock_pattern_tutorial.xml
@@ -33,6 +33,7 @@
             android:orientation="vertical"
             android:padding="5dip">
 
+            <!-- Top: instructions -->
             <TextView
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -40,26 +41,27 @@
                 android:text="@string/lock_title"
                 android:paddingBottom="10dip"
                 style="?android:attr/textAppearanceLarge"
+                android:visibility="visible"
             />
 
             <TextView
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:textAppearance="?android:attr/textAppearanceMedium"
-                android:textSize="18sp"
                 android:text="@string/lock_intro_message"
             />
 
+            <!-- bottom: lock pattern -->
+            <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
+                 android:layout_width="200dip"
+                 android:layout_height="200dip"
+                 android:layout_marginTop="10dip"
+                 android:layout_gravity="left"/>
+
         </LinearLayout>
 
     </ScrollView>
 
-    <!-- bottom: lock pattern. Note the size is match_parent in both axis since requested aspect
-         is square and the pattern view will choose the smaller of the two. -->
-    <com.android.internal.widget.LockPatternView android:id="@+id/lockPattern"
-         android:layout_width="match_parent"
-         android:layout_height="match_parent"/>
-
     <LinearLayout
         style="@style/SecurityPreferenceButtonContainer"
         android:orientation="horizontal">
diff --git a/res/layout/trusted_credential_details.xml b/res/layout/trusted_credential_details.xml
index c18d933..e220e1c 100644
--- a/res/layout/trusted_credential_details.xml
+++ b/res/layout/trusted_credential_details.xml
@@ -13,22 +13,11 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<LinearLayout
+<Button
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    >
-    <FrameLayout
-        android:id="@+id/cert_details"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        />
-    <Button
-        android:id="@+id/cert_remove_button"
-        android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
-        android:layout_gravity="right"
-        android:layout_margin="6dip"
-        />
-</LinearLayout>
+    android:id="@+id/cert_remove_button"
+    android:layout_height="wrap_content"
+    android:layout_width="wrap_content"
+    android:layout_gravity="right"
+    android:layout_margin="6dip"
+    />
diff --git a/res/layout/vpn_dialog.xml b/res/layout/vpn_dialog.xml
index 3e4b441..a4bb216 100644
--- a/res/layout/vpn_dialog.xml
+++ b/res/layout/vpn_dialog.xml
@@ -93,8 +93,8 @@
                         android:prompt="@string/vpn_ipsec_ca_cert" />
             </LinearLayout>
 
-            <TextView style="@style/vpn_label" android:text="@string/vpn_domains"/>
-            <EditText style="@style/vpn_value" android:id="@+id/domains"
+            <TextView style="@style/vpn_label" android:text="@string/vpn_search_domains"/>
+            <EditText style="@style/vpn_value" android:id="@+id/search_domains"
                     android:hint="@string/vpn_not_used"/>
 
             <!-- Not sure if we have time to make it. -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 95b6f69..bc20859 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -237,7 +237,11 @@
     <!--Bluetooth settings screen, summary text under individual Bluetooth devices that are hands free or a headset -->
     <string name="bluetooth_device">handsfree/headset</string>
     <!--Bluetooth settings screen, text that appears in heading bar when scanning for devices -->
-    <string name="progress_scanning">Scanning</string>
+    <string name="progress_scanning">Searching</string>
+    <!--Bluetooth settings screen, text that appears in heading bar when scanning for devices is finished, indicating that user can tap on a device to pair with it [CHAR LIMIT=20]-->
+    <string name="progress_tap_to_pair">Tap to pair</string>
+    <!--Bluetooth settings screen, text that appears when scanning for devices is finished and no nearby bluetooth device was found [CHAR LIMIT=40]-->
+    <string name="bluetooth_no_devices_found">No Bluetooth devices were found nearby.</string>
     <!-- Notification ticker text (shown in the status bar) when a Bluetooth device wants to pair with us -->
     <string name="bluetooth_notif_ticker">Bluetooth pairing request</string>
     <!-- Notification title when a Bluetooth device wants to pair with us -->
@@ -936,8 +940,10 @@
 
     <!-- Bluetooth settings: The title of the preference (list item) that initiates a scan for devices -->
     <string name="bluetooth_preference_scan_title">Scan for devices</string>
-    <!-- Bluetooth settings: The title of the action button that initiates a scan for nearby devices [CHAR LIMIT=20] -->
-    <string name="bluetooth_scan_nearby_devices">Scan</string>
+    <!-- Bluetooth settings: The title of the action button that initiates a search for nearby devices [CHAR LIMIT=20] -->
+    <string name="bluetooth_search_for_devices">Search for devices</string>
+    <!-- Bluetooth settings: The title of the action button while a search for nearby devices is in progress [CHAR LIMIT=20] -->
+    <string name="bluetooth_searching_for_devices">Searching\u2026</string>
     <!-- Bluetooth settings: The sub heading for device settings. [CHAR LIMIT=30] -->
     <string name="bluetooth_preference_device_settings">Device settings</string>
     <!-- Bluetooth settings: The sub heading for paired devices. [CHAR LIMIT=30] -->
@@ -1189,7 +1195,7 @@
 
     <!-- Wi-Fi Advanced Settings --> <skip />
     <!-- Wi-Fi settings screen, advanced, settings section.  This is a header shown above advanced wifi settings. -->
-    <string name="wifi_advanced_titlebar">Advanced</string>
+    <string name="wifi_advanced_titlebar">Advanced Wi-Fi</string>
     <!-- Wi-Fi settings screen, setting title for setting the band [CHAR LIMIT=50]-->
     <string name="wifi_setting_frequency_band_title">Wi-Fi frequency band</string>
     <!-- Wi-Fi settings screen, setting summary for setting the wifi frequency band [CHAR LIMIT=50]-->
@@ -1652,7 +1658,7 @@
     <!-- SD card & phone storage settings title. Displayed as a title when showing the total usage of media on the device. Below it will be a number like "123.4 MB" indicating used storage. [CHAR LIMIT=50] -->
     <string name="memory_media_usage">Media</string>
     <!-- SD card & phone storage settings title. Displayed as a title when showing the total usage of /sdcard/Download on the device. Below it will be a number like "123.4 MB" indicating used storage. [CHAR LIMIT=50] -->
-    <string name="memory_downloads_usage">Downloads</string>    
+    <string name="memory_downloads_usage">Downloads</string>
     <!-- SD card & phone storage settings title. Displayed as a title when showing the total usage of all pictures, videos in /sdcard/DCIM, /sdcard/Pictures folders on the device. Below it will be a number like "123.4 MB" indicating used storage. [CHAR LIMIT=50] -->
     <string name="memory_dcim_usage">Pictures, Videos</string>
     <!-- SD card & phone storage settings title. Displayed as a title when showing the total usage of audio files in /sdcard on the device. Below it will be a number like "123.4 MB" indicating used storage. [CHAR LIMIT=50] -->
@@ -2132,12 +2138,8 @@
         \n\nReady to start? Touch \u201CNext\u201D.
     </string>
     <!-- ChooseLockPatternTutorial, tutorial screen text -->
-    <string name="lock_intro_message" product="default"><font size="17">Protect your phone from unauthorized use by creating a personal screen unlock pattern.
-        \n<font height="17">\n</font><b>1</b>\u00A0 On the next screen, watch while an example pattern is drawn.
-        \n<font height="17">\n</font><b>2</b>\u00A0 When ready, draw your own personal unlock pattern. Experiment with different patterns but connect at least four dots.
-        \n<font height="17">\n</font><b>3</b>\u00A0 Redraw your pattern to confirm.
-        \n<font height="17">\n</font><b>Ready to start? Touch \u201CNext\u201D</b>.
-        \n<font height="3">\n</font>To leave your phone unprotected, touch \u201CCancel\u201D.</font>
+    <string name="lock_intro_message" product="default">Protect your phone from unauthorized use by creating a personal screen unlock pattern. Use your finger to connect at least four dots in any order on the next screen.
+        \n\nReady to start? Touch \u201CNext\u201D.
     </string>
 
     <!-- Applications Settings --> <skip />
@@ -3551,7 +3553,7 @@
     <!-- Selection label for the IPSec CA certificate of a VPN network. [CHAR LIMIT=40] -->
     <string name="vpn_ipsec_ca_cert">IPSec CA certificate</string>
     <!-- Input label for the DNS search domains of a VPN network. [CHAR LIMIT=40] -->
-    <string name="vpn_domains">DNS search domains</string>
+    <string name="vpn_search_domains">DNS search domains</string>
     <!-- Input label for the forwarding routes of a VPN network. [CHAR LIMIT=40] -->
     <string name="vpn_routes">Forwarding routes</string>
     <!-- Input label for the username of a VPN network. [CHAR LIMIT=40] -->
@@ -3559,7 +3561,7 @@
     <!-- Input label for the password of a VPN network. [CHAR LIMIT=40] -->
     <string name="vpn_password">Password</string>
     <!-- Checkbox label to save the username and the password for a VPN network. [CHAR LIMIT=40] -->
-    <string name="vpn_save_login">Save this information</string>
+    <string name="vpn_save_login">Save account information</string>
 
     <!-- Hint for an optional input of a VPN network. [CHAR LIMIT=40] -->
     <string name="vpn_not_used">(not used)</string>
diff --git a/res/xml/settings_headers.xml b/res/xml/settings_headers.xml
index 7e80db4..cd6191f 100644
--- a/res/xml/settings_headers.xml
+++ b/res/xml/settings_headers.xml
@@ -53,6 +53,7 @@
     <header
         android:id="@+id/wireless_settings"
         android:title="@string/radio_controls_title"
+        android:breadCrumbTitle="@string/wireless_networks_settings_title"
         android:fragment="com.android.settings.WirelessSettings"
         android:icon="@drawable/ic_settings_more_wireless" />
 
diff --git a/src/com/android/settings/ProgressCategory.java b/src/com/android/settings/ProgressCategory.java
index bedcc98..eee19bc 100644
--- a/src/com/android/settings/ProgressCategory.java
+++ b/src/com/android/settings/ProgressCategory.java
@@ -17,12 +17,15 @@
 package com.android.settings;
 
 import android.content.Context;
+import android.preference.Preference;
 import android.util.AttributeSet;
 import android.view.View;
+import android.widget.TextView;
 
 public class ProgressCategory extends ProgressCategoryBase {
 
     private boolean mProgress = false;
+    private Preference mNoDeviceFoundPreference;
 
     public ProgressCategory(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -32,12 +35,27 @@
     @Override
     public void onBindView(View view) {
         super.onBindView(view);
-        final View textView = view.findViewById(R.id.scanning_text);
+        final TextView textView = (TextView) view.findViewById(R.id.scanning_text);
         final View progressBar = view.findViewById(R.id.scanning_progress);
 
-        final int visibility = mProgress ? View.VISIBLE : View.INVISIBLE;
-        textView.setVisibility(visibility);
-        progressBar.setVisibility(visibility);
+        textView.setText(mProgress ? R.string.progress_scanning : R.string.progress_tap_to_pair);
+        boolean noDeviceFound = getPreferenceCount() == 0;
+        textView.setVisibility(noDeviceFound ? View.INVISIBLE : View.VISIBLE);
+        progressBar.setVisibility(mProgress ? View.VISIBLE : View.INVISIBLE);
+
+        if (mProgress) {
+            if (mNoDeviceFoundPreference != null) {
+                removePreference(mNoDeviceFoundPreference);
+            }
+        } else {
+            if (noDeviceFound) {
+                if (mNoDeviceFoundPreference == null) {
+                    mNoDeviceFoundPreference = new Preference(getContext());
+                    mNoDeviceFoundPreference.setSummary(R.string.bluetooth_no_devices_found);
+                }
+                addPreference(mNoDeviceFoundPreference);
+            }
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/TrustedCredentialsSettings.java b/src/com/android/settings/TrustedCredentialsSettings.java
index 340e93d..3e50440 100644
--- a/src/com/android/settings/TrustedCredentialsSettings.java
+++ b/src/com/android/settings/TrustedCredentialsSettings.java
@@ -309,7 +309,7 @@
     }
 
     private void showCertDialog(final CertHolder certHolder) {
-        View view = View.inflate(getActivity(), R.layout.trusted_credential_details, null);
+        View view = certHolder.mSslCert.inflateCertificateView(getActivity());
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
         builder.setTitle(com.android.internal.R.string.ssl_certificate);
         builder.setView(view);
@@ -320,10 +320,12 @@
         });
         final Dialog certDialog = builder.create();
 
-        FrameLayout details = (FrameLayout) view.findViewById(R.id.cert_details);
-        details.addView(certHolder.mSslCert.inflateCertificateView(getActivity()));
-
-        Button removeButton = (Button) view.findViewById(R.id.cert_remove_button);
+        ViewGroup body = (ViewGroup) view.findViewById(com.android.internal.R.id.body);
+        LayoutInflater inflater = LayoutInflater.from(getActivity());
+        Button removeButton = (Button) inflater.inflate(R.layout.trusted_credential_details,
+                                                        body,
+                                                        false);
+        body.addView(removeButton);
         removeButton.setText(certHolder.mTab.getButtonLabel(certHolder));
         removeButton.setOnClickListener(new View.OnClickListener() {
             @Override public void onClick(View v) {
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 76bf623..cd37309 100644
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -101,9 +101,12 @@
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         boolean bluetoothIsEnabled = mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_ON;
-        menu.add(Menu.NONE, MENU_ID_SCAN, 0, R.string.bluetooth_scan_nearby_devices)
+        boolean isDiscovering = mLocalAdapter.isDiscovering();
+        int textId = isDiscovering ? R.string.bluetooth_searching_for_devices :
+            R.string.bluetooth_search_for_devices;
+        menu.add(Menu.NONE, MENU_ID_SCAN, 0, textId)
                 //.setIcon(R.drawable.ic_menu_scan_network)
-                .setEnabled(bluetoothIsEnabled && !mLocalAdapter.isDiscovering())
+                .setEnabled(bluetoothIsEnabled && !isDiscovering)
                 .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
         menu.add(Menu.NONE, MENU_ID_ADVANCED, 0, R.string.bluetooth_menu_advanced)
                 //.setIcon(android.R.drawable.ic_menu_manage)
@@ -218,7 +221,7 @@
     @Override
     public void onScanningStateChanged(boolean started) {
         super.onScanningStateChanged(started);
-        // Update 'Scan' option enabled state
+        // Update options' enabled state
         getActivity().invalidateOptionsMenu();
     }
 
diff --git a/src/com/android/settings/vpn2/VpnDialog.java b/src/com/android/settings/vpn2/VpnDialog.java
index 92ad362..2914b1b 100644
--- a/src/com/android/settings/vpn2/VpnDialog.java
+++ b/src/com/android/settings/vpn2/VpnDialog.java
@@ -60,7 +60,7 @@
     private TextView mServer;
     private TextView mUsername;
     private TextView mPassword;
-    private TextView mDomains;
+    private TextView mSearchDomains;
     private TextView mRoutes;
     private CheckBox mMppe;
     private TextView mL2tpSecret;
@@ -92,7 +92,7 @@
         mServer = (TextView) mView.findViewById(R.id.server);
         mUsername = (TextView) mView.findViewById(R.id.username);
         mPassword = (TextView) mView.findViewById(R.id.password);
-        mDomains = (TextView) mView.findViewById(R.id.domains);
+        mSearchDomains = (TextView) mView.findViewById(R.id.search_domains);
         mRoutes = (TextView) mView.findViewById(R.id.routes);
         mMppe = (CheckBox) mView.findViewById(R.id.mppe);
         mL2tpSecret = (TextView) mView.findViewById(R.id.l2tp_secret);
@@ -108,7 +108,7 @@
         mServer.setText(mProfile.server);
         mUsername.setText(mProfile.username);
         mPassword.setText(getDummy(mProfile.password));
-        mDomains.setText(mProfile.domains);
+        mSearchDomains.setText(mProfile.searchDomains);
         mRoutes.setText(mProfile.routes);
         mMppe.setChecked(mProfile.mppe);
         mL2tpSecret.setText(getDummy(mProfile.l2tpSecret));
@@ -288,7 +288,7 @@
         profile.server = mServer.getText().toString().trim();
         profile.username = mUsername.getText().toString();
         profile.password = getSecret(mProfile.password, mPassword);
-        profile.domains = mDomains.getText().toString().trim();
+        profile.searchDomains = mSearchDomains.getText().toString().trim();
         profile.routes = mRoutes.getText().toString().trim();
 
         // Then, save type-specific fields.
diff --git a/src/com/android/settings/vpn2/VpnProfile.java b/src/com/android/settings/vpn2/VpnProfile.java
index 9e4c528..24c2f5f 100644
--- a/src/com/android/settings/vpn2/VpnProfile.java
+++ b/src/com/android/settings/vpn2/VpnProfile.java
@@ -42,14 +42,15 @@
     String server = "";         // 2
     String username = "";       // 3
     String password = "";       // 4
-    String domains = "";        // 5
-    String routes = "";         // 6
-    boolean mppe = false;       // 7
-    String l2tpSecret = "";     // 8
-    String ipsecIdentifier = "";// 9
-    String ipsecSecret = "";    // 10
-    String ipsecUserCert = "";  // 11
-    String ipsecCaCert = "";    // 12
+    String dnsServers = "";     // 5
+    String searchDomains = "";  // 6
+    String routes = "";         // 7
+    boolean mppe = false;       // 8
+    String l2tpSecret = "";     // 9
+    String ipsecIdentifier = "";// 10
+    String ipsecSecret = "";    // 11
+    String ipsecUserCert = "";  // 12
+    String ipsecCaCert = "";    // 13
 
     // Helper fields.
     boolean saveLogin = false;
@@ -65,8 +66,8 @@
             }
 
             String[] values = new String(value, Charsets.UTF_8).split("\0", -1);
-            // Currently it always has 13 fields.
-            if (values.length < 13) {
+            // Currently it always has 14 fields.
+            if (values.length < 14) {
                 return null;
             }
 
@@ -79,14 +80,15 @@
             profile.server = values[2];
             profile.username = values[3];
             profile.password = values[4];
-            profile.domains = values[5];
-            profile.routes = values[6];
-            profile.mppe = Boolean.valueOf(values[7]);
-            profile.l2tpSecret = values[8];
-            profile.ipsecIdentifier = values[9];
-            profile.ipsecSecret = values[10];
-            profile.ipsecUserCert = values[11];
-            profile.ipsecCaCert = values[12];
+            profile.dnsServers = values[5];
+            profile.searchDomains = values[6];
+            profile.routes = values[7];
+            profile.mppe = Boolean.valueOf(values[8]);
+            profile.l2tpSecret = values[9];
+            profile.ipsecIdentifier = values[10];
+            profile.ipsecSecret = values[11];
+            profile.ipsecUserCert = values[12];
+            profile.ipsecCaCert = values[13];
 
             profile.saveLogin = !profile.username.isEmpty() || !profile.password.isEmpty();
             return profile;
@@ -102,7 +104,8 @@
         builder.append('\0').append(server);
         builder.append('\0').append(saveLogin ? username : "");
         builder.append('\0').append(saveLogin ? password : "");
-        builder.append('\0').append(domains);
+        builder.append('\0').append(dnsServers);
+        builder.append('\0').append(searchDomains);
         builder.append('\0').append(routes);
         builder.append('\0').append(mppe);
         builder.append('\0').append(l2tpSecret);
diff --git a/src/com/android/settings/wifi/AdvancedSettings.java b/src/com/android/settings/wifi/AdvancedSettings.java
deleted file mode 100644
index cd7b8a3..0000000
--- a/src/com/android/settings/wifi/AdvancedSettings.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2007 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.
- */
-
-package com.android.settings.wifi;
-
-import android.content.Context;
-import android.net.wifi.WifiInfo;
-import android.net.wifi.WifiManager;
-import android.os.Bundle;
-import android.preference.CheckBoxPreference;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.preference.PreferenceScreen;
-import android.provider.Settings;
-import android.provider.Settings.Secure;
-import android.text.TextUtils;
-import android.util.Log;
-import android.widget.Toast;
-
-import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.Utils;
-
-public class AdvancedSettings extends SettingsPreferenceFragment
-        implements Preference.OnPreferenceChangeListener {
-
-    private static final String TAG = "AdvancedSettings";
-    private static final String KEY_MAC_ADDRESS = "mac_address";
-    private static final String KEY_CURRENT_IP_ADDRESS = "current_ip_address";
-    private static final String KEY_FREQUENCY_BAND = "frequency_band";
-    private static final String KEY_NOTIFY_OPEN_NETWORKS = "notify_open_networks";
-    private static final String KEY_SLEEP_POLICY = "sleep_policy";
-    private static final String KEY_ENABLE_WIFI_WATCHDOG = "wifi_enable_watchdog_service";
-
-    private WifiManager mWifiManager;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        addPreferencesFromResource(R.xml.wifi_advanced_settings);
-    }
-
-    @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        initPreferences();
-        refreshWifiInfo();
-    }
-
-    private void initPreferences() {
-        CheckBoxPreference notifyOpenNetworks =
-                (CheckBoxPreference) findPreference(KEY_NOTIFY_OPEN_NETWORKS);
-        notifyOpenNetworks.setChecked(Secure.getInt(getContentResolver(),
-                Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0) == 1);
-        notifyOpenNetworks.setEnabled(mWifiManager.isWifiEnabled());
-
-        CheckBoxPreference watchdogEnabled =
-                (CheckBoxPreference) findPreference(KEY_ENABLE_WIFI_WATCHDOG);
-        watchdogEnabled.setChecked(Secure.getInt(getContentResolver(),
-                Secure.WIFI_WATCHDOG_ON, 1) == 1);
-
-        watchdogEnabled.setEnabled(mWifiManager.isWifiEnabled());
-
-        ListPreference frequencyPref = (ListPreference) findPreference(KEY_FREQUENCY_BAND);
-
-        if (mWifiManager.isDualBandSupported()) {
-            frequencyPref.setOnPreferenceChangeListener(this);
-            int value = mWifiManager.getFrequencyBand();
-            if (value != -1) {
-                frequencyPref.setValue(String.valueOf(value));
-            } else {
-                Log.e(TAG, "Failed to fetch frequency band");
-            }
-        } else {
-            if (frequencyPref != null) {
-                // null if it has already been removed before resume
-                getPreferenceScreen().removePreference(frequencyPref);
-            }
-        }
-
-        ListPreference sleepPolicyPref = (ListPreference) findPreference(KEY_SLEEP_POLICY);
-        if (sleepPolicyPref != null) {
-            if (Utils.isWifiOnly()) {
-                sleepPolicyPref.setEntries(R.array.wifi_sleep_policy_entries_wifi_only);
-                sleepPolicyPref.setSummary(R.string.wifi_setting_sleep_policy_summary_wifi_only);
-            }
-            sleepPolicyPref.setOnPreferenceChangeListener(this);
-            int value = Settings.System.getInt(getContentResolver(),
-                    Settings.System.WIFI_SLEEP_POLICY,
-                    Settings.System.WIFI_SLEEP_POLICY_NEVER);
-            sleepPolicyPref.setValue(String.valueOf(value));
-        }
-    }
-
-    @Override
-    public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {
-        String key = preference.getKey();
-
-        if (KEY_NOTIFY_OPEN_NETWORKS.equals(key)) {
-            Secure.putInt(getContentResolver(),
-                    Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
-                    ((CheckBoxPreference) preference).isChecked() ? 1 : 0);
-        } else if (KEY_ENABLE_WIFI_WATCHDOG.equals(key)) {
-            Secure.putInt(getContentResolver(),
-                    Secure.WIFI_WATCHDOG_ON,
-                    ((CheckBoxPreference) preference).isChecked() ? 1 : 0);
-        } else {
-            return super.onPreferenceTreeClick(screen, preference);
-        }
-        return true;
-    }
-
-    @Override
-    public boolean onPreferenceChange(Preference preference, Object newValue) {
-        String key = preference.getKey();
-
-        if (KEY_FREQUENCY_BAND.equals(key)) {
-            try {
-                mWifiManager.setFrequencyBand(Integer.parseInt(((String) newValue)), true);
-            } catch (NumberFormatException e) {
-                Toast.makeText(getActivity(), R.string.wifi_setting_frequency_band_error,
-                        Toast.LENGTH_SHORT).show();
-                return false;
-            }
-        }
-
-        if (KEY_SLEEP_POLICY.equals(key)) {
-            try {
-                Settings.System.putInt(getContentResolver(),
-                        Settings.System.WIFI_SLEEP_POLICY, Integer.parseInt(((String) newValue)));
-            } catch (NumberFormatException e) {
-                Toast.makeText(getActivity(), R.string.wifi_setting_sleep_policy_error,
-                        Toast.LENGTH_SHORT).show();
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    private void refreshWifiInfo() {
-        WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
-
-        Preference wifiMacAddressPref = findPreference(KEY_MAC_ADDRESS);
-        String macAddress = wifiInfo == null ? null : wifiInfo.getMacAddress();
-        wifiMacAddressPref.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress
-                : getActivity().getString(R.string.status_unavailable));
-
-        Preference wifiIpAddressPref = findPreference(KEY_CURRENT_IP_ADDRESS);
-        String ipAddress = Utils.getWifiIpAddresses(getActivity());
-        wifiIpAddressPref.setSummary(ipAddress == null ?
-                getActivity().getString(R.string.status_unavailable) : ipAddress);
-    }
-
-}
diff --git a/src/com/android/settings/wifi/AdvancedWifiSettings.java b/src/com/android/settings/wifi/AdvancedWifiSettings.java
index bc92b3a..6c983fd 100644
--- a/src/com/android/settings/wifi/AdvancedWifiSettings.java
+++ b/src/com/android/settings/wifi/AdvancedWifiSettings.java
@@ -20,8 +20,12 @@
 import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
+import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.provider.Settings.Secure;
 import android.text.TextUtils;
 import android.util.Log;
 import android.widget.Toast;
@@ -37,6 +41,9 @@
     private static final String KEY_MAC_ADDRESS = "mac_address";
     private static final String KEY_CURRENT_IP_ADDRESS = "current_ip_address";
     private static final String KEY_FREQUENCY_BAND = "frequency_band";
+    private static final String KEY_NOTIFY_OPEN_NETWORKS = "notify_open_networks";
+    private static final String KEY_SLEEP_POLICY = "sleep_policy";
+    private static final String KEY_ENABLE_WIFI_WATCHDOG = "wifi_enable_watchdog_service";
 
     private WifiManager mWifiManager;
 
@@ -60,28 +67,73 @@
     }
 
     private void initPreferences() {
+        CheckBoxPreference notifyOpenNetworks =
+            (CheckBoxPreference) findPreference(KEY_NOTIFY_OPEN_NETWORKS);
+        notifyOpenNetworks.setChecked(Secure.getInt(getContentResolver(),
+                Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 0) == 1);
+        notifyOpenNetworks.setEnabled(mWifiManager.isWifiEnabled());
 
-        ListPreference pref = (ListPreference) findPreference(KEY_FREQUENCY_BAND);
+        CheckBoxPreference watchdogEnabled =
+            (CheckBoxPreference) findPreference(KEY_ENABLE_WIFI_WATCHDOG);
+        watchdogEnabled.setChecked(Secure.getInt(getContentResolver(),
+                Secure.WIFI_WATCHDOG_ON, 1) == 1);
+
+        watchdogEnabled.setEnabled(mWifiManager.isWifiEnabled());
+
+        ListPreference frequencyPref = (ListPreference) findPreference(KEY_FREQUENCY_BAND);
 
         if (mWifiManager.isDualBandSupported()) {
-            pref.setOnPreferenceChangeListener(this);
+            frequencyPref.setOnPreferenceChangeListener(this);
             int value = mWifiManager.getFrequencyBand();
             if (value != -1) {
-                pref.setValue(String.valueOf(value));
+                frequencyPref.setValue(String.valueOf(value));
             } else {
                 Log.e(TAG, "Failed to fetch frequency band");
             }
         } else {
-            getPreferenceScreen().removePreference(pref);
+            if (frequencyPref != null) {
+                // null if it has already been removed before resume
+                getPreferenceScreen().removePreference(frequencyPref);
+            }
         }
+
+        ListPreference sleepPolicyPref = (ListPreference) findPreference(KEY_SLEEP_POLICY);
+        if (sleepPolicyPref != null) {
+            if (Utils.isWifiOnly()) {
+                sleepPolicyPref.setEntries(R.array.wifi_sleep_policy_entries_wifi_only);
+                sleepPolicyPref.setSummary(R.string.wifi_setting_sleep_policy_summary_wifi_only);
+            }
+            sleepPolicyPref.setOnPreferenceChangeListener(this);
+            int value = Settings.System.getInt(getContentResolver(),
+                    Settings.System.WIFI_SLEEP_POLICY,
+                    Settings.System.WIFI_SLEEP_POLICY_NEVER);
+            sleepPolicyPref.setValue(String.valueOf(value));
+        }
+    }
+
+    @Override
+    public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference preference) {
+        String key = preference.getKey();
+
+        if (KEY_NOTIFY_OPEN_NETWORKS.equals(key)) {
+            Secure.putInt(getContentResolver(),
+                    Secure.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON,
+                    ((CheckBoxPreference) preference).isChecked() ? 1 : 0);
+        } else if (KEY_ENABLE_WIFI_WATCHDOG.equals(key)) {
+            Secure.putInt(getContentResolver(),
+                    Secure.WIFI_WATCHDOG_ON,
+                    ((CheckBoxPreference) preference).isChecked() ? 1 : 0);
+        } else {
+            return super.onPreferenceTreeClick(screen, preference);
+        }
+        return true;
     }
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         String key = preference.getKey();
-        if (key == null) return true;
 
-        if (key.equals(KEY_FREQUENCY_BAND)) {
+        if (KEY_FREQUENCY_BAND.equals(key)) {
             try {
                 mWifiManager.setFrequencyBand(Integer.parseInt(((String) newValue)), true);
             } catch (NumberFormatException e) {
@@ -91,6 +143,17 @@
             }
         }
 
+        if (KEY_SLEEP_POLICY.equals(key)) {
+            try {
+                Settings.System.putInt(getContentResolver(),
+                        Settings.System.WIFI_SLEEP_POLICY, Integer.parseInt(((String) newValue)));
+            } catch (NumberFormatException e) {
+                Toast.makeText(getActivity(), R.string.wifi_setting_sleep_policy_error,
+                        Toast.LENGTH_SHORT).show();
+                return false;
+            }
+        }
+
         return true;
     }
 
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 549e695..3fd1bef 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -283,12 +283,12 @@
             case MENU_ID_ADVANCED:
                 if (getActivity() instanceof PreferenceActivity) {
                     ((PreferenceActivity) getActivity()).startPreferencePanel(
-                            AdvancedSettings.class.getCanonicalName(),
+                            AdvancedWifiSettings.class.getCanonicalName(),
                             null,
                             R.string.wifi_advanced_titlebar, null,
                             this, 0);
                 } else {
-                    startFragment(this, AdvancedSettings.class.getCanonicalName(), -1, null);
+                    startFragment(this, AdvancedWifiSettings.class.getCanonicalName(), -1, null);
                 }
                 return true;
         }
