Index: /trunk/include/VBox/VBoxGuestLib.h
===================================================================
--- /trunk/include/VBox/VBoxGuestLib.h	(revision 35906)
+++ /trunk/include/VBox/VBoxGuestLib.h	(revision 35907)
@@ -413,5 +413,5 @@
 VBGLR3DECL(int)     VbglR3WaitEvent(uint32_t fMask, uint32_t cMillies, uint32_t *pfEvents);
 
-VBGLR3DECL(int)     VbglR3ReportAdditionsStatus(VBoxGuestStatusFacility Facility, VBoxGuestStatusCurrent StatusCurrent, uint32_t uFlags);
+VBGLR3DECL(int)     VbglR3ReportAdditionsStatus(VBoxGuestFacilityType Facility, VBoxGuestFacilityStatus StatusCurrent, uint32_t uFlags);
 VBGLR3DECL(int)     VbglR3GetAdditionsVersion(char **ppszVer, char **ppszRev);
 VBGLR3DECL(int)     VbglR3GetAdditionsInstallationPath(char **ppszPath);
Index: /trunk/include/VBox/VMMDev.h
===================================================================
--- /trunk/include/VBox/VMMDev.h	(revision 35906)
+++ /trunk/include/VBox/VMMDev.h	(revision 35907)
@@ -669,36 +669,39 @@
 
 /**
- * Guest status facility.
- * This needs to be kept in sync with AdditionsFacility of the Main API!
+ * The guest facility.
+ * This needs to be kept in sync with AdditionsFacilityType of the Main API!
  */
 typedef enum
 {
-    VBoxGuestStatusFacility_Unknown         = 0,
-    VBoxGuestStatusFacility_VBoxGuestDriver = 20,
-    VBoxGuestStatusFacility_VBoxService     = 100,
-    VBoxGuestStatusFacility_VBoxTrayClient  = 101, /* VBoxTray (Windows), VBoxClient (Linux, Unix). */
-    VBoxGuestStatusFacility_All             = 999,
-    VBoxGuestStatusFacility_SizeHack        = 0x7fffffff
-} VBoxGuestStatusFacility;
-AssertCompileSize(VBoxGuestStatusFacility, 4);
+    VBoxGuestFacilityType_Unknown         = 0,
+    VBoxGuestFacilityType_VBoxGuestDriver = 20,
+    VBoxGuestFacilityType_VBoxService     = 100,
+    VBoxGuestFacilityType_VBoxTrayClient  = 101, /* VBoxTray (Windows), VBoxClient (Linux, Unix). */
+    VBoxGuestFacilityType_Seamless        = 1000,
+    VBoxGuestFacilityType_Graphics        = 1001,
+    VBoxGuestFacilityType_All             = 0xfffffffe,
+    VBoxGuestFacilityType_SizeHack        = 0x7fffffff
+} VBoxGuestFacilityType;
+AssertCompileSize(VBoxGuestFacilityType, 4);
 
 
 /**
  * The current guest status of a facility.
+ * This needs to be kept in sync with AdditionsFacilityStatus of the Main API!
  */
 typedef enum
 {
-    VBoxGuestStatusCurrent_Disabled    = 0,
-    VBoxGuestStatusCurrent_Inactive    = 1,
-    VBoxGuestStatusCurrent_Paused      = 2,
-    VBoxGuestStatusCurrent_PreInit     = 20,
-    VBoxGuestStatusCurrent_Init        = 30,
-    VBoxGuestStatusCurrent_Active      = 50,
-    VBoxGuestStatusCurrent_Terminating = 100,
-    VBoxGuestStatusCurrent_Terminated  = 101,
-    VBoxGuestStatusCurrent_Unknown     = 999,
-    VBoxGuestStatusCurrent_SizeHack    = 0x7fffffff
-} VBoxGuestStatusCurrent;
-AssertCompileSize(VBoxGuestStatusCurrent, 4);
+    VBoxGuestFacilityStatus_Inactive    = 0,
+    VBoxGuestFacilityStatus_Paused      = 1,
+    VBoxGuestFacilityStatus_PreInit     = 20,
+    VBoxGuestFacilityStatus_Init        = 30,
+    VBoxGuestFacilityStatus_Active      = 50,
+    VBoxGuestFacilityStatus_Terminating = 100,
+    VBoxGuestFacilityStatus_Terminated  = 101,
+    VBoxGuestFacilityStatus_Failed  =     800,
+    VBoxGuestFacilityStatus_Unknown     = 999,
+    VBoxGuestFacilityStatus_SizeHack    = 0x7fffffff
+} VBoxGuestFacilityStatus;
+AssertCompileSize(VBoxGuestFacilityStatus, 4);
 
 /**
@@ -710,7 +713,7 @@
 {
     /** Facility the status is indicated for. */
