Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 76011)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 76012)
@@ -197,4 +197,7 @@
 if  "$(KBUILD_TYPE)" != "release" || defined(VBOX_GUI_WITH_EXTRADATA_MANAGER_UI)
  VirtualBox_DEFS          += VBOX_GUI_WITH_EXTRADATA_MANAGER_UI
+endif
+ifdef VBOX_WITH_LESS_VIRTUALBOX_INCLUDING
+ VirtualBox_DEFS          += VBOX_WITH_LESS_VIRTUALBOX_INCLUDING
 endif
 
@@ -267,4 +270,7 @@
   VirtualBoxVM_DEFS          += VBOX_GUI_WITH_EXTRADATA_MANAGER_UI
  endif
+ ifdef VBOX_WITH_LESS_VIRTUALBOX_INCLUDING
+  VirtualBoxVM_DEFS          += VBOX_WITH_LESS_VIRTUALBOX_INCLUDING
+ endif
 
 
@@ -275,5 +281,5 @@
  VBoxGlobal_NAME = VBoxGlobal
  VBoxGlobal_DEFS         =
- VBoxGlobal_DEFS         += VBOX_GUI_LIBRARY
+ VBoxGlobal_DEFS        += VBOX_GUI_LIBRARY
  VBoxGlobal_DEFS.darwin  = VBOX_WS_MAC
  VBoxGlobal_DEFS.freebsd = VBOX_WS_X11
@@ -322,4 +328,7 @@
  if  "$(KBUILD_TYPE)" != "release" || defined(VBOX_GUI_WITH_GUEST_CONTROL_UI)
   VBoxGlobal_DEFS        += VBOX_GUI_WITH_GUEST_CONTROL_UI
+ endif
+ ifdef VBOX_WITH_LESS_VIRTUALBOX_INCLUDING
+  VBoxGlobal_DEFS        += VBOX_WITH_LESS_VIRTUALBOX_INCLUDING
  endif
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.h	(revision 76011)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/COMDefs.h	(revision 76012)
@@ -701,4 +701,10 @@
     }
 
+#ifdef VBOX_WITH_LESS_VIRTUALBOX_INCLUDING
+    virtual IID const &getIID() const = 0;
+#else
+    IID const &getIID() const { return COM_IIDOF(I); }
+#endif
+
     // utility methods
     void createInstance(const CLSID &aClsId)
@@ -709,12 +715,10 @@
             I* pObj = NULL;
 #if !defined(VBOX_WITH_XPCOM)
-            B::mRC = CoCreateInstance(aClsId, NULL, CLSCTX_ALL,
-                                      COM_IIDOF(I), (void **)&pObj);
+            B::mRC = CoCreateInstance(aClsId, NULL, CLSCTX_ALL, getIID(), (void **)&pObj);
 #else
             nsCOMPtr<nsIComponentManager> manager;
             B::mRC = NS_GetComponentManager(getter_AddRefs(manager));
             if (SUCCEEDED(B::mRC))
-                B::mRC = manager->CreateInstance(aClsId, nsnull, NS_GET_IID(I),
-                                                 (void **)&pObj);
+                B::mRC = manager->CreateInstance(aClsId, nsnull, getIID(), (void **)&pObj);
 #endif
 
@@ -746,5 +750,5 @@
         {
             amIface = NULL;
-            B::mRC = aIface->QueryInterface(COM_IIDOF(I), (void **)&amIface);
+            B::mRC = aIface->QueryInterface(getIID(), (void **)&amIface);
             this->release((IUnknown*)aIface);
             setPtr(amIface);
@@ -907,4 +911,10 @@
     }
 
+#ifdef VBOX_WITH_LESS_VIRTUALBOX_INCLUDING
+    virtual IID const &getIID() const = 0;
+#else
+    IID const &getIID() const { return COM_IIDOF(I); }
+#endif
+
     // utility methods
 
@@ -916,12 +926,10 @@
             I* pObj = NULL;
 #if !defined(VBOX_WITH_XPCOM)
-            COMBase::mRC = CoCreateInstance(clsId, NULL, CLSCTX_ALL,
-                                            COM_IIDOF(I), (void **)&pObj);
+            COMBase::mRC = CoCreateInstance(clsId, NULL, CLSCTX_ALL, getIID(), (void **)&pObj);
 #else
             nsCOMPtr<nsIComponentManager> manager;
             COMBase::mRC = NS_GetComponentManager(getter_AddRefs(manager));
             if (SUCCEEDED(COMBase::mRC))
-                COMBase::mRC = manager->CreateInstance(clsId, nsnull, NS_GET_IID(I),
-                                                       (void **)&pObj);
+                COMBase::mRC = manager->CreateInstance(clsId, nsnull, getIID(), (void **)&pObj);
 #endif
 
@@ -948,5 +956,5 @@
         {
             pmIface = NULL;
-            COMBase::mRC = pIface->QueryInterface(COM_IIDOF(I), (void **)&pmIface);
+            COMBase::mRC = pIface->QueryInterface(getIID(), (void **)&pmIface);
             this->release((IUnknown*)pIface);
             setPtr(pmIface);
@@ -1127,8 +1135,14 @@
         return *this;
     }
