Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp	(revision 54149)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp	(revision 54150)
@@ -49,4 +49,5 @@
 #include "CCanShowWindowEvent.h"
 #include "CShowWindowEvent.h"
+#include "CVBoxSVCAvailabilityChangedEvent.h"
 #include "CGuestMonitorChangedEvent.h"
 
@@ -266,4 +267,10 @@
             break;
         }
+        case KVBoxEventType_OnVBoxSVCAvailabilityChanged:
+        {
+            CVBoxSVCAvailabilityChangedEvent es(pEvent);
+            emit sigVBoxSVCAvailabilityChange(es.GetAvailable());
+            break;
+        }
         case KVBoxEventType_OnGuestMonitorChanged:
         {
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h	(revision 54149)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h	(revision 54150)
@@ -81,4 +81,5 @@
     void sigShowWindow(LONG64 &winId); /* use Qt::DirectConnection */
     void sigCPUExecutionCapChange();
+    void sigVBoxSVCAvailabilityChange(bool fAvailable);
     void sigGuestMonitorChange(KGuestMonitorChangedEventType changeType, ulong uScreenId, QRect screenGeo);
 };
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 54149)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 54150)
@@ -73,4 +73,5 @@
 # include "UIModalWindowManager.h"
 # include "UIIconPool.h"
+# include "UIVirtualBoxEventHandler.h"
 
 # ifdef Q_WS_X11
@@ -220,4 +221,5 @@
 VBoxGlobal::VBoxGlobal()
     : mValid (false)
+    , m_fVBoxSVCAvailable(true)
     , mSelectorWnd (NULL)
     , m_fSeparateProcess(false)
@@ -3883,4 +3885,8 @@
     m_strHomeFolder = virtualBox().GetHomeFolder();
 
+    /* Watch for the VBoxSVC availability changes: */
+    connect(gVBoxEvents, SIGNAL(sigVBoxSVCAvailabilityChange(bool)),
+            this, SLOT(sltHandleVBoxSVCAvailabilityChange(bool)));
+
     /* create default non-null global settings */
     gset = VBoxGlobalSettings (false);
@@ -4297,4 +4303,17 @@
 }
 
+void VBoxGlobal::sltHandleVBoxSVCAvailabilityChange(bool fAvailable)
+{
+    /* Make sure the VBoxSVC availability changed: */
+    if (m_fVBoxSVCAvailable == fAvailable)
+        return;
+
+    /* Cache the new VBoxSVC availability value: */
+    m_fVBoxSVCAvailable = fAvailable;
+
+    /* Notify listeners about the VBoxSVC availability change: */
+    emit sigVBoxSVCAvailabilityChange();
+}
+
 #ifdef VBOX_WITH_DEBUGGER_GUI
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 54149)
+++ trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 54150)
@@ -112,4 +112,7 @@
     QString homeFolder() const { return m_strHomeFolder; }
 
+    /** Returns the VBoxSVC availability value. */
+    bool isVBoxSVCAvailable() const { return m_fVBoxSVCAvailable; }
+
     VBoxGlobalSettings &settings() { return gset; }
     bool setSettings (VBoxGlobalSettings &gs);
@@ -396,4 +399,7 @@
 signals:
 
+    /** Notifies listeners about the VBoxSVC availability change. */
+    void sigVBoxSVCAvailabilityChange();
+
     /* Notifiers: Medium-processing stuff: */
     void sigMediumCreated(const QString &strMediumID);
@@ -417,4 +423,7 @@
     void prepare();
     void cleanup();
+
+    /** Handles the VBoxSVC availability change. */
+    void sltHandleVBoxSVCAvailabilityChange(bool fAvailable);
 
 protected:
@@ -444,4 +453,7 @@
     /** Holds the symbolic VirtualBox home-folder representation. */
     QString m_strHomeFolder;
+
+    /** Holds the VBoxSVC availability value. */
+    bool m_fVBoxSVCAvailable;
 
     VBoxGlobalSettings gset;
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp	(revision 54149)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp	(revision 54150)
@@ -60,13 +60,26 @@
     m_mainEventListener = CEventListener(pListener);
 