-    VBoxGuestStatusFacility facility;
+    VBoxGuestFacilityType facility;
     /** Current guest status. */
-    VBoxGuestStatusCurrent status;
+    VBoxGuestFacilityStatus status;
     /** Flags, not used at the moment. */
     uint32_t flags;
Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxHelpers.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxHelpers.cpp	(revision 35906)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxHelpers.cpp	(revision 35907)
@@ -28,7 +28,7 @@
 
 
-int hlpReportStatus(VBoxGuestStatusCurrent statusCurrent)
-{
-    int rc = VbglR3ReportAdditionsStatus(VBoxGuestStatusFacility_VBoxTrayClient,
+int hlpReportStatus(VBoxGuestFacilityStatus statusCurrent)
+{
+    int rc = VbglR3ReportAdditionsStatus(VBoxGuestFacilityType_VBoxTrayClient,
                                          statusCurrent,
                                          0 /* Flags */);
Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxHelpers.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxHelpers.h	(revision 35906)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxHelpers.h	(revision 35907)
@@ -27,5 +27,5 @@
 #endif /* !DEBUG_DISPLAY_CHANGE */
 
-extern int hlpReportStatus(VBoxGuestStatusCurrent statusCurrent);
+extern int hlpReportStatus(VBoxGuestFacilityStatus statusCurrent);
 extern void hlpReloadCursor(void);
 extern void hlpResizeRect(RECTL *paRects, unsigned nRects, unsigned uPrimary, unsigned uResized, int iNewWidth, int iNewHeight);
Index: /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxTray.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxTray.cpp	(revision 35906)
+++ /trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxTray.cpp	(revision 35907)
@@ -583,5 +583,5 @@
                 {
                     /* Report the host that we're up and running! */
-                    rc = hlpReportStatus(VBoxGuestStatusCurrent_Active);
+                    hlpReportStatus(VBoxGuestFacilityStatus_Active);
                 }
             }
@@ -685,11 +685,4 @@
     }
 
-    if (RT_FAILURE(rc))
-    {
-        CloseHandle (hMutexAppRunning);
-        hMutexAppRunning = NULL;
-        return 1;
-    }
-
     if (RT_SUCCESS(rc))
     {
@@ -697,28 +690,30 @@
         ghInstance = hInstance;
 
-        rc = hlpReportStatus(VBoxGuestStatusCurrent_Init);
+        hlpReportStatus(VBoxGuestFacilityStatus_Init);
+        rc = vboxTrayCreateToolWindow();
         if (RT_SUCCESS(rc))
         {
-            rc = vboxTrayCreateToolWindow();
+            rc = vboxTraySetupSeamless();
             if (RT_SUCCESS(rc))
             {
-                rc = vboxTraySetupSeamless();
+                Log(("VBoxTray: Init successful\n"));
+                rc = vboxTrayServiceMain();
                 if (RT_SUCCESS(rc))
-                {
-                    Log(("VBoxTray: Init successful\n"));
-                    rc = vboxTrayServiceMain();
-                    hlpReportStatus(VBoxGuestStatusCurrent_Terminating);
-                    vboxTrayShutdownSeamless();
-                }
-                vboxTrayDestroyToolWindow();
-            }
-            rc = hlpReportStatus(VBoxGuestStatusCurrent_Inactive);
-        }
-    }
-    else
-        Log(("VBoxTray: Could not report VBoxTray status \"Init\", rc=%Rrc\n", rc));
+                    hlpReportStatus(VBoxGuestFacilityStatus_Terminating);
+                vboxTrayShutdownSeamless();
+            }
+            vboxTrayDestroyToolWindow();
+        }
+        if (RT_SUCCESS(rc))
+            hlpReportStatus(VBoxGuestFacilityStatus_Terminated);
+    }
+
 	if (RT_FAILURE(rc))
