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
