Index: /trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp	(revision 22725)
+++ /trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp	(revision 22726)
@@ -464,7 +464,4 @@
 static int vbvaEnable (unsigned uScreenId, PVGASTATE pVGAState, VBVACONTEXT *pCtx, VBVABUFFER *pVBVA, uint32_t u32Offset)
 {
-    /* Process any pending orders and empty the VBVA ring buffer. */
-    vbvaFlush (pVGAState, pCtx);
-
     /* @todo old code did a UpdateDisplayAll at this place. */
 
@@ -696,5 +693,5 @@
                 AssertRCReturn(rc, rc);
 
-                rc = SSMR3PutU32 (pSSM, pView->u32VBVAOffset);
+                rc = SSMR3PutU32 (pSSM, pView->pVBVA? pView->u32VBVAOffset: HGSMIOFFSET_VOID);
                 AssertRCReturn(rc, rc);
 
@@ -802,5 +799,6 @@
                 }
 
-                if (pView->u32VBVAOffset == HGSMIOFFSET_VOID)
+                if (   pView->u32VBVAOffset == HGSMIOFFSET_VOID
+                    || pView->screen.u32LineSize == 0) /* Earlier broken saved states. */
                 {
                     pView->pVBVA = NULL;
@@ -838,4 +836,5 @@
             if (pView->pVBVA)
             {
+                vbvaEnable (iView, pVGAState, pCtx, pView->pVBVA, pView->u32VBVAOffset);
                 vbvaResize (pVGAState, pView, &pView->screen);
             }
@@ -1272,4 +1271,7 @@
                 if (pVBVA)
                 {
+                    /* Process any pending orders and empty the VBVA ring buffer. */
+                    vbvaFlush (pVGAState, pCtx);
+
                     rc = vbvaEnable (uScreenId, pVGAState, pCtx, pVBVA, u32Offset);
                 }