-    	LogRel(("VBoxTray: Error while starting, rc=%Rrc\n", rc));
+    {
+        LogRel(("VBoxTray: Error while starting, rc=%Rrc\n", rc));
+        hlpReportStatus(VBoxGuestFacilityStatus_Failed);
+    }
     LogRel(("VBoxTray: Ended\n"));
+    vboxTrayCloseBaseDriver();
 
     /* Release instance mutex. */
@@ -730,5 +725,5 @@
 
     VbglR3Term();
-    return 0;
+    return RT_SUCCESS(rc) ? 0 : 1;
 }
 
Index: /trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest2.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest2.cpp	(revision 35906)
+++ /trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest2.cpp	(revision 35907)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2010 Oracle Corporation
+ * Copyright (C) 2011 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -116,8 +116,8 @@
     if (RT_SUCCESS(rc))
     {
-        pReq2->guestStatus.facility = VBoxGuestStatusFacility_VBoxGuestDriver;
+        pReq2->guestStatus.facility = VBoxGuestFacilityType_VBoxGuestDriver;
         pReq2->guestStatus.status = fActive ?
-                                    VBoxGuestStatusCurrent_Active
-                                  : VBoxGuestStatusCurrent_Inactive;
+                                    VBoxGuestFacilityStatus_Active
+                                  : VBoxGuestFacilityStatus_Inactive;
         pReq2->guestStatus.flags = 0;
         rc = VbglGRPerform(&pReq2->header);
Index: /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAdditions.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAdditions.cpp	(revision 35906)
+++ /trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibAdditions.cpp	(revision 35907)
@@ -147,6 +147,6 @@
  * @param   fReserved       Reserved for future use (what?).
  */
-VBGLR3DECL(int) VbglR3ReportAdditionsStatus(VBoxGuestStatusFacility enmFacility,
-                                            VBoxGuestStatusCurrent enmStatusCurrent,
+VBGLR3DECL(int) VbglR3ReportAdditionsStatus(VBoxGuestFacilityType enmFacility,
+                                            VBoxGuestFacilityStatus enmStatusCurrent,
                                             uint32_t fReserved)
 {
Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp	(revision 35906)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp	(revision 35907)
@@ -229,4 +229,21 @@
 
 /**
+ * Reports the current VBoxService status to the host.
+ *
+ * @return  IPRT status code.
+ * @param   enmStatus               Status to report to the host.
+ */
+int VBoxServiceReportStatus(VBoxGuestFacilityStatus enmStatus)
+{
+    /* Report the host that we're up and running! */
+    int rc = VbglR3ReportAdditionsStatus(VBoxGuestFacilityType_VBoxService,
+                                         enmStatus, 0 /* Flags */);
+    if (RT_FAILURE(rc))
+        VBoxServiceError("Could not report VBoxService status (%u), rc=%Rrc\n", enmStatus, rc);
+    return rc;
+}
+
+
+/**
  * Gets a 32-bit value argument.
  *
@@ -310,4 +327,6 @@
 {
     int rc;
+
+    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Init);
 
     /*
@@ -372,5 +391,8 @@
         VBoxServiceVerbose(1, "All services started.\n");
     else
+    {
         VBoxServiceError("An error occcurred while the services!\n");
+        VBoxServiceReportStatus(VBoxGuestFacilityStatus_Failed);
+    }
     return rc;
 }
@@ -386,4 +408,6 @@
 {
     int rc = VINF_SUCCESS;
+
+    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Terminating);
 
     /*
@@ -445,4 +469,6 @@
 
     VBoxServiceVerbose(2, "Stopping services returned: rc=%Rrc\n", rc);
+    VBoxServiceReportStatus(RT_SUCCESS(rc)
+                            ? VBoxGuestFacilityStatus_Paused : VBoxGuestFacilityStatus_Failed);
     return rc;
 }
@@ -456,11 +482,5 @@
     int rc;
 
-    /* Report the host that we're up and running! */
-    rc = VbglR3ReportAdditionsStatus(VBoxGuestStatusFacility_VBoxService,
-                                     VBoxGuestStatusCurrent_Active,
-                                     0 /* Flags */);
-    if (RT_FAILURE(rc))
-        VBoxServiceError("Could not report facility (%u) status %u, rc=%Rrc\n",
-                         VBoxGuestStatusFacility_VBoxService, VBoxGuestStatusCurrent_Active, rc);
+    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Active);
 
 #ifdef RT_OS_WINDOWS
@@ -557,4 +577,6 @@
 #endif
 
+    VBoxServiceReportStatus(VBoxGuestFacilityStatus_PreInit);
+
     /*
      * Do pre-init of services.
@@ -564,5 +586,8 @@
         rc = g_aServices[j].pDesc->pfnPreInit();
         if (RT_FAILURE(rc))
+        {
+            VBoxServiceReportStatus(VBoxGuestFacilityStatus_Failed);
             return VBoxServiceError("Service '%s' failed pre-init: %Rrc\n", g_aServices[j].pDesc->pszName, rc);
+        }
     }
 #ifdef RT_OS_WINDOWS
@@ -768,4 +793,5 @@
 
     VBoxServiceVerbose(0, "Ended.\n");
+    VBoxServiceReportStatus(VBoxGuestFacilityStatus_Terminated);
     return rcExit;
 }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h	(revision 35906)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManage.h	(revision 35907)
@@ -197,5 +197,5 @@
                    VMINFO_DETAILS details = VMINFO_NONE,
                    ComPtr <IConsole> console = ComPtr<IConsole>());
-const char *stateToName(MachineState_T machineState, bool fShort);
+const char *machineStateToName(MachineState_T machineState, bool fShort);
 
 /* VBoxManageList.cpp */
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp	(revision 35906)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageControlVM.cpp	(revision 35907)
@@ -191,5 +191,5 @@
                     {
                         RTMsgError("Machine in invalid state %d -- %s\n",
-                                   machineState, stateToName(machineState, false));
+                                   machineState, machineStateToName(machineState, false));
                         break;
                     }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp	(revision 35906)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp	(revision 35907)
@@ -257,5 +257,5 @@
     {
         RTMsgError("Machine \"%s\" is not running (currently %s)!\n",
-                   pszNameOrId, stateToName(machineState, false));
+                   pszNameOrId, machineStateToName(machineState, false));
         return VERR_VM_INVALID_VM_STATE;
     }
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 35906)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageInfo.cpp	(revision 35907)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2006-2010 Oracle Corporation
+ * Copyright (C) 2006-2011 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -111,5 +111,5 @@
 }
 
