Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp	(revision 41048)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp	(revision 41049)
@@ -438,6 +438,7 @@
         size = QSize(width, height);
         /* Try to get the real guest dimensions from the save state */
-        ULONG guestWidth = 0, guestHeight = 0;
-        machine.QuerySavedGuestSize(0, guestWidth, guestHeight);
+        ULONG guestOriginX = 0, guestOriginY = 0, guestWidth = 0, guestHeight = 0;
+        BOOL fEnabled = true;
+        machine.QuerySavedGuestScreenInfo(0, guestOriginX, guestOriginY, guestWidth, guestHeight, fEnabled);
         if (   guestWidth  > 0
             && guestHeight > 0)
@@ -724,6 +725,7 @@
     if (screenData.size() != 0)
     {
-        ULONG guestWidth = 0, guestHeight = 0;
-        machine.QuerySavedGuestSize(0, guestWidth, guestHeight);
+        ULONG guestOriginX = 0, guestOriginY = 0, guestWidth = 0, guestHeight = 0;
+        BOOL fEnabled = true;
+        machine.QuerySavedGuestScreenInfo(0, guestOriginX, guestOriginY, guestWidth, guestHeight, fEnabled);
         QImage shot = QImage::fromData(screenData.data(), screenData.size(), "PNG").scaled(guestWidth > 0 ? QSize(guestWidth, guestHeight) : guestSizeHint());
         dimImage(shot);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp	(revision 41048)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/scale/UIMachineViewScale.cpp	(revision 41049)
@@ -102,6 +102,7 @@
     if (screenData.size() != 0)
     {
-        ULONG guestWidth = 0, guestHeight = 0;
-        machine.QuerySavedGuestSize(0, guestWidth, guestHeight);
+        ULONG guestOriginX = 0, guestOriginY = 0, guestWidth = 0, guestHeight = 0;
+        BOOL fEnabled = true;
+        machine.QuerySavedGuestScreenInfo(0, guestOriginX, guestOriginY, guestWidth, guestHeight, fEnabled);
         QImage shot = QImage::fromData(screenData.data(), screenData.size(), "PNG").scaled(guestWidth > 0 ? QSize(guestWidth, guestHeight) : guestSizeHint());
         m_pPauseImage = new QImage(shot);
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 41048)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 41049)
@@ -3700,5 +3700,5 @@
   <interface
     name="IMachine" extends="$unknown"
-    uuid="b0ce140d-02b6-469a-80f5-412ef8e1318e"
+    uuid="e7c78fee-f20d-4b4f-ac28-37af30d79ddf"
     wsmap="managed"
     >
@@ -6051,5 +6051,5 @@
     </method>
 
-    <method name="querySavedGuestSize" const="yes">
+    <method name="querySavedGuestScreenInfo" const="yes">
       <desc>
         Returns the guest dimensions from the saved state.
@@ -6060,4 +6060,14 @@
         </desc>
       </param>
+      <param name="originX" type="unsigned long" dir="out">
+        <desc>
+          The X position of the guest monitor top left corner.
+        </desc>
+      </param>
+      <param name="originY" type="unsigned long" dir="out">
+        <desc>
+          The Y position of the guest monitor top left corner.
+        </desc>
+      </param>
       <param name="width" type="unsigned long" dir="out">
         <desc>
@@ -6068,4 +6078,9 @@
         <desc>
           Guest height at the time of the saved state was taken.
+        </desc>
+      </param>
+      <param name="enabled" type="boolean" dir="out">
+        <desc>
+          Whether the monitor is enabled in the guest.
         </desc>
       </param>
Index: /trunk/src/VBox/Main/include/DisplayUtils.h
===================================================================
--- /trunk/src/VBox/Main/include/DisplayUtils.h	(revision 41048)
+++ /trunk/src/VBox/Main/include/DisplayUtils.h	(revision 41049)
@@ -24,5 +24,7 @@
 #define sSSMDisplayVer3 0x00010003
 
