Index: /trunk/src/VBox/Main/VBoxEvents.cpp
===================================================================
--- /trunk/src/VBox/Main/VBoxEvents.cpp	(revision 30392)
+++ /trunk/src/VBox/Main/VBoxEvents.cpp	(revision 30393)
@@ -22,4 +22,6 @@
  *        of VBoxEvent to simplify multiple inheritance ambiguity.
  */
+
+// @todo: add more elements to COM map too
 #define EVENT_CLASS_TRIVIA(klazz, iface) \
   public:                                \
@@ -481,19 +483,19 @@
 NS_IMPL_THREADSAFE_ISUPPORTS1_CI(VBoxEvent, IEvent)
 NS_DECL_CLASSINFO(MachineStateChangeEvent)
-NS_IMPL_THREADSAFE_ISUPPORTS2_CI(MachineStateChangeEvent, IMachineStateChangeEvent, IEvent)
+NS_IMPL_THREADSAFE_ISUPPORTS3_CI(MachineStateChangeEvent, IMachineStateChangeEvent, IMachineEvent, IEvent)
 NS_DECL_CLASSINFO(MachineDataChangeEvent)
-NS_IMPL_THREADSAFE_ISUPPORTS2_CI(MachineDataChangeEvent, IMachineDataChangeEvent, IEvent)
+NS_IMPL_THREADSAFE_ISUPPORTS3_CI(MachineDataChangeEvent, IMachineDataChangeEvent, IMachineEvent, IEvent)
 NS_DECL_CLASSINFO(MachineRegisteredEvent)
-NS_IMPL_THREADSAFE_ISUPPORTS2_CI(MachineRegisteredEvent, IMachineRegisteredEvent, IEvent)
+NS_IMPL_THREADSAFE_ISUPPORTS3_CI(MachineRegisteredEvent, IMachineRegisteredEvent, IMachineEvent, IEvent)
 NS_DECL_CLASSINFO(MachineSessionStateEvent)
-NS_IMPL_THREADSAFE_ISUPPORTS2_CI(MachineSessionStateEvent, IMachineSessionStateEvent, IEvent)
+NS_IMPL_THREADSAFE_ISUPPORTS3_CI(MachineSessionStateEvent, IMachineSessionStateEvent, IMachineEvent, IEvent)
 NS_DECL_CLASSINFO(GuestPropertyChangeEvent)
-NS_IMPL_THREADSAFE_ISUPPORTS2_CI(GuestPropertyChangeEvent, IGuestPropertyChangeEvent, IEvent)
+NS_IMPL_THREADSAFE_ISUPPORTS3_CI(GuestPropertyChangeEvent, IGuestPropertyChangeEvent, IMachineEvent, IEvent)
 NS_DECL_CLASSINFO(SnapshotTakenEvent)
-NS_IMPL_THREADSAFE_ISUPPORTS2_CI(SnapshotTakenEvent, ISnapshotTakenEvent, IEvent)
+NS_IMPL_THREADSAFE_ISUPPORTS4_CI(SnapshotTakenEvent, ISnapshotTakenEvent, ISnapshotEvent, IMachineEvent, IEvent)
 NS_DECL_CLASSINFO(SnapshotDeletedEvent)
-NS_IMPL_THREADSAFE_ISUPPORTS2_CI(SnapshotDeletedEvent, ISnapshotDeletedEvent, IEvent)
+NS_IMPL_THREADSAFE_ISUPPORTS4_CI(SnapshotDeletedEvent, ISnapshotDeletedEvent, ISnapshotEvent, IMachineEvent, IEvent)
 NS_DECL_CLASSINFO(SnapshotChangeEvent)
-NS_IMPL_THREADSAFE_ISUPPORTS2_CI(SnapshotChangeEvent, ISnapshotChangeEvent, IEvent)
+NS_IMPL_THREADSAFE_ISUPPORTS4_CI(SnapshotChangeEvent, ISnapshotChangeEvent, ISnapshotEvent, IMachineEvent, IEvent)
 NS_DECL_CLASSINFO(ExtraDataChangeEvent)
 NS_IMPL_THREADSAFE_ISUPPORTS2_CI(ExtraDataChangeEvent, IExtraDataChangeEvent, IEvent)
Index: /trunk/src/VBox/Main/glue/vboxapi.py
===================================================================
--- /trunk/src/VBox/Main/glue/vboxapi.py	(revision 30392)
+++ /trunk/src/VBox/Main/glue/vboxapi.py	(revision 30393)
@@ -312,5 +312,5 @@
 
     def queryInterface(self, obj, klazzName):
-        from win32com.client import CastTo 
+        from win32com.client import CastTo
         return CastTo(obj, klazzName)
 
@@ -459,6 +459,12 @@
 
     def queryInterface(self, obj, klazzName):
+        d = {}
+        d['obj'] = obj
+        str = ""
+        str += "from VirtualBox_wrappers import "+klazzName+"\n"
+        str += "result = "+klazzName+"(obj.mgr,obj.handle)\n"
         # wrong, need to test if class indeed implements this interface
-        return globals()[klazzName](obj.mgr, obj.handle)
+        exec (str,d,d)
+        return d['result']
 
 class SessionManager:
Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 30392)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 30393)
@@ -124,4 +124,6 @@
 #define NS_IMPL_THREADSAFE_QUERY_INTERFACE2_CI  NS_IMPL_QUERY_INTERFACE2_CI
 #define NS_IMPL_THREADSAFE_QUERY_INTERFACE3_CI  NS_IMPL_QUERY_INTERFACE3_CI
+#define NS_IMPL_THREADSAFE_QUERY_INTERFACE4_CI  NS_IMPL_QUERY_INTERFACE4_CI
+
 
 #ifndef NS_IMPL_THREADSAFE_ISUPPORTS1_CI
@@ -147,4 +149,12 @@
    NS_IMPL_THREADSAFE_QUERY_INTERFACE3_CI(_class, _i1, _i2, _i3)              \
    NS_IMPL_CI_INTERFACE_GETTER3(_class, _i1, _i2, _i3)
+#endif
+
+#ifndef NS_IMPL_THREADSAFE_ISUPPORTS4_CI
+# define NS_IMPL_THREADSAFE_ISUPPORTS4_CI(_class, _i1, _i2, _i3, _i4)         \
+   NS_IMPL_THREADSAFE_ADDREF(_class)                                          \
+   NS_IMPL_THREADSAFE_RELEASE(_class)                                         \
+   NS_IMPL_THREADSAFE_QUERY_INTERFACE4_CI(_class, _i1, _i2, _i3, _i4)         \
+   NS_IMPL_CI_INTERFACE_GETTER4(_class, _i1, _i2, _i3, _i4)
 #endif
 