-const char *stateToName(MachineState_T machineState, bool fShort)
+const char *machineStateToName(MachineState_T machineState, bool fShort)
 {
     switch (machineState)
@@ -156,6 +156,34 @@
             return fShort ? "settingup"           : "setting up";
         default:
-            return "unknown";
-    }
+            break;
+    }
+    return "unknown";
+}
+
+const char *facilityStateToName(AdditionsFacilityStatus_T faStatus, bool fShort)
+{
+    switch (faStatus)
+    {
+        case AdditionsFacilityStatus_Inactive:
+            return fShort ? "inactive" : "not active";
+        case AdditionsFacilityStatus_Paused:
+            return "paused";
+        case AdditionsFacilityStatus_PreInit:
+            return fShort ? "preinit" : "pre-initializing";
+        case AdditionsFacilityStatus_Init:
+            return fShort ? "init"    : "initializing";
+        case AdditionsFacilityStatus_Active:
+            return fShort ? "active"  : "active/running";
+        case AdditionsFacilityStatus_Terminating:
+            return "terminating";
+        case AdditionsFacilityStatus_Terminated:
+            return "terminated";
+        case AdditionsFacilityStatus_Failed:
+            return "failed";
+        case AdditionsFacilityStatus_Unknown:
+        default:
+            break;
+    }
+    return "unknown";
 }
 
@@ -568,5 +596,5 @@
     MachineState_T machineState;
     rc = machine->COMGETTER(State)(&machineState);
