Index: /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp	(revision 35171)
+++ /trunk/src/VBox/Frontends/VBoxHeadless/VBoxHeadless.cpp	(revision 35172)
@@ -106,15 +106,19 @@
         switch (aType)
         {
-            case VBoxEventType_OnVBoxSVCUnavailable:
-            {
-                ComPtr<IVBoxSVCUnavailableEvent> pVSUEv = aEvent;
-                Assert(pVSUEv);
-
-                LogRel(("VBoxHeadless: VBoxSVC became unavailable, exiting.\n"));
-                RTPrintf("VBoxSVC became unavailable, exiting.\n");
-                /* Terminate the VM as cleanly as possible given that VBoxSVC
-                 * is no longer present. */
-                g_fTerminateFE = true;
-                gEventQ->interruptEventQueueProcessing();
+            case VBoxEventType_OnVBoxSVCAvailabilityChanged:
+            {
+                ComPtr<IVBoxSVCAvailabilityChangedEvent> pVSACEv = aEvent;
+                Assert(pVSACEv);
+                BOOL fAvailable = FALSE;
+                pVSACEv->COMGETTER(Available)(&fAvailable);
+                if (!fAvailable)
+                {
+                    LogRel(("VBoxHeadless: VBoxSVC became unavailable, exiting.\n"));
+                    RTPrintf("VBoxSVC became unavailable, exiting.\n");
+                    /* Terminate the VM as cleanly as possible given that VBoxSVC
+                     * is no longer present. */
+                    g_fTerminateFE = true;
+                    gEventQ->interruptEventQueueProcessing();
+                }
                 break;
             }
@@ -998,5 +1002,5 @@
             vboxClientListener = new VirtualBoxClientEventListenerImpl();
             com::SafeArray <VBoxEventType_T> eventTypes;
-            eventTypes.push_back(VBoxEventType_OnVBoxSVCUnavailable);
+            eventTypes.push_back(VBoxEventType_OnVBoxSVCAvailabilityChanged);
             CHECK_ERROR(pES, RegisterListener(vboxClientListener, ComSafeArrayAsInParam(eventTypes), true));
         }
Index: /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp	(revision 35171)
+++ /trunk/src/VBox/Frontends/VBoxSDL/VBoxSDL.cpp	(revision 35172)
@@ -249,16 +249,20 @@
         switch (aType)
         {
-            case VBoxEventType_OnVBoxSVCUnavailable:
-            {
-                ComPtr<IVBoxSVCUnavailableEvent> pVSUEv = aEvent;
-                Assert(pVSUEv);
-
-                LogRel(("VBoxSDL: VBoxSVC became unavailable, exiting.\n"));
-                RTPrintf("VBoxSVC became unavailable, exiting.\n");
-                /* Send QUIT event to terminate the VM as cleanly as possible
-                 * given that VBoxSVC is no longer present. */
-                SDL_Event event = {0};
-                event.type = SDL_QUIT;
-                PushSDLEventForSure(&event);
+            case VBoxEventType_OnVBoxSVCAvailabilityChanged:
+            {
+                ComPtr<IVBoxSVCAvailabilityChangedEvent> pVSACEv = aEvent;
+                Assert(pVSACEv);
+                BOOL fAvailable = FALSE;
+                pVSACEv->COMGETTER(Available)(&fAvailable);
+                if (!fAvailable)
+                {
+                    LogRel(("VBoxSDL: VBoxSVC became unavailable, exiting.\n"));
+                    RTPrintf("VBoxSVC became unavailable, exiting.\n");
+                    /* Send QUIT event to terminate the VM as cleanly as possible
+                     * given that VBoxSVC is no longer present. */
+                    SDL_Event event = {0};
+                    event.type = SDL_QUIT;
+                    PushSDLEventForSure(&event);
+                }
                 break;
             }
@@ -1820,5 +1824,5 @@
         pVBoxClientListener = new VBoxSDLClientEventListenerImpl();
         com::SafeArray<VBoxEventType_T> eventTypes;
-        eventTypes.push_back(VBoxEventType_OnVBoxSVCUnavailable);
+        eventTypes.push_back(VBoxEventType_OnVBoxSVCAvailabilityChanged);
         CHECK_ERROR(pES, RegisterListener(pVBoxClientListener, ComSafeArrayAsInParam(eventTypes), true));
     }
Index: /trunk/src/VBox/Main/VirtualBoxClientImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/VirtualBoxClientImpl.cpp	(revision 35171)
+++ /trunk/src/VBox/Main/VirtualBoxClientImpl.cpp	(revision 35172)
@@ -238,5 +238,5 @@
                         pThis->mData.m_pVirtualBox.setNull();
                     }
-                    fireVBoxSVCUnavailableEvent(pThis->mData.m_pEventSource);
+                    fireVBoxSVCAvailabilityChangedEvent(pThis->mData.m_pEventSource, FALSE);
                 }
             }
