Index: /trunk/src/VBox/Main/include/DisplayUtils.h
===================================================================
--- /trunk/src/VBox/Main/include/DisplayUtils.h	(revision 35575)
+++ /trunk/src/VBox/Main/include/DisplayUtils.h	(revision 35576)
@@ -22,4 +22,5 @@
 #define sSSMDisplayVer 0x00010001
 #define sSSMDisplayVer2 0x00010002
+#define sSSMDisplayVer3 0x00010003
 
 int readSavedGuestSize(const Utf8Str &strStateFilePath, uint32_t u32ScreenId, uint32_t *pu32Width, uint32_t *pu32Height);
Index: /trunk/src/VBox/Main/src-all/DisplayUtils.cpp
===================================================================
--- /trunk/src/VBox/Main/src-all/DisplayUtils.cpp	(revision 35575)
+++ /trunk/src/VBox/Main/src-all/DisplayUtils.cpp	(revision 35576)
@@ -164,5 +164,6 @@
         {
             /* Only the second version is supported. */
-            if (uVersion == sSSMDisplayVer2)
+            if (   uVersion == sSSMDisplayVer2
+                || uVersion == sSSMDisplayVer3)
             {
                 uint32_t cMonitors;
Index: /trunk/src/VBox/Main/src-client/DisplayImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 35575)
+++ /trunk/src/VBox/Main/src-client/DisplayImpl.cpp	(revision 35576)
@@ -350,4 +350,7 @@
         SSMR3PutU32(pSSM, that->maFramebuffers[i].w);
         SSMR3PutU32(pSSM, that->maFramebuffers[i].h);
+        SSMR3PutS32(pSSM, that->maFramebuffers[i].xOrigin);
+        SSMR3PutS32(pSSM, that->maFramebuffers[i].yOrigin);
+        SSMR3PutU32(pSSM, that->maFramebuffers[i].flags);
     }
 }
@@ -359,5 +362,6 @@
 
     if (!(   uVersion == sSSMDisplayVer
-          || uVersion == sSSMDisplayVer2))
+          || uVersion == sSSMDisplayVer2
+          || uVersion == sSSMDisplayVer3))
         return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION;
     Assert(uPass == SSM_PASS_FINAL); NOREF(uPass);
@@ -373,5 +377,6 @@
         SSMR3GetU32(pSSM, &that->maFramebuffers[i].u32MaxFramebufferSize);
         SSMR3GetU32(pSSM, &that->maFramebuffers[i].u32InformationSize);
-        if (uVersion == sSSMDisplayVer2)
+        if (   uVersion == sSSMDisplayVer2
+            || uVersion == sSSMDisplayVer3)
         {
             uint32_t w;
@@ -381,4 +386,16 @@
             that->maFramebuffers[i].w = w;
             that->maFramebuffers[i].h = h;
+        }
+        if (uVersion == sSSMDisplayVer3)
+        {
+            int32_t xOrigin;
+            int32_t yOrigin;
+            uint32_t flags;
+            SSMR3GetS32(pSSM, &xOrigin);
+            SSMR3GetS32(pSSM, &yOrigin);
+            SSMR3GetU32(pSSM, &flags);
+            that->maFramebuffers[i].xOrigin = xOrigin;
+            that->maFramebuffers[i].yOrigin = yOrigin;
+            that->maFramebuffers[i].flags = (uint16_t)flags;
         }
     }
@@ -429,4 +446,6 @@
         maFramebuffers[ul].h = 0;
 
+        maFramebuffers[ul].flags = 0;
+
         maFramebuffers[ul].u16BitsPerPixel = 0;
         maFramebuffers[ul].pu8FramebufferVRAM = NULL;
@@ -504,7 +523,9 @@
 int Display::registerSSM(PVM pVM)
 {
-    /* Newest version adds width and height of the framebuffer */
-    int rc = SSMR3RegisterExternal(pVM, "DisplayData", 0, sSSMDisplayVer2,
-                                   mcMonitors * sizeof(uint32_t) * 5 + sizeof(uint32_t),
+    /* Version 2 adds width and height of the framebuffer; version 3 adds
+     * the framebuffer offset in the virtual desktop and the framebuffer flags.
+     */
+    int rc = SSMR3RegisterExternal(pVM, "DisplayData", 0, sSSMDisplayVer3,
+                                   mcMonitors * sizeof(uint32_t) * 8 + sizeof(uint32_t),
                                    NULL, NULL, NULL,
                                    NULL, displaySSMSave, NULL,
@@ -513,5 +534,6 @@
 
     /*
-     * Register loaders for old saved states where iInstance was 3 * sizeof(uint32_t *).
+     * Register loaders for old saved states where iInstance was
+     * 3 * sizeof(uint32_t *) due to a code mistake.
      */
     rc = SSMR3RegisterExternal(pVM, "DisplayData", 12 /*uInstance*/, sSSMDisplayVer, 0 /*cbGuess*/,
