Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h	(revision 60259)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h	(revision 60260)
@@ -89,4 +89,5 @@
 template<> bool canConvert<InformationElementType>();
 template<> bool canConvert<PreviewUpdateIntervalType>();
+template<> bool canConvert<EventHandlingType>();
 template<> bool canConvert<GlobalSettingsPageType>();
 template<> bool canConvert<MachineSettingsPageType>();
@@ -165,4 +166,5 @@
 template<> int toInternalInteger(const PreviewUpdateIntervalType &previewUpdateIntervalType);
 template<> PreviewUpdateIntervalType fromInternalInteger<PreviewUpdateIntervalType>(const int &iPreviewUpdateIntervalType);
+template<> EventHandlingType fromInternalString<EventHandlingType>(const QString &strEventHandlingType);
 template<> QString toInternalString(const GlobalSettingsPageType &globalSettingsPageType);
 template<> GlobalSettingsPageType fromInternalString<GlobalSettingsPageType>(const QString &strGlobalSettingsPageType);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 60259)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 60260)
@@ -56,4 +56,5 @@
 template<> bool canConvert<InformationElementType>() { return true; }
 template<> bool canConvert<PreviewUpdateIntervalType>() { return true; }
+template<> bool canConvert<EventHandlingType>() { return true; }
 template<> bool canConvert<GlobalSettingsPageType>() { return true; }
 template<> bool canConvert<MachineSettingsPageType>() { return true; }
@@ -1096,4 +1097,19 @@
 }
 
+/* EventHandlingType <= QString: */
+template<> EventHandlingType fromInternalString<EventHandlingType>(const QString &strEventHandlingType)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;  QList<EventHandlingType> values;
+    keys << "Active";  values << EventHandlingType_Active;
+    keys << "Passive"; values << EventHandlingType_Passive;
+    /* Active type for unknown words: */
+    if (!keys.contains(strEventHandlingType, Qt::CaseInsensitive))
+        return EventHandlingType_Active;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strEventHandlingType, Qt::CaseInsensitive)));
+}
+
 /* QString <= GlobalSettingsPageType: */
 template<> QString toInternalString(const GlobalSettingsPageType &globalSettingsPageType)
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 60259)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 60260)
@@ -28,4 +28,5 @@
 /* General: */
 const char* UIExtraDataDefs::GUI_LanguageId = "GUI/LanguageID";
+const char* UIExtraDataDefs::GUI_EventHandlingType = "GUI/EventHandlingType";
 
 /* Messaging: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 60259)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 60260)
@@ -34,4 +34,7 @@
         /** VBox language ID. */
         extern const char* GUI_LanguageId;
+
+        /** Holds event handling type. */
+        extern const char* GUI_EventHandlingType;
     /** @} */
 
@@ -480,4 +483,11 @@
 };
 
+/** Common UI: Event handling types. */
+enum EventHandlingType
+{
+    EventHandlingType_Active,
+    EventHandlingType_Passive
+};
+
 /** Common UI: Global settings page types. */
 enum GlobalSettingsPageType
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 60259)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 60260)
@@ -173,6 +173,14 @@
         << KVBoxEventType_OnExtraDataCanChange
         << KVBoxEventType_OnExtraDataChanged;
-    eventSourceVirtualBox.RegisterListener(m_comEventListener, vboxEvents, TRUE);
+    eventSourceVirtualBox.RegisterListener(m_comEventListener, vboxEvents,
+        gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE);
     AssertWrapperOk(eventSourceVirtualBox);
+
+    /* If event listener registered as passive one: */
+    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
+    {
+        /* Register event sources in their listeners as well: */
+        m_pQtListener->getWrapped()->registerSource(eventSourceVirtualBox, m_comEventListener);
+    }
 }
 
@@ -195,4 +203,11 @@
 void UIExtraDataEventHandler::cleanupListener()
 {
+    /* If event listener registered as passive one: */
+    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
+    {
+        /* Unregister everything: */
+        m_pQtListener->getWrapped()->unregisterSources();
+    }
+
     /* Make sure VBoxSVC is available: */
     if (!vboxGlobal().isVBoxSVCAvailable())
@@ -1924,4 +1939,5 @@
            << QString()
            << GUI_LanguageId
+           << GUI_EventHandlingType
            << GUI_SuppressMessages << GUI_InvertMessageOption
 #ifdef VBOX_GUI_WITH_NETWORK_MANAGER
@@ -2255,4 +2271,9 @@
 }
 