-    const char *pszState = stateToName(machineState, details == VMINFO_MACHINEREADABLE /*=fShort*/);
+    const char *pszState = machineStateToName(machineState, details == VMINFO_MACHINEREADABLE /*=fShort*/);
 
     LONG64 stateSince;
@@ -2070,5 +2098,5 @@
                     else
                         RTPrintf("Guest driver:                        %u (last update: %s)\n",
-                                 faStatus, szLastUpdated);
+                                 facilityStateToName(faStatus, false /* No short naming */), szLastUpdated);
                 }
 
@@ -2081,6 +2109,6 @@
                                  faStatus, lLastUpdatedMS);
                     else
-                        RTPrintf("VBoxService:                         %u (last update: %s)\n",
-                                 faStatus, szLastUpdated);
+                        RTPrintf("VBoxService:                         %s (last update: %s)\n",
+                                 facilityStateToName(faStatus, false /* No short naming */), szLastUpdated);
                 }
 
@@ -2091,5 +2119,5 @@
                     if (details == VMINFO_MACHINEREADABLE)
                         RTPrintf("GuestAdditionsFacilityStatusVBoxTrayClient=%u,%ld\n",
-                                 faStatus, lLastUpdatedMS);
+                                 facilityStateToName(faStatus, false /* No short naming */), lLastUpdatedMS);
                     else
                         RTPrintf("VBoxTray / VBoxClient:               %u (last update: %s)\n",
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 35906)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 35907)
@@ -7,5 +7,5 @@
 
 /*
- * Copyright (C) 2010 Oracle Corporation
+ * Copyright (C) 2011 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -610,7 +610,9 @@
     /* Variable flags: */
     ULONG ulGuestAdditionsRunLevel = guest.GetAdditionsRunLevel();
-    bool fIsGuestSupportsGraphics = guest.GetSupportsGraphics();
-    bool fIsGuestSupportsSeamless = guest.GetSupportsSeamless();
-
+    LONG64 lLastUpdatedIgnored;
+    bool fIsGuestSupportsGraphics = guest.GetFacilityStatus(KAdditionsFacilityType_Graphics, lLastUpdatedIgnored)
+                                    == AdditionsFacilityStatus_Active;
+    bool fIsGuestSupportsSeamless = guest.GetFacilityStatus(KAdditionsFacilityType_Seamless, lLastUpdatedIgnored)
+                                    == AdditionsFacilityStatus_Active;
     /* Check if something had changed: */
     if (m_ulGuestAdditionsRunLevel != ulGuestAdditionsRunLevel ||
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 35906)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 35907)
@@ -7882,5 +7882,5 @@
   <enum
     name="AdditionsFacilityType"
-    uuid="bcf4f5e7-86d6-4b8c-99cd-449a79114fb4"
+    uuid="98f7f957-89fb-49b6-a3b1-31e3285eb1d8"
     >
     <desc>
@@ -7900,5 +7900,14 @@
       <desc>VirtualBox desktop integration (VBoxTray on Windows, VBoxClient on non-Windows).</desc>
     </const>
-    <const name="All"                     value="999">
+    <const name="Seamless"                value="1000">
+      <desc>Seamless guest desktop integration.</desc>
+    </const>
+    <const name="Graphics"                value="1100">
+      <desc>Guest graphics mode. If not enabled, seamless rendering will not work, resize hints
+        are not immediately acted on and guest display resizes are probably not initiated by
+        the guest additions.
+      </desc>
+    </const>
+    <const name="All"                     value="2147483646">
       <desc>All facilities selected.</desc>
     </const>
@@ -7907,5 +7916,5 @@
   <enum
     name="AdditionsFacilityStatus"
-    uuid="730a42a1-dac6-4194-b394-744a5ea487f3"
+    uuid="ce06f9e1-394e-4fe9-9368-5a88c567dbde"
     >
     <desc>
@@ -7913,11 +7922,8 @@
     </desc>
 
-    <const name="Disabled"                value="0">
-      <desc>Facility is disabled.</desc>
-    </const>
-    <const name="Inactive"                value="1">
-      <desc>Facility is enabled but inactive.</desc>
-    </const>
-    <const name="Paused"                  value="2">
+    <const name="Inactive"                value="0">
+      <desc>Facility is not active.</desc>
+    </const>
+    <const name="Paused"                  value="1">
       <desc>Facility has been paused.</desc>
     </const>