-int readSavedGuestSize(const Utf8Str &strStateFilePath, uint32_t u32ScreenId, uint32_t *pu32Width, uint32_t *pu32Height);
+int readSavedGuestScreenInfo(const Utf8Str &strStateFilePath, uint32_t u32ScreenId,
+                             uint32_t *pu32OriginX, uint32_t *pu32OriginY,
+                             uint32_t *pu32Width, uint32_t *pu32Height, uint16_t *pu16Flags);
 
 int readSavedDisplayScreenshot(const Utf8Str &strStateFilePath, uint32_t u32Type, uint8_t **ppu8Data, uint32_t *pcbData, uint32_t *pu32Width, uint32_t *pu32Height);
Index: /trunk/src/VBox/Main/include/MachineImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/MachineImpl.h	(revision 41048)
+++ /trunk/src/VBox/Main/include/MachineImpl.h	(revision 41049)
@@ -534,5 +534,5 @@
     STDMETHOD(GetStorageControllerByInstance(ULONG aInstance, IStorageController **storageController));
     STDMETHOD(SetStorageControllerBootable)(IN_BSTR aName, BOOL fBootable);
-    STDMETHOD(QuerySavedGuestSize)(ULONG aScreenId, ULONG *puWidth, ULONG *puHeight);
+    STDMETHOD(QuerySavedGuestScreenInfo)(ULONG uScreenId, ULONG *puOriginX, ULONG *puOriginY, ULONG *puWidth, ULONG *puHeight, BOOL *pfEnabled);
     STDMETHOD(QuerySavedThumbnailSize)(ULONG aScreenId, ULONG *aSize, ULONG *aWidth, ULONG *aHeight);
     STDMETHOD(ReadSavedThumbnailToArray)(ULONG aScreenId, BOOL aBGR, ULONG *aWidth, ULONG *aHeight, ComSafeArrayOut(BYTE, aData));
Index: /trunk/src/VBox/Main/src-all/DisplayUtils.cpp
===================================================================
--- /trunk/src/VBox/Main/src-all/DisplayUtils.cpp	(revision 41048)
+++ /trunk/src/VBox/Main/src-all/DisplayUtils.cpp	(revision 41049)
@@ -21,4 +21,5 @@
 #include <VBox/err.h>
 #include <VBox/vmm/ssm.h>
+#include <VBox/VBoxVideo.h>
 
 int readSavedDisplayScreenshot(const Utf8Str &strStateFilePath, uint32_t u32Type, uint8_t **ppu8Data, uint32_t *pcbData, uint32_t *pu32Width, uint32_t *pu32Height)
@@ -141,5 +142,7 @@
 }
 
-int readSavedGuestSize(const Utf8Str &strStateFilePath, uint32_t u32ScreenId, uint32_t *pu32Width, uint32_t *pu32Height)
+int readSavedGuestScreenInfo(const Utf8Str &strStateFilePath, uint32_t u32ScreenId,
+                             uint32_t *pu32OriginX, uint32_t *pu32OriginY,
+                             uint32_t *pu32Width, uint32_t *pu32Height, uint16_t *pu16Flags)
 {
     LogFlowFunc(("u32ScreenId = %d [%s]\n", u32ScreenId, strStateFilePath.c_str()));
@@ -151,7 +154,4 @@
         return VERR_NOT_SUPPORTED;
     }
-
-    uint32_t u32Width = 0;
-    uint32_t u32Height = 0;
 
     PSSMHANDLE pSSM;
