Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMInformationDlg.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMInformationDlg.cpp	(revision 31435)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMInformationDlg.cpp	(revision 31436)
@@ -468,32 +468,4 @@
             VBoxGlobal::tr ("Disabled", "details report (Nested Paging)");
         QString addVersionStr = console.GetGuest().GetAdditionsVersion();
-        if (addVersionStr.isEmpty())
-        {
-            /*
-             * If we got back an empty string from GetAdditionsVersion() we either
-             * really don't have the Guest Additions version yet or the guest is running
-             * older Guest Additions (< 3.2.0) which don't provide VMMDevReq_ReportGuestInfo2,
-             * so get the version + revision from the (hopefully) provided guest properties
-             * instead.
-             */
-            QString addVersion = m.GetGuestPropertyValue("/VirtualBox/GuestAdd/Version");
-            QString addRevision = m.GetGuestPropertyValue("/VirtualBox/GuestAdd/Revision");
-            if (!addVersion.isEmpty() && !addRevision.isEmpty())
-            {
-                /* Some Guest Additions versions had interchanged version + revision values,
-                 * so check if the version value at least has a dot to identify it and change
-                 * both values to reflect the right content. */
-                if (!addVersion.contains("."))
-                {
-                    QString addTemp = addVersion;
-                    addVersion = addRevision;
-                    addRevision = addTemp;
-                }
-
-                addVersionStr = addVersion
-                              + "r"
-                              + addRevision;
-            }
-        }
         if (addVersionStr.isEmpty())
             addVersionStr = tr ("Not Detected", "guest additions");
Index: /trunk/src/VBox/Main/GuestImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/GuestImpl.cpp	(revision 31435)
+++ /trunk/src/VBox/Main/GuestImpl.cpp	(revision 31436)
@@ -185,7 +185,56 @@
     AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
 
-    mData.mAdditionsVersion.cloneTo(aAdditionsVersion);
-
-    return S_OK;
+    HRESULT hr = S_OK;
+    if (   mData.mAdditionsVersion.isEmpty()
+        && mData.mAdditionsActive) /* Only try alternative way if GA are active! */
+    {
+        /*
+         * If we got back an empty string from GetAdditionsVersion() we either
+         * really don't have the Guest Additions version yet or the guest is running
+         * older Guest Additions (< 3.2.0) which don't provide VMMDevReq_ReportGuestInfo2,
+         * so get the version + revision from the (hopefully) provided guest properties
+         * instead.
+         */
+        Bstr addVersion;
+        ULONG64 u64Timestamp;
+        Bstr flags;
+        hr = mParent->machine()->GetGuestProperty(Bstr("/VirtualBox/GuestAdd/Version"),
+                                                  addVersion.asOutParam(), &u64Timestamp, flags.asOutParam());
+        if (hr == S_OK)
+        {
+            Bstr addRevision;
+            hr = mParent->machine()->GetGuestProperty(Bstr("/VirtualBox/GuestAdd/Revision"),
+                                                      addRevision.asOutParam(), &u64Timestamp, flags.asOutParam());
+            if (   hr == S_OK
+                && !addVersion.isEmpty()
+                && !addVersion.isEmpty())
+            {
+                /* Some Guest Additions versions had interchanged version + revision values,
+                 * so check if the version value at least has a dot to identify it and change
+                 * both values to reflect the right content. */
+                if (!Utf8Str(addVersion).contains("."))
+                {
+                    Bstr addTemp = addVersion;
+                    addVersion = addRevision;
+                    addRevision = addTemp;
+                }
+
+                Bstr additionsVersion = BstrFmt("%lsr%ls",
+                                                addVersion.raw(), addRevision.raw());
+                additionsVersion.cloneTo(aAdditionsVersion);
+            }
+        }
+        else
+        {
+            /* If getting the version + revision above fails or they simply aren't there
+             * because of *really* old Guest Additions we only can report the interface
+             * version to at least have something. */
+            mData.mInterfaceVersion.cloneTo(aAdditionsVersion);
+        }
+    }
+    else
+        mData.mAdditionsVersion.cloneTo(aAdditionsVersion);
+
+    return hr;
 }
 
