Index: /trunk/src/VBox/Main/include/GuestImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/GuestImpl.h	(revision 39823)
+++ /trunk/src/VBox/Main/include/GuestImpl.h	(revision 39824)
@@ -133,5 +133,5 @@
     // Public methods that are not in IDL (only called internally).
     void setAdditionsInfo(Bstr aInterfaceVersion, VBOXOSTYPE aOsType);
-    void setAdditionsInfo2(Bstr aAdditionsVersion, Bstr aVersionName, Bstr aRevision);
+    void setAdditionsInfo2(const char *a_pszVersion, const char *a_pszVersionName, uint32_t a_uRevision);
     bool facilityIsActive(VBoxGuestFacilityType enmFacility);
     HRESULT facilityUpdate(VBoxGuestFacilityType enmFacility, VBoxGuestFacilityStatus enmStatus);
@@ -293,4 +293,5 @@
         AdditionsRunLevelType_T mAdditionsRunLevel;
         Bstr                    mAdditionsVersion;
+        //ULONG                   mAdditionsRevision;
         Bstr                    mInterfaceVersion;
     };
Index: /trunk/src/VBox/Main/src-client/GuestImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/GuestImpl.cpp	(revision 39823)
+++ /trunk/src/VBox/Main/src-client/GuestImpl.cpp	(revision 39824)
@@ -204,7 +204,8 @@
 
     HRESULT hr = S_OK;
-    if (   mData.mAdditionsVersion.isEmpty()
-        /* Only try alternative way if GA are active! */
-        && mData.mAdditionsRunLevel > AdditionsRunLevelType_None)
+    if (   !mData.mAdditionsVersion.isEmpty()
+        || !mData.mAdditionsRunLevel > AdditionsRunLevelType_None)
+        mData.mAdditionsVersion.cloneTo(aAdditionsVersion);
+    else
     {
         /*
@@ -239,4 +240,6 @@
                 }
 
+                /** @todo r=bird: See comment about the space before 'r' in
+                 *        setAdditionsInfo2. */
                 Bstr additionsVersion = BstrFmt("%ls r%ls",
                                                 addVersion.raw(), addRevision.raw());
@@ -254,6 +257,4 @@
         }
     }
-    else
-        mData.mAdditionsVersion.cloneTo(aAdditionsVersion);
 
     return hr;
@@ -761,8 +762,11 @@
  * Gets called by vmmdevUpdateGuestInfo2.
  *
- * @param aAdditionsVersion
- * @param aVersionName
+ * @param   a_pszVersion            The GuestInfo2 numbers turned into
+ * @param   a_pszVersionName        This turns out to be the version string +
+ *                                  beta/alpha/whatever suffix, duplicating info
+ *                                  passed in @a a_pszVersion.
+ * @param   a_uRevision             The SVN revision number.
  */
-void Guest::setAdditionsInfo2(Bstr aAdditionsVersion, Bstr aVersionName, Bstr aRevision)
+void Guest::setAdditionsInfo2(const char *a_pszVersion, const char *a_pszVersionName, uint32_t a_uRevision)
 {
     AutoCaller autoCaller(this);
@@ -771,12 +775,17 @@
     AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    if (!aVersionName.isEmpty())
+    /** @todo r=bird: WHY is this code returning "1.2.3 r45678" in one case and
+     *        "1.2.3r45678" in the else?  Why aren't we doing it the same way as
+     *        IVirtualBox? One version attribute and one revision attribute, no
+     *        abigiuos spaces! */
+    if (*a_pszVersionName != '\0')
         /*
          * aVersionName could be "x.y.z_BETA1_FOOBAR", so append revision manually to
          * become "x.y.z_BETA1_FOOBAR r12345".
          */
-        mData.mAdditionsVersion = BstrFmt("%ls r%ls", aVersionName.raw(), aRevision.raw());
+        mData.mAdditionsVersion = BstrFmt("%s r%u", a_pszVersionName, a_uRevision);
     else /* aAdditionsVersion is in x.y.zr12345 format. */
-        mData.mAdditionsVersion = aAdditionsVersion;
+        mData.mAdditionsVersion = Bstr(a_pszVersion);
+    //mData.mAdditionsRevision = a_uRevision;
 }
 