+
+#ifdef VBOX_WITH_LESS_VIRTUALBOX_INCLUDING
+    IID const &getIID() const RT_OVERRIDE { return COM_IIDOF(IUnknown); }
+#else
+    IID const &getIID() const { return COM_IIDOF(IUnknown); }
+#endif
 };
 
 /** @} */
 
-#endif // __COMDefs_h__
-
+#endif // !__COMDefs_h__
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/COMWrappers.xsl
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/COMWrappers.xsl	(revision 76011)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/COMWrappers.xsl	(revision 76012)
@@ -256,4 +256,7 @@
     <xsl:text> * Generator : src/VBox/Frontends/VirtualBox/src/globals/COMWrappers.xsl&#x0A;</xsl:text>
     <xsl:text> */&#x0A;&#x0A;</xsl:text>
+
+    <xsl:text>#include "VBox/com/VirtualBox.h"&#x0A;&#x0A;</xsl:text>
+
     <xsl:text>/* COM includes: */&#x0A;</xsl:text>
     <xsl:text>#include "COMEnums.h"&#x0A;</xsl:text>
@@ -300,9 +303,13 @@
     <xsl:text>#include "UILibraryDefs.h"&#x0A;&#x0A;</xsl:text>
     <xsl:text>/* VirtualBox interface declarations: */&#x0A;</xsl:text>
-    <xsl:text>#ifndef VBOX_WITH_XPCOM&#x0A;</xsl:text>
-    <xsl:text># include "VirtualBox.h"&#x0A;</xsl:text>
-    <xsl:text>#else /* !VBOX_WITH_XPCOM */&#x0A;</xsl:text>
-    <xsl:text># include "VirtualBox_XPCOM.h"&#x0A;</xsl:text>
-    <xsl:text>#endif /* VBOX_WITH_XPCOM */&#x0A;&#x0A;</xsl:text>
+    <xsl:text>#ifndef VBOX_WITH_LESS_VIRTUALBOX_INCLUDING&#x0A;</xsl:text>
+    <xsl:text># ifndef VBOX_WITH_XPCOM&#x0A;</xsl:text>
+    <xsl:text>#  include "VirtualBox.h"&#x0A;</xsl:text>
+    <xsl:text># else /* !VBOX_WITH_XPCOM */&#x0A;</xsl:text>
+    <xsl:text>#  include "VirtualBox_XPCOM.h"&#x0A;</xsl:text>
+    <xsl:text># endif /* VBOX_WITH_XPCOM */&#x0A;</xsl:text>
+    <xsl:text>#else&#x0A;</xsl:text>
+    <xsl:text>COM_STRUCT_OR_CLASS(</xsl:text><xsl:value-of select="@name"/><xsl:text>);&#x0A;</xsl:text>
+    <xsl:text>#endif&#x0A;</xsl:text>
 
     <!-- Forward declarations: -->
@@ -566,4 +573,8 @@
 <xsl:text> * aIface);&#x0A;</xsl:text>
   <xsl:text>&#x0A;</xsl:text>
+
+  <xsl:text>#ifdef VBOX_WITH_LESS_VIRTUALBOX_INCLUDING&#x0A;</xsl:text>
+  <xsl:text>const IID &amp;getIID() const RT_OVERRIDE;&#x0A;</xsl:text>
+  <xsl:text>#endif&#x0A;&#x0A;</xsl:text>
 
   <xsl:text>    /* Attributes (properties): */&#x0A;</xsl:text>
@@ -754,4 +765,18 @@
 </xsl:template>
 
+<xsl:template name="defineIIDGetter">
+  <xsl:text>#ifdef VBOX_WITH_LESS_VIRTUALBOX_INCLUDING&#x0A;</xsl:text>
+  <xsl:text>const IID &amp;C</xsl:text>
+  <xsl:value-of select="substring(@name,2)"/>
+  <xsl:text>::getIID() const&#x0A;</xsl:text>
+  <xsl:text>{&#x0A;</xsl:text>
+  <xsl:text>    return COM_IIDOF(</xsl:text>
+  <xsl:value-of select="@name"/>
+  <xsl:text>);&#x0A;</xsl:text>
+  <xsl:text>}&#x0A;</xsl:text>
+  <xsl:text>#endif&#x0A;&#x0A;</xsl:text>
+
+</xsl:template>
+
 <xsl:template name="defineAttributes">
 
@@ -994,4 +1019,7 @@
 <xsl:template name="defineMembers">
   <xsl:call-template name="defineConstructors">
+    <xsl:with-param name="iface" select="."/>
+  </xsl:call-template>
+  <xsl:call-template name="defineIIDGetter">
     <xsl:with-param name="iface" select="."/>
   </xsl:call-template>
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h	(revision 76011)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h	(revision 76012)
@@ -36,5 +36,5 @@
 
 /* Other VBox includes: */
-#include <VBox/com/listeners.h>
+#include <VBox/com/listeners.h> /** @todo This drags in VirtualBox.h! It may be possible avoid it for XPCOM, but not COM due to VBoxEventType_T. */
 
 /* Forward declarations: */
