Index: /trunk/src/VBox/Main/ConsoleImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/ConsoleImpl.cpp	(revision 29579)
+++ /trunk/src/VBox/Main/ConsoleImpl.cpp	(revision 29580)
@@ -441,5 +441,5 @@
     unconst(mControl) = aControl;
 
-    memset(&mCallbackData, 0, sizeof(mCallbackData));
+    mCallbackData.clear();
 
     /* Cache essential properties and objects */
@@ -5642,10 +5642,5 @@
 
     if (SUCCEEDED(rc))
-    {
-        /* uninit dynamically allocated members of mCallbackData */
-        if (mCallbackData.mpsc.valid)
-            mCallbackData.mpsc.shape.setNull();
-        memset(&mCallbackData, 0, sizeof(mCallbackData));
-    }
+        mCallbackData.clear();
 
     /* complete the progress */
Index: /trunk/src/VBox/Main/include/ConsoleImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 29579)
+++ /trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 29580)
@@ -699,4 +699,14 @@
         }
         klc;
+
+        void clear()
+        {
+            /* We cannot do memset() on mpsc to avoid cleaning shape's vtable */
+            mpsc.shape.setNull();
+            mpsc.valid = mpsc.visible = mpsc.alpha = false;
+            mpsc.xHot = mpsc.yHot = mpsc.width = mpsc.height = 0;
+            ::memset(&mcc, 0, sizeof mcc);
+            ::memset(&klc, 0, sizeof klc);
+        }
     }
     mCallbackData;
