Index: /trunk/src/VBox/Frontends/VirtualBox4/include/VBoxDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox4/include/VBoxDefs.h	(revision 14508)
+++ /trunk/src/VBox/Frontends/VirtualBox4/include/VBoxDefs.h	(revision 14509)
@@ -118,4 +118,7 @@
 #endif
         ChangeGUILanguageEventType,
+#if defined (VBOX_GUI_WITH_SYSTRAY)
+        ChangeGUITrayIconEventType,
+#endif
         AddVDMUrlsEventType
     };
Index: /trunk/src/VBox/Frontends/VirtualBox4/include/VBoxGlobal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox4/include/VBoxGlobal.h	(revision 14508)
+++ /trunk/src/VBox/Frontends/VirtualBox4/include/VBoxGlobal.h	(revision 14509)
@@ -390,4 +390,17 @@
 };
 
+#ifdef VBOX_GUI_WITH_SYSTRAY
+class VBoxChangeGUITrayIconEvent : public QEvent
+{
+public:
+    VBoxChangeGUITrayIconEvent (bool aEnabled)
+        : QEvent ((QEvent::Type) VBoxDefs::ChangeGUITrayIconEventType)
+        , mEnabled (aEnabled)
+        {}
+
+    const bool mEnabled;
+};
+#endif
+
 class Process : public QProcess
 {
@@ -915,5 +928,5 @@
 
     /* signals emitted when the VirtualBox callback is called by the server
-     * (not that currently these signals are emitted only when the application
+     * (note that currently these signals are emitted only when the application
      * is the in the VM selector mode) */
 
@@ -923,4 +936,5 @@
     void sessionStateChanged (const VBoxSessionStateChangeEvent &e);
     void snapshotChanged (const VBoxSnapshotEvent &e);
+    void systrayIconChanged (const VBoxChangeGUITrayIconEvent& e);
 
     void canShowRegDlg (bool aCanShow);
Index: /trunk/src/VBox/Frontends/VirtualBox4/include/VBoxSelectorWnd.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox4/include/VBoxSelectorWnd.h	(revision 14508)
+++ /trunk/src/VBox/Frontends/VirtualBox4/include/VBoxSelectorWnd.h	(revision 14509)
@@ -132,4 +132,7 @@
     void sessionStateChanged (const VBoxSessionStateChangeEvent &e);
     void snapshotChanged (const VBoxSnapshotEvent &e);
+#ifdef VBOX_GUI_WITH_SYSTRAY
+    void systrayIconChanged (const VBoxChangeGUITrayIconEvent &e);
+#endif
 
 private:
Index: /trunk/src/VBox/Frontends/VirtualBox4/src/VBoxGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox4/src/VBoxGlobal.cpp	(revision 14508)
+++ /trunk/src/VBox/Frontends/VirtualBox4/src/VBoxGlobal.cpp	(revision 14509)
@@ -831,4 +831,8 @@
                 if (sKey == "GUI/LanguageID")
                     QApplication::postEvent (&mGlobal, new VBoxChangeGUILanguageEvent (sVal));
+            #ifdef VBOX_GUI_WITH_SYSTRAY
+                if (sKey == "GUI/TrayIcon/Enabled")
+                    QApplication::postEvent (&mGlobal, new VBoxChangeGUITrayIconEvent ((sVal.toLower() == "true") ? true : false));
+            #endif
 
                 mMutex.lock();
@@ -5031,4 +5035,9 @@
         {
             loadLanguage (static_cast<VBoxChangeGUILanguageEvent*> (e)->mLangId);
+            return true;
+        }
+        case VBoxDefs::ChangeGUITrayIconEventType:
+        {
+            emit systrayIconChanged (*(VBoxChangeGUITrayIconEvent *) e);
             return true;
         }
Index: /trunk/src/VBox/Frontends/VirtualBox4/src/VBoxSelectorWnd.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox4/src/VBoxSelectorWnd.cpp	(revision 14508)
+++ /trunk/src/VBox/Frontends/VirtualBox4/src/VBoxSelectorWnd.cpp	(revision 14509)
@@ -674,4 +674,8 @@
     connect (&vboxGlobal(), SIGNAL (snapshotChanged (const VBoxSnapshotEvent &)),
              this, SLOT (snapshotChanged (const VBoxSnapshotEvent &)));
+#ifdef VBOX_GUI_WITH_SYSTRAY
+    connect (&vboxGlobal(), SIGNAL (systrayIconChanged (const VBoxChangeGUITrayIconEvent &)),
+             this, SLOT (systrayIconChanged (const VBoxChangeGUITrayIconEvent &)));
+#endif
 
     /* bring the VM list to the focus */
@@ -739,12 +743,4 @@
 
     delete dlg;
-
-    /* Reload settings. */
-    settings = vboxGlobal().settings();
-
-    /* Update GUI settings. */
-#ifdef VBOX_GUI_WITH_SYSTRAY    
-    mTrayIcon->trayIconShow (settings.trayIconEnabled());
-#endif
 }
 
@@ -1617,4 +1613,9 @@
 #ifdef VBOX_GUI_WITH_SYSTRAY
 
+void VBoxSelectorWnd::systrayIconChanged (const VBoxChangeGUITrayIconEvent &aEvent)
+{
+    mTrayIcon->trayIconShow (aEvent.mEnabled);
+}
+
 VBoxTrayIcon::VBoxTrayIcon (VBoxSelectorWnd* aParent, VBoxVMModel* aVMModel)
 {
@@ -1937,10 +1938,4 @@
     }
     setVisible (mActive);
-
-    VBoxGlobalSettings settings = vboxGlobal().settings();
-    settings.setTrayIconEnabled (mActive);
-
-    CVirtualBox vbox = vboxGlobal().virtualBox();
-    settings.save (vbox);
 }
 