@@ -1456,6 +1505,9 @@
     /*
      * Note: The Guest Additions API (interface) version is deprecated
-     * and will not be used anymore!
+     * and will not be used anymore!  We might need it to at least report
+     * something as version number if *really* ancient Guest Additions are
+     * installed (without the guest version + revision properties having set).
      */
+    mData.mInterfaceVersion = aInterfaceVersion;
 
     /*
@@ -1476,6 +1528,6 @@
     /*
      * Older Additions didn't have this finer grained capability bit,
-     * so enable it by default.  Newer Additions will disable it immediately
-     * if relevant.
+     * so enable it by default.  Newer Additions will not enable this here
+     * and use the setSupportedFeatures function instead.
      */
     mData.mSupportsGraphics = mData.mAdditionsActive;
@@ -1497,5 +1549,5 @@
  * @param aVersionName
  */
-void Guest::setAdditionsInfo2(Bstr aAdditionsVersion, Bstr aVersionName)
+void Guest::setAdditionsInfo2(Bstr aAdditionsVersion, Bstr aVersionName, Bstr aRevision)
 {
     AutoCaller autoCaller(this);
@@ -1505,6 +1557,10 @@
 
     if (!aVersionName.isEmpty())
-        mData.mAdditionsVersion = BstrFmt("%ls %ls", aAdditionsVersion.raw(), aVersionName.raw());
-    else
+        /*
+         * aVersionName could be "x.y.z_BETA1_FOOBAR", so append revision manually to
+         * become "x.y.z_BETA1_FOOBARr12345".
+         */
+        mData.mAdditionsVersion = BstrFmt("%lsr%ls", aVersionName.raw(), aRevision.raw());
+    else /* aAdditionsVersion is in x.y.zr12345 format. */
         mData.mAdditionsVersion = aAdditionsVersion;
 }
Index: /trunk/src/VBox/Main/VMMDevInterface.cpp
===================================================================
--- /trunk/src/VBox/Main/VMMDevInterface.cpp	(revision 31435)
+++ /trunk/src/VBox/Main/VMMDevInterface.cpp	(revision 31436)
@@ -228,5 +228,5 @@
          */
         guest->setAdditionsInfo(Bstr(), guestInfo->osType); /* Clear interface version + OS type. */
-        guest->setAdditionsInfo2(Bstr(), Bstr()); /* Clear Guest Additions version. */
+        guest->setAdditionsInfo2(Bstr(), Bstr(), Bstr()); /* Clear Guest Additions version. */
         guest->setAdditionsStatus(VBoxGuestStatusFacility_All,
                                   VBoxGuestStatusCurrent_Disabled,
@@ -266,5 +266,7 @@
                                                               guestInfo->additionsBuild,
                                                               guestInfo->additionsRevision);
-        guest->setAdditionsInfo2(Bstr(version), Bstr(guestInfo->szName));
+        char revision[16];
+        RTStrPrintf(revision, sizeof(revision), "%ld", guestInfo->additionsRevision);
+        guest->setAdditionsInfo2(Bstr(version), Bstr(guestInfo->szName), Bstr(revision));
 
         /*
Index: /trunk/src/VBox/Main/include/GuestImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/GuestImpl.h	(revision 31435)
+++ /trunk/src/VBox/Main/include/GuestImpl.h	(revision 31436)
@@ -110,5 +110,5 @@
     // Public methods that are not in IDL (only called internally).
     void setAdditionsInfo(Bstr aInterfaceVersion, VBOXOSTYPE aOsType);
-    void setAdditionsInfo2(Bstr aAdditionsVersion, Bstr aVersionName);
+    void setAdditionsInfo2(Bstr aAdditionsVersion, Bstr aVersionName, Bstr aRevision);
     void setAdditionsStatus(VBoxGuestStatusFacility Facility, VBoxGuestStatusCurrent Status, ULONG ulFlags);
     void setSupportedFeatures(ULONG64 ulCaps, ULONG64 ulActive);
@@ -172,4 +172,5 @@
         BOOL  mAdditionsActive;
         Bstr  mAdditionsVersion;
+        Bstr  mInterfaceVersion;
         BOOL  mSupportsSeamless;
         BOOL  mSupportsGraphics;
