diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 94c12c1..a96fb1e 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -29,7 +29,6 @@
     * Settings subclasses for launching independently.
     */
     public static class BluetoothSettingsActivity extends SettingsActivity { /* empty */ }
-    public static class WirelessSettingsActivity extends SettingsActivity { /* empty */ }
     public static class SimSettingsActivity extends SettingsActivity { /* empty */ }
     public static class TetherSettingsActivity extends SettingsActivity { /* empty */ }
     public static class VpnSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index d0275ba..d5e886f 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -920,7 +920,11 @@
                 && !Utils.isMonkeyRunning(), isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
-                        Settings.WirelessSettingsActivity.class.getName()),
+                Settings.NetworkDashboardActivity.class.getName()),
+                !UserManager.isDeviceInDemoMode(this), isAdmin);
+
+        setTileEnabled(new ComponentName(packageName,
+                Settings.ConnectedDeviceDashboardActivity.class.getName()),
                 !UserManager.isDeviceInDemoMode(this), isAdmin);
 
         setTileEnabled(new ComponentName(packageName,
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
deleted file mode 100644
index 32dc0c3..0000000
--- a/src/com/android/settings/WirelessSettings.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (C) 2009 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;
-
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.provider.SearchIndexableResource;
-import android.provider.Settings;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-import android.util.Log;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.network.AirplaneModePreferenceController;
-import com.android.settings.network.MobileNetworkPreferenceController;
-import com.android.settings.network.MobilePlanPreferenceController;
-import com.android.settings.network.ProxyPreferenceController;
-import com.android.settings.network.TetherPreferenceController;
-import com.android.settings.network.VpnPreferenceController;
-import com.android.settings.network.WifiCallingPreferenceController;
-import com.android.settings.nfc.NfcPreferenceController;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-import com.android.settingslib.RestrictedLockUtils;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import static com.android.settings.network.MobilePlanPreferenceController
-        .MANAGE_MOBILE_PLAN_DIALOG_ID;
-
-public class WirelessSettings extends SettingsPreferenceFragment implements Indexable,
-        MobilePlanPreferenceController.MobilePlanPreferenceHost {
-    private static final String TAG = "WirelessSettings";
-
-    private static final String KEY_WIMAX_SETTINGS = "wimax_settings";
-
-    private UserManager mUm;
-
-    private AirplaneModePreferenceController mAirplaneModePreferenceController;
-    private TetherPreferenceController mTetherPreferenceController;
-    private MobileNetworkPreferenceController mMobileNetworkPreferenceController;
-    private VpnPreferenceController mVpnPreferenceController;
-    private WifiCallingPreferenceController mWifiCallingPreferenceController;
-    private ProxyPreferenceController mProxyPreferenceController;
-    private MobilePlanPreferenceController mMobilePlanPreferenceController;
-    private NfcPreferenceController mNfcPreferenceController;
-
-    /**
-     * Invoked on each preference click in this hierarchy, overrides
-     * PreferenceFragment's implementation.  Used to make sure we track the
-     * preference click events.
-     */
-    @Override
-    public boolean onPreferenceTreeClick(Preference preference) {
-        log("onPreferenceTreeClick: preference=" + preference);
-        if (mAirplaneModePreferenceController.handlePreferenceTreeClick(preference)) {
-            return true;
-        }
-        if (mMobilePlanPreferenceController.handlePreferenceTreeClick(preference)) {
-            return true;
-        }
-        // Let the intents be launched by the Preference manager
-        return super.onPreferenceTreeClick(preference);
-    }
-
-    @Override
-    public Dialog onCreateDialog(int dialogId) {
-        log("onCreateDialog: dialogId=" + dialogId);
-        switch (dialogId) {
-            case MANAGE_MOBILE_PLAN_DIALOG_ID:
-                return new AlertDialog.Builder(getActivity())
-                        .setMessage(mMobilePlanPreferenceController.getMobilePlanDialogMessage())
-                        .setCancelable(false)
-                        .setPositiveButton(com.android.internal.R.string.ok,
-                                new DialogInterface.OnClickListener() {
-                                    @Override
-                                    public void onClick(DialogInterface dialog, int id) {
-                                        log("MANAGE_MOBILE_PLAN_DIALOG.onClickListener id=" + id);
-                                        mMobilePlanPreferenceController
-                                                .setMobilePlanDialogMessage(null);
-                                    }
-                                })
-                        .create();
-        }
-        return super.onCreateDialog(dialogId);
-    }
-
-    @Override
-    public int getDialogMetricsCategory(int dialogId) {
-        if (MANAGE_MOBILE_PLAN_DIALOG_ID == dialogId) {
-            return MetricsEvent.DIALOG_MANAGE_MOBILE_PLAN;
-        }
-        return 0;
-    }
-
-    private void log(String s) {
-        Log.d(TAG, s);
-    }
-
-    @Override
-    public int getMetricsCategory() {
-        return MetricsEvent.WIRELESS;
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        mUm = (UserManager) getSystemService(Context.USER_SERVICE);
-
-        addPreferencesFromResource(R.xml.wireless_settings);
-
-        final boolean isAdmin = mUm.isAdminUser();
-
-        final Activity activity = getActivity();
-
-        final PreferenceScreen screen = getPreferenceScreen();
-        mAirplaneModePreferenceController = new AirplaneModePreferenceController(activity, this);
-        mTetherPreferenceController = new TetherPreferenceController(activity);
-        mMobileNetworkPreferenceController = new MobileNetworkPreferenceController(activity);
-        mVpnPreferenceController = new VpnPreferenceController(activity);
-        mWifiCallingPreferenceController = new WifiCallingPreferenceController(activity);
-        mProxyPreferenceController = new ProxyPreferenceController(activity);
-        mMobilePlanPreferenceController = new MobilePlanPreferenceController(activity, this);
-        mNfcPreferenceController = new NfcPreferenceController(activity);
-
-        mMobilePlanPreferenceController.onCreate(savedInstanceState);
-
-        mAirplaneModePreferenceController.displayPreference(screen);
-        mTetherPreferenceController.displayPreference(screen);
-        mMobileNetworkPreferenceController.displayPreference(screen);
-        mVpnPreferenceController.displayPreference(screen);
-        mWifiCallingPreferenceController.displayPreference(screen);
-        mProxyPreferenceController.displayPreference(screen);
-        mMobilePlanPreferenceController.displayPreference(screen);
-        mNfcPreferenceController.displayPreference(screen);
-
-        String toggleable = Settings.Global.getString(activity.getContentResolver(),
-                Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
-
-        //enable/disable wimax depending on the value in config.xml
-        final boolean isWimaxEnabled = isAdmin && this.getResources().getBoolean(
-                com.android.internal.R.bool.config_wimaxEnabled);
-        if (!isWimaxEnabled || RestrictedLockUtils.hasBaseUserRestriction(activity,
-                UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS, UserHandle.myUserId())) {
-            PreferenceScreen root = getPreferenceScreen();
-            Preference ps = findPreference(KEY_WIMAX_SETTINGS);
-            if (ps != null) root.removePreference(ps);
-        } else {
-            if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_WIMAX)
-                    && isWimaxEnabled) {
-                Preference ps = findPreference(KEY_WIMAX_SETTINGS);
-                ps.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE);
-            }
-        }
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-
-        mAirplaneModePreferenceController.onResume();
-        mNfcPreferenceController.onResume();
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        mMobilePlanPreferenceController.onSaveInstanceState(outState);
-    }
-
-    @Override
-    public void onPause() {
-        super.onPause();
-        mAirplaneModePreferenceController.onPause();
-        mNfcPreferenceController.onPause();
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        mAirplaneModePreferenceController.onActivityResult(requestCode, resultCode, data);
-        super.onActivityResult(requestCode, resultCode, data);
-    }
-
-    @Override
-    public void showMobilePlanMessageDialog() {
-        showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
-    }
-
-    @Override
-    protected int getHelpResource() {
-        return R.string.help_url_more_networks;
-    }
-}
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 60d7375..742f727 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -39,7 +39,6 @@
 import com.android.settings.UserDictionarySettings;
 import com.android.settings.WallpaperTypeSettings;
 import com.android.settings.WifiCallingSettings;