@@ -163,5 +163,4 @@
         if (RT_SUCCESS(vrc))
         {
-            /* Only the second version is supported. */
             if (   uVersion == sSSMDisplayVer2
                 || uVersion == sSSMDisplayVer3)
@@ -170,22 +169,41 @@
                 SSMR3GetU32(pSSM, &cMonitors);
                 if (u32ScreenId > cMonitors)
-                    vrc = -2;
+                {
+                    vrc = VERR_INVALID_PARAMETER;
+                }
                 else
                 {
-                    /* Skip all previous monitors and the first 3 entries. */
-                    SSMR3Skip(pSSM, u32ScreenId * 5 * sizeof(uint32_t) + 3 * sizeof(uint32_t));
-                    SSMR3GetU32(pSSM, &u32Width);
-                    SSMR3GetU32(pSSM, &u32Height);
+                    if (uVersion == sSSMDisplayVer2)
+                    {
+                        /* Skip all previous monitors, each 5 uint32_t, and the first 3 uint32_t entries. */
+                        SSMR3Skip(pSSM, u32ScreenId * 5 * sizeof(uint32_t) + 3 * sizeof(uint32_t));
+                        SSMR3GetU32(pSSM, pu32Width);
+                        SSMR3GetU32(pSSM, pu32Height);
+                        *pu32OriginX = 0;
+                        *pu32OriginY = 0;
+                        *pu16Flags = VBVA_SCREEN_F_ACTIVE;
+                    }
+                    else
+                    {
+                        Assert(uVersion == sSSMDisplayVer3);
+                        /* Skip all previous monitors, each 8 uint32_t, and the first 3 uint32_t entries. */
+                        SSMR3Skip(pSSM, u32ScreenId * 8 * sizeof(uint32_t) + 3 * sizeof(uint32_t));
+                        SSMR3GetU32(pSSM, pu32Width);
+                        SSMR3GetU32(pSSM, pu32Height);
+                        SSMR3GetU32(pSSM, pu32OriginX);
+                        SSMR3GetU32(pSSM, pu32OriginY);
+                        uint32_t u32Flags = 0;
+                        SSMR3GetU32(pSSM, &u32Flags);
+                        *pu16Flags = (uint16_t)u32Flags;
+                    }
                 }
             }
+            else
+            {
+                vrc = VERR_NOT_SUPPORTED;
+            }
         }
 
         SSMR3Close(pSSM);
-    }
-
-    if (RT_SUCCESS(vrc))
-    {
-        *pu32Width = u32Width;
-        *pu32Height = u32Height;
     }
 
Index: /trunk/src/VBox/Main/src-server/MachineImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 41048)
+++ /trunk/src/VBox/Main/src-server/MachineImpl.cpp	(revision 41049)
@@ -5816,15 +5816,27 @@
 }
 
-STDMETHODIMP Machine::QuerySavedGuestSize(ULONG uScreenId, ULONG *puWidth, ULONG *puHeight)
+STDMETHODIMP Machine::QuerySavedGuestScreenInfo(ULONG uScreenId,
+                                                ULONG *puOriginX,
+                                                ULONG *puOriginY,
+                                                ULONG *puWidth,
+                                                ULONG *puHeight,
+                                                BOOL *pfEnabled)
 {
     LogFlowThisFunc(("\n"));
 
+    CheckComArgNotNull(puOriginX);
+    CheckComArgNotNull(puOriginY);
     CheckComArgNotNull(puWidth);
     CheckComArgNotNull(puHeight);
-
+    CheckComArgNotNull(pfEnabled);
+
+    uint32_t u32OriginX= 0;
+    uint32_t u32OriginY= 0;
     uint32_t u32Width = 0;
     uint32_t u32Height = 0;
-
-    int vrc = readSavedGuestSize(mSSData->strStateFilePath, uScreenId, &u32Width, &u32Height);
+    uint16_t u16Flags = 0;
+
+    int vrc = readSavedGuestScreenInfo(mSSData->strStateFilePath, uScreenId,
+                                       &u32OriginX, &u32OriginY, &u32Width, &u32Height, &u16Flags);
     if (RT_FAILURE(vrc))
         return setError(VBOX_E_IPRT_ERROR,
@@ -5832,6 +5844,9 @@
                         vrc);
 
+    *puOriginX = u32OriginX;
+    *puOriginY = u32OriginY;
     *puWidth = u32Width;
     *puHeight = u32Height;
+    *pfEnabled = (u16Flags & VBVA_SCREEN_F_DISABLED) == 0;
 
     return S_OK;
