Index: /trunk/src/VBox/Main/VirtualBoxImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/VirtualBoxImpl.cpp	(revision 29848)
+++ /trunk/src/VBox/Main/VirtualBoxImpl.cpp	(revision 29849)
@@ -4487,4 +4487,24 @@
     }
 
+#ifdef RT_OS_WINDOWS
+#if 0
+    // WIP 
+    int nConnections = mVirtualBox->m_vec.GetSize();
+    for (int i=0; i<nConnections; i++)
+    {
+        CComPtr<IUnknown> sp = mVirtualBox->m_vec.GetAt(i);
+        IVirtualBoxCallback* cb = reinterpret_cast<IVirtualBoxCallback*>(sp.p);
+        if (cb != NULL)
+        {
+            HRESULT hrc = handleCallback(cb);
+            if (hrc == VBOX_E_DONT_CALL_AGAIN)
+            {
+                // need to handle that somehow, maybe just set element to 0
+            }
+        }
+    }
+#endif
+#endif
+
     for (CallbackList::const_iterator it = callbacks.begin();
          it != callbacks.end();
Index: /trunk/src/VBox/Main/include/VirtualBoxImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/VirtualBoxImpl.h	(revision 29848)
+++ /trunk/src/VBox/Main/include/VirtualBoxImpl.h	(revision 29849)
@@ -63,4 +63,6 @@
 #ifdef RT_OS_WINDOWS
     , public CComCoClass<VirtualBox, &CLSID_VirtualBox>
+    , public IConnectionPointContainerImpl<VirtualBox>
+    , public IConnectionPointImpl<VirtualBox, &IID_IVirtualBoxCallback, CComDynamicUnkArray>
 #endif
 {
@@ -84,8 +86,15 @@
 
     BEGIN_COM_MAP(VirtualBox)
-        COM_INTERFACE_ENTRY(IDispatch)
+        COM_INTERFACE_ENTRY2(IDispatch, IVirtualBox)
         COM_INTERFACE_ENTRY(ISupportErrorInfo)
         COM_INTERFACE_ENTRY(IVirtualBox)
+        COM_INTERFACE_ENTRY(IConnectionPointContainer) 
     END_COM_MAP()
+
+#ifdef RT_OS_WINDOWS
+    BEGIN_CONNECTION_POINT_MAP(VirtualBox)
+         CONNECTION_POINT_ENTRY(IID_IVirtualBoxCallback)
+    END_CONNECTION_POINT_MAP()
+#endif
 
     // to postpone generation of the default ctor/dtor