@@ -260,5 +260,5 @@
                         pThis->mData.m_pVirtualBox = pVBox;
                     }
-                    fireVBoxSVCAvailableEvent(pThis->mData.m_pEventSource);
+                    fireVBoxSVCAvailabilityChangedEvent(pThis->mData.m_pEventSource, TRUE);
                     cMillies = VBOXCLIENT_DEFAULT_INTERVAL;
                 }
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 35171)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 35172)
@@ -14765,5 +14765,5 @@
   <enum
     name="VBoxEventType"
-    uuid="f33c82ca-1379-43a5-9211-8caae647e694"
+    uuid="ad800907-657f-4cd5-b14e-b609fd280a49"
     >
 
@@ -15003,20 +15003,15 @@
       </desc>
     </const>
-    <const name="OnVBoxSVCUnavailable" value="68">
-      <desc>
-        See <link to="IVBoxSVCUnavailableEvent">IVBoxSVCUnavailableEvent</link>.
-      </desc>
-    </const>
-    <const name="OnVBoxSVCAvailable" value="69">
-      <desc>
-        See <link to="IVBoxSVCAvailableEvent">IVBoxSVCAvailableEvent</link>.
-      </desc>
-    </const>
-    <const name="OnBandwidthGroupChanged" value="70">
+    <const name="OnVBoxSVCAvailabilityChanged" value="68">
+      <desc>
+        See <link to="IVBoxSVCAvailabilityChangedEvent">IVBoxSVCAvailablityChangedEvent</link>.
+      </desc>
+    </const>
+    <const name="OnBandwidthGroupChanged" value="69">
       <desc>
         See <link to="IBandwidthGroupChangedEvent">IBandwidthGroupChangedEvent</link>.
       </desc>
     </const>
-    <const name="OnGuestMonitorDisabled" value="71">
+    <const name="OnGuestMonitorDisabled" value="70">
       <desc>
         See <link to="IGuestMonitorDisabledEvent">IGuestMonitorDisabledEvent</link>.
@@ -15025,5 +15020,5 @@
 
     <!-- Last event marker -->
-    <const name="Last" value="72">
+    <const name="Last" value="71">
       <desc>
         Must be last event, used for iterations and structures relying on numerical event values.
@@ -16309,22 +16304,18 @@
 
   <interface
-    name="IVBoxSVCUnavailableEvent" extends="IEvent"
-    uuid="99f6b352-f5c1-4d15-9c32-939158da8983"
-    wsmap="managed" autogen="VBoxEvent" id="OnVBoxSVCUnavailable"
+    name="IVBoxSVCAvailabilityChangedEvent" extends="IEvent"
+    uuid="97c78fcd-d4fc-485f-8613-5af88bfcfcdc"
+    wsmap="managed" autogen="VBoxEvent" id="OnVBoxSVCAvailabilityChanged"
     >
     <desc>
       Notification when VBoxSVC becomes unavailable (due to a crash or similar
-      unexpected circumstances).
+      unexpected circumstances) or available again.
     </desc>
-  </interface>
-
-  <interface
-    name="IVBoxSVCAvailableEvent" extends="IEvent"
-    uuid="0c971ea4-f3e0-4f4d-8558-ea0239c83031"
-    wsmap="managed" autogen="VBoxEvent" id="OnVBoxSVCAvailable"
-    >
-    <desc>
-      Notification when VBoxSVC becomes available again after being unavailable.
-    </desc>
+
+    <attribute name="available" type="boolean" readonly="yes">
+      <desc>
+        Whether VBoxSVC is available now.
+      </desc>
+    </attribute>
   </interface>
 