-import com.android.settings.WirelessSettings;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
 import com.android.settings.accessibility.CaptionPropertiesFragment;
@@ -133,7 +132,6 @@
      * security exception if the fragment it needs to display is not in this list.
      */
     public static final String[] ENTRY_FRAGMENTS = {
-            WirelessSettings.class.getName(),
             WifiSettings.class.getName(),
             ConfigureWifiSettings.class.getName(),
             SavedAccessPointsWifiSettings.class.getName(),
@@ -249,7 +247,6 @@
             Settings.WifiSettingsActivity.class.getName(),
             Settings.BluetoothSettingsActivity.class.getName(),
             Settings.SimSettingsActivity.class.getName(),
-            Settings.WirelessSettingsActivity.class.getName(),
             //device_section
             Settings.SoundSettingsActivity.class.getName(),
             Settings.DisplaySettingsActivity.class.getName(),
diff --git a/src/com/android/settings/dashboard/conditional/AirplaneModeCondition.java b/src/com/android/settings/dashboard/conditional/AirplaneModeCondition.java
index 37faeab..2d6a14d 100644
--- a/src/com/android/settings/dashboard/conditional/AirplaneModeCondition.java
+++ b/src/com/android/settings/dashboard/conditional/AirplaneModeCondition.java
@@ -73,7 +73,7 @@
     @Override
     public void onPrimaryClick() {
         mManager.getContext().startActivity(new Intent(mManager.getContext(),
-                Settings.WirelessSettingsActivity.class));
+                Settings.NetworkDashboardActivity.class));
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
index 154a901..1598011 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -54,13 +54,13 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
-import com.android.settings.WirelessSettings;
 import com.android.settings.applications.AppHeaderController;
 import com.android.settings.applications.InstalledAppDetails;
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.bluetooth.BluetoothSettings;
 import com.android.settings.core.PreferenceController;
 import com.android.settings.location.LocationSettings;
