diff --git a/res/values/strings.xml b/res/values/strings.xml
index 28e9e46..39596ba 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1155,6 +1155,12 @@
     <!-- Explanation of the Android Beam feature in the Android Beam settings panel. The use of "beam" here is as a verb and not considered trademarked. [CHAR LIMIT=NONE] -->
     <string name="android_beam_explained">When this feature is turned on, you can beam app content to another NFC-capable device by holding the devices close together. For example, you can beam Browser pages, YouTube videos, People contacts, and more.\n\nJust bring the devices together (typically back to back) and then touch your screen. The app determines what gets beamed.</string>
 
+    <!-- Network service discovery settings -->
+    <!-- Used in the 1st-level settings screen to turn on NSD -->
+    <string name="nsd_quick_toggle_title">Network service discovery</string>
+    <!-- Description of NFC in the 1st level settings screen. [CHAR LIMIT=NONE] -->
+    <string name="nsd_quick_toggle_summary">Allow apps on other devices to discover apps on this device</string>
+
     <!-- Wi-Fi Settings --> <skip />
     <!-- Used in the 1st-level settings screen to turn on Wi-Fi -->
     <string name="wifi_quick_toggle_title">Wi-Fi</string>
diff --git a/res/xml/wireless_settings.xml b/res/xml/wireless_settings.xml
index 8531b3e..866a617 100644
--- a/res/xml/wireless_settings.xml
+++ b/res/xml/wireless_settings.xml
@@ -64,6 +64,12 @@
             android:targetClass="com.android.phone.MobileNetworkSettings" />
     </PreferenceScreen>
 
+    <CheckBoxPreference
+        android:key="toggle_nsd"
+        android:title="@string/nsd_quick_toggle_title"
+        android:summary="@string/nsd_quick_toggle_summary"
+        android:persistent="false" />
+
     <PreferenceScreen
         android:fragment="com.android.settings.ProxySelector"
         android:key="proxy_settings"
diff --git a/src/com/android/settings/NsdEnabler.java b/src/com/android/settings/NsdEnabler.java
new file mode 100644
index 0000000..acdf92e
--- /dev/null
+++ b/src/com/android/settings/NsdEnabler.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2012 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.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.nsd.NsdManager;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.PreferenceScreen;
+
+import com.android.settings.R;
+
+/**
+ * NsdEnabler is a helper to manage network service discovery on/off checkbox state.
+ */
+public class NsdEnabler implements Preference.OnPreferenceChangeListener {
+    private final Context mContext;
+    private final CheckBoxPreference mCheckbox;
+    private final IntentFilter mIntentFilter;
+    private NsdManager mNsdManager;
+
+    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (NsdManager.ACTION_NSD_STATE_CHANGED.equals(action)) {
+                handleNsdStateChanged(intent.getIntExtra(NsdManager.EXTRA_NSD_STATE,
+                        NsdManager.NSD_STATE_DISABLED));
+            }
+        }
+    };
+
+    public NsdEnabler(Context context, CheckBoxPreference checkBoxPreference) {
+        mContext = context;
+        mCheckbox = checkBoxPreference;
+        mNsdManager = (NsdManager) mContext.getSystemService(Context.NSD_SERVICE);
+        mIntentFilter = new IntentFilter(NsdManager.ACTION_NSD_STATE_CHANGED);
+    }
+
+    public void resume() {
+        mContext.registerReceiver(mReceiver, mIntentFilter);
+        mCheckbox.setOnPreferenceChangeListener(this);
+    }
+
+    public void pause() {
+        mContext.unregisterReceiver(mReceiver);
+        mCheckbox.setOnPreferenceChangeListener(null);
+    }
+
+    public boolean onPreferenceChange(Preference preference, Object value) {
+
+        final boolean desiredState = (Boolean) value;
+        mCheckbox.setEnabled(false);
+        mNsdManager.setEnabled(desiredState);
+        return false;
+    }
+
+    private void handleNsdStateChanged(int newState) {
+        switch (newState) {
+            case NsdManager.NSD_STATE_DISABLED:
+                mCheckbox.setChecked(false);
+                mCheckbox.setEnabled(true);
+                break;
+            case NsdManager.NSD_STATE_ENABLED:
+                mCheckbox.setChecked(true);
+                mCheckbox.setEnabled(true);
+                break;
+        }
+    }
+}
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 56f6d46..ecddd0d 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -37,6 +37,7 @@
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.TelephonyProperties;
 import com.android.settings.nfc.NfcEnabler;
+import com.android.settings.NsdEnabler;
 
 public class WirelessSettings extends SettingsPreferenceFragment {
 
@@ -48,6 +49,7 @@
     private static final String KEY_TETHER_SETTINGS = "tether_settings";
     private static final String KEY_PROXY_SETTINGS = "proxy_settings";
     private static final String KEY_MOBILE_NETWORK_SETTINGS = "mobile_network_settings";
+    private static final String KEY_TOGGLE_NSD = "toggle_nsd"; //network service discovery
 
     public static final String EXIT_ECM_RESULT = "exit_ecm_result";
     public static final int REQUEST_CODE_EXIT_ECM = 1;
@@ -56,6 +58,7 @@
     private CheckBoxPreference mAirplaneModePreference;
     private NfcEnabler mNfcEnabler;
     private NfcAdapter mNfcAdapter;
+    private NsdEnabler mNsdEnabler;
 
     /**
      * Invoked on each preference click in this hierarchy, overrides
@@ -96,9 +99,11 @@
         mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE);
         CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC);
         PreferenceScreen androidBeam = (PreferenceScreen) findPreference(KEY_ANDROID_BEAM_SETTINGS);
+        CheckBoxPreference nsd = (CheckBoxPreference) findPreference(KEY_TOGGLE_NSD);
 
         mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
         mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
+        mNsdEnabler = new NsdEnabler(activity, nsd);
 
         String toggleable = Settings.System.getString(activity.getContentResolver(),
                 Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
@@ -173,6 +178,7 @@
         if (mNfcEnabler != null) {
             mNfcEnabler.resume();
         }
+        mNsdEnabler.resume();
     }
 
     @Override
@@ -183,6 +189,7 @@
         if (mNfcEnabler != null) {
             mNfcEnabler.pause();
         }
+        mNsdEnabler.pause();
     }
 
     @Override
