Index: network-manager-applet-0.9.2.0+git.20120126t000800.5151959/nm-applet.schemas.in
===================================================================
--- network-manager-applet-0.9.2.0+git.20120126t000800.5151959.orig/nm-applet.schemas.in	2012-01-30 11:06:59.000000000 -0500
+++ network-manager-applet-0.9.2.0+git.20120126t000800.5151959/nm-applet.schemas.in	2012-02-24 12:00:36.922701318 -0500
@@ -70,6 +70,19 @@
         </long>
       </locale>
     </schema>
+    <schema>
+      <key>/schemas/apps/nm-applet/show-applet</key>
+      <applyto>/apps/nm-applet/show-applet</applyto>
+      <owner>nm-applet</owner>
+      <type>bool</type>
+      <default>TRUE</default>
+      <locale name="C">
+        <short>Show the applet in notification area</short>
+        <long>
+          Set to FALSE to disable displaying the applet in the notification area.
+        </long>
+      </locale>
+    </schema>
 
   </schemalist>
 </gconfschemafile>
Index: network-manager-applet-0.9.2.0+git.20120126t000800.5151959/src/applet.c
===================================================================
--- network-manager-applet-0.9.2.0+git.20120126t000800.5151959.orig/src/applet.c	2012-02-24 12:00:36.818701313 -0500
+++ network-manager-applet-0.9.2.0+git.20120126t000800.5151959/src/applet.c	2012-02-24 12:09:22.762720121 -0500
@@ -2912,11 +2912,18 @@
 		state = NM_STATE_UNKNOWN;
 
 #ifdef ENABLE_INDICATOR
-	if (nm_running)
+	if (applet->in_fallback)
+		gtk_status_icon_set_visible (applet->status_icon, applet->visible);
+	else
+		gtk_status_icon_set_visible (applet->status_icon, FALSE);
+
+	if (nm_running && applet->visible)
 		app_indicator_set_status (applet->app_indicator, APP_INDICATOR_STATUS_ACTIVE);
 	else
 		app_indicator_set_status (applet->app_indicator, APP_INDICATOR_STATUS_PASSIVE);
-#endif
+#else
+	gtk_status_icon_set_visible (applet->status_icon, applet->visible);
+#endif /* ENABLE_INDICATOR */
 
 	switch (state) {
 	case NM_STATE_UNKNOWN:
@@ -3476,7 +3483,7 @@
 	g_return_val_if_fail (applet->status_icon, NULL);
 
 	g_message ("using fallback from indicator to GtkStatusIcon");
-	gtk_status_icon_set_visible (applet->status_icon, TRUE);
+	gtk_status_icon_set_visible (applet->status_icon, applet->visible);
 
 	applet->in_fallback = TRUE;
 
@@ -3537,7 +3544,7 @@
 	applet->status_icon = gtk_status_icon_new ();
 
 #ifdef ENABLE_INDICATOR
-	gtk_status_icon_set_visible (applet->status_icon, FALSE);
+	gtk_status_icon_set_visible (applet->status_icon, applet->visible);
 #endif
 
 	if (!applet->status_icon)
@@ -3658,6 +3665,32 @@
 	}
 }
 
+static void
+applet_gconf_value_changed (GConfClient *client,
+                            guint cnxn_id,
+                            GConfEntry *entry,
+                            gpointer user_data)
+{
+	NMApplet *applet = NM_APPLET (user_data);
+	GConfValue *value = NULL;
+
+	g_return_if_fail (entry != NULL);
+
+	if (g_strcmp0(gconf_entry_get_key (entry), PREF_SHOW_APPLET) == 0) {
+		value = gconf_entry_get_value (entry);
+		applet->visible = gconf_value_get_bool (value);
+
+		gtk_status_icon_set_visible (applet->status_icon, applet->visible);
+
+#ifdef ENABLE_INDICATOR
+		if (applet->visible)
+			app_indicator_set_status (applet->app_indicator, APP_INDICATOR_STATUS_ACTIVE);
+		else
+			app_indicator_set_status (applet->app_indicator, APP_INDICATOR_STATUS_PASSIVE);
+#endif /* ENABLE_INDICATOR */
+	}
+}
+
 static GObject *
 constructor (GType type,
              guint n_props,
@@ -3683,12 +3716,20 @@
 	if (!applet->gconf_client)
 		goto error;
 
-	/* Note that we don't care about change notifications for prefs values... */
 	gconf_client_add_dir (applet->gconf_client,
 	                      APPLET_PREFS_PATH,
 	                      GCONF_CLIENT_PRELOAD_ONELEVEL,
 	                      NULL);
 
+	applet->visible = gconf_client_get_bool (applet->gconf_client,
+	                                         PREF_SHOW_APPLET,
+	                                         NULL);
+
+	gconf_client_notify_add (applet->gconf_client,
+	                         APPLET_PREFS_PATH,
+	                         (GConfClientNotifyFunc) applet_gconf_value_changed,
+                                 applet, NULL, NULL);
+
 	foo_client_setup (applet);
 
 	/* Load pixmaps and create applet widgets */
Index: network-manager-applet-0.9.2.0+git.20120126t000800.5151959/src/applet.h
===================================================================
--- network-manager-applet-0.9.2.0+git.20120126t000800.5151959.orig/src/applet.h	2012-02-24 12:00:36.818701313 -0500
+++ network-manager-applet-0.9.2.0+git.20120126t000800.5151959/src/applet.h	2012-02-24 12:00:36.926701317 -0500
@@ -69,6 +69,7 @@
 #define PREF_DISABLE_VPN_NOTIFICATIONS            APPLET_PREFS_PATH "/disable-vpn-notifications"
 #define PREF_DISABLE_WIFI_CREATE                  APPLET_PREFS_PATH "/disable-wifi-create"
 #define PREF_SUPPRESS_WIRELESS_NETWORKS_AVAILABLE APPLET_PREFS_PATH "/suppress-wireless-networks-available"
+#define PREF_SHOW_APPLET                          APPLET_PREFS_PATH "/show-applet"
 
 #define ICON_LAYER_LINK 0
 #define ICON_LAYER_VPN 1
@@ -94,6 +95,8 @@
 
 	GConfClient *	gconf_client;
 
+	gboolean visible;
+
 	/* Permissions */
 	NMClientPermissionResult permissions[NM_CLIENT_PERMISSION_LAST + 1];
 