+import com.android.settings.network.NetworkDashboardFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.wifi.WifiSettings;
@@ -571,7 +571,7 @@
                         R.string.bluetooth_settings, null, null, 0);
                 break;
             case ACTION_WIRELESS_SETTINGS:
-                sa.startPreferencePanel(this, WirelessSettings.class.getName(), null,
+                sa.startPreferencePanel(this, NetworkDashboardFragment.class.getName(), null,
                         R.string.radio_controls_title, null, null, 0);
                 break;
             case ACTION_APP_DETAILS:
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
index d3c32ca..e0fb876 100644
--- a/src/com/android/settings/search/Ranking.java
+++ b/src/com/android/settings/search/Ranking.java
@@ -26,7 +26,6 @@
 import com.android.settings.ScreenPinningSettings;
 import com.android.settings.SecuritySettings;
 import com.android.settings.WallpaperTypeSettings;
-import com.android.settings.WirelessSettings;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.accounts.UserAndAccountDashboardFragment;
 import com.android.settings.applications.AdvancedAppSettings;
@@ -50,6 +49,7 @@
 import com.android.settings.language.LanguageAndInputSettings;
 import com.android.settings.location.LocationSettings;
 import com.android.settings.location.ScanningSettings;
+import com.android.settings.network.NetworkDashboardFragment;
 import com.android.settings.notification.ConfigureNotificationSettings;
 import com.android.settings.notification.SoundSettings;
 import com.android.settings.notification.ZenModeAutomationSettings;
@@ -122,8 +122,8 @@
         sRankMap.put(DataUsageSummary.class.getName(), RANK_DATA_USAGE);
         sRankMap.put(DataUsageMeteredSettings.class.getName(), RANK_DATA_USAGE);
 
-        // Other wireless settinfs
-        sRankMap.put(WirelessSettings.class.getName(), RANK_WIRELESS);
+        // Other wireless settings
+        sRankMap.put(NetworkDashboardFragment.class.getName(), RANK_WIRELESS);
 
         // Display
         sRankMap.put(DisplaySettings.class.getName(), RANK_DISPLAY);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 6ecfe59..6cfc9a6 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -31,7 +31,6 @@
 import com.android.settings.ScreenPinningSettings;
 import com.android.settings.SecuritySettings;
 import com.android.settings.WallpaperTypeSettings;
-import com.android.settings.WirelessSettings;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.accounts.UserAndAccountDashboardFragment;
 import com.android.settings.applications.AdvancedAppSettings;
@@ -109,7 +108,6 @@
         addIndex(SimSettings.class, NO_DATA_RES_ID, R.drawable.ic_sim_sd);
         addIndex(DataUsageSummary.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage);
         addIndex(DataUsageMeteredSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage);
-        addIndex(WirelessSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_more);
         addIndex(ScreenZoomSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
         addIndex(DisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
         addIndex(WallpaperTypeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