Index: /trunk/src/VBox/Main/src-client/VMMDevInterface.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/VMMDevInterface.cpp	(revision 39823)
+++ /trunk/src/VBox/Main/src-client/VMMDevInterface.cpp	(revision 39824)
@@ -232,5 +232,5 @@
          */
         guest->setAdditionsInfo(Bstr(), guestInfo->osType); /* Clear interface version + OS type. */
-        guest->setAdditionsInfo2(Bstr(), Bstr(), Bstr()); /* Clear Guest Additions version. */
+        guest->setAdditionsInfo2("", "", 0); /* Clear Guest Additions version. */
         guest->setAdditionsStatus(VBoxGuestFacilityType_All,
                                   VBoxGuestFacilityStatus_Inactive,
@@ -245,32 +245,31 @@
  *
  * @param   pInterface          Pointer to this interface.
- * @param   guestInfo           Pointer to Guest Additions information structure.
+ * @param   pGuestInfo          Pointer to Guest Additions information
+ *                              structure.
  * @thread  The emulation thread.
  */
-DECLCALLBACK(void) vmmdevUpdateGuestInfo2(PPDMIVMMDEVCONNECTOR pInterface, const VBoxGuestInfo2 *guestInfo)
-{
-    PDRVMAINVMMDEV pDrv = PDMIVMMDEVCONNECTOR_2_MAINVMMDEV(pInterface);
-
-    Assert(guestInfo);
-    if (!guestInfo)
+DECLCALLBACK(void) vmmdevUpdateGuestInfo2(PPDMIVMMDEVCONNECTOR pInterface, const VBoxGuestInfo2 *pGuestInfo)
+{
+    PDRVMAINVMMDEV pDrv = PDMIVMMDEVCONNECTOR_2_MAINVMMDEV(pInterface);
+    AssertPtr(pGuestInfo);
+
+    /* Store that information in IGuest. */
+    Guest *pGuest = pDrv->pVMMDev->getParent()->getGuest();
+    Assert(pGuest);
+    if (!pGuest)
         return;
 
-    /* Store that information in IGuest. */
-    Guest* guest = pDrv->pVMMDev->getParent()->getGuest();
-    Assert(guest);
-    if (!guest)
-        return;
-
-    if (   guestInfo->additionsMajor    != 0
-        && guestInfo->additionsRevision != 0)
-    {
-        char version[32];
-        RTStrPrintf(version, sizeof(version), "%d.%d.%dr%ld", guestInfo->additionsMajor,
-                                                              guestInfo->additionsMinor,
-                                                              guestInfo->additionsBuild,
-                                                              guestInfo->additionsRevision);
-        char revision[16];
-        RTStrPrintf(revision, sizeof(revision), "%ld", guestInfo->additionsRevision);
-        guest->setAdditionsInfo2(Bstr(version), Bstr(guestInfo->szName), Bstr(revision));
+    if (   pGuestInfo->additionsMajor    != 0
+        && pGuestInfo->additionsRevision != 0)
+    {
+        /** @todo r=bird: See comments on space before 'r' in setAdditionsInfo2! */
+        char szVersion[32];
+        RTStrPrintf(szVersion, sizeof(szVersion), "%d.%d.%dr%ld",
+                    pGuestInfo->additionsMajor,
+                    pGuestInfo->additionsMinor,
+                    pGuestInfo->additionsBuild,
+                    pGuestInfo->additionsRevision);
+
+        pGuest->setAdditionsInfo2(szVersion, pGuestInfo->szName, pGuestInfo->additionsRevision);
 
         /*