+    /* Get VirtualBoxClient: */
+    const CVirtualBoxClient vboxClient = vboxGlobal().virtualBoxClient();
+    AssertWrapperOk(vboxClient);
+    /* Get event-source: */
+    CEventSource eventSourceVirtualBoxClient = vboxClient.GetEventSource();
+    AssertWrapperOk(eventSourceVirtualBoxClient);
+    /* Register listener for expected event-types: */
+    QVector<KVBoxEventType> vboxClientEvents;
+    vboxClientEvents
+        << KVBoxEventType_OnVBoxSVCAvailabilityChanged;
+    eventSourceVirtualBoxClient.RegisterListener(m_mainEventListener, vboxClientEvents, TRUE);
+    AssertWrapperOk(eventSourceVirtualBoxClient);
+
     /* Get VirtualBox: */
     const CVirtualBox vbox = vboxGlobal().virtualBox();
     AssertWrapperOk(vbox);
     /* Get event-source: */
-    CEventSource eventSource = vbox.GetEventSource();
-    AssertWrapperOk(eventSource);
+    CEventSource eventSourceVirtualBox = vbox.GetEventSource();
+    AssertWrapperOk(eventSourceVirtualBox);
     /* Register listener for expected event-types: */
-    QVector<KVBoxEventType> events;
-    events
+    QVector<KVBoxEventType> vboxEvents;
+    vboxEvents
         << KVBoxEventType_OnMachineStateChanged
         << KVBoxEventType_OnMachineDataChanged
@@ -76,8 +89,11 @@
         << KVBoxEventType_OnSnapshotDeleted
         << KVBoxEventType_OnSnapshotChanged;
-    eventSource.RegisterListener(m_mainEventListener, events, TRUE);
-    AssertWrapperOk(eventSource);
+    eventSourceVirtualBox.RegisterListener(m_mainEventListener, vboxEvents, TRUE);
+    AssertWrapperOk(eventSourceVirtualBox);
 
     /* Prepare connections: */
+    connect(pListener->getWrapped(), SIGNAL(sigVBoxSVCAvailabilityChange(bool)),
+            this, SIGNAL(sigVBoxSVCAvailabilityChange(bool)),
+            Qt::QueuedConnection);
     connect(pListener->getWrapped(), SIGNAL(sigMachineStateChange(QString, KMachineState)),
             this, SIGNAL(sigMachineStateChange(QString, KMachineState)),
@@ -109,8 +125,17 @@
     AssertWrapperOk(vbox);
     /* Get event-source: */
-    CEventSource eventSource = vbox.GetEventSource();
-    AssertWrapperOk(eventSource);
+    CEventSource eventSourceVirtualBox = vbox.GetEventSource();
+    AssertWrapperOk(eventSourceVirtualBox);
     /* Unregister listener: */
-    eventSource.UnregisterListener(m_mainEventListener);
+    eventSourceVirtualBox.UnregisterListener(m_mainEventListener);
+
+    /* Get VirtualBoxClient: */
+    const CVirtualBoxClient vboxClient = vboxGlobal().virtualBoxClient();
+    AssertWrapperOk(vboxClient);
+    /* Get event-source: */
+    CEventSource eventSourceVirtualBoxClient = vboxClient.GetEventSource();
+    AssertWrapperOk(eventSourceVirtualBoxClient);
+    /* Unregister listener: */
+    eventSourceVirtualBoxClient.UnregisterListener(m_mainEventListener);
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.h	(revision 54149)
+++ trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.h	(revision 54150)
@@ -29,4 +29,6 @@
 signals:
 
+    /** Notifies listeners about the VBoxSVC become @a fAvailable. */
+    void sigVBoxSVCAvailabilityChange(bool fAvailable);
     /** Notifies listeners about @a state change event for the machine with @a strId. */
     void sigMachineStateChange(QString strId, KMachineState state);