@@ -8071,5 +8077,5 @@
   <interface
     name="IGuest" extends="$unknown"
-    uuid="09c2e2e0-f6f9-45ec-91a1-aaab3fad9f1f"
+    uuid="4db4f806-0a20-4772-9419-14563b662f93"
     wsmap="managed"
     >
@@ -8112,20 +8118,4 @@
     </attribute>
 
-    <attribute name="supportsSeamless" type="boolean" readonly="yes">
-      <desc>
-        Flag whether seamless guest display rendering (seamless desktop
-        integration) is supported.
-      </desc>
-    </attribute>
-
-    <attribute name="supportsGraphics" type="boolean" readonly="yes">
-      <desc>
-        Flag whether the guest is in graphics mode.  If it is not, then
-        seamless rendering will not work, resize hints are not immediately
-        acted on and guest display resizes are probably not initiated by
-        the guest additions.
-      </desc>
-    </attribute>
-
     <attribute name="memoryBalloonSize" type="unsigned long">
       <desc>Guest system memory balloon size in megabytes (transient property).</desc>
@@ -8189,5 +8179,5 @@
       </param>
       <param name="timestamp" type="long long" dir="out">
-        <desc>Timestamp (in ms) of last status update of this facility seen by the host.</desc>
+        <desc>Timestamp (in ms) of last status update seen by the host.</desc>
       </param>
       <param name="status" type="AdditionsFacilityStatus" dir="return">
Index: /trunk/src/VBox/Main/include/GuestImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/GuestImpl.h	(revision 35906)
+++ /trunk/src/VBox/Main/include/GuestImpl.h	(revision 35907)
@@ -76,11 +76,4 @@
     STDMETHOD(COMGETTER(AdditionsRunLevel)) (AdditionsRunLevelType_T *aRunLevel);
     STDMETHOD(COMGETTER(AdditionsVersion)) (BSTR *aAdditionsVersion);
-    /** @todo Remove later by replacing it by AdditionsFeatureAvailable(). */
-    STDMETHOD(COMGETTER(SupportsSeamless)) (BOOL *aSupportsSeamless);
-    STDMETHOD(COMGETTER(SupportsGraphics)) (BOOL *aSupportsGraphics);
-#if 0
-    /** @todo Will replace SupportsSeamless, SupportsGraphics, ... */
-    STDMETHOD(COMGETTER(AdditionsFeatureAvailable)) (LONG64 aFeature, BOOL *aActive, BOOL *aAvailable);
-#endif
     STDMETHOD(COMGETTER(MemoryBalloonSize)) (ULONG *aMemoryBalloonSize);
     STDMETHOD(COMSETTER(MemoryBalloonSize)) (ULONG aMemoryBalloonSize);
@@ -116,5 +109,7 @@
     void setAdditionsInfo(Bstr aInterfaceVersion, VBOXOSTYPE aOsType);
     void setAdditionsInfo2(Bstr aAdditionsVersion, Bstr aVersionName, Bstr aRevision);
-    void setAdditionsStatus(VBoxGuestStatusFacility enmFacility, VBoxGuestStatusCurrent enmStatus, ULONG aFlags);
+    bool facilityIsActive(VBoxGuestFacilityType enmFacility);
+    void updateFacility(VBoxGuestFacilityType enmFacility, VBoxGuestFacilityStatus enmStatus);
+    void setAdditionsStatus(VBoxGuestFacilityType enmFacility, VBoxGuestFacilityStatus enmStatus, ULONG aFlags);
     void setSupportedFeatures(uint32_t aCaps);
     HRESULT setStatistic(ULONG aCpuId, GUESTSTATTYPE enmType, ULONG aVal);
@@ -195,16 +190,11 @@
     struct Data
     {
-        Data() : mAdditionsRunLevel (AdditionsRunLevelType_None),
-                 mSupportsSeamless (FALSE),
-                 mSupportsGraphics (FALSE) {}
+        Data() : mAdditionsRunLevel (AdditionsRunLevelType_None) {}
 
         Bstr                    mOSTypeId;
-
         FacilityMap             mFacilityMap;
         AdditionsRunLevelType_T mAdditionsRunLevel;
         Bstr                    mAdditionsVersion;
         Bstr                    mInterfaceVersion;
-        BOOL                    mSupportsSeamless;
-        BOOL                    mSupportsGraphics;
     };
 