+EventHandlingType UIExtraDataManager::eventHandlingType()
+{
+    return gpConverter->fromInternalString<EventHandlingType>(extraDataString(GUI_EventHandlingType));
+}
+
 QStringList UIExtraDataManager::suppressedMessages()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 60259)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 60260)
@@ -110,5 +110,5 @@
 #endif /* DEBUG */
 
-    /** @name General
+    /** @name Base
       * @{ */
         /** Returns whether Extra-data Manager cached the map with passed @a strID. */
@@ -133,4 +133,10 @@
           * If valid @a strID is set => applies to machine extra-data, otherwise => to global one. */
         void setExtraDataStringList(const QString &strKey, const QStringList &value, const QString &strID = GlobalID);
+    /** @} */
+
+    /** @name General
+      * @{ */
+        /** Returns event handling type. */
+        EventHandlingType eventHandlingType();
     /** @} */
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp	(revision 60259)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp	(revision 60260)
@@ -23,4 +23,5 @@
 # include "UIConsoleEventHandler.h"
 # include "UIMainEventListener.h"
+# include "UIExtraDataManager.h"
 # include "VBoxGlobal.h"
 # include "UISession.h"
@@ -193,5 +194,14 @@
         << KVBoxEventType_OnCanShowWindow
         << KVBoxEventType_OnShowWindow;
-    eventSource.RegisterListener(m_comEventListener, events, TRUE);
+    eventSource.RegisterListener(m_comEventListener, events,
+        gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE);
+    AssertWrapperOk(eventSource);
+
+    /* If event listener registered as passive one: */
+    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
+    {
+        /* Register event sources in their listeners as well: */
+        m_pQtListener->getWrapped()->registerSource(eventSource, m_comEventListener);
+    }
 }
 
@@ -264,4 +274,11 @@
     /* Make sure session is passed: */
     AssertPtrReturnVoid(m_pSession);
+
+    /* If event listener registered as passive one: */
+    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
+    {
+        /* Unregister everything: */
+        m_pQtListener->getWrapped()->unregisterSources();
+    }
 
     /* Get console: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp	(revision 60259)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/UIVirtualBoxEventHandler.cpp	(revision 60260)
@@ -23,4 +23,5 @@
 # include "UIVirtualBoxEventHandler.h"
 # include "UIMainEventListener.h"
+# include "UIExtraDataManager.h"
 # include "VBoxGlobal.h"
 
@@ -138,5 +139,6 @@
     vboxClientEvents
         << KVBoxEventType_OnVBoxSVCAvailabilityChanged;
-    eventSourceVirtualBoxClient.RegisterListener(m_comEventListener, vboxClientEvents, TRUE);
+    eventSourceVirtualBoxClient.RegisterListener(m_comEventListener, vboxClientEvents,
+        gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE);
     AssertWrapperOk(eventSourceVirtualBoxClient);
 
@@ -158,6 +160,15 @@
         << KVBoxEventType_OnSnapshotChanged
         << KVBoxEventType_OnSnapshotRestored;
-    eventSourceVirtualBox.RegisterListener(m_comEventListener, vboxEvents, TRUE);
+    eventSourceVirtualBox.RegisterListener(m_comEventListener, vboxEvents,
+        gEDataManager->eventHandlingType() == EventHandlingType_Active ? TRUE : FALSE);
     AssertWrapperOk(eventSourceVirtualBox);
+
+    /* If event listener registered as passive one: */
+    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
+    {
+        /* Register event sources in their listeners as well: */
+        m_pQtListener->getWrapped()->registerSource(eventSourceVirtualBoxClient, m_comEventListener);
+        m_pQtListener->getWrapped()->registerSource(eventSourceVirtualBox, m_comEventListener);
+    }
 }
 
@@ -201,4 +212,11 @@
 void UIVirtualBoxEventHandlerProxy::cleanupListener()
 {
+    /* If event listener registered as passive one: */
+    if (gEDataManager->eventHandlingType() == EventHandlingType_Passive)
+    {
+        /* Unregister everything: */
+        m_pQtListener->getWrapped()->unregisterSources();
+    }
+
     /* Get VirtualBox: */
     const CVirtualBox vbox = vboxGlobal().virtualBox();