Index: /trunk/src/VBox/Main/src-client/GuestImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/GuestImpl.cpp	(revision 35906)
+++ /trunk/src/VBox/Main/src-client/GuestImpl.cpp	(revision 35907)
@@ -237,32 +237,4 @@
 }
 
-STDMETHODIMP Guest::COMGETTER(SupportsSeamless) (BOOL *aSupportsSeamless)
-{
-    CheckComArgOutPointerValid(aSupportsSeamless);
-
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aSupportsSeamless = mData.mSupportsSeamless;
-
-    return S_OK;
-}
-
-STDMETHODIMP Guest::COMGETTER(SupportsGraphics) (BOOL *aSupportsGraphics)
-{
-    CheckComArgOutPointerValid(aSupportsGraphics);
-
-    AutoCaller autoCaller(this);
-    if (FAILED(autoCaller.rc())) return autoCaller.rc();
-
-    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
-
-    *aSupportsGraphics = mData.mSupportsGraphics;
-
-    return S_OK;
-}
-
 BOOL Guest::isPageFusionEnabled()
 {
@@ -585,8 +557,9 @@
     /*
      * Older Additions didn't have this finer grained capability bit,
-     * so enable it by default.  Newer Additions will not enable this here
+     * so enable it by default. Newer Additions will not enable this here
      * and use the setSupportedFeatures function instead.
      */
-    mData.mSupportsGraphics = mData.mAdditionsRunLevel > AdditionsRunLevelType_None;
+    updateFacility(VBoxGuestFacilityType_Graphics, facilityIsActive(VBoxGuestFacilityType_VBoxGuestDriver) ?
+                   VBoxGuestFacilityStatus_Active : VBoxGuestFacilityStatus_Inactive);
 
     /*
@@ -622,13 +595,31 @@
 }
 
+bool Guest::facilityIsActive(VBoxGuestFacilityType enmFacility)
+{
+    return mData.mFacilityMap[(AdditionsFacilityType_T)enmFacility].curStatus == AdditionsFacilityStatus_Active;
+}
+
+void Guest::updateFacility(VBoxGuestFacilityType enmFacility, VBoxGuestFacilityStatus enmStatus)
+{
+    Assert(enmFacility < UINT32_MAX);
+    FacilityData *pData = &mData.mFacilityMap[(AdditionsFacilityType_T)enmFacility];
+    AssertPtr(pData);
+
+    RTTimeNow(&pData->tsLastUpdated);
+    pData->curStatus = (AdditionsFacilityStatus_T)enmStatus;
+
+    LogFlowFunc(("Setting guest facility %u = %u (%u)\n",
+                 enmFacility, pData->curStatus, pData->tsLastUpdated));
+}
+
 /**
  * Sets the status of a certain Guest Additions facility.
  * Gets called by vmmdevUpdateGuestStatus.
  *
- * @param enmFacility
- * @param enmStatus
+ * @param enmFacility   Facility to set the status for.
+ * @param enmStatus     Actual status to set.
  * @param aFlags
  */
-void Guest::setAdditionsStatus(VBoxGuestStatusFacility enmFacility, VBoxGuestStatusCurrent enmStatus, ULONG aFlags)
+void Guest::setAdditionsStatus(VBoxGuestFacilityType enmFacility, VBoxGuestFacilityStatus enmStatus, ULONG aFlags)
 {
     AutoCaller autoCaller(this);
@@ -642,24 +633,21 @@
 
     /* First check for disabled status. */
-    uint32_t uCurFacility = enmFacility + (enmStatus == VBoxGuestStatusCurrent_Active ? 0 : -1);
-    if (   enmFacility < VBoxGuestStatusFacility_VBoxGuestDriver
-        || (   enmFacility == VBoxGuestStatusFacility_All
-            && (   enmStatus   == VBoxGuestStatusCurrent_Inactive
-                || enmStatus   == VBoxGuestStatusCurrent_Disabled
-               )
-           )
+    uint32_t uCurFacility = enmFacility + (enmStatus == VBoxGuestFacilityStatus_Active ? 0 : -1);
+    if (   enmFacility < VBoxGuestFacilityType_VBoxGuestDriver
+        || (   enmFacility == VBoxGuestFacilityType_All
+            && enmStatus   == VBoxGuestFacilityStatus_Inactive)
        )
     {
         mData.mAdditionsRunLevel = AdditionsRunLevelType_None;
     }
-    else if (uCurFacility >= VBoxGuestStatusFacility_VBoxTrayClient)
+    else if (uCurFacility >= VBoxGuestFacilityType_VBoxTrayClient)
     {
         mData.mAdditionsRunLevel = AdditionsRunLevelType_Desktop;
     }
-    else if (uCurFacility >= VBoxGuestStatusFacility_VBoxService)
+    else if (uCurFacility >= VBoxGuestFacilityType_VBoxService)
     {
         mData.mAdditionsRunLevel = AdditionsRunLevelType_Userland;
     }
-    else if (uCurFacility >= VBoxGuestStatusFacility_VBoxGuestDriver)
+    else if (uCurFacility >= VBoxGuestFacilityType_VBoxGuestDriver)
     {
         mData.mAdditionsRunLevel = AdditionsRunLevelType_System;
@@ -673,13 +661,15 @@
     if (enmFacility)
     {
-        Assert(enmFacility < UINT32_MAX);
-        FacilityData *pData = &mData.mFacilityMap[(AdditionsFacilityType_T)enmFacility];
-        AssertPtr(pData);
-
-        RTTimeNow(&pData->tsLastUpdated);
-        pData->curStatus = (AdditionsFacilityStatus_T)enmStatus;
-
-        LogFlowFunc(("Setting guest facility %u = %u (%u)\n",
-                     enmFacility, pData->curStatus, pData->tsLastUpdated));
+        if (enmFacility == VBoxGuestFacilityType_All)
+        {
+            FacilityMapIter it = mData.mFacilityMap.begin();
+            while (it != mData.mFacilityMap.end())
+            {
+                updateFacility((VBoxGuestFacilityType)it->first, enmStatus);
+                it++;
+            }
+        }
+        else /* Update one facility only. */
+            updateFacility(enmFacility, enmStatus);
     }
 }
@@ -697,7 +687,9 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    mData.mSupportsSeamless = (aCaps & VMMDEV_GUEST_SUPPORTS_SEAMLESS);
+    updateFacility(VBoxGuestFacilityType_Seamless, aCaps & VMMDEV_GUEST_SUPPORTS_SEAMLESS ?
+                   VBoxGuestFacilityStatus_Active : VBoxGuestFacilityStatus_Inactive);
     /** @todo Add VMMDEV_GUEST_SUPPORTS_GUEST_HOST_WINDOW_MAPPING */
-    mData.mSupportsGraphics = (aCaps & VMMDEV_GUEST_SUPPORTS_GRAPHICS);
+    updateFacility(VBoxGuestFacilityType_Graphics, aCaps & VMMDEV_GUEST_SUPPORTS_GRAPHICS ?
+                   VBoxGuestFacilityStatus_Active : VBoxGuestFacilityStatus_Inactive);
 }
 /* vi: set tabstop=4 shiftwidth=4 expandtab: */
Index: /trunk/src/VBox/Main/src-client/VMMDevInterface.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/VMMDevInterface.cpp	(revision 35906)
+++ /trunk/src/VBox/Main/src-client/VMMDevInterface.cpp	(revision 35907)
@@ -233,6 +233,6 @@
         guest->setAdditionsInfo(Bstr(), guestInfo->osType); /* Clear interface version + OS type. */
         guest->setAdditionsInfo2(Bstr(), Bstr(), Bstr()); /* Clear Guest Additions version. */
-        guest->setAdditionsStatus(VBoxGuestStatusFacility_All,
-                                  VBoxGuestStatusCurrent_Inactive,
+        guest->setAdditionsStatus(VBoxGuestFacilityType_All,
+                                  VBoxGuestFacilityStatus_Inactive,
                                   0); /* Flags; not used. */
         pConsole->onAdditionsStateChange();
